{"version":3,"sources":["../../../../src/adapters/a2a/agents/utils.ts"],"names":["dataUriToBase64","uri","startsWith","undefined","commaIndex","indexOf","header","slice","length","payload","isBase64","endsWith","mediaType","split","normalized","replace","test","data","Buffer","from","toString","decodeURIComponent","convertA2AMessageToFrameworkMessage","input","msg","kind","role","UserMessage","metadata","AssistantMessage","part","parts","content","push","type","text","JSON","stringify","fileData","file","bytes","mimeType","filename","name","parsed"],"mappings":";;;;;;AAqBA,SAASA,gBAAgBC,GAAAA,EAAW;AAClC,EAAA,IAAI,CAACA,GAAAA,CAAIC,UAAAA,CAAW,OAAA,CAAA,EAAU;AAC5B,IAAA,OAAOC,MAAAA;AACT,EAAA;AACA,EAAA,MAAMC,UAAAA,GAAaH,GAAAA,CAAII,OAAAA,CAAQ,GAAA,CAAA;AAC/B,EAAA,IAAID,eAAe,EAAA,EAAI;AACrB,IAAA,OAAOD,MAAAA;AACT,EAAA;AACA,EAAA,IAAIG,MAAAA,GAASL,GAAAA,CAAIM,KAAAA,CAAM,OAAA,CAAQC,QAAQJ,UAAAA,CAAAA;AACvC,EAAA,MAAMK,OAAAA,GAAUR,GAAAA,CAAIM,KAAAA,CAAMH,UAAAA,GAAa,CAAA,CAAA;AACvC,EAAA,MAAMM,QAAAA,GAAWJ,MAAAA,CAAOK,QAAAA,CAAS,SAAA,CAAA;AACjC,EAAA,IAAID,QAAAA,EAAU;AACZJ,IAAAA,MAAAA,GAASA,MAAAA,CAAOC,KAAAA,CAAM,CAAA,EAAG,CAAC,UAAUC,MAAM,CAAA;AAC5C,EAAA;AACA,EAAA,MAAMI,YAAYN,MAAAA,CAAOO,KAAAA,CAAM,GAAA,CAAA,CAAK,CAAA,CAAA,IAAMV,MAAAA;AAC1C,EAAA,IAAI;AACF,IAAA,IAAIO,QAAAA,EAAU;AACZ,MAAA,MAAMI,UAAAA,GAAaL,OAAAA,CAAQM,OAAAA,CAAQ,KAAA,EAAO,EAAA,CAAA;AAC1C,MAAA,IAAI,CAAC,wBAAA,CAAyBC,IAAAA,CAAKF,UAAAA,CAAAA,EAAa;AAC9C,QAAA,OAAOX,KAAAA,CAAAA;AACT,MAAA;AACA,MAAA,OAAO;AAAEc,QAAAA,IAAAA,EAAMC,OAAOC,IAAAA,CAAKL,UAAAA,EAAY,QAAA,CAAA,CAAUM,SAAS,QAAA,CAAA;AAAWR,QAAAA;AAAU,OAAA;AACjF,IAAA;AACA,IAAA,OAAO;MACLK,IAAAA,EAAMC,MAAAA,CAAOC,KAAKE,kBAAAA,CAAmBZ,OAAAA,GAAU,OAAA,CAAA,CAASW,SAAS,QAAA,CAAA;AACjER,MAAAA;AACF,KAAA;EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAOT,MAAAA;AACT,EAAA;AACF;AA9BSH,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;AAgCF,SAASsB,oCAAoCC,KAAAA,EAA4B;AAC9E,EAAA,MAAMC,GAAAA,GACJ,UAAUD,KAAAA,IAASA,KAAAA,CAAME,SAAS,SAAA,IAAaF,KAAAA,CAAMG,SAAS,MAAA,GAC1D,IAAIC,wBAAY,EAAA,EAAIJ,MAAMK,QAAQ,CAAA,GAClC,IAAIC,4BAAAA,CAAiB,EAAA,EAAIN,KAAAA,CAAMK,QAAQ,CAAA;AAE7C,EAAA,KAAA,MAAWE,IAAAA,IAAQP,MAAMQ,KAAAA,EAAO;AAC9B,IAAA,IAAID,IAAAA,CAAKL,SAAS,MAAA,EAAQ;AACxBD,MAAAA,GAAAA,CAAIQ,QAAQC,IAAAA,CAAK;QAAEC,IAAAA,EAAM,MAAA;AAAQC,QAAAA,IAAAA,EAAML,IAAAA,CAAKK;OAAK,CAAA;IACnD,CAAA,MAAA,IAAWL,IAAAA,CAAKL,SAAS,MAAA,EAAQ;AAC/BD,MAAAA,GAAAA,CAAIQ,QAAQC,IAAAA,CAAK;QAAEC,IAAAA,EAAM,MAAA;AAAQC,QAAAA,IAAAA,EAAMC,IAAAA,CAAKC,SAAAA,CAAUP,IAAAA,CAAKb,IAAAA,EAAM,MAAM,CAAA;OAAG,CAAA;IAC5E,CAAA,MAAA,IAAWa,IAAAA,CAAKL,SAAS,MAAA,EAAQ;AAC/B,MAAA,IAAIa,QAAAA;AACJ,MAAA,IAAI,OAAA,IAAWR,KAAKS,IAAAA,EAAM;AACxBD,QAAAA,QAAAA,GAAW;UACTJ,IAAAA,EAAM,MAAA;AACNjB,UAAAA,IAAAA,EAAMa,KAAKS,IAAAA,CAAKC,KAAAA;UAChB5B,SAAAA,EAAWkB,IAAAA,CAAKS,KAAKE,QAAAA,IAAY,0BAAA;AACjCC,UAAAA,QAAAA,EAAUZ,KAAKS,IAAAA,CAAKI;AACtB,SAAA;MACF,CAAA,MAAO;AAGL,QAAA,MAAMC,MAAAA,GAAS5C,eAAAA,CAAgB8B,IAAAA,CAAKS,IAAAA,CAAKtC,GAAG,CAAA;AAC5CqC,QAAAA,QAAAA,GAAW;UACTJ,IAAAA,EAAM,MAAA;AACNjB,UAAAA,IAAAA,EAAM2B,MAAAA,GAASA,MAAAA,CAAO3B,IAAAA,GAAOa,IAAAA,CAAKS,IAAAA,CAAKtC,GAAAA;AACvCW,UAAAA,SAAAA,EAAWkB,IAAAA,CAAKS,IAAAA,CAAKE,QAAAA,IAAYG,MAAAA,EAAQhC,SAAAA,IAAa,0BAAA;AACtD8B,UAAAA,QAAAA,EAAUZ,KAAKS,IAAAA,CAAKI;AACtB,SAAA;AACF,MAAA;AAEAnB,MAAAA,GAAAA,CAAIQ,OAAAA,CAAQC,KAAKK,QAAAA,CAAAA;AACnB,IAAA;AACF,EAAA;AAEA,EAAA,OAAOd,GAAAA;AACT;AArCgBF,MAAAA,CAAAA,mCAAAA,EAAAA,qCAAAA,CAAAA","file":"utils.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { AssistantMessage, Message, UserMessage } from \"@/backend/message.js\";\nimport { Message as A2AMessage, Artifact } from \"@a2a-js/sdk\";\nimport { FilePart } from \"ai\";\n\ninterface ParsedDataUri {\n  data: string;\n  mediaType?: string;\n}\n\n/**\n * Convert an RFC 2397 `data:` URI to base64 data and its media type.\n *\n * Returns `undefined` when `uri` is not a well-formed data URI, so callers can fall\n * back to treating it as a regular, fetchable URL. Percent-encoded payloads are\n * re-encoded to base64 so callers always receive base64 data.\n */\nfunction dataUriToBase64(uri: string): ParsedDataUri | undefined {\n  if (!uri.startsWith(\"data:\")) {\n    return undefined;\n  }\n  const commaIndex = uri.indexOf(\",\");\n  if (commaIndex === -1) {\n    return undefined; // malformed data URI\n  }\n  let header = uri.slice(\"data:\".length, commaIndex);\n  const payload = uri.slice(commaIndex + 1);\n  const isBase64 = header.endsWith(\";base64\");\n  if (isBase64) {\n    header = header.slice(0, -\";base64\".length);\n  }\n  const mediaType = header.split(\";\")[0] || undefined;\n  try {\n    if (isBase64) {\n      const normalized = payload.replace(/\\s/g, \"\");\n      if (!/^[A-Za-z0-9+/]*={0,2}$/.test(normalized)) {\n        return undefined; // not valid base64 -> treat as a regular URL\n      }\n      return { data: Buffer.from(normalized, \"base64\").toString(\"base64\"), mediaType };\n    }\n    return {\n      data: Buffer.from(decodeURIComponent(payload), \"utf-8\").toString(\"base64\"),\n      mediaType,\n    };\n  } catch {\n    return undefined;\n  }\n}\n\nexport function convertA2AMessageToFrameworkMessage(input: A2AMessage | Artifact): Message {\n  const msg =\n    \"kind\" in input && input.kind === \"message\" && input.role === \"user\"\n      ? new UserMessage([], input.metadata)\n      : new AssistantMessage([], input.metadata);\n\n  for (const part of input.parts) {\n    if (part.kind === \"text\") {\n      msg.content.push({ type: \"text\", text: part.text });\n    } else if (part.kind === \"data\") {\n      msg.content.push({ type: \"text\", text: JSON.stringify(part.data, null, 2) });\n    } else if (part.kind === \"file\") {\n      let fileData: FilePart;\n      if (\"bytes\" in part.file) {\n        fileData = {\n          type: \"file\",\n          data: part.file.bytes,\n          mediaType: part.file.mimeType || \"application/octet-stream\",\n          filename: part.file.name,\n        };\n      } else {\n        // Inline data: URIs as base64 so non-publicly-accessible content travels with\n        // the message; leave regular (fetchable) URLs untouched.\n        const parsed = dataUriToBase64(part.file.uri);\n        fileData = {\n          type: \"file\",\n          data: parsed ? parsed.data : part.file.uri,\n          mediaType: part.file.mimeType || parsed?.mediaType || \"application/octet-stream\",\n          filename: part.file.name,\n        };\n      }\n\n      msg.content.push(fileData);\n    }\n  }\n\n  return msg;\n}\n"]}