{"version":3,"sources":["jsdelivr-header.js","/gh/weavel-ai/react-chat-integration@master/logger.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,aAAe,SAAS,cAAc,aAAa,WACnD,qBAAuB,WAEvB,aAAe,KACnB,MAAM,EAAK,IACT,KAAK,MAA4B,OAArB,EAAI,KAAK,WAClB,SAAS,IACT,UAAU,GACf,MAAO,GAAG,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,MAAO,MAAO,KAAM,EAGjE,eAAkB,GACtB,aAAa,QAAQ,WAA0B,KAEjD,SAAS,eAAe,EAAK,GAC3B,aAAa,QAAQ,WAA0B,IAAO,EACxD,CAEA,SAAS,cACP,MAAM,EAAY,eAGlB,OAFA,eAAe,YAAa,GAC5B,eAAe,iBAAkB,GAC1B,CACT,CAEA,SAAS,YAAW,OAClB,EAAM,UACN,EAAS,YACT,EAAW,KACX,EAAI,QACJ,EAAO,UACP,IAEK,aAKL,MAAM,2CAA4C,CAChD,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,cAAe,UAAU,gBAE3B,KAAM,KAAK,UAAU,CACnB,QAAS,EACT,SAAU,EACV,cAAe,EACf,OACA,UACA,gBAhBF,QAAQ,MAAM,6BAmBlB,CAEA,SAAS,cAAc,GACrB,IAAI,EAAU,GAyBd,OAxBA,EAAS,SAAQ,CAAC,EAAS,KACzB,OAAQ,EAAQ,MACd,IAAK,OACH,EAAQ,KAAK,SAAS,IACpB,EAAK,SAAS,SAAS,IACrB,GAAW,EAAM,IAAI,IAEvB,GAAW,IAAI,IAEjB,MACF,IAAK,QACH,GAAW,UACX,GAAW,QAAQ,EAAQ,QAC3B,MACF,QACE,GAAW,EAAQ,KACnB,OAAO,KAAK,GAAS,SAAS,IAChB,SAAR,IACJ,GAAW,GAAG,MAAQ,EAAQ,OAAQ,IAIxC,EAAI,EAAS,OAAS,IAAG,GAAW,KAAI,IAEvC,CACT,CAEA,OAAO,iBAAiB,WAAY,IAClC,IACE,GAA0B,iBAAf,EAAM,KAAmB,OACpC,MAAM,EAAO,KAAK,MAAM,EAAM,MAC9B,GAAI,SAAU,EAAM,CAElB,GAAkB,aADA,EAAK,KAAK,MAAM,cAAc,GAClB,CAC5B,IAAI,EAAY,eAAe,aACE,WAA7B,EAAK,QAAQ,OAAO,OACtB,EAAY,eAEd,MAAM,EAAS,EAAK,QAAQ,QAAQ,OAC9B,EAAc,EAAK,QAAQ,QAAQ,MACnB,EAAY,MAChC,eAAe,mBAAqB,GAExB,SAAS,IACrB,IAAI,EACA,EAAI,QACN,EAAU,EAAI,QACL,EAAI,WACb,EAAU,cAAc,EAAI,WAE9B,WAAW,CACT,SACA,YACA,YAAa,EAAI,GACjB,KAAM,EAAI,KACV,UACA,UAAW,IAAI,KAAK,EAAI,WAAW,eACnC,IAEJ,eAAe,iBAAkB,EAAY,OAC/C,CACF,CACF,CAAE,MAAO,GACP,QAAQ,IAAI,wBAAyB,EAAO,EAAM,KACpD","file":"/gh/weavel-ai/react-chat-integration@master/logger.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /gh/weavel-ai/react-chat-integration@master/logger.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const weavelApiKey = document.currentScript.getAttribute(\"api-key\");\nconst LOCAL_STORAGE_PREFIX = \"@weavel/\";\n\nconst generateUUID = () => {\n  const s4 = () =>\n    Math.floor((1 + Math.random()) * 0x10000)\n      .toString(16)\n      .substring(1);\n  return `${s4()}${s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`;\n};\n\nconst getStorageItem = (key) =>\n  localStorage.getItem(`${LOCAL_STORAGE_PREFIX}${key}`);\n\nfunction setStorageItem(key, value) {\n  localStorage.setItem(`${LOCAL_STORAGE_PREFIX}${key}`, value);\n}\n\nfunction createTrace() {\n  const traceUUID = generateUUID();\n  setStorageItem(\"traceUUID\", traceUUID);\n  setStorageItem(\"loggedMessages\", 0);\n  return traceUUID;\n}\n\nfunction logMessage({\n  userId,\n  traceUUID,\n  traceDataId,\n  role,\n  content,\n  timestamp,\n}) {\n  if (!weavelApiKey) {\n    console.error(\"Weavel API key is not set.\");\n    return;\n  }\n\n  fetch(\"https://api.weavel.ai/capture/trace_data\", {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${weavelApiKey}`,\n    },\n    body: JSON.stringify({\n      user_id: userId,\n      trace_id: traceUUID,\n      trace_data_id: traceDataId,\n      role,\n      content,\n      timestamp,\n    }),\n  });\n}\n\nfunction parseMessages(messages) {\n  let content = \"\";\n  messages.forEach((message, i) => {\n    switch (message.type) {\n      case \"text\":\n        message.text.forEach((text) => {\n          text.children.forEach((child) => {\n            content += child.text;\n          });\n          content += \"\\n\";\n        });\n        break;\n      case \"image\":\n        content += \"Image\\n\";\n        content += `URL: ${message.url}\\n`;\n        break;\n      default:\n        content += message.type;\n        Object.keys(message).forEach((key) => {\n          if (key === \"type\") return;\n          content += `${key}: ${message[key]}\\n`;\n        });\n        break;\n    }\n    if (i < messages.length - 1) content += \"\\n\";\n  });\n  return content;\n}\n\nwindow.addEventListener(\"message\", (event) => {\n  try {\n    if (typeof event.data !== \"string\") return;\n    const data = JSON.parse(event.data);\n    if (\"type\" in data) {\n      const eventName = data.type.split(\"voiceflow:\")[1];\n      if (eventName === \"interact\") {\n        let traceUUID = getStorageItem(\"traceUUID\");\n        if (data.payload.action.type === \"launch\") {\n          traceUUID = createTrace();\n        }\n        const userId = data.payload.session.userID;\n        const allMessages = data.payload.session.turns;\n        const messagesToLog = allMessages.slice(\n          getStorageItem(\"loggedMessages\") || 0\n        );\n        messagesToLog.forEach((msg) => {\n          let content;\n          if (msg.message) {\n            content = msg.message;\n          } else if (msg.messages) {\n            content = parseMessages(msg.messages);\n          }\n          logMessage({\n            userId,\n            traceUUID,\n            traceDataId: msg.id,\n            role: msg.type,\n            content,\n            timestamp: new Date(msg.timestamp).toISOString(),\n          });\n        });\n        setStorageItem(\"loggedMessages\", allMessages.length);\n      }\n    }\n  } catch (error) {\n    console.log(\"Error parsing message\", error, event.data);\n  }\n});\n"]}