{"version":3,"file":"hitl-interrupt-payload.cjs","names":[],"sources":["../../src/ui/hitl-interrupt-payload.ts"],"sourcesContent":["/**\n * Human-in-the-loop interrupt values from the LangGraph API may use\n * snake_case (Python server) while JS clients and LangChain types expect\n * camelCase. Normalize known HITL fields on interrupt payloads at read time.\n */\n\n/**\n * Copy a plain object and expose both casing styles for a field.\n *\n * camelCase is treated as canonical when both keys are present so newer\n * consumers keep the current behavior while legacy snake_case access still\n * resolves to the same value.\n */\nfunction aliasCasePair(item: unknown, camel: string, snake: string): unknown {\n  if (item === null || typeof item !== \"object\" || Array.isArray(item)) {\n    return item;\n  }\n  const o = item as Record<string, unknown>;\n  const merged = o[camel] ?? o[snake];\n  const next: Record<string, unknown> = { ...o };\n  if (merged !== undefined) {\n    next[camel] = merged;\n    next[snake] = merged;\n  }\n  return next;\n}\n\nfunction mapArrayAlias(raw: unknown, camel: string, snake: string): unknown {\n  if (!Array.isArray(raw)) return raw;\n  return raw.map((item) => aliasCasePair(item, camel, snake));\n}\n\n/**\n * If `value` looks like a HITL request object, expose both the new camelCase\n * keys and the deprecated snake_case aliases so older apps keep working while\n * migrating to the new shape.\n */\nexport function normalizeHitlInterruptPayload(value: unknown): unknown {\n  if (value === null || typeof value !== \"object\") {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    return value.map((v) => normalizeHitlInterruptPayload(v));\n  }\n  const obj = value as Record<string, unknown>;\n  const isHitlLike =\n    \"action_requests\" in obj ||\n    \"actionRequests\" in obj ||\n    \"review_configs\" in obj ||\n    \"reviewConfigs\" in obj;\n  if (!isHitlLike) {\n    return value;\n  }\n\n  const next: Record<string, unknown> = { ...obj };\n\n  const actionRequestsRaw = obj.actionRequests ?? obj.action_requests;\n  if (actionRequestsRaw !== undefined) {\n    const actionRequests = mapArrayAlias(\n      actionRequestsRaw,\n      \"name\",\n      \"action_name\"\n    );\n    next.actionRequests = actionRequests;\n    next.action_requests = actionRequests;\n  }\n  const reviewConfigsRaw = obj.reviewConfigs ?? obj.review_configs;\n  if (reviewConfigsRaw !== undefined) {\n    const reviewConfigs = mapArrayAlias(\n      reviewConfigsRaw,\n      \"allowedDecisions\",\n      \"allowed_decisions\"\n    );\n    next.reviewConfigs = reviewConfigs;\n    next.review_configs = reviewConfigs;\n  }\n  return next;\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,SAAS,cAAc,MAAe,OAAe,OAAwB;AAC3E,KAAI,SAAS,QAAQ,OAAO,SAAS,YAAY,MAAM,QAAQ,KAAK,CAClE,QAAO;CAET,MAAM,IAAI;CACV,MAAM,SAAS,EAAE,UAAU,EAAE;CAC7B,MAAM,OAAgC,EAAE,GAAG,GAAG;AAC9C,KAAI,WAAW,KAAA,GAAW;AACxB,OAAK,SAAS;AACd,OAAK,SAAS;;AAEhB,QAAO;;AAGT,SAAS,cAAc,KAAc,OAAe,OAAwB;AAC1E,KAAI,CAAC,MAAM,QAAQ,IAAI,CAAE,QAAO;AAChC,QAAO,IAAI,KAAK,SAAS,cAAc,MAAM,OAAO,MAAM,CAAC;;;;;;;AAQ7D,SAAgB,8BAA8B,OAAyB;AACrE,KAAI,UAAU,QAAQ,OAAO,UAAU,SACrC,QAAO;AAET,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,KAAK,MAAM,8BAA8B,EAAE,CAAC;CAE3D,MAAM,MAAM;AAMZ,KAAI,EAJF,qBAAqB,OACrB,oBAAoB,OACpB,oBAAoB,OACpB,mBAAmB,KAEnB,QAAO;CAGT,MAAM,OAAgC,EAAE,GAAG,KAAK;CAEhD,MAAM,oBAAoB,IAAI,kBAAkB,IAAI;AACpD,KAAI,sBAAsB,KAAA,GAAW;EACnC,MAAM,iBAAiB,cACrB,mBACA,QACA,cACD;AACD,OAAK,iBAAiB;AACtB,OAAK,kBAAkB;;CAEzB,MAAM,mBAAmB,IAAI,iBAAiB,IAAI;AAClD,KAAI,qBAAqB,KAAA,GAAW;EAClC,MAAM,gBAAgB,cACpB,kBACA,oBACA,oBACD;AACD,OAAK,gBAAgB;AACrB,OAAK,iBAAiB;;AAExB,QAAO"}