@sentry/react-native 5.0.0-alpha.3 → 5.0.0-alpha.4

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 (75) hide show
  1. package/CHANGELOG.md +54 -6
  2. package/RNSentry.podspec +1 -1
  3. package/android/build.gradle +1 -1
  4. package/android/src/main/java/io/sentry/react/RNSentryModule.java +9 -12
  5. package/dist/js/client.d.ts +5 -1
  6. package/dist/js/client.d.ts.map +1 -1
  7. package/dist/js/client.js +17 -0
  8. package/dist/js/client.js.map +1 -1
  9. package/dist/js/definitions.d.ts +2 -4
  10. package/dist/js/definitions.d.ts.map +1 -1
  11. package/dist/js/definitions.js.map +1 -1
  12. package/dist/js/index.d.ts +2 -2
  13. package/dist/js/index.d.ts.map +1 -1
  14. package/dist/js/index.js +1 -1
  15. package/dist/js/index.js.map +1 -1
  16. package/dist/js/integrations/reactnativeerrorhandlers.d.ts.map +1 -1
  17. package/dist/js/integrations/reactnativeerrorhandlers.js +3 -1
  18. package/dist/js/integrations/reactnativeerrorhandlers.js.map +1 -1
  19. package/dist/js/integrations/sdkinfo.d.ts +4 -1
  20. package/dist/js/integrations/sdkinfo.d.ts.map +1 -1
  21. package/dist/js/integrations/sdkinfo.js +14 -7
  22. package/dist/js/integrations/sdkinfo.js.map +1 -1
  23. package/dist/js/misc.d.ts +9 -0
  24. package/dist/js/misc.d.ts.map +1 -0
  25. package/dist/js/misc.js +17 -0
  26. package/dist/js/misc.js.map +1 -0
  27. package/dist/js/options.d.ts +27 -6
  28. package/dist/js/options.d.ts.map +1 -1
  29. package/dist/js/options.js.map +1 -1
  30. package/dist/js/scope.d.ts +9 -1
  31. package/dist/js/scope.d.ts.map +1 -1
  32. package/dist/js/scope.js +12 -0
  33. package/dist/js/scope.js.map +1 -1
  34. package/dist/js/sdk.d.ts +5 -0
  35. package/dist/js/sdk.d.ts.map +1 -1
  36. package/dist/js/sdk.js +30 -18
  37. package/dist/js/sdk.js.map +1 -1
  38. package/dist/js/tracing/reactnativetracing.d.ts +14 -5
  39. package/dist/js/tracing/reactnativetracing.d.ts.map +1 -1
  40. package/dist/js/tracing/reactnativetracing.js +10 -6
  41. package/dist/js/tracing/reactnativetracing.js.map +1 -1
  42. package/dist/js/tracing/utils.d.ts +1 -2
  43. package/dist/js/tracing/utils.d.ts.map +1 -1
  44. package/dist/js/tracing/utils.js +2 -10
  45. package/dist/js/tracing/utils.js.map +1 -1
  46. package/dist/js/transports/TextEncoder.d.ts +3 -0
  47. package/dist/js/transports/TextEncoder.d.ts.map +1 -0
  48. package/dist/js/transports/TextEncoder.js +12 -0
  49. package/dist/js/transports/TextEncoder.js.map +1 -0
  50. package/dist/js/utils/envelope.d.ts +10 -0
  51. package/dist/js/utils/envelope.d.ts.map +1 -0
  52. package/dist/js/utils/envelope.js +20 -0
  53. package/dist/js/utils/envelope.js.map +1 -0
  54. package/dist/js/vendor/buffer/index.d.ts +2 -0
  55. package/dist/js/vendor/buffer/index.d.ts.map +1 -0
  56. package/dist/js/vendor/buffer/index.js +2 -0
  57. package/dist/js/vendor/buffer/index.js.map +1 -0
  58. package/dist/js/vendor/buffer/utf8ToBytes.d.ts +10 -0
  59. package/dist/js/vendor/buffer/utf8ToBytes.d.ts.map +1 -0
  60. package/dist/js/vendor/buffer/utf8ToBytes.js +82 -0
  61. package/dist/js/vendor/buffer/utf8ToBytes.js.map +1 -0
  62. package/dist/js/vendor/index.d.ts +2 -0
  63. package/dist/js/vendor/index.d.ts.map +1 -0
  64. package/dist/js/vendor/index.js +2 -0
  65. package/dist/js/vendor/index.js.map +1 -0
  66. package/dist/js/version.d.ts +2 -1
  67. package/dist/js/version.d.ts.map +1 -1
  68. package/dist/js/version.js +2 -1
  69. package/dist/js/version.js.map +1 -1
  70. package/dist/js/wrapper.d.ts +3 -2
  71. package/dist/js/wrapper.d.ts.map +1 -1
  72. package/dist/js/wrapper.js +62 -57
  73. package/dist/js/wrapper.js.map +1 -1
  74. package/ios/RNSentry.m +22 -35
  75. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/js/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC;;;;;QAKI;IACJ,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;;;;;;;;OAUG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,0DAA0D;IAC1D,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC,uEAAuE;IACvE,6BAA6B,CAAC,EAAE,MAAM,CAAC;IAEvC,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,+FAA+F;IAC/F,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;SAIK;IACL,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE;QACnB,yEAAyE;QACzE,iBAAiB,EAAE,OAAO,CAAC;KAC5B,KAAK,IAAI,CAAC;IAEX,mDAAmD;IACnD,6BAA6B,CAAC,EAAE,OAAO,CAAC;IAExC;;;;;;SAMK;IACL,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;OAGG;IACH,YAAY,CAAC,EAAE,cAAc,CAAC;IAE9B;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;KAIC;IACD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AAEH,MAAM,WAAW,kBAAmB,SAAQ,OAAO,CAAC,uBAAuB,CAAC,EAAE,kBAAkB,EAAE,sBAAsB;CACvH;AAED,MAAM,WAAW,wBAAyB,SAAQ,aAAa,CAAC,uBAAuB,CAAC,EAAE,kBAAkB,EAAE,sBAAsB;CACnI;AAGD,MAAM,WAAW,yBAAyB;IACxC,wCAAwC;IACxC,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B,8CAA8C;IAC9C,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;CACnD"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/js/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC;;;;;QAKI;IACJ,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;;;;;;;;OAUG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,0DAA0D;IAC1D,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC,uEAAuE;IACvE,6BAA6B,CAAC,EAAE,MAAM,CAAC;IAEvC,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,+FAA+F;IAC/F,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE;QACnB,yEAAyE;QACzE,iBAAiB,EAAE,OAAO,CAAC;KAC5B,KAAK,IAAI,CAAC;IAEX,mDAAmD;IACnD,6BAA6B,CAAC,EAAE,OAAO,CAAC;IAExC;;;;;;OAMG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAEpC;;;OAGG;IACH,YAAY,CAAC,EAAE,cAAc,CAAC;IAE9B;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;;;;;;;;OASG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;GAGG;AAEH,MAAM,WAAW,kBAAmB,SAAQ,OAAO,CAAC,uBAAuB,CAAC,EAAE,kBAAkB,EAAE,sBAAsB;CACvH;AAED,MAAM,WAAW,wBAAyB,SAAQ,aAAa,CAAC,uBAAuB,CAAC,EAAE,kBAAkB,EAAE,sBAAsB;CACnI;AAGD,MAAM,WAAW,yBAAyB;IACxC,wCAAwC;IACxC,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B,8CAA8C;IAC9C,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;CACnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/js/options.ts"],"names":[],"mappings":"","sourcesContent":["import { BaseBrowserOptions } from '@sentry/browser/types/client';\nimport { BrowserTransportOptions } from '@sentry/browser/types/transports/types';\nimport { ProfilerProps } from '@sentry/react/types/profiler';\nimport { ClientOptions, Options } from '@sentry/types';\nimport { CaptureContext } from '@sentry/types/types/scope';\n\nimport { TouchEventBoundaryProps } from './touchevents';\n\nexport interface BaseReactNativeOptions {\n /**\n * Enables native transport + device info + offline caching.\n * Be careful, disabling this also breaks automatic release setting.\n * This means you have to manage setting the release yourself.\n * Defaults to `true`.\n */\n enableNative?: boolean;\n\n /**\n * Enables native crashHandling. This only works if `enableNative` is `true`.\n * Defaults to `true`.\n */\n enableNativeCrashHandling?: boolean;\n\n /**\n * Initializes the native SDK on init.\n * Set this to `false` if you have an existing native SDK and don't want to re-initialize.\n *\n * NOTE: Be careful and only use this if you know what you are doing.\n * If you use this flag, make sure a native SDK is running before the JS Engine initializes or events might not be captured.\n * Also, make sure the DSN on both the React Native side and the native side are the same one.\n * We strongly recommend checking the documentation if you need to use this.\n *\n * @default true\n */\n autoInitializeNativeSdk?: boolean;\n\n /** Should the native nagger alert be shown or not. */\n enableNativeNagger?: boolean;\n\n /** Should sessions be tracked to Sentry Health or not. */\n enableAutoSessionTracking?: boolean;\n\n /** The interval to end a session if the App goes to the background. */\n sessionTrackingIntervalMillis?: number;\n\n /** Enable scope sync from Java to NDK on Android */\n enableNdkScopeSync?: boolean;\n\n /** When enabled, all the threads are automatically attached to all logged events on Android */\n attachThreads?: boolean;\n\n /**\n * When enabled, certain personally identifiable information (PII) is added by active integrations.\n *\n * @default false\n * */\n sendDefaultPii?: boolean;\n\n /**\n * Callback that is called after the RN SDK on the JS Layer has made contact with the Native Layer.\n */\n onReady?: (response: {\n /** `true` if the native SDK has been initialized, `false` otherwise. */\n didCallNativeInit: boolean;\n }) => void;\n\n /** Enable auto performance tracking by default. */\n enableAutoPerformanceTracking?: boolean;\n\n /**\n * Enables Out of Memory Tracking for iOS and macCatalyst.\n * See the following link for more information and possible restrictions:\n * https://docs.sentry.io/platforms/apple/guides/ios/configuration/out-of-memory/\n *\n * @default true\n * */\n enableOutOfMemoryTracking?: boolean;\n\n /**\n * Set data to the inital scope\n * @deprecated Use `Sentry.configureScope(...)`\n */\n initialScope?: CaptureContext;\n\n /**\n * When enabled, Sentry will overwrite the global Promise instance to ensure that unhandled rejections are correctly tracked.\n * If you run into issues with Promise polyfills such as `core-js`, make sure you polyfill after Sentry is initialized.\n * Read more at https://docs.sentry.io/platforms/react-native/troubleshooting/#unhandled-promise-rejections\n *\n * When disabled, this option will not disable unhandled rejection tracking. Set `onunhandledrejection: false` on the `ReactNativeErrorHandlers` integration instead.\n * @default true\n */\n patchGlobalPromise?: boolean;\n\n /**\n * The max cache items for capping the number of envelopes.\n *\n * @default 30\n */\n maxCacheItems?: number;\n}\n\n/**\n * Configuration options for the Sentry ReactNative SDK.\n * @see ReactNativeFrontend for more information.\n */\n\nexport interface ReactNativeOptions extends Options<BrowserTransportOptions>, BaseBrowserOptions, BaseReactNativeOptions {\n}\n\nexport interface ReactNativeClientOptions extends ClientOptions<BrowserTransportOptions>, BaseBrowserOptions, BaseReactNativeOptions {\n}\n\n\nexport interface ReactNativeWrapperOptions {\n /** Props for the root React profiler */\n profilerProps?: ProfilerProps;\n\n /** Props for the root touch event boundary */\n touchEventBoundaryProps?: TouchEventBoundaryProps;\n}\n"]}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/js/options.ts"],"names":[],"mappings":"","sourcesContent":["import { BaseBrowserOptions } from '@sentry/browser/types/client';\nimport { BrowserTransportOptions } from '@sentry/browser/types/transports/types';\nimport { ProfilerProps } from '@sentry/react/types/profiler';\nimport { ClientOptions, Options } from '@sentry/types';\nimport { CaptureContext } from '@sentry/types/types/scope';\n\nimport { TouchEventBoundaryProps } from './touchevents';\n\nexport interface BaseReactNativeOptions {\n /**\n * Enables native transport + device info + offline caching.\n * Be careful, disabling this also breaks automatic release setting.\n * This means you have to manage setting the release yourself.\n * Defaults to `true`.\n */\n enableNative?: boolean;\n\n /**\n * Enables native crashHandling. This only works if `enableNative` is `true`.\n * Defaults to `true`.\n */\n enableNativeCrashHandling?: boolean;\n\n /**\n * Initializes the native SDK on init.\n * Set this to `false` if you have an existing native SDK and don't want to re-initialize.\n *\n * NOTE: Be careful and only use this if you know what you are doing.\n * If you use this flag, make sure a native SDK is running before the JS Engine initializes or events might not be captured.\n * Also, make sure the DSN on both the React Native side and the native side are the same one.\n * We strongly recommend checking the documentation if you need to use this.\n *\n * @default true\n */\n autoInitializeNativeSdk?: boolean;\n\n /** Should the native nagger alert be shown or not. */\n enableNativeNagger?: boolean;\n\n /** Should sessions be tracked to Sentry Health or not. */\n enableAutoSessionTracking?: boolean;\n\n /** The interval to end a session if the App goes to the background. */\n sessionTrackingIntervalMillis?: number;\n\n /** Enable scope sync from Java to NDK on Android */\n enableNdkScopeSync?: boolean;\n\n /** When enabled, all the threads are automatically attached to all logged events on Android */\n attachThreads?: boolean;\n\n /**\n * When enabled, certain personally identifiable information (PII) is added by active integrations.\n *\n * @default false\n */\n sendDefaultPii?: boolean;\n\n /**\n * Callback that is called after the RN SDK on the JS Layer has made contact with the Native Layer.\n */\n onReady?: (response: {\n /** `true` if the native SDK has been initialized, `false` otherwise. */\n didCallNativeInit: boolean;\n }) => void;\n\n /** Enable auto performance tracking by default. */\n enableAutoPerformanceTracking?: boolean;\n\n /**\n * Enables Out of Memory Tracking for iOS and macCatalyst.\n * See the following link for more information and possible restrictions:\n * https://docs.sentry.io/platforms/apple/guides/ios/configuration/out-of-memory/\n *\n * @default true\n */\n enableOutOfMemoryTracking?: boolean;\n\n /**\n * Set data to the inital scope\n * @deprecated Use `Sentry.configureScope(...)`\n */\n initialScope?: CaptureContext;\n\n /**\n * When enabled, Sentry will overwrite the global Promise instance to ensure that unhandled rejections are correctly tracked.\n * If you run into issues with Promise polyfills such as `core-js`, make sure you polyfill after Sentry is initialized.\n * Read more at https://docs.sentry.io/platforms/react-native/troubleshooting/#unhandled-promise-rejections\n *\n * When disabled, this option will not disable unhandled rejection tracking. Set `onunhandledrejection: false` on the `ReactNativeErrorHandlers` integration instead.\n *\n * @default true\n */\n patchGlobalPromise?: boolean;\n\n /**\n * The max cache items for capping the number of envelopes.\n *\n * @default 30\n */\n maxCacheItems?: number;\n\n /**\n * When enabled, the SDK tracks when the application stops responding for a specific amount of\n * time defined by the `appHangTimeoutInterval` option.\n *\n * iOS only\n *\n * @default true\n */\n enableAppHangTracking?: boolean;\n\n /**\n * The minimum amount of time an app should be unresponsive to be classified as an App Hanging.\n * The actual amount may be a little longer.\n * Avoid using values lower than 100ms, which may cause a lot of app hangs events being transmitted.\n * Value should be in seconds.\n *\n * iOS only\n *\n * @default 2\n */\n appHangsTimeoutInterval?: number;\n}\n\n/**\n * Configuration options for the Sentry ReactNative SDK.\n * @see ReactNativeFrontend for more information.\n */\n\nexport interface ReactNativeOptions extends Options<BrowserTransportOptions>, BaseBrowserOptions, BaseReactNativeOptions {\n}\n\nexport interface ReactNativeClientOptions extends ClientOptions<BrowserTransportOptions>, BaseBrowserOptions, BaseReactNativeOptions {\n}\n\n\nexport interface ReactNativeWrapperOptions {\n /** Props for the root React profiler */\n profilerProps?: ProfilerProps;\n\n /** Props for the root touch event boundary */\n touchEventBoundaryProps?: TouchEventBoundaryProps;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { Scope } from '@sentry/hub';
2
- import { Breadcrumb, User } from '@sentry/types';
2
+ import { Attachment, Breadcrumb, User } from '@sentry/types';
3
3
  /**
4
4
  * Extends the scope methods to set scope on the Native SDKs
5
5
  */
@@ -42,5 +42,13 @@ export declare class ReactNativeScope extends Scope {
42
42
  setContext(key: string, context: {
43
43
  [key: string]: any;
44
44
  } | null): this;
45
+ /**
46
+ * @inheritDoc
47
+ */
48
+ addAttachment(attachment: Attachment): this;
49
+ /**
50
+ * @inheritDoc
51
+ */
52
+ clearAttachments(): this;
45
53
  }
46
54
  //# sourceMappingURL=scope.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/js/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAIjD;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC;;OAEG;IACI,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;IAKvC;;OAEG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/C;;OAEG;IACI,OAAO,CAAC,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI;IAQrD;;OAEG;IAEI,SAAS,CAAC,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,IAAI;IAOtD;;OAEG;IAEI,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAK9C;;OAEG;IACI,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAK3E;;OAEG;IACI,gBAAgB,IAAI,IAAI;IAK/B;;OAEG;IAEI,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,IAAI,GAAG,IAAI;CAI7E"}
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/js/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAI7D;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC;;OAEG;IACI,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;IAKvC;;OAEG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/C;;OAEG;IACI,OAAO,CAAC,IAAI,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI;IAQrD;;OAEG;IAEI,SAAS,CAAC,MAAM,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,IAAI;IAOtD;;OAEG;IAEI,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAK9C;;OAEG;IACI,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAK3E;;OAEG;IACI,gBAAgB,IAAI,IAAI;IAK/B;;OAEG;IAEI,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,IAAI,GAAG,IAAI;IAK5E;;OAEG;IACI,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIlD;;MAEE;IACK,gBAAgB,IAAI,IAAI;CAGhC"}
package/dist/js/scope.js CHANGED
@@ -68,5 +68,17 @@ export class ReactNativeScope extends Scope {
68
68
  NATIVE.setContext(key, context);
69
69
  return super.setContext(key, context);
70
70
  }
71
+ /**
72
+ * @inheritDoc
73
+ */
74
+ addAttachment(attachment) {
75
+ return super.addAttachment(attachment);
76
+ }
77
+ /**
78
+ * @inheritDoc
79
+ */
80
+ clearAttachments() {
81
+ return super.clearAttachments();
82
+ }
71
83
  }
72
84
  //# sourceMappingURL=scope.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/js/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC;;OAEG;IACI,OAAO,CAAC,IAAiB;QAC9B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,GAAW,EAAE,KAAa;QACtC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,IAA+B;QAC5C,gEAAgE;QAChE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,8DAA8D;IACvD,SAAS,CAAC,MAA8B;QAC7C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gHAAgH;IACzG,QAAQ,CAAC,GAAW,EAAE,KAAU;QACrC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,UAAsB,EAAE,cAAuB;QAClE,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACI,gBAAgB;QACrB,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,8DAA8D;IACvD,UAAU,CAAC,GAAW,EAAE,OAAsC;QACnE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;CACF","sourcesContent":["import { Scope } from '@sentry/hub';\nimport { Breadcrumb, User } from '@sentry/types';\n\nimport { NATIVE } from './wrapper';\n\n/**\n * Extends the scope methods to set scope on the Native SDKs\n */\nexport class ReactNativeScope extends Scope {\n /**\n * @inheritDoc\n */\n public setUser(user: User | null): this {\n NATIVE.setUser(user);\n return super.setUser(user);\n }\n\n /**\n * @inheritDoc\n */\n public setTag(key: string, value: string): this {\n NATIVE.setTag(key, value);\n return super.setTag(key, value);\n }\n\n /**\n * @inheritDoc\n */\n public setTags(tags: { [key: string]: string }): this {\n // As native only has setTag, we just loop through each tag key.\n Object.keys(tags).forEach((key) => {\n NATIVE.setTag(key, tags[key]);\n });\n return super.setTags(tags);\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setExtras(extras: { [key: string]: any }): this {\n Object.keys(extras).forEach((key) => {\n NATIVE.setExtra(key, extras[key]);\n });\n return super.setExtras(extras);\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types,@typescript-eslint/no-explicit-any\n public setExtra(key: string, extra: any): this {\n NATIVE.setExtra(key, extra);\n return super.setExtra(key, extra);\n }\n\n /**\n * @inheritDoc\n */\n public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n NATIVE.addBreadcrumb(breadcrumb);\n return super.addBreadcrumb(breadcrumb, maxBreadcrumbs);\n }\n\n /**\n * @inheritDoc\n */\n public clearBreadcrumbs(): this {\n NATIVE.clearBreadcrumbs();\n return super.clearBreadcrumbs();\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setContext(key: string, context: { [key: string]: any } | null): this {\n NATIVE.setContext(key, context);\n return super.setContext(key, context);\n }\n}\n"]}
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/js/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC;;OAEG;IACI,OAAO,CAAC,IAAiB;QAC9B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,GAAW,EAAE,KAAa;QACtC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,IAA+B;QAC5C,gEAAgE;QAChE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAChC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,8DAA8D;IACvD,SAAS,CAAC,MAA8B;QAC7C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,gHAAgH;IACzG,QAAQ,CAAC,GAAW,EAAE,KAAU;QACrC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,UAAsB,EAAE,cAAuB;QAClE,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACI,gBAAgB;QACrB,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,8DAA8D;IACvD,UAAU,CAAC,GAAW,EAAE,OAAsC;QACnE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,aAAa,CAAC,UAAsB;QACzC,OAAO,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED;;MAEE;IACK,gBAAgB;QACrB,OAAO,KAAK,CAAC,gBAAgB,EAAE,CAAC;IAClC,CAAC;CACF","sourcesContent":["import { Scope } from '@sentry/hub';\nimport { Attachment, Breadcrumb, User } from '@sentry/types';\n\nimport { NATIVE } from './wrapper';\n\n/**\n * Extends the scope methods to set scope on the Native SDKs\n */\nexport class ReactNativeScope extends Scope {\n /**\n * @inheritDoc\n */\n public setUser(user: User | null): this {\n NATIVE.setUser(user);\n return super.setUser(user);\n }\n\n /**\n * @inheritDoc\n */\n public setTag(key: string, value: string): this {\n NATIVE.setTag(key, value);\n return super.setTag(key, value);\n }\n\n /**\n * @inheritDoc\n */\n public setTags(tags: { [key: string]: string }): this {\n // As native only has setTag, we just loop through each tag key.\n Object.keys(tags).forEach((key) => {\n NATIVE.setTag(key, tags[key]);\n });\n return super.setTags(tags);\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setExtras(extras: { [key: string]: any }): this {\n Object.keys(extras).forEach((key) => {\n NATIVE.setExtra(key, extras[key]);\n });\n return super.setExtras(extras);\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types,@typescript-eslint/no-explicit-any\n public setExtra(key: string, extra: any): this {\n NATIVE.setExtra(key, extra);\n return super.setExtra(key, extra);\n }\n\n /**\n * @inheritDoc\n */\n public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n NATIVE.addBreadcrumb(breadcrumb);\n return super.addBreadcrumb(breadcrumb, maxBreadcrumbs);\n }\n\n /**\n * @inheritDoc\n */\n public clearBreadcrumbs(): this {\n NATIVE.clearBreadcrumbs();\n return super.clearBreadcrumbs();\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setContext(key: string, context: { [key: string]: any } | null): this {\n NATIVE.setContext(key, context);\n return super.setContext(key, context);\n }\n\n /**\n * @inheritDoc\n */\n public addAttachment(attachment: Attachment): this {\n return super.addAttachment(attachment);\n }\n\n /**\n * @inheritDoc\n */\n public clearAttachments(): this {\n return super.clearAttachments();\n }\n}\n"]}
package/dist/js/sdk.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { UserFeedback } from '@sentry/types';
1
2
  import * as React from 'react';
2
3
  import { ReactNativeOptions, ReactNativeWrapperOptions } from './options';
3
4
  /**
@@ -34,4 +35,8 @@ export declare function flush(): Promise<boolean>;
34
35
  * Closes the SDK, stops sending events.
35
36
  */
36
37
  export declare function close(): Promise<void>;
38
+ /**
39
+ * Captures user feedback and sends it to Sentry.
40
+ */
41
+ export declare function captureUserFeedback(feedback: UserFeedback): void;
37
42
  //# sourceMappingURL=sdk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,EAA4B,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAoBpG;;GAEG;AACH,wBAAgB,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAgF5D;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,EACpB,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EACrC,OAAO,CAAC,EAAE,yBAAyB,GAClC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAsBxB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAKlC;AAED;;;GAGG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAe9C;AAED;;GAEG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAU3C"}
1
+ {"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":"AAQA,OAAO,EAA2B,YAAY,EAAE,MAAM,eAAe,CAAC;AAEtE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,EAA4B,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAwBpG;;GAEG;AACH,wBAAgB,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,IAAI,CAmF5D;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,EACpB,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EACrC,OAAO,CAAC,EAAE,yBAAyB,GAClC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAsBxB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAKlC;AAED;;;GAGG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAe9C;AAED;;GAEG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAU3C;AAED;;GAEG;AACF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAEjE"}
package/dist/js/sdk.js CHANGED
@@ -2,7 +2,7 @@ import { __awaiter } from "tslib";
2
2
  import { getIntegrationsToSetup, initAndBind, setExtra } from '@sentry/core';
3
3
  import { Hub, makeMain } from '@sentry/hub';
4
4
  import { RewriteFrames } from '@sentry/integrations';
5
- import { defaultIntegrations, defaultStackParser, getCurrentHub } from '@sentry/react';
5
+ import { defaultIntegrations as reactDefaultIntegrations, defaultStackParser, getCurrentHub, } from '@sentry/react';
6
6
  import { getGlobalObject, logger, stackParserFromStackParserOptions } from '@sentry/utils';
7
7
  import * as React from 'react';
8
8
  import { ReactNativeClient } from './client';
@@ -11,6 +11,7 @@ import { ReactNativeScope } from './scope';
11
11
  import { TouchEventBoundary } from './touchevents';
12
12
  import { ReactNativeProfiler, ReactNativeTracing } from './tracing';
13
13
  import { makeReactNativeTransport } from './transports/native';
14
+ import { makeUtf8TextEncoder } from './transports/TextEncoder';
14
15
  const IGNORED_DEFAULT_INTEGRATIONS = [
15
16
  'GlobalHandlers',
16
17
  'TryCatch',
@@ -22,37 +23,37 @@ const DEFAULT_OPTIONS = {
22
23
  autoInitializeNativeSdk: true,
23
24
  enableAutoPerformanceTracking: true,
24
25
  enableOutOfMemoryTracking: true,
25
- patchGlobalPromise: true
26
+ patchGlobalPromise: true,
27
+ transportOptions: {
28
+ textEncoder: makeUtf8TextEncoder(),
29
+ },
26
30
  };
27
31
  /**
28
32
  * Inits the SDK and returns the final options.
29
33
  */
30
34
  export function init(passedOptions) {
35
+ var _a;
31
36
  const reactNativeHub = new Hub(undefined, new ReactNativeScope());
32
37
  makeMain(reactNativeHub);
33
- const options = Object.assign(Object.assign(Object.assign({}, DEFAULT_OPTIONS), passedOptions), { transport: passedOptions.transport || makeReactNativeTransport, integrations: getIntegrationsToSetup(passedOptions), stackParser: stackParserFromStackParserOptions(passedOptions.stackParser || defaultStackParser) });
34
- function addIntegration(integration) {
35
- if (options.integrations.filter((i) => i.name == integration.name).length === 0) {
36
- options.integrations.push(integration);
37
- }
38
- }
38
+ const options = Object.assign(Object.assign(Object.assign({}, DEFAULT_OPTIONS), passedOptions), { transport: passedOptions.transport || makeReactNativeTransport, transportOptions: Object.assign(Object.assign({}, DEFAULT_OPTIONS.transportOptions), ((_a = passedOptions.transportOptions) !== null && _a !== void 0 ? _a : {})), integrations: [], stackParser: stackParserFromStackParserOptions(passedOptions.stackParser || defaultStackParser) });
39
39
  // As long as tracing is opt in with either one of these options, then this is how we determine tracing is enabled.
40
40
  const tracingEnabled = typeof options.tracesSampler !== 'undefined' ||
41
41
  typeof options.tracesSampleRate !== 'undefined';
42
+ const defaultIntegrations = passedOptions.defaultIntegrations || [];
42
43
  if (passedOptions.defaultIntegrations === undefined) {
43
- addIntegration(new ReactNativeErrorHandlers({
44
+ defaultIntegrations.push(new ReactNativeErrorHandlers({
44
45
  patchGlobalPromise: options.patchGlobalPromise,
45
46
  }));
46
- addIntegration(new Release());
47
- options.integrations.push(...[
48
- ...defaultIntegrations.filter((i) => !IGNORED_DEFAULT_INTEGRATIONS.includes(i.name)),
47
+ defaultIntegrations.push(new Release());
48
+ defaultIntegrations.push(...[
49
+ ...reactDefaultIntegrations.filter((i) => !IGNORED_DEFAULT_INTEGRATIONS.includes(i.name)),
49
50
  ]);
50
- addIntegration(new EventOrigin());
51
- addIntegration(new SdkInfo());
51
+ defaultIntegrations.push(new EventOrigin());
52
+ defaultIntegrations.push(new SdkInfo());
52
53
  if (__DEV__) {
53
- addIntegration(new DebugSymbolicator());
54
+ defaultIntegrations.push(new DebugSymbolicator());
54
55
  }
55
- addIntegration(new RewriteFrames({
56
+ defaultIntegrations.push(new RewriteFrames({
56
57
  iteratee: (frame) => {
57
58
  if (frame.filename) {
58
59
  frame.filename = frame.filename
@@ -73,14 +74,18 @@ export function init(passedOptions) {
73
74
  },
74
75
  }));
75
76
  if (options.enableNative) {
76
- addIntegration(new DeviceContext());
77
+ defaultIntegrations.push(new DeviceContext());
77
78
  }
78
79
  if (tracingEnabled) {
79
80
  if (options.enableAutoPerformanceTracking) {
80
- addIntegration(new ReactNativeTracing());
81
+ defaultIntegrations.push(new ReactNativeTracing());
81
82
  }
82
83
  }
83
84
  }
85
+ options.integrations = getIntegrationsToSetup({
86
+ integrations: passedOptions.integrations,
87
+ defaultIntegrations,
88
+ });
84
89
  initAndBind(ReactNativeClient, options);
85
90
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-explicit-any
86
91
  if (getGlobalObject().HermesInternal) {
@@ -168,4 +173,11 @@ export function close() {
168
173
  }
169
174
  });
170
175
  }
176
+ /**
177
+ * Captures user feedback and sends it to Sentry.
178
+ */
179
+ export function captureUserFeedback(feedback) {
180
+ var _a;
181
+ (_a = getCurrentHub().getClient()) === null || _a === void 0 ? void 0 : _a.captureUserFeedback(feedback);
182
+ }
171
183
  //# sourceMappingURL=sdk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":"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","sourcesContent":["import { getIntegrationsToSetup, initAndBind, setExtra } from '@sentry/core';\nimport { Hub, makeMain } from '@sentry/hub';\nimport { RewriteFrames } from '@sentry/integrations';\nimport { defaultIntegrations, defaultStackParser, getCurrentHub } from '@sentry/react';\nimport { Integration, StackFrame } from '@sentry/types';\nimport { getGlobalObject, logger, stackParserFromStackParserOptions } from '@sentry/utils';\nimport * as React from 'react';\n\nimport { ReactNativeClient } from './client';\nimport {\n DebugSymbolicator,\n DeviceContext,\n EventOrigin,\n ReactNativeErrorHandlers,\n Release,\n SdkInfo,\n} from './integrations';\nimport { ReactNativeClientOptions, ReactNativeOptions, ReactNativeWrapperOptions } from './options';\nimport { ReactNativeScope } from './scope';\nimport { TouchEventBoundary } from './touchevents';\nimport { ReactNativeProfiler, ReactNativeTracing } from './tracing';\nimport { makeReactNativeTransport } from './transports/native';\n\nconst IGNORED_DEFAULT_INTEGRATIONS = [\n 'GlobalHandlers', // We will use the react-native internal handlers\n 'TryCatch', // We don't need this\n];\nconst DEFAULT_OPTIONS: ReactNativeOptions = {\n enableNative: true,\n enableNativeCrashHandling: true,\n enableNativeNagger: true,\n autoInitializeNativeSdk: true,\n enableAutoPerformanceTracking: true,\n enableOutOfMemoryTracking: true,\n patchGlobalPromise: true\n};\n\n/**\n * Inits the SDK and returns the final options.\n */\nexport function init(passedOptions: ReactNativeOptions): void {\n const reactNativeHub = new Hub(undefined, new ReactNativeScope());\n makeMain(reactNativeHub);\n\n const options: ReactNativeClientOptions = {\n ...DEFAULT_OPTIONS,\n ...passedOptions,\n transport: passedOptions.transport || makeReactNativeTransport,\n integrations: getIntegrationsToSetup(passedOptions),\n stackParser: stackParserFromStackParserOptions(passedOptions.stackParser || defaultStackParser)\n };\n\n function addIntegration(integration: Integration): void {\n if (options.integrations.filter((i) => i.name == integration.name).length === 0) {\n options.integrations.push(integration);\n }\n }\n\n // As long as tracing is opt in with either one of these options, then this is how we determine tracing is enabled.\n const tracingEnabled =\n typeof options.tracesSampler !== 'undefined' ||\n typeof options.tracesSampleRate !== 'undefined';\n\n if (passedOptions.defaultIntegrations === undefined) {\n addIntegration(new ReactNativeErrorHandlers({\n patchGlobalPromise: options.patchGlobalPromise,\n }));\n addIntegration(new Release());\n options.integrations.push(...[\n ...defaultIntegrations.filter(\n (i) => !IGNORED_DEFAULT_INTEGRATIONS.includes(i.name)\n ),\n ]);\n\n addIntegration(new EventOrigin());\n addIntegration(new SdkInfo());\n\n if (__DEV__) {\n addIntegration(new DebugSymbolicator());\n }\n\n addIntegration(new RewriteFrames({\n iteratee: (frame: StackFrame) => {\n if (frame.filename) {\n frame.filename = frame.filename\n .replace(/^file:\\/\\//, '')\n .replace(/^address at /, '')\n .replace(/^.*\\/[^.]+(\\.app|CodePush|.*(?=\\/))/, '');\n\n if (\n frame.filename !== '[native code]' &&\n frame.filename !== 'native'\n ) {\n const appPrefix = 'app://';\n // We always want to have a triple slash\n frame.filename =\n frame.filename.indexOf('/') === 0\n ? `${appPrefix}${frame.filename}`\n : `${appPrefix}/${frame.filename}`;\n }\n }\n return frame;\n },\n }));\n if (options.enableNative) {\n addIntegration(new DeviceContext());\n }\n if (tracingEnabled) {\n if (options.enableAutoPerformanceTracking) {\n addIntegration(new ReactNativeTracing());\n }\n }\n }\n\n initAndBind(ReactNativeClient, options);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-explicit-any\n if (getGlobalObject<any>().HermesInternal) {\n getCurrentHub().setTag('hermes', 'true');\n }\n}\n\n/**\n * Inits the Sentry React Native SDK with automatic instrumentation and wrapped features.\n */\nexport function wrap<P>(\n RootComponent: React.ComponentType<P>,\n options?: ReactNativeWrapperOptions\n): React.ComponentType<P> {\n const tracingIntegration = getCurrentHub().getIntegration(ReactNativeTracing);\n if (tracingIntegration) {\n tracingIntegration.useAppStartWithProfiler = true;\n }\n\n const profilerProps = {\n ...(options?.profilerProps ?? {}),\n name: RootComponent.displayName ?? 'Root',\n };\n\n const RootApp: React.FC<P> = (appProps) => {\n return (\n <TouchEventBoundary {...(options?.touchEventBoundaryProps ?? {})}>\n <ReactNativeProfiler {...profilerProps}>\n <RootComponent {...appProps} />\n </ReactNativeProfiler>\n </TouchEventBoundary>\n );\n };\n\n return RootApp;\n}\n\n/**\n * Deprecated. Sets the release on the event.\n * NOTE: Does not set the release on sessions.\n * @deprecated\n */\nexport function setRelease(release: string): void {\n setExtra('__sentry_release', release);\n}\n\n/**\n * Deprecated. Sets the dist on the event.\n * NOTE: Does not set the dist on sessions.\n * @deprecated\n */\nexport function setDist(dist: string): void {\n setExtra('__sentry_dist', dist);\n}\n\n/**\n * If native client is available it will trigger a native crash.\n * Use this only for testing purposes.\n */\nexport function nativeCrash(): void {\n const client = getCurrentHub().getClient<ReactNativeClient>();\n if (client) {\n client.nativeCrash();\n }\n}\n\n/**\n * Flushes all pending events in the queue to disk.\n * Use this before applying any realtime updates such as code-push or expo updates.\n */\nexport async function flush(): Promise<boolean> {\n try {\n const client = getCurrentHub().getClient<ReactNativeClient>();\n\n if (client) {\n const result = await client.flush();\n\n return result;\n }\n // eslint-disable-next-line no-empty\n } catch (_) { }\n\n logger.error('Failed to flush the event queue.');\n\n return false;\n}\n\n/**\n * Closes the SDK, stops sending events.\n */\nexport async function close(): Promise<void> {\n try {\n const client = getCurrentHub().getClient<ReactNativeClient>();\n\n if (client) {\n await client.close();\n }\n } catch (e) {\n logger.error('Failed to close the SDK');\n }\n}\n"]}
1
+ {"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/js/sdk.tsx"],"names":[],"mappings":"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","sourcesContent":["import { getIntegrationsToSetup, initAndBind, setExtra } from '@sentry/core';\nimport { Hub, makeMain } from '@sentry/hub';\nimport { RewriteFrames } from '@sentry/integrations';\nimport {\n defaultIntegrations as reactDefaultIntegrations,\n defaultStackParser,\n getCurrentHub,\n} from '@sentry/react';\nimport { Integration, StackFrame, UserFeedback } from '@sentry/types';\nimport { getGlobalObject, logger, stackParserFromStackParserOptions } from '@sentry/utils';\nimport * as React from 'react';\n\nimport { ReactNativeClient } from './client';\nimport {\n DebugSymbolicator,\n DeviceContext,\n EventOrigin,\n ReactNativeErrorHandlers,\n Release,\n SdkInfo,\n} from './integrations';\nimport { ReactNativeClientOptions, ReactNativeOptions, ReactNativeWrapperOptions } from './options';\nimport { ReactNativeScope } from './scope';\nimport { TouchEventBoundary } from './touchevents';\nimport { ReactNativeProfiler, ReactNativeTracing } from './tracing';\nimport { makeReactNativeTransport } from './transports/native';\nimport { makeUtf8TextEncoder } from './transports/TextEncoder';\n\nconst IGNORED_DEFAULT_INTEGRATIONS = [\n 'GlobalHandlers', // We will use the react-native internal handlers\n 'TryCatch', // We don't need this\n];\nconst DEFAULT_OPTIONS: ReactNativeOptions = {\n enableNative: true,\n enableNativeCrashHandling: true,\n enableNativeNagger: true,\n autoInitializeNativeSdk: true,\n enableAutoPerformanceTracking: true,\n enableOutOfMemoryTracking: true,\n patchGlobalPromise: true,\n transportOptions: {\n textEncoder: makeUtf8TextEncoder(),\n },\n};\n\n/**\n * Inits the SDK and returns the final options.\n */\nexport function init(passedOptions: ReactNativeOptions): void {\n const reactNativeHub = new Hub(undefined, new ReactNativeScope());\n makeMain(reactNativeHub);\n\n const options: ReactNativeClientOptions = {\n ...DEFAULT_OPTIONS,\n ...passedOptions,\n transport: passedOptions.transport || makeReactNativeTransport,\n transportOptions: {\n ...DEFAULT_OPTIONS.transportOptions,\n ...(passedOptions.transportOptions ?? {}),\n },\n integrations: [],\n stackParser: stackParserFromStackParserOptions(passedOptions.stackParser || defaultStackParser)\n };\n\n // As long as tracing is opt in with either one of these options, then this is how we determine tracing is enabled.\n const tracingEnabled =\n typeof options.tracesSampler !== 'undefined' ||\n typeof options.tracesSampleRate !== 'undefined';\n\n const defaultIntegrations: Integration[] = passedOptions.defaultIntegrations || [];\n if (passedOptions.defaultIntegrations === undefined) {\n defaultIntegrations.push(new ReactNativeErrorHandlers({\n patchGlobalPromise: options.patchGlobalPromise,\n }));\n defaultIntegrations.push(new Release());\n defaultIntegrations.push(...[\n ...reactDefaultIntegrations.filter(\n (i) => !IGNORED_DEFAULT_INTEGRATIONS.includes(i.name)\n ),\n ]);\n\n defaultIntegrations.push(new EventOrigin());\n defaultIntegrations.push(new SdkInfo());\n\n if (__DEV__) {\n defaultIntegrations.push(new DebugSymbolicator());\n }\n\n defaultIntegrations.push(new RewriteFrames({\n iteratee: (frame: StackFrame) => {\n if (frame.filename) {\n frame.filename = frame.filename\n .replace(/^file:\\/\\//, '')\n .replace(/^address at /, '')\n .replace(/^.*\\/[^.]+(\\.app|CodePush|.*(?=\\/))/, '');\n\n if (\n frame.filename !== '[native code]' &&\n frame.filename !== 'native'\n ) {\n const appPrefix = 'app://';\n // We always want to have a triple slash\n frame.filename =\n frame.filename.indexOf('/') === 0\n ? `${appPrefix}${frame.filename}`\n : `${appPrefix}/${frame.filename}`;\n }\n }\n return frame;\n },\n }));\n if (options.enableNative) {\n defaultIntegrations.push(new DeviceContext());\n }\n if (tracingEnabled) {\n if (options.enableAutoPerformanceTracking) {\n defaultIntegrations.push(new ReactNativeTracing());\n }\n }\n }\n\n options.integrations = getIntegrationsToSetup({\n integrations: passedOptions.integrations,\n defaultIntegrations,\n });\n initAndBind(ReactNativeClient, options);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-explicit-any\n if (getGlobalObject<any>().HermesInternal) {\n getCurrentHub().setTag('hermes', 'true');\n }\n}\n\n/**\n * Inits the Sentry React Native SDK with automatic instrumentation and wrapped features.\n */\nexport function wrap<P>(\n RootComponent: React.ComponentType<P>,\n options?: ReactNativeWrapperOptions\n): React.ComponentType<P> {\n const tracingIntegration = getCurrentHub().getIntegration(ReactNativeTracing);\n if (tracingIntegration) {\n tracingIntegration.useAppStartWithProfiler = true;\n }\n\n const profilerProps = {\n ...(options?.profilerProps ?? {}),\n name: RootComponent.displayName ?? 'Root',\n };\n\n const RootApp: React.FC<P> = (appProps) => {\n return (\n <TouchEventBoundary {...(options?.touchEventBoundaryProps ?? {})}>\n <ReactNativeProfiler {...profilerProps}>\n <RootComponent {...appProps} />\n </ReactNativeProfiler>\n </TouchEventBoundary>\n );\n };\n\n return RootApp;\n}\n\n/**\n * Deprecated. Sets the release on the event.\n * NOTE: Does not set the release on sessions.\n * @deprecated\n */\nexport function setRelease(release: string): void {\n setExtra('__sentry_release', release);\n}\n\n/**\n * Deprecated. Sets the dist on the event.\n * NOTE: Does not set the dist on sessions.\n * @deprecated\n */\nexport function setDist(dist: string): void {\n setExtra('__sentry_dist', dist);\n}\n\n/**\n * If native client is available it will trigger a native crash.\n * Use this only for testing purposes.\n */\nexport function nativeCrash(): void {\n const client = getCurrentHub().getClient<ReactNativeClient>();\n if (client) {\n client.nativeCrash();\n }\n}\n\n/**\n * Flushes all pending events in the queue to disk.\n * Use this before applying any realtime updates such as code-push or expo updates.\n */\nexport async function flush(): Promise<boolean> {\n try {\n const client = getCurrentHub().getClient<ReactNativeClient>();\n\n if (client) {\n const result = await client.flush();\n\n return result;\n }\n // eslint-disable-next-line no-empty\n } catch (_) { }\n\n logger.error('Failed to flush the event queue.');\n\n return false;\n}\n\n/**\n * Closes the SDK, stops sending events.\n */\nexport async function close(): Promise<void> {\n try {\n const client = getCurrentHub().getClient<ReactNativeClient>();\n\n if (client) {\n await client.close();\n }\n } catch (e) {\n logger.error('Failed to close the SDK');\n }\n}\n\n/**\n * Captures user feedback and sends it to Sentry.\n */\n export function captureUserFeedback(feedback: UserFeedback): void {\n getCurrentHub().getClient<ReactNativeClient>()?.captureUserFeedback(feedback);\n}\n"]}
@@ -6,6 +6,14 @@ import { NativeFramesInstrumentation } from './nativeframes';
6
6
  import { StallTrackingInstrumentation } from './stalltracking';
7
7
  import { BeforeNavigate } from './types';
8
8
  export interface ReactNativeTracingOptions extends RequestInstrumentationOptions {
9
+ /**
10
+ * @deprecated Replaced by idleTimeoutMs
11
+ */
12
+ idleTimeout: number;
13
+ /**
14
+ * @deprecated Replaced by maxTransactionDurationMs
15
+ */
16
+ maxTransactionDuration: number;
9
17
  /**
10
18
  * The time to wait in ms until the transaction will be finished. The transaction will use the end timestamp of
11
19
  * the last finished span as the endtime for the transaction.
@@ -13,15 +21,16 @@ export interface ReactNativeTracingOptions extends RequestInstrumentationOptions
13
21
  *
14
22
  * Default: 1000
15
23
  */
16
- idleTimeout: number;
24
+ idleTimeoutMs: number;
17
25
  /**
18
- * The maximum duration of a transaction before it will be marked as "deadline_exceeded".
26
+ * The maximum duration (transaction duration + idle timeout) of a transaction
27
+ * before it will be marked as "deadline_exceeded".
19
28
  * If you never want to mark a transaction set it to 0.
20
- * Time is in seconds.
29
+ * Time is in ms.
21
30
  *
22
- * Default: 600
31
+ * Default: 600000
23
32
  */
24
- maxTransactionDuration: number;
33
+ finalTimeoutMs: number;
25
34
  /**
26
35
  * The routing instrumentation to be used with the tracing integration.
27
36
  * There is no routing instrumentation if nothing is passed.
@@ -1 +1 @@
1
- {"version":3,"file":"reactnativetracing.d.ts","sourceRoot":"","sources":["../../../src/js/tracing/reactnativetracing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAIL,6BAA6B,EAE7B,WAAW,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,cAAc,EACd,WAAW,EAGZ,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;AAEnF,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAA0B,MAAM,SAAS,CAAC;AAOjE,MAAM,WAAW,yBACf,SAAQ,6BAA6B;IACrC;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;;;OAMG;IACH,sBAAsB,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,sBAAsB,CAAC,EAAE,8BAA8B,CAAC;IAExD;;;;;OAKG;IACH,qCAAqC,EAAE,OAAO,CAAC;IAE/C;;;;;;;OAOG;IACH,cAAc,EAAE,cAAc,CAAC;IAE/B;;;;;OAKG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,0BAA0B,EAAE,OAAO,CAAC;IAEpC;;OAEG;IACH,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAaD;;GAEG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IACpD;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAwB;IAC/C,6CAA6C;IAC9C,OAAO,CAAC,MAAM,CAAC,YAAY,CAAiB;IAC5C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAyB;IAE5C,iCAAiC;IAC1B,OAAO,EAAE,yBAAyB,CAAC;IAEnC,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,4BAA4B,CAAC,EAAE,4BAA4B,CAAC;IAC5D,uBAAuB,EAAE,OAAO,CAAS;IAEhD,OAAO,CAAC,cAAc,CAAC,CAAY;IACnC,OAAO,CAAC,qBAAqB,CAAC,CAAyB;IACvD,OAAO,CAAC,wBAAwB,CAAC,CAAS;gBAEvB,OAAO,GAAE,OAAO,CAAC,yBAAyB,CAAM;IAOnE;;OAEG;IACI,SAAS,CAEd,uBAAuB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,EAC3D,aAAa,EAAE,MAAM,GAAG,GACvB,IAAI;IA6DP;;OAEG;IACI,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQzD;;OAEG;IACI,mBAAmB,CACxB,WAAW,EAAE,WAAW,EACxB,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI;IAQP;;OAEG;IACI,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAInD;;;OAGG;YACW,mBAAmB;IAgCjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgCxB,6FAA6F;IAC7F,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB,uCAAuC;IACvC,OAAO,CAAC,uBAAuB;CAkFhC"}
1
+ {"version":3,"file":"reactnativetracing.d.ts","sourceRoot":"","sources":["../../../src/js/tracing/reactnativetracing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAIL,6BAA6B,EAE7B,WAAW,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,cAAc,EACd,WAAW,EAGZ,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;AAEnF,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAA0B,MAAM,SAAS,CAAC;AAOjE,MAAM,WAAW,yBACf,SAAQ,6BAA6B;IACrC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,sBAAsB,EAAE,MAAM,CAAC;IAE/B;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;;;;;OAOG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,8BAA8B,CAAC;IAExD;;;;;OAKG;IACH,qCAAqC,EAAE,OAAO,CAAC;IAE/C;;;;;;;OAOG;IACH,cAAc,EAAE,cAAc,CAAC;IAE/B;;;;;OAKG;IACH,sBAAsB,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,0BAA0B,EAAE,OAAO,CAAC;IAEpC;;OAEG;IACH,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAeD;;GAEG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IACpD;;OAEG;IACH,OAAc,EAAE,EAAE,MAAM,CAAwB;IAC/C,6CAA6C;IAC9C,OAAO,CAAC,MAAM,CAAC,YAAY,CAAiB;IAC5C;;OAEG;IACI,IAAI,EAAE,MAAM,CAAyB;IAE5C,iCAAiC;IAC1B,OAAO,EAAE,yBAAyB,CAAC;IAEnC,2BAA2B,CAAC,EAAE,2BAA2B,CAAC;IAC1D,4BAA4B,CAAC,EAAE,4BAA4B,CAAC;IAC5D,uBAAuB,EAAE,OAAO,CAAS;IAEhD,OAAO,CAAC,cAAc,CAAC,CAAY;IACnC,OAAO,CAAC,qBAAqB,CAAC,CAAyB;IACvD,OAAO,CAAC,wBAAwB,CAAC,CAAS;gBAEvB,OAAO,GAAE,OAAO,CAAC,yBAAyB,CAAM;IAkBnE;;OAEG;IACI,SAAS,CAEd,uBAAuB,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,EAC3D,aAAa,EAAE,MAAM,GAAG,GACvB,IAAI;IA6DP;;OAEG;IACI,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQzD;;OAEG;IACI,mBAAmB,CACxB,WAAW,EAAE,WAAW,EACxB,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI;IAQP;;OAEG;IACI,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAInD;;;OAGG;YACW,mBAAmB;IAgCjC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgCxB,6FAA6F;IAC7F,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB,uCAAuC;IACvC,OAAO,CAAC,uBAAuB;CAkFhC"}
@@ -5,18 +5,22 @@ import { NATIVE } from '../wrapper';
5
5
  import { NativeFramesInstrumentation } from './nativeframes';
6
6
  import { StallTrackingInstrumentation } from './stalltracking';
7
7
  import { adjustTransactionDuration, getTimeOriginMilliseconds, isNearToNow, } from './utils';
8
- const defaultReactNativeTracingOptions = Object.assign(Object.assign({}, defaultRequestInstrumentationOptions), { idleTimeout: 1000, maxTransactionDuration: 600, ignoreEmptyBackNavigationTransactions: true, beforeNavigate: (context) => context, enableAppStartTracking: true, enableNativeFramesTracking: true, enableStallTracking: true });
8
+ const defaultReactNativeTracingOptions = Object.assign(Object.assign({}, defaultRequestInstrumentationOptions), { idleTimeout: 1000, maxTransactionDuration: 600, idleTimeoutMs: 1000, finalTimeoutMs: 600000, ignoreEmptyBackNavigationTransactions: true, beforeNavigate: (context) => context, enableAppStartTracking: true, enableNativeFramesTracking: true, enableStallTracking: true });
9
9
  /**
10
10
  * Tracing integration for React Native.
11
11
  */
12
12
  export class ReactNativeTracing {
13
13
  constructor(options = {}) {
14
+ var _a, _b, _c, _d;
14
15
  /**
15
16
  * @inheritDoc
16
17
  */
17
18
  this.name = ReactNativeTracing.id;
18
19
  this.useAppStartWithProfiler = false;
19
- this.options = Object.assign(Object.assign({}, defaultReactNativeTracingOptions), options);
20
+ this.options = Object.assign(Object.assign(Object.assign({}, defaultReactNativeTracingOptions), options), { finalTimeoutMs: (_b = (_a = options.finalTimeoutMs) !== null && _a !== void 0 ? _a : (typeof options.maxTransactionDuration === 'number'
21
+ // eslint-disable-next-line deprecation/deprecation
22
+ ? options.maxTransactionDuration * 1000
23
+ : undefined)) !== null && _b !== void 0 ? _b : defaultReactNativeTracingOptions.finalTimeoutMs, idleTimeoutMs: (_d = (_c = options.idleTimeoutMs) !== null && _c !== void 0 ? _c : options.idleTimeout) !== null && _d !== void 0 ? _d : defaultReactNativeTracingOptions.idleTimeoutMs });
20
24
  }
21
25
  /**
22
26
  * Registers routing and request instrumentation.
@@ -126,7 +130,7 @@ export class ReactNativeTracing {
126
130
  return;
127
131
  }
128
132
  const appStartTimeSeconds = appStart.appStartTime / 1000;
129
- const appStartMode = appStart.isColdStart ? 'app_start_cold' : 'app_start_warm';
133
+ const appStartMode = appStart.isColdStart ? 'app.start.cold' : 'app.start.warm';
130
134
  transaction.startChild({
131
135
  description: appStart.isColdStart ? 'Cold App Start' : 'Warm App Start',
132
136
  op: appStartMode,
@@ -176,10 +180,10 @@ export class ReactNativeTracing {
176
180
  return undefined;
177
181
  }
178
182
  // eslint-disable-next-line @typescript-eslint/unbound-method
179
- const { idleTimeout, maxTransactionDuration } = this.options;
183
+ const { idleTimeoutMs, finalTimeoutMs } = this.options;
180
184
  const expandedContext = Object.assign(Object.assign({}, context), { trimEnd: true });
181
185
  const hub = this._getCurrentHub();
182
- const idleTransaction = startIdleTransaction(hub, expandedContext, idleTimeout, maxTransactionDuration, true);
186
+ const idleTransaction = startIdleTransaction(hub, expandedContext, idleTimeoutMs, finalTimeoutMs, true);
183
187
  this.onTransactionStart(idleTransaction);
184
188
  logger.log(`[ReactNativeTracing] Starting ${context.op} transaction "${context.name}" on scope`);
185
189
  idleTransaction.registerBeforeFinishCallback((transaction, endTimestamp) => {
@@ -195,7 +199,7 @@ export class ReactNativeTracing {
195
199
  }
196
200
  });
197
201
  idleTransaction.registerBeforeFinishCallback((transaction, endTimestamp) => {
198
- adjustTransactionDuration(maxTransactionDuration, transaction, endTimestamp);
202
+ adjustTransactionDuration(finalTimeoutMs, transaction, endTimestamp);
199
203
  });
200
204
  if (this.options.ignoreEmptyBackNavigationTransactions) {
201
205
  idleTransaction.registerBeforeFinishCallback((transaction) => {
@@ -1 +1 @@
1
- {"version":3,"file":"reactnativetracing.js","sourceRoot":"","sources":["../../../src/js/tracing/reactnativetracing.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\nimport { Hub } from '@sentry/hub';\nimport {\n defaultRequestInstrumentationOptions,\n IdleTransaction,\n instrumentOutgoingRequests,\n RequestInstrumentationOptions,\n startIdleTransaction,\n Transaction,\n} from '@sentry/tracing';\nimport {\n EventProcessor,\n Integration,\n Transaction as TransactionType,\n TransactionContext,\n} from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { NativeAppStartResponse } from '../definitions';\nimport { RoutingInstrumentationInstance } from '../tracing/routingInstrumentation';\nimport { NATIVE } from '../wrapper';\nimport { NativeFramesInstrumentation } from './nativeframes';\nimport { StallTrackingInstrumentation } from './stalltracking';\nimport { BeforeNavigate, RouteChangeContextData } from './types';\nimport {\n adjustTransactionDuration,\n getTimeOriginMilliseconds,\n isNearToNow,\n} from './utils';\n\nexport interface ReactNativeTracingOptions\n extends RequestInstrumentationOptions {\n /**\n * The time to wait in ms until the transaction will be finished. The transaction will use the end timestamp of\n * the last finished span as the endtime for the transaction.\n * Time is in ms.\n *\n * Default: 1000\n */\n idleTimeout: number;\n\n /**\n * The maximum duration of a transaction before it will be marked as \"deadline_exceeded\".\n * If you never want to mark a transaction set it to 0.\n * Time is in seconds.\n *\n * Default: 600\n */\n maxTransactionDuration: number;\n\n /**\n * The routing instrumentation to be used with the tracing integration.\n * There is no routing instrumentation if nothing is passed.\n */\n routingInstrumentation?: RoutingInstrumentationInstance;\n\n /**\n * Does not sample transactions that are from routes that have been seen any more and don't have any spans.\n * This removes a lot of the clutter as most back navigation transactions are now ignored.\n *\n * Default: true\n */\n ignoreEmptyBackNavigationTransactions: boolean;\n\n /**\n * beforeNavigate is called before a navigation transaction is created and allows users to modify transaction\n * context data, or drop the transaction entirely (by setting `sampled = false` in the context).\n *\n * @param context: The context data which will be passed to `startTransaction` by default\n *\n * @returns A (potentially) modified context object, with `sampled = false` if the transaction should be dropped.\n */\n beforeNavigate: BeforeNavigate;\n\n /**\n * Track the app start time by adding measurements to the first route transaction. If there is no routing instrumentation\n * an app start transaction will be started.\n *\n * Default: true\n */\n enableAppStartTracking: boolean;\n\n /**\n * Track slow/frozen frames from the native layer and adds them as measurements to all transactions.\n */\n enableNativeFramesTracking: boolean;\n\n /**\n * Track when and how long the JS event loop stalls for. Adds stalls as measurements to all transactions.\n */\n enableStallTracking: boolean;\n}\n\nconst defaultReactNativeTracingOptions: ReactNativeTracingOptions = {\n ...defaultRequestInstrumentationOptions,\n idleTimeout: 1000,\n maxTransactionDuration: 600,\n ignoreEmptyBackNavigationTransactions: true,\n beforeNavigate: (context) => context,\n enableAppStartTracking: true,\n enableNativeFramesTracking: true,\n enableStallTracking: true,\n};\n\n/**\n * Tracing integration for React Native.\n */\nexport class ReactNativeTracing implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'ReactNativeTracing';\n /** We filter out App starts more than 60s */\n private static _maxAppStart: number = 60000;\n /**\n * @inheritDoc\n */\n public name: string = ReactNativeTracing.id;\n\n /** ReactNativeTracing options */\n public options: ReactNativeTracingOptions;\n\n public nativeFramesInstrumentation?: NativeFramesInstrumentation;\n public stallTrackingInstrumentation?: StallTrackingInstrumentation;\n public useAppStartWithProfiler: boolean = false;\n\n private _getCurrentHub?: () => Hub;\n private _awaitingAppStartData?: NativeAppStartResponse;\n private _appStartFinishTimestamp?: number;\n\n public constructor(options: Partial<ReactNativeTracingOptions> = {}) {\n this.options = {\n ...defaultReactNativeTracingOptions,\n ...options,\n };\n }\n\n /**\n * Registers routing and request instrumentation.\n */\n public setupOnce(\n // @ts-ignore TODO\n addGlobalEventProcessor: (callback: EventProcessor) => void,\n getCurrentHub: () => Hub\n ): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const {\n traceFetch,\n traceXHR,\n tracingOrigins,\n // @ts-ignore TODO\n shouldCreateSpanForRequest,\n routingInstrumentation,\n enableAppStartTracking,\n enableNativeFramesTracking,\n enableStallTracking,\n } = this.options;\n\n this._getCurrentHub = getCurrentHub;\n\n if (enableAppStartTracking) {\n void this._instrumentAppStart();\n }\n\n if (enableNativeFramesTracking) {\n this.nativeFramesInstrumentation = new NativeFramesInstrumentation(\n addGlobalEventProcessor,\n () => {\n const self = getCurrentHub().getIntegration(ReactNativeTracing);\n\n if (self) {\n return !!self.nativeFramesInstrumentation;\n }\n\n return false;\n }\n );\n } else {\n NATIVE.disableNativeFramesTracking();\n }\n\n if (enableStallTracking) {\n this.stallTrackingInstrumentation = new StallTrackingInstrumentation();\n }\n\n if (routingInstrumentation) {\n routingInstrumentation.registerRoutingInstrumentation(\n this._onRouteWillChange.bind(this),\n this.options.beforeNavigate,\n this._onConfirmRoute.bind(this)\n );\n } else {\n logger.log(\n '[ReactNativeTracing] Not instrumenting route changes as routingInstrumentation has not been set.'\n );\n }\n\n instrumentOutgoingRequests({\n traceFetch,\n traceXHR,\n tracingOrigins,\n shouldCreateSpanForRequest,\n });\n }\n\n /**\n * To be called on a transaction start. Can have async methods\n */\n public onTransactionStart(transaction: Transaction): void {\n if (isNearToNow(transaction.startTimestamp)) {\n // Only if this method is called at or within margin of error to the start timestamp.\n this.nativeFramesInstrumentation?.onTransactionStart(transaction);\n this.stallTrackingInstrumentation?.onTransactionStart(transaction);\n }\n }\n\n /**\n * To be called on a transaction finish. Cannot have async methods.\n */\n public onTransactionFinish(\n transaction: Transaction,\n endTimestamp?: number\n ): void {\n this.nativeFramesInstrumentation?.onTransactionFinish(transaction);\n this.stallTrackingInstrumentation?.onTransactionFinish(\n transaction,\n endTimestamp\n );\n }\n\n /**\n * Called by the ReactNativeProfiler component on first component mount.\n */\n public onAppStartFinish(endTimestamp: number): void {\n this._appStartFinishTimestamp = endTimestamp;\n }\n\n /**\n * Instruments the app start measurements on the first route transaction.\n * Starts a route transaction if there isn't routing instrumentation.\n */\n private async _instrumentAppStart(): Promise<void> {\n if (!this.options.enableAppStartTracking || !NATIVE.enableNative) {\n return;\n }\n\n const appStart = await NATIVE.fetchNativeAppStart();\n\n if (!appStart || appStart.didFetchAppStart) {\n return;\n }\n\n if (!this.useAppStartWithProfiler) {\n this._appStartFinishTimestamp = getTimeOriginMilliseconds() / 1000;\n }\n\n if (this.options.routingInstrumentation) {\n this._awaitingAppStartData = appStart;\n } else {\n const appStartTimeSeconds = appStart.appStartTime / 1000;\n\n const idleTransaction = this._createRouteTransaction({\n name: 'App Start',\n op: 'ui.load',\n startTimestamp: appStartTimeSeconds,\n });\n\n if (idleTransaction) {\n this._addAppStartData(idleTransaction, appStart);\n }\n }\n }\n\n /**\n * Adds app start measurements and starts a child span on a transaction.\n */\n private _addAppStartData(\n transaction: IdleTransaction,\n appStart: NativeAppStartResponse\n ): void {\n if (!this._appStartFinishTimestamp) {\n logger.warn('App start was never finished.');\n return;\n }\n\n const appStartTimeSeconds = appStart.appStartTime / 1000;\n\n const appStartMode = appStart.isColdStart ? 'app_start_cold' : 'app_start_warm';\n transaction.startChild({\n description: appStart.isColdStart ? 'Cold App Start' : 'Warm App Start',\n op: appStartMode,\n startTimestamp: appStartTimeSeconds,\n endTimestamp: this._appStartFinishTimestamp,\n });\n\n const appStartDurationMilliseconds =\n this._appStartFinishTimestamp * 1000 - appStart.appStartTime;\n\n // we filter out app start more than 60s.\n // this could be due to many different reasons.\n // we've seen app starts with hours, days and even months.\n if (appStartDurationMilliseconds >= ReactNativeTracing._maxAppStart) {\n return;\n }\n\n transaction.setMeasurement(appStartMode, appStartDurationMilliseconds, 'millisecond');\n }\n\n /** To be called when the route changes, but BEFORE the components of the new route mount. */\n private _onRouteWillChange(\n context: TransactionContext\n ): TransactionType | undefined {\n return this._createRouteTransaction(context);\n }\n\n /**\n * Creates a breadcrumb and sets the current route as a tag.\n */\n private _onConfirmRoute(context: TransactionContext): void {\n this._getCurrentHub?.().configureScope((scope) => {\n if (context.data) {\n const contextData = context.data as RouteChangeContextData;\n\n scope.addBreadcrumb({\n category: 'navigation',\n type: 'navigation',\n // We assume that context.name is the name of the route.\n message: `Navigation to ${context.name}`,\n data: {\n from: contextData.previousRoute?.name,\n to: contextData.route.name,\n },\n });\n }\n\n scope.setTag('routing.route.name', context.name);\n });\n }\n\n /** Create routing idle transaction. */\n private _createRouteTransaction(\n context: TransactionContext\n ): IdleTransaction | undefined {\n if (!this._getCurrentHub) {\n logger.warn(\n `[ReactNativeTracing] Did not create ${context.op} transaction because _getCurrentHub is invalid.`\n );\n return undefined;\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const { idleTimeout, maxTransactionDuration } = this.options;\n\n const expandedContext = {\n ...context,\n trimEnd: true,\n };\n\n const hub = this._getCurrentHub();\n const idleTransaction = startIdleTransaction(\n hub as Hub,\n expandedContext,\n idleTimeout,\n maxTransactionDuration,\n true\n );\n\n this.onTransactionStart(idleTransaction);\n\n logger.log(\n `[ReactNativeTracing] Starting ${context.op} transaction \"${context.name}\" on scope`\n );\n\n idleTransaction.registerBeforeFinishCallback(\n (transaction, endTimestamp) => {\n this.onTransactionFinish(transaction, endTimestamp);\n }\n );\n\n idleTransaction.registerBeforeFinishCallback((transaction) => {\n if (this.options.enableAppStartTracking && this._awaitingAppStartData) {\n transaction.startTimestamp =\n this._awaitingAppStartData.appStartTime / 1000;\n transaction.op = 'ui.load';\n\n this._addAppStartData(transaction, this._awaitingAppStartData);\n\n this._awaitingAppStartData = undefined;\n }\n });\n\n idleTransaction.registerBeforeFinishCallback(\n (transaction, endTimestamp) => {\n adjustTransactionDuration(\n maxTransactionDuration,\n transaction,\n endTimestamp\n );\n }\n );\n\n if (this.options.ignoreEmptyBackNavigationTransactions) {\n idleTransaction.registerBeforeFinishCallback((transaction) => {\n if (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n transaction.data?.route?.hasBeenSeen &&\n (!transaction.spanRecorder ||\n transaction.spanRecorder.spans.filter(\n (span) => span.spanId !== transaction.spanId\n ).length === 0)\n ) {\n logger.log(\n '[ReactNativeTracing] Not sampling transaction as route has been seen before. Pass ignoreEmptyBackNavigationTransactions = false to disable this feature.'\n );\n // Route has been seen before and has no child spans.\n transaction.sampled = false;\n }\n });\n }\n\n return idleTransaction;\n }\n}\n"]}
1
+ {"version":3,"file":"reactnativetracing.js","sourceRoot":"","sources":["../../../src/js/tracing/reactnativetracing.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\nimport { Hub } from '@sentry/hub';\nimport {\n defaultRequestInstrumentationOptions,\n IdleTransaction,\n instrumentOutgoingRequests,\n RequestInstrumentationOptions,\n startIdleTransaction,\n Transaction,\n} from '@sentry/tracing';\nimport {\n EventProcessor,\n Integration,\n Transaction as TransactionType,\n TransactionContext,\n} from '@sentry/types';\nimport { logger } from '@sentry/utils';\n\nimport { NativeAppStartResponse } from '../definitions';\nimport { RoutingInstrumentationInstance } from '../tracing/routingInstrumentation';\nimport { NATIVE } from '../wrapper';\nimport { NativeFramesInstrumentation } from './nativeframes';\nimport { StallTrackingInstrumentation } from './stalltracking';\nimport { BeforeNavigate, RouteChangeContextData } from './types';\nimport {\n adjustTransactionDuration,\n getTimeOriginMilliseconds,\n isNearToNow,\n} from './utils';\n\nexport interface ReactNativeTracingOptions\n extends RequestInstrumentationOptions {\n /**\n * @deprecated Replaced by idleTimeoutMs\n */\n idleTimeout: number;\n\n /**\n * @deprecated Replaced by maxTransactionDurationMs\n */\n maxTransactionDuration: number;\n\n /**\n * The time to wait in ms until the transaction will be finished. The transaction will use the end timestamp of\n * the last finished span as the endtime for the transaction.\n * Time is in ms.\n *\n * Default: 1000\n */\n idleTimeoutMs: number;\n\n /**\n * The maximum duration (transaction duration + idle timeout) of a transaction\n * before it will be marked as \"deadline_exceeded\".\n * If you never want to mark a transaction set it to 0.\n * Time is in ms.\n *\n * Default: 600000\n */\n finalTimeoutMs: number;\n\n /**\n * The routing instrumentation to be used with the tracing integration.\n * There is no routing instrumentation if nothing is passed.\n */\n routingInstrumentation?: RoutingInstrumentationInstance;\n\n /**\n * Does not sample transactions that are from routes that have been seen any more and don't have any spans.\n * This removes a lot of the clutter as most back navigation transactions are now ignored.\n *\n * Default: true\n */\n ignoreEmptyBackNavigationTransactions: boolean;\n\n /**\n * beforeNavigate is called before a navigation transaction is created and allows users to modify transaction\n * context data, or drop the transaction entirely (by setting `sampled = false` in the context).\n *\n * @param context: The context data which will be passed to `startTransaction` by default\n *\n * @returns A (potentially) modified context object, with `sampled = false` if the transaction should be dropped.\n */\n beforeNavigate: BeforeNavigate;\n\n /**\n * Track the app start time by adding measurements to the first route transaction. If there is no routing instrumentation\n * an app start transaction will be started.\n *\n * Default: true\n */\n enableAppStartTracking: boolean;\n\n /**\n * Track slow/frozen frames from the native layer and adds them as measurements to all transactions.\n */\n enableNativeFramesTracking: boolean;\n\n /**\n * Track when and how long the JS event loop stalls for. Adds stalls as measurements to all transactions.\n */\n enableStallTracking: boolean;\n}\n\nconst defaultReactNativeTracingOptions: ReactNativeTracingOptions = {\n ...defaultRequestInstrumentationOptions,\n idleTimeout: 1000,\n maxTransactionDuration: 600,\n idleTimeoutMs: 1000,\n finalTimeoutMs: 600000,\n ignoreEmptyBackNavigationTransactions: true,\n beforeNavigate: (context) => context,\n enableAppStartTracking: true,\n enableNativeFramesTracking: true,\n enableStallTracking: true,\n};\n\n/**\n * Tracing integration for React Native.\n */\nexport class ReactNativeTracing implements Integration {\n /**\n * @inheritDoc\n */\n public static id: string = 'ReactNativeTracing';\n /** We filter out App starts more than 60s */\n private static _maxAppStart: number = 60000;\n /**\n * @inheritDoc\n */\n public name: string = ReactNativeTracing.id;\n\n /** ReactNativeTracing options */\n public options: ReactNativeTracingOptions;\n\n public nativeFramesInstrumentation?: NativeFramesInstrumentation;\n public stallTrackingInstrumentation?: StallTrackingInstrumentation;\n public useAppStartWithProfiler: boolean = false;\n\n private _getCurrentHub?: () => Hub;\n private _awaitingAppStartData?: NativeAppStartResponse;\n private _appStartFinishTimestamp?: number;\n\n public constructor(options: Partial<ReactNativeTracingOptions> = {}) {\n this.options = {\n ...defaultReactNativeTracingOptions,\n ...options,\n finalTimeoutMs: options.finalTimeoutMs\n // eslint-disable-next-line deprecation/deprecation\n ?? (typeof options.maxTransactionDuration === 'number'\n // eslint-disable-next-line deprecation/deprecation\n ? options.maxTransactionDuration * 1000\n : undefined)\n ?? defaultReactNativeTracingOptions.finalTimeoutMs,\n idleTimeoutMs: options.idleTimeoutMs\n // eslint-disable-next-line deprecation/deprecation\n ?? options.idleTimeout\n ?? defaultReactNativeTracingOptions.idleTimeoutMs,\n };\n }\n\n /**\n * Registers routing and request instrumentation.\n */\n public setupOnce(\n // @ts-ignore TODO\n addGlobalEventProcessor: (callback: EventProcessor) => void,\n getCurrentHub: () => Hub\n ): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const {\n traceFetch,\n traceXHR,\n tracingOrigins,\n // @ts-ignore TODO\n shouldCreateSpanForRequest,\n routingInstrumentation,\n enableAppStartTracking,\n enableNativeFramesTracking,\n enableStallTracking,\n } = this.options;\n\n this._getCurrentHub = getCurrentHub;\n\n if (enableAppStartTracking) {\n void this._instrumentAppStart();\n }\n\n if (enableNativeFramesTracking) {\n this.nativeFramesInstrumentation = new NativeFramesInstrumentation(\n addGlobalEventProcessor,\n () => {\n const self = getCurrentHub().getIntegration(ReactNativeTracing);\n\n if (self) {\n return !!self.nativeFramesInstrumentation;\n }\n\n return false;\n }\n );\n } else {\n NATIVE.disableNativeFramesTracking();\n }\n\n if (enableStallTracking) {\n this.stallTrackingInstrumentation = new StallTrackingInstrumentation();\n }\n\n if (routingInstrumentation) {\n routingInstrumentation.registerRoutingInstrumentation(\n this._onRouteWillChange.bind(this),\n this.options.beforeNavigate,\n this._onConfirmRoute.bind(this)\n );\n } else {\n logger.log(\n '[ReactNativeTracing] Not instrumenting route changes as routingInstrumentation has not been set.'\n );\n }\n\n instrumentOutgoingRequests({\n traceFetch,\n traceXHR,\n tracingOrigins,\n shouldCreateSpanForRequest,\n });\n }\n\n /**\n * To be called on a transaction start. Can have async methods\n */\n public onTransactionStart(transaction: Transaction): void {\n if (isNearToNow(transaction.startTimestamp)) {\n // Only if this method is called at or within margin of error to the start timestamp.\n this.nativeFramesInstrumentation?.onTransactionStart(transaction);\n this.stallTrackingInstrumentation?.onTransactionStart(transaction);\n }\n }\n\n /**\n * To be called on a transaction finish. Cannot have async methods.\n */\n public onTransactionFinish(\n transaction: Transaction,\n endTimestamp?: number\n ): void {\n this.nativeFramesInstrumentation?.onTransactionFinish(transaction);\n this.stallTrackingInstrumentation?.onTransactionFinish(\n transaction,\n endTimestamp\n );\n }\n\n /**\n * Called by the ReactNativeProfiler component on first component mount.\n */\n public onAppStartFinish(endTimestamp: number): void {\n this._appStartFinishTimestamp = endTimestamp;\n }\n\n /**\n * Instruments the app start measurements on the first route transaction.\n * Starts a route transaction if there isn't routing instrumentation.\n */\n private async _instrumentAppStart(): Promise<void> {\n if (!this.options.enableAppStartTracking || !NATIVE.enableNative) {\n return;\n }\n\n const appStart = await NATIVE.fetchNativeAppStart();\n\n if (!appStart || appStart.didFetchAppStart) {\n return;\n }\n\n if (!this.useAppStartWithProfiler) {\n this._appStartFinishTimestamp = getTimeOriginMilliseconds() / 1000;\n }\n\n if (this.options.routingInstrumentation) {\n this._awaitingAppStartData = appStart;\n } else {\n const appStartTimeSeconds = appStart.appStartTime / 1000;\n\n const idleTransaction = this._createRouteTransaction({\n name: 'App Start',\n op: 'ui.load',\n startTimestamp: appStartTimeSeconds,\n });\n\n if (idleTransaction) {\n this._addAppStartData(idleTransaction, appStart);\n }\n }\n }\n\n /**\n * Adds app start measurements and starts a child span on a transaction.\n */\n private _addAppStartData(\n transaction: IdleTransaction,\n appStart: NativeAppStartResponse\n ): void {\n if (!this._appStartFinishTimestamp) {\n logger.warn('App start was never finished.');\n return;\n }\n\n const appStartTimeSeconds = appStart.appStartTime / 1000;\n\n const appStartMode = appStart.isColdStart ? 'app.start.cold' : 'app.start.warm';\n transaction.startChild({\n description: appStart.isColdStart ? 'Cold App Start' : 'Warm App Start',\n op: appStartMode,\n startTimestamp: appStartTimeSeconds,\n endTimestamp: this._appStartFinishTimestamp,\n });\n\n const appStartDurationMilliseconds =\n this._appStartFinishTimestamp * 1000 - appStart.appStartTime;\n\n // we filter out app start more than 60s.\n // this could be due to many different reasons.\n // we've seen app starts with hours, days and even months.\n if (appStartDurationMilliseconds >= ReactNativeTracing._maxAppStart) {\n return;\n }\n\n transaction.setMeasurement(appStartMode, appStartDurationMilliseconds, 'millisecond');\n }\n\n /** To be called when the route changes, but BEFORE the components of the new route mount. */\n private _onRouteWillChange(\n context: TransactionContext\n ): TransactionType | undefined {\n return this._createRouteTransaction(context);\n }\n\n /**\n * Creates a breadcrumb and sets the current route as a tag.\n */\n private _onConfirmRoute(context: TransactionContext): void {\n this._getCurrentHub?.().configureScope((scope) => {\n if (context.data) {\n const contextData = context.data as RouteChangeContextData;\n\n scope.addBreadcrumb({\n category: 'navigation',\n type: 'navigation',\n // We assume that context.name is the name of the route.\n message: `Navigation to ${context.name}`,\n data: {\n from: contextData.previousRoute?.name,\n to: contextData.route.name,\n },\n });\n }\n\n scope.setTag('routing.route.name', context.name);\n });\n }\n\n /** Create routing idle transaction. */\n private _createRouteTransaction(\n context: TransactionContext\n ): IdleTransaction | undefined {\n if (!this._getCurrentHub) {\n logger.warn(\n `[ReactNativeTracing] Did not create ${context.op} transaction because _getCurrentHub is invalid.`\n );\n return undefined;\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const { idleTimeoutMs, finalTimeoutMs } = this.options;\n\n const expandedContext = {\n ...context,\n trimEnd: true,\n };\n\n const hub = this._getCurrentHub();\n const idleTransaction = startIdleTransaction(\n hub as Hub,\n expandedContext,\n idleTimeoutMs,\n finalTimeoutMs,\n true\n );\n\n this.onTransactionStart(idleTransaction);\n\n logger.log(\n `[ReactNativeTracing] Starting ${context.op} transaction \"${context.name}\" on scope`\n );\n\n idleTransaction.registerBeforeFinishCallback(\n (transaction, endTimestamp) => {\n this.onTransactionFinish(transaction, endTimestamp);\n }\n );\n\n idleTransaction.registerBeforeFinishCallback((transaction) => {\n if (this.options.enableAppStartTracking && this._awaitingAppStartData) {\n transaction.startTimestamp =\n this._awaitingAppStartData.appStartTime / 1000;\n transaction.op = 'ui.load';\n\n this._addAppStartData(transaction, this._awaitingAppStartData);\n\n this._awaitingAppStartData = undefined;\n }\n });\n\n idleTransaction.registerBeforeFinishCallback(\n (transaction, endTimestamp) => {\n adjustTransactionDuration(\n finalTimeoutMs,\n transaction,\n endTimestamp\n );\n }\n );\n\n if (this.options.ignoreEmptyBackNavigationTransactions) {\n idleTransaction.registerBeforeFinishCallback((transaction) => {\n if (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n transaction.data?.route?.hasBeenSeen &&\n (!transaction.spanRecorder ||\n transaction.spanRecorder.spans.filter(\n (span) => span.spanId !== transaction.spanId\n ).length === 0)\n ) {\n logger.log(\n '[ReactNativeTracing] Not sampling transaction as route has been seen before. Pass ignoreEmptyBackNavigationTransactions = false to disable this feature.'\n );\n // Route has been seen before and has no child spans.\n transaction.sampled = false;\n }\n });\n }\n\n return idleTransaction;\n }\n}\n"]}
@@ -11,8 +11,7 @@ export declare const MARGIN_OF_ERROR_SECONDS = 0.05;
11
11
  /**
12
12
  *
13
13
  */
14
- export declare function adjustTransactionDuration(maxDuration: number, // in seconds
15
- transaction: IdleTransaction, endTimestamp: number): void;
14
+ export declare function adjustTransactionDuration(maxDurationMs: number, transaction: IdleTransaction, endTimestamp: number): void;
16
15
  /**
17
16
  * Returns the timestamp where the JS global scope was initialized.
18
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/js/tracing/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGtE,eAAO,MAAM,wBAAwB,EAAE,iBAA+B,CAAC;AACvE,eAAO,MAAM,uBAAuB,EAAE,iBAA4B,CAAC;AAEnE,eAAO,MAAM,0BAA0B,sCActC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAY5C;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,EAAE,aAAa;AAClC,WAAW,EAAE,eAAe,EAC5B,YAAY,EAAE,MAAM,GACnB,IAAI,CAQN;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,GACpD,IAAI,CAkBN;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEtD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/js/tracing/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGtE,eAAO,MAAM,wBAAwB,EAAE,iBAA+B,CAAC;AACvE,eAAO,MAAM,uBAAuB,EAAE,iBAA4B,CAAC;AAEnE,eAAO,MAAM,0BAA0B,sCActC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAI5C;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,eAAe,EAC5B,YAAY,EAAE,MAAM,GACnB,IAAI,CAQN;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,GACpD,IAAI,CAkBN;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEtD"}
@@ -20,20 +20,12 @@ export const getBlankTransactionContext = (name) => {
20
20
  */
21
21
  export const MARGIN_OF_ERROR_SECONDS = 0.05;
22
22
  const timeOriginMilliseconds = Date.now();
23
- /**
24
- * Converts from seconds to milliseconds
25
- * @param time time in seconds
26
- */
27
- function secToMs(time) {
28
- return time * 1000;
29
- }
30
23
  /**
31
24
  *
32
25
  */
33
- export function adjustTransactionDuration(maxDuration, // in seconds
34
- transaction, endTimestamp) {
26
+ export function adjustTransactionDuration(maxDurationMs, transaction, endTimestamp) {
35
27
  const diff = endTimestamp - transaction.startTimestamp;
36
- const isOutdatedTransaction = endTimestamp && (diff > secToMs(maxDuration) || diff < 0);
28
+ const isOutdatedTransaction = endTimestamp && (diff > maxDurationMs || diff < 0);
37
29
  if (isOutdatedTransaction) {
38
30
  transaction.setStatus('deadline_exceeded');
39
31
  transaction.setTag('maxTransactionDurationExceeded', 'true');
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/js/tracing/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,CAAC,MAAM,wBAAwB,GAAsB,WAAW,CAAC;AACvE,MAAM,CAAC,MAAM,uBAAuB,GAAsB,QAAQ,CAAC;AAEnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,IAAY,EACQ,EAAE;IACtB,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE;YACJ,yBAAyB,EAAE,IAAI;SAChC;QACD,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE;YACR,MAAM,EAAE,wBAAwB;SACjC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE5C,MAAM,sBAAsB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAE1C;;;GAGG;AACH,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI,GAAG,IAAI,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,WAAmB,EAAE,aAAa;AAClC,WAA4B,EAC5B,YAAoB;IAEpB,MAAM,IAAI,GAAG,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC;IACvD,MAAM,qBAAqB,GACzB,YAAY,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;IAC5D,IAAI,qBAAqB,EAAE;QACzB,WAAW,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC3C,WAAW,CAAC,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;KAC9D;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,WAAwB,EACxB,QAAqD;IAErD,IAAI,WAAW,CAAC,YAAY,EAAE;QAC5B,6DAA6D;QAC7D,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC;QAEjD,WAAW,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,IAAU,EAAQ,EAAE;YAClD,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAEpD,6DAA6D;YAC7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;YAEvC,IAAI,CAAC,MAAM,GAAG,CAAC,YAAqB,EAAE,EAAE;gBACtC,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;gBAE/C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC/B,CAAC,CAAC;QACJ,CAAC,CAAC;KACH;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,SAAS,CAAC,IAAI,uBAAuB,CAAC;AAC/E,CAAC","sourcesContent":["import { IdleTransaction, Span, Transaction } from '@sentry/tracing';\nimport { TransactionContext, TransactionSource } from '@sentry/types';\nimport { timestampInSeconds } from '@sentry/utils';\n\nexport const defaultTransactionSource: TransactionSource = 'component';\nexport const customTransactionSource: TransactionSource = 'custom';\n\nexport const getBlankTransactionContext = (\n name: string\n): TransactionContext => {\n return {\n name: 'Route Change',\n op: 'navigation',\n tags: {\n 'routing.instrumentation': name,\n },\n data: {},\n metadata: {\n source: defaultTransactionSource,\n },\n };\n};\n\n/**\n * A margin of error of 50ms is allowed for the async native bridge call.\n * Anything larger would reduce the accuracy of our frames measurements.\n */\nexport const MARGIN_OF_ERROR_SECONDS = 0.05;\n\nconst timeOriginMilliseconds = Date.now();\n\n/**\n * Converts from seconds to milliseconds\n * @param time time in seconds\n */\nfunction secToMs(time: number): number {\n return time * 1000;\n}\n\n/**\n *\n */\nexport function adjustTransactionDuration(\n maxDuration: number, // in seconds\n transaction: IdleTransaction,\n endTimestamp: number\n): void {\n const diff = endTimestamp - transaction.startTimestamp;\n const isOutdatedTransaction =\n endTimestamp && (diff > secToMs(maxDuration) || diff < 0);\n if (isOutdatedTransaction) {\n transaction.setStatus('deadline_exceeded');\n transaction.setTag('maxTransactionDurationExceeded', 'true');\n }\n}\n\n/**\n * Returns the timestamp where the JS global scope was initialized.\n */\nexport function getTimeOriginMilliseconds(): number {\n return timeOriginMilliseconds;\n}\n\n/**\n * Calls the callback every time a child span of the transaction is finished.\n */\nexport function instrumentChildSpanFinish(\n transaction: Transaction,\n callback: (span: Span, endTimestamp?: number) => void\n): void {\n if (transaction.spanRecorder) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalAdd = transaction.spanRecorder.add;\n\n transaction.spanRecorder.add = (span: Span): void => {\n originalAdd.apply(transaction.spanRecorder, [span]);\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalSpanFinish = span.finish;\n\n span.finish = (endTimestamp?: number) => {\n originalSpanFinish.apply(span, [endTimestamp]);\n\n callback(span, endTimestamp);\n };\n };\n }\n}\n\n/**\n * Determines if the timestamp is now or within the specified margin of error from now.\n */\nexport function isNearToNow(timestamp: number): boolean {\n return Math.abs(timestampInSeconds() - timestamp) <= MARGIN_OF_ERROR_SECONDS;\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/js/tracing/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,CAAC,MAAM,wBAAwB,GAAsB,WAAW,CAAC;AACvE,MAAM,CAAC,MAAM,uBAAuB,GAAsB,QAAQ,CAAC;AAEnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,IAAY,EACQ,EAAE;IACtB,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE;YACJ,yBAAyB,EAAE,IAAI;SAChC;QACD,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE;YACR,MAAM,EAAE,wBAAwB;SACjC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,CAAC;AAE5C,MAAM,sBAAsB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAE1C;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,aAAqB,EACrB,WAA4B,EAC5B,YAAoB;IAEpB,MAAM,IAAI,GAAG,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC;IACvD,MAAM,qBAAqB,GACzB,YAAY,IAAI,CAAC,IAAI,GAAG,aAAa,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;IACrD,IAAI,qBAAqB,EAAE;QACzB,WAAW,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QAC3C,WAAW,CAAC,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;KAC9D;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,WAAwB,EACxB,QAAqD;IAErD,IAAI,WAAW,CAAC,YAAY,EAAE;QAC5B,6DAA6D;QAC7D,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC;QAEjD,WAAW,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,IAAU,EAAQ,EAAE;YAClD,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAEpD,6DAA6D;YAC7D,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;YAEvC,IAAI,CAAC,MAAM,GAAG,CAAC,YAAqB,EAAE,EAAE;gBACtC,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;gBAE/C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC/B,CAAC,CAAC;QACJ,CAAC,CAAC;KACH;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,SAAS,CAAC,IAAI,uBAAuB,CAAC;AAC/E,CAAC","sourcesContent":["import { IdleTransaction, Span, Transaction } from '@sentry/tracing';\nimport { TransactionContext, TransactionSource } from '@sentry/types';\nimport { timestampInSeconds } from '@sentry/utils';\n\nexport const defaultTransactionSource: TransactionSource = 'component';\nexport const customTransactionSource: TransactionSource = 'custom';\n\nexport const getBlankTransactionContext = (\n name: string\n): TransactionContext => {\n return {\n name: 'Route Change',\n op: 'navigation',\n tags: {\n 'routing.instrumentation': name,\n },\n data: {},\n metadata: {\n source: defaultTransactionSource,\n },\n };\n};\n\n/**\n * A margin of error of 50ms is allowed for the async native bridge call.\n * Anything larger would reduce the accuracy of our frames measurements.\n */\nexport const MARGIN_OF_ERROR_SECONDS = 0.05;\n\nconst timeOriginMilliseconds = Date.now();\n\n/**\n *\n */\nexport function adjustTransactionDuration(\n maxDurationMs: number,\n transaction: IdleTransaction,\n endTimestamp: number\n): void {\n const diff = endTimestamp - transaction.startTimestamp;\n const isOutdatedTransaction =\n endTimestamp && (diff > maxDurationMs || diff < 0);\n if (isOutdatedTransaction) {\n transaction.setStatus('deadline_exceeded');\n transaction.setTag('maxTransactionDurationExceeded', 'true');\n }\n}\n\n/**\n * Returns the timestamp where the JS global scope was initialized.\n */\nexport function getTimeOriginMilliseconds(): number {\n return timeOriginMilliseconds;\n}\n\n/**\n * Calls the callback every time a child span of the transaction is finished.\n */\nexport function instrumentChildSpanFinish(\n transaction: Transaction,\n callback: (span: Span, endTimestamp?: number) => void\n): void {\n if (transaction.spanRecorder) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalAdd = transaction.spanRecorder.add;\n\n transaction.spanRecorder.add = (span: Span): void => {\n originalAdd.apply(transaction.spanRecorder, [span]);\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const originalSpanFinish = span.finish;\n\n span.finish = (endTimestamp?: number) => {\n originalSpanFinish.apply(span, [endTimestamp]);\n\n callback(span, endTimestamp);\n };\n };\n }\n}\n\n/**\n * Determines if the timestamp is now or within the specified margin of error from now.\n */\nexport function isNearToNow(timestamp: number): boolean {\n return Math.abs(timestampInSeconds() - timestamp) <= MARGIN_OF_ERROR_SECONDS;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { TextEncoderInternal } from '@sentry/types';
2
+ export declare const makeUtf8TextEncoder: () => TextEncoderInternal;
3
+ //# sourceMappingURL=TextEncoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextEncoder.d.ts","sourceRoot":"","sources":["../../../src/js/transports/TextEncoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAIpD,eAAO,MAAM,mBAAmB,2BAS/B,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { utf8ToBytes } from '../vendor';
2
+ export const makeUtf8TextEncoder = () => {
3
+ const textEncoder = {
4
+ encode: (text) => {
5
+ const bytes = new Uint8Array(utf8ToBytes(text));
6
+ return bytes;
7
+ },
8
+ encoding: 'utf-8',
9
+ };
10
+ return textEncoder;
11
+ };
12
+ //# sourceMappingURL=TextEncoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextEncoder.js","sourceRoot":"","sources":["../../../src/js/transports/TextEncoder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAwB,EAAE;IAC3D,MAAM,WAAW,GAAG;QAClB,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,QAAQ,EAAE,OAAO;KAClB,CAAC;IACF,OAAO,WAAW,CAAC;AACrB,CAAC,CAAA","sourcesContent":["import { TextEncoderInternal } from '@sentry/types';\n\nimport { utf8ToBytes } from '../vendor';\n\nexport const makeUtf8TextEncoder = (): TextEncoderInternal => {\n const textEncoder = {\n encode: (text: string) => {\n const bytes = new Uint8Array(utf8ToBytes(text));\n return bytes;\n },\n encoding: 'utf-8',\n };\n return textEncoder;\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import { DsnComponents, EventEnvelope, SdkMetadata, UserFeedback } from '@sentry/types';
2
+ /**
3
+ * Creates an envelope from a user feedback.
4
+ */
5
+ export declare function createUserFeedbackEnvelope(feedback: UserFeedback, { metadata, tunnel, dsn, }: {
6
+ metadata: SdkMetadata | undefined;
7
+ tunnel: string | undefined;
8
+ dsn: DsnComponents | undefined;
9
+ }): EventEnvelope;
10
+ //# sourceMappingURL=envelope.d.ts.map