@swifty.js/sentry 0.0.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.
Files changed (161) hide show
  1. package/README.md +785 -0
  2. package/dist/constants/index.cjs +1 -0
  3. package/dist/constants/index.js +1 -0
  4. package/dist/core/api.cjs +1 -0
  5. package/dist/core/api.d.ts +27 -0
  6. package/dist/core/api.js +1 -0
  7. package/dist/core/breadcrumb.cjs +1 -0
  8. package/dist/core/breadcrumb.js +1 -0
  9. package/dist/core/bus.cjs +1 -0
  10. package/dist/core/bus.js +1 -0
  11. package/dist/core/decorate-http-publish.cjs +1 -0
  12. package/dist/core/decorate-http-publish.js +1 -0
  13. package/dist/core/decorate-publish.cjs +1 -0
  14. package/dist/core/decorate-publish.js +1 -0
  15. package/dist/core/decorate-route-publish.cjs +1 -0
  16. package/dist/core/decorate-route-publish.js +1 -0
  17. package/dist/core/framework-error.cjs +1 -0
  18. package/dist/core/framework-error.js +1 -0
  19. package/dist/core/handle-code-error.cjs +1 -0
  20. package/dist/core/handle-code-error.js +1 -0
  21. package/dist/core/handle-error.cjs +1 -0
  22. package/dist/core/handle-error.js +1 -0
  23. package/dist/core/handle-events.cjs +1 -0
  24. package/dist/core/handle-events.js +1 -0
  25. package/dist/core/handle-http.cjs +1 -0
  26. package/dist/core/handle-http.js +1 -0
  27. package/dist/core/handle-route.cjs +1 -0
  28. package/dist/core/handle-route.js +1 -0
  29. package/dist/core/identity.cjs +1 -0
  30. package/dist/core/identity.d.ts +11 -0
  31. package/dist/core/identity.js +1 -0
  32. package/dist/core/ip.cjs +1 -0
  33. package/dist/core/ip.d.ts +3 -0
  34. package/dist/core/ip.js +1 -0
  35. package/dist/core/options-schema.cjs +1 -0
  36. package/dist/core/options-schema.d.ts +52 -0
  37. package/dist/core/options-schema.js +1 -0
  38. package/dist/core/plugin-registry.cjs +1 -0
  39. package/dist/core/plugin-registry.js +1 -0
  40. package/dist/core/pv-lifecycle.cjs +1 -0
  41. package/dist/core/pv-lifecycle.js +1 -0
  42. package/dist/core/sdk-lifecycle.cjs +1 -0
  43. package/dist/core/sdk-lifecycle.d.ts +9 -0
  44. package/dist/core/sdk-lifecycle.js +1 -0
  45. package/dist/core/setup.cjs +1 -0
  46. package/dist/core/setup.js +1 -0
  47. package/dist/core/white-screen.cjs +1 -0
  48. package/dist/core/white-screen.js +1 -0
  49. package/dist/index.cjs +1 -0
  50. package/dist/index.d.ts +9 -0
  51. package/dist/index.js +1 -0
  52. package/dist/package.json.cjs +1 -0
  53. package/dist/package.json.js +1 -0
  54. package/dist/plugins/exposure/index.cjs +1 -0
  55. package/dist/plugins/exposure/index.d.ts +23 -0
  56. package/dist/plugins/exposure/index.js +1 -0
  57. package/dist/plugins/index.cjs +1 -0
  58. package/dist/plugins/index.d.ts +4 -0
  59. package/dist/plugins/index.js +1 -0
  60. package/dist/plugins/performance/first-screen-paint.cjs +1 -0
  61. package/dist/plugins/performance/first-screen-paint.js +1 -0
  62. package/dist/plugins/performance/index.cjs +1 -0
  63. package/dist/plugins/performance/index.d.ts +16 -0
  64. package/dist/plugins/performance/index.js +1 -0
  65. package/dist/plugins/performance/navigation-timing.cjs +1 -0
  66. package/dist/plugins/performance/navigation-timing.js +1 -0
  67. package/dist/plugins/performance/perf.cjs +1 -0
  68. package/dist/plugins/performance/perf.js +1 -0
  69. package/dist/plugins/performance/performance-observer-support.cjs +1 -0
  70. package/dist/plugins/performance/performance-observer-support.js +1 -0
  71. package/dist/plugins/performance/resource-element-fallback.cjs +1 -0
  72. package/dist/plugins/performance/resource-element-fallback.js +1 -0
  73. package/dist/plugins/performance/resource-timing.cjs +1 -0
  74. package/dist/plugins/performance/resource-timing.js +1 -0
  75. package/dist/plugins/screen-record/index.cjs +1 -0
  76. package/dist/plugins/screen-record/index.d.ts +18 -0
  77. package/dist/plugins/screen-record/index.js +1 -0
  78. package/dist/plugins/screen-record/recorder.cjs +1 -0
  79. package/dist/plugins/screen-record/recorder.d.ts +3 -0
  80. package/dist/plugins/screen-record/recorder.js +1 -0
  81. package/dist/react.cjs +1 -0
  82. package/dist/react.d.ts +103 -0
  83. package/dist/react.js +1 -0
  84. package/dist/reporter/batch.cjs +1 -0
  85. package/dist/reporter/batch.js +1 -0
  86. package/dist/reporter/flush-scheduler.cjs +1 -0
  87. package/dist/reporter/flush-scheduler.js +1 -0
  88. package/dist/reporter/index.cjs +1 -0
  89. package/dist/reporter/index.js +1 -0
  90. package/dist/reporter/network-listener.cjs +1 -0
  91. package/dist/reporter/network-listener.js +1 -0
  92. package/dist/reporter/offline-cache.cjs +1 -0
  93. package/dist/reporter/offline-cache.js +1 -0
  94. package/dist/reporter/promise.cjs +1 -0
  95. package/dist/reporter/promise.js +1 -0
  96. package/dist/reporter/report-data-schema.cjs +1 -0
  97. package/dist/reporter/report-data-schema.js +1 -0
  98. package/dist/reporter/report-data.cjs +1 -0
  99. package/dist/reporter/report-data.js +1 -0
  100. package/dist/reporter/send-preflight.cjs +1 -0
  101. package/dist/reporter/send-preflight.js +1 -0
  102. package/dist/reporter/server-recovery.cjs +1 -0
  103. package/dist/reporter/server-recovery.js +1 -0
  104. package/dist/reporter/timer.cjs +1 -0
  105. package/dist/reporter/timer.js +1 -0
  106. package/dist/reporter/transports.cjs +1 -0
  107. package/dist/reporter/transports.js +1 -0
  108. package/dist/types/common.d.ts +140 -0
  109. package/dist/types/enums.cjs +1 -0
  110. package/dist/types/enums.d.ts +77 -0
  111. package/dist/types/enums.js +1 -0
  112. package/dist/types/handlers.d.ts +11 -0
  113. package/dist/types/options.d.ts +51 -0
  114. package/dist/types/plugin.cjs +1 -0
  115. package/dist/types/plugin.d.ts +15 -0
  116. package/dist/types/plugin.js +1 -0
  117. package/dist/utils/base64.cjs +1 -0
  118. package/dist/utils/base64.js +1 -0
  119. package/dist/utils/click-data.cjs +1 -0
  120. package/dist/utils/click-data.js +1 -0
  121. package/dist/utils/data-structures.cjs +1 -0
  122. package/dist/utils/data-structures.js +1 -0
  123. package/dist/utils/decorate-prop.cjs +1 -0
  124. package/dist/utils/decorate-prop.d.ts +3 -0
  125. package/dist/utils/decorate-prop.js +1 -0
  126. package/dist/utils/event2breadcrumb.cjs +1 -0
  127. package/dist/utils/event2breadcrumb.js +1 -0
  128. package/dist/utils/get-base-data.cjs +1 -0
  129. package/dist/utils/get-base-data.js +1 -0
  130. package/dist/utils/get-css-selectors.cjs +1 -0
  131. package/dist/utils/get-css-selectors.js +1 -0
  132. package/dist/utils/is-excluded-api.cjs +1 -0
  133. package/dist/utils/is-excluded-api.js +1 -0
  134. package/dist/utils/is-ignored-error.cjs +1 -0
  135. package/dist/utils/is-ignored-error.js +1 -0
  136. package/dist/utils/is-type.cjs +1 -0
  137. package/dist/utils/is-type.js +1 -0
  138. package/dist/utils/logger.cjs +1 -0
  139. package/dist/utils/logger.js +1 -0
  140. package/dist/utils/metric2perf-data.cjs +1 -0
  141. package/dist/utils/metric2perf-data.js +1 -0
  142. package/dist/utils/sentry.cjs +1 -0
  143. package/dist/utils/sentry.js +1 -0
  144. package/dist/utils/server-timing.cjs +1 -0
  145. package/dist/utils/server-timing.js +1 -0
  146. package/dist/utils/session.cjs +1 -0
  147. package/dist/utils/session.js +1 -0
  148. package/dist/utils/throttle.cjs +1 -0
  149. package/dist/utils/throttle.js +1 -0
  150. package/dist/utils/transform-http-data.cjs +1 -0
  151. package/dist/utils/transform-http-data.js +1 -0
  152. package/dist/vite.cjs +1 -0
  153. package/dist/vite.d.ts +11 -0
  154. package/dist/vite.js +1 -0
  155. package/dist/vue.cjs +1 -0
  156. package/dist/vue.d.ts +5 -0
  157. package/dist/vue.js +1 -0
  158. package/dist/webpack.cjs +1 -0
  159. package/dist/webpack.d.ts +55 -0
  160. package/dist/webpack.js +1 -0
  161. package/package.json +128 -0
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../types/enums.cjs"),r=require("../package.json.cjs");const{version:n}=r.default,t="unknown",o={dsn:"",projectId:t,userId:t,disabled:!1,enableXhr:!0,enableFetch:!0,enableClick:!0,enableError:!0,enableUnhandledRejection:!0,enableHashChange:!0,enableHistory:!0,enablePerformance:!0,enableScreenRecord:!0,enableWhiteScreen:!0,enableFingerprint:!1,anonymousId:t,visitorId:t,maxBreadcrumbs:30,useImageReport:!1,screenRecordEventTypes:[e.EventType.Error,e.EventType.Xhr,e.EventType.Fetch,e.EventType.Resource,e.EventType.UnhandledRejection],hasSkeleton:!1,rootCssSelectors:["html","body","#app","#root"],clickThrottleDelay:0,requestTimeoutMilliseconds:3e3,screenRecordDurationMs:3e3,repeatCodeError:!1,enableHttpPerformance:!1,ignoreErrors:[],excludeApis:[],cacheMaxLength:10,cacheWaitingTime:2e3,maxQueueLength:200,retryIntervalMilliseconds:6e4,offlineCacheKey:"swifty_sentry_offline_cache",tracesSampleRate:1,debug:!1};exports.DEFAULT_OPTIONS=o,exports.MAX_BREADCRUMBS=30,exports.MAX_WHITE_SCREEN_SAMPLE_COUNT=10,exports.SDK_VERSION=n,exports.UNKNOWN=t,exports.WHITE_SCREEN_SAMPLE_INTERVAL=1e3;
@@ -0,0 +1 @@
1
+ import{EventType as e}from"../types/enums.js";import r from"../package.json.js";const{version:n}=r,o=30,a=10,t=1e3,s="unknown",c={dsn:"",projectId:s,userId:s,disabled:!1,enableXhr:!0,enableFetch:!0,enableClick:!0,enableError:!0,enableUnhandledRejection:!0,enableHashChange:!0,enableHistory:!0,enablePerformance:!0,enableScreenRecord:!0,enableWhiteScreen:!0,enableFingerprint:!1,anonymousId:s,visitorId:s,maxBreadcrumbs:30,useImageReport:!1,screenRecordEventTypes:[e.Error,e.Xhr,e.Fetch,e.Resource,e.UnhandledRejection],hasSkeleton:!1,rootCssSelectors:["html","body","#app","#root"],clickThrottleDelay:0,requestTimeoutMilliseconds:3e3,screenRecordDurationMs:3e3,repeatCodeError:!1,enableHttpPerformance:!1,ignoreErrors:[],excludeApis:[],cacheMaxLength:10,cacheWaitingTime:2e3,maxQueueLength:200,retryIntervalMilliseconds:6e4,offlineCacheKey:"swifty_sentry_offline_cache",tracesSampleRate:1,debug:!1};export{c as DEFAULT_OPTIONS,o as MAX_BREADCRUMBS,a as MAX_WHITE_SCREEN_SAMPLE_COUNT,n as SDK_VERSION,s as UNKNOWN,t as WHITE_SCREEN_SAMPLE_INTERVAL};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../types/enums.cjs");require("../constants/index.cjs");var t=require("../utils/get-base-data.cjs"),r=require("../utils/sentry.cjs"),a=require("./handle-error.cjs");require("./breadcrumb.cjs");var s=require("../reporter/index.cjs");exports.afterSendData=function(e){r.default.setOptions({afterSendData:e})},exports.beforePushEventList=function(e){r.default.setOptions({beforePushEventList:e})},exports.beforeSendData=function(e){r.default.setOptions({onBeforeReportData:e})},exports.getBaseInfo=function(){return t.default()},exports.getUserId=function(){return r.default.options.userId},exports.sendLocal=async function(){await s.default.flushOfflineCache()},exports.traceCustomEvent=function(r){s.default.send({...t.default(),type:e.EventType.Custom,status:e.Status.OK,name:r.name,message:r.message,extra:r.extra})},exports.traceError=function(r){a.handleError({...t.default(),type:e.EventType.Error,status:e.Status.Error,extra:r})},exports.tracePageView=function(r={}){s.default.send({...t.default(),type:e.EventType.PV,name:r.name??"ManualPageView",message:r.message??location.href,status:e.Status.OK,extra:r.extra??{url:location.href,referrer:document.referrer}})},exports.tracePerformance=function(r){s.default.send({...t.default(),type:e.EventType.Performance,status:e.Status.OK,...r})};
@@ -0,0 +1,27 @@
1
+ import { IReportPayload } from '../types/common.js';
2
+ import { AfterSendDataHook, ReportBatchHook, ReportDataHook } from '../types/options.js';
3
+
4
+ declare function traceError(error: unknown): void;
5
+ declare function tracePerformance(input: {
6
+ readonly name: string;
7
+ readonly message: string;
8
+ readonly value: number;
9
+ }): void;
10
+ declare function traceCustomEvent(input: {
11
+ readonly name: string;
12
+ readonly message: string;
13
+ readonly extra?: unknown;
14
+ }): void;
15
+ declare function tracePageView(input?: {
16
+ readonly name?: string;
17
+ readonly message?: string;
18
+ readonly extra?: unknown;
19
+ }): void;
20
+ declare function getUserId(): string;
21
+ declare function getBaseInfo(): IReportPayload;
22
+ declare function beforeSendData(hook: ReportDataHook): void;
23
+ declare function beforePushEventList(hook: ReportBatchHook): void;
24
+ declare function afterSendData(hook: AfterSendDataHook): void;
25
+ declare function sendLocal(): Promise<void>;
26
+
27
+ export { afterSendData, beforePushEventList, beforeSendData, getBaseInfo, getUserId, sendLocal, traceCustomEvent, traceError, tracePageView, tracePerformance };
@@ -0,0 +1 @@
1
+ import{Status as e,EventType as t}from"../types/enums.js";import"../constants/index.js";import r from"../utils/get-base-data.js";import n from"../utils/sentry.js";import{handleError as s}from"./handle-error.js";import"./breadcrumb.js";import o from"../reporter/index.js";function a(n){s({...r(),type:t.Error,status:e.Error,extra:n})}function i(n){o.send({...r(),type:t.Performance,status:e.OK,...n})}function u(n){o.send({...r(),type:t.Custom,status:e.OK,name:n.name,message:n.message,extra:n.extra})}function f(n={}){o.send({...r(),type:t.PV,name:n.name??"ManualPageView",message:n.message??location.href,status:e.OK,extra:n.extra??{url:location.href,referrer:document.referrer}})}function m(){return n.options.userId}function p(){return r()}function c(e){n.setOptions({onBeforeReportData:e})}function d(e){n.setOptions({beforePushEventList:e})}function l(e){n.setOptions({afterSendData:e})}async function x(){await o.flushOfflineCache()}export{l as afterSendData,d as beforePushEventList,c as beforeSendData,p as getBaseInfo,m as getUserId,x as sendLocal,u as traceCustomEvent,a as traceError,f as tracePageView,i as tracePerformance};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../utils/data-structures.cjs");require("../types/enums.cjs");var s=require("../utils/sentry.cjs");class t extends e.MinHeap{static#e;static get instance(){return t.#e||(t.#e=new t),t.#e}push(e){const{onBeforePushBreadcrumb:t}=s.default.options;return t&&(e=t(e)),super.push(e)}}const r=t.instance;exports.Breadcrumb=t,exports.default=r;
@@ -0,0 +1 @@
1
+ import{MinHeap as s}from"../utils/data-structures.js";import"../types/enums.js";import t from"../utils/sentry.js";class e extends s{static#s;static get instance(){return e.#s||(e.#s=new e),e.#s}push(s){const{onBeforePushBreadcrumb:e}=t.options;return e&&(s=e(s)),super.push(s)}}const n=e.instance;export{e as Breadcrumb,n as default};
@@ -0,0 +1 @@
1
+ "use strict";require("../constants/index.cjs"),require("../types/enums.cjs"),require("../utils/sentry.cjs");var e=require("../utils/logger.cjs");const r=new Map;exports.clearSubscriptions=()=>{r.clear()},exports.pub=(t,s)=>{const n=r.get(t);if(n)for(const r of n)try{r(s)}catch(r){e.sentryLogger.error("Error executing event handler",r)}},exports.sub=(e,t)=>{const s=r.get(e);return s?(s.add(t),()=>{s.delete(t)}):(r.set(e,new Set([t])),()=>{r.get(e)?.delete(t)})};
@@ -0,0 +1 @@
1
+ import"../constants/index.js";import"../types/enums.js";import"../utils/sentry.js";import{sentryLogger as e}from"../utils/logger.js";const t=new Map,r=(r,o)=>{const s=t.get(r);if(s)for(const t of s)try{t(o)}catch(t){e.error("Error executing event handler",t)}},o=(e,r)=>{const o=t.get(e);return o?(o.add(r),()=>{o.delete(r)}):(t.set(e,new Set([r])),()=>{t.get(e)?.delete(r)})},s=()=>{t.clear()};export{s as clearSubscriptions,r as pub,o as sub};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../types/enums.cjs");require("../constants/index.cjs");var t=require("../utils/decorate-prop.cjs"),s=require("../utils/get-base-data.cjs"),r=require("../utils/is-excluded-api.cjs"),n=require("../utils/sentry.cjs"),i=require("../utils/server-timing.cjs"),a=require("./bus.cjs");function o(t,s){return t.toUpperCase()===e.HttpMethod.Post&&s===n.default.options.dsn||r.default(s)}exports.pubFetch=function(){return t.default(globalThis,"fetch",t=>async function(r,n){const p=n?.method?.toUpperCase()??e.HttpMethod.Get,u={...s.default(),type:e.EventType.Fetch,method:p,requestData:{body:n?.body},name:"Fetch",api:r.toString(),elapsedTime:0,statusCode:e.HttpStatusCode.OK};return t.call(globalThis,r,n).then(t=>{const s=t.clone();return u.elapsedTime=Date.now()-u.timestamp,u.statusCode=s.status,u.serverTiming=i.getServerTimingFromHeaders(s.headers),s.text().then(t=>{o(p,r.toString())||(u.responseData=t,a.pub(e.EventType.Fetch,u))}).catch(()=>{o(p,r.toString())||a.pub(e.EventType.Fetch,u)}),t}).catch(t=>{throw o(p,r.toString())||(u.elapsedTime=Date.now()-u.timestamp,u.statusCode=0,u.message=t instanceof Error?t.message:"Network error",a.pub(e.EventType.Fetch,u)),t})})},exports.pubXhr=function(){const r=XMLHttpRequest.prototype,n=t.default(r,"open",t=>function(r,n,i,...a){return this.__sentry__={...s.default(),name:"XMLHttpRequest",type:e.EventType.Xhr,method:r.toUpperCase(),api:n,elapsedTime:0,statusCode:e.HttpStatusCode.OK},t.call(this,r,n,i,...a)}),p=t.default(r,"send",t=>function(s){if(!this.__sentry__)return t.call(this,s);const{method:r,api:n}=this.__sentry__;return this.addEventListener("loadend",()=>{o(r,n)||(this.__sentry__.statusCode=this.status,this.__sentry__.requestData={body:s},this.__sentry__.responseData={responseType:this.responseType,response:this.response},this.__sentry__.serverTiming=i.parseServerTiming(this.getResponseHeader("server-timing")),this.__sentry__.elapsedTime=Date.now()-this.__sentry__.timestamp,a.pub(e.EventType.Xhr,this.__sentry__))}),t.call(this,s)});return()=>{p(),n()}};
@@ -0,0 +1 @@
1
+ import{EventType as t,HttpStatusCode as e,HttpMethod as s}from"../types/enums.js";import"../constants/index.js";import r from"../utils/decorate-prop.js";import o from"../utils/get-base-data.js";import n from"../utils/is-excluded-api.js";import i from"../utils/sentry.js";import{parseServerTiming as a,getServerTimingFromHeaders as p}from"../utils/server-timing.js";import{pub as _}from"./bus.js";function m(){const s=XMLHttpRequest.prototype,n=r(s,"open",s=>function(r,n,i,...a){return this.__sentry__={...o(),name:"XMLHttpRequest",type:t.Xhr,method:r.toUpperCase(),api:n,elapsedTime:0,statusCode:e.OK},s.call(this,r,n,i,...a)}),i=r(s,"send",e=>function(s){if(!this.__sentry__)return e.call(this,s);const{method:r,api:o}=this.__sentry__;return this.addEventListener("loadend",()=>{u(r,o)||(this.__sentry__.statusCode=this.status,this.__sentry__.requestData={body:s},this.__sentry__.responseData={responseType:this.responseType,response:this.response},this.__sentry__.serverTiming=a(this.getResponseHeader("server-timing")),this.__sentry__.elapsedTime=Date.now()-this.__sentry__.timestamp,_(t.Xhr,this.__sentry__))}),e.call(this,s)});return()=>{i(),n()}}function h(){return r(globalThis,"fetch",r=>async function(n,i){const a=i?.method?.toUpperCase()??s.Get,m={...o(),type:t.Fetch,method:a,requestData:{body:i?.body},name:"Fetch",api:n.toString(),elapsedTime:0,statusCode:e.OK};return r.call(globalThis,n,i).then(e=>{const s=e.clone();return m.elapsedTime=Date.now()-m.timestamp,m.statusCode=s.status,m.serverTiming=p(s.headers),s.text().then(e=>{u(a,n.toString())||(m.responseData=e,_(t.Fetch,m))}).catch(()=>{u(a,n.toString())||_(t.Fetch,m)}),e}).catch(e=>{throw u(a,n.toString())||(m.elapsedTime=Date.now()-m.timestamp,m.statusCode=0,m.message=e instanceof Error?e.message:"Network error",_(t.Fetch,m)),e})})}function u(t,e){return t.toUpperCase()===s.Post&&e===i.options.dsn||n(e)}export{h as pubFetch,m as pubXhr};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../types/enums.cjs");require("../constants/index.cjs");var t=require("../utils/decorate-prop.cjs"),r=require("../utils/get-base-data.cjs"),n=require("../utils/sentry.cjs"),i=require("../utils/throttle.cjs"),u=require("./bus.cjs"),c=require("./decorate-http-publish.cjs"),s=require("./decorate-route-publish.cjs");function a(){}exports.default=function(o){switch(o){case e.EventType.Click:return function(){const t=i.throttle(u.pub,n.default.options.clickThrottleDelay),c=function(n){t(e.EventType.Click,{...r.default(),type:e.EventType.Click,extra:n})};return document.addEventListener("click",c),()=>{document.removeEventListener("click",c)}}();case e.EventType.Error:return function(){const n=function(t){u.pub(e.EventType.Error,{...r.default(),type:e.EventType.Error,extra:t})};globalThis.addEventListener("error",n,!0);let i=!1;const c=t.default(console,"error",t=>function(...n){if(!i){i=!0;try{u.pub(e.EventType.Error,{...r.default(),type:e.EventType.Error,extra:n.find(e=>e instanceof Error)??n.join(" ")})}finally{i=!1}}t.call(this,...n)});return()=>{globalThis.removeEventListener("error",n,!0),c()}}();case e.EventType.Xhr:return c.pubXhr();case e.EventType.Fetch:return c.pubFetch();case e.EventType.History:return s.pubHistory();case e.EventType.UnhandledRejection:return function(){const t=function(t){u.pub(e.EventType.UnhandledRejection,{...r.default(),type:e.EventType.UnhandledRejection,extra:t})};return globalThis.addEventListener("unhandledrejection",t),()=>{globalThis.removeEventListener("unhandledrejection",t)}}();case e.EventType.HashChange:return function(){const t=function(t){u.pub(e.EventType.HashChange,{...r.default(),type:e.EventType.HashChange,extra:t})};return globalThis.addEventListener("hashchange",t),()=>{globalThis.removeEventListener("hashchange",t)}}();case e.EventType.WhiteScreen:return u.pub(e.EventType.WhiteScreen,{...r.default(),type:e.EventType.WhiteScreen,extra:"WhiteScreen"}),a;default:return a}};
@@ -0,0 +1 @@
1
+ import{EventType as e}from"../types/enums.js";import"../constants/index.js";import t from"../utils/decorate-prop.js";import r from"../utils/get-base-data.js";import n from"../utils/sentry.js";import{throttle as o}from"../utils/throttle.js";import{pub as i}from"./bus.js";import{pubFetch as s,pubXhr as c}from"./decorate-http-publish.js";import{pubHistory as a}from"./decorate-route-publish.js";function l(){}function u(u){switch(u){case e.Click:return function(){const t=o(i,n.options.clickThrottleDelay),s=function(n){t(e.Click,{...r(),type:e.Click,extra:n})};return document.addEventListener("click",s),()=>{document.removeEventListener("click",s)}}();case e.Error:return function(){const n=function(t){i(e.Error,{...r(),type:e.Error,extra:t})};globalThis.addEventListener("error",n,!0);let o=!1;const s=t(console,"error",t=>function(...n){if(!o){o=!0;try{i(e.Error,{...r(),type:e.Error,extra:n.find(e=>e instanceof Error)??n.join(" ")})}finally{o=!1}}t.call(this,...n)});return()=>{globalThis.removeEventListener("error",n,!0),s()}}();case e.Xhr:return c();case e.Fetch:return s();case e.History:return a();case e.UnhandledRejection:return function(){const t=function(t){i(e.UnhandledRejection,{...r(),type:e.UnhandledRejection,extra:t})};return globalThis.addEventListener("unhandledrejection",t),()=>{globalThis.removeEventListener("unhandledrejection",t)}}();case e.HashChange:return function(){const t=function(t){i(e.HashChange,{...r(),type:e.HashChange,extra:t})};return globalThis.addEventListener("hashchange",t),()=>{globalThis.removeEventListener("hashchange",t)}}();case e.WhiteScreen:return i(e.WhiteScreen,{...r(),type:e.WhiteScreen,extra:"WhiteScreen"}),l;default:return l}}export{u as default};
@@ -0,0 +1 @@
1
+ "use strict";var t=require("../types/enums.cjs");require("../constants/index.cjs");var e=require("../utils/decorate-prop.cjs"),o=require("../utils/get-base-data.cjs");require("../utils/sentry.cjs");var r=require("./bus.cjs");let s="";function i(){return"document"in globalThis?globalThis.document.location.href:""}exports.pubHistory=function(){const n=globalThis.onpopstate;s=i(),globalThis.onpopstate=function(e){const u=s,l=i();return u===l?n?.call(this,e):(s=l,r.pub(t.EventType.History,{...o.default(),type:t.EventType.History,from:u,to:l}),"function"==typeof n?n.call(this,e):void 0)};const u=e=>function(n,u,l){if(l){const a=s,c=function(t){return new URL(t.toString(),i()).href}(l);if(a===c)return e.call(this,n,u,l);s=c,r.pub(t.EventType.History,{...o.default(),type:t.EventType.History,from:a,to:c})}return e.call(this,n,u,l)},l=e.default(globalThis.history,"pushState",u),a=e.default(globalThis.history,"replaceState",u);return()=>{globalThis.onpopstate=n,a(),l()}};
@@ -0,0 +1 @@
1
+ import{EventType as t}from"../types/enums.js";import"../constants/index.js";import o from"../utils/decorate-prop.js";import s from"../utils/get-base-data.js";import"../utils/sentry.js";import{pub as i}from"./bus.js";let r="";function n(){return"document"in globalThis?globalThis.document.location.href:""}function e(){const e=globalThis.onpopstate;r=n(),globalThis.onpopstate=function(o){const l=r,a=n();return l===a?e?.call(this,o):(r=a,i(t.History,{...s(),type:t.History,from:l,to:a}),"function"==typeof e?e.call(this,o):void 0)};const l=o=>function(e,l,a){if(a){const p=r,c=function(t){return new URL(t.toString(),n()).href}(a);if(p===c)return o.call(this,e,l,a);r=c,i(t.History,{...s(),type:t.History,from:p,to:c})}return o.call(this,e,l,a)},a=o(globalThis.history,"pushState",l),p=o(globalThis.history,"replaceState",l);return()=>{globalThis.onpopstate=e,p(),a()}}export{e as pubHistory};
@@ -0,0 +1 @@
1
+ "use strict";var r=require("../reporter/index.cjs"),e=require("../types/enums.cjs");require("../constants/index.cjs");var t=require("../utils/get-base-data.cjs");function n(r){if(r instanceof Error)return r.name;if(null===r)return"null";if(void 0===r)return"undefined";if("object"==typeof r){const e=Object.getPrototypeOf(r),t=e?.constructor?.name;return t??"Object"}return typeof r}function o(r){if(r instanceof Error)return r.message;if("string"==typeof r)return r;if(null===r)return"null";if(void 0===r)return"undefined";try{return JSON.stringify(r)}catch{return String(r)}}function u(r){if(r instanceof Error)return r.stack;if(null!==r&&"object"==typeof r){const e=Reflect.get(r,"stack");return"string"==typeof e?e:void 0}}require("../utils/sentry.cjs"),exports.reportFrameworkError=function(i){r.default.send({...t.default(),type:i.type,name:n(i.error),message:o(i.error),status:e.Status.Error,extra:{error:i.error,stack:u(i.error),context:i.context}})};
@@ -0,0 +1 @@
1
+ import r from"../reporter/index.js";import{Status as t}from"../types/enums.js";import"../constants/index.js";import e from"../utils/get-base-data.js";import"../utils/sentry.js";function n(r){if(r instanceof Error)return r.name;if(null===r)return"null";if(void 0===r)return"undefined";if("object"==typeof r){const t=Object.getPrototypeOf(r),e=t?.constructor?.name;return e??"Object"}return typeof r}function o(r){if(r instanceof Error)return r.message;if("string"==typeof r)return r;if(null===r)return"null";if(void 0===r)return"undefined";try{return JSON.stringify(r)}catch{return String(r)}}function i(r){if(r instanceof Error)return r.stack;if(null!==r&&"object"==typeof r){const t=Reflect.get(r,"stack");return"string"==typeof t?t:void 0}}function s(s){r.send({...e(),type:s.type,name:n(s.error),message:o(s.error),status:t.Error,extra:{error:s.error,stack:i(s.error),context:s.context}})}export{s as reportFrameworkError};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../types/enums.cjs"),r=require("../utils/base64.cjs"),t=require("../constants/index.cjs"),s=require("../utils/event2breadcrumb.cjs"),o=require("../utils/get-base-data.cjs"),i=require("../utils/sentry.cjs"),u=require("../utils/is-ignored-error.cjs"),a=require("../reporter/index.cjs"),c=require("./breadcrumb.cjs");const n=new class{cacheError=[];timeoutID;push(e){this.cacheError.push(e),this.timeoutID&&clearTimeout(this.timeoutID),this.timeoutID=setTimeout(()=>this.flush(),2e3)}destroy(){this.timeoutID&&(clearTimeout(this.timeoutID),this.timeoutID=void 0),this.cacheError=[]}flush(){if(0===this.cacheError.length)return;const e={};for(const r of this.cacheError){const t=`${r.type}-${r.name}-${r.message}`;e[t]=[...e[t]??[],r]}this.cacheError=[];for(const[,r]of Object.entries(e))this.reportGroup(r)}reportGroup(e){if(e.length<5)return void e.forEach(e=>a.default.send(e));const r=e[0];if(!r)return;const t={...r,batchError:!0,batchErrorLength:e.length,batchErrorLastHappenTime:e.at(-1)?.timestamp??r.timestamp};a.default.send(t)}};exports.destroyBatchErrorManager=function(){n.destroy()},exports.handleCodeError=function(a){const{filename:h,colno:d,lineno:l,message:m}=a;if(u.default(m))return;const f={...o.default(),type:e.EventType.Error,name:h,message:m,status:e.Status.Error},p={...f,column:d,line:l};c.default.push({...f,userAction:s.default(e.EventType.Error)});const E=!h||h===t.UNKNOWN,b=r.base64v2(`${e.EventType.Error}-${m}-${h}-${l}-${d}`);(E||i.default.options.repeatCodeError||!i.default.codeErrors.has(b))&&(i.default.codeErrors.add(b),n.push(p))};
@@ -0,0 +1 @@
1
+ import{Status as r,EventType as t}from"../types/enums.js";import{base64v2 as o}from"../utils/base64.js";import{UNKNOWN as e}from"../constants/index.js";import s from"../utils/event2breadcrumb.js";import i from"../utils/get-base-data.js";import n from"../utils/sentry.js";import m from"../utils/is-ignored-error.js";import c from"../reporter/index.js";import a from"./breadcrumb.js";const u=new class{cacheError=[];timeoutID;push(r){this.cacheError.push(r),this.timeoutID&&clearTimeout(this.timeoutID),this.timeoutID=setTimeout(()=>this.flush(),2e3)}destroy(){this.timeoutID&&(clearTimeout(this.timeoutID),this.timeoutID=void 0),this.cacheError=[]}flush(){if(0===this.cacheError.length)return;const r={};for(const t of this.cacheError){const o=`${t.type}-${t.name}-${t.message}`;r[o]=[...r[o]??[],t]}this.cacheError=[];for(const[,t]of Object.entries(r))this.reportGroup(t)}reportGroup(r){if(r.length<5)return void r.forEach(r=>c.send(r));const t=r[0];if(!t)return;const o={...t,batchError:!0,batchErrorLength:r.length,batchErrorLastHappenTime:r.at(-1)?.timestamp??t.timestamp};c.send(o)}};function h(){u.destroy()}function p(c){const{filename:h,colno:p,lineno:f,message:l}=c;if(m(l))return;const d={...i(),type:t.Error,name:h,message:l,status:r.Error},E={...d,column:p,line:f};a.push({...d,userAction:s(t.Error)});const b=!h||h===e,j=o(`${t.Error}-${l}-${h}-${f}-${p}`);(b||n.options.repeatCodeError||!n.codeErrors.has(j))&&(n.codeErrors.add(j),u.push(E))}export{h as destroyBatchErrorManager,p as handleCodeError};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../types/enums.cjs"),r=require("../utils/base64.cjs");require("../constants/index.cjs");var s=require("../utils/event2breadcrumb.cjs"),t=require("../utils/sentry.cjs"),o=require("../utils/is-ignored-error.cjs"),a=require("../utils/is-type.cjs"),n=require("../utils/logger.cjs"),u=require("../reporter/index.cjs"),c=require("./breadcrumb.cjs"),d=require("./handle-code-error.cjs");function i(o){const a={...o,status:e.Status.Error};c.default.push({...a,userAction:s.default(e.EventType.Error)});const n=r.base64v2(`${e.EventType.Error}-${a.name}-${a.message}`);!t.default.options.repeatCodeError&&t.default.codeErrors.has(n)||(t.default.codeErrors.add(n),u.default.send(a))}exports.handleError=({extra:E,...l})=>{n.sentryLogger.error("Error captured",E),a.isErrorEvent(E)?o.default(E.message)||d.handleCodeError(E):a.isIExtendedErrorEvent(E)?function(o,a){const{localName:n,src:d,href:i}=o.target,E={...a,type:e.EventType.Resource,status:e.Status.Error,name:n,src:d,href:i,message:o.message};c.default.push({...E,userAction:s.default(e.EventType.Resource)});const l=r.base64v2(`${e.EventType.Resource}-${n}-${d||i}`);!t.default.options.repeatCodeError&&t.default.codeErrors.has(l)||(t.default.codeErrors.add(l),u.default.send(E))}(E,l):a.isError(E)?function(r,s){const{name:t,message:a,stack:n}=r;if(o.default(a))return;i({...s,type:e.EventType.Error,name:t,message:a,extra:n||r})}(E,l):function(r,s){const t="string"==typeof r?r:JSON.stringify(r);if(o.default(t))return;i({...s,type:e.EventType.Error,name:"Unknown Error",message:t,extra:r})}(E,l)};
@@ -0,0 +1 @@
1
+ import{Status as r,EventType as e}from"../types/enums.js";import{base64v2 as o}from"../utils/base64.js";import"../constants/index.js";import s from"../utils/event2breadcrumb.js";import t from"../utils/sentry.js";import n from"../utils/is-ignored-error.js";import{isErrorEvent as m,isIExtendedErrorEvent as i,isError as a}from"../utils/is-type.js";import{sentryLogger as c}from"../utils/logger.js";import p from"../reporter/index.js";import u from"./breadcrumb.js";import{handleCodeError as d}from"./handle-code-error.js";const f=({extra:f,...g})=>{c.error("Error captured",f),m(f)?n(f.message)||d(f):i(f)?function(n,m){const{localName:i,src:a,href:c}=n.target,d={...m,type:e.Resource,status:r.Error,name:i,src:a,href:c,message:n.message};u.push({...d,userAction:s(e.Resource)});const f=o(`${e.Resource}-${i}-${a||c}`);!t.options.repeatCodeError&&t.codeErrors.has(f)||(t.codeErrors.add(f),p.send(d))}(f,g):a(f)?function(r,o){const{name:s,message:t,stack:m}=r;if(n(t))return;E({...o,type:e.Error,name:s,message:t,extra:m||r})}(f,g):function(r,o){const s="string"==typeof r?r:JSON.stringify(r);if(n(s))return;E({...o,type:e.Error,name:"Unknown Error",message:s,extra:r})}(f,g)};function E(n){const m={...n,status:r.Error};u.push({...m,userAction:s(e.Error)});const i=o(`${e.Error}-${m.name}-${m.message}`);!t.options.repeatCodeError&&t.codeErrors.has(i)||(t.codeErrors.add(i),p.send(m))}export{f as handleError};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../types/enums.cjs");require("../constants/index.cjs");var r=require("../utils/click-data.cjs"),t=require("../utils/event2breadcrumb.cjs"),s=require("../utils/sentry.cjs"),n=require("../utils/is-type.cjs"),a=require("../utils/logger.cjs"),i=require("../reporter/index.cjs"),u=require("./breadcrumb.cjs"),c=require("./white-screen.cjs"),d=require("./handle-code-error.cjs"),l=require("./handle-error.cjs");exports.handleClick=({extra:n,...a})=>{if(!(n instanceof MouseEvent))return;const c=r.getDeclarativeClickData(n);if(!c)return;const d={...a,type:e.EventType.Click,name:c.ev||c.msg,message:c.msg||c.ev,status:e.Status.OK,extra:c};u.default.push({...d,userAction:t.default(e.EventType.Click)}),s.default.options.enableClick&&i.default.send(d)},exports.handleUnhandledRejection=e=>{a.sentryLogger.error("Unhandled rejection captured",e.extra),n.isIExtendedErrorEvent(e.extra)?d.handleCodeError(e.extra):l.handleError(e)},exports.handleWhiteScreen=e=>{c.default(()=>{i.default.send(e)})};
@@ -0,0 +1 @@
1
+ import{Status as r,EventType as e}from"../types/enums.js";import"../constants/index.js";import{getDeclarativeClickData as t}from"../utils/click-data.js";import o from"../utils/event2breadcrumb.js";import s from"../utils/sentry.js";import{isIExtendedErrorEvent as i}from"../utils/is-type.js";import{sentryLogger as m}from"../utils/logger.js";import n from"../reporter/index.js";import p from"./breadcrumb.js";import a from"./white-screen.js";import{handleCodeError as c}from"./handle-code-error.js";import{handleError as u}from"./handle-error.js";const f=r=>{m.error("Unhandled rejection captured",r.extra),i(r.extra)?c(r.extra):u(r)},l=r=>{a(()=>{n.send(r)})},d=({extra:i,...m})=>{if(!(i instanceof MouseEvent))return;const a=t(i);if(!a)return;const c={...m,type:e.Click,name:a.ev||a.msg,message:a.msg||a.ev,status:r.OK,extra:a};p.push({...c,userAction:o(e.Click)}),s.options.enableClick&&n.send(c)};export{d as handleClick,f as handleUnhandledRejection,l as handleWhiteScreen};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../types/enums.cjs");require("../constants/index.cjs");var t=require("../utils/event2breadcrumb.cjs"),s=require("../utils/get-base-data.cjs"),r=require("../utils/sentry.cjs"),a=require("../utils/transform-http-data.cjs"),u=require("../utils/logger.cjs"),i=require("../reporter/index.cjs"),n=require("./breadcrumb.cjs");exports.handleHttp=d=>{const o=a.default(d),{id:m,name:l,time:c,timestamp:p,message:f,status:g,type:q}=o;g===e.Status.Error?u.sentryLogger.error(`Request error: ${l}`,d):u.sentryLogger.info(`Request complete: ${l}`,d),o.api.includes(r.default.options.dsn)||n.default.push({id:m,name:l,time:c,timestamp:p,message:f,status:g,type:q,userAction:t.default(q)}),g!==e.Status.Error?r.default.options.enableHttpPerformance&&i.default.send({...s.default(),type:e.EventType.Performance,name:`HTTP ${o.method}`,message:o.api,status:e.Status.OK,value:o.elapsedTime,extra:{method:o.method,statusCode:o.statusCode,serverTiming:o.serverTiming??[]}}):i.default.send(o)};
@@ -0,0 +1 @@
1
+ import{Status as e,EventType as t}from"../types/enums.js";import"../constants/index.js";import s from"../utils/event2breadcrumb.js";import r from"../utils/get-base-data.js";import m from"../utils/sentry.js";import o from"../utils/transform-http-data.js";import{sentryLogger as i}from"../utils/logger.js";import a from"../reporter/index.js";import n from"./breadcrumb.js";const p=p=>{const u=o(p),{id:d,name:f,time:l,timestamp:c,message:j,status:g,type:b}=u;g===e.Error?i.error(`Request error: ${f}`,p):i.info(`Request complete: ${f}`,p),u.api.includes(m.options.dsn)||n.push({id:d,name:f,time:l,timestamp:c,message:j,status:g,type:b,userAction:s(b)}),g!==e.Error?m.options.enableHttpPerformance&&a.send({...r(),type:t.Performance,name:`HTTP ${u.method}`,message:u.api,status:e.OK,value:u.elapsedTime,extra:{method:u.method,statusCode:u.statusCode,serverTiming:u.serverTiming??[]}}):a.send(u)};export{p as handleHttp};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../types/enums.cjs"),t=require("../constants/index.cjs"),r=require("../utils/event2breadcrumb.cjs");require("../utils/sentry.cjs");var s=require("./breadcrumb.cjs"),n=require("./pv-lifecycle.cjs");function a(e){return e instanceof HashChangeEvent}exports.handleHashChange=({extra:o,...u})=>{const i=a(o)?o.oldURL:t.UNKNOWN,c=a(o)?o.newURL:t.UNKNOWN,h=`${i} => ${c}`,y={...u,name:h,message:h,type:e.EventType.HashChange,from:i,to:c};s.default.push({...y,userAction:r.default(e.EventType.HashChange)}),n.recordRoutePageView(c,i,"HashChange")},exports.handleHistory=({from:t,to:a,...o})=>{const u=`${t} => ${a}`,i={...o,name:u,message:u,type:e.EventType.History,from:t,to:a};s.default.push({...i,userAction:r.default(e.EventType.History)}),n.recordRoutePageView(a,t,"HistoryChange")};
@@ -0,0 +1 @@
1
+ import{EventType as s}from"../types/enums.js";import{UNKNOWN as t}from"../constants/index.js";import e from"../utils/event2breadcrumb.js";import"../utils/sentry.js";import o from"./breadcrumb.js";import{recordRoutePageView as r}from"./pv-lifecycle.js";function n(s){return s instanceof HashChangeEvent}const m=({from:t,to:n,...m})=>{const a=`${t} => ${n}`,i={...m,name:a,message:a,type:s.History,from:t,to:n};o.push({...i,userAction:e(s.History)}),r(n,t,"HistoryChange")},a=({extra:m,...a})=>{const i=n(m)?m.oldURL:t,p=n(m)?m.newURL:t,c=`${i} => ${p}`,f={...a,name:c,message:c,type:s.HashChange,from:i,to:p};o.push({...f,userAction:e(s.HashChange)}),r(p,i,"HashChange")};export{a as handleHashChange,m as handleHistory};
@@ -0,0 +1 @@
1
+ "use strict";var t=require("../constants/index.cjs");require("../types/enums.cjs");var e=require("../utils/sentry.cjs"),s=require("../utils/logger.cjs");const n="swifty_sentry_anonymous_id";exports.getIdentity=function(){const{anonymousId:s,visitorId:n,userId:r}=e.default.options;return{anonymousId:s,visitorId:n,userId:r,hasAnonymousId:s!==t.UNKNOWN,hasVisitorId:n!==t.UNKNOWN}},exports.initIdentity=async function(){if(!e.default.options.enableFingerprint)return;const t=function(){try{return localStorage.getItem(n)??""}catch{return""}}();if(t)e.default.setOptions({anonymousId:t});else try{const t=await async function(){const t=await import("@fingerprintjs/fingerprintjs"),e=await t.default.load();return(await e.get()).visitorId}();!function(t){try{localStorage.setItem(n,t)}catch{s.sentryLogger.error("Failed to persist anonymous id")}}(t),e.default.setOptions({anonymousId:t})}catch(t){s.sentryLogger.error("Failed to collect fingerprint.js visitor id",t)}},exports.setUserId=function(t){e.default.setOptions({userId:t})},exports.setVisitorId=function(t){e.default.setOptions({visitorId:t})};
@@ -0,0 +1,11 @@
1
+ declare function setVisitorId(visitorId: string): void;
2
+ declare function setUserId(userId: string): void;
3
+ declare function getIdentity(): {
4
+ anonymousId: string;
5
+ visitorId: string;
6
+ userId: string;
7
+ hasAnonymousId: boolean;
8
+ hasVisitorId: boolean;
9
+ };
10
+
11
+ export { getIdentity, setUserId, setVisitorId };
@@ -0,0 +1 @@
1
+ import{UNKNOWN as t}from"../constants/index.js";import"../types/enums.js";import n from"../utils/sentry.js";import{sentryLogger as o}from"../utils/logger.js";const s="swifty_sentry_anonymous_id";async function i(){if(!n.options.enableFingerprint)return;const t=function(){try{return localStorage.getItem(s)??""}catch{return""}}();if(t)n.setOptions({anonymousId:t});else try{const t=await async function(){const t=await import("@fingerprintjs/fingerprintjs"),n=await t.default.load();return(await n.get()).visitorId}();!function(t){try{localStorage.setItem(s,t)}catch{o.error("Failed to persist anonymous id")}}(t),n.setOptions({anonymousId:t})}catch(t){o.error("Failed to collect fingerprint.js visitor id",t)}}function r(t){n.setOptions({visitorId:t})}function e(t){n.setOptions({userId:t})}function a(){const{anonymousId:o,visitorId:s,userId:i}=n.options;return{anonymousId:o,visitorId:s,userId:i,hasAnonymousId:o!==t,hasVisitorId:s!==t}}export{a as getIdentity,i as initIdentity,e as setUserId,r as setVisitorId};
@@ -0,0 +1 @@
1
+ "use strict";const e=/([0-9]{1,3}(?:\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){2,7})/gi;exports.getIPs=function(t=500){return new Promise(n=>{if("function"!=typeof globalThis.RTCPeerConnection)return void n([]);const c=new Set,a=new RTCPeerConnection({iceServers:[{urls:"stun:stun.l.google.com:19302"}]}),o=()=>{a.onicecandidate=null,a.close(),n([...c])};a.onicecandidate=t=>{t.candidate&&function(t,n){(t.match(e)??[]).forEach(e=>{n.add(e)})}(t.candidate.candidate,c)},a.createDataChannel("@swifty.js/sentry-IP-probe"),a.createOffer().then(e=>a.setLocalDescription(e)).catch(o),setTimeout(o,Math.max(t,100))})};
@@ -0,0 +1,3 @@
1
+ declare function getIPs(timeout?: number): Promise<readonly string[]>;
2
+
3
+ export { getIPs };
@@ -0,0 +1 @@
1
+ const e=/([0-9]{1,3}(?:\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){2,7})/gi;function n(n=500){return new Promise(t=>{if("function"!=typeof globalThis.RTCPeerConnection)return void t([]);const a=new Set,c=new RTCPeerConnection({iceServers:[{urls:"stun:stun.l.google.com:19302"}]}),o=()=>{c.onicecandidate=null,c.close(),t([...a])};c.onicecandidate=n=>{n.candidate&&function(n,t){(n.match(e)??[]).forEach(e=>{t.add(e)})}(n.candidate.candidate,a)},c.createDataChannel("@swifty.js/sentry-IP-probe"),c.createOffer().then(e=>c.setLocalDescription(e)).catch(o),setTimeout(o,Math.max(n,100))})}export{n as getIPs};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("zod"),n=require("../types/enums.cjs");const o=e.z.custom(e=>"function"==typeof e,"Expected a report data hook function"),t=e.z.custom(e=>"function"==typeof e,"Expected a breadcrumb hook function"),a=e.z.custom(e=>"function"==typeof e,"Expected an HTTP error hook function"),r=e.z.custom(e=>"function"==typeof e,"Expected a report batch hook function"),i=e.z.custom(e=>"function"==typeof e,"Expected an after-send hook function"),s=e.z.union([e.z.string(),e.z.instanceof(RegExp)]),c=e.z.object({dsn:e.z.string(),projectId:e.z.string(),disabled:e.z.boolean(),userId:e.z.string(),enableXhr:e.z.boolean(),enableFetch:e.z.boolean(),enableClick:e.z.boolean(),enableError:e.z.boolean(),enableUnhandledRejection:e.z.boolean(),enableHashChange:e.z.boolean(),enableHistory:e.z.boolean(),enablePerformance:e.z.boolean(),enableScreenRecord:e.z.boolean(),enableWhiteScreen:e.z.boolean(),enableFingerprint:e.z.boolean(),anonymousId:e.z.string(),visitorId:e.z.string(),useImageReport:e.z.boolean(),screenRecordDurationMs:e.z.number().nonnegative(),screenRecordEventTypes:e.z.array(e.z.nativeEnum(n.EventType)),hasSkeleton:e.z.boolean(),rootCssSelectors:e.z.array(e.z.string()),clickThrottleDelay:e.z.number().nonnegative(),requestTimeoutMilliseconds:e.z.number().nonnegative(),maxBreadcrumbs:e.z.number().int().positive(),repeatCodeError:e.z.boolean(),enableHttpPerformance:e.z.boolean(),ignoreErrors:e.z.array(s),excludeApis:e.z.array(s),onBeforePushBreadcrumb:t.optional(),cacheMaxLength:e.z.number().int().positive(),cacheWaitingTime:e.z.number().nonnegative(),maxQueueLength:e.z.number().int().positive(),retryIntervalMilliseconds:e.z.number().nonnegative(),onBeforeReportData:o.optional(),beforePushEventList:r.optional(),afterSendData:i.optional(),offlineCacheKey:e.z.string(),tracesSampleRate:e.z.number().min(0).max(1),handleHttpError:a.optional(),debug:e.z.boolean()});c.partial().extend({dsn:e.z.string()}),exports.optionsSchema=c;
@@ -0,0 +1,52 @@
1
+ import { IBreadcrumbItem } from '../types/common.js';
2
+ import { EventType } from '../types/enums.js';
3
+ import { ReportDataHook, ReportBatchHook, AfterSendDataHook } from '../types/options.js';
4
+ import { z } from 'zod';
5
+
6
+ declare const initOptionsSchema: z.ZodObject<{
7
+ projectId: z.ZodOptional<z.ZodString>;
8
+ disabled: z.ZodOptional<z.ZodBoolean>;
9
+ userId: z.ZodOptional<z.ZodString>;
10
+ enableXhr: z.ZodOptional<z.ZodBoolean>;
11
+ enableFetch: z.ZodOptional<z.ZodBoolean>;
12
+ enableClick: z.ZodOptional<z.ZodBoolean>;
13
+ enableError: z.ZodOptional<z.ZodBoolean>;
14
+ enableUnhandledRejection: z.ZodOptional<z.ZodBoolean>;
15
+ enableHashChange: z.ZodOptional<z.ZodBoolean>;
16
+ enableHistory: z.ZodOptional<z.ZodBoolean>;
17
+ enablePerformance: z.ZodOptional<z.ZodBoolean>;
18
+ enableScreenRecord: z.ZodOptional<z.ZodBoolean>;
19
+ enableWhiteScreen: z.ZodOptional<z.ZodBoolean>;
20
+ enableFingerprint: z.ZodOptional<z.ZodBoolean>;
21
+ anonymousId: z.ZodOptional<z.ZodString>;
22
+ visitorId: z.ZodOptional<z.ZodString>;
23
+ useImageReport: z.ZodOptional<z.ZodBoolean>;
24
+ screenRecordDurationMs: z.ZodOptional<z.ZodNumber>;
25
+ screenRecordEventTypes: z.ZodOptional<z.ZodArray<z.ZodEnum<typeof EventType>>>;
26
+ hasSkeleton: z.ZodOptional<z.ZodBoolean>;
27
+ rootCssSelectors: z.ZodOptional<z.ZodArray<z.ZodString>>;
28
+ clickThrottleDelay: z.ZodOptional<z.ZodNumber>;
29
+ requestTimeoutMilliseconds: z.ZodOptional<z.ZodNumber>;
30
+ maxBreadcrumbs: z.ZodOptional<z.ZodNumber>;
31
+ repeatCodeError: z.ZodOptional<z.ZodBoolean>;
32
+ enableHttpPerformance: z.ZodOptional<z.ZodBoolean>;
33
+ ignoreErrors: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodCustom<RegExp, RegExp>]>>>;
34
+ excludeApis: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodCustom<RegExp, RegExp>]>>>;
35
+ onBeforePushBreadcrumb: z.ZodOptional<z.ZodOptional<z.ZodCustom<((data: IBreadcrumbItem) => IBreadcrumbItem) | undefined, ((data: IBreadcrumbItem) => IBreadcrumbItem) | undefined>>>;
36
+ cacheMaxLength: z.ZodOptional<z.ZodNumber>;
37
+ cacheWaitingTime: z.ZodOptional<z.ZodNumber>;
38
+ maxQueueLength: z.ZodOptional<z.ZodNumber>;
39
+ retryIntervalMilliseconds: z.ZodOptional<z.ZodNumber>;
40
+ onBeforeReportData: z.ZodOptional<z.ZodOptional<z.ZodCustom<ReportDataHook, ReportDataHook>>>;
41
+ beforePushEventList: z.ZodOptional<z.ZodOptional<z.ZodCustom<ReportBatchHook | undefined, ReportBatchHook | undefined>>>;
42
+ afterSendData: z.ZodOptional<z.ZodOptional<z.ZodCustom<AfterSendDataHook | undefined, AfterSendDataHook | undefined>>>;
43
+ offlineCacheKey: z.ZodOptional<z.ZodString>;
44
+ tracesSampleRate: z.ZodOptional<z.ZodNumber>;
45
+ handleHttpError: z.ZodOptional<z.ZodOptional<z.ZodCustom<(<T>(data: T) => boolean) | undefined, (<T>(data: T) => boolean) | undefined>>>;
46
+ debug: z.ZodOptional<z.ZodBoolean>;
47
+ dsn: z.ZodString;
48
+ }, z.core.$strip>;
49
+ type InitOptions = z.input<typeof initOptionsSchema>;
50
+
51
+ export { initOptionsSchema };
52
+ export type { InitOptions };
@@ -0,0 +1 @@
1
+ import{z as e}from"zod";import{EventType as n}from"../types/enums.js";const o=e.custom(e=>"function"==typeof e,"Expected a report data hook function"),t=e.custom(e=>"function"==typeof e,"Expected a breadcrumb hook function"),a=e.custom(e=>"function"==typeof e,"Expected an HTTP error hook function"),r=e.custom(e=>"function"==typeof e,"Expected a report batch hook function"),i=e.custom(e=>"function"==typeof e,"Expected an after-send hook function"),c=e.union([e.string(),e.instanceof(RegExp)]),l=e.object({dsn:e.string(),projectId:e.string(),disabled:e.boolean(),userId:e.string(),enableXhr:e.boolean(),enableFetch:e.boolean(),enableClick:e.boolean(),enableError:e.boolean(),enableUnhandledRejection:e.boolean(),enableHashChange:e.boolean(),enableHistory:e.boolean(),enablePerformance:e.boolean(),enableScreenRecord:e.boolean(),enableWhiteScreen:e.boolean(),enableFingerprint:e.boolean(),anonymousId:e.string(),visitorId:e.string(),useImageReport:e.boolean(),screenRecordDurationMs:e.number().nonnegative(),screenRecordEventTypes:e.array(e.nativeEnum(n)),hasSkeleton:e.boolean(),rootCssSelectors:e.array(e.string()),clickThrottleDelay:e.number().nonnegative(),requestTimeoutMilliseconds:e.number().nonnegative(),maxBreadcrumbs:e.number().int().positive(),repeatCodeError:e.boolean(),enableHttpPerformance:e.boolean(),ignoreErrors:e.array(c),excludeApis:e.array(c),onBeforePushBreadcrumb:t.optional(),cacheMaxLength:e.number().int().positive(),cacheWaitingTime:e.number().nonnegative(),maxQueueLength:e.number().int().positive(),retryIntervalMilliseconds:e.number().nonnegative(),onBeforeReportData:o.optional(),beforePushEventList:r.optional(),afterSendData:i.optional(),offlineCacheKey:e.string(),tracesSampleRate:e.number().min(0).max(1),handleHttpError:a.optional(),debug:e.boolean()});l.partial().extend({dsn:e.string()});export{l as optionsSchema};
@@ -0,0 +1 @@
1
+ "use strict";const t=new Set;exports.destroyPlugins=function(){t.forEach(t=>{t.destroy?.()}),t.clear()},exports.registerPlugin=function(e){t.add(e)};
@@ -0,0 +1 @@
1
+ const n=new Set;function o(o){n.add(o)}function t(){n.forEach(n=>{n.destroy?.()}),n.clear()}export{t as destroyPlugins,o as registerPlugin};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../types/enums.cjs");require("../constants/index.cjs");var r=require("../utils/get-base-data.cjs");require("../utils/sentry.cjs");var t=require("../reporter/index.cjs");let a=null;function n(a,n){t.default.send({...r.default(),type:e.EventType.PV,name:a.name,message:a.url,status:e.Status.OK,extra:{url:a.url,referrer:a.referrer,entryTime:a.startedAt}},n)}function s(a,n,s){n<=100||t.default.send({...r.default(),type:e.EventType.PV,name:"PageDwell",message:a.url,status:e.Status.OK,extra:{url:a.url,referrer:a.referrer,duration:n}},s)}function u(e,r,t){return{url:e,referrer:r,name:t,startedAt:Date.now()}}exports.flushCurrentPageDwell=function(e){a&&s(a,Date.now()-a.startedAt,e)},exports.initPageView=function(){a=u(globalThis.location?.href??"",globalThis.document?.referrer??"","PageLoad"),n(a,!0)},exports.recordRoutePageView=function(e,r,t){const l=globalThis.location?.href??"http://localhost",o=new URL(e,l).href,i=new URL(r,l).href;a?.url!==o&&(a&&s(a,Date.now()-a.startedAt,!1),a=u(o,i,t),n(a,!1))},exports.resetPageView=function(){a=null};
@@ -0,0 +1 @@
1
+ import{Status as e,EventType as r}from"../types/enums.js";import"../constants/index.js";import t from"../utils/get-base-data.js";import"../utils/sentry.js";import n from"../reporter/index.js";let o=null;function s(o,s){n.send({...t(),type:r.PV,name:o.name,message:o.url,status:e.OK,extra:{url:o.url,referrer:o.referrer,entryTime:o.startedAt}},s)}function a(o,s,a){s<=100||n.send({...t(),type:r.PV,name:"PageDwell",message:o.url,status:e.OK,extra:{url:o.url,referrer:o.referrer,duration:s}},a)}function l(e,r,t){return{url:e,referrer:r,name:t,startedAt:Date.now()}}function u(){o=l(globalThis.location?.href??"",globalThis.document?.referrer??"","PageLoad"),s(o,!0)}function i(e,r,t){const n=globalThis.location?.href??"http://localhost",u=new URL(e,n).href,i=new URL(r,n).href;o?.url!==u&&(o&&a(o,Date.now()-o.startedAt,!1),o=l(u,i,t),s(o,!1))}function f(e){o&&a(o,Date.now()-o.startedAt,e)}function m(){o=null}export{f as flushCurrentPageDwell,u as initPageView,i as recordRoutePageView,m as resetPageView};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../constants/index.cjs");require("../types/enums.cjs");var r=require("../utils/sentry.cjs"),i=require("../utils/logger.cjs"),t=require("./identity.cjs"),n=require("./options-schema.cjs"),s=require("./plugin-registry.cjs"),o=require("./setup.cjs"),u=require("./handle-code-error.cjs"),l=require("../reporter/index.cjs");let a=null;function d(){return null!==a}exports.destroy=function(){s.destroyPlugins(),a?.(),a=null,u.destroyBatchErrorManager(),l.resetReporter()},exports.enablePlugin=function(e){return e.init(),s.registerPlugin(e),e},exports.init=function(s){const u=n.optionsSchema.parse({...e.DEFAULT_OPTIONS,...s});r.default.setOptions(u);const{dsn:l}=r.default.options;r.default.options.disabled?i.sentryLogger.info("SDK disabled by options"):""!==l?d()?i.sentryLogger.info("SDK already initialized"):(i.sentryLogger.info("SDK initialized",{options:r.default.options}),a=o.default(),t.initIdentity()):i.sentryLogger.error("Initialization failed: DSN is empty")},exports.isInitialized=d;
@@ -0,0 +1,9 @@
1
+ import { SentryPlugin } from '../types/plugin.js';
2
+ import { InitOptions } from './options-schema.js';
3
+
4
+ declare function isInitialized(): boolean;
5
+ declare function destroy(): void;
6
+ declare function init(options: InitOptions): void;
7
+ declare function enablePlugin(plugin: SentryPlugin): SentryPlugin;
8
+
9
+ export { destroy, enablePlugin, init, isInitialized };
@@ -0,0 +1 @@
1
+ import{DEFAULT_OPTIONS as i}from"../constants/index.js";import"../types/enums.js";import o from"../utils/sentry.js";import{sentryLogger as t}from"../utils/logger.js";import{initIdentity as n}from"./identity.js";import{optionsSchema as r}from"./options-schema.js";import{destroyPlugins as s,registerPlugin as e}from"./plugin-registry.js";import p from"./setup.js";import{destroyBatchErrorManager as m}from"./handle-code-error.js";import{resetReporter as l}from"../reporter/index.js";let f=null;function d(){return null!==f}function u(){s(),f?.(),f=null,m(),l()}function a(s){const e=r.parse({...i,...s});o.setOptions(e);const{dsn:m}=o.options;o.options.disabled?t.info("SDK disabled by options"):""!==m?d()?t.info("SDK already initialized"):(t.info("SDK initialized",{options:o.options}),f=p(),n()):t.error("Initialization failed: DSN is empty")}function j(i){return i.init(),e(i),i}export{u as destroy,j as enablePlugin,a as init,d as isInitialized};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../types/enums.cjs");require("../constants/index.cjs");var n=require("../utils/sentry.cjs"),t=require("../utils/logger.cjs"),r=require("./bus.cjs"),s=require("./pv-lifecycle.cjs"),a=require("./handle-error.cjs"),i=require("./handle-route.cjs"),l=require("./handle-http.cjs"),u=require("./handle-events.cjs"),o=require("./decorate-publish.cjs");exports.default=function(){t.sentryLogger.info("Initializing SDK event subscriptions...");const c=[{enabled:n.default.options.enableXhr,type:e.EventType.Xhr,subscribe:()=>r.sub(e.EventType.Xhr,l.handleHttp),name:"Xhr"},{enabled:n.default.options.enableFetch,type:e.EventType.Fetch,subscribe:()=>r.sub(e.EventType.Fetch,l.handleHttp),name:"Fetch"},{enabled:n.default.options.enableError,type:e.EventType.Error,subscribe:()=>r.sub(e.EventType.Error,a.handleError),name:"Error"},{enabled:n.default.options.enableHistory,type:e.EventType.History,subscribe:()=>r.sub(e.EventType.History,i.handleHistory),name:"History"},{enabled:n.default.options.enableHashChange,type:e.EventType.HashChange,subscribe:()=>r.sub(e.EventType.HashChange,i.handleHashChange),name:"HashChange"},{enabled:n.default.options.enableUnhandledRejection,type:e.EventType.UnhandledRejection,subscribe:()=>r.sub(e.EventType.UnhandledRejection,u.handleUnhandledRejection),name:"UnhandledRejection"},{enabled:n.default.options.enableClick,type:e.EventType.Click,subscribe:()=>r.sub(e.EventType.Click,u.handleClick),name:"Click"},{enabled:n.default.options.enableWhiteScreen,type:e.EventType.WhiteScreen,subscribe:()=>r.sub(e.EventType.WhiteScreen,u.handleWhiteScreen),name:"WhiteScreen"}].filter(({enabled:e})=>e),b=[];c.forEach(({type:e,subscribe:n})=>{b.push(n()),b.push(o.default(e))}),s.initPageView();const p=()=>{s.flushCurrentPageDwell(!0)};return globalThis.addEventListener("beforeunload",p),b.push(()=>{globalThis.removeEventListener("beforeunload",p)}),t.sentryLogger.success("SDK setup completed",c.map(e=>({event:e.name,type:e.type}))),()=>{b.toReversed().forEach(e=>{e()}),s.resetPageView(),r.clearSubscriptions()}};
@@ -0,0 +1 @@
1
+ import{EventType as e}from"../types/enums.js";import"../constants/index.js";import n from"../utils/sentry.js";import{sentryLogger as t}from"../utils/logger.js";import{sub as r,clearSubscriptions as s}from"./bus.js";import{initPageView as o,flushCurrentPageDwell as i,resetPageView as a}from"./pv-lifecycle.js";import{handleError as l}from"./handle-error.js";import{handleHistory as b,handleHashChange as p}from"./handle-route.js";import{handleHttp as c}from"./handle-http.js";import{handleUnhandledRejection as h,handleClick as m,handleWhiteScreen as d}from"./handle-events.js";import u from"./decorate-publish.js";function f(){t.info("Initializing SDK event subscriptions...");const f=[{enabled:n.options.enableXhr,type:e.Xhr,subscribe:()=>r(e.Xhr,c),name:"Xhr"},{enabled:n.options.enableFetch,type:e.Fetch,subscribe:()=>r(e.Fetch,c),name:"Fetch"},{enabled:n.options.enableError,type:e.Error,subscribe:()=>r(e.Error,l),name:"Error"},{enabled:n.options.enableHistory,type:e.History,subscribe:()=>r(e.History,b),name:"History"},{enabled:n.options.enableHashChange,type:e.HashChange,subscribe:()=>r(e.HashChange,p),name:"HashChange"},{enabled:n.options.enableUnhandledRejection,type:e.UnhandledRejection,subscribe:()=>r(e.UnhandledRejection,h),name:"UnhandledRejection"},{enabled:n.options.enableClick,type:e.Click,subscribe:()=>r(e.Click,m),name:"Click"},{enabled:n.options.enableWhiteScreen,type:e.WhiteScreen,subscribe:()=>r(e.WhiteScreen,d),name:"WhiteScreen"}].filter(({enabled:e})=>e),y=[];f.forEach(({type:e,subscribe:n})=>{y.push(n()),y.push(u(e))}),o();const j=()=>{i(!0)};return globalThis.addEventListener("beforeunload",j),y.push(()=>{globalThis.removeEventListener("beforeunload",j)}),t.success("SDK setup completed",f.map(e=>({event:e.name,type:e.type}))),()=>{y.toReversed().forEach(e=>{e()}),a(),s()}}export{f as default};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../constants/index.cjs"),t=require("../types/enums.cjs"),r=require("../utils/get-css-selectors.cjs"),n=require("../utils/get-base-data.cjs"),i=require("../utils/sentry.cjs"),s=require("../utils/logger.cjs");exports.default=function(o){const{hasSkeleton:l,rootCssSelectors:a}=i.default.options;let c=0;const u=new Set,d=new Set,f=e=>{const t=r.default(e),[n,i,s]=t;return l&&(1===c?t.forEach(e=>u.add(e)):t.forEach(e=>d.add(e))),a.includes(n)||a.includes(i)||a.includes(s)},m=()=>{if(c++,l&&d.clear(),c>e.MAX_WHITE_SCREEN_SAMPLE_COUNT)return void S();const{innerWidth:t,innerHeight:r}=globalThis;let n=0;for(let e=1;e<=9;e++){const i=document.elementFromPoint(t*e/10,r/2),s=document.elementFromPoint(t/2,r*e/10);i&&!f(i)||n++,s&&!f(s)||n++}if(!l){if(n>=18)return void h();S()}if(l){if(1===c)return;if(Array.from(d).sort().join(",")===Array.from(u).sort().join(","))return void h();S()}},h=()=>{const e={...n.default(),type:t.EventType.WhiteScreen,status:t.Status.Error,name:"WhiteScreen",message:`sample count ${c}`,extra:"WhiteScreen"};s.sentryLogger.error("White screen detected",e),o(e),S()},S=()=>{i.default.whiteScreenTimer&&(clearInterval(i.default.whiteScreenTimer),i.default.whiteScreenTimer=null)},T=()=>{i.default.whiteScreenTimer||(i.default.whiteScreenTimer=globalThis.setInterval(()=>{"requestIdleCallback"in globalThis?requestIdleCallback(e=>{(e.timeRemaining()>0||e.didTimeout)&&m()}):m()},e.WHITE_SCREEN_SAMPLE_INTERVAL))};return"complete"===document.readyState?T():globalThis.addEventListener("load",T,{once:!0}),{stop:S}};
@@ -0,0 +1 @@
1
+ import{WHITE_SCREEN_SAMPLE_INTERVAL as e,MAX_WHITE_SCREEN_SAMPLE_COUNT as t}from"../constants/index.js";import{Status as r,EventType as o}from"../types/enums.js";import n from"../utils/get-css-selectors.js";import i from"../utils/get-base-data.js";import s from"../utils/sentry.js";import{sentryLogger as l}from"../utils/logger.js";function c(c){const{hasSkeleton:a,rootCssSelectors:m}=s.options;let d=0;const u=new Set,f=new Set,h=e=>{const t=n(e),[r,o,i]=t;return a&&(1===d?t.forEach(e=>u.add(e)):t.forEach(e=>f.add(e))),m.includes(r)||m.includes(o)||m.includes(i)},p=()=>{if(d++,a&&f.clear(),d>t)return void g();const{innerWidth:e,innerHeight:r}=globalThis;let o=0;for(let t=1;t<=9;t++){const n=document.elementFromPoint(e*t/10,r/2),i=document.elementFromPoint(e/2,r*t/10);n&&!h(n)||o++,i&&!h(i)||o++}if(!a){if(o>=18)return void S();g()}if(a){if(1===d)return;if(Array.from(f).sort().join(",")===Array.from(u).sort().join(","))return void S();g()}},S=()=>{const e={...i(),type:o.WhiteScreen,status:r.Error,name:"WhiteScreen",message:`sample count ${d}`,extra:"WhiteScreen"};l.error("White screen detected",e),c(e),g()},g=()=>{s.whiteScreenTimer&&(clearInterval(s.whiteScreenTimer),s.whiteScreenTimer=null)},T=()=>{s.whiteScreenTimer||(s.whiteScreenTimer=globalThis.setInterval(()=>{"requestIdleCallback"in globalThis?requestIdleCallback(e=>{(e.timeRemaining()>0||e.didTimeout)&&p()}):p()},e))};return"complete"===document.readyState?T():globalThis.addEventListener("load",T,{once:!0}),{stop:g}}export{c as default};
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./core/sdk-lifecycle.cjs"),t=require("./core/identity.cjs"),r=require("./core/api.cjs"),s=require("./types/enums.cjs"),n=require("./types/plugin.cjs"),o=require("./core/ip.cjs");exports.destroy=e.destroy,exports.enablePlugin=e.enablePlugin,exports.init=e.init,exports.isInitialized=e.isInitialized,exports.getIdentity=t.getIdentity,exports.setUserId=t.setUserId,exports.setVisitorId=t.setVisitorId,exports.afterSendData=r.afterSendData,exports.beforePushEventList=r.beforePushEventList,exports.beforeSendData=r.beforeSendData,exports.getBaseInfo=r.getBaseInfo,exports.getUserId=r.getUserId,exports.sendLocal=r.sendLocal,exports.traceCustomEvent=r.traceCustomEvent,exports.traceError=r.traceError,exports.tracePageView=r.tracePageView,exports.tracePerformance=r.tracePerformance,Object.defineProperty(exports,"BreadcrumbType",{enumerable:!0,get:function(){return s.BreadcrumbType}}),Object.defineProperty(exports,"EventType",{enumerable:!0,get:function(){return s.EventType}}),Object.defineProperty(exports,"HttpMethod",{enumerable:!0,get:function(){return s.HttpMethod}}),Object.defineProperty(exports,"HttpStatus",{enumerable:!0,get:function(){return s.HttpStatus}}),Object.defineProperty(exports,"HttpStatusCode",{enumerable:!0,get:function(){return s.HttpStatusCode}}),Object.defineProperty(exports,"HttpType",{enumerable:!0,get:function(){return s.HttpType}}),Object.defineProperty(exports,"Status",{enumerable:!0,get:function(){return s.Status}}),exports.SentryPlugin=n.SentryPlugin,exports.getIPs=o.getIPs;
@@ -0,0 +1,9 @@
1
+ export { destroy, enablePlugin, init, isInitialized } from './core/sdk-lifecycle.js';
2
+ export { getIdentity, setUserId, setVisitorId } from './core/identity.js';
3
+ export { afterSendData, beforePushEventList, beforeSendData, getBaseInfo, getUserId, sendLocal, traceCustomEvent, traceError, tracePageView, tracePerformance } from './core/api.js';
4
+ export { IBaseDataWithEvent, IBatchErrorData, IBreadcrumbItem, ICodeError, IDataReporter, IDeviceInfo, IExposureData, IExtendedErrorEvent, IHttpData, IPerformanceData, IPerformanceResourceTiming, IReportData, IReportPayload, IResourceError, IRouteData, IScreenRecordData, ISentry, TOnReportPerformanceData, TOnReportWhiteScreenData, TReportPayload, TUnknownError } from './types/common.js';
5
+ export { BreadcrumbType, EventType, HttpMethod, HttpStatus, HttpStatusCode, HttpType, Status } from './types/enums.js';
6
+ export { IPub, ISub, TEventHandler } from './types/handlers.js';
7
+ export { AfterSendDataHook, IOptions, ReportBatchHook, ReportDataHook } from './types/options.js';
8
+ export { SentryPlugin, WithSentry } from './types/plugin.js';
9
+ export { getIPs } from './core/ip.js';
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ export{destroy,enablePlugin,init,isInitialized}from"./core/sdk-lifecycle.js";export{getIdentity,setUserId,setVisitorId}from"./core/identity.js";export{afterSendData,beforePushEventList,beforeSendData,getBaseInfo,getUserId,sendLocal,traceCustomEvent,traceError,tracePageView,tracePerformance}from"./core/api.js";export{BreadcrumbType,EventType,HttpMethod,HttpStatus,HttpStatusCode,HttpType,Status}from"./types/enums.js";export{SentryPlugin}from"./types/plugin.js";export{getIPs}from"./core/ip.js";
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e="0.0.1",r={version:e};exports.default=r,exports.version=e;
@@ -0,0 +1 @@
1
+ var a="0.0.1",e={version:a};export{e as default,a as version};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../types/enums.cjs"),t=require("../../types/plugin.cjs"),s=require("../../reporter/index.cjs");require("../../constants/index.cjs");var r=require("../../utils/get-base-data.cjs");require("../../utils/sentry.cjs");var i=require("../../utils/logger.cjs"),a=require("zod");const o=a.z.object({target:a.z.custom(e=>"Element"in globalThis&&e instanceof globalThis.Element),threshold:a.z.number().min(0).max(1).optional(),params:a.z.record(a.z.string(),a.z.unknown()).optional()});class n extends t.SentryPlugin{ioMap=new Map;targetMap=new Map;constructor(){super(e.EventType.Exposure)}init(){i.sentryLogger.info("Exposure plugin initialized")}initObserver(e){return new IntersectionObserver(e=>{e.forEach(e=>{const t=this.targetMap.get(e.target);if(t)if(e.isIntersecting)t.showTime=Date.now();else{if(!t.showTime)return;const e=Date.now();this.sendEvent(t,e),delete t.showTime}})},{threshold:e})}sendEvent(t,i){t.showTime&&s.default.send({...r.default(),type:e.EventType.Exposure,name:"Exposure",message:"Element Exposure",status:e.Status.OK,extra:{threshold:t.threshold,observeTime:t.observeTime,showTime:t.showTime,showEndTime:i,duration:i-t.showTime,params:t.params}})}observe(e){(Array.isArray(e)?e:[e]).map(e=>o.parse(e)).forEach(e=>{const t=e.threshold||.5,s=this.ioMap.get(t)??this.initObserver(t);this.ioMap.set(t,s),this.targetMap.has(e.target)||(s.observe(e.target),this.targetMap.set(e.target,{threshold:t,observeTime:Date.now(),params:e.params??{}}))})}unobserve(e){(Array.isArray(e)?e:[e]).forEach(e=>this.unobserveOne(e))}unobserveOne(e){const t=this.targetMap.get(e);if(!t)return;const s=this.ioMap.get(t.threshold);s&&s.unobserve(e),this.targetMap.delete(e)}destroy(){this.ioMap.forEach(e=>{e.disconnect()}),this.ioMap.clear(),this.targetMap.clear()}}exports.default=n;
@@ -0,0 +1,23 @@
1
+ import { SentryPlugin } from '../../types/plugin.js';
2
+ import { z } from 'zod';
3
+
4
+ declare const exposureTargetSchema: z.ZodObject<{
5
+ target: z.ZodCustom<Element, Element>;
6
+ threshold: z.ZodOptional<z.ZodNumber>;
7
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
8
+ }, z.core.$strip>;
9
+ type ExposureTarget = z.infer<typeof exposureTargetSchema>;
10
+ declare class ExposurePlugin extends SentryPlugin {
11
+ private ioMap;
12
+ private targetMap;
13
+ constructor();
14
+ init(): void;
15
+ private initObserver;
16
+ private sendEvent;
17
+ observe(targets: ExposureTarget | readonly ExposureTarget[]): void;
18
+ unobserve(targets: Element | readonly Element[]): void;
19
+ private unobserveOne;
20
+ destroy(): void;
21
+ }
22
+
23
+ export { ExposurePlugin as default };
@@ -0,0 +1 @@
1
+ import{EventType as e,Status as t}from"../../types/enums.js";import{SentryPlugin as s}from"../../types/plugin.js";import r from"../../reporter/index.js";import"../../constants/index.js";import o from"../../utils/get-base-data.js";import"../../utils/sentry.js";import{sentryLogger as i}from"../../utils/logger.js";import{z as a}from"zod";const n=a.object({target:a.custom(e=>"Element"in globalThis&&e instanceof globalThis.Element),threshold:a.number().min(0).max(1).optional(),params:a.record(a.string(),a.unknown()).optional()});class p extends s{ioMap=new Map;targetMap=new Map;constructor(){super(e.Exposure)}init(){i.info("Exposure plugin initialized")}initObserver(e){return new IntersectionObserver(e=>{e.forEach(e=>{const t=this.targetMap.get(e.target);if(t)if(e.isIntersecting)t.showTime=Date.now();else{if(!t.showTime)return;const e=Date.now();this.sendEvent(t,e),delete t.showTime}})},{threshold:e})}sendEvent(s,i){s.showTime&&r.send({...o(),type:e.Exposure,name:"Exposure",message:"Element Exposure",status:t.OK,extra:{threshold:s.threshold,observeTime:s.observeTime,showTime:s.showTime,showEndTime:i,duration:i-s.showTime,params:s.params}})}observe(e){(Array.isArray(e)?e:[e]).map(e=>n.parse(e)).forEach(e=>{const t=e.threshold||.5,s=this.ioMap.get(t)??this.initObserver(t);this.ioMap.set(t,s),this.targetMap.has(e.target)||(s.observe(e.target),this.targetMap.set(e.target,{threshold:t,observeTime:Date.now(),params:e.params??{}}))})}unobserve(e){(Array.isArray(e)?e:[e]).forEach(e=>this.unobserveOne(e))}unobserveOne(e){const t=this.targetMap.get(e);if(!t)return;const s=this.ioMap.get(t.threshold);s&&s.unobserve(e),this.targetMap.delete(e)}destroy(){this.ioMap.forEach(e=>{e.disconnect()}),this.ioMap.clear(),this.targetMap.clear()}}export{p as default};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./exposure/index.cjs"),r=require("./performance/index.cjs"),c=require("./screen-record/index.cjs"),n=require("./screen-record/recorder.cjs");exports.ExposurePlugin=e.default,exports.PerformancePlugin=r.default,exports.ScreenRecordPlugin=c.default,exports.unzipScreenRecord=n.unzipScreenRecord;
@@ -0,0 +1,4 @@
1
+ export { default as ExposurePlugin } from './exposure/index.js';
2
+ export { default as PerformancePlugin } from './performance/index.js';
3
+ export { default as ScreenRecordPlugin, ScreenRecordPluginOptions } from './screen-record/index.js';
4
+ export { unzipScreenRecord } from './screen-record/recorder.js';
@@ -0,0 +1 @@
1
+ export{default as ExposurePlugin}from"./exposure/index.js";export{default as PerformancePlugin}from"./performance/index.js";export{default as ScreenRecordPlugin}from"./screen-record/index.js";export{unzipScreenRecord}from"./screen-record/recorder.js";
@@ -0,0 +1 @@
1
+ "use strict";require("../../constants/index.cjs"),require("../../types/enums.cjs"),require("../../utils/sentry.cjs");var e=require("../../utils/is-type.cjs");let t=[],n=null,i=0;function r(e){const t=e.getBoundingClientRect();return t.right>0&&t.bottom>0&&t.left<globalThis.innerWidth&&t.top<globalThis.innerHeight}function s(e){cancelAnimationFrame(i),i=requestAnimationFrame(()=>{if("complete"===document.readyState){n?.disconnect();const i=0===t.length?0:Math.max(...t.map(e=>e.startTime));return t=[],void e(i)}s(e)})}function o(i){if(!("MutationObserver"in globalThis)||"function"!=typeof globalThis.MutationObserver)return void i(0);const o=new Set(["link","script","style"]);n=new globalThis.MutationObserver(n=>{s(i);const a=[];for(const t of n)if(e.isHTMLElement(t.target)&&t.addedNodes.length&&r(t.target))for(const n of Array.from(t.addedNodes))e.isHTMLElement(n)&&!o.has(n.tagName.toLowerCase())&&r(n)&&a.push(n);a.length&&t.push({children:a,startTime:globalThis.performance.now()})}),n.observe(document,{childList:!0,subtree:!0,characterData:!0,attributes:!0})}exports.getFirstScreenPaint=function(e){"requestIdleCallback"in globalThis?requestIdleCallback(t=>{t.timeRemaining()>0&&o(e)}):o(e)};
@@ -0,0 +1 @@
1
+ import"../../constants/index.js";import"../../types/enums.js";import"../../utils/sentry.js";import{isHTMLElement as t}from"../../utils/is-type.js";let e=[],n=null,i=0;function o(t){const e=t.getBoundingClientRect();return e.right>0&&e.bottom>0&&e.left<globalThis.innerWidth&&e.top<globalThis.innerHeight}function r(t){cancelAnimationFrame(i),i=requestAnimationFrame(()=>{if("complete"===document.readyState){n?.disconnect();const i=0===e.length?0:Math.max(...e.map(t=>t.startTime));return e=[],void t(i)}r(t)})}function s(i){if(!("MutationObserver"in globalThis)||"function"!=typeof globalThis.MutationObserver)return void i(0);const s=new Set(["link","script","style"]);n=new globalThis.MutationObserver(n=>{r(i);const a=[];for(const e of n)if(t(e.target)&&e.addedNodes.length&&o(e.target))for(const n of Array.from(e.addedNodes))t(n)&&!s.has(n.tagName.toLowerCase())&&o(n)&&a.push(n);a.length&&e.push({children:a,startTime:globalThis.performance.now()})}),n.observe(document,{childList:!0,subtree:!0,characterData:!0,attributes:!0})}function a(t){"requestIdleCallback"in globalThis?requestIdleCallback(e=>{e.timeRemaining()>0&&s(t)}):s(t)}export{a as getFirstScreenPaint};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../types/enums.cjs"),r=require("../../types/plugin.cjs"),s=require("../../reporter/index.cjs");require("../../constants/index.cjs");var t=require("../../utils/get-base-data.cjs");require("../../utils/sentry.cjs");var n=require("./navigation-timing.cjs"),o=require("./perf.cjs"),i=require("./performance-observer-support.cjs"),a=require("./resource-element-fallback.cjs"),c=require("./resource-timing.cjs");function u(){}class p extends r.SentryPlugin{cleanups=[];constructor(){super(e.EventType.Performance)}init(){this.startWebVitals(),this.cleanups.push(this.observeLongTasks()),this.cleanups.push(c.observeResourceTimings(e=>this.report(e))),this.cleanups.push(a.observeResourceElementFallback(e=>this.report(e))),this.cleanups.push(this.onPageReady(()=>{this.reportPageLoadTimings()})),this.reportMemory()}destroy(){this.cleanups.toReversed().forEach(e=>{e()}),this.cleanups=[]}report(e){s.default.send(e)}startWebVitals(){try{o.getWebVitals(e=>{this.report(e)})}catch{return}}observeLongTasks(){if(!i.supportsPerformanceEntryType("longtask"))return u;const r=new globalThis.PerformanceObserver(r=>{const s={...t.default(),name:"LongTask",type:e.EventType.Performance,longTasks:r.getEntries()};this.report(s)});return r.observe({entryTypes:["longtask"]}),()=>{r.disconnect()}}onPageReady(e){if("complete"===document.readyState)return queueMicrotask(e),u;const r=()=>{e()};return globalThis.addEventListener("load",r,{once:!0}),()=>{globalThis.removeEventListener("load",r)}}reportPageLoadTimings(){const e=n.getNavigationTimingData();e&&this.report(e);const r=c.getInitialResourceListData();r&&this.report(r)}async reportMemory(){if("performance"in globalThis&&"measureUserAgentSpecificMemory"in globalThis.performance&&"function"==typeof globalThis.performance.measureUserAgentSpecificMemory){const r={...t.default(),name:"Memory",type:e.EventType.Performance,message:"performance.measureUserAgentSpecificMemory",memory:await globalThis.performance.measureUserAgentSpecificMemory()};this.report(r)}}}exports.default=p;
@@ -0,0 +1,16 @@
1
+ import { SentryPlugin } from '../../types/plugin.js';
2
+
3
+ declare class PerformancePlugin extends SentryPlugin {
4
+ private cleanups;
5
+ constructor();
6
+ init(): void;
7
+ destroy(): void;
8
+ private report;
9
+ private startWebVitals;
10
+ private observeLongTasks;
11
+ private onPageReady;
12
+ private reportPageLoadTimings;
13
+ private reportMemory;
14
+ }
15
+
16
+ export { PerformancePlugin as default };
@@ -0,0 +1 @@
1
+ import{EventType as e}from"../../types/enums.js";import{SentryPlugin as r}from"../../types/plugin.js";import s from"../../reporter/index.js";import"../../constants/index.js";import t from"../../utils/get-base-data.js";import"../../utils/sentry.js";import{getNavigationTimingData as o}from"./navigation-timing.js";import{getWebVitals as n}from"./perf.js";import{supportsPerformanceEntryType as i}from"./performance-observer-support.js";import{observeResourceElementFallback as a}from"./resource-element-fallback.js";import{observeResourceTimings as p,getInitialResourceListData as m}from"./resource-timing.js";function c(){}class l extends r{cleanups=[];constructor(){super(e.Performance)}init(){this.startWebVitals(),this.cleanups.push(this.observeLongTasks()),this.cleanups.push(p(e=>this.report(e))),this.cleanups.push(a(e=>this.report(e))),this.cleanups.push(this.onPageReady(()=>{this.reportPageLoadTimings()})),this.reportMemory()}destroy(){this.cleanups.toReversed().forEach(e=>{e()}),this.cleanups=[]}report(e){s.send(e)}startWebVitals(){try{n(e=>{this.report(e)})}catch{return}}observeLongTasks(){if(!i("longtask"))return c;const r=new globalThis.PerformanceObserver(r=>{const s={...t(),name:"LongTask",type:e.Performance,longTasks:r.getEntries()};this.report(s)});return r.observe({entryTypes:["longtask"]}),()=>{r.disconnect()}}onPageReady(e){if("complete"===document.readyState)return queueMicrotask(e),c;const r=()=>{e()};return globalThis.addEventListener("load",r,{once:!0}),()=>{globalThis.removeEventListener("load",r)}}reportPageLoadTimings(){const e=o();e&&this.report(e);const r=m();r&&this.report(r)}async reportMemory(){if("performance"in globalThis&&"measureUserAgentSpecificMemory"in globalThis.performance&&"function"==typeof globalThis.performance.measureUserAgentSpecificMemory){const r={...t(),name:"Memory",type:e.Performance,message:"performance.measureUserAgentSpecificMemory",memory:await globalThis.performance.measureUserAgentSpecificMemory()};this.report(r)}}}export{l as default};
@@ -0,0 +1 @@
1
+ "use strict";var t=require("../../types/enums.cjs");require("../../constants/index.cjs");var e=require("../../utils/get-base-data.cjs");function n(t,e){return Math.max(0,Math.round(t-e))}function r(t,e){const r=t.fetchStart;return{paintTime:e>0?n(e,r):0,domInteractive:n(t.domInteractive,r),domContentLoaded:n(t.domContentLoadedEventEnd,r),loadEvent:n(t.loadEventStart,r),firstByte:n(t.responseStart,r),dnsLookup:n(t.domainLookupEnd,t.domainLookupStart),tcpConnection:n(t.connectEnd,t.connectStart),tlsHandshake:n(t.connectEnd,t.secureConnectionStart),timeToFirstByte:n(t.responseStart,t.requestStart),contentTransfer:n(t.responseEnd,t.responseStart),domProcessing:n(t.domInteractive,t.responseEnd),resourceLoad:n(t.loadEventStart,t.domContentLoadedEventEnd),redirect:n(t.redirectEnd,t.redirectStart),unloadTime:n(t.unloadEventEnd,t.unloadEventStart),triggerPageUrl:location.href}}require("../../utils/sentry.cjs"),exports.getNavigationTimingData=function(){if(!("performance"in globalThis)||"function"!=typeof globalThis.performance.getEntriesByType)return null;const n=function(){const t=globalThis.performance.getEntriesByType("navigation")[0];return t&&function(t){return"navigation"===t.entryType&&"fetchStart"in t}(t)?t:null}();return n?{...e.default(),type:t.EventType.Performance,name:"NavigationTiming",message:"Page navigation timing",status:t.Status.OK,extra:r(n,globalThis.performance.getEntriesByType("paint").at(-1)?.startTime??0)}:null};
@@ -0,0 +1 @@
1
+ import{Status as t,EventType as n}from"../../types/enums.js";import"../../constants/index.js";import e from"../../utils/get-base-data.js";import"../../utils/sentry.js";function o(t,n){return Math.max(0,Math.round(t-n))}function r(t,n){const e=t.fetchStart;return{paintTime:n>0?o(n,e):0,domInteractive:o(t.domInteractive,e),domContentLoaded:o(t.domContentLoadedEventEnd,e),loadEvent:o(t.loadEventStart,e),firstByte:o(t.responseStart,e),dnsLookup:o(t.domainLookupEnd,t.domainLookupStart),tcpConnection:o(t.connectEnd,t.connectStart),tlsHandshake:o(t.connectEnd,t.secureConnectionStart),timeToFirstByte:o(t.responseStart,t.requestStart),contentTransfer:o(t.responseEnd,t.responseStart),domProcessing:o(t.domInteractive,t.responseEnd),resourceLoad:o(t.loadEventStart,t.domContentLoadedEventEnd),redirect:o(t.redirectEnd,t.redirectStart),unloadTime:o(t.unloadEventEnd,t.unloadEventStart),triggerPageUrl:location.href}}function a(){if(!("performance"in globalThis)||"function"!=typeof globalThis.performance.getEntriesByType)return null;const o=function(){const t=globalThis.performance.getEntriesByType("navigation")[0];return t&&function(t){return"navigation"===t.entryType&&"fetchStart"in t}(t)?t:null}();return o?{...e(),type:n.Performance,name:"NavigationTiming",message:"Page navigation timing",status:t.OK,extra:r(o,globalThis.performance.getEntriesByType("paint").at(-1)?.startTime??0)}:null}export{a as getNavigationTimingData};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../../types/enums.cjs"),t=require("web-vitals");require("../../constants/index.cjs");var r=require("../../utils/get-base-data.cjs");require("../../utils/sentry.cjs");var s=require("../../utils/metric2perf-data.cjs"),n=require("../../utils/logger.cjs"),i=require("./first-screen-paint.cjs");exports.getWebVitals=function(a){n.sentryLogger.info("Starting web vitals monitoring...");const u=e=>{n.sentryLogger.success(`Metric: ${e.name}`,e,function(e){if("value"in e&&"number"==typeof e.value)return Math.round(e.value)}(e)),a(e)};t.onLCP(e=>{u(s.default(e))}),t.onFCP(e=>{u(s.default(e))}),t.onCLS(e=>{u(s.default(e))}),t.onINP(e=>{u(s.default(e))}),t.onTTFB(e=>{u(s.default(e))}),i.getFirstScreenPaint(t=>{const s={...r.default(),name:"FSP",value:t,type:e.EventType.Performance,message:"First screen paint"};u(s)})};
@@ -0,0 +1 @@
1
+ import{EventType as t}from"../../types/enums.js";import{onLCP as e,onFCP as r,onCLS as s,onINP as i,onTTFB as o}from"web-vitals";import"../../constants/index.js";import n from"../../utils/get-base-data.js";import"../../utils/sentry.js";import m from"../../utils/metric2perf-data.js";import{sentryLogger as a}from"../../utils/logger.js";import{getFirstScreenPaint as p}from"./first-screen-paint.js";function u(u){a.info("Starting web vitals monitoring...");const f=t=>{a.success(`Metric: ${t.name}`,t,function(t){if("value"in t&&"number"==typeof t.value)return Math.round(t.value)}(t)),u(t)};e(t=>{f(m(t))}),r(t=>{f(m(t))}),s(t=>{f(m(t))}),i(t=>{f(m(t))}),o(t=>{f(m(t))}),p(e=>{const r={...n(),name:"FSP",value:e,type:t.Performance,message:"First screen paint"};f(r)})}export{u as getWebVitals};
@@ -0,0 +1 @@
1
+ "use strict";exports.supportsPerformanceEntryType=function(e){return"PerformanceObserver"in globalThis&&"function"==typeof globalThis.PerformanceObserver&&globalThis.PerformanceObserver.supportedEntryTypes.includes(e)};
@@ -0,0 +1 @@
1
+ function e(e){return"PerformanceObserver"in globalThis&&"function"==typeof globalThis.PerformanceObserver&&globalThis.PerformanceObserver.supportedEntryTypes.includes(e)}export{e as supportsPerformanceEntryType};
@@ -0,0 +1 @@
1
+ "use strict";require("../../constants/index.cjs"),require("../../types/enums.cjs");var e=require("../../utils/sentry.cjs"),n=require("./resource-timing.cjs"),r=require("./performance-observer-support.cjs");const t=new Set(["IMG","SCRIPT","LINK"]);exports.observeResourceElementFallback=function(o){if(r.supportsPerformanceEntryType("resource")||!("MutationObserver"in globalThis)||"function"!=typeof globalThis.MutationObserver)return()=>{};const s=[],i=new Set,a=r=>{const t=function(e){return e instanceof HTMLImageElement?e.currentSrc||e.src:e instanceof HTMLScriptElement?e.src:e.href}(r);if(!t||i.has(t)||t.includes(e.default.options.dsn))return;i.add(t);const s=function(e){return n.getResourceList().filter(n=>n.name===e).at(-1)??null}(t)??function(e,n){const r="performance"in globalThis?Math.round(globalThis.performance.now()):Date.now();return{name:e,initiatorType:n,startTime:r,responseEnd:r,duration:0,transferSize:0,encodedBodySize:0,decodedBodySize:0,fromCache:!1}}(t,r.tagName.toLowerCase());o(n.createResourceTimingData(s))},c=new globalThis.MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{(function(e){return e instanceof HTMLElement&&t.has(e.tagName)})(e)&&(e=>{const n=()=>{a(e)};e.addEventListener("load",n,{once:!0}),e.addEventListener("error",n,{once:!0}),s.push({element:e,eventName:"load",listener:n}),s.push({element:e,eventName:"error",listener:n})})(e)})})});return c.observe(document.documentElement,{childList:!0,subtree:!0}),()=>{c.disconnect(),s.forEach(({element:e,eventName:n,listener:r})=>{e.removeEventListener(n,r)})}};
@@ -0,0 +1 @@
1
+ import"../../constants/index.js";import"../../types/enums.js";import e from"../../utils/sentry.js";import{createResourceTimingData as n,getResourceList as t}from"./resource-timing.js";import{supportsPerformanceEntryType as r}from"./performance-observer-support.js";const o=new Set(["IMG","SCRIPT","LINK"]);function s(s){if(r("resource")||!("MutationObserver"in globalThis)||"function"!=typeof globalThis.MutationObserver)return()=>{};const i=[],a=new Set,c=r=>{const o=function(e){return e instanceof HTMLImageElement?e.currentSrc||e.src:e instanceof HTMLScriptElement?e.src:e.href}(r);if(!o||a.has(o)||o.includes(e.options.dsn))return;a.add(o);const i=function(e){return t().filter(n=>n.name===e).at(-1)??null}(o)??function(e,n){const t="performance"in globalThis?Math.round(globalThis.performance.now()):Date.now();return{name:e,initiatorType:n,startTime:t,responseEnd:t,duration:0,transferSize:0,encodedBodySize:0,decodedBodySize:0,fromCache:!1}}(o,r.tagName.toLowerCase());s(n(i))},m=new globalThis.MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{(function(e){return e instanceof HTMLElement&&o.has(e.tagName)})(e)&&(e=>{const n=()=>{c(e)};e.addEventListener("load",n,{once:!0}),e.addEventListener("error",n,{once:!0}),i.push({element:e,eventName:"load",listener:n}),i.push({element:e,eventName:"error",listener:n})})(e)})})});return m.observe(document.documentElement,{childList:!0,subtree:!0}),()=>{m.disconnect(),i.forEach(({element:e,eventName:n,listener:t})=>{e.removeEventListener(n,t)})}}export{s as observeResourceElementFallback};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../../types/enums.cjs");require("../../constants/index.cjs");var r=require("../../utils/get-base-data.cjs"),t=require("../../utils/sentry.cjs"),n=require("./performance-observer-support.cjs");const s=new Set(["fetch","xmlhttprequest","beacon"]);function o(e){return"resource"===e.entryType&&"initiatorType"in e}function i(e){return!s.has(e.initiatorType)&&!function(e){return""!==t.default.options.dsn&&e.name.includes(t.default.options.dsn)}(e)}function a(e){return{name:e.name,initiatorType:e.initiatorType,startTime:Math.round(e.startTime),responseEnd:Math.round(e.responseEnd),duration:Math.round(e.duration),transferSize:e.transferSize,encodedBodySize:e.encodedBodySize,decodedBodySize:e.decodedBodySize,fromCache:c(e)}}function u(t){return{...r.default(),type:e.EventType.Performance,name:"ResourceTiming",message:t.name,status:e.Status.OK,value:t.duration,extra:{resource:t}}}function c(e){return 0===e.transferSize||0!==e.transferSize&&0===e.encodedBodySize}function d(){return"performance"in globalThis&&"function"==typeof globalThis.performance.getEntriesByType?globalThis.performance.getEntriesByType("resource").filter(o).filter(i).map(a):[]}exports.createResourceTimingData=u,exports.getInitialResourceListData=function(){return{...r.default(),name:"ResourceList",type:e.EventType.Performance,status:e.Status.OK,resourceList:d()}},exports.getResourceList=d,exports.isFromCache=c,exports.observeResourceTimings=function(e){if(!n.supportsPerformanceEntryType("resource"))return()=>{};const r=new globalThis.PerformanceObserver(r=>{r.getEntries().filter(o).filter(i).map(a).forEach(r=>{e(u(r))})});return r.observe({entryTypes:["resource"]}),()=>{r.disconnect()}};
@@ -0,0 +1 @@
1
+ import{Status as e,EventType as r}from"../../types/enums.js";import"../../constants/index.js";import n from"../../utils/get-base-data.js";import t from"../../utils/sentry.js";import{supportsPerformanceEntryType as o}from"./performance-observer-support.js";const i=new Set(["fetch","xmlhttprequest","beacon"]);function s(e){return"resource"===e.entryType&&"initiatorType"in e}function a(e){return!i.has(e.initiatorType)&&!function(e){return""!==t.options.dsn&&e.name.includes(t.options.dsn)}(e)}function u(e){return{name:e.name,initiatorType:e.initiatorType,startTime:Math.round(e.startTime),responseEnd:Math.round(e.responseEnd),duration:Math.round(e.duration),transferSize:e.transferSize,encodedBodySize:e.encodedBodySize,decodedBodySize:e.decodedBodySize,fromCache:f(e)}}function c(t){return{...n(),type:r.Performance,name:"ResourceTiming",message:t.name,status:e.OK,value:t.duration,extra:{resource:t}}}function f(e){return 0===e.transferSize||0!==e.transferSize&&0===e.encodedBodySize}function d(){return"performance"in globalThis&&"function"==typeof globalThis.performance.getEntriesByType?globalThis.performance.getEntriesByType("resource").filter(s).filter(a).map(u):[]}function m(){return{...n(),name:"ResourceList",type:r.Performance,status:e.OK,resourceList:d()}}function p(e){if(!o("resource"))return()=>{};const r=new globalThis.PerformanceObserver(r=>{r.getEntries().filter(s).filter(a).map(u).forEach(r=>{e(c(r))})});return r.observe({entryTypes:["resource"]}),()=>{r.disconnect()}}export{c as createResourceTimingData,m as getInitialResourceListData,d as getResourceList,f as isFromCache,p as observeResourceTimings};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../types/enums.cjs"),r=require("../../types/plugin.cjs"),s=require("../../constants/index.cjs"),n=require("../../utils/sentry.cjs"),t=require("../../reporter/index.cjs"),c=require("./recorder.cjs");class o extends r.SentryPlugin{durationMs=s.DEFAULT_OPTIONS.screenRecordDurationMs;eventTypes=s.DEFAULT_OPTIONS.screenRecordEventTypes;cleanup=null;constructor(r={durationMs:s.DEFAULT_OPTIONS.screenRecordDurationMs,eventTypes:s.DEFAULT_OPTIONS.screenRecordEventTypes}){super(e.EventType.ScreenRecord);const{durationMs:n=s.DEFAULT_OPTIONS.screenRecordDurationMs,eventTypes:t=s.DEFAULT_OPTIONS.screenRecordEventTypes}=r;this.durationMs=n,this.eventTypes=t}init(){n.default.options.enableScreenRecord=!0,n.default.options.screenRecordEventTypes=this.eventTypes,n.default.options.screenRecordDurationMs=this.durationMs,c.recorder(t.default).then(e=>{this.cleanup=e})}destroy(){this.cleanup?.(),this.cleanup=null}}exports.unzipScreenRecord=c.unzipScreenRecord,exports.default=o;
@@ -0,0 +1,18 @@
1
+ import { EventType } from '../../types/enums.js';
2
+ import { SentryPlugin } from '../../types/plugin.js';
3
+
4
+ interface ScreenRecordPluginOptions {
5
+ durationMs?: number;
6
+ eventTypes?: EventType[];
7
+ }
8
+ declare class ScreenRecordPlugin extends SentryPlugin {
9
+ durationMs: number;
10
+ eventTypes: EventType[];
11
+ private cleanup;
12
+ constructor(options?: ScreenRecordPluginOptions);
13
+ init(): void;
14
+ destroy(): void;
15
+ }
16
+
17
+ export { ScreenRecordPlugin as default };
18
+ export type { ScreenRecordPluginOptions };
@@ -0,0 +1 @@
1
+ import{EventType as e}from"../../types/enums.js";import{SentryPlugin as r}from"../../types/plugin.js";import{DEFAULT_OPTIONS as s}from"../../constants/index.js";import n from"../../utils/sentry.js";import t from"../../reporter/index.js";import{recorder as o}from"./recorder.js";export{unzipScreenRecord}from"./recorder.js";class c extends r{durationMs=s.screenRecordDurationMs;eventTypes=s.screenRecordEventTypes;cleanup=null;constructor(r={durationMs:s.screenRecordDurationMs,eventTypes:s.screenRecordEventTypes}){super(e.ScreenRecord);const{durationMs:n=s.screenRecordDurationMs,eventTypes:t=s.screenRecordEventTypes}=r;this.durationMs=n,this.eventTypes=t}init(){n.options.enableScreenRecord=!0,n.options.screenRecordEventTypes=this.eventTypes,n.options.screenRecordDurationMs=this.durationMs,o(t).then(e=>{this.cleanup=e})}destroy(){this.cleanup?.(),this.cleanup=null}}export{c as default};