{"version":3,"file":"eventBridge.mjs","names":[],"sources":["../../src/transport/eventBridge.ts"],"sourcesContent":["import { display } from '../tools/display'\nimport { globalObject } from '../tools/globalObject'\nimport type { DefaultPrivacyLevel } from '../domain/configuration'\n\nexport interface BrowserWindowWithEventBridge {\n  DatadogEventBridge?: DatadogEventBridge\n}\n\nexport interface DatadogEventBridge {\n  getCapabilities?(): string\n  getPrivacyLevel?(): DefaultPrivacyLevel\n  getIsTraceSampled?(): 'true' | 'false' | 'null'\n  getAllowedWebViewHosts(): string\n  send(msg: string): void\n}\n\nexport const enum BridgeCapability {\n  RECORDS = 'records',\n  PROFILES = 'profiles',\n}\n\nexport function getEventBridge<T, E>() {\n  const eventBridgeGlobal = getEventBridgeGlobal()\n\n  if (!eventBridgeGlobal) {\n    return\n  }\n\n  return {\n    getCapabilities() {\n      return JSON.parse(eventBridgeGlobal.getCapabilities?.() || '[]') as BridgeCapability[]\n    },\n    getPrivacyLevel() {\n      return eventBridgeGlobal.getPrivacyLevel?.()\n    },\n    getIsTraceSampled() {\n      return JSON.parse(eventBridgeGlobal.getIsTraceSampled?.() || 'null') as boolean | null\n    },\n    getAllowedWebViewHosts() {\n      return JSON.parse(eventBridgeGlobal.getAllowedWebViewHosts()) as string[]\n    },\n    send(eventType: T, event: E, viewId?: string) {\n      const view = viewId ? { id: viewId } : undefined\n      eventBridgeGlobal.send(JSON.stringify({ eventType, event, view }))\n    },\n  }\n}\n\nexport function bridgeSupports(capability: BridgeCapability): boolean {\n  const bridge = getEventBridge()\n  return !!bridge && bridge.getCapabilities().includes(capability)\n}\n\nexport function canUseEventBridge(currentHost = globalObject.location?.hostname): boolean {\n  const bridge = getEventBridge()\n  return bridge?.getAllowedWebViewHosts().some((entry) => matchesHostEntry(currentHost, entry)) ?? false\n}\n\nexport function matchesHostEntry(host: string, entry: string): boolean {\n  if (!entry.includes('*')) {\n    return host === entry || host.endsWith(`.${entry}`)\n  }\n  const parts = entry.split('*')\n  if (parts.length !== 2) {\n    display.error(`Invalid WebView host pattern \"${entry}\": only one wildcard (*) is supported.`)\n    return false\n  }\n  const [prefix, suffix] = parts\n  return host.length > prefix.length + suffix.length && host.startsWith(prefix) && host.endsWith(suffix)\n}\n\nfunction getEventBridgeGlobal() {\n  return (globalObject as BrowserWindowWithEventBridge).DatadogEventBridge\n}\n"],"mappings":";;;AAgBA,IAAkB,mBAAX,yBAAA,kBAAA;CACL,iBAAA,aAAA;CACA,iBAAA,cAAA;;AACF,EAAA,CAAA,CAAA;AAEA,SAAgB,iBAAuB;CACrC,MAAM,oBAAoB,qBAAqB;CAE/C,IAAI,CAAC,mBACH;CAGF,OAAO;EACL,kBAAkB;GAChB,OAAO,KAAK,MAAM,kBAAkB,kBAAkB,KAAK,IAAI;EACjE;EACA,kBAAkB;GAChB,OAAO,kBAAkB,kBAAkB;EAC7C;EACA,oBAAoB;GAClB,OAAO,KAAK,MAAM,kBAAkB,oBAAoB,KAAK,MAAM;EACrE;EACA,yBAAyB;GACvB,OAAO,KAAK,MAAM,kBAAkB,uBAAuB,CAAC;EAC9D;EACA,KAAK,WAAc,OAAU,QAAiB;GAC5C,MAAM,OAAO,SAAS,EAAE,IAAI,OAAO,IAAI,KAAA;GACvC,kBAAkB,KAAK,KAAK,UAAU;IAAE;IAAW;IAAO;GAAK,CAAC,CAAC;EACnE;CACF;AACF;AAEA,SAAgB,eAAe,YAAuC;CACpE,MAAM,SAAS,eAAe;CAC9B,OAAO,CAAC,CAAC,UAAU,OAAO,gBAAgB,CAAC,CAAC,SAAS,UAAU;AACjE;AAEA,SAAgB,kBAAkB,cAAc,aAAa,UAAU,UAAmB;CAExF,OADe,eACH,CAAC,EAAE,uBAAuB,CAAC,CAAC,MAAM,UAAU,iBAAiB,aAAa,KAAK,CAAC,KAAK;AACnG;AAEA,SAAgB,iBAAiB,MAAc,OAAwB;CACrE,IAAI,CAAC,MAAM,SAAS,GAAG,GACrB,OAAO,SAAS,SAAS,KAAK,SAAS,IAAI,OAAO;CAEpD,MAAM,QAAQ,MAAM,MAAM,GAAG;CAC7B,IAAI,MAAM,WAAW,GAAG;EACtB,QAAQ,MAAM,iCAAiC,MAAM,uCAAuC;EAC5F,OAAO;CACT;CACA,MAAM,CAAC,QAAQ,UAAU;CACzB,OAAO,KAAK,SAAS,OAAO,SAAS,OAAO,UAAU,KAAK,WAAW,MAAM,KAAK,KAAK,SAAS,MAAM;AACvG;AAEA,SAAS,uBAAuB;CAC9B,OAAQ,aAA8C;AACxD"}