{"version":3,"sources":["webpack:///./packages/console-telemetry-plugin/src/listeners/index.ts","webpack:///./packages/console-telemetry-plugin/src/listeners/const.ts","webpack:///./packages/console-telemetry-plugin/src/listeners/usage.ts","webpack:///./packages/console-telemetry-plugin/src/listeners/segment.ts"],"names":["TELEMETRY_DISABLED","window","SERVER_FLAGS","telemetry","DISABLED","DEVSANDBOX_DISABLED","TELEMETRY_DEBUG","DEBUG","trackUsage","data","fetch","method","body","JSON","stringify","then","response","ok","console","error","statusText","catch","eventListener","eventType","properties","perspective","event","apiKey","DEVSANDBOX_SEGMENT_API_KEY","SEGMENT_API_KEY","apiHost","SEGMENT_API_HOST","jsHost","SEGMENT_JS_HOST","jsUrl","SEGMENT_JS_URL","encodeURIComponent","debug","analytics","initialize","invoked","methods","factory","e","t","Array","prototype","slice","call","arguments","unshift","push","key","load","document","createElement","type","async","src","n","getElementsByTagName","parentNode","insertBefore","_loadOptions","SNIPPET_VERSION","options","integrations","initSegment","anonymousIP","context","ip","user","otherProperties","id","metadata","name","anonymousIdBuffer","crypto","subtle","digest","TextEncoder","encode","anonymousId","from","Uint8Array","map","b","toString","padStart","join","identify","page","undefined","track"],"mappings":"6FAAA,sH,sHCAO,MAAMA,EACkC,UAAf,QAA9B,EAAmB,QAAnB,EAAAC,OAAOC,oBAAY,eAAEC,iBAAS,eAAEC,WACwB,UAA1B,QAA9B,EAAmB,QAAnB,EAAAH,OAAOC,oBAAY,eAAEC,iBAAS,eAAEE,qBAErBC,EAA4D,UAAZ,QAA9B,EAAmB,QAAnB,EAAAL,OAAOC,oBAAY,eAAEC,iBAAS,eAAEI,Q,8WCE/D,MAAMC,EAAcC,GACXC,MAAM,iBAAkB,CAC7BC,OAAQ,OACRC,KAAMC,KAAKC,UAAUL,KAEpBM,KAAMC,IACAA,EAASC,IAEZC,QAAQC,MAAM,mDAAoDH,EAASI,cAG9EC,MAAOF,IAEND,QAAQC,MAAM,mDAAoDA,KAI3DG,EAAwC,CACnDC,EACAC,IACG,OAAD,6BACF,OAAQD,GACN,IAAK,WAAY,CAEf,MAAME,GAAcD,aAAU,EAAVA,EAAYC,cAAe,UAC/CjB,EAAW,CAAEkB,MAAO,YAAaD,gBACjC,MAEF,IAAK,OAAQ,CAEX,MAAMA,GAAcD,aAAU,EAAVA,EAAYC,cAAe,UAC/CjB,EAAW,CAAEkB,MAAO,kBAAmBD,gBACvC,MAEF,IAAK,sBAAuB,CAC1B,MAAMA,GAAcD,aAAU,EAAVA,EAAYC,cAAe,UAC/CjB,EAAW,CAAEkB,MAAO,sBAAuBD,gBAC3C,Y,wtBCvCN,MAAME,GAC0B,QAA9B,EAAmB,QAAnB,EAAA1B,OAAOC,oBAAY,eAAEC,iBAAS,eAAEyB,8BACF,QAA9B,EAAmB,QAAnB,EAAA3B,OAAOC,oBAAY,eAAEC,iBAAS,eAAE0B,kBAChC,GAMIC,GAAwC,QAA9B,EAAmB,QAAnB,EAAA7B,OAAOC,oBAAY,eAAEC,iBAAS,eAAE4B,mBAAoB,GAG9DC,GAAuC,QAA9B,EAAmB,QAAnB,EAAA/B,OAAOC,oBAAY,eAAEC,iBAAS,eAAE8B,kBAAmB,kBAG5DC,GAC0B,QAA9B,EAAmB,QAAnB,EAAAjC,OAAOC,oBAAY,eAAEC,iBAAS,eAAEgC,iBAChC,WAAWH,qBAA0BI,mBAAmBT,uBA6ErD,KAAsBA,GA3EP,MACd,KAEFT,QAAQmB,MAAM,yDAA0D,CACtEV,SACAG,UACAE,SACAE,UAIJ,MAAMI,EAAcrC,OAAeqC,UAAarC,OAAeqC,WAAa,GAC5E,GAAIA,EAAUC,WACZ,OAEF,GAAID,EAAUE,QAGZ,YADAtB,QAAQC,MAAM,4DAGhBmB,EAAUE,SAAU,EACpBF,EAAUG,QAAU,CAClB,cACA,aACA,YACA,YACA,WACA,WACA,QACA,QACA,QACA,QACA,QACA,QACA,OACA,OACA,MACA,KACA,sBACA,2BACA,iBACA,4BAEFH,EAAUI,QAAU,SAAUC,GAC5B,OAAO,WAEL,MAAMC,EAAIC,MAAMC,UAAUC,MAAMC,KAAKC,WAGrC,OAFAL,EAAEM,QAAQP,GACVL,EAAUa,KAAKP,GACRN,IAGX,IAAK,MAAMc,KAAOd,EAAUG,QAC1BH,EAAUc,GAAOd,EAAUI,QAAQU,GAErCd,EAAUe,KAAO,SAAUD,EAAaT,GACtC,MAAMC,EAAIU,SAASC,cAAc,UACjCX,EAAEY,KAAO,kBACTZ,EAAEa,OAAQ,EACVb,EAAEc,IAAMxB,EACR,MAAMyB,EAAIL,SAASM,qBAAqB,UAAU,GAC9CD,EAAEE,YACJF,EAAEE,WAAWC,aAAalB,EAAGe,GAG/BrB,EAAUyB,aAAepB,GAE3BL,EAAU0B,gBAAkB,SAC5B,MAAMC,EAA+B,GACjCnC,IACFmC,EAAQC,aAAe,CAAE,aAAc,CAAEpC,aAE3CQ,EAAUe,KAAK1B,EAAQsC,IAIvBE,GAGF,MAAMC,EAAc,CAClBC,QAAS,CACPC,GAAI,YAIKhD,EAAwC,CACnDC,EACAC,IACG,OAAD,6B,MACF,GAAI,IAEFN,QAAQmB,MAAM,sDAAuDd,EAAWC,QAGlF,IAAI,KAAuBG,EAG3B,OAAQJ,GACN,IAAK,WACH,CACE,MAAM,KAAEgD,GAA6B/C,EAApBgD,EAAe,EAAKhD,EAA/B,UACAiD,EAAmB,QAAd,EAAAF,aAAI,EAAJA,EAAMG,gBAAQ,eAAEC,KAC3B,GAAIF,EAAI,CAEN,MAAMG,QAA0BC,OAAOC,OAAOC,OAC5C,SACA,IAAIC,aAAcC,OAAOR,IAGrBS,EADmBrC,MAAMsC,KAAK,IAAIC,WAAWR,IACdS,IAAKC,GAAMA,EAAEC,SAAS,IAAIC,SAAS,EAAG,MAAMC,KAAK,IACrFxF,OAAeqC,UAAUoD,SAASR,EAAaV,EAAiBJ,QAGjElD,QAAQC,MACN,6EAIN,MACF,IAAK,OACFlB,OAAeqC,UAAUqD,UAAKC,EAAWpE,EAAY4C,GACtD,MACF,QACGnE,OAAeqC,UAAUuD,MAAMtE,EAAWC,EAAY4C","file":"telemetry-plugin/code-refs/telemetryListeners-chunk-a02e67f246bfad49a2ae.min.js","sourcesContent":["export { eventListener as usage } from './usage';\nexport { eventListener as segment } from './segment';\n","export const TELEMETRY_DISABLED =\n window.SERVER_FLAGS?.telemetry?.DISABLED === 'true' ||\n window.SERVER_FLAGS?.telemetry?.DEVSANDBOX_DISABLED === 'true';\n\nexport const TELEMETRY_DEBUG = window.SERVER_FLAGS?.telemetry?.DEBUG === 'true';\n","import { TelemetryEventListener } from '@console/dynamic-plugin-sdk/src';\n\n/**\n * Fire and forget implementation to send usage data to the backend.\n * See pkg/usage/ for more information.\n */\nconst trackUsage = (data: { event: string; perspective: string }) => {\n return fetch('/metrics/usage', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n .then((response) => {\n if (!response.ok) {\n // eslint-disable-next-line no-console\n console.error('console-telemetry-plugin: unable to track usage:', response.statusText);\n }\n })\n .catch((error) => {\n // eslint-disable-next-line no-console\n console.error('console-telemetry-plugin: unable to track usage:', error);\n });\n};\n\nexport const eventListener: TelemetryEventListener = async (\n eventType: string,\n properties?: any,\n) => {\n switch (eventType) {\n case 'identify': {\n // identify is triggered once per \"browser load\" ~= page_view\n const perspective = properties?.perspective || 'unknown';\n trackUsage({ event: 'page_view', perspective });\n break;\n }\n case 'page': {\n // page URL changed, incl. history.push / react-router.push/replace ~= page_impression\n const perspective = properties?.perspective || 'unknown';\n trackUsage({ event: 'page_impression', perspective });\n break;\n }\n case 'Perspective Changed': {\n const perspective = properties?.perspective || 'unknown';\n trackUsage({ event: 'perspective_changed', perspective });\n break;\n }\n default:\n // ignore all other events\n }\n};\n","import { TelemetryEventListener } from '@console/dynamic-plugin-sdk/src';\nimport { TELEMETRY_DISABLED, TELEMETRY_DEBUG } from './const';\n\n/** Segmnet API Key that looks like a hash */\nconst apiKey =\n window.SERVER_FLAGS?.telemetry?.DEVSANDBOX_SEGMENT_API_KEY ||\n window.SERVER_FLAGS?.telemetry?.SEGMENT_API_KEY ||\n '';\n\n/**\n * Segment `apiHost` parameter that should have the format like `api.segment.io/v1`.\n * Is not defined here so that Segment can change it.\n */\nconst apiHost = window.SERVER_FLAGS?.telemetry?.SEGMENT_API_HOST || '';\n\n/** Segment JS host. Default: `cdn.segment.com` */\nconst jsHost = window.SERVER_FLAGS?.telemetry?.SEGMENT_JS_HOST || 'cdn.segment.com';\n\n/** Full segment JS URL */\nconst jsUrl =\n window.SERVER_FLAGS?.telemetry?.SEGMENT_JS_URL ||\n `https://${jsHost}/analytics.js/v1/${encodeURIComponent(apiKey)}/analytics.min.js`;\n\nconst initSegment = () => {\n if (TELEMETRY_DEBUG) {\n // eslint-disable-next-line no-console\n console.debug('console-telemetry-plugin: initialize segment API with:', {\n apiKey,\n apiHost,\n jsHost,\n jsUrl,\n });\n }\n // eslint-disable-next-line no-multi-assign\n const analytics = ((window as any).analytics = (window as any).analytics || []);\n if (analytics.initialize) {\n return;\n }\n if (analytics.invoked) {\n // eslint-disable-next-line no-console\n console.error('console-telemetry-plugin: segment snippet included twice');\n return;\n }\n analytics.invoked = true;\n analytics.methods = [\n 'trackSubmit',\n 'trackClick',\n 'trackLink',\n 'trackForm',\n 'pageview',\n 'identify',\n 'reset',\n 'group',\n 'track',\n 'ready',\n 'alias',\n 'debug',\n 'page',\n 'once',\n 'off',\n 'on',\n 'addSourceMiddleware',\n 'addIntegrationMiddleware',\n 'setAnonymousId',\n 'addDestinationMiddleware',\n ];\n analytics.factory = function (e: string) {\n return function () {\n // eslint-disable-next-line prefer-rest-params\n const t = Array.prototype.slice.call(arguments);\n t.unshift(e);\n analytics.push(t);\n return analytics;\n };\n };\n for (const key of analytics.methods) {\n analytics[key] = analytics.factory(key);\n }\n analytics.load = function (key: string, e: Event) {\n const t = document.createElement('script');\n t.type = 'text/javascript';\n t.async = true;\n t.src = jsUrl;\n const n = document.getElementsByTagName('script')[0];\n if (n.parentNode) {\n n.parentNode.insertBefore(t, n);\n }\n // eslint-disable-next-line no-underscore-dangle\n analytics._loadOptions = e;\n };\n analytics.SNIPPET_VERSION = '4.13.1';\n const options: Record = {};\n if (apiHost) {\n options.integrations = { 'Segment.io': { apiHost } };\n }\n analytics.load(apiKey, options);\n};\n\nif (!TELEMETRY_DISABLED && apiKey) {\n initSegment();\n}\n\nconst anonymousIP = {\n context: {\n ip: '0.0.0.0',\n },\n};\n\nexport const eventListener: TelemetryEventListener = async (\n eventType: string,\n properties?: any,\n) => {\n if (TELEMETRY_DEBUG) {\n // eslint-disable-next-line no-console\n console.debug('console-telemetry-plugin: received telemetry event:', eventType, properties);\n return;\n }\n if (TELEMETRY_DISABLED || !apiKey) {\n return;\n }\n switch (eventType) {\n case 'identify':\n {\n const { user, ...otherProperties } = properties;\n const id = user?.metadata?.name;\n if (id) {\n // Use SHA1 hash algorithm to anonymize the user\n const anonymousIdBuffer = await crypto.subtle.digest(\n 'SHA-1',\n new TextEncoder().encode(id),\n );\n const anonymousIdArray = Array.from(new Uint8Array(anonymousIdBuffer));\n const anonymousId = anonymousIdArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n (window as any).analytics.identify(anonymousId, otherProperties, anonymousIP);\n } else {\n // eslint-disable-next-line no-console\n console.error(\n 'console-telemetry-plugin: unable to identify as no user name was provided',\n );\n }\n }\n break;\n case 'page':\n (window as any).analytics.page(undefined, properties, anonymousIP);\n break;\n default:\n (window as any).analytics.track(eventType, properties, anonymousIP);\n }\n};\n"],"sourceRoot":""}