{"version":3,"file":"utils.cjs","names":[],"sources":["../../../../src/client/stream/transport/utils.ts"],"sourcesContent":["import type { HeaderValue } from \"./types.js\";\nimport type { CommandResponse, ErrorResponse } from \"@langchain/protocol\";\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nexport const toAbsoluteUrl = (apiUrl: string, path: string) =>\n  new URL(path, apiUrl.endsWith(\"/\") ? apiUrl : `${apiUrl}/`);\n\nexport const toError = (error: unknown) =>\n  // oxlint-disable-next-line no-instanceof/no-instanceof\n  error instanceof Error ? error : new Error(String(error));\n\nexport const toWebSocketUrl = (apiUrl: string): string => {\n  // Extract path from the input (e.g. \"http://host/threads/X/stream\") and\n  // swap the scheme to ws/wss. The caller passes a fully-formed URL\n  // with the desired path.\n  const url = new URL(apiUrl);\n  url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n  url.search = \"\";\n  url.hash = \"\";\n  return url.toString();\n};\n\nexport const hasHeaders = (headers?: Record<string, HeaderValue>) =>\n  Object.values(headers ?? {}).some((value) => value != null);\n\nexport function mergeHeaders(\n  ...headerGroups: Array<\n    HeadersInit | Record<string, HeaderValue> | undefined | null\n  >\n): Headers {\n  const merged = new Headers();\n\n  for (const group of headerGroups) {\n    if (!group) {\n      continue;\n    }\n\n    // oxlint-disable-next-line no-instanceof/no-instanceof\n    if (group instanceof Headers) {\n      group.forEach((value, key) => {\n        merged.set(key, value);\n      });\n      continue;\n    }\n\n    if (Array.isArray(group)) {\n      for (const [key, value] of group) {\n        if (value == null) {\n          merged.delete(key);\n        } else {\n          merged.set(key, value);\n        }\n      }\n      continue;\n    }\n\n    for (const [key, value] of Object.entries(group)) {\n      if (value == null) {\n        merged.delete(key);\n      } else {\n        merged.set(key, value);\n      }\n    }\n  }\n\n  return merged;\n}\n\nexport function isProtocolResponse(\n  value: unknown\n): value is CommandResponse | ErrorResponse {\n  return (\n    isRecord(value) &&\n    typeof value.type === \"string\" &&\n    (value.type === \"success\" || value.type === \"error\")\n  );\n}\n"],"mappings":";AAGA,MAAa,YAAY,UACvB,OAAO,UAAU,YAAY,UAAU;AAEzC,MAAa,iBAAiB,QAAgB,SAC5C,IAAI,IAAI,MAAM,OAAO,SAAS,IAAI,GAAG,SAAS,GAAG,OAAO,GAAG;AAE7D,MAAa,WAAW,UAEtB,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,CAAC;AAE3D,MAAa,kBAAkB,WAA2B;CAIxD,MAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,KAAI,WAAW,IAAI,aAAa,WAAW,SAAS;AACpD,KAAI,SAAS;AACb,KAAI,OAAO;AACX,QAAO,IAAI,UAAU;;AAGvB,MAAa,cAAc,YACzB,OAAO,OAAO,WAAW,EAAE,CAAC,CAAC,MAAM,UAAU,SAAS,KAAK;AAE7D,SAAgB,aACd,GAAG,cAGM;CACT,MAAM,SAAS,IAAI,SAAS;AAE5B,MAAK,MAAM,SAAS,cAAc;AAChC,MAAI,CAAC,MACH;AAIF,MAAI,iBAAiB,SAAS;AAC5B,SAAM,SAAS,OAAO,QAAQ;AAC5B,WAAO,IAAI,KAAK,MAAM;KACtB;AACF;;AAGF,MAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,QAAK,MAAM,CAAC,KAAK,UAAU,MACzB,KAAI,SAAS,KACX,QAAO,OAAO,IAAI;OAElB,QAAO,IAAI,KAAK,MAAM;AAG1B;;AAGF,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,CAC9C,KAAI,SAAS,KACX,QAAO,OAAO,IAAI;MAElB,QAAO,IAAI,KAAK,MAAM;;AAK5B,QAAO;;AAGT,SAAgB,mBACd,OAC0C;AAC1C,QACE,SAAS,MAAM,IACf,OAAO,MAAM,SAAS,aACrB,MAAM,SAAS,aAAa,MAAM,SAAS"}