@hellpig/anarchy-tracking 1.6.1 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -0
- package/README.md +1 -1
- package/dist/Constants/Masks/index.es.js +2 -0
- package/dist/Constants/Masks/index.es.js.map +1 -0
- package/dist/Services/BrowserTrackingService/index.es.js +2 -0
- package/dist/Services/BrowserTrackingService/index.es.js.map +1 -0
- package/dist/Services/DesktopPreloadTrackingService/index.es.js +2 -0
- package/dist/Services/DesktopPreloadTrackingService/index.es.js.map +1 -0
- package/dist/Services/DesktopTrackingService/index.es.js +2 -0
- package/dist/Services/DesktopTrackingService/index.es.js.map +1 -0
- package/dist/Utils/DynamicDataUtils/index.es.js +2 -0
- package/dist/Utils/DynamicDataUtils/index.es.js.map +1 -0
- package/dist/Utils/IntegrationsBrowser/index.es.js +2 -0
- package/dist/Utils/IntegrationsBrowser/index.es.js.map +1 -0
- package/dist/Utils/IntegrationsNode/index.es.js +2 -0
- package/dist/Utils/IntegrationsNode/index.es.js.map +1 -0
- package/dist/Utils/ScrubEvent/index.es.js +2 -0
- package/dist/Utils/ScrubEvent/index.es.js.map +1 -0
- package/dist/Utils/ScrubsBrowser/index.es.js +2 -0
- package/dist/Utils/ScrubsBrowser/index.es.js.map +1 -0
- package/dist/Utils/ScrubsDesktop/index.es.js +2 -0
- package/dist/Utils/ScrubsDesktop/index.es.js.map +1 -0
- package/dist/Utils/browser/index.es.js +2 -0
- package/dist/Utils/browser/index.es.js.map +1 -0
- package/dist/Utils/desktop/index.es.js +2 -0
- package/dist/Utils/desktop/index.es.js.map +1 -0
- package/dist/anarchy-shared/src/Utils/CheckUtils/index.es.js +2 -0
- package/dist/anarchy-shared/src/Utils/CheckUtils/index.es.js.map +1 -0
- package/dist/anarchy-shared/src/Utils/FileUtils/index.es.js +2 -0
- package/dist/anarchy-shared/src/Utils/FileUtils/index.es.js.map +1 -0
- package/dist/{chunks/TrackingUtils.js → anarchy-shared/src/Utils/TrackingUtils/index.es.js} +2 -2
- package/dist/anarchy-shared/src/Utils/TrackingUtils/index.es.js.map +1 -0
- package/dist/browser/index.es.js +1 -1
- package/dist/browser/index.es.js.map +1 -1
- package/dist/desktop/index.es.js +1 -1
- package/dist/desktop/index.es.js.map +1 -1
- package/dist/desktop-preload/index.es.js +1 -1
- package/dist/desktop-preload/index.es.js.map +1 -1
- package/dist/index/index.es.js +1 -1
- package/legal/NOTICE.md +8 -8
- package/legal/THIRD_PARTY_LICENSES.md +8 -8
- package/package.json +2 -3
- package/dist/chunks/TrackingUtils.js.map +0 -1
- package/dist/chunks/browser.js +0 -2
- package/dist/chunks/browser.js.map +0 -1
- package/dist/chunks/index.js +0 -2
- package/dist/chunks/index.js.map +0 -1
- /package/dist/{anarchy-tracking/src/Constants → Constants}/Masks.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Constants → Constants}/index.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Models → Models}/TMetaData.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Models → Models}/TTrackingService.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Models → Models}/index.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Services → Services}/BrowserTrackingService.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Services → Services}/DesktopPreloadTrackingService.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Services → Services}/DesktopTrackingService.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Utils → Utils}/DynamicDataUtils.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Utils → Utils}/IntegrationsBrowser.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Utils → Utils}/IntegrationsNode.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Utils → Utils}/ScrubEvent.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Utils → Utils}/ScrubsBrowser.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Utils → Utils}/ScrubsDesktop.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Utils → Utils}/browser.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Utils → Utils}/desktop.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/Utils → Utils}/index.d.ts +0 -0
- /package/dist/{anarchy-tracking/src/browser.d.ts → browser.d.ts} +0 -0
- /package/dist/{anarchy-tracking/src/desktop-preload.d.ts → desktop-preload.d.ts} +0 -0
- /package/dist/{anarchy-tracking/src/desktop.d.ts → desktop.d.ts} +0 -0
- /package/dist/{anarchy-tracking/src/index.d.ts → index.d.ts} +0 -0
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -31,4 +31,4 @@ SOFTWARE.
|
|
|
31
31
|
See local files `LICENSE`, `CHANGELOG`, `NOTICE` (pointer), and files in `./legal`:
|
|
32
32
|
`DISCLAIMER`, `EULA`, `PRIVACY`, `SECURITY`, `NOTICE` (full), `THIRD_PARTY_LICENSES`.
|
|
33
33
|
|
|
34
|
-
Contacts — Privacy:
|
|
34
|
+
Contacts — Privacy: pnf036+anarchy@gmail.com, Security: pnf036+anarchy_security@gmail.com.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../src/Constants/Masks.ts"],"sourcesContent":["export const HiddenField = 'hidden' as const;\n"],"names":["HiddenField"],"mappings":"AAAO,MAAMA,YAAc"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{isDefined}from"../../anarchy-shared/src/Utils/CheckUtils/index.es.js";import{parseDistName}from"../../anarchy-shared/src/Utils/TrackingUtils/index.es.js";import{mutateEventWithDynamicData}from"../../Utils/DynamicDataUtils/index.es.js";import{rewriteFramesIntegrationBrowser}from"../../Utils/IntegrationsBrowser/index.es.js";import{scrubEvent}from"../../Utils/ScrubEvent/index.es.js";import{scrubUserPathsBrowser}from"../../Utils/ScrubsBrowser/index.es.js";import{init,setTags,captureException}from"@sentry/browser";function BrowserTrackingService(options,metaData,dynamicContextFn,dynamicTagsFn){let isStarted=!1;const defaultOptions={beforeSend(event,_hint){const result=scrubUserPathsBrowser(scrubEvent(event));return mutateEventWithDynamicData(result,dynamicContextFn,dynamicTagsFn),result},integrations:[rewriteFramesIntegrationBrowser()],tracesSampleRate:0,sendDefaultPii:!1},client=init({...defaultOptions,...options});isDefined(metaData)&&setTags(metaData);const{platform:platform,arch:arch}=parseDistName(options?.dist);setTags({layer:"web",errorTracker:"BrowserTrackingService",os:platform,arch:arch});const onError=ev=>{captureException(ev?.error??ev)},onRejection=ev=>{captureException(ev?.reason??ev)};function start(onErrorHandler=onError,onRejectionHandler=onRejection){isStarted||(isStarted=!0,window.addEventListener("error",onErrorHandler),window.addEventListener("unhandledrejection",onRejectionHandler))}return isDefined(client)&&start(),{captureException:captureException,start:start,stop:function(onErrorHandler=onError,onRejectionHandler=onRejection){isStarted=!1,window.removeEventListener("error",onErrorHandler),window.removeEventListener("unhandledrejection",onRejectionHandler)},isStarted:()=>isStarted}}export{BrowserTrackingService};
|
|
2
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../src/Services/BrowserTrackingService.ts"],"sourcesContent":["import { isDefined, parseDistName } from '@Anarchy/Shared/Utils';\nimport type { TMetaData, TTrackingService } from '@Anarchy/Tracking/Models';\nimport { mutateEventWithDynamicData } from '@Anarchy/Tracking/Utils/DynamicDataUtils';\nimport { rewriteFramesIntegrationBrowser } from '@Anarchy/Tracking/Utils/IntegrationsBrowser';\nimport { scrubEvent } from '@Anarchy/Tracking/Utils/ScrubEvent';\nimport { scrubUserPathsBrowser } from '@Anarchy/Tracking/Utils/ScrubsBrowser';\nimport type { BrowserOptions, EventHint } from '@sentry/browser';\nimport { captureException, init, setTags } from '@sentry/browser';\nimport type { Client, ErrorEvent, Primitive } from '@sentry/core';\n\nexport function BrowserTrackingService(\n options?: BrowserOptions,\n metaData?: TMetaData,\n dynamicContextFn?: () => Record<string, any>,\n dynamicTagsFn?: () => Record<string, Primitive>\n): TTrackingService {\n let isStarted: boolean = false;\n\n const defaultOptions: BrowserOptions = {\n beforeSend(event: ErrorEvent, _hint: EventHint): PromiseLike<ErrorEvent | null> | ErrorEvent | null {\n const result: ErrorEvent = scrubUserPathsBrowser(scrubEvent(event));\n mutateEventWithDynamicData(result, dynamicContextFn, dynamicTagsFn);\n return result;\n },\n integrations: [rewriteFramesIntegrationBrowser()],\n tracesSampleRate: 0,\n //Important: make sure this is false if you want anonymous reports (no IPs, etc. for GDPR and similar acts).\n sendDefaultPii: false\n };\n\n const client: Client | undefined = init({\n ...defaultOptions,\n ...options\n });\n\n if (isDefined(metaData)) setTags(metaData);\n const { platform, arch } = parseDistName(options?.dist);\n setTags({\n layer: 'web',\n errorTracker: 'BrowserTrackingService',\n os: platform,\n arch\n });\n\n const onError = (ev: any): void => void captureException(ev?.error ?? ev);\n const onRejection = (ev: PromiseRejectionEvent): void => void captureException((ev as PromiseRejectionEvent)?.reason ?? ev);\n\n function start(onErrorHandler: (ev: any) => void = onError, onRejectionHandler: (ev: PromiseRejectionEvent) => void = onRejection): void {\n if (isStarted) return;\n isStarted = true;\n window.addEventListener('error', onErrorHandler);\n window.addEventListener('unhandledrejection', onRejectionHandler);\n }\n\n function stop(onErrorHandler: (ev: any) => void = onError, onRejectionHandler: (ev: PromiseRejectionEvent) => void = onRejection): void {\n isStarted = false;\n window.removeEventListener('error', onErrorHandler);\n window.removeEventListener('unhandledrejection', onRejectionHandler);\n }\n\n if (isDefined(client)) start();\n\n return {\n captureException,\n start,\n stop,\n isStarted: () => isStarted\n };\n}\n"],"names":["BrowserTrackingService","options","metaData","dynamicContextFn","dynamicTagsFn","isStarted","defaultOptions","beforeSend","event","_hint","result","scrubUserPathsBrowser","scrubEvent","mutateEventWithDynamicData","integrations","rewriteFramesIntegrationBrowser","tracesSampleRate","sendDefaultPii","client","init","isDefined","setTags","platform","arch","parseDistName","dist","layer","errorTracker","os","onError","ev","captureException","error","onRejection","reason","start","onErrorHandler","onRejectionHandler","window","addEventListener","stop","removeEventListener"],"mappings":"0gBAUO,SAASA,uBACdC,QACAC,SACAC,iBACAC,eAEA,IAAIC,WAAqB,EAEzB,MAAMC,eAAiC,CACrC,UAAAC,CAAWC,MAAmBC,OAC5B,MAAMC,OAAqBC,sBAAsBC,WAAWJ,QAE5D,OADAK,2BAA2BH,OAAQP,iBAAkBC,eAC9CM,MACT,EACAI,aAAc,CAACC,mCACfC,iBAAkB,EAElBC,gBAAgB,GAGZC,OAA6BC,KAAK,IACnCb,kBACAL,UAGDmB,UAAUlB,WAAWmB,QAAQnB,UACjC,MAAMoB,SAAEA,SAAAC,KAAUA,MAASC,cAAcvB,SAASwB,MAClDJ,QAAQ,CACNK,MAAO,MACPC,aAAc,yBACdC,GAAIN,SACJC,YAGF,MAAMM,QAAWC,KAAuBC,iBAAiBD,IAAIE,OAASF,KAChEG,YAAeH,KAAyCC,iBAAkBD,IAA8BI,QAAUJ,KAExH,SAASK,MAAMC,eAAoCP,QAASQ,mBAA0DJ,aAChH5B,YACJA,WAAY,EACZiC,OAAOC,iBAAiB,QAASH,gBACjCE,OAAOC,iBAAiB,qBAAsBF,oBAChD,CAUA,OAFIjB,UAAUF,SAASiB,QAEhB,CACLJ,kCACAI,YACAK,KAXF,SAAcJ,eAAoCP,QAASQ,mBAA0DJ,aACnH5B,WAAY,EACZiC,OAAOG,oBAAoB,QAASL,gBACpCE,OAAOG,oBAAoB,qBAAsBJ,mBACnD,EAQEhC,UAAW,IAAMA,UAErB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{isDefined}from"../../anarchy-shared/src/Utils/CheckUtils/index.es.js";import{parseDistName}from"../../anarchy-shared/src/Utils/TrackingUtils/index.es.js";import{mutateEventWithDynamicData}from"../../Utils/DynamicDataUtils/index.es.js";import{rewriteFramesIntegrationBrowser}from"../../Utils/IntegrationsBrowser/index.es.js";import{scrubEvent}from"../../Utils/ScrubEvent/index.es.js";import{scrubUserPathsBrowser}from"../../Utils/ScrubsBrowser/index.es.js";import{init,setTags,captureException}from"@sentry/electron/renderer";function DesktopPreloadTrackingService(options,metaData,dynamicContextFn,dynamicTagsFn){let isStarted=!1;const defaultOptions={beforeSend(event,_hint){const result=scrubUserPathsBrowser(scrubEvent(event));return mutateEventWithDynamicData(result,dynamicContextFn,dynamicTagsFn),result},integrations:[rewriteFramesIntegrationBrowser()],tracesSampleRate:0,sendDefaultPii:!1};init({...defaultOptions,...options}),isDefined(metaData)&&setTags(metaData);const{platform:platform,arch:arch}=parseDistName(options?.dist);setTags({layer:"electron-preload",initLayer:"electron-preload",errorTracker:"DesktopPreloadTrackingService",errorTrackerInitializer:"DesktopPreloadTrackingService",os:platform,arch:arch});const onError=ev=>{captureException(ev?.error??ev)},onRejection=ev=>{captureException(ev?.reason??ev)};function start(onErrorHandler=onError,onRejectionHandler=onRejection){isStarted||(isStarted=!0,globalThis.window?.addEventListener?.("error",onErrorHandler),globalThis.window?.addEventListener?.("unhandledrejection",onRejectionHandler),globalThis.process?.on?.("uncaughtException",onErrorHandler),globalThis.process?.on?.("unhandledRejection",onRejectionHandler))}return start(),{captureException:captureException,start:start,stop:function(onErrorHandler=onError,onRejectionHandler=onRejection){isStarted=!1,globalThis.window?.removeEventListener?.("error",onErrorHandler),globalThis.window?.removeEventListener?.("unhandledrejection",onRejectionHandler),globalThis.process?.off?.("uncaughtException",onErrorHandler),globalThis.process?.off?.("unhandledRejection",onRejectionHandler)},isStarted:()=>isStarted}}export{DesktopPreloadTrackingService};
|
|
2
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../src/Services/DesktopPreloadTrackingService.ts"],"sourcesContent":["import { isDefined, parseDistName } from '@Anarchy/Shared/Utils';\nimport type { TMetaData, TTrackingService } from '@Anarchy/Tracking/Models';\nimport { mutateEventWithDynamicData } from '@Anarchy/Tracking/Utils/DynamicDataUtils';\nimport { rewriteFramesIntegrationBrowser } from '@Anarchy/Tracking/Utils/IntegrationsBrowser';\nimport { scrubEvent } from '@Anarchy/Tracking/Utils/ScrubEvent';\nimport { scrubUserPathsBrowser } from '@Anarchy/Tracking/Utils/ScrubsBrowser';\nimport type { Integration, Primitive } from '@sentry/core';\nimport type { ErrorEvent, EventHint } from '@sentry/electron/renderer';\nimport { captureException, init, setTags } from '@sentry/electron/renderer';\n\nexport function DesktopPreloadTrackingService(\n options?: Record<string, any>,\n metaData?: TMetaData,\n dynamicContextFn?: () => Record<string, any>,\n dynamicTagsFn?: () => Record<string, Primitive>\n): TTrackingService {\n let isStarted: boolean = false;\n\n const defaultOptions = {\n beforeSend(event: ErrorEvent, _hint: EventHint): PromiseLike<ErrorEvent | null> | ErrorEvent | null {\n const result: ErrorEvent = scrubUserPathsBrowser(scrubEvent(event as any)) as ErrorEvent;\n mutateEventWithDynamicData(result as any, dynamicContextFn, dynamicTagsFn);\n return result;\n },\n integrations: [rewriteFramesIntegrationBrowser() as () => Integration],\n tracesSampleRate: 0,\n //Important: make sure this is false if you want anonymous reports (no IPs, etc. for GDPR and similar acts).\n sendDefaultPii: false\n };\n\n init({\n ...defaultOptions,\n ...options\n });\n\n if (isDefined(metaData)) setTags(metaData);\n const { platform, arch } = parseDistName(options?.dist);\n setTags({\n layer: 'electron-preload',\n initLayer: 'electron-preload',\n errorTracker: 'DesktopPreloadTrackingService',\n errorTrackerInitializer: 'DesktopPreloadTrackingService',\n os: platform,\n arch\n });\n\n const onError = (ev: any): void => void captureException(ev?.error ?? ev);\n const onRejection = (ev: PromiseRejectionEvent): void => void captureException((ev as PromiseRejectionEvent)?.reason ?? ev);\n\n function start(onErrorHandler: (ev: any) => void = onError, onRejectionHandler: (ev: PromiseRejectionEvent) => void = onRejection): void {\n if (isStarted) return;\n isStarted = true;\n\n globalThis.window?.addEventListener?.('error', onErrorHandler);\n globalThis.window?.addEventListener?.('unhandledrejection', onRejectionHandler);\n globalThis.process?.on?.('uncaughtException', onErrorHandler);\n globalThis.process?.on?.('unhandledRejection', onRejectionHandler);\n }\n\n function stop(onErrorHandler: (ev: any) => void = onError, onRejectionHandler: (ev: PromiseRejectionEvent) => void = onRejection): void {\n isStarted = false;\n globalThis.window?.removeEventListener?.('error', onErrorHandler);\n globalThis.window?.removeEventListener?.('unhandledrejection', onRejectionHandler);\n globalThis.process?.off?.('uncaughtException', onErrorHandler);\n globalThis.process?.off?.('unhandledRejection', onRejectionHandler);\n }\n\n start();\n\n return {\n captureException,\n start,\n stop,\n isStarted: () => isStarted\n };\n}\n"],"names":["DesktopPreloadTrackingService","options","metaData","dynamicContextFn","dynamicTagsFn","isStarted","defaultOptions","beforeSend","event","_hint","result","scrubUserPathsBrowser","scrubEvent","mutateEventWithDynamicData","integrations","rewriteFramesIntegrationBrowser","tracesSampleRate","sendDefaultPii","init","isDefined","setTags","platform","arch","parseDistName","dist","layer","initLayer","errorTracker","errorTrackerInitializer","os","onError","ev","captureException","error","onRejection","reason","start","onErrorHandler","onRejectionHandler","globalThis","window","addEventListener","process","on","stop","removeEventListener","off"],"mappings":"ohBAUO,SAASA,8BACdC,QACAC,SACAC,iBACAC,eAEA,IAAIC,WAAqB,EAEzB,MAAMC,eAAiB,CACrB,UAAAC,CAAWC,MAAmBC,OAC5B,MAAMC,OAAqBC,sBAAsBC,WAAWJ,QAE5D,OADAK,2BAA2BH,OAAeP,iBAAkBC,eACrDM,MACT,EACAI,aAAc,CAACC,mCACfC,iBAAkB,EAElBC,gBAAgB,GAGlBC,KAAK,IACAZ,kBACAL,UAGDkB,UAAUjB,WAAWkB,QAAQlB,UACjC,MAAMmB,SAAEA,SAAAC,KAAUA,MAASC,cAActB,SAASuB,MAClDJ,QAAQ,CACNK,MAAO,mBACPC,UAAW,mBACXC,aAAc,gCACdC,wBAAyB,gCACzBC,GAAIR,SACJC,YAGF,MAAMQ,QAAWC,KAAuBC,iBAAiBD,IAAIE,OAASF,KAChEG,YAAeH,KAAyCC,iBAAkBD,IAA8BI,QAAUJ,KAExH,SAASK,MAAMC,eAAoCP,QAASQ,mBAA0DJ,aAChH7B,YACJA,WAAY,EAEZkC,WAAWC,QAAQC,mBAAmB,QAASJ,gBAC/CE,WAAWC,QAAQC,mBAAmB,qBAAsBH,oBAC5DC,WAAWG,SAASC,KAAK,oBAAqBN,gBAC9CE,WAAWG,SAASC,KAAK,qBAAsBL,oBACjD,CAYA,OAFAF,QAEO,CACLJ,kCACAI,YACAQ,KAbF,SAAcP,eAAoCP,QAASQ,mBAA0DJ,aACnH7B,WAAY,EACZkC,WAAWC,QAAQK,sBAAsB,QAASR,gBAClDE,WAAWC,QAAQK,sBAAsB,qBAAsBP,oBAC/DC,WAAWG,SAASI,MAAM,oBAAqBT,gBAC/CE,WAAWG,SAASI,MAAM,qBAAsBR,mBAClD,EAQEjC,UAAW,IAAMA,UAErB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{isDefined}from"../../anarchy-shared/src/Utils/CheckUtils/index.es.js";import{parseDistName}from"../../anarchy-shared/src/Utils/TrackingUtils/index.es.js";import{mutateEventWithDynamicData}from"../../Utils/DynamicDataUtils/index.es.js";import{rewriteFramesIntegrationNode}from"../../Utils/IntegrationsNode/index.es.js";import{scrubEvent}from"../../Utils/ScrubEvent/index.es.js";import{scrubUserPathsDesktop}from"../../Utils/ScrubsDesktop/index.es.js";import{init,setTags,captureException}from"@sentry/electron/main";function DesktopTrackingService(options,metaData,dynamicContextFn,dynamicTagsFn){let isStarted=!1;const defaultOptions={beforeSend(event,_hint){const result=scrubUserPathsDesktop(scrubEvent(event));return mutateEventWithDynamicData(result,dynamicContextFn,dynamicTagsFn),result},integrations:[rewriteFramesIntegrationNode()],tracesSampleRate:0,sendDefaultPii:!1};init({...defaultOptions,...options}),isDefined(metaData)&&setTags(metaData);const{platform:platform,arch:arch}=parseDistName(options?.dist);setTags({layer:"electron-main",errorTracker:"DesktopTrackingService",os:platform,arch:arch});const onError=ev=>{captureException(ev?.error??ev)},onRejection=ev=>{captureException(ev?.reason??ev)};function start(onErrorHandler=onError,onRejectionHandler=onRejection){isStarted||(isStarted=!0,process.on("uncaughtException",onErrorHandler),process.on("unhandledRejection",onRejectionHandler))}return start(),{captureException:captureException,start:start,stop:function(onErrorHandler=onError,onRejectionHandler=onRejection){isStarted=!1,process.off("uncaughtException",onErrorHandler),process.off("unhandledRejection",onRejectionHandler)},isStarted:()=>isStarted}}export{DesktopTrackingService};
|
|
2
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../src/Services/DesktopTrackingService.ts"],"sourcesContent":["import { isDefined, parseDistName } from '@Anarchy/Shared/Utils';\nimport type { TMetaData, TTrackingService } from '@Anarchy/Tracking/Models';\nimport { mutateEventWithDynamicData } from '@Anarchy/Tracking/Utils/DynamicDataUtils';\nimport { rewriteFramesIntegrationNode } from '@Anarchy/Tracking/Utils/IntegrationsNode';\nimport { scrubEvent } from '@Anarchy/Tracking/Utils/ScrubEvent';\nimport { scrubUserPathsDesktop } from '@Anarchy/Tracking/Utils/ScrubsDesktop';\nimport type { Primitive } from '@sentry/core';\nimport type { ElectronMainOptions } from '@sentry/electron/esm/main';\nimport type { ErrorEvent, EventHint } from '@sentry/electron/main';\nimport { captureException, init, setTags } from '@sentry/electron/main';\n\nexport function DesktopTrackingService(\n options?: ElectronMainOptions,\n metaData?: TMetaData,\n dynamicContextFn?: () => Record<string, any>,\n dynamicTagsFn?: () => Record<string, Primitive>\n): TTrackingService {\n let isStarted: boolean = false;\n\n const defaultOptions: ElectronMainOptions = {\n beforeSend(event: ErrorEvent, _hint: EventHint): PromiseLike<ErrorEvent | null> | ErrorEvent | null {\n const result: ErrorEvent = scrubUserPathsDesktop(scrubEvent(event as any) as ErrorEvent);\n mutateEventWithDynamicData(result as any, dynamicContextFn, dynamicTagsFn);\n return result;\n },\n integrations: [rewriteFramesIntegrationNode()],\n tracesSampleRate: 0,\n //Important: make sure this is false if you want anonymous reports (no IPs, etc. for GDPR and similar acts).\n sendDefaultPii: false\n };\n\n init({\n ...defaultOptions,\n ...options\n });\n\n if (isDefined(metaData)) setTags(metaData);\n const { platform, arch } = parseDistName(options?.dist);\n setTags({\n layer: 'electron-main',\n errorTracker: 'DesktopTrackingService',\n os: platform,\n arch\n });\n\n const onError = (ev: any): void => void captureException(ev?.error ?? ev);\n const onRejection = (ev: PromiseRejectionEvent): void => void captureException((ev as PromiseRejectionEvent)?.reason ?? ev);\n\n function start(onErrorHandler: (ev: any) => void = onError, onRejectionHandler: (ev: PromiseRejectionEvent) => void = onRejection): void {\n if (isStarted) return;\n isStarted = true;\n process.on('uncaughtException', onErrorHandler);\n process.on('unhandledRejection', onRejectionHandler);\n }\n\n function stop(onErrorHandler: (ev: any) => void = onError, onRejectionHandler: (ev: PromiseRejectionEvent) => void = onRejection): void {\n isStarted = false;\n process.off('uncaughtException', onErrorHandler);\n process.off('unhandledRejection', onRejectionHandler);\n }\n\n start();\n\n return {\n captureException,\n start,\n stop,\n isStarted: () => isStarted\n };\n}\n"],"names":["DesktopTrackingService","options","metaData","dynamicContextFn","dynamicTagsFn","isStarted","defaultOptions","beforeSend","event","_hint","result","scrubUserPathsDesktop","scrubEvent","mutateEventWithDynamicData","integrations","rewriteFramesIntegrationNode","tracesSampleRate","sendDefaultPii","init","isDefined","setTags","platform","arch","parseDistName","dist","layer","errorTracker","os","onError","ev","captureException","error","onRejection","reason","start","onErrorHandler","onRejectionHandler","process","on","stop","off"],"mappings":"0gBAWO,SAASA,uBACdC,QACAC,SACAC,iBACAC,eAEA,IAAIC,WAAqB,EAEzB,MAAMC,eAAsC,CAC1C,UAAAC,CAAWC,MAAmBC,OAC5B,MAAMC,OAAqBC,sBAAsBC,WAAWJ,QAE5D,OADAK,2BAA2BH,OAAeP,iBAAkBC,eACrDM,MACT,EACAI,aAAc,CAACC,gCACfC,iBAAkB,EAElBC,gBAAgB,GAGlBC,KAAK,IACAZ,kBACAL,UAGDkB,UAAUjB,WAAWkB,QAAQlB,UACjC,MAAMmB,SAAEA,SAAAC,KAAUA,MAASC,cAActB,SAASuB,MAClDJ,QAAQ,CACNK,MAAO,gBACPC,aAAc,yBACdC,GAAIN,SACJC,YAGF,MAAMM,QAAWC,KAAuBC,iBAAiBD,IAAIE,OAASF,KAChEG,YAAeH,KAAyCC,iBAAkBD,IAA8BI,QAAUJ,KAExH,SAASK,MAAMC,eAAoCP,QAASQ,mBAA0DJ,aAChH3B,YACJA,WAAY,EACZgC,QAAQC,GAAG,oBAAqBH,gBAChCE,QAAQC,GAAG,qBAAsBF,oBACnC,CAUA,OAFAF,QAEO,CACLJ,kCACAI,YACAK,KAXF,SAAcJ,eAAoCP,QAASQ,mBAA0DJ,aACnH3B,WAAY,EACZgC,QAAQG,IAAI,oBAAqBL,gBACjCE,QAAQG,IAAI,qBAAsBJ,mBACpC,EAQE/B,UAAW,IAAMA,UAErB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{isDefined}from"../../anarchy-shared/src/Utils/CheckUtils/index.es.js";function mutateEventWithDynamicData(result,dynamicContextFn,dynamicTagsFn){if(isDefined(dynamicContextFn)&&(result.contexts={...result.contexts??{},extra:dynamicContextFn()}),isDefined(dynamicTagsFn)){const dynamicTags=dynamicTagsFn();Object.keys(dynamicTags).forEach(key=>{result.tags={...result.tags??{},[key]:dynamicTags[key]}})}}export{mutateEventWithDynamicData};
|
|
2
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../src/Utils/DynamicDataUtils.ts"],"sourcesContent":["import { isDefined } from '@Anarchy/Shared/Utils';\nimport type { ErrorEvent, Primitive } from '@sentry/core';\n\nexport function mutateEventWithDynamicData(result: ErrorEvent, dynamicContextFn?: () => Record<string, any>, dynamicTagsFn?: () => Record<string, Primitive>): void {\n // eslint-disable-next-line functional/immutable-data\n if (isDefined(dynamicContextFn)) result.contexts = { ...(result.contexts ?? {}), extra: dynamicContextFn() };\n if (isDefined(dynamicTagsFn)) {\n const dynamicTags = dynamicTagsFn();\n // eslint-disable-next-line functional/immutable-data\n Object.keys(dynamicTags).forEach((key: string): void => void (result.tags = { ...(result.tags ?? {}), [key]: dynamicTags[key] }));\n }\n}\n"],"names":["mutateEventWithDynamicData","result","dynamicContextFn","dynamicTagsFn","isDefined","contexts","extra","dynamicTags","Object","keys","forEach","key","tags"],"mappings":"6EAGO,SAASA,2BAA2BC,OAAoBC,iBAA8CC,eAG3G,GADIC,UAAUF,oBAAmBD,OAAOI,SAAW,IAAMJ,OAAOI,UAAY,CAAA,EAAKC,MAAOJ,qBACpFE,UAAUD,eAAgB,CAC5B,MAAMI,YAAcJ,gBAEpBK,OAAOC,KAAKF,aAAaG,QAASC,MAA4BV,OAAOW,KAAO,IAAMX,OAAOW,MAAQ,GAAKD,CAACA,KAAMJ,YAAYI,OAC3H,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{rewriteFramesIntegration}from"@sentry/browser";const rewriteFramesIntegrationBrowser=()=>rewriteFramesIntegration({iteratee:frame=>{const f={...frame};if(!f.filename)return f;const name=String(f.filename).replace(/\\/g,"/");if(name.startsWith("app:///"))return f;const cutToLastDist=p=>{const idx=p.lastIndexOf("/dist/");return idx<0?null:p.slice(idx).replace(/^\/+/,"")},relFromLast=cutToLastDist(name);if(relFromLast){if(f.filename=`app:///${relFromLast}`,f.abs_path){const absRel=cutToLastDist(String(f.abs_path).replace(/\\/g,"/"));absRel&&(f.abs_path=`app:///${absRel}`)}return f}return f}});export{rewriteFramesIntegrationBrowser};
|
|
2
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../src/Utils/IntegrationsBrowser.ts"],"sourcesContent":["import type { StackFrame } from '@sentry/browser';\nimport { rewriteFramesIntegration } from '@sentry/browser';\nimport type { Integration } from '@sentry/core';\n\nexport const rewriteFramesIntegrationBrowser = (): Integration =>\n rewriteFramesIntegration({\n // eslint-disable-next-line spellcheck/spell-checker\n iteratee: (frame: StackFrame): StackFrame => {\n const f: StackFrame = { ...(frame as any) } as any;\n if (!f.filename) return f;\n\n const name: string = String(f.filename).replace(/\\\\/g, '/');\n // already normalized\n if (name.startsWith('app:///')) return f;\n\n // Prefer the LAST \"/dist/\" occurrence so nested paths like\n // \".../dist/mac-arm64/.../app.asar/dist/dist-desktop/...\" map to\n // \"app:///dist/dist-desktop/...\" which matches uploaded urlPrefix/app paths.\n const cutToLastDist = (p: string): string | null => {\n const idx: number = p.lastIndexOf('/dist/');\n if (idx < 0) return null;\n return p.slice(idx).replace(/^\\/+/, '');\n };\n\n const relFromLast = cutToLastDist(name);\n if (relFromLast) {\n // eslint-disable-next-line functional/immutable-data\n (f as any).filename = `app:///${relFromLast}`;\n if (f.abs_path) {\n const abs: string = String(f.abs_path).replace(/\\\\/g, '/');\n const absRel: string | null = cutToLastDist(abs);\n if (absRel) {\n // eslint-disable-next-line functional/immutable-data\n (f as any).abs_path = `app:///${absRel}`;\n }\n }\n return f;\n }\n\n return f;\n }\n });\n"],"names":["rewriteFramesIntegrationBrowser","rewriteFramesIntegration","iteratee","frame","f","filename","name","String","replace","startsWith","cutToLastDist","p","idx","lastIndexOf","slice","relFromLast","abs_path","absRel"],"mappings":"sDAIO,MAAMA,gCAAkC,IAC7CC,yBAAyB,CAEvBC,SAAWC,QACT,MAAMC,EAAgB,IAAMD,OAC5B,IAAKC,EAAEC,SAAU,OAAOD,EAExB,MAAME,KAAeC,OAAOH,EAAEC,UAAUG,QAAQ,MAAO,KAEvD,GAAIF,KAAKG,WAAW,WAAY,OAAOL,EAKvC,MAAMM,cAAiBC,IACrB,MAAMC,IAAcD,EAAEE,YAAY,UAClC,OAAID,IAAM,EAAU,KACbD,EAAEG,MAAMF,KAAKJ,QAAQ,OAAQ,KAGhCO,YAAcL,cAAcJ,MAClC,GAAIS,YAAa,CAGf,GADCX,EAAUC,SAAW,UAAUU,cAC5BX,EAAEY,SAAU,CACd,MACMC,OAAwBP,cADVH,OAAOH,EAAEY,UAAUR,QAAQ,MAAO,MAElDS,SAEDb,EAAUY,SAAW,UAAUC,SAEpC,CACA,OAAOb,CACT,CAEA,OAAOA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{toPosix}from"../../anarchy-shared/src/Utils/FileUtils/index.es.js";import{rewriteFramesIntegration}from"@sentry/core";const rewriteFramesIntegrationNode=options=>{let root=options?.root;try{!root&&"undefined"!=typeof process&&process.resourcesPath&&(root=process.resourcesPath),root||(root=__dirname)}catch{}const rootPosix=root?toPosix(root):void 0;return rewriteFramesIntegration({root:rootPosix,iteratee:frame=>{if(!frame||!frame.filename)return frame;const name=toPosix(frame.filename);if(name.startsWith("app:///"))return frame;if(rootPosix&&name.startsWith(rootPosix))return frame.filename="app:///"+name.slice(rootPosix.length).replace(/^\/+/,""),frame;const asarIdx=name.indexOf("/app.asar/");return asarIdx>=0?(frame.filename="app:///"+name.slice(asarIdx+10),frame):name.startsWith("file://")?(frame.filename="app:///"+name.replace(/^file:\/+/,""),frame):frame}})};export{rewriteFramesIntegrationNode};
|
|
2
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../src/Utils/IntegrationsNode.ts"],"sourcesContent":["import { toPosix } from '@Anarchy/Shared/Utils';\nimport type { StackFrame } from '@sentry/core';\nimport { rewriteFramesIntegration } from '@sentry/core';\n\n//Important: if you use this, then upload source maps with --url-prefix \"app:///\"\nexport const rewriteFramesIntegrationNode = (options?: any): any => {\n let root = options?.root;\n\n try {\n if (!root && typeof process !== 'undefined' && (process as any).resourcesPath) {\n root = (process as any).resourcesPath as string;\n }\n if (!root) root = __dirname;\n } catch {\n // ignore\n }\n\n const rootPosix: string | undefined = root ? toPosix(root) : undefined;\n\n return rewriteFramesIntegration({\n root: rootPosix,\n // eslint-disable-next-line spellcheck/spell-checker\n iteratee: (frame: StackFrame): StackFrame => {\n if (!frame || !frame.filename) return frame;\n const name = toPosix(frame.filename);\n\n // Transform any absolute/file paths related to the app into app:///\n // 1) If SDK already made app:/// — leave it\n if (name.startsWith('app:///')) return frame;\n\n // 2) If the path is under root/resourcesPath - replace the prefix with app:///\n if (rootPosix && name.startsWith(rootPosix)) {\n // eslint-disable-next-line functional/immutable-data\n frame.filename = 'app:///' + name.slice(rootPosix.length).replace(/^\\/+/, '');\n return frame;\n }\n\n // 3) The path is inside asar\n const asarIdx: number = name.indexOf('/app.asar/');\n if (asarIdx >= 0) {\n // eslint-disable-next-line functional/immutable-data\n frame.filename = 'app:///' + name.slice(asarIdx + '/app.asar/'.length);\n return frame;\n }\n\n // 4) file:// URLs → app:///\n if (name.startsWith('file://')) {\n // eslint-disable-next-line functional/immutable-data\n frame.filename = 'app:///' + name.replace(/^file:\\/+/, '');\n return frame;\n }\n\n return frame;\n }\n });\n};\n"],"names":["rewriteFramesIntegrationNode","options","root","process","resourcesPath","__dirname","rootPosix","toPosix","rewriteFramesIntegration","iteratee","frame","filename","name","startsWith","slice","length","replace","asarIdx","indexOf"],"mappings":"6HAKO,MAAMA,6BAAgCC,UAC3C,IAAIC,KAAOD,SAASC,KAEpB,KACOA,MAA2B,oBAAZC,SAA4BA,QAAgBC,gBAC9DF,KAAQC,QAAgBC,eAErBF,OAAMA,KAAOG,UACpB,CAAA,MAEA,CAEA,MAAMC,UAAgCJ,KAAOK,QAAQL,WAAQ,EAE7D,OAAOM,yBAAyB,CAC9BN,KAAMI,UAENG,SAAWC,QACT,IAAKA,QAAUA,MAAMC,SAAU,OAAOD,MACtC,MAAME,KAAOL,QAAQG,MAAMC,UAI3B,GAAIC,KAAKC,WAAW,WAAY,OAAOH,MAGvC,GAAIJ,WAAaM,KAAKC,WAAWP,WAG/B,OADAI,MAAMC,SAAW,UAAYC,KAAKE,MAAMR,UAAUS,QAAQC,QAAQ,OAAQ,IACnEN,MAIT,MAAMO,QAAkBL,KAAKM,QAAQ,cACrC,OAAID,SAAW,GAEbP,MAAMC,SAAW,UAAYC,KAAKE,MAAMG,QAAU,IAC3CP,OAILE,KAAKC,WAAW,YAElBH,MAAMC,SAAW,UAAYC,KAAKI,QAAQ,YAAa,IAChDN,OAGFA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{HiddenField}from"../../Constants/Masks/index.es.js";function scrubEvent(event){return event.user||(event.user=null),event.request&&(event.request={...event.request,url:HiddenField,headers:{...event.request?.headers,url:HiddenField,Referer:HiddenField,referer:HiddenField}},delete event.request.headers?.Cookie,delete event.request.headers?.cookie),event.contexts?.geo&&delete event.contexts.geo,event.contexts?.Geography&&delete event.contexts.Geography,event.contexts?.geography&&delete event.contexts.geography,event.breadcrumbs||(event.breadcrumbs=void 0),event}export{scrubEvent};
|
|
2
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../src/Utils/ScrubEvent.ts"],"sourcesContent":["import { HiddenField } from '@Anarchy/Tracking/Constants';\nimport type { ErrorEvent } from '@sentry/core';\n\nexport function scrubEvent(event: ErrorEvent): ErrorEvent {\n // eslint-disable-next-line functional/immutable-data\n if (!event.user) event.user = null as any;\n\n if (event.request) {\n // eslint-disable-next-line functional/immutable-data\n event.request = {\n ...event.request,\n url: HiddenField,\n headers: {\n ...event.request?.headers,\n url: HiddenField,\n Referer: HiddenField,\n referer: HiddenField\n }\n };\n\n delete (event.request.headers as any)?.Cookie;\n delete (event.request.headers as any)?.cookie;\n }\n\n // eslint-disable-next-line functional/immutable-data\n if ((event as any).contexts?.geo) delete (event as any).contexts.geo;\n // eslint-disable-next-line functional/immutable-data\n if ((event as any).contexts?.Geography) delete (event as any).contexts.Geography;\n // eslint-disable-next-line functional/immutable-data\n if ((event as any).contexts?.geography) delete (event as any).contexts.geography;\n\n // eslint-disable-next-line functional/immutable-data\n if (!event.breadcrumbs) event.breadcrumbs = undefined;\n\n return event;\n}\n"],"names":["scrubEvent","event","user","request","url","HiddenField","headers","Referer","referer","Cookie","cookie","contexts","geo","Geography","geography","breadcrumbs"],"mappings":"2DAGO,SAASA,WAAWC,OA+BzB,OA7BKA,MAAMC,OAAMD,MAAMC,KAAO,MAE1BD,MAAME,UAERF,MAAME,QAAU,IACXF,MAAME,QACTC,IAAKC,YACLC,QAAS,IACJL,MAAME,SAASG,QAClBF,IAAKC,YACLE,QAASF,YACTG,QAASH,qBAILJ,MAAME,QAAQG,SAAiBG,cAC/BR,MAAME,QAAQG,SAAiBI,QAIpCT,MAAcU,UAAUC,YAAaX,MAAcU,SAASC,IAE5DX,MAAcU,UAAUE,kBAAmBZ,MAAcU,SAASE,UAElEZ,MAAcU,UAAUG,kBAAmBb,MAAcU,SAASG,UAGlEb,MAAMc,cAAad,MAAMc,iBAAc,GAErCd,KACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{HiddenField}from"../../Constants/Masks/index.es.js";const pathRegexps=[[/(\/Users)\/[^/]+/g,"$1/<home>"],[/(\/home)\/[^/]+/g,"$1/<home>"],[/(\/var\/home)\/[^/]+/g,"$1/<home>"],[/([A-Za-z]:\\Users)\\[^\\]+/g,"$1\\<home>"],[/([A-Za-z]:\\Documents and Settings)\\[^\\]+/g,"$1\\<home>"],[/(file:\/\/\/Users)\/[^/]+/g,"$1/<home>"],[/(file:\/\/\/home)\/[^/]+/g,"$1/<home>"],[/(file:\/\/\/var\/home)\/[^/]+/g,"$1/<home>"],[/(file:\/\/[A-Za-z]:\/Users)\/[^/]+/g,"$1/<home>"]];function replaceUserPaths(s,replacement="<home>"){return"string"!=typeof s?s:pathRegexps.reduce((acc,[re,tpl])=>acc.replace(re,tpl.replace("<home>",replacement)),s)}function scrubUserPathsBrowser(event){const replacement=HiddenField,message=event.message?replaceUserPaths(event.message,replacement):event.message,valuesIn=event.exception?.values,valuesOut=valuesIn?.map(v=>{const framesIn=v?.stacktrace?.frames,framesOut=framesIn?.map(f=>({...f,...f?.filename?{filename:replaceUserPaths(f.filename,replacement)}:{},...f?.abs_path?{abs_path:replaceUserPaths(f.abs_path,replacement)}:{},...f?.module?{module:replaceUserPaths(f.module,replacement)}:{},...f?.function?{function:replaceUserPaths(f.function,replacement)}:{}})),stacktraceOut=v?.stacktrace?{...v.stacktrace,...framesOut?{frames:framesOut}:{}}:v?.stacktrace;return{...v,...v?.value?{value:replaceUserPaths(v.value,replacement)}:{},...v?.type?{type:replaceUserPaths(v.type,replacement)}:{},...v?.stacktrace?{stacktrace:stacktraceOut}:{}}}),exceptionOut=event.exception?{...event.exception,...valuesOut?{values:valuesOut}:{}}:event.exception,requestOut=event.request?{...event.request,...event.request.url?{url:replaceUserPaths(event.request.url,replacement)}:{}}:event.request,extraIn=event.extra,extraOut=extraIn?Object.fromEntries(Object.entries(extraIn).map(([k,v])=>[k,"string"==typeof v?replaceUserPaths(v,replacement):v])):extraIn,breadcrumbsIn=event.breadcrumbs,breadcrumbsOut=breadcrumbsIn?.map(b=>{const dataIn=b?.data,dataOut=dataIn?Object.fromEntries(Object.entries(dataIn).map(([key,val])=>[key,"string"==typeof val?replaceUserPaths(val,replacement):val])):dataIn;return{...b,...b?.message?{message:replaceUserPaths(b.message,replacement)}:{},...b?.data&&"object"==typeof b.data?{data:dataOut}:{}}});return{...event,...message?{message:message}:{},...exceptionOut?{exception:exceptionOut}:{},...requestOut?{request:requestOut}:{},...void 0!==extraOut?{extra:extraOut}:{},...breadcrumbsOut?{breadcrumbs:breadcrumbsOut}:{}}}export{scrubUserPathsBrowser};
|
|
2
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../src/Utils/ScrubsBrowser.ts"],"sourcesContent":["import { HiddenField } from '@Anarchy/Tracking/Constants';\nimport type { ErrorEvent } from '@sentry/browser';\n\nconst pathRegexps: ReadonlyArray<[RegExp, string]> = [\n // macOS: /Users/<name>/...\n [/(\\/Users)\\/[^/]+/g, '$1/<home>'],\n\n // Linux: /home/<name>/... and /var/home/<name>/...\n [/(\\/home)\\/[^/]+/g, '$1/<home>'],\n [/(\\/var\\/home)\\/[^/]+/g, '$1/<home>'],\n\n // Windows: C:\\\\Users\\\\<name>\\\\... (any drive letter)\n [/([A-Za-z]:\\\\Users)\\\\[^\\\\]+/g, '$1\\\\<home>'],\n\n // Old Windows: C:\\\\Documents and Settings\\\\<name>\\\\...\n [/([A-Za-z]:\\\\Documents and Settings)\\\\[^\\\\]+/g, '$1\\\\<home>'],\n\n // file:// URLs: file:///Users/<name>/..., file:///home/<name>/..., file://C:/Users/<name>/...\n [/(file:\\/\\/\\/Users)\\/[^/]+/g, '$1/<home>'],\n [/(file:\\/\\/\\/home)\\/[^/]+/g, '$1/<home>'],\n [/(file:\\/\\/\\/var\\/home)\\/[^/]+/g, '$1/<home>'],\n [/(file:\\/\\/[A-Za-z]:\\/Users)\\/[^/]+/g, '$1/<home>']\n];\n\nfunction replaceUserPaths(s?: unknown, replacement: string = '<home>'): string | unknown {\n if (typeof s !== 'string') return s;\n return pathRegexps.reduce((acc: string, [re, tpl]) => acc.replace(re, tpl.replace('<home>', replacement)), s);\n}\n\nexport function scrubUserPathsBrowser(event: ErrorEvent): ErrorEvent {\n const replacement = HiddenField;\n\n const message = event.message ? (replaceUserPaths(event.message, replacement) as string) : event.message;\n\n const valuesIn = event.exception?.values as ReadonlyArray<any> | undefined;\n const valuesOut = valuesIn?.map((v: any) => {\n const framesIn: ReadonlyArray<any> | undefined = v?.stacktrace?.frames;\n const framesOut = (framesIn as any[] | undefined)?.map((f: any) => ({\n ...f,\n ...(f?.filename ? { filename: replaceUserPaths(f.filename, replacement) } : {}),\n ...(f?.abs_path ? { abs_path: replaceUserPaths(f.abs_path, replacement) } : {}),\n ...(f?.module ? { module: replaceUserPaths(f.module, replacement) } : {}),\n ...(f?.function ? { function: replaceUserPaths(f.function, replacement) } : {})\n }));\n\n const stacktraceOut = v?.stacktrace ? { ...v.stacktrace, ...(framesOut ? { frames: framesOut } : {}) } : v?.stacktrace;\n\n return {\n ...v,\n ...(v?.value ? { value: replaceUserPaths(v.value, replacement) } : {}),\n ...(v?.type ? { type: replaceUserPaths(v.type, replacement) } : {}),\n ...(v?.stacktrace ? { stacktrace: stacktraceOut } : {})\n };\n });\n\n const exceptionOut = event.exception ? { ...event.exception, ...(valuesOut ? { values: valuesOut } : {}) } : event.exception;\n\n const requestOut = event.request\n ? {\n ...event.request,\n ...(event.request.url ? { url: replaceUserPaths(event.request.url, replacement) as string } : {})\n }\n : event.request;\n\n const extraIn = event.extra as Record<string, unknown> | undefined;\n const extraOut = extraIn ? Object.fromEntries(Object.entries(extraIn).map(([k, v]) => [k, typeof v === 'string' ? replaceUserPaths(v, replacement) : v])) : extraIn;\n\n const breadcrumbsIn = event.breadcrumbs as any[] | undefined;\n const breadcrumbsOut = breadcrumbsIn?.map((b: any) => {\n const dataIn = b?.data as Record<string, unknown> | undefined;\n const dataOut = dataIn ? Object.fromEntries(Object.entries(dataIn).map(([key, val]) => [key, typeof val === 'string' ? replaceUserPaths(val as string, replacement) : val])) : dataIn;\n\n return {\n ...b,\n ...(b?.message ? { message: replaceUserPaths(b.message, replacement) } : {}),\n ...(b?.data && typeof b.data === 'object' ? { data: dataOut } : {})\n };\n });\n\n return {\n ...event,\n ...(message ? { message } : {}),\n ...(exceptionOut ? { exception: exceptionOut as any } : {}),\n ...(requestOut ? { request: requestOut as any } : {}),\n ...(extraOut !== undefined ? { extra: extraOut as any } : {}),\n ...(breadcrumbsOut ? { breadcrumbs: breadcrumbsOut as any } : {})\n };\n}\n"],"names":["pathRegexps","replaceUserPaths","s","replacement","reduce","acc","re","tpl","replace","scrubUserPathsBrowser","event","HiddenField","message","valuesIn","exception","values","valuesOut","map","v","framesIn","stacktrace","frames","framesOut","f","filename","abs_path","module","function","stacktraceOut","value","type","exceptionOut","requestOut","request","url","extraIn","extra","extraOut","Object","fromEntries","entries","k","breadcrumbsIn","breadcrumbs","breadcrumbsOut","b","dataIn","data","dataOut","key","val"],"mappings":"2DAGA,MAAMA,YAA+C,CAEnD,CAAC,oBAAqB,aAGtB,CAAC,mBAAoB,aACrB,CAAC,wBAAyB,aAG1B,CAAC,8BAA+B,cAGhC,CAAC,+CAAgD,cAGjD,CAAC,6BAA8B,aAC/B,CAAC,4BAA6B,aAC9B,CAAC,iCAAkC,aACnC,CAAC,sCAAuC,cAG1C,SAASC,iBAAiBC,EAAaC,YAAsB,UAC3D,MAAiB,iBAAND,EAAuBA,EAC3BF,YAAYI,OAAO,CAACC,KAAcC,GAAIC,OAASF,IAAIG,QAAQF,GAAIC,IAAIC,QAAQ,SAAUL,cAAeD,EAC7G,CAEO,SAASO,sBAAsBC,OACpC,MAAMP,YAAcQ,YAEdC,QAAUF,MAAME,QAAWX,iBAAiBS,MAAME,QAAST,aAA0BO,MAAME,QAE3FC,SAAWH,MAAMI,WAAWC,OAC5BC,UAAYH,UAAUI,IAAKC,IAC/B,MAAMC,SAA2CD,GAAGE,YAAYC,OAC1DC,UAAaH,UAAgCF,IAAKM,IAAA,IACnDA,KACCA,GAAGC,SAAW,CAAEA,SAAUvB,iBAAiBsB,EAAEC,SAAUrB,cAAiB,CAAA,KACxEoB,GAAGE,SAAW,CAAEA,SAAUxB,iBAAiBsB,EAAEE,SAAUtB,cAAiB,CAAA,KACxEoB,GAAGG,OAAS,CAAEA,OAAQzB,iBAAiBsB,EAAEG,OAAQvB,cAAiB,CAAA,KAClEoB,GAAGI,SAAW,CAAEA,SAAU1B,iBAAiBsB,EAAEI,SAAUxB,cAAiB,CAAA,KAGxEyB,cAAgBV,GAAGE,WAAa,IAAKF,EAAEE,cAAgBE,UAAY,CAAED,OAAQC,WAAc,CAAA,GAAQJ,GAAGE,WAE5G,MAAO,IACFF,KACCA,GAAGW,MAAQ,CAAEA,MAAO5B,iBAAiBiB,EAAEW,MAAO1B,cAAiB,CAAA,KAC/De,GAAGY,KAAO,CAAEA,KAAM7B,iBAAiBiB,EAAEY,KAAM3B,cAAiB,CAAA,KAC5De,GAAGE,WAAa,CAAEA,WAAYQ,eAAkB,CAAA,KAIlDG,aAAerB,MAAMI,UAAY,IAAKJ,MAAMI,aAAeE,UAAY,CAAED,OAAQC,WAAc,CAAA,GAAQN,MAAMI,UAE7GkB,WAAatB,MAAMuB,QACrB,IACKvB,MAAMuB,WACLvB,MAAMuB,QAAQC,IAAM,CAAEA,IAAKjC,iBAAiBS,MAAMuB,QAAQC,IAAK/B,cAA2B,CAAA,GAEhGO,MAAMuB,QAEJE,QAAUzB,MAAM0B,MAChBC,SAAWF,QAAUG,OAAOC,YAAYD,OAAOE,QAAQL,SAASlB,IAAI,EAAEwB,EAAGvB,KAAO,CAACuB,EAAgB,iBAANvB,EAAiBjB,iBAAiBiB,EAAGf,aAAee,KAAOiB,QAEtJO,cAAgBhC,MAAMiC,YACtBC,eAAiBF,eAAezB,IAAK4B,IACzC,MAAMC,OAASD,GAAGE,KACZC,QAAUF,OAASR,OAAOC,YAAYD,OAAOE,QAAQM,QAAQ7B,IAAI,EAAEgC,IAAKC,OAAS,CAACD,IAAoB,iBAARC,IAAmBjD,iBAAiBiD,IAAe/C,aAAe+C,OAASJ,OAE/K,MAAO,IACFD,KACCA,GAAGjC,QAAU,CAAEA,QAASX,iBAAiB4C,EAAEjC,QAAST,cAAiB,CAAA,KACrE0C,GAAGE,MAA0B,iBAAXF,EAAEE,KAAoB,CAAEA,KAAMC,SAAY,CAAA,KAIpE,MAAO,IACFtC,SACCE,QAAU,CAAEA,iBAAY,CAAA,KACxBmB,aAAe,CAAEjB,UAAWiB,cAAwB,CAAA,KACpDC,WAAa,CAAEC,QAASD,YAAsB,CAAA,UACjC,IAAbK,SAAyB,CAAED,MAAOC,UAAoB,CAAA,KACtDO,eAAiB,CAAED,YAAaC,gBAA0B,CAAA,EAElE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import os from"node:os";import{isDefined,isString}from"../../anarchy-shared/src/Utils/CheckUtils/index.es.js";import{HiddenField}from"../../Constants/Masks/index.es.js";const homedir=os.homedir(),homeDirRegexp=new RegExp(homedir.replace(/\\/g,"/").replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),replaceInString=s=>"string"==typeof s?s.replace(/\\/g,"/").replace(homeDirRegexp,HiddenField):s;function scrubUserPathsDesktop(event){return event.message&&(event.message=replaceInString(event.message)),event.exception?.values?.forEach(value=>{value?.stacktrace?.frames?.forEach(f=>{f.filename=replaceInString(f.filename),f.abs_path=replaceInString(f.abs_path),f.module=replaceInString(f.module)}),value.value&&(value.value=replaceInString(value.value)),value.type&&(value.type=replaceInString(value.type))}),isDefined(event.extra)&&Object.entries(event.extra).forEach(([key,value])=>{isDefined(event.extra)&&isString(value)&&(event.extra[key]=replaceInString(value))}),event}export{scrubUserPathsDesktop};
|
|
2
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../src/Utils/ScrubsDesktop.ts"],"sourcesContent":["import os from 'node:os';\n\nimport { isDefined, isString } from '@Anarchy/Shared/Utils';\nimport { HiddenField } from '@Anarchy/Tracking/Constants';\nimport type { ErrorEvent } from '@sentry/electron/main';\n\nconst escape = (s: string): string => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n// eslint-disable-next-line spellcheck/spell-checker\nconst homedir: string = os.homedir();\n// eslint-disable-next-line spellcheck/spell-checker\nconst homeDirRegexp: RegExp = new RegExp(escape(homedir.replace(/\\\\/g, '/')), 'g');\nconst replaceInString = (s?: string): string | undefined => (typeof s === 'string' ? s.replace(/\\\\/g, '/').replace(homeDirRegexp, HiddenField) : s);\n\nexport function scrubUserPathsDesktop(event: ErrorEvent): ErrorEvent {\n // eslint-disable-next-line functional/immutable-data\n if (event.message) event.message = replaceInString(event.message);\n\n event.exception?.values?.forEach((value: any): void => {\n value?.stacktrace?.frames?.forEach((f: any): void => {\n // eslint-disable-next-line functional/immutable-data\n f.filename = replaceInString(f.filename);\n // eslint-disable-next-line functional/immutable-data\n f.abs_path = replaceInString(f.abs_path);\n // eslint-disable-next-line functional/immutable-data\n f.module = replaceInString(f.module);\n });\n\n // eslint-disable-next-line functional/immutable-data\n if (value.value) value.value = replaceInString(value.value);\n // eslint-disable-next-line functional/immutable-data\n if (value.type) value.type = replaceInString(value.type);\n });\n\n if (isDefined(event.extra)) {\n Object.entries(event.extra).forEach(([key, value]): void => {\n // eslint-disable-next-line functional/immutable-data\n if (isDefined(event.extra) && isString(value)) event.extra[key] = replaceInString(value);\n });\n }\n\n return event;\n}\n"],"names":["homedir","os","homeDirRegexp","RegExp","replace","replaceInString","s","HiddenField","scrubUserPathsDesktop","event","message","exception","values","forEach","value","stacktrace","frames","f","filename","abs_path","module","type","isDefined","extra","Object","entries","key","isString"],"mappings":"yKAMA,MAEMA,QAAkBC,GAAGD,UAErBE,cAAwB,IAAIC,OAAcH,QAAQI,QAAQ,MAAO,KAJ/BA,QAAQ,sBAAuB,QAIO,KACxEC,gBAAmBC,GAAiD,iBAANA,EAAiBA,EAAEF,QAAQ,MAAO,KAAKA,QAAQF,cAAeK,aAAeD,EAE1I,SAASE,sBAAsBC,OA2BpC,OAzBIA,MAAMC,UAASD,MAAMC,QAAUL,gBAAgBI,MAAMC,UAEzDD,MAAME,WAAWC,QAAQC,QAASC,QAChCA,OAAOC,YAAYC,QAAQH,QAASI,IAElCA,EAAEC,SAAWb,gBAAgBY,EAAEC,UAE/BD,EAAEE,SAAWd,gBAAgBY,EAAEE,UAE/BF,EAAEG,OAASf,gBAAgBY,EAAEG,UAI3BN,MAAMA,QAAOA,MAAMA,MAAQT,gBAAgBS,MAAMA,QAEjDA,MAAMO,OAAMP,MAAMO,KAAOhB,gBAAgBS,MAAMO,SAGjDC,UAAUb,MAAMc,QAClBC,OAAOC,QAAQhB,MAAMc,OAAOV,QAAQ,EAAEa,IAAKZ,UAErCQ,UAAUb,MAAMc,QAAUI,SAASb,SAAQL,MAAMc,MAAMG,KAAOrB,gBAAgBS,UAI/EL,KACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../../../../anarchy-shared/src/Utils/CheckUtils.ts"],"sourcesContent":["export const isDefined = <T>(value: T | undefined | null): value is T => <T>value !== undefined && <T>value !== null;\n\nexport const isAllDefined = <T>(values: ReadonlyArray<T | undefined | null>): values is ReadonlyArray<T> => !values.some(isNotDefined);\n\nexport const isNotDefined = <T>(value: T | undefined | null): value is undefined | null => !isDefined<T>(value);\n\nexport const isAllNotDefined = <T>(values: ReadonlyArray<T | undefined | null>): values is ReadonlyArray<undefined | null> => values.every(isNotDefined);\n\nexport const isString = (value: unknown): value is string => typeof value === 'string';\n\nexport const isBoolean = (value: unknown): value is boolean => typeof value === 'boolean';\n"],"names":["isDefined","value","isString"],"mappings":"AAAO,MAAMA,UAAgBC,OAA+CA,YAQ/DC,SAAYD,OAAqD,iBAAVA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../../../../anarchy-shared/src/Utils/FileUtils.ts"],"sourcesContent":["import { FileSizes } from '@Anarchy/Shared/Constants';\n\nimport { isDefined } from './CheckUtils';\n\nexport function getHumanReadableMemorySize(bytes: number, decimals: number = 2): string {\n if (!+bytes) return '0 Bytes';\n const k: number = 1024;\n const dm: number = decimals < 0 ? 0 : decimals;\n\n const i: number = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${Object.values(FileSizes)[i]}`;\n}\n\nexport function getFileExtension(name: string): string | undefined {\n const extension: RegExpExecArray | null = /^.+\\.([^.]+)$/.exec(name);\n return isDefined(extension) ? extension[1] : undefined;\n}\n\nexport const toPosix = (s: string): string => s.replace(/\\\\/g, '/');\n"],"names":["toPosix","s","replace"],"mappings":"AAmBO,MAAMA,QAAWC,GAAsBA,EAAEC,QAAQ,MAAO"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function parseDistName(distName){if(!distName)return{platform:"unknown",arch:"unknown"};const parts=distName.toLowerCase().trim().split("-"),[platform,arch]=parts;return{platform:platform||"unknown",arch:arch||"unknown"}}export{parseDistName
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
function parseDistName(distName){if(!distName)return{platform:"unknown",arch:"unknown"};const parts=distName.toLowerCase().trim().split("-"),[platform,arch]=parts;return{platform:platform||"unknown",arch:arch||"unknown"}}export{parseDistName};
|
|
2
|
+
//# sourceMappingURL=index.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../../../../anarchy-shared/src/Utils/TrackingUtils.ts"],"sourcesContent":["export function parseDistName(distName: string | undefined | null): Readonly<{ platform: string; arch: string }> {\n if (!distName) return { platform: 'unknown', arch: 'unknown' };\n\n const parts: ReadonlyArray<string> = distName.toLowerCase().trim().split('-');\n const [platform, arch] = parts;\n return { platform: platform || 'unknown', arch: arch || 'unknown' };\n}\n"],"names":["parseDistName","distName","platform","arch","parts","toLowerCase","trim","split"],"mappings":"AAAO,SAASA,cAAcC,UAC5B,IAAKA,SAAU,MAAO,CAAEC,SAAU,UAAWC,KAAM,WAEnD,MAAMC,MAA+BH,SAASI,cAAcC,OAAOC,MAAM,MAClEL,SAAUC,MAAQC,MACzB,MAAO,CAAEF,SAAUA,UAAY,UAAWC,KAAMA,MAAQ,UAC1D"}
|
package/dist/browser/index.es.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
export{BrowserTrackingService}from"../Services/BrowserTrackingService/index.es.js";import*as browser from"../Utils/browser/index.es.js";export{browser as Utils};
|
|
2
2
|
//# sourceMappingURL=index.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":[
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/desktop/index.es.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
export{DesktopTrackingService}from"../Services/DesktopTrackingService/index.es.js";import*as desktop from"../Utils/desktop/index.es.js";export{desktop as Utils};
|
|
2
2
|
//# sourceMappingURL=index.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../../anarchy-shared/src/Utils/FileUtils.ts","../../src/Utils/IntegrationsNode.ts","../../src/Utils/ScrubsDesktop.ts","../../src/Services/DesktopTrackingService.ts"],"sourcesContent":["import { FileSizes } from '@Anarchy/Shared/Constants';\n\nimport { isDefined } from './CheckUtils';\n\nexport function getHumanReadableMemorySize(bytes: number, decimals: number = 2): string {\n if (!+bytes) return '0 Bytes';\n const k: number = 1024;\n const dm: number = decimals < 0 ? 0 : decimals;\n\n const i: number = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${Object.values(FileSizes)[i]}`;\n}\n\nexport function getFileExtension(name: string): string | undefined {\n const extension: RegExpExecArray | null = /^.+\\.([^.]+)$/.exec(name);\n return isDefined(extension) ? extension[1] : undefined;\n}\n\nexport const toPosix = (s: string): string => s.replace(/\\\\/g, '/');\n","import { toPosix } from '@Anarchy/Shared/Utils';\nimport type { StackFrame } from '@sentry/core';\nimport { rewriteFramesIntegration } from '@sentry/core';\n\n//Important: if you use this, then upload source maps with --url-prefix \"app:///\"\nexport const rewriteFramesIntegrationNode = (options?: any): any => {\n let root = options?.root;\n\n try {\n if (!root && typeof process !== 'undefined' && (process as any).resourcesPath) {\n root = (process as any).resourcesPath as string;\n }\n if (!root) root = __dirname;\n } catch {\n // ignore\n }\n\n const rootPosix: string | undefined = root ? toPosix(root) : undefined;\n\n return rewriteFramesIntegration({\n root: rootPosix,\n // eslint-disable-next-line spellcheck/spell-checker\n iteratee: (frame: StackFrame): StackFrame => {\n if (!frame || !frame.filename) return frame;\n const name = toPosix(frame.filename);\n\n // Transform any absolute/file paths related to the app into app:///\n // 1) If SDK already made app:/// — leave it\n if (name.startsWith('app:///')) return frame;\n\n // 2) If the path is under root/resourcesPath - replace the prefix with app:///\n if (rootPosix && name.startsWith(rootPosix)) {\n // eslint-disable-next-line functional/immutable-data\n frame.filename = 'app:///' + name.slice(rootPosix.length).replace(/^\\/+/, '');\n return frame;\n }\n\n // 3) The path is inside asar\n const asarIdx: number = name.indexOf('/app.asar/');\n if (asarIdx >= 0) {\n // eslint-disable-next-line functional/immutable-data\n frame.filename = 'app:///' + name.slice(asarIdx + '/app.asar/'.length);\n return frame;\n }\n\n // 4) file:// URLs → app:///\n if (name.startsWith('file://')) {\n // eslint-disable-next-line functional/immutable-data\n frame.filename = 'app:///' + name.replace(/^file:\\/+/, '');\n return frame;\n }\n\n return frame;\n }\n });\n};\n","import os from 'node:os';\n\nimport { isDefined, isString } from '@Anarchy/Shared/Utils';\nimport { HiddenField } from '@Anarchy/Tracking/Constants';\nimport type { ErrorEvent } from '@sentry/electron/main';\n\nconst escape = (s: string): string => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n// eslint-disable-next-line spellcheck/spell-checker\nconst homedir: string = os.homedir();\n// eslint-disable-next-line spellcheck/spell-checker\nconst homeDirRegexp: RegExp = new RegExp(escape(homedir.replace(/\\\\/g, '/')), 'g');\nconst replaceInString = (s?: string): string | undefined => (typeof s === 'string' ? s.replace(/\\\\/g, '/').replace(homeDirRegexp, HiddenField) : s);\n\nexport function scrubUserPathsDesktop(event: ErrorEvent): ErrorEvent {\n // eslint-disable-next-line functional/immutable-data\n if (event.message) event.message = replaceInString(event.message);\n\n event.exception?.values?.forEach((value: any): void => {\n value?.stacktrace?.frames?.forEach((f: any): void => {\n // eslint-disable-next-line functional/immutable-data\n f.filename = replaceInString(f.filename);\n // eslint-disable-next-line functional/immutable-data\n f.abs_path = replaceInString(f.abs_path);\n // eslint-disable-next-line functional/immutable-data\n f.module = replaceInString(f.module);\n });\n\n // eslint-disable-next-line functional/immutable-data\n if (value.value) value.value = replaceInString(value.value);\n // eslint-disable-next-line functional/immutable-data\n if (value.type) value.type = replaceInString(value.type);\n });\n\n if (isDefined(event.extra)) {\n Object.entries(event.extra).forEach(([key, value]): void => {\n // eslint-disable-next-line functional/immutable-data\n if (isDefined(event.extra) && isString(value)) event.extra[key] = replaceInString(value);\n });\n }\n\n return event;\n}\n","import { isDefined, parseDistName } from '@Anarchy/Shared/Utils';\nimport type { TMetaData, TTrackingService } from '@Anarchy/Tracking/Models';\nimport { mutateEventWithDynamicData } from '@Anarchy/Tracking/Utils/DynamicDataUtils';\nimport { rewriteFramesIntegrationNode } from '@Anarchy/Tracking/Utils/IntegrationsNode';\nimport { scrubEvent } from '@Anarchy/Tracking/Utils/ScrubEvent';\nimport { scrubUserPathsDesktop } from '@Anarchy/Tracking/Utils/ScrubsDesktop';\nimport type { Primitive } from '@sentry/core';\nimport type { ElectronMainOptions } from '@sentry/electron/esm/main';\nimport type { ErrorEvent, EventHint } from '@sentry/electron/main';\nimport { captureException, init, setTags } from '@sentry/electron/main';\n\nexport function DesktopTrackingService(\n options?: ElectronMainOptions,\n metaData?: TMetaData,\n dynamicContextFn?: () => Record<string, any>,\n dynamicTagsFn?: () => Record<string, Primitive>\n): TTrackingService {\n let isStarted: boolean = false;\n\n const defaultOptions: ElectronMainOptions = {\n beforeSend(event: ErrorEvent, _hint: EventHint): PromiseLike<ErrorEvent | null> | ErrorEvent | null {\n const result: ErrorEvent = scrubUserPathsDesktop(scrubEvent(event as any) as ErrorEvent);\n mutateEventWithDynamicData(result as any, dynamicContextFn, dynamicTagsFn);\n return result;\n },\n integrations: [rewriteFramesIntegrationNode()],\n tracesSampleRate: 0,\n //Important: make sure this is false if you want anonymous reports (no IPs, etc. for GDPR and similar acts).\n sendDefaultPii: false\n };\n\n init({\n ...defaultOptions,\n ...options\n });\n\n if (isDefined(metaData)) setTags(metaData);\n const { platform, arch } = parseDistName(options?.dist);\n setTags({\n layer: 'electron-main',\n errorTracker: 'DesktopTrackingService',\n os: platform,\n arch\n });\n\n const onError = (ev: any): void => void captureException(ev?.error ?? ev);\n const onRejection = (ev: PromiseRejectionEvent): void => void captureException((ev as PromiseRejectionEvent)?.reason ?? ev);\n\n function start(onErrorHandler: (ev: any) => void = onError, onRejectionHandler: (ev: PromiseRejectionEvent) => void = onRejection): void {\n if (isStarted) return;\n isStarted = true;\n process.on('uncaughtException', onErrorHandler);\n process.on('unhandledRejection', onRejectionHandler);\n }\n\n function stop(onErrorHandler: (ev: any) => void = onError, onRejectionHandler: (ev: PromiseRejectionEvent) => void = onRejection): void {\n isStarted = false;\n process.off('uncaughtException', onErrorHandler);\n process.off('unhandledRejection', onRejectionHandler);\n }\n\n start();\n\n return {\n captureException,\n start,\n stop,\n isStarted: () => isStarted\n };\n}\n"],"names":["toPosix","s","replace","rewriteFramesIntegrationNode","options","root","process","resourcesPath","__dirname","rootPosix","rewriteFramesIntegration","iteratee","frame","filename","name","startsWith","slice","length","asarIdx","indexOf","homedir","os","homeDirRegexp","RegExp","replaceInString","HiddenField","scrubUserPathsDesktop","event","message","exception","values","forEach","value","stacktrace","frames","f","abs_path","module","type","isDefined","extra","Object","entries","key","isString","DesktopTrackingService","metaData","dynamicContextFn","dynamicTagsFn","isStarted","defaultOptions","beforeSend","_hint","result","scrubEvent","mutateEventWithDynamicData","integrations","tracesSampleRate","sendDefaultPii","init","setTags","platform","arch","parseDistName","dist","layer","errorTracker","onError","ev","captureException","error","onRejection","reason","start","onErrorHandler","onRejectionHandler","on","stop","off"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
export{DesktopPreloadTrackingService}from"../Services/DesktopPreloadTrackingService/index.es.js";import*as browser from"../Utils/browser/index.es.js";export{browser as Utils};
|
|
2
2
|
//# sourceMappingURL=index.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":[
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/index/index.es.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{
|
|
1
|
+
export{HiddenField}from"../Constants/Masks/index.es.js";export{mutateEventWithDynamicData}from"../Utils/DynamicDataUtils/index.es.js";export{scrubEvent}from"../Utils/ScrubEvent/index.es.js";
|
|
2
2
|
//# sourceMappingURL=index.es.js.map
|
package/legal/NOTICE.md
CHANGED
|
@@ -55,7 +55,7 @@ The following notices are reproduced as provided by the respective licensors (e.
|
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
58
|
-
## @opentelemetry/context-async-hooks@2.
|
|
58
|
+
## @opentelemetry/context-async-hooks@2.5.0
|
|
59
59
|
|
|
60
60
|
**License(s):** Apache-2.0
|
|
61
61
|
|
|
@@ -79,7 +79,7 @@ The following notices are reproduced as provided by the respective licensors (e.
|
|
|
79
79
|
|
|
80
80
|
---
|
|
81
81
|
|
|
82
|
-
## @opentelemetry/core@2.
|
|
82
|
+
## @opentelemetry/core@2.5.0
|
|
83
83
|
|
|
84
84
|
**License(s):** Apache-2.0
|
|
85
85
|
|
|
@@ -379,7 +379,7 @@ The following notices are reproduced as provided by the respective licensors (e.
|
|
|
379
379
|
|
|
380
380
|
---
|
|
381
381
|
|
|
382
|
-
## @opentelemetry/resources@2.
|
|
382
|
+
## @opentelemetry/resources@2.5.0
|
|
383
383
|
|
|
384
384
|
**License(s):** Apache-2.0
|
|
385
385
|
|
|
@@ -391,7 +391,7 @@ The following notices are reproduced as provided by the respective licensors (e.
|
|
|
391
391
|
|
|
392
392
|
---
|
|
393
393
|
|
|
394
|
-
## @opentelemetry/sdk-trace-base@2.
|
|
394
|
+
## @opentelemetry/sdk-trace-base@2.5.0
|
|
395
395
|
|
|
396
396
|
**License(s):** Apache-2.0
|
|
397
397
|
|
|
@@ -403,7 +403,7 @@ The following notices are reproduced as provided by the respective licensors (e.
|
|
|
403
403
|
|
|
404
404
|
---
|
|
405
405
|
|
|
406
|
-
## @opentelemetry/semantic-conventions@1.
|
|
406
|
+
## @opentelemetry/semantic-conventions@1.39.0
|
|
407
407
|
|
|
408
408
|
**License(s):** Apache-2.0
|
|
409
409
|
|
|
@@ -753,7 +753,7 @@ The following notices are reproduced as provided by the respective licensors (e.
|
|
|
753
753
|
|
|
754
754
|
---
|
|
755
755
|
|
|
756
|
-
## cjs-module-lexer@
|
|
756
|
+
## cjs-module-lexer@2.2.0
|
|
757
757
|
|
|
758
758
|
**License(s):** MIT
|
|
759
759
|
|
|
@@ -799,7 +799,7 @@ The following notices are reproduced as provided by the respective licensors (e.
|
|
|
799
799
|
|
|
800
800
|
---
|
|
801
801
|
|
|
802
|
-
## import-in-the-middle@2.0.
|
|
802
|
+
## import-in-the-middle@2.0.5
|
|
803
803
|
|
|
804
804
|
**License(s):** Apache-2.0
|
|
805
805
|
|
|
@@ -853,7 +853,7 @@ The following notices are reproduced as provided by the respective licensors (e.
|
|
|
853
853
|
|
|
854
854
|
---
|
|
855
855
|
|
|
856
|
-
## pg-protocol@1.
|
|
856
|
+
## pg-protocol@1.11.0
|
|
857
857
|
|
|
858
858
|
**License(s):** MIT
|
|
859
859
|
|
|
@@ -854,7 +854,7 @@ limitations under the License.
|
|
|
854
854
|
|
|
855
855
|
---
|
|
856
856
|
|
|
857
|
-
## @opentelemetry/context-async-hooks@2.
|
|
857
|
+
## @opentelemetry/context-async-hooks@2.5.0
|
|
858
858
|
|
|
859
859
|
**License:** Apache-2.0
|
|
860
860
|
|
|
@@ -1282,7 +1282,7 @@ limitations under the License.
|
|
|
1282
1282
|
|
|
1283
1283
|
---
|
|
1284
1284
|
|
|
1285
|
-
## @opentelemetry/core@2.
|
|
1285
|
+
## @opentelemetry/core@2.5.0
|
|
1286
1286
|
|
|
1287
1287
|
**License:** Apache-2.0
|
|
1288
1288
|
|
|
@@ -6632,7 +6632,7 @@ limitations under the License.
|
|
|
6632
6632
|
|
|
6633
6633
|
---
|
|
6634
6634
|
|
|
6635
|
-
## @opentelemetry/resources@2.
|
|
6635
|
+
## @opentelemetry/resources@2.5.0
|
|
6636
6636
|
|
|
6637
6637
|
**License:** Apache-2.0
|
|
6638
6638
|
|
|
@@ -6846,7 +6846,7 @@ limitations under the License.
|
|
|
6846
6846
|
|
|
6847
6847
|
---
|
|
6848
6848
|
|
|
6849
|
-
## @opentelemetry/sdk-trace-base@2.
|
|
6849
|
+
## @opentelemetry/sdk-trace-base@2.5.0
|
|
6850
6850
|
|
|
6851
6851
|
**License:** Apache-2.0
|
|
6852
6852
|
|
|
@@ -7060,7 +7060,7 @@ limitations under the License.
|
|
|
7060
7060
|
|
|
7061
7061
|
---
|
|
7062
7062
|
|
|
7063
|
-
## @opentelemetry/semantic-conventions@1.
|
|
7063
|
+
## @opentelemetry/semantic-conventions@1.39.0
|
|
7064
7064
|
|
|
7065
7065
|
**License:** Apache-2.0
|
|
7066
7066
|
|
|
@@ -8567,7 +8567,7 @@ SOFTWARE.
|
|
|
8567
8567
|
|
|
8568
8568
|
---
|
|
8569
8569
|
|
|
8570
|
-
## cjs-module-lexer@
|
|
8570
|
+
## cjs-module-lexer@2.2.0
|
|
8571
8571
|
|
|
8572
8572
|
**License:** MIT
|
|
8573
8573
|
|
|
@@ -8685,7 +8685,7 @@ THE SOFTWARE.
|
|
|
8685
8685
|
|
|
8686
8686
|
---
|
|
8687
8687
|
|
|
8688
|
-
## import-in-the-middle@2.0.
|
|
8688
|
+
## import-in-the-middle@2.0.5
|
|
8689
8689
|
|
|
8690
8690
|
**License:** Apache-2.0
|
|
8691
8691
|
|
|
@@ -9011,7 +9011,7 @@ PERFORMANCE OF THIS SOFTWARE.
|
|
|
9011
9011
|
|
|
9012
9012
|
---
|
|
9013
9013
|
|
|
9014
|
-
## pg-protocol@1.
|
|
9014
|
+
## pg-protocol@1.11.0
|
|
9015
9015
|
|
|
9016
9016
|
**License:** MIT
|
|
9017
9017
|
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@hellpig/anarchy-tracking",
|
|
3
3
|
"author": "S. Panfilov",
|
|
4
4
|
"private": false,
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.7.1",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
@@ -53,8 +53,7 @@
|
|
|
53
53
|
"./desktop-preload": {
|
|
54
54
|
"types": "./dist/desktop-preload.d.ts",
|
|
55
55
|
"import": "./dist/desktop-preload.es.js"
|
|
56
|
-
}
|
|
57
|
-
"./package.json": "./package.json"
|
|
56
|
+
}
|
|
58
57
|
},
|
|
59
58
|
"typesVersions": {
|
|
60
59
|
"*": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TrackingUtils.js","sources":["../../../anarchy-shared/src/Utils/TrackingUtils.ts"],"sourcesContent":["export function parseDistName(distName: string | undefined | null): Readonly<{ platform: string; arch: string }> {\n if (!distName) return { platform: 'unknown', arch: 'unknown' };\n\n const parts: ReadonlyArray<string> = distName.toLowerCase().trim().split('-');\n const [platform, arch] = parts;\n return { platform: platform || 'unknown', arch: arch || 'unknown' };\n}\n"],"names":["parseDistName","distName","platform","arch","parts","toLowerCase","trim","split"],"mappings":"AAAO,SAASA,cAAcC,UAC5B,IAAKA,SAAU,MAAO,CAAEC,SAAU,UAAWC,KAAM,WAEnD,MAAMC,MAA+BH,SAASI,cAAcC,OAAOC,MAAM,MAClEL,SAAUC,MAAQC,MACzB,MAAO,CAAEF,SAAUA,UAAY,UAAWC,KAAMA,MAAQ,UAC1D"}
|
package/dist/chunks/browser.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{rewriteFramesIntegration}from"@sentry/browser";import{H as HiddenField}from"./index.js";const rewriteFramesIntegrationBrowser=()=>rewriteFramesIntegration({iteratee:frame=>{const f={...frame};if(!f.filename)return f;const name=String(f.filename).replace(/\\/g,"/");if(name.startsWith("app:///"))return f;const cutToLastDist=p=>{const idx=p.lastIndexOf("/dist/");return idx<0?null:p.slice(idx).replace(/^\/+/,"")},relFromLast=cutToLastDist(name);if(relFromLast){if(f.filename=`app:///${relFromLast}`,f.abs_path){const absRel=cutToLastDist(String(f.abs_path).replace(/\\/g,"/"));absRel&&(f.abs_path=`app:///${absRel}`)}return f}return f}}),pathRegexps=[[/(\/Users)\/[^/]+/g,"$1/<home>"],[/(\/home)\/[^/]+/g,"$1/<home>"],[/(\/var\/home)\/[^/]+/g,"$1/<home>"],[/([A-Za-z]:\\Users)\\[^\\]+/g,"$1\\<home>"],[/([A-Za-z]:\\Documents and Settings)\\[^\\]+/g,"$1\\<home>"],[/(file:\/\/\/Users)\/[^/]+/g,"$1/<home>"],[/(file:\/\/\/home)\/[^/]+/g,"$1/<home>"],[/(file:\/\/\/var\/home)\/[^/]+/g,"$1/<home>"],[/(file:\/\/[A-Za-z]:\/Users)\/[^/]+/g,"$1/<home>"]];function replaceUserPaths(s,replacement="<home>"){return"string"!=typeof s?s:pathRegexps.reduce((acc,[re,tpl])=>acc.replace(re,tpl.replace("<home>",replacement)),s)}function scrubUserPathsBrowser(event){const replacement=HiddenField,message=event.message?replaceUserPaths(event.message,replacement):event.message,valuesIn=event.exception?.values,valuesOut=valuesIn?.map(v=>{const framesIn=v?.stacktrace?.frames,framesOut=framesIn?.map(f=>({...f,...f?.filename?{filename:replaceUserPaths(f.filename,replacement)}:{},...f?.abs_path?{abs_path:replaceUserPaths(f.abs_path,replacement)}:{},...f?.module?{module:replaceUserPaths(f.module,replacement)}:{},...f?.function?{function:replaceUserPaths(f.function,replacement)}:{}})),stacktraceOut=v?.stacktrace?{...v.stacktrace,...framesOut?{frames:framesOut}:{}}:v?.stacktrace;return{...v,...v?.value?{value:replaceUserPaths(v.value,replacement)}:{},...v?.type?{type:replaceUserPaths(v.type,replacement)}:{},...v?.stacktrace?{stacktrace:stacktraceOut}:{}}}),exceptionOut=event.exception?{...event.exception,...valuesOut?{values:valuesOut}:{}}:event.exception,requestOut=event.request?{...event.request,...event.request.url?{url:replaceUserPaths(event.request.url,replacement)}:{}}:event.request,extraIn=event.extra,extraOut=extraIn?Object.fromEntries(Object.entries(extraIn).map(([k,v])=>[k,"string"==typeof v?replaceUserPaths(v,replacement):v])):extraIn,breadcrumbsIn=event.breadcrumbs,breadcrumbsOut=breadcrumbsIn?.map(b=>{const dataIn=b?.data,dataOut=dataIn?Object.fromEntries(Object.entries(dataIn).map(([key,val])=>[key,"string"==typeof val?replaceUserPaths(val,replacement):val])):dataIn;return{...b,...b?.message?{message:replaceUserPaths(b.message,replacement)}:{},...b?.data&&"object"==typeof b.data?{data:dataOut}:{}}});return{...event,...message?{message:message}:{},...exceptionOut?{exception:exceptionOut}:{},...requestOut?{request:requestOut}:{},...void 0!==extraOut?{extra:extraOut}:{},...breadcrumbsOut?{breadcrumbs:breadcrumbsOut}:{}}}const browser=Object.freeze(Object.defineProperty({__proto__:null,rewriteFramesIntegrationBrowser:rewriteFramesIntegrationBrowser,scrubUserPathsBrowser:scrubUserPathsBrowser},Symbol.toStringTag,{value:"Module"}));export{browser as b,rewriteFramesIntegrationBrowser as r,scrubUserPathsBrowser as s};
|
|
2
|
-
//# sourceMappingURL=browser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sources":["../../src/Utils/IntegrationsBrowser.ts","../../src/Utils/ScrubsBrowser.ts"],"sourcesContent":["import type { StackFrame } from '@sentry/browser';\nimport { rewriteFramesIntegration } from '@sentry/browser';\nimport type { Integration } from '@sentry/core';\n\nexport const rewriteFramesIntegrationBrowser = (): Integration =>\n rewriteFramesIntegration({\n // eslint-disable-next-line spellcheck/spell-checker\n iteratee: (frame: StackFrame): StackFrame => {\n const f: StackFrame = { ...(frame as any) } as any;\n if (!f.filename) return f;\n\n const name: string = String(f.filename).replace(/\\\\/g, '/');\n // already normalized\n if (name.startsWith('app:///')) return f;\n\n // Prefer the LAST \"/dist/\" occurrence so nested paths like\n // \".../dist/mac-arm64/.../app.asar/dist/dist-desktop/...\" map to\n // \"app:///dist/dist-desktop/...\" which matches uploaded urlPrefix/app paths.\n const cutToLastDist = (p: string): string | null => {\n const idx: number = p.lastIndexOf('/dist/');\n if (idx < 0) return null;\n return p.slice(idx).replace(/^\\/+/, '');\n };\n\n const relFromLast = cutToLastDist(name);\n if (relFromLast) {\n // eslint-disable-next-line functional/immutable-data\n (f as any).filename = `app:///${relFromLast}`;\n if (f.abs_path) {\n const abs: string = String(f.abs_path).replace(/\\\\/g, '/');\n const absRel: string | null = cutToLastDist(abs);\n if (absRel) {\n // eslint-disable-next-line functional/immutable-data\n (f as any).abs_path = `app:///${absRel}`;\n }\n }\n return f;\n }\n\n return f;\n }\n });\n","import { HiddenField } from '@Anarchy/Tracking/Constants';\nimport type { ErrorEvent } from '@sentry/browser';\n\nconst pathRegexps: ReadonlyArray<[RegExp, string]> = [\n // macOS: /Users/<name>/...\n [/(\\/Users)\\/[^/]+/g, '$1/<home>'],\n\n // Linux: /home/<name>/... and /var/home/<name>/...\n [/(\\/home)\\/[^/]+/g, '$1/<home>'],\n [/(\\/var\\/home)\\/[^/]+/g, '$1/<home>'],\n\n // Windows: C:\\\\Users\\\\<name>\\\\... (any drive letter)\n [/([A-Za-z]:\\\\Users)\\\\[^\\\\]+/g, '$1\\\\<home>'],\n\n // Old Windows: C:\\\\Documents and Settings\\\\<name>\\\\...\n [/([A-Za-z]:\\\\Documents and Settings)\\\\[^\\\\]+/g, '$1\\\\<home>'],\n\n // file:// URLs: file:///Users/<name>/..., file:///home/<name>/..., file://C:/Users/<name>/...\n [/(file:\\/\\/\\/Users)\\/[^/]+/g, '$1/<home>'],\n [/(file:\\/\\/\\/home)\\/[^/]+/g, '$1/<home>'],\n [/(file:\\/\\/\\/var\\/home)\\/[^/]+/g, '$1/<home>'],\n [/(file:\\/\\/[A-Za-z]:\\/Users)\\/[^/]+/g, '$1/<home>']\n];\n\nfunction replaceUserPaths(s?: unknown, replacement: string = '<home>'): string | unknown {\n if (typeof s !== 'string') return s;\n return pathRegexps.reduce((acc: string, [re, tpl]) => acc.replace(re, tpl.replace('<home>', replacement)), s);\n}\n\nexport function scrubUserPathsBrowser(event: ErrorEvent): ErrorEvent {\n const replacement = HiddenField;\n\n const message = event.message ? (replaceUserPaths(event.message, replacement) as string) : event.message;\n\n const valuesIn = event.exception?.values as ReadonlyArray<any> | undefined;\n const valuesOut = valuesIn?.map((v: any) => {\n const framesIn: ReadonlyArray<any> | undefined = v?.stacktrace?.frames;\n const framesOut = (framesIn as any[] | undefined)?.map((f: any) => ({\n ...f,\n ...(f?.filename ? { filename: replaceUserPaths(f.filename, replacement) } : {}),\n ...(f?.abs_path ? { abs_path: replaceUserPaths(f.abs_path, replacement) } : {}),\n ...(f?.module ? { module: replaceUserPaths(f.module, replacement) } : {}),\n ...(f?.function ? { function: replaceUserPaths(f.function, replacement) } : {})\n }));\n\n const stacktraceOut = v?.stacktrace ? { ...v.stacktrace, ...(framesOut ? { frames: framesOut } : {}) } : v?.stacktrace;\n\n return {\n ...v,\n ...(v?.value ? { value: replaceUserPaths(v.value, replacement) } : {}),\n ...(v?.type ? { type: replaceUserPaths(v.type, replacement) } : {}),\n ...(v?.stacktrace ? { stacktrace: stacktraceOut } : {})\n };\n });\n\n const exceptionOut = event.exception ? { ...event.exception, ...(valuesOut ? { values: valuesOut } : {}) } : event.exception;\n\n const requestOut = event.request\n ? {\n ...event.request,\n ...(event.request.url ? { url: replaceUserPaths(event.request.url, replacement) as string } : {})\n }\n : event.request;\n\n const extraIn = event.extra as Record<string, unknown> | undefined;\n const extraOut = extraIn ? Object.fromEntries(Object.entries(extraIn).map(([k, v]) => [k, typeof v === 'string' ? replaceUserPaths(v, replacement) : v])) : extraIn;\n\n const breadcrumbsIn = event.breadcrumbs as any[] | undefined;\n const breadcrumbsOut = breadcrumbsIn?.map((b: any) => {\n const dataIn = b?.data as Record<string, unknown> | undefined;\n const dataOut = dataIn ? Object.fromEntries(Object.entries(dataIn).map(([key, val]) => [key, typeof val === 'string' ? replaceUserPaths(val as string, replacement) : val])) : dataIn;\n\n return {\n ...b,\n ...(b?.message ? { message: replaceUserPaths(b.message, replacement) } : {}),\n ...(b?.data && typeof b.data === 'object' ? { data: dataOut } : {})\n };\n });\n\n return {\n ...event,\n ...(message ? { message } : {}),\n ...(exceptionOut ? { exception: exceptionOut as any } : {}),\n ...(requestOut ? { request: requestOut as any } : {}),\n ...(extraOut !== undefined ? { extra: extraOut as any } : {}),\n ...(breadcrumbsOut ? { breadcrumbs: breadcrumbsOut as any } : {})\n };\n}\n"],"names":["rewriteFramesIntegrationBrowser","rewriteFramesIntegration","iteratee","frame","f","filename","name","String","replace","startsWith","cutToLastDist","p","idx","lastIndexOf","slice","relFromLast","abs_path","absRel","pathRegexps","replaceUserPaths","s","replacement","reduce","acc","re","tpl","scrubUserPathsBrowser","event","HiddenField","message","valuesIn","exception","values","valuesOut","map","v","framesIn","stacktrace","frames","framesOut","module","function","stacktraceOut","value","type","exceptionOut","requestOut","request","url","extraIn","extra","extraOut","Object","fromEntries","entries","k","breadcrumbsIn","breadcrumbs","breadcrumbsOut","b","dataIn","data","dataOut","key","val"],"mappings":"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"}
|
package/dist/chunks/index.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const HiddenField="hidden",isDefined=value=>null!=value,isString=value=>"string"==typeof value;function mutateEventWithDynamicData(result,dynamicContextFn,dynamicTagsFn){if(isDefined(dynamicContextFn)&&(result.contexts={...result.contexts??{},extra:dynamicContextFn()}),isDefined(dynamicTagsFn)){const dynamicTags=dynamicTagsFn();Object.keys(dynamicTags).forEach(key=>{result.tags={...result.tags??{},[key]:dynamicTags[key]}})}}function scrubEvent(event){return event.user||(event.user=null),event.request&&(event.request={...event.request,url:"hidden",headers:{...event.request?.headers,url:"hidden",Referer:"hidden",referer:"hidden"}},delete event.request.headers?.Cookie,delete event.request.headers?.cookie),event.contexts?.geo&&delete event.contexts.geo,event.contexts?.Geography&&delete event.contexts.Geography,event.contexts?.geography&&delete event.contexts.geography,event.breadcrumbs||(event.breadcrumbs=void 0),event}export{HiddenField as H,isString as a,isDefined as i,mutateEventWithDynamicData as m,scrubEvent as s};
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
package/dist/chunks/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/Constants/Masks.ts","../../../anarchy-shared/src/Utils/CheckUtils.ts","../../src/Utils/DynamicDataUtils.ts","../../src/Utils/ScrubEvent.ts"],"sourcesContent":["export const HiddenField = 'hidden' as const;\n","export const isDefined = <T>(value: T | undefined | null): value is T => <T>value !== undefined && <T>value !== null;\n\nexport const isAllDefined = <T>(values: ReadonlyArray<T | undefined | null>): values is ReadonlyArray<T> => !values.some(isNotDefined);\n\nexport const isNotDefined = <T>(value: T | undefined | null): value is undefined | null => !isDefined<T>(value);\n\nexport const isAllNotDefined = <T>(values: ReadonlyArray<T | undefined | null>): values is ReadonlyArray<undefined | null> => values.every(isNotDefined);\n\nexport const isString = (value: unknown): value is string => typeof value === 'string';\n\nexport const isBoolean = (value: unknown): value is boolean => typeof value === 'boolean';\n","import { isDefined } from '@Anarchy/Shared/Utils';\nimport type { ErrorEvent, Primitive } from '@sentry/core';\n\nexport function mutateEventWithDynamicData(result: ErrorEvent, dynamicContextFn?: () => Record<string, any>, dynamicTagsFn?: () => Record<string, Primitive>): void {\n // eslint-disable-next-line functional/immutable-data\n if (isDefined(dynamicContextFn)) result.contexts = { ...(result.contexts ?? {}), extra: dynamicContextFn() };\n if (isDefined(dynamicTagsFn)) {\n const dynamicTags = dynamicTagsFn();\n // eslint-disable-next-line functional/immutable-data\n Object.keys(dynamicTags).forEach((key: string): void => void (result.tags = { ...(result.tags ?? {}), [key]: dynamicTags[key] }));\n }\n}\n","import { HiddenField } from '@Anarchy/Tracking/Constants';\nimport type { ErrorEvent } from '@sentry/core';\n\nexport function scrubEvent(event: ErrorEvent): ErrorEvent {\n // eslint-disable-next-line functional/immutable-data\n if (!event.user) event.user = null as any;\n\n if (event.request) {\n // eslint-disable-next-line functional/immutable-data\n event.request = {\n ...event.request,\n url: HiddenField,\n headers: {\n ...event.request?.headers,\n url: HiddenField,\n Referer: HiddenField,\n referer: HiddenField\n }\n };\n\n delete (event.request.headers as any)?.Cookie;\n delete (event.request.headers as any)?.cookie;\n }\n\n // eslint-disable-next-line functional/immutable-data\n if ((event as any).contexts?.geo) delete (event as any).contexts.geo;\n // eslint-disable-next-line functional/immutable-data\n if ((event as any).contexts?.Geography) delete (event as any).contexts.Geography;\n // eslint-disable-next-line functional/immutable-data\n if ((event as any).contexts?.geography) delete (event as any).contexts.geography;\n\n // eslint-disable-next-line functional/immutable-data\n if (!event.breadcrumbs) event.breadcrumbs = undefined;\n\n return event;\n}\n"],"names":["HiddenField","isDefined","value","isString","mutateEventWithDynamicData","result","dynamicContextFn","dynamicTagsFn","contexts","extra","dynamicTags","Object","keys","forEach","key","tags","scrubEvent","event","user","request","url","headers","Referer","referer","Cookie","cookie","geo","Geography","geography","breadcrumbs"],"mappings":"AAAO,MAAMA,YAAc,SCAdC,UAAgBC,OAA+CA,YAQ/DC,SAAYD,OAAqD,iBAAVA,MCL7D,SAASE,2BAA2BC,OAAoBC,iBAA8CC,eAG3G,GADIN,UAAUK,oBAAmBD,OAAOG,SAAW,IAAMH,OAAOG,UAAY,CAAA,EAAKC,MAAOH,qBACpFL,UAAUM,eAAgB,CAC5B,MAAMG,YAAcH,gBAEpBI,OAAOC,KAAKF,aAAaG,QAASC,MAA4BT,OAAOU,KAAO,IAAMV,OAAOU,MAAQ,GAAKD,CAACA,KAAMJ,YAAYI,OAC3H,CACF,CCRO,SAASE,WAAWC,OA+BzB,OA7BKA,MAAMC,OAAMD,MAAMC,KAAO,MAE1BD,MAAME,UAERF,MAAME,QAAU,IACXF,MAAME,QACTC,IHXqB,SGYrBC,QAAS,IACJJ,MAAME,SAASE,QAClBD,IHdmB,SGenBE,QHfmB,SGgBnBC,QHhBmB,kBGoBfN,MAAME,QAAQE,SAAiBG,cAC/BP,MAAME,QAAQE,SAAiBI,QAIpCR,MAAcT,UAAUkB,YAAaT,MAAcT,SAASkB,IAE5DT,MAAcT,UAAUmB,kBAAmBV,MAAcT,SAASmB,UAElEV,MAAcT,UAAUoB,kBAAmBX,MAAcT,SAASoB,UAGlEX,MAAMY,cAAaZ,MAAMY,iBAAc,GAErCZ,KACT"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|