@sentry/react-native 5.0.0-alpha.1 → 5.0.0-alpha.11

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 (168) hide show
  1. package/CHANGELOG.md +403 -4
  2. package/README.md +6 -0
  3. package/RNSentry.podspec +22 -5
  4. package/android/build.gradle +20 -2
  5. package/android/src/main/java/io/sentry/react/{RNSentryModule.java → RNSentryModuleImpl.java} +174 -114
  6. package/android/src/main/java/io/sentry/react/RNSentryPackage.java +35 -19
  7. package/android/src/newarch/java/io/sentry/react/RNSentryModule.java +119 -0
  8. package/android/src/oldarch/java/io/sentry/react/RNSentryModule.java +119 -0
  9. package/dist/js/NativeRNSentry.d.ts +52 -0
  10. package/dist/js/NativeRNSentry.d.ts.map +1 -0
  11. package/dist/js/NativeRNSentry.js +4 -0
  12. package/dist/js/NativeRNSentry.js.map +1 -0
  13. package/dist/js/client.d.ts +18 -6
  14. package/dist/js/client.d.ts.map +1 -1
  15. package/dist/js/client.js +96 -37
  16. package/dist/js/client.js.map +1 -1
  17. package/dist/js/index.d.ts +4 -3
  18. package/dist/js/index.d.ts.map +1 -1
  19. package/dist/js/index.js +3 -2
  20. package/dist/js/index.js.map +1 -1
  21. package/dist/js/integrations/debugsymbolicator.d.ts +9 -0
  22. package/dist/js/integrations/debugsymbolicator.d.ts.map +1 -1
  23. package/dist/js/integrations/debugsymbolicator.js +0 -2
  24. package/dist/js/integrations/debugsymbolicator.js.map +1 -1
  25. package/dist/js/integrations/index.d.ts +2 -0
  26. package/dist/js/integrations/index.d.ts.map +1 -1
  27. package/dist/js/integrations/index.js +2 -0
  28. package/dist/js/integrations/index.js.map +1 -1
  29. package/dist/js/integrations/modulesloader.d.ts +17 -0
  30. package/dist/js/integrations/modulesloader.d.ts.map +1 -0
  31. package/dist/js/integrations/modulesloader.js +39 -0
  32. package/dist/js/integrations/modulesloader.js.map +1 -0
  33. package/dist/js/integrations/reactnativeerrorhandlers.d.ts.map +1 -1
  34. package/dist/js/integrations/reactnativeerrorhandlers.js +10 -7
  35. package/dist/js/integrations/reactnativeerrorhandlers.js.map +1 -1
  36. package/dist/js/integrations/reactnativeinfo.d.ts +23 -0
  37. package/dist/js/integrations/reactnativeinfo.d.ts.map +1 -0
  38. package/dist/js/integrations/reactnativeinfo.js +43 -0
  39. package/dist/js/integrations/reactnativeinfo.js.map +1 -0
  40. package/dist/js/integrations/screenshot.d.ts +23 -0
  41. package/dist/js/integrations/screenshot.d.ts.map +1 -0
  42. package/dist/js/integrations/screenshot.js +39 -0
  43. package/dist/js/integrations/screenshot.js.map +1 -0
  44. package/dist/js/integrations/sdkinfo.d.ts +4 -1
  45. package/dist/js/integrations/sdkinfo.d.ts.map +1 -1
  46. package/dist/js/integrations/sdkinfo.js +13 -7
  47. package/dist/js/integrations/sdkinfo.js.map +1 -1
  48. package/dist/js/measurements.d.ts +4 -0
  49. package/dist/js/measurements.d.ts.map +1 -1
  50. package/dist/js/measurements.js +12 -1
  51. package/dist/js/measurements.js.map +1 -1
  52. package/dist/js/misc.d.ts +9 -0
  53. package/dist/js/misc.d.ts.map +1 -0
  54. package/dist/js/misc.js +17 -0
  55. package/dist/js/misc.js.map +1 -0
  56. package/dist/js/options.d.ts +45 -9
  57. package/dist/js/options.d.ts.map +1 -1
  58. package/dist/js/options.js.map +1 -1
  59. package/dist/js/scope.d.ts +10 -2
  60. package/dist/js/scope.d.ts.map +1 -1
  61. package/dist/js/scope.js +13 -1
  62. package/dist/js/scope.js.map +1 -1
  63. package/dist/js/sdk.d.ts +25 -0
  64. package/dist/js/sdk.d.ts.map +1 -1
  65. package/dist/js/sdk.js +86 -27
  66. package/dist/js/sdk.js.map +1 -1
  67. package/dist/js/tools/ModulesCollector.d.ts +17 -0
  68. package/dist/js/tools/ModulesCollector.d.ts.map +1 -0
  69. package/dist/js/tools/ModulesCollector.js +109 -0
  70. package/dist/js/tools/ModulesCollector.js.map +1 -0
  71. package/dist/js/tools/collectModules.d.ts +2 -0
  72. package/dist/js/tools/collectModules.d.ts.map +1 -0
  73. package/dist/js/tools/collectModules.js +11 -0
  74. package/dist/js/tools/collectModules.js.map +1 -0
  75. package/dist/js/touchevents.d.ts +8 -0
  76. package/dist/js/touchevents.d.ts.map +1 -1
  77. package/dist/js/touchevents.js +10 -5
  78. package/dist/js/touchevents.js.map +1 -1
  79. package/dist/js/tracing/nativeframes.js.map +1 -1
  80. package/dist/js/tracing/reactnativenavigation.d.ts +9 -0
  81. package/dist/js/tracing/reactnativenavigation.d.ts.map +1 -1
  82. package/dist/js/tracing/reactnativenavigation.js +20 -12
  83. package/dist/js/tracing/reactnativenavigation.js.map +1 -1
  84. package/dist/js/tracing/reactnativetracing.d.ts +15 -6
  85. package/dist/js/tracing/reactnativetracing.d.ts.map +1 -1
  86. package/dist/js/tracing/reactnativetracing.js +16 -9
  87. package/dist/js/tracing/reactnativetracing.js.map +1 -1
  88. package/dist/js/tracing/reactnavigation.d.ts +7 -1
  89. package/dist/js/tracing/reactnavigation.d.ts.map +1 -1
  90. package/dist/js/tracing/reactnavigation.js +31 -23
  91. package/dist/js/tracing/reactnavigation.js.map +1 -1
  92. package/dist/js/tracing/reactnavigationv4.d.ts +9 -9
  93. package/dist/js/tracing/reactnavigationv4.d.ts.map +1 -1
  94. package/dist/js/tracing/reactnavigationv4.js +27 -15
  95. package/dist/js/tracing/reactnavigationv4.js.map +1 -1
  96. package/dist/js/tracing/routingInstrumentation.d.ts +1 -1
  97. package/dist/js/tracing/routingInstrumentation.d.ts.map +1 -1
  98. package/dist/js/tracing/routingInstrumentation.js.map +1 -1
  99. package/dist/js/tracing/utils.d.ts +4 -3
  100. package/dist/js/tracing/utils.d.ts.map +1 -1
  101. package/dist/js/tracing/utils.js +7 -10
  102. package/dist/js/tracing/utils.js.map +1 -1
  103. package/dist/js/transports/TextEncoder.d.ts +3 -0
  104. package/dist/js/transports/TextEncoder.d.ts.map +1 -0
  105. package/dist/js/transports/TextEncoder.js +12 -0
  106. package/dist/js/transports/TextEncoder.js.map +1 -0
  107. package/dist/js/transports/native.d.ts +10 -1
  108. package/dist/js/transports/native.d.ts.map +1 -1
  109. package/dist/js/transports/native.js +15 -4
  110. package/dist/js/transports/native.js.map +1 -1
  111. package/dist/js/user.d.ts +6 -0
  112. package/dist/js/user.d.ts.map +1 -0
  113. package/dist/js/user.js +1 -0
  114. package/dist/js/user.js.map +1 -0
  115. package/dist/js/utils/envelope.d.ts +12 -0
  116. package/dist/js/utils/envelope.d.ts.map +1 -0
  117. package/dist/js/utils/envelope.js +21 -0
  118. package/dist/js/utils/envelope.js.map +1 -0
  119. package/dist/js/utils/environment.d.ts +7 -0
  120. package/dist/js/utils/environment.d.ts.map +1 -0
  121. package/dist/js/utils/environment.js +14 -0
  122. package/dist/js/utils/environment.js.map +1 -0
  123. package/dist/js/utils/ignorerequirecyclelogs.d.ts +6 -0
  124. package/dist/js/utils/ignorerequirecyclelogs.d.ts.map +1 -0
  125. package/dist/js/utils/ignorerequirecyclelogs.js +15 -0
  126. package/dist/js/utils/ignorerequirecyclelogs.js.map +1 -0
  127. package/dist/js/utils/outcome.d.ts +6 -0
  128. package/dist/js/utils/outcome.d.ts.map +1 -0
  129. package/dist/js/utils/outcome.js +19 -0
  130. package/dist/js/utils/outcome.js.map +1 -0
  131. package/dist/js/utils/safe.d.ts +18 -0
  132. package/dist/js/utils/safe.d.ts.map +1 -0
  133. package/dist/js/utils/safe.js +46 -0
  134. package/dist/js/utils/safe.js.map +1 -0
  135. package/dist/js/utils/worldwide.d.ts +13 -0
  136. package/dist/js/utils/worldwide.d.ts.map +1 -0
  137. package/dist/js/utils/worldwide.js +4 -0
  138. package/dist/js/utils/worldwide.js.map +1 -0
  139. package/dist/js/vendor/buffer/index.d.ts +2 -0
  140. package/dist/js/vendor/buffer/index.d.ts.map +1 -0
  141. package/dist/js/vendor/buffer/index.js +2 -0
  142. package/dist/js/vendor/buffer/index.js.map +1 -0
  143. package/dist/js/vendor/buffer/utf8ToBytes.d.ts +10 -0
  144. package/dist/js/vendor/buffer/utf8ToBytes.d.ts.map +1 -0
  145. package/dist/js/vendor/buffer/utf8ToBytes.js +82 -0
  146. package/dist/js/vendor/buffer/utf8ToBytes.js.map +1 -0
  147. package/dist/js/vendor/index.d.ts +2 -0
  148. package/dist/js/vendor/index.d.ts.map +1 -0
  149. package/dist/js/vendor/index.js +2 -0
  150. package/dist/js/vendor/index.js.map +1 -0
  151. package/dist/js/version.d.ts +2 -1
  152. package/dist/js/version.d.ts.map +1 -1
  153. package/dist/js/version.js +2 -1
  154. package/dist/js/version.js.map +1 -1
  155. package/dist/js/wrapper.d.ts +13 -4
  156. package/dist/js/wrapper.d.ts.map +1 -1
  157. package/dist/js/wrapper.js +129 -71
  158. package/dist/js/wrapper.js.map +1 -1
  159. package/ios/{RNSentry.m → RNSentry.mm} +98 -57
  160. package/package.json +32 -26
  161. package/sample-new-architecture/react-native.config.js +10 -0
  162. package/scripts/collect-modules.sh +43 -0
  163. package/sentry.gradle +57 -6
  164. package/src/js/NativeRNSentry.ts +66 -0
  165. package/dist/js/definitions.d.ts +0 -52
  166. package/dist/js/definitions.d.ts.map +0 -1
  167. package/dist/js/definitions.js +0 -1
  168. package/dist/js/definitions.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../src/js/wrapper.ts"],"names":[],"mappings":";AAeA,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAYvD,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAgD,CAAC;AA2ChF;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAwB;IACzC;;;OAGG;IACG,YAAY,CAAC,QAAkB;;;YACnC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;gBAC/D,OAAO;aACR;YAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;gBACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;aAC/B;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAE3B,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;gBACjC,UAAU;gBAEV,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAE5C,IAAI,oBAAoB,GAAG,GAAG,YAAY,EAAE,CAAC;gBAE7C,KAAK,MAAM,aAAa,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;oBAEvC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;oBAC5C,IAAI,KAAK,IAAI,SAAS,EAAE;wBAEtB,6GAA6G;wBAC7G,KAAK,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;wBAE3C;;;;;;;0BAOE;wBACF,IAAI,yBAAA,KAAK,CAAC,SAAS,0CAAE,MAAM,0CAAG,CAAC,2CAAG,SAAS,0CAAE,OAAO,KAAI,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE;4BAClF,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;yBACxB;wBACD,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;qBAC1B;oBAED,sDAAsD;oBACrD,aAAa,CAAC,CAAC,CAA6B,CAAC,YAAY,GAAG,kBAAkB,CAAC;oBAEhF,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;oBAErD,IAAI,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;oBAChC,IAAI;wBACF,MAAM,GAAG,MAAM,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;qBAC3D;oBAAC,WAAM;wBACN,8EAA8E;qBAC/E;oBAEA,aAAa,CAAC,CAAC,CAA6B,CAAC,MAAM,GAAG,MAAM,CAAC;oBAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEpD,oBAAoB,IAAI,KAAK,UAAU,KAAK,WAAW,EAAE,CAAC;iBAC3D;gBAED,MAAM,QAAQ,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC;aACtD;iBAAM;gBACL,UAAU;gBAEV,KAAK,MAAM,aAAa,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;oBACvC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;oBAC5C,IAAI,KAAK,IAAI,SAAS,EAAE;wBACtB,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;qBAC1B;oBAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEjE,iGAAiG;oBACjG,sEAAsE;oBAEtE,MAAM,QAAQ,CAAC,eAAe,CAAC;wBAC7B,MAAM;wBACN,OAAO,EAAE,WAAW;qBACrB,CAAC,CAAC;iBACJ;aACF;YAAA,CAAC;;KAEH;IAED;;;OAGG;IACG,aAAa,CAAC,eAAmC;;YACrD,MAAM,OAAO,mBACX,YAAY,EAAE,IAAI,EAClB,uBAAuB,EAAE,IAAI,IAC1B,eAAe,CACnB,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;gBACzB,IAAI,OAAO,CAAC,kBAAkB,EAAE;oBAC9B,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;iBACrD;gBACD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC1B,OAAO,KAAK,CAAC;aACd;YACD,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE;gBACpC,IAAI,OAAO,CAAC,kBAAkB,EAAE;oBAC9B,MAAM,CAAC,IAAI,CACT,iMAAiM,CAClM,CAAC;iBACH;gBACD,OAAO,KAAK,CAAC;aACd;YAED,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;gBAChB,MAAM,CAAC,IAAI,CACT,wGAAwG,CACzG,CAAC;gBACF,OAAO,KAAK,CAAC;aACd;YAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;gBACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;aAC/B;YAED,sDAAsD;YACtD,wFAAwF;YACxF,MAAM,EACJ,UAAU,EACV,gBAAgB,EAChB,YAAY,KAEV,OAAO,EADT,qFACS,CAAC;YACZ,uFAAuF;YACvF,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YAEpE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;YAEnC,OAAO,aAAa,CAAC;QACvB,CAAC;KAAA;IAED;;OAEG;IACG,kBAAkB;;YACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,MAAM,IAAI,CAAC,oBAAoB,CAAC;aACjC;YACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;gBACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;aAC/B;YAED,OAAO,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QACvC,CAAC;KAAA;IAED;;;OAGG;IACG,kBAAkB;;YACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,MAAM,IAAI,CAAC,oBAAoB,CAAC;aACjC;YACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;gBACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;aAC/B;YAED,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;gBAC3B,OAAO,IAAI,CAAC;aACb;YAED,OAAO,QAAQ,CAAC,kBAAkB,EAAE,CAAC;QACvC,CAAC;KAAA;IAED;;OAEG;IACG,yBAAyB;;YAC7B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,MAAM,IAAI,CAAC,oBAAoB,CAAC;aACjC;YACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;gBACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;aAC/B;YAED,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE;gBAC3B,wDAAwD;gBACxD,OAAO,EAAE,CAAC;aACX;YAED,OAAO,QAAQ,CAAC,yBAAyB,EAAE,CAAC;QAC9C,CAAC;KAAA;IAEK,mBAAmB;;YACvB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,MAAM,IAAI,CAAC,oBAAoB,CAAC;aACjC;YACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;gBACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;aAC/B;YAED,OAAO,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QACxC,CAAC;KAAA;IAEK,iBAAiB;;YACrB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,MAAM,IAAI,CAAC,oBAAoB,CAAC;aACjC;YACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;gBACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;aAC/B;YAED,OAAO,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QACtC,CAAC;KAAA;IAED;;;OAGG;IACH,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;YACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;SAC/B;QAED,QAAQ,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,IAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;YACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;SAC/B;QAED,mDAAmD;QACnD,IAAI,eAAe,GAAG,IAAI,CAAC;QAC3B,IAAI,aAAa,GAAG,IAAI,CAAC;QACzB,IAAI,IAAI,EAAE;YACR,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,KAAmB,IAAI,EAArB,mEAAqB,CAAC;YAC/D,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBACtC,KAAK;gBACL,EAAE;gBACF,UAAU;gBACV,QAAQ;aACT,CAAC,CAAC;YACH,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;SAClD;QAED,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,GAAW,EAAE,KAAa;QAC/B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;YACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;SAC/B;QAED,MAAM,gBAAgB,GACpB,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE5D,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACzC,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,GAAW,EAAE,KAAc;QAClC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;YACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;SAC/B;QAED,0DAA0D;QAC1D,MAAM,gBAAgB,GACpB,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE5D,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACH,aAAa,CAAC,UAAsB;QAClC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;YACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;SAC/B;QAED,QAAQ,CAAC,aAAa,iCACjB,UAAU;YACb,wCAAwC;YACxC,KAAK,EAAE,UAAU,CAAC,KAAK;gBACrB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC;gBACtC,CAAC,CAAC,SAAS,EACb,IAAI,EAAE,UAAU,CAAC,IAAI;gBACnB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC;gBACxC,CAAC,CAAC,SAAS,IACb,CAAC;IACL,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;YACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;SAC/B;QAED,QAAQ,CAAC,gBAAgB,EAAE,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,GAAW,EAAE,OAA0C;QAChE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;YACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC;SAC/B;QAED,QAAQ,CAAC,UAAU,CACjB,GAAG,EACH,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CACzD,CAAC;IACJ,CAAC;IAED;;OAEG;IACG,cAAc;;YAClB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;gBACtB,OAAO;aACR;YACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;gBACnC,OAAO;aACR;YAED,OAAO,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBACzC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAED,2BAA2B;QACzB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;SACR;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;YACnC,OAAO;SACR;QAED,QAAQ,CAAC,2BAA2B,EAAE,CAAC;IACzC,CAAC;IAED,0BAA0B;QACxB,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,YAA4F;QAClG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,aAAa,EAAE;YAC5E,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAU,CAAC,CAAC;SACtD;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACH,gBAAgB,CAAC,IAEhB;QACC,MAAM,UAAU,GAA8B,EAAE,CAAC;QAEjD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,UAAU,CAAC,OAAO,CAAC;gBACjB,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;OAIG;IAEH,cAAc,CAAC,KAAY;;QACzB,MAAM,SAAS,mCACV,KAAK,KACR,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAChE,WAAW,QAAE,KAAK,CAAC,WAAW,0CAAE,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,iCAC/C,UAAU,KACb,KAAK,EAAE,UAAU,CAAC,KAAK;oBACrB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC;oBACtC,CAAC,CAAC,SAAS,IACb,IACH,CAAC;QAEF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;OAIG;IAEH,aAAa,CAAC,KAAoB;QAChC,IAAI,KAAK,IAAI,KAAsB,EAAE;YACnC,OAAO,OAAwB,CAAC;SACjC;aACI,IAAI,KAAK,IAAI,UAA2B,EAAE;YAC7C,OAAO,OAAwB,CAAC;SACjC;QAGD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,eAAe,CACb,MAA4C;QAE5C,OAAO,CAAC,CAAC,MAAM,CAAC;IAClB,CAAC;IAED,oBAAoB,EAAE,IAAI,WAAW,CAAC,oBAAoB,CAAC;IAE3D,kBAAkB,EAAE,IAAI,WAAW,CACjC,wDAAwD,CACzD;IAED,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,KAAK;IACpB,QAAQ,EAAE,QAAQ,CAAC,EAAE;CACtB,CAAC","sourcesContent":["/* eslint-disable max-lines */\nimport {\n AttachmentItem,\n BaseEnvelopeItemHeaders,\n Breadcrumb,\n ClientReportItem,\n Envelope,\n Event,\n EventItem,\n Package,\n SessionItem,\n SeverityLevel,\n User,\n UserFeedbackItem,\n} from '@sentry/types';\nimport { logger, SentryError } from '@sentry/utils';\nimport { NativeModules, Platform } from 'react-native';\n\nimport {\n NativeAppStartResponse,\n NativeDeviceContextsResponse,\n NativeFramesResponse,\n NativeReleaseResponse,\n SentryNativeBridgeModule,\n} from './definitions';\nimport { ReactNativeOptions } from './options';\n\n\nconst RNSentry = NativeModules.RNSentry as SentryNativeBridgeModule | undefined;\n\ninterface SentryNativeWrapper {\n enableNative: boolean;\n nativeIsReady: boolean;\n platform: typeof Platform.OS;\n\n _NativeClientError: Error;\n _DisabledNativeError: Error;\n\n _getEvent(envelopeItem: EventItem | AttachmentItem | UserFeedbackItem | SessionItem | ClientReportItem): Event | undefined;\n _processLevels(event: Event): Event;\n _processLevel(level: SeverityLevel): SeverityLevel;\n _serializeObject(data: { [key: string]: unknown }): { [key: string]: string };\n _isModuleLoaded(\n module: SentryNativeBridgeModule | undefined\n ): module is SentryNativeBridgeModule;\n\n isNativeTransportAvailable(): boolean;\n\n initNativeSdk(options: ReactNativeOptions): PromiseLike<boolean>;\n closeNativeSdk(): PromiseLike<void>;\n\n sendEnvelope(envelope: Envelope): Promise<void>;\n\n fetchNativeRelease(): PromiseLike<NativeReleaseResponse>;\n fetchNativeDeviceContexts(): PromiseLike<NativeDeviceContextsResponse>;\n fetchNativeAppStart(): PromiseLike<NativeAppStartResponse | null>;\n fetchNativeFrames(): PromiseLike<NativeFramesResponse | null>;\n fetchNativeSdkInfo(): PromiseLike<Package | null>;\n\n disableNativeFramesTracking(): void;\n\n addBreadcrumb(breadcrumb: Breadcrumb): void;\n setContext(key: string, context: { [key: string]: unknown } | null): void;\n clearBreadcrumbs(): void;\n setExtra(key: string, extra: unknown): void;\n setUser(user: User | null): void;\n setTag(key: string, value: string): void;\n\n nativeCrash(): void;\n}\n\n/**\n * Our internal interface for calling native functions\n */\nexport const NATIVE: SentryNativeWrapper = {\n /**\n * Sending the envelope over the bridge to native\n * @param envelope Envelope\n */\n async sendEnvelope(envelope: Envelope): Promise<void> {\n if (!this.enableNative) {\n logger.warn('Event was skipped as native SDK is not enabled.');\n return;\n }\n\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n const header = envelope[0];\n\n if (NATIVE.platform === 'android') {\n // Android\n\n const headerString = JSON.stringify(header);\n\n let envelopeItemsBuilder = `${headerString}`;\n\n for (const envelopeItems of envelope[1]) {\n\n const event = this._getEvent(envelopeItems);\n if (event != undefined) {\n\n // @ts-ignore Android still uses the old message object, without this the serialization of events will break.\n event.message = { message: event.message };\n\n /*\n We do this to avoid duplicate breadcrumbs on Android as sentry-android applies the breadcrumbs\n from the native scope onto every envelope sent through it. This scope will contain the breadcrumbs\n sent through the scope sync feature. This causes duplicate breadcrumbs.\n We then remove the breadcrumbs in all cases but if it is handled == false,\n this is a signal that the app would crash and android would lose the breadcrumbs by the time the app is restarted to read\n the envelope.\n */\n if (event.exception?.values?.[0]?.mechanism?.handled != false && event.breadcrumbs) {\n event.breadcrumbs = [];\n }\n envelopeItems[1] = event;\n }\n\n // Content type is not inside BaseEnvelopeItemHeaders.\n (envelopeItems[0] as BaseEnvelopeItemHeaders).content_type = 'application/json';\n\n const itemPayload = JSON.stringify(envelopeItems[1]);\n\n let length = itemPayload.length;\n try {\n length = await RNSentry.getStringBytesLength(itemPayload);\n } catch {\n // The native call failed, we do nothing, we have payload.length as a fallback\n }\n\n (envelopeItems[0] as BaseEnvelopeItemHeaders).length = length;\n const itemHeader = JSON.stringify(envelopeItems[0]);\n\n envelopeItemsBuilder += `\\n${itemHeader}\\n${itemPayload}`;\n }\n\n await RNSentry.captureEnvelope(envelopeItemsBuilder);\n } else {\n // iOS/Mac\n\n for (const envelopeItems of envelope[1]) {\n const event = this._getEvent(envelopeItems);\n if (event != undefined) {\n envelopeItems[1] = event;\n }\n\n const itemPayload = JSON.parse(JSON.stringify(envelopeItems[1]));\n\n // The envelope item is created (and its length determined) on the iOS side of the native bridge.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\n await RNSentry.captureEnvelope({\n header,\n payload: itemPayload,\n });\n }\n };\n\n },\n\n /**\n * Starts native with the provided options.\n * @param options ReactNativeOptions\n */\n async initNativeSdk(originalOptions: ReactNativeOptions): Promise<boolean> {\n const options = {\n enableNative: true,\n autoInitializeNativeSdk: true,\n ...originalOptions,\n };\n\n if (!options.enableNative) {\n if (options.enableNativeNagger) {\n logger.warn('Note: Native Sentry SDK is disabled.');\n }\n this.enableNative = false;\n return false;\n }\n if (!options.autoInitializeNativeSdk) {\n if (options.enableNativeNagger) {\n logger.warn(\n 'Note: Native Sentry SDK was not initialized automatically, you will need to initialize it manually. If you wish to disable the native SDK and get rid of this warning, pass enableNative: false'\n );\n }\n return false;\n }\n\n if (!options.dsn) {\n logger.warn(\n 'Warning: No DSN was provided. The Sentry SDK will be disabled. Native SDK will also not be initalized.'\n );\n return false;\n }\n\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n // filter out all the options that would crash native.\n /* eslint-disable @typescript-eslint/unbound-method,@typescript-eslint/no-unused-vars */\n const {\n beforeSend,\n beforeBreadcrumb,\n integrations,\n ...filteredOptions\n } = options;\n /* eslint-enable @typescript-eslint/unbound-method,@typescript-eslint/no-unused-vars */\n const nativeIsReady = await RNSentry.initNativeSdk(filteredOptions);\n\n this.nativeIsReady = nativeIsReady;\n\n return nativeIsReady;\n },\n\n /**\n * Fetches the release from native\n */\n async fetchNativeRelease(): Promise<NativeReleaseResponse> {\n if (!this.enableNative) {\n throw this._DisabledNativeError;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n return RNSentry.fetchNativeRelease();\n },\n\n /**\n * Fetches the Sdk info for the native sdk.\n * NOTE: Only available on iOS.\n */\n async fetchNativeSdkInfo(): Promise<Package | null> {\n if (!this.enableNative) {\n throw this._DisabledNativeError;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n if (this.platform !== 'ios') {\n return null;\n }\n\n return RNSentry.fetchNativeSdkInfo();\n },\n\n /**\n * Fetches the device contexts. Not used on Android.\n */\n async fetchNativeDeviceContexts(): Promise<NativeDeviceContextsResponse> {\n if (!this.enableNative) {\n throw this._DisabledNativeError;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n if (this.platform !== 'ios') {\n // Only ios uses deviceContexts, return an empty object.\n return {};\n }\n\n return RNSentry.fetchNativeDeviceContexts();\n },\n\n async fetchNativeAppStart(): Promise<NativeAppStartResponse | null> {\n if (!this.enableNative) {\n throw this._DisabledNativeError;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n return RNSentry.fetchNativeAppStart();\n },\n\n async fetchNativeFrames(): Promise<NativeFramesResponse | null> {\n if (!this.enableNative) {\n throw this._DisabledNativeError;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n return RNSentry.fetchNativeFrames();\n },\n\n /**\n * Triggers a native crash.\n * Use this only for testing purposes.\n */\n nativeCrash(): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n RNSentry.crash();\n },\n\n /**\n * Sets the user in the native scope.\n * Passing null clears the user.\n */\n setUser(user: User | null): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n // separate and serialze all non-default user keys.\n let defaultUserKeys = null;\n let otherUserKeys = null;\n if (user) {\n const { id, ip_address, email, username, ...otherKeys } = user;\n defaultUserKeys = this._serializeObject({\n email,\n id,\n ip_address,\n username,\n });\n otherUserKeys = this._serializeObject(otherKeys);\n }\n\n RNSentry.setUser(defaultUserKeys, otherUserKeys);\n },\n\n /**\n * Sets a tag in the native module.\n * @param key string\n * @param value string\n */\n setTag(key: string, value: string): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n const stringifiedValue =\n typeof value === 'string' ? value : JSON.stringify(value);\n\n RNSentry.setTag(key, stringifiedValue);\n },\n\n /**\n * Sets an extra in the native scope, will stringify\n * extra value if it isn't already a string.\n * @param key string\n * @param extra any\n */\n setExtra(key: string, extra: unknown): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n // we stringify the extra as native only takes in strings.\n const stringifiedExtra =\n typeof extra === 'string' ? extra : JSON.stringify(extra);\n\n RNSentry.setExtra(key, stringifiedExtra);\n },\n\n /**\n * Adds breadcrumb to the native scope.\n * @param breadcrumb Breadcrumb\n */\n addBreadcrumb(breadcrumb: Breadcrumb): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n RNSentry.addBreadcrumb({\n ...breadcrumb,\n // Process and convert deprecated levels\n level: breadcrumb.level\n ? this._processLevel(breadcrumb.level)\n : undefined,\n data: breadcrumb.data\n ? this._serializeObject(breadcrumb.data)\n : undefined,\n });\n },\n\n /**\n * Clears breadcrumbs on the native scope.\n */\n clearBreadcrumbs(): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n RNSentry.clearBreadcrumbs();\n },\n\n /**\n * Sets context on the native scope. Not implemented in Android yet.\n * @param key string\n * @param context key-value map\n */\n setContext(key: string, context: { [key: string]: unknown } | null): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n RNSentry.setContext(\n key,\n context !== null ? this._serializeObject(context) : null\n );\n },\n\n /**\n * Closes the Native Layer SDK\n */\n async closeNativeSdk(): Promise<void> {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n return;\n }\n\n return RNSentry.closeNativeSdk().then(() => {\n this.enableNative = false;\n });\n },\n\n disableNativeFramesTracking(): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n return;\n }\n\n RNSentry.disableNativeFramesTracking();\n },\n\n isNativeTransportAvailable(): boolean {\n return this.enableNative && this._isModuleLoaded(RNSentry);\n },\n\n /**\n * Gets the event from envelopeItem and applies the level filter to the selected event.\n * @param data An envelope item containing the event.\n * @returns The event from envelopeItem or undefined.\n */\n _getEvent(envelopeItem: EventItem | AttachmentItem | UserFeedbackItem | SessionItem | ClientReportItem): Event | undefined {\n if (envelopeItem[0].type == 'event' || envelopeItem[0].type == 'transaction') {\n return this._processLevels(envelopeItem[1] as Event);\n }\n return undefined;\n },\n\n /**\n * Serializes all values of root-level keys into strings.\n * @param data key-value map.\n * @returns An object where all root-level values are strings.\n */\n _serializeObject(data: {\n [key: string]: unknown;\n }): { [key: string]: string } {\n const serialized: { [key: string]: string } = {};\n\n Object.keys(data).forEach((dataKey) => {\n const value = data[dataKey];\n serialized[dataKey] =\n typeof value === 'string' ? value : JSON.stringify(value);\n });\n\n return serialized;\n },\n\n /**\n * Convert js severity level in event.level and event.breadcrumbs to more widely supported levels.\n * @param event\n * @returns Event with more widely supported Severity level strings\n */\n\n _processLevels(event: Event): Event {\n const processed: Event = {\n ...event,\n level: event.level ? this._processLevel(event.level) : undefined,\n breadcrumbs: event.breadcrumbs?.map((breadcrumb) => ({\n ...breadcrumb,\n level: breadcrumb.level\n ? this._processLevel(breadcrumb.level)\n : undefined,\n })),\n };\n\n return processed;\n },\n\n /**\n * Convert js severity level which has critical and log to more widely supported levels.\n * @param level\n * @returns More widely supported Severity level strings\n */\n\n _processLevel(level: SeverityLevel): SeverityLevel {\n if (level == 'log' as SeverityLevel) {\n return 'debug' as SeverityLevel;\n }\n else if (level == 'critical' as SeverityLevel) {\n return 'fatal' as SeverityLevel;\n }\n\n\n return level;\n },\n\n /**\n * Checks whether the RNSentry module is loaded.\n */\n _isModuleLoaded(\n module: SentryNativeBridgeModule | undefined\n ): module is SentryNativeBridgeModule {\n return !!module;\n },\n\n _DisabledNativeError: new SentryError('Native is disabled'),\n\n _NativeClientError: new SentryError(\n \"Native Client is not available, can't start on native.\"\n ),\n\n enableNative: true,\n nativeIsReady: false,\n platform: Platform.OS,\n};\n"]}
1
+ {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../src/js/wrapper.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable max-lines */\nimport {\n BaseEnvelopeItemHeaders,\n Breadcrumb,\n Envelope,\n EnvelopeItem,\n Event,\n Package,\n SeverityLevel,\n User,\n} from '@sentry/types';\nimport { logger, normalize, SentryError } from '@sentry/utils';\nimport { NativeModules, Platform , TurboModuleRegistry } from 'react-native';\n\nimport { isHardCrash } from './misc';\nimport {\n NativeAppStartResponse,\n NativeDeviceContextsResponse,\n NativeFramesResponse,\n NativeReleaseResponse,\n NativeScreenshot,\n Spec,\n} from './NativeRNSentry';\nimport { ReactNativeOptions } from './options';\nimport { RequiredKeysUser } from './user';\nimport { isTurboModuleEnabled } from './utils/environment'\nimport { utf8ToBytes } from './vendor';\n\nconst RNSentry: Spec | undefined = isTurboModuleEnabled()\n ? TurboModuleRegistry.getEnforcing<Spec>('RNSentry')\n : NativeModules.RNSentry;\n\nexport interface Screenshot {\n data: Uint8Array;\n contentType: string;\n filename: string;\n}\n\ninterface SentryNativeWrapper {\n enableNative: boolean;\n nativeIsReady: boolean;\n platform: typeof Platform.OS;\n\n _NativeClientError: Error;\n _DisabledNativeError: Error;\n\n _processItem(envelopeItem: EnvelopeItem): EnvelopeItem;\n _processLevels(event: Event): Event;\n _processLevel(level: SeverityLevel): SeverityLevel;\n _serializeObject(data: { [key: string]: unknown }): { [key: string]: string };\n _isModuleLoaded(\n module: Spec | undefined\n ): module is Spec;\n _getBreadcrumbs(event: Event): Breadcrumb[] | undefined;\n\n isNativeTransportAvailable(): boolean;\n\n initNativeSdk(options: ReactNativeOptions): PromiseLike<boolean>;\n closeNativeSdk(): PromiseLike<void>;\n\n sendEnvelope(envelope: Envelope): Promise<void>;\n captureScreenshot(): Promise<Screenshot[] | null>;\n\n fetchNativeRelease(): PromiseLike<NativeReleaseResponse>;\n fetchNativeDeviceContexts(): PromiseLike<NativeDeviceContextsResponse>;\n fetchNativeAppStart(): PromiseLike<NativeAppStartResponse | null>;\n fetchNativeFrames(): PromiseLike<NativeFramesResponse | null>;\n fetchNativeSdkInfo(): PromiseLike<Package | null>;\n\n disableNativeFramesTracking(): void;\n enableNativeFramesTracking(): void;\n\n addBreadcrumb(breadcrumb: Breadcrumb): void;\n setContext(key: string, context: { [key: string]: unknown } | null): void;\n clearBreadcrumbs(): void;\n setExtra(key: string, extra: unknown): void;\n setUser(user: User | null): void;\n setTag(key: string, value: string): void;\n\n nativeCrash(): void;\n\n fetchModules(): Promise<Record<string, string> | null>;\n}\n\n/**\n * Our internal interface for calling native functions\n */\nexport const NATIVE: SentryNativeWrapper = {\n async fetchModules(): Promise<Record<string, string> | null> {\n if (!this.enableNative) {\n throw this._DisabledNativeError;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n const raw = await RNSentry.fetchModules();\n if (raw) {\n return JSON.parse(raw);\n }\n return null;\n },\n /**\n * Sending the envelope over the bridge to native\n * @param envelope Envelope\n */\n async sendEnvelope(envelope: Envelope): Promise<void> {\n if (!this.enableNative) {\n logger.warn('Event was skipped as native SDK is not enabled.');\n return;\n }\n\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n const [EOL] = utf8ToBytes('\\n');\n\n const [envelopeHeader, envelopeItems] = envelope;\n\n const headerString = JSON.stringify(envelopeHeader);\n let envelopeBytes: number[] = utf8ToBytes(headerString);\n envelopeBytes.push(EOL);\n\n let hardCrashed: boolean = false;\n for (const rawItem of envelopeItems) {\n const [itemHeader, itemPayload] = this._processItem(rawItem);\n\n let bytesContentType: string;\n let bytesPayload: number[] = [];\n if (typeof itemPayload === 'string') {\n bytesContentType = 'text/plain';\n bytesPayload = utf8ToBytes(itemPayload);\n } else if (itemPayload instanceof Uint8Array) {\n bytesContentType = typeof itemHeader.content_type === 'string'\n ? itemHeader.content_type\n : 'application/octet-stream';\n bytesPayload = [...itemPayload];\n } else {\n bytesContentType = 'application/json';\n bytesPayload = utf8ToBytes(JSON.stringify(itemPayload));\n if (!hardCrashed) {\n hardCrashed = isHardCrash(itemPayload);\n }\n }\n\n // Content type is not inside BaseEnvelopeItemHeaders.\n (itemHeader as BaseEnvelopeItemHeaders).content_type = bytesContentType;\n (itemHeader as BaseEnvelopeItemHeaders).length = bytesPayload.length;\n const serializedItemHeader = JSON.stringify(itemHeader);\n\n envelopeBytes.push(...utf8ToBytes(serializedItemHeader));\n envelopeBytes.push(EOL);\n envelopeBytes = envelopeBytes.concat(bytesPayload);\n envelopeBytes.push(EOL);\n }\n\n await RNSentry.captureEnvelope(envelopeBytes, { store: hardCrashed });\n },\n\n /**\n * Starts native with the provided options.\n * @param options ReactNativeOptions\n */\n async initNativeSdk(originalOptions: ReactNativeOptions): Promise<boolean> {\n const options = {\n enableNative: true,\n autoInitializeNativeSdk: true,\n ...originalOptions,\n };\n\n if (!options.enableNative) {\n if (options.enableNativeNagger) {\n logger.warn('Note: Native Sentry SDK is disabled.');\n }\n this.enableNative = false;\n return false;\n }\n if (!options.autoInitializeNativeSdk) {\n if (options.enableNativeNagger) {\n logger.warn(\n 'Note: Native Sentry SDK was not initialized automatically, you will need to initialize it manually. If you wish to disable the native SDK and get rid of this warning, pass enableNative: false'\n );\n }\n return false;\n }\n\n if (!options.dsn) {\n logger.warn(\n 'Warning: No DSN was provided. The Sentry SDK will be disabled. Native SDK will also not be initalized.'\n );\n return false;\n }\n\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n // filter out all the options that would crash native.\n /* eslint-disable @typescript-eslint/unbound-method,@typescript-eslint/no-unused-vars */\n const {\n beforeSend,\n beforeBreadcrumb,\n integrations,\n ...filteredOptions\n } = options;\n /* eslint-enable @typescript-eslint/unbound-method,@typescript-eslint/no-unused-vars */\n const nativeIsReady = await RNSentry.initNativeSdk(filteredOptions);\n\n this.nativeIsReady = nativeIsReady;\n\n return nativeIsReady;\n },\n\n /**\n * Fetches the release from native\n */\n async fetchNativeRelease(): Promise<NativeReleaseResponse> {\n if (!this.enableNative) {\n throw this._DisabledNativeError;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n return RNSentry.fetchNativeRelease();\n },\n\n /**\n * Fetches the Sdk info for the native sdk.\n * NOTE: Only available on iOS.\n */\n async fetchNativeSdkInfo(): Promise<Package | null> {\n if (!this.enableNative) {\n throw this._DisabledNativeError;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n if (this.platform !== 'ios') {\n return null;\n }\n\n return RNSentry.fetchNativeSdkInfo();\n },\n\n /**\n * Fetches the device contexts. Not used on Android.\n */\n async fetchNativeDeviceContexts(): Promise<NativeDeviceContextsResponse> {\n if (!this.enableNative) {\n throw this._DisabledNativeError;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n if (this.platform !== 'ios') {\n // Only ios uses deviceContexts, return an empty object.\n return {};\n }\n\n return RNSentry.fetchNativeDeviceContexts();\n },\n\n async fetchNativeAppStart(): Promise<NativeAppStartResponse | null> {\n if (!this.enableNative) {\n throw this._DisabledNativeError;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n return RNSentry.fetchNativeAppStart();\n },\n\n async fetchNativeFrames(): Promise<NativeFramesResponse | null> {\n if (!this.enableNative) {\n throw this._DisabledNativeError;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n return RNSentry.fetchNativeFrames();\n },\n\n /**\n * Triggers a native crash.\n * Use this only for testing purposes.\n */\n nativeCrash(): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n RNSentry.crash();\n },\n\n /**\n * Sets the user in the native scope.\n * Passing null clears the user.\n */\n setUser(user: User | null): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n // separate and serialize all non-default user keys.\n let userKeys = null;\n let userDataKeys = null;\n if (user) {\n const { id, ip_address, email, username, segment, ...otherKeys } = user;\n const requiredUser: RequiredKeysUser = {\n id,\n ip_address,\n email,\n username,\n segment,\n };\n userKeys = this._serializeObject(requiredUser);\n userDataKeys = this._serializeObject(otherKeys);\n }\n\n RNSentry.setUser(userKeys, userDataKeys);\n },\n\n /**\n * Sets a tag in the native module.\n * @param key string\n * @param value string\n */\n setTag(key: string, value: string): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n const stringifiedValue =\n typeof value === 'string' ? value : JSON.stringify(value);\n\n RNSentry.setTag(key, stringifiedValue);\n },\n\n /**\n * Sets an extra in the native scope, will stringify\n * extra value if it isn't already a string.\n * @param key string\n * @param extra any\n */\n setExtra(key: string, extra: unknown): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n // we stringify the extra as native only takes in strings.\n const stringifiedExtra =\n typeof extra === 'string' ? extra : JSON.stringify(extra);\n\n RNSentry.setExtra(key, stringifiedExtra);\n },\n\n /**\n * Adds breadcrumb to the native scope.\n * @param breadcrumb Breadcrumb\n */\n addBreadcrumb(breadcrumb: Breadcrumb): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n RNSentry.addBreadcrumb({\n ...breadcrumb,\n // Process and convert deprecated levels\n level: breadcrumb.level\n ? this._processLevel(breadcrumb.level)\n : undefined,\n data: breadcrumb.data\n ? normalize(breadcrumb.data)\n : undefined,\n });\n },\n\n /**\n * Clears breadcrumbs on the native scope.\n */\n clearBreadcrumbs(): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n RNSentry.clearBreadcrumbs();\n },\n\n /**\n * Sets context on the native scope. Not implemented in Android yet.\n * @param key string\n * @param context key-value map\n */\n setContext(key: string, context: { [key: string]: unknown } | null): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n RNSentry.setContext(\n key,\n context !== null ? normalize(context) : null\n );\n },\n\n /**\n * Closes the Native Layer SDK\n */\n async closeNativeSdk(): Promise<void> {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n return;\n }\n\n return RNSentry.closeNativeSdk().then(() => {\n this.enableNative = false;\n });\n },\n\n disableNativeFramesTracking(): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n return;\n }\n\n RNSentry.disableNativeFramesTracking();\n },\n\n enableNativeFramesTracking(): void {\n if (!this.enableNative) {\n return;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n return;\n }\n\n RNSentry.enableNativeFramesTracking();\n },\n\n isNativeTransportAvailable(): boolean {\n return this.enableNative && this._isModuleLoaded(RNSentry);\n },\n\n async captureScreenshot(): Promise<Screenshot[] | null> {\n if (!this.enableNative) {\n throw this._DisabledNativeError;\n }\n if (!this._isModuleLoaded(RNSentry)) {\n throw this._NativeClientError;\n }\n\n try {\n const raw = await RNSentry.captureScreenshot();\n return raw.map((item: NativeScreenshot) => ({\n ...item,\n data: new Uint8Array(item.data),\n }));\n } catch (e) {\n logger.warn('Failed to capture screenshot', e);\n return null;\n }\n },\n\n /**\n * Gets the event from envelopeItem and applies the level filter to the selected event.\n * @param data An envelope item containing the event.\n * @returns The event from envelopeItem or undefined.\n */\n _processItem(item: EnvelopeItem): EnvelopeItem {\n const [itemHeader, itemPayload] = item;\n\n if (itemHeader.type == 'event' || itemHeader.type == 'transaction') {\n const event = this._processLevels(itemPayload as Event);\n\n if (NATIVE.platform === 'android') {\n if ('message' in event) {\n // @ts-ignore Android still uses the old message object, without this the serialization of events will break.\n event.message = { message: event.message };\n }\n event.breadcrumbs = this._getBreadcrumbs(event);\n }\n\n return [itemHeader, event];\n }\n\n return item;\n },\n\n /**\n * Serializes all values of root-level keys into strings.\n * @param data key-value map.\n * @returns An object where all root-level values are strings.\n */\n _serializeObject(data: {\n [key: string]: unknown;\n }): { [key: string]: string } {\n const serialized: { [key: string]: string } = {};\n\n Object.keys(data).forEach((dataKey) => {\n const value = data[dataKey];\n serialized[dataKey] =\n typeof value === 'string' ? value : JSON.stringify(value);\n });\n\n return serialized;\n },\n\n /**\n * Convert js severity level in event.level and event.breadcrumbs to more widely supported levels.\n * @param event\n * @returns Event with more widely supported Severity level strings\n */\n\n _processLevels(event: Event): Event {\n const processed: Event = {\n ...event,\n level: event.level ? this._processLevel(event.level) : undefined,\n breadcrumbs: event.breadcrumbs?.map((breadcrumb) => ({\n ...breadcrumb,\n level: breadcrumb.level\n ? this._processLevel(breadcrumb.level)\n : undefined,\n })),\n };\n\n return processed;\n },\n\n /**\n * Convert js severity level which has critical and log to more widely supported levels.\n * @param level\n * @returns More widely supported Severity level strings\n */\n\n _processLevel(level: SeverityLevel): SeverityLevel {\n if (level == 'log' as SeverityLevel) {\n return 'debug' as SeverityLevel;\n }\n else if (level == 'critical' as SeverityLevel) {\n return 'fatal' as SeverityLevel;\n }\n\n\n return level;\n },\n\n /**\n * Checks whether the RNSentry module is loaded.\n */\n _isModuleLoaded(\n module: Spec | undefined\n ): module is Spec {\n return !!module;\n },\n\n _DisabledNativeError: new SentryError('Native is disabled'),\n\n _NativeClientError: new SentryError(\n \"Native Client is not available, can't start on native.\"\n ),\n\n /**\n * Get breadcrumbs (removes breadcrumbs from handled exceptions on Android)\n *\n * We do this to avoid duplicate breadcrumbs on Android as sentry-android applies the breadcrumbs\n * from the native scope onto every envelope sent through it. This scope will contain the breadcrumbs\n * sent through the scope sync feature. This causes duplicate breadcrumbs.\n * We then remove the breadcrumbs in all cases but if it is handled == false,\n * this is a signal that the app would crash and android would lose the breadcrumbs by the time the app is restarted to read\n * the envelope.\n */\n _getBreadcrumbs(event: Event): Breadcrumb[] | undefined {\n let breadcrumbs: Breadcrumb[] | undefined = event.breadcrumbs;\n\n const hardCrashed = isHardCrash(event);\n if (NATIVE.platform === 'android'\n && event.breadcrumbs\n && !hardCrashed) {\n breadcrumbs = [];\n }\n\n return breadcrumbs;\n },\n\n enableNative: true,\n nativeIsReady: false,\n platform: Platform.OS,\n};\n"]}
@@ -7,8 +7,14 @@
7
7
  #endif
8
8
 
9
9
  #import <Sentry/Sentry.h>
10
+ #import <Sentry/PrivateSentrySDKOnly.h>
10
11
  #import <Sentry/SentryScreenFrames.h>
11
12
 
13
+ // Thanks to this guard, we won't import this header when we build for the old architecture.
14
+ #ifdef RCT_NEW_ARCH_ENABLED
15
+ #import "RNSentrySpec.h"
16
+ #endif
17
+
12
18
  @interface SentryTraceContext : NSObject
13
19
  - (nullable instancetype)initWithDict:(NSDictionary<NSString *, id> *)dictionary;
14
20
  @end
@@ -25,7 +31,6 @@ static bool didFetchAppStart;
25
31
 
26
32
  @implementation RNSentry {
27
33
  bool sentHybridSdkDidBecomeActive;
28
- SentryOptions *sentryOptions;
29
34
  }
30
35
 
31
36
  - (dispatch_queue_t)methodQueue
@@ -39,11 +44,6 @@ static bool didFetchAppStart;
39
44
 
40
45
  RCT_EXPORT_MODULE()
41
46
 
42
- - (NSDictionary<NSString *, id> *)constantsToExport
43
- {
44
- return @{@"nativeClientAvailable": @YES, @"nativeTransport": @YES};
45
- }
46
-
47
47
  RCT_EXPORT_METHOD(initNativeSdk:(NSDictionary *_Nonnull)options
48
48
  resolve:(RCTPromiseResolveBlock)resolve
49
49
  rejecter:(RCTPromiseRejectBlock)reject)
@@ -73,7 +73,7 @@ RCT_EXPORT_METHOD(initNativeSdk:(NSDictionary *_Nonnull)options
73
73
  [mutableOptions removeObjectForKey:@"tracesSampleRate"];
74
74
  [mutableOptions removeObjectForKey:@"tracesSampler"];
75
75
 
76
- sentryOptions = [[SentryOptions alloc] initWithDict:mutableOptions didFailWithError:&error];
76
+ SentryOptions *sentryOptions = [[SentryOptions alloc] initWithDict:mutableOptions didFailWithError:&error];
77
77
  if (error) {
78
78
  reject(@"SentryReactNative", error.localizedDescription, error);
79
79
  return;
@@ -108,7 +108,7 @@ RCT_EXPORT_METHOD(initNativeSdk:(NSDictionary *_Nonnull)options
108
108
  #endif
109
109
 
110
110
  // If the app is active/in foreground, and we have not sent the SentryHybridSdkDidBecomeActive notification, send it.
111
- if (appIsActive && !sentHybridSdkDidBecomeActive && (sentryOptions.enableAutoSessionTracking || sentryOptions.enableOutOfMemoryTracking)) {
111
+ if (appIsActive && !sentHybridSdkDidBecomeActive && (PrivateSentrySDKOnly.options.enableAutoSessionTracking || PrivateSentrySDKOnly.options.enableOutOfMemoryTracking)) {
112
112
  [[NSNotificationCenter defaultCenter]
113
113
  postNotificationName:@"SentryHybridSdkDidBecomeActive"
114
114
  object:nil];
@@ -155,16 +155,22 @@ RCT_EXPORT_METHOD(initNativeSdk:(NSDictionary *_Nonnull)options
155
155
  RCT_EXPORT_METHOD(fetchNativeSdkInfo:(RCTPromiseResolveBlock)resolve
156
156
  rejecter:(RCTPromiseRejectBlock)reject)
157
157
  {
158
- if (sentryOptions == nil) {
159
- return reject(@"SentryReactNative",@"Called fetchNativeSdkInfo without initializing the SDK first.", nil);
160
- }
161
-
162
158
  resolve(@{
163
- @"name": sentryOptions.sdkInfo.name,
164
- @"version": sentryOptions.sdkInfo.version
159
+ @"name": PrivateSentrySDKOnly.getSdkName,
160
+ @"version": PrivateSentrySDKOnly.getSdkVersionString
165
161
  });
166
162
  }
167
163
 
164
+ RCT_EXPORT_METHOD(fetchModules:(RCTPromiseResolveBlock)resolve
165
+ rejecter:(RCTPromiseRejectBlock)reject)
166
+ {
167
+ NSString *filePath = [[NSBundle mainBundle] pathForResource:@"modules" ofType:@"json"];
168
+ NSString* modulesString = [NSString stringWithContentsOfFile:filePath
169
+ encoding:NSUTF8StringEncoding
170
+ error:nil];
171
+ resolve(modulesString);
172
+ }
173
+
168
174
  RCT_EXPORT_METHOD(fetchNativeDeviceContexts:(RCTPromiseResolveBlock)resolve
169
175
  rejecter:(RCTPromiseRejectBlock)reject)
170
176
  {
@@ -190,7 +196,7 @@ RCT_EXPORT_METHOD(fetchNativeDeviceContexts:(RCTPromiseResolveBlock)resolve
190
196
  if (tempContexts != nil) {
191
197
  [contexts setValue:tempContexts forKey:@"context"];
192
198
  }
193
- if (sentryOptions != nil && sentryOptions.debug) {
199
+ if (PrivateSentrySDKOnly.options.debug) {
194
200
  NSData *data = [NSJSONSerialization dataWithJSONObject:contexts options:0 error:nil];
195
201
  NSString *debugContext = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
196
202
  NSLog(@"Contexts: %@", debugContext);
@@ -270,67 +276,85 @@ RCT_EXPORT_METHOD(fetchNativeRelease:(RCTPromiseResolveBlock)resolve
270
276
  });
271
277
  }
272
278
 
273
- RCT_EXPORT_METHOD(captureEnvelope:(NSDictionary * _Nonnull)envelopeDict
279
+ RCT_EXPORT_METHOD(captureEnvelope:(NSArray * _Nonnull)bytes
280
+ options: (NSDictionary * _Nonnull)options
274
281
  resolve:(RCTPromiseResolveBlock)resolve
275
282
  rejecter:(RCTPromiseRejectBlock)reject)
276
283
  {
277
- if ([NSJSONSerialization isValidJSONObject:envelopeDict]) {
278
- SentrySdkInfo *sdkInfo = [[SentrySdkInfo alloc] initWithDict:envelopeDict[@"header"]];
279
- SentryId *eventId = [[SentryId alloc] initWithUUIDString:envelopeDict[@"header"][@"event_id"]];
280
- SentryTraceContext *traceContext = [[SentryTraceContext alloc] initWithDict:envelopeDict[@"header"][@"trace"]];
281
- SentryEnvelopeHeader *envelopeHeader = [[SentryEnvelopeHeader alloc] initWithId:eventId sdkInfo:sdkInfo traceContext:traceContext];
282
-
283
- NSError *error;
284
- NSData *envelopeItemData = [NSJSONSerialization dataWithJSONObject:envelopeDict[@"payload"] options:0 error:&error];
285
- if (nil != error) {
286
- reject(@"SentryReactNative", @"Cannot serialize event", error);
287
- }
284
+ NSMutableData *data = [[NSMutableData alloc] initWithCapacity: [bytes count]];
285
+ for(NSNumber *number in bytes) {
286
+ char byte = [number charValue];
287
+ [data appendBytes: &byte length: 1];
288
+ }
288
289
 
289
- NSString *itemType = envelopeDict[@"payload"][@"type"];
290
- if (itemType == nil) {
291
- // Default to event type.
292
- itemType = @"event";
293
- }
290
+ SentryEnvelope *envelope = [PrivateSentrySDKOnly envelopeWithData:data];
291
+ if (envelope == nil) {
292
+ reject(@"SentryReactNative",@"Failed to parse envelope from byte array.", nil);
293
+ return;
294
+ }
294
295
 
295
- SentryEnvelopeItemHeader *envelopeItemHeader = [[SentryEnvelopeItemHeader alloc] initWithType:itemType length:envelopeItemData.length];
296
- SentryEnvelopeItem *envelopeItem = [[SentryEnvelopeItem alloc] initWithHeader:envelopeItemHeader data:envelopeItemData];
296
+ #if DEBUG
297
+ [PrivateSentrySDKOnly captureEnvelope:envelope];
298
+ #else
299
+ if (options[@'store']) {
300
+ // Storing to disk happens asynchronously with captureEnvelope
301
+ [PrivateSentrySDKOnly storeEnvelope:envelope];
302
+ } else {
303
+ [PrivateSentrySDKOnly captureEnvelope:envelope];
304
+ }
305
+ #endif
306
+ resolve(@YES);
307
+ }
297
308
 
298
- SentryEnvelope *envelope = [[SentryEnvelope alloc] initWithHeader:envelopeHeader singleItem:envelopeItem];
309
+ RCT_EXPORT_METHOD(captureScreenshot: (RCTPromiseResolveBlock)resolve
310
+ rejecter: (RCTPromiseRejectBlock)reject)
311
+ {
312
+ NSArray<NSData *>* rawScreenshots = [PrivateSentrySDKOnly captureScreenshots];
313
+ NSMutableArray *screenshotsArray = [NSMutableArray arrayWithCapacity:[rawScreenshots count]];
314
+
315
+ int counter = 1;
316
+ for (NSData* raw in rawScreenshots) {
317
+ NSMutableArray *screenshot = [NSMutableArray arrayWithCapacity:raw.length];
318
+ const char *bytes = (char*) [raw bytes];
319
+ for (int i = 0; i < [raw length]; i++) {
320
+ [screenshot addObject:[[NSNumber alloc] initWithChar:bytes[i]]];
321
+ }
299
322
 
300
- #if DEBUG
301
- [PrivateSentrySDKOnly captureEnvelope:envelope];
302
- #else
303
- if ([envelopeDict[@"payload"][@"level"] isEqualToString:@"fatal"]) {
304
- // Storing to disk happens asynchronously with captureEnvelope
305
- [PrivateSentrySDKOnly storeEnvelope:envelope];
306
- } else {
307
- [PrivateSentrySDKOnly captureEnvelope:envelope];
308
- }
309
- #endif
310
- resolve(@YES);
311
- } else {
312
- reject(@"SentryReactNative", @"Cannot serialize event", nil);
323
+ NSString* filename = @"screenshot.png";
324
+ if (counter > 1) {
325
+ filename = [NSString stringWithFormat:@"screenshot-%d.png", counter];
326
+ }
327
+ [screenshotsArray addObject:@{
328
+ @"data": screenshot,
329
+ @"contentType": @"image/png",
330
+ @"filename": filename,
331
+ }];
332
+ counter++;
313
333
  }
334
+
335
+ resolve(screenshotsArray);
314
336
  }
315
337
 
316
- RCT_EXPORT_METHOD(setUser:(NSDictionary *)user
317
- otherUserKeys:(NSDictionary *)otherUserKeys
338
+ RCT_EXPORT_METHOD(setUser:(NSDictionary *)userKeys
339
+ otherUserKeys:(NSDictionary *)userDataKeys
318
340
  )
319
341
  {
320
342
  [SentrySDK configureScope:^(SentryScope * _Nonnull scope) {
321
- if (nil == user && nil == otherUserKeys) {
343
+ if (nil == userKeys && nil == userDataKeys) {
322
344
  [scope setUser:nil];
323
345
  } else {
324
346
  SentryUser* userInstance = [[SentryUser alloc] init];
325
347
 
326
- if (nil != user) {
327
- [userInstance setUserId:user[@"id"]];
328
- [userInstance setEmail:user[@"email"]];
329
- [userInstance setUsername:user[@"username"]];
348
+ if (nil != userKeys) {
349
+ [userInstance setUserId:userKeys[@"id"]];
350
+ [userInstance setIpAddress:userKeys[@"ip_address"]];
351
+ [userInstance setEmail:userKeys[@"email"]];
352
+ [userInstance setUsername:userKeys[@"username"]];
353
+ [userInstance setSegment:userKeys[@"segment"]];
330
354
  }
331
355
 
332
- if (nil != otherUserKeys) {
333
- [userInstance setData:otherUserKeys];
356
+ if (nil != userDataKeys) {
357
+ [userInstance setData:userDataKeys];
334
358
  }
335
359
 
336
360
  [scope setUser:userInstance];
@@ -420,4 +444,21 @@ RCT_EXPORT_METHOD(disableNativeFramesTracking)
420
444
  // Do nothing on iOS, this bridge method only has an effect on android.
421
445
  }
422
446
 
447
+ RCT_EXPORT_METHOD(enableNativeFramesTracking)
448
+ {
449
+ // Do nothing on iOS, this bridge method only has an effect on android.
450
+ // If you're starting the Cocoa SDK manually,
451
+ // you can set the 'enableAutoPerformanceTracking: true' option and
452
+ // the 'tracesSampleRate' or 'tracesSampler' option.
453
+ }
454
+
455
+ // Thanks to this guard, we won't compile this code when we build for the old architecture.
456
+ #ifdef RCT_NEW_ARCH_ENABLED
457
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
458
+ (const facebook::react::ObjCTurboModule::InitParams &)params
459
+ {
460
+ return std::make_shared<facebook::react::NativeRNSentrySpecJSI>(params);
461
+ }
462
+ #endif
463
+
423
464
  @end
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@sentry/react-native",
3
3
  "homepage": "https://github.com/getsentry/sentry-react-native",
4
4
  "repository": "https://github.com/getsentry/sentry-react-native",
5
- "version": "5.0.0-alpha.1",
5
+ "version": "5.0.0-alpha.11",
6
6
  "description": "Official Sentry SDK for react-native",
7
7
  "typings": "dist/js/index.d.ts",
8
8
  "types": "dist/js/index.d.ts",
@@ -11,11 +11,13 @@
11
11
  },
12
12
  "main": "dist/js/index.js",
13
13
  "scripts": {
14
- "build": "tsc -p tsconfig.build.json",
15
- "build:watch": "tsc -p tsconfig.build.json -w --preserveWatchOutput",
14
+ "build": "yarn build:sdk && yarn build:tools",
15
+ "build:sdk": "tsc -p tsconfig.build.json",
16
+ "build:sdk:watch": "tsc -p tsconfig.build.json -w --preserveWatchOutput",
17
+ "build:tools": "tsc -p tsconfig.build.tools.json",
16
18
  "clean": "rimraf dist coverage",
17
19
  "test": "jest",
18
- "lint": "eslint .",
20
+ "lint": "eslint --config .eslintrc.js .",
19
21
  "test:watch": "jest --watch",
20
22
  "run-ios": "cd sample && yarn react-native run-ios",
21
23
  "run-android": "cd sample && yarn react-native run-android"
@@ -36,36 +38,36 @@
36
38
  "When bumping make sure to update the version of react, i.e: https://github.com/facebook/react-native/blob/v0.56.0/package.json"
37
39
  ],
38
40
  "peerDependencies": {
39
- "react": ">=16.4.1",
40
- "react-native": ">=0.56.0"
41
+ "react": ">=17.0.0",
42
+ "react-native": ">=0.65.0"
41
43
  },
42
44
  "dependencies": {
43
- "@sentry/browser": "7.7.0",
44
- "@sentry/cli": "1.74.4",
45
- "@sentry/core": "7.7.0",
46
- "@sentry/hub": "7.7.0",
47
- "@sentry/integrations": "7.7.0",
48
- "@sentry/react": "7.7.0",
49
- "@sentry/tracing": "7.7.0",
50
- "@sentry/types": "7.7.0",
51
- "@sentry/utils": "7.7.0",
52
- "@sentry/wizard": "2.0.0"
45
+ "@sentry/browser": "7.29.0",
46
+ "@sentry/cli": "2.10.0",
47
+ "@sentry/core": "7.29.0",
48
+ "@sentry/hub": "7.29.0",
49
+ "@sentry/integrations": "7.29.0",
50
+ "@sentry/react": "7.29.0",
51
+ "@sentry/tracing": "7.29.0",
52
+ "@sentry/types": "7.29.0",
53
+ "@sentry/utils": "7.29.0"
53
54
  },
54
55
  "devDependencies": {
55
- "@sentry-internal/eslint-config-sdk": "7.7.0",
56
- "@sentry-internal/eslint-plugin-sdk": "7.7.0",
56
+ "@sentry-internal/eslint-config-sdk": "7.29.0",
57
+ "@sentry-internal/eslint-plugin-sdk": "7.29.0",
57
58
  "@sentry/typescript": "^5.20.1",
59
+ "@sentry/wizard": "2.2.0",
58
60
  "@types/jest": "^26.0.15",
59
- "@types/react": "^16.9.49",
60
- "@types/react-native": "^0.66.11",
61
+ "@types/react": "^18.0.25",
62
+ "@types/react-native": "^0.70.6",
61
63
  "babel-jest": "^26.1.0",
62
64
  "eslint": "^7.6.0",
63
65
  "eslint-plugin-react": "^7.20.6",
64
66
  "eslint-plugin-react-native": "^3.8.1",
65
67
  "jest": "^24.9.0",
66
68
  "prettier": "^2.0.5",
67
- "react": ">=16.4.1",
68
- "react-native": ">=0.56.0",
69
+ "react": "^18.2.0",
70
+ "react-native": "^0.70.5",
69
71
  "replace-in-file": "^6.0.0",
70
72
  "rimraf": "^3.0.0",
71
73
  "ts-jest": "^24.3.0",
@@ -82,10 +84,6 @@
82
84
  "jest": {
83
85
  "collectCoverage": true,
84
86
  "preset": "react-native",
85
- "transform": {
86
- "^.+\\.(tsx)$": "<rootDir>/node_modules/react-native/jest/preprocessor.js",
87
- "^.+\\.(ts|tsx)$": "ts-jest"
88
- },
89
87
  "globals": {
90
88
  "__DEV__": true,
91
89
  "ts-jest": {
@@ -105,5 +103,13 @@
105
103
  "testMatch": [
106
104
  "**/*.test.(ts|tsx)"
107
105
  ]
106
+ },
107
+ "codegenConfig": {
108
+ "name": "RNSentrySpec",
109
+ "type": "modules",
110
+ "jsSrcsDir": "src",
111
+ "android": {
112
+ "javaPackageName": "io.sentry.react"
113
+ }
108
114
  }
109
115
  }
@@ -0,0 +1,10 @@
1
+ // Without this config the codegen fails
2
+ // because it can find @sentry/react-native
3
+ // in the dependencies
4
+ module.exports = {
5
+ dependencies: {
6
+ RNSentry: {
7
+ root: '../',
8
+ },
9
+ },
10
+ };
@@ -0,0 +1,43 @@
1
+ #!/bin/bash
2
+
3
+ # Print commands before executing them (useful for troubleshooting)
4
+ set -x
5
+
6
+ if [[ "$CONFIGURATION" = *Debug* ]]; then
7
+ echo "Debug build. Modules are not collected."
8
+ exit 0
9
+ fi
10
+
11
+ if [[ -z "$CONFIGURATION_BUILD_DIR" ]]; then
12
+ echo "Missing env CONFIGURATION_BUILD_DIR" 1>&2
13
+ exit 1
14
+ fi
15
+
16
+ if [[ -z "$UNLOCALIZED_RESOURCES_FOLDER_PATH" ]]; then
17
+ echo "Missing env UNLOCALIZED_RESOURCES_FOLDER_PATH" 1>&2
18
+ exit 1
19
+ fi
20
+
21
+ if [[ -z "$DERIVED_FILE_DIR" ]]; then
22
+ echo "Missing env DERIVED_FILE_DIR" 1>&2
23
+ exit 1
24
+ fi
25
+
26
+ nodePath="node"
27
+ thisFilePath=$(dirname $0)
28
+ collectModulesScript="$thisFilePath/../dist/js/tools/collectModules.js"
29
+
30
+ destination="$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH"
31
+ modulesOutput="$destination/modules.json"
32
+ if [[ -z "$SOURCE_MAP_PATH" ]]; then
33
+ sourceMap="$DERIVED_FILE_DIR/main.jsbundle.map"
34
+ else
35
+ sourceMap="$SOURCE_MAP_PATH"
36
+ fi
37
+ if [[ -z "$MODULES_PATHS" ]]; then
38
+ modulesPaths="$PWD/../node_modules"
39
+ else
40
+ modulesPaths="$MODULES_PATHS"
41
+ fi
42
+
43
+ $nodePath "$collectModulesScript" "$sourceMap" "$modulesOutput" "$modulesPaths"
package/sentry.gradle CHANGED
@@ -41,6 +41,8 @@ gradle.projectsEvaluated {
41
41
  def bundleOutput
42
42
  def props = bundleTask.getProperties()
43
43
  def reactRoot = props.get("workingDir")
44
+ def modulesOutput = "$reactRoot/android/app/src/main/assets/modules.json"
45
+ def modulesTask = null
44
46
 
45
47
  (shouldCleanUp, bundleOutput, sourcemapOutput) = forceSourceMapOutputFromBundleTask(bundleTask)
46
48
 
@@ -60,6 +62,7 @@ gradle.projectsEvaluated {
60
62
  def previousCliTask = null
61
63
 
62
64
  def nameCleanup = "${bundleTask.name}_SentryUploadCleanUp"
65
+ def nameModulesCleanup = "${bundleTask.name}_SentryCollectModulesCleanUp"
63
66
  // Upload the source map several times if necessary: once for each release and versionCode.
64
67
  currentVariants.each { key, currentVariant ->
65
68
  variant = currentVariant[0]
@@ -68,18 +71,18 @@ gradle.projectsEvaluated {
68
71
 
69
72
  try {
70
73
  if (versionCode instanceof String) {
71
- versionCode = Integer.parseInt(versionCode);
74
+ versionCode = Integer.parseInt(versionCode)
75
+ versionCode = Math.abs(versionCode)
72
76
  }
73
77
  } catch (NumberFormatException e) {
74
- project.logger.info("versionCode: '$versionCode' isn't an Integer, but it must be.")
78
+ project.logger.info("versionCode: '$versionCode' isn't an Integer, using the plain value.")
75
79
  }
76
80
 
77
- def absVersionCode = Math.abs(versionCode)
78
-
79
81
  // The Sentry server distinguishes source maps by release (`--release` in the command
80
82
  // below) and distribution identifier (`--dist` below). Give the task a unique name
81
83
  // based on where we're uploading to.
82
- def nameCliTask = "${bundleTask.name}_SentryUpload_${releaseName}_${absVersionCode}"
84
+ def nameCliTask = "${bundleTask.name}_SentryUpload_${releaseName}_${versionCode}"
85
+ def nameModulesTask = "${bundleTask.name}_SentryCollectModules_${releaseName}_${versionCode}"
83
86
 
84
87
  // If several outputs have the same releaseName and versionCode, we'd do the exact same
85
88
  // upload for each of them. No need to repeat.
@@ -154,6 +157,34 @@ gradle.projectsEvaluated {
154
157
  enabled true
155
158
  }
156
159
 
160
+ modulesTask = tasks.create(nameModulesTask, Exec) {
161
+ description = "collect javascript modules from bundle source map"
162
+ group = 'sentry.io'
163
+
164
+ workingDir reactRoot
165
+
166
+ def collectModulesScript = config.collectModulesScript
167
+ ? file(config.collectModulesScript).getAbsolutePath()
168
+ : "$reactRoot/node_modules/@sentry/react-native/dist/js/tools/collectModules.js"
169
+ def modulesPaths = config.modulesPaths
170
+ ? config.modulesPaths.join(',')
171
+ : "$reactRoot/node_modules"
172
+ def args = ["node",
173
+ collectModulesScript,
174
+ sourcemapOutput,
175
+ modulesOutput,
176
+ modulesPaths
177
+ ]
178
+
179
+ project.logger.info("Sentry-CollectModules arguments: ${args}")
180
+ commandLine(*args)
181
+
182
+ def skip = config.skipCollectModules
183
+ ? config.skipCollectModules == true
184
+ : false
185
+ enabled !skip
186
+ }
187
+
157
188
  // chain the upload tasks so they run sequentially in order to run
158
189
  // the cliCleanUpTask after the final upload task is run
159
190
  if (previousCliTask != null) {
@@ -162,6 +193,25 @@ gradle.projectsEvaluated {
162
193
  bundleTask.finalizedBy cliTask
163
194
  }
164
195
  previousCliTask = cliTask
196
+ cliTask.finalizedBy modulesTask
197
+ }
198
+
199
+ def modulesCleanUpTask = tasks.create(name: nameModulesCleanup, type: Delete) {
200
+ description = "clean up collected modules generated file"
201
+ group = 'sentry.io'
202
+
203
+ delete modulesOutput
204
+ }
205
+
206
+ def variantTaskName = variant.replaceAll("[\\s\\-()]", "") // variant is dev-release beta-release etc.
207
+ // task.name could be packageDev-debugRelease but in that case currentVariants == null
208
+ // because of the regex in `extractCurrentVariants` and this code doesn't run
209
+ def packageTasks = tasks.findAll {
210
+ task -> "package${variantTaskName}".equalsIgnoreCase(task.name) && task.enabled
211
+ }
212
+ packageTasks.each { packageTask ->
213
+ packageTask.dependsOn modulesTask
214
+ packageTask.finalizedBy modulesCleanUpTask
165
215
  }
166
216
 
167
217
  /** Delete sourcemap files */
@@ -170,7 +220,8 @@ gradle.projectsEvaluated {
170
220
  group = 'sentry.io'
171
221
 
172
222
  delete sourcemapOutput
173
- delete "$buildDir/intermediates/assets/release/index.android.bundle.map" // react native default bundle dir
223
+ delete "$buildDir/intermediates/assets/release/index.android.bundle.map"
224
+ // react native default bundle dir
174
225
  }
175
226
 
176
227
  // register clean task extension