@nathanclaire/edge-telemetry-sdk 3.0.0 → 4.0.0

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 (298) hide show
  1. package/README.md +831 -186
  2. package/dist/appLifecycle-CECgRVu_.cjs +2 -0
  3. package/dist/appLifecycle-CECgRVu_.cjs.map +1 -0
  4. package/dist/appLifecycle-DQErzJIR.js +22 -0
  5. package/dist/appLifecycle-DQErzJIR.js.map +1 -0
  6. package/dist/batch-CwoO7noL.js +56 -0
  7. package/dist/batch-CwoO7noL.js.map +1 -0
  8. package/dist/batch-DNu8Xr9T.cjs +2 -0
  9. package/dist/batch-DNu8Xr9T.cjs.map +1 -0
  10. package/dist/crashCapture-BOJ8nSAZ.cjs +4 -0
  11. package/dist/crashCapture-BOJ8nSAZ.cjs.map +1 -0
  12. package/dist/crashCapture-BW8WuyaU.js +70 -0
  13. package/dist/crashCapture-BW8WuyaU.js.map +1 -0
  14. package/dist/crashHandler.web-8F_k2veo.js +29 -0
  15. package/dist/crashHandler.web-8F_k2veo.js.map +1 -0
  16. package/dist/crashHandler.web-CWmF56mJ.cjs +2 -0
  17. package/dist/crashHandler.web-CWmF56mJ.cjs.map +1 -0
  18. package/dist/crashHandlerNative.native-C2kSikDt.cjs +2 -0
  19. package/dist/crashHandlerNative.native-C2kSikDt.cjs.map +1 -0
  20. package/dist/crashHandlerNative.native-FupMnr1U.js +39 -0
  21. package/dist/crashHandlerNative.native-FupMnr1U.js.map +1 -0
  22. package/dist/deviceInfo.native-BJ-3Jj1T.js +53 -0
  23. package/dist/deviceInfo.native-BJ-3Jj1T.js.map +1 -0
  24. package/dist/deviceInfo.native-BoeTZcD6.cjs +2 -0
  25. package/dist/deviceInfo.native-BoeTZcD6.cjs.map +1 -0
  26. package/dist/deviceInfo.web-3L3IDQQA.cjs +2 -0
  27. package/dist/deviceInfo.web-3L3IDQQA.cjs.map +1 -0
  28. package/dist/deviceInfo.web-BFB1-pcA.js +41 -0
  29. package/dist/deviceInfo.web-BFB1-pcA.js.map +1 -0
  30. package/dist/frameTracker-CHG6sIx9.cjs +2 -0
  31. package/dist/frameTracker-CHG6sIx9.cjs.map +1 -0
  32. package/dist/frameTracker-DdB8W_kC.js +54 -0
  33. package/dist/frameTracker-DdB8W_kC.js.map +1 -0
  34. package/dist/httpAttributes-BrrtM8zh.js +70 -0
  35. package/dist/httpAttributes-BrrtM8zh.js.map +1 -0
  36. package/dist/httpAttributes-D0m6UID7.cjs +2 -0
  37. package/dist/httpAttributes-D0m6UID7.cjs.map +1 -0
  38. package/dist/index-BtLlV1HA.js +57 -0
  39. package/dist/index-BtLlV1HA.js.map +1 -0
  40. package/dist/{deviceInfo.native-D2k0LDhI.js → index-C2XQ-EYw.js} +362 -411
  41. package/dist/index-C2XQ-EYw.js.map +1 -0
  42. package/dist/index-CXsVZY35.cjs +2 -0
  43. package/dist/index-CXsVZY35.cjs.map +1 -0
  44. package/dist/index-DLquF88M.cjs +2 -0
  45. package/dist/index-DLquF88M.cjs.map +1 -0
  46. package/dist/index.native.cjs +1 -1
  47. package/dist/index.native.cjs.map +1 -1
  48. package/dist/index.native.js +94 -59
  49. package/dist/index.native.js.map +1 -1
  50. package/dist/index.web.cjs +1 -1
  51. package/dist/index.web.cjs.map +1 -1
  52. package/dist/index.web.js +88 -33
  53. package/dist/index.web.js.map +1 -1
  54. package/dist/interactionWeb.web-Bl_cZlgh.cjs +2 -0
  55. package/dist/interactionWeb.web-Bl_cZlgh.cjs.map +1 -0
  56. package/dist/interactionWeb.web-CJAviVQ7.js +109 -0
  57. package/dist/interactionWeb.web-CJAviVQ7.js.map +1 -0
  58. package/dist/interceptFetchWeb.web-T88kO-bE.cjs +2 -0
  59. package/dist/interceptFetchWeb.web-T88kO-bE.cjs.map +1 -0
  60. package/dist/interceptFetchWeb.web-UXC2Lb6X.js +61 -0
  61. package/dist/interceptFetchWeb.web-UXC2Lb6X.js.map +1 -0
  62. package/dist/interceptHttpNative.native-BVpFuoNB.cjs +2 -0
  63. package/dist/interceptHttpNative.native-BVpFuoNB.cjs.map +1 -0
  64. package/dist/interceptHttpNative.native-rX-lPNST.js +18 -0
  65. package/dist/interceptHttpNative.native-rX-lPNST.js.map +1 -0
  66. package/dist/loadingTime-Bhomd9qq.cjs +2 -0
  67. package/dist/loadingTime-Bhomd9qq.cjs.map +1 -0
  68. package/dist/loadingTime-ZkYvFijA.js +70 -0
  69. package/dist/loadingTime-ZkYvFijA.js.map +1 -0
  70. package/dist/memoryNative.native-C42h9SjK.js +54 -0
  71. package/dist/memoryNative.native-C42h9SjK.js.map +1 -0
  72. package/dist/memoryNative.native-CA-7w9w1.cjs +2 -0
  73. package/dist/memoryNative.native-CA-7w9w1.cjs.map +1 -0
  74. package/dist/memoryStore-BIGZmmfD.cjs +2 -0
  75. package/dist/memoryStore-BIGZmmfD.cjs.map +1 -0
  76. package/dist/memoryStore-F5I-GQKM.js +193 -0
  77. package/dist/memoryStore-F5I-GQKM.js.map +1 -0
  78. package/dist/nativeSender-CfQaRuDK.cjs +2 -0
  79. package/dist/nativeSender-CfQaRuDK.cjs.map +1 -0
  80. package/dist/nativeSender-pgVSIv-X.js +59 -0
  81. package/dist/nativeSender-pgVSIv-X.js.map +1 -0
  82. package/dist/navigationRef-BzYbs8cm.js +28 -0
  83. package/dist/navigationRef-BzYbs8cm.js.map +1 -0
  84. package/dist/navigationRef-C-_qhb43.cjs +2 -0
  85. package/dist/navigationRef-C-_qhb43.cjs.map +1 -0
  86. package/dist/{navigationTracker-Cts68dgG.js → navigationTracker-BmywA_Bg.js} +4 -4
  87. package/dist/navigationTracker-BmywA_Bg.js.map +1 -0
  88. package/dist/navigationTracker-HkwVyywz.cjs +2 -0
  89. package/dist/navigationTracker-HkwVyywz.cjs.map +1 -0
  90. package/dist/navigationWeb.web-CW_z7Ca4.cjs +2 -0
  91. package/dist/navigationWeb.web-CW_z7Ca4.cjs.map +1 -0
  92. package/dist/navigationWeb.web-CcwgKuIZ.js +55 -0
  93. package/dist/navigationWeb.web-CcwgKuIZ.js.map +1 -0
  94. package/dist/{networkInfo.native-BK5fpAOL.js → networkInfo.native-CGrx9cnH.js} +15 -15
  95. package/dist/{networkInfo.native-BK5fpAOL.js.map → networkInfo.native-CGrx9cnH.js.map} +1 -1
  96. package/dist/{networkInfo.native-cxuw93Uy.cjs → networkInfo.native-YVySdv3S.cjs} +2 -2
  97. package/dist/{networkInfo.native-cxuw93Uy.cjs.map → networkInfo.native-YVySdv3S.cjs.map} +1 -1
  98. package/dist/{networkInfo.web-twcNn_hc.js → networkInfo.web-B2YlLNsI.js} +3 -3
  99. package/dist/networkInfo.web-B2YlLNsI.js.map +1 -0
  100. package/dist/networkInfo.web-PltJTHsy.cjs +2 -0
  101. package/dist/networkInfo.web-PltJTHsy.cjs.map +1 -0
  102. package/dist/runtimeReady.native-Bh7EcYmK.js +14 -0
  103. package/dist/runtimeReady.native-Bh7EcYmK.js.map +1 -0
  104. package/dist/runtimeReady.native-jUmuE1lV.cjs +2 -0
  105. package/dist/runtimeReady.native-jUmuE1lV.cjs.map +1 -0
  106. package/dist/runtimeReady.web-C8fdIbVR.js +25 -0
  107. package/dist/runtimeReady.web-C8fdIbVR.js.map +1 -0
  108. package/dist/runtimeReady.web-DHW682RN.cjs +2 -0
  109. package/dist/runtimeReady.web-DHW682RN.cjs.map +1 -0
  110. package/dist/seedRuntimeReady-BKwkBEAF.cjs +2 -0
  111. package/dist/seedRuntimeReady-BKwkBEAF.cjs.map +1 -0
  112. package/dist/seedRuntimeReady-Cz8nOKoo.js +10 -0
  113. package/dist/seedRuntimeReady-Cz8nOKoo.js.map +1 -0
  114. package/dist/src/adapters/appLifecycle.d.ts +8 -1
  115. package/dist/src/adapters/batch.d.ts +2 -0
  116. package/dist/src/adapters/crashCapture.d.ts +38 -9
  117. package/dist/src/adapters/failedEvents.d.ts +43 -0
  118. package/dist/src/adapters/frameAggregate.d.ts +8 -3
  119. package/dist/src/adapters/frameTracker.d.ts +30 -0
  120. package/dist/src/adapters/httpAttributes.d.ts +18 -0
  121. package/dist/src/adapters/loadingTime.d.ts +67 -0
  122. package/dist/src/adapters/native/interceptHttpNative.native.d.ts +18 -0
  123. package/dist/src/adapters/native/memoryNative.native.d.ts +15 -11
  124. package/dist/src/adapters/native/runtimeReady.native.d.ts +1 -0
  125. package/dist/src/adapters/native/store.native.d.ts +10 -0
  126. package/dist/src/adapters/nativeSender.d.ts +2 -2
  127. package/dist/src/adapters/navigationRef.d.ts +21 -0
  128. package/dist/src/adapters/navigationTracker.d.ts +1 -1
  129. package/dist/src/adapters/screenTiming.d.ts +8 -2
  130. package/dist/src/adapters/seedRuntimeReady.d.ts +8 -0
  131. package/dist/src/adapters/traceHeader.d.ts +33 -0
  132. package/dist/src/adapters/traceManager.d.ts +131 -0
  133. package/dist/src/adapters/uiInteraction.d.ts +111 -0
  134. package/dist/src/adapters/viewManager.d.ts +161 -0
  135. package/dist/src/adapters/viewport.d.ts +15 -0
  136. package/dist/src/adapters/web/interactionWeb.web.d.ts +36 -0
  137. package/dist/src/adapters/web/interceptFetchWeb.web.d.ts +3 -11
  138. package/dist/src/adapters/web/navigationWeb.web.d.ts +10 -0
  139. package/dist/src/adapters/web/runtimeReady.web.d.ts +5 -0
  140. package/dist/src/adapters/web/store.web.d.ts +12 -0
  141. package/dist/src/adapters/web/webVitals.web.d.ts +49 -0
  142. package/dist/src/adapters/webSender.d.ts +2 -2
  143. package/dist/src/adapters/webVitals.d.ts +25 -0
  144. package/dist/src/adapters/xhrIntercept.d.ts +53 -0
  145. package/dist/src/core/beforeSend.d.ts +20 -0
  146. package/dist/src/core/debug.d.ts +7 -0
  147. package/dist/src/core/memoryStore.d.ts +23 -0
  148. package/dist/src/core/store.d.ts +41 -0
  149. package/dist/src/core/telemetry.d.ts +305 -35
  150. package/dist/src/core/userProfile.d.ts +12 -0
  151. package/dist/src/core/utils/json.d.ts +7 -0
  152. package/dist/src/core/utils/uuid.d.ts +10 -1
  153. package/dist/src/createTelemetry.native.d.ts +7 -0
  154. package/dist/src/createTelemetry.web.d.ts +7 -0
  155. package/dist/src/index.base.d.ts +17 -1
  156. package/dist/src/index.native.d.ts +46 -9
  157. package/dist/src/index.web.d.ts +33 -2
  158. package/dist/store.native-BYBJcy6o.js +32 -0
  159. package/dist/store.native-BYBJcy6o.js.map +1 -0
  160. package/dist/store.native-TPqXngmF.cjs +2 -0
  161. package/dist/store.native-TPqXngmF.cjs.map +1 -0
  162. package/dist/store.web-CvqqN-_Z.cjs +2 -0
  163. package/dist/store.web-CvqqN-_Z.cjs.map +1 -0
  164. package/dist/store.web-DJAlN0nc.js +31 -0
  165. package/dist/store.web-DJAlN0nc.js.map +1 -0
  166. package/dist/telemetry-ByDJIz_9.js +1280 -0
  167. package/dist/telemetry-ByDJIz_9.js.map +1 -0
  168. package/dist/telemetry-CrU7i1Jc.cjs +2 -0
  169. package/dist/telemetry-CrU7i1Jc.cjs.map +1 -0
  170. package/dist/uiInteraction-CdzvEI1p.cjs +2 -0
  171. package/dist/uiInteraction-CdzvEI1p.cjs.map +1 -0
  172. package/dist/uiInteraction-DAqxxz0q.js +104 -0
  173. package/dist/uiInteraction-DAqxxz0q.js.map +1 -0
  174. package/dist/viewport-Dd85GUNO.cjs +2 -0
  175. package/dist/viewport-Dd85GUNO.cjs.map +1 -0
  176. package/dist/viewport-Dzmt5QwK.js +15 -0
  177. package/dist/viewport-Dzmt5QwK.js.map +1 -0
  178. package/dist/web-vitals.attribution-CVCPiX-h.cjs +2 -0
  179. package/dist/web-vitals.attribution-CVCPiX-h.cjs.map +1 -0
  180. package/dist/web-vitals.attribution-xw9N5MKQ.js +488 -0
  181. package/dist/web-vitals.attribution-xw9N5MKQ.js.map +1 -0
  182. package/dist/webSender-BIwslfpT.js +63 -0
  183. package/dist/webSender-BIwslfpT.js.map +1 -0
  184. package/dist/webSender-CVtE4sOF.cjs +2 -0
  185. package/dist/webSender-CVtE4sOF.cjs.map +1 -0
  186. package/dist/webVitals.web-CNIpsKlA.js +85 -0
  187. package/dist/webVitals.web-CNIpsKlA.js.map +1 -0
  188. package/dist/webVitals.web-DpWJ-iYp.cjs +2 -0
  189. package/dist/webVitals.web-DpWJ-iYp.cjs.map +1 -0
  190. package/dist/xhrIntercept-BADex6Cq.cjs +2 -0
  191. package/dist/xhrIntercept-BADex6Cq.cjs.map +1 -0
  192. package/dist/xhrIntercept-BNiA41Mj.js +53 -0
  193. package/dist/xhrIntercept-BNiA41Mj.js.map +1 -0
  194. package/docs/migration-v4.md +190 -0
  195. package/package.json +12 -4
  196. package/dist/appLifecycle-Cynw0kAv.js +0 -14
  197. package/dist/appLifecycle-Cynw0kAv.js.map +0 -1
  198. package/dist/appLifecycle-DvJIt7ym.cjs +0 -2
  199. package/dist/appLifecycle-DvJIt7ym.cjs.map +0 -1
  200. package/dist/batch-CLBFgYPC.cjs +0 -2
  201. package/dist/batch-CLBFgYPC.cjs.map +0 -1
  202. package/dist/batch-DLG_gtOm.js +0 -12
  203. package/dist/batch-DLG_gtOm.js.map +0 -1
  204. package/dist/crashCapture-BYTM4FLC.cjs +0 -2
  205. package/dist/crashCapture-BYTM4FLC.cjs.map +0 -1
  206. package/dist/crashCapture-D_rkkBVa.js +0 -31
  207. package/dist/crashCapture-D_rkkBVa.js.map +0 -1
  208. package/dist/crashHandler.web-BSxDpFTo.cjs +0 -2
  209. package/dist/crashHandler.web-BSxDpFTo.cjs.map +0 -1
  210. package/dist/crashHandler.web-D59bmhg9.js +0 -32
  211. package/dist/crashHandler.web-D59bmhg9.js.map +0 -1
  212. package/dist/crashHandlerNative.native-DeAFze4E.cjs +0 -2
  213. package/dist/crashHandlerNative.native-DeAFze4E.cjs.map +0 -1
  214. package/dist/crashHandlerNative.native-d7qJkzA6.js +0 -41
  215. package/dist/crashHandlerNative.native-d7qJkzA6.js.map +0 -1
  216. package/dist/debug-DsvQ9y3W.js +0 -68
  217. package/dist/debug-DsvQ9y3W.js.map +0 -1
  218. package/dist/debug-rnOOxFpN.cjs +0 -2
  219. package/dist/debug-rnOOxFpN.cjs.map +0 -1
  220. package/dist/deviceInfo.native-7hbRYixR.cjs +0 -2
  221. package/dist/deviceInfo.native-7hbRYixR.cjs.map +0 -1
  222. package/dist/deviceInfo.native-D2k0LDhI.js.map +0 -1
  223. package/dist/deviceInfo.web-ByNAlEJh.cjs +0 -2
  224. package/dist/deviceInfo.web-ByNAlEJh.cjs.map +0 -1
  225. package/dist/deviceInfo.web-DzQyEku6.js +0 -40
  226. package/dist/deviceInfo.web-DzQyEku6.js.map +0 -1
  227. package/dist/frameAggregate-C_HoVFcK.cjs +0 -2
  228. package/dist/frameAggregate-C_HoVFcK.cjs.map +0 -1
  229. package/dist/frameAggregate-Cwh1juw1.js +0 -17
  230. package/dist/frameAggregate-Cwh1juw1.js.map +0 -1
  231. package/dist/frameDropsNative.native-CP7zrXDf.js +0 -23
  232. package/dist/frameDropsNative.native-CP7zrXDf.js.map +0 -1
  233. package/dist/frameDropsNative.native-DKqEDqip.cjs +0 -2
  234. package/dist/frameDropsNative.native-DKqEDqip.cjs.map +0 -1
  235. package/dist/frameDropsWeb.web-C9Lt3Fuj.js +0 -22
  236. package/dist/frameDropsWeb.web-C9Lt3Fuj.js.map +0 -1
  237. package/dist/frameDropsWeb.web-azpwQCUz.cjs +0 -2
  238. package/dist/frameDropsWeb.web-azpwQCUz.cjs.map +0 -1
  239. package/dist/httpAttributes-BV50UKQU.js +0 -19
  240. package/dist/httpAttributes-BV50UKQU.js.map +0 -1
  241. package/dist/httpAttributes-xXOD9trQ.cjs +0 -2
  242. package/dist/httpAttributes-xXOD9trQ.cjs.map +0 -1
  243. package/dist/interaction-CH8yoY5-.js +0 -23
  244. package/dist/interaction-CH8yoY5-.js.map +0 -1
  245. package/dist/interaction-DcNFBW7a.cjs +0 -2
  246. package/dist/interaction-DcNFBW7a.cjs.map +0 -1
  247. package/dist/interceptFetchNative.native-VlhtMG-U.js +0 -49
  248. package/dist/interceptFetchNative.native-VlhtMG-U.js.map +0 -1
  249. package/dist/interceptFetchNative.native-jEAldH14.cjs +0 -2
  250. package/dist/interceptFetchNative.native-jEAldH14.cjs.map +0 -1
  251. package/dist/interceptFetchWeb.web-DFzZliik.cjs +0 -2
  252. package/dist/interceptFetchWeb.web-DFzZliik.cjs.map +0 -1
  253. package/dist/interceptFetchWeb.web-DfsMfoRP.js +0 -77
  254. package/dist/interceptFetchWeb.web-DfsMfoRP.js.map +0 -1
  255. package/dist/memoryNative.native-BWLh2S9L.js +0 -48
  256. package/dist/memoryNative.native-BWLh2S9L.js.map +0 -1
  257. package/dist/memoryNative.native-DCXSOd4Q.cjs +0 -2
  258. package/dist/memoryNative.native-DCXSOd4Q.cjs.map +0 -1
  259. package/dist/memoryWeb.web-B3YuV-cB.js +0 -48
  260. package/dist/memoryWeb.web-B3YuV-cB.js.map +0 -1
  261. package/dist/memoryWeb.web-CheXAcJn.cjs +0 -2
  262. package/dist/memoryWeb.web-CheXAcJn.cjs.map +0 -1
  263. package/dist/nativeSender-BE_mzw_S.js +0 -70
  264. package/dist/nativeSender-BE_mzw_S.js.map +0 -1
  265. package/dist/nativeSender-DyAUGY7c.cjs +0 -2
  266. package/dist/nativeSender-DyAUGY7c.cjs.map +0 -1
  267. package/dist/navigationNative.native-3tO5JxSd.cjs +0 -2
  268. package/dist/navigationNative.native-3tO5JxSd.cjs.map +0 -1
  269. package/dist/navigationNative.native-BUCGPQX2.js +0 -25
  270. package/dist/navigationNative.native-BUCGPQX2.js.map +0 -1
  271. package/dist/navigationTracker-B2GMwyKk.cjs +0 -2
  272. package/dist/navigationTracker-B2GMwyKk.cjs.map +0 -1
  273. package/dist/navigationTracker-Cts68dgG.js.map +0 -1
  274. package/dist/navigationWeb.web-B0necr5j.cjs +0 -2
  275. package/dist/navigationWeb.web-B0necr5j.cjs.map +0 -1
  276. package/dist/navigationWeb.web-CORzE_Id.js +0 -46
  277. package/dist/navigationWeb.web-CORzE_Id.js.map +0 -1
  278. package/dist/networkInfo.web-DJmw1sNK.cjs +0 -2
  279. package/dist/networkInfo.web-DJmw1sNK.cjs.map +0 -1
  280. package/dist/networkInfo.web-twcNn_hc.js.map +0 -1
  281. package/dist/src/adapters/interaction.d.ts +0 -17
  282. package/dist/src/adapters/native/frameDropsNative.native.d.ts +0 -16
  283. package/dist/src/adapters/native/interceptFetchNative.native.d.ts +0 -23
  284. package/dist/src/adapters/native/navigationNative.native.d.ts +0 -12
  285. package/dist/src/adapters/web/frameDropsWeb.web.d.ts +0 -16
  286. package/dist/src/adapters/web/memoryWeb.web.d.ts +0 -26
  287. package/dist/telemetry-Co4MYdwa.cjs +0 -2
  288. package/dist/telemetry-Co4MYdwa.cjs.map +0 -1
  289. package/dist/telemetry-KI0x4gzC.js +0 -389
  290. package/dist/telemetry-KI0x4gzC.js.map +0 -1
  291. package/dist/v4-BysszJq8.js +0 -31
  292. package/dist/v4-BysszJq8.js.map +0 -1
  293. package/dist/v4-CqdK_b8Y.cjs +0 -2
  294. package/dist/v4-CqdK_b8Y.cjs.map +0 -1
  295. package/dist/webSender-B27tmT1w.js +0 -42
  296. package/dist/webSender-B27tmT1w.js.map +0 -1
  297. package/dist/webSender-BWi4x1df.cjs +0 -2
  298. package/dist/webSender-BWi4x1df.cjs.map +0 -1
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./frameAggregate-C_HoVFcK.cjs");class o{constructor(r,e=60,t=1e4){this.telemetry=r,this.targetFPS=e,this.windowMs=t,this.lastFrameTime=performance.now(),this.windowStart=performance.now(),this.deltas=[]}start(){return new Promise(r=>{const e=()=>{const t=performance.now();if(this.deltas.push(t-this.lastFrameTime),this.lastFrameTime=t,t-this.windowStart>=this.windowMs&&this.deltas.length>0){const{value:s,attributes:a}=i.aggregateFrames(this.deltas,this.targetFPS,"requestAnimationFrame");this.telemetry.logMetric("frame_render_time",s,a),this.deltas=[],this.windowStart=t}requestAnimationFrame(e)};requestAnimationFrame(e),r()})}}exports.FrameDropTrackerNative=o;
2
- //# sourceMappingURL=frameDropsNative.native-DKqEDqip.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frameDropsNative.native-DKqEDqip.cjs","sources":["../src/adapters/native/frameDropsNative.native.ts"],"sourcesContent":["import { Telemetry } from \"../../core/telemetry\";\nimport { aggregateFrames } from \"../frameAggregate\";\n\n/**\n * Samples frame deltas via requestAnimationFrame and emits an aggregated\n * `frame_render_time` metric (max/p95/dropped_count) once per window — instead of one event\n * per dropped frame. The metric shape matches the iOS contract (docs/edgerum-contract.md).\n */\nexport class FrameDropTrackerNative {\n private lastFrameTime = performance.now();\n private windowStart = performance.now();\n private deltas: number[] = [];\n\n constructor(\n private telemetry: Telemetry,\n private targetFPS = 60,\n private windowMs = 10000,\n ) { }\n\n start(): Promise<void> {\n return new Promise((resolve) => {\n const loop = () => {\n const now = performance.now();\n this.deltas.push(now - this.lastFrameTime);\n this.lastFrameTime = now;\n\n if (now - this.windowStart >= this.windowMs && this.deltas.length > 0) {\n // ponytail: first window includes the startup delta; acceptable noise, not worth gating.\n const { value, attributes } = aggregateFrames(this.deltas, this.targetFPS, \"requestAnimationFrame\");\n this.telemetry.logMetric(\"frame_render_time\", value, attributes);\n this.deltas = [];\n this.windowStart = now;\n }\n\n requestAnimationFrame(loop);\n };\n\n requestAnimationFrame(loop);\n resolve();\n });\n }\n}\n"],"names":["FrameDropTrackerNative","telemetry","targetFPS","windowMs","resolve","loop","now","value","attributes","aggregateFrames"],"mappings":"iIAQO,MAAMA,CAAuB,CAKhC,YACYC,EACAC,EAAY,GACZC,EAAW,IACrB,CAHU,KAAA,UAAAF,EACA,KAAA,UAAAC,EACA,KAAA,SAAAC,EAPZ,KAAQ,cAAgB,YAAY,IAAA,EACpC,KAAQ,YAAc,YAAY,IAAA,EAClC,KAAQ,OAAmB,CAAA,CAMvB,CAEJ,OAAuB,CACnB,OAAO,IAAI,QAASC,GAAY,CAC5B,MAAMC,EAAO,IAAM,CACf,MAAMC,EAAM,YAAY,IAAA,EAIxB,GAHA,KAAK,OAAO,KAAKA,EAAM,KAAK,aAAa,EACzC,KAAK,cAAgBA,EAEjBA,EAAM,KAAK,aAAe,KAAK,UAAY,KAAK,OAAO,OAAS,EAAG,CAEnE,KAAM,CAAE,MAAAC,EAAO,WAAAC,CAAA,EAAeC,EAAAA,gBAAgB,KAAK,OAAQ,KAAK,UAAW,uBAAuB,EAClG,KAAK,UAAU,UAAU,oBAAqBF,EAAOC,CAAU,EAC/D,KAAK,OAAS,CAAA,EACd,KAAK,YAAcF,CACvB,CAEA,sBAAsBD,CAAI,CAC9B,EAEA,sBAAsBA,CAAI,EAC1BD,EAAA,CACJ,CAAC,CACL,CACJ"}
@@ -1,22 +0,0 @@
1
- import { a as r } from "./frameAggregate-Cwh1juw1.js";
2
- class h {
3
- constructor(s, e = 60, t = 1e4) {
4
- this.telemetry = s, this.targetFPS = e, this.windowMs = t, this.lastFrameTime = performance.now(), this.windowStart = performance.now(), this.deltas = [];
5
- }
6
- start() {
7
- return new Promise((s) => {
8
- const e = (t) => {
9
- if (this.deltas.push(t - this.lastFrameTime), this.lastFrameTime = t, t - this.windowStart >= this.windowMs && this.deltas.length > 0) {
10
- const { value: a, attributes: i } = r(this.deltas, this.targetFPS, "requestAnimationFrame");
11
- this.telemetry.logMetric("frame_render_time", a, i), this.deltas = [], this.windowStart = t;
12
- }
13
- requestAnimationFrame(e);
14
- };
15
- requestAnimationFrame(e), s();
16
- });
17
- }
18
- }
19
- export {
20
- h as FrameDropTrackerWeb
21
- };
22
- //# sourceMappingURL=frameDropsWeb.web-C9Lt3Fuj.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frameDropsWeb.web-C9Lt3Fuj.js","sources":["../src/adapters/web/frameDropsWeb.web.ts"],"sourcesContent":["import { Telemetry } from \"../../core/telemetry\";\nimport { aggregateFrames } from \"../frameAggregate\";\n\n/**\n * Samples frame deltas via requestAnimationFrame and emits an aggregated\n * `frame_render_time` metric (max/p95/dropped_count) once per window — instead of one event\n * per dropped frame. The metric shape matches the iOS contract (docs/edgerum-contract.md).\n */\nexport class FrameDropTrackerWeb {\n private lastFrameTime = performance.now();\n private windowStart = performance.now();\n private deltas: number[] = [];\n\n constructor(\n private telemetry: Telemetry,\n private targetFPS = 60,\n private windowMs = 10000,\n ) { }\n\n start(): Promise<void> {\n return new Promise((resolve) => {\n const loop = (currentTime: number) => {\n this.deltas.push(currentTime - this.lastFrameTime);\n this.lastFrameTime = currentTime;\n\n if (currentTime - this.windowStart >= this.windowMs && this.deltas.length > 0) {\n // ponytail: first window includes the startup delta; acceptable noise, not worth gating.\n const { value, attributes } = aggregateFrames(this.deltas, this.targetFPS, \"requestAnimationFrame\");\n this.telemetry.logMetric(\"frame_render_time\", value, attributes);\n this.deltas = [];\n this.windowStart = currentTime;\n }\n\n requestAnimationFrame(loop);\n };\n\n requestAnimationFrame(loop);\n resolve();\n });\n }\n}\n"],"names":["FrameDropTrackerWeb","telemetry","targetFPS","windowMs","resolve","loop","currentTime","value","attributes","aggregateFrames"],"mappings":";AAQO,MAAMA,EAAoB;AAAA,EAK7B,YACYC,GACAC,IAAY,IACZC,IAAW,KACrB;AAHU,SAAA,YAAAF,GACA,KAAA,YAAAC,GACA,KAAA,WAAAC,GAPZ,KAAQ,gBAAgB,YAAY,IAAA,GACpC,KAAQ,cAAc,YAAY,IAAA,GAClC,KAAQ,SAAmB,CAAA;AAAA,EAMvB;AAAA,EAEJ,QAAuB;AACnB,WAAO,IAAI,QAAQ,CAACC,MAAY;AAC5B,YAAMC,IAAO,CAACC,MAAwB;AAIlC,YAHA,KAAK,OAAO,KAAKA,IAAc,KAAK,aAAa,GACjD,KAAK,gBAAgBA,GAEjBA,IAAc,KAAK,eAAe,KAAK,YAAY,KAAK,OAAO,SAAS,GAAG;AAE3E,gBAAM,EAAE,OAAAC,GAAO,YAAAC,EAAA,IAAeC,EAAgB,KAAK,QAAQ,KAAK,WAAW,uBAAuB;AAClG,eAAK,UAAU,UAAU,qBAAqBF,GAAOC,CAAU,GAC/D,KAAK,SAAS,CAAA,GACd,KAAK,cAAcF;AAAA,QACvB;AAEA,8BAAsBD,CAAI;AAAA,MAC9B;AAEA,4BAAsBA,CAAI,GAC1BD,EAAA;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./frameAggregate-C_HoVFcK.cjs");class o{constructor(r,e=60,t=1e4){this.telemetry=r,this.targetFPS=e,this.windowMs=t,this.lastFrameTime=performance.now(),this.windowStart=performance.now(),this.deltas=[]}start(){return new Promise(r=>{const e=t=>{if(this.deltas.push(t-this.lastFrameTime),this.lastFrameTime=t,t-this.windowStart>=this.windowMs&&this.deltas.length>0){const{value:s,attributes:a}=i.aggregateFrames(this.deltas,this.targetFPS,"requestAnimationFrame");this.telemetry.logMetric("frame_render_time",s,a),this.deltas=[],this.windowStart=t}requestAnimationFrame(e)};requestAnimationFrame(e),r()})}}exports.FrameDropTrackerWeb=o;
2
- //# sourceMappingURL=frameDropsWeb.web-azpwQCUz.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frameDropsWeb.web-azpwQCUz.cjs","sources":["../src/adapters/web/frameDropsWeb.web.ts"],"sourcesContent":["import { Telemetry } from \"../../core/telemetry\";\nimport { aggregateFrames } from \"../frameAggregate\";\n\n/**\n * Samples frame deltas via requestAnimationFrame and emits an aggregated\n * `frame_render_time` metric (max/p95/dropped_count) once per window — instead of one event\n * per dropped frame. The metric shape matches the iOS contract (docs/edgerum-contract.md).\n */\nexport class FrameDropTrackerWeb {\n private lastFrameTime = performance.now();\n private windowStart = performance.now();\n private deltas: number[] = [];\n\n constructor(\n private telemetry: Telemetry,\n private targetFPS = 60,\n private windowMs = 10000,\n ) { }\n\n start(): Promise<void> {\n return new Promise((resolve) => {\n const loop = (currentTime: number) => {\n this.deltas.push(currentTime - this.lastFrameTime);\n this.lastFrameTime = currentTime;\n\n if (currentTime - this.windowStart >= this.windowMs && this.deltas.length > 0) {\n // ponytail: first window includes the startup delta; acceptable noise, not worth gating.\n const { value, attributes } = aggregateFrames(this.deltas, this.targetFPS, \"requestAnimationFrame\");\n this.telemetry.logMetric(\"frame_render_time\", value, attributes);\n this.deltas = [];\n this.windowStart = currentTime;\n }\n\n requestAnimationFrame(loop);\n };\n\n requestAnimationFrame(loop);\n resolve();\n });\n }\n}\n"],"names":["FrameDropTrackerWeb","telemetry","targetFPS","windowMs","resolve","loop","currentTime","value","attributes","aggregateFrames"],"mappings":"iIAQO,MAAMA,CAAoB,CAK7B,YACYC,EACAC,EAAY,GACZC,EAAW,IACrB,CAHU,KAAA,UAAAF,EACA,KAAA,UAAAC,EACA,KAAA,SAAAC,EAPZ,KAAQ,cAAgB,YAAY,IAAA,EACpC,KAAQ,YAAc,YAAY,IAAA,EAClC,KAAQ,OAAmB,CAAA,CAMvB,CAEJ,OAAuB,CACnB,OAAO,IAAI,QAASC,GAAY,CAC5B,MAAMC,EAAQC,GAAwB,CAIlC,GAHA,KAAK,OAAO,KAAKA,EAAc,KAAK,aAAa,EACjD,KAAK,cAAgBA,EAEjBA,EAAc,KAAK,aAAe,KAAK,UAAY,KAAK,OAAO,OAAS,EAAG,CAE3E,KAAM,CAAE,MAAAC,EAAO,WAAAC,CAAA,EAAeC,EAAAA,gBAAgB,KAAK,OAAQ,KAAK,UAAW,uBAAuB,EAClG,KAAK,UAAU,UAAU,oBAAqBF,EAAOC,CAAU,EAC/D,KAAK,OAAS,CAAA,EACd,KAAK,YAAcF,CACvB,CAEA,sBAAsBD,CAAI,CAC9B,EAEA,sBAAsBA,CAAI,EAC1BD,EAAA,CACJ,CAAC,CACL,CACJ"}
@@ -1,19 +0,0 @@
1
- function a(p) {
2
- const { url: e, method: n, statusCode: s, durationMs: u, error: i, requestBody: o, responseSize: r } = p, t = {
3
- "http.url": e,
4
- "http.method": n,
5
- "http.status_code": s,
6
- "http.duration_ms": u,
7
- "http.success": !i && s >= 200 && s < 400
8
- };
9
- try {
10
- const h = new URL(e);
11
- t["http.host"] = h.host, t["http.path"] = h.pathname;
12
- } catch {
13
- }
14
- return typeof o == "string" && (t["http.request_size"] = o.length), r && (t["http.response_size"] = r), t;
15
- }
16
- export {
17
- a as b
18
- };
19
- //# sourceMappingURL=httpAttributes-BV50UKQU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"httpAttributes-BV50UKQU.js","sources":["../src/adapters/httpAttributes.ts"],"sourcesContent":["// Shared http.request attribute builder — the single source of truth so the web and\n// native fetch/XHR adapters stay in lockstep on the v3 contract (#25).\n// Baseline keys are always present; iOS-parity additive keys ride only when honestly\n// available (recorded in docs/backend-additions-ledger.md).\nexport function buildHttpAttributes(args: {\n url: string;\n method: string;\n statusCode: number;\n durationMs: number;\n error?: unknown;\n requestBody?: unknown;\n responseSize?: number;\n}): Record<string, any> {\n const { url, method, statusCode, durationMs, error, requestBody, responseSize } = args;\n\n const attrs: Record<string, any> = {\n \"http.url\": url,\n \"http.method\": method,\n \"http.status_code\": statusCode,\n \"http.duration_ms\": durationMs,\n \"http.success\": !error && statusCode >= 200 && statusCode < 400,\n };\n\n // additive — only emit what the platform actually exposes\n try {\n const u = new URL(url);\n attrs[\"http.host\"] = u.host;\n attrs[\"http.path\"] = u.pathname;\n } catch {\n // ponytail: relative/invalid URL → no host/path, baseline still ships\n }\n if (typeof requestBody === \"string\") attrs[\"http.request_size\"] = requestBody.length;\n if (responseSize) attrs[\"http.response_size\"] = responseSize;\n\n return attrs;\n}\n"],"names":["buildHttpAttributes","args","url","method","statusCode","durationMs","error","requestBody","responseSize","attrs","u"],"mappings":"AAIO,SAASA,EAAoBC,GAQZ;AACtB,QAAM,EAAE,KAAAC,GAAK,QAAAC,GAAQ,YAAAC,GAAY,YAAAC,GAAY,OAAAC,GAAO,aAAAC,GAAa,cAAAC,MAAiBP,GAE5EQ,IAA6B;AAAA,IACjC,YAAYP;AAAA,IACZ,eAAeC;AAAA,IACf,oBAAoBC;AAAA,IACpB,oBAAoBC;AAAA,IACpB,gBAAgB,CAACC,KAASF,KAAc,OAAOA,IAAa;AAAA,EAAA;AAI9D,MAAI;AACF,UAAMM,IAAI,IAAI,IAAIR,CAAG;AACrB,IAAAO,EAAM,WAAW,IAAIC,EAAE,MACvBD,EAAM,WAAW,IAAIC,EAAE;AAAA,EACzB,QAAQ;AAAA,EAER;AACA,SAAI,OAAOH,KAAgB,aAAUE,EAAM,mBAAmB,IAAIF,EAAY,SAC1EC,MAAcC,EAAM,oBAAoB,IAAID,IAEzCC;AACT;"}
@@ -1,2 +0,0 @@
1
- "use strict";function c(u){const{url:e,method:p,statusCode:s,durationMs:i,error:n,requestBody:r,responseSize:h}=u,t={"http.url":e,"http.method":p,"http.status_code":s,"http.duration_ms":i,"http.success":!n&&s>=200&&s<400};try{const o=new URL(e);t["http.host"]=o.host,t["http.path"]=o.pathname}catch{}return typeof r=="string"&&(t["http.request_size"]=r.length),h&&(t["http.response_size"]=h),t}exports.buildHttpAttributes=c;
2
- //# sourceMappingURL=httpAttributes-xXOD9trQ.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"httpAttributes-xXOD9trQ.cjs","sources":["../src/adapters/httpAttributes.ts"],"sourcesContent":["// Shared http.request attribute builder — the single source of truth so the web and\n// native fetch/XHR adapters stay in lockstep on the v3 contract (#25).\n// Baseline keys are always present; iOS-parity additive keys ride only when honestly\n// available (recorded in docs/backend-additions-ledger.md).\nexport function buildHttpAttributes(args: {\n url: string;\n method: string;\n statusCode: number;\n durationMs: number;\n error?: unknown;\n requestBody?: unknown;\n responseSize?: number;\n}): Record<string, any> {\n const { url, method, statusCode, durationMs, error, requestBody, responseSize } = args;\n\n const attrs: Record<string, any> = {\n \"http.url\": url,\n \"http.method\": method,\n \"http.status_code\": statusCode,\n \"http.duration_ms\": durationMs,\n \"http.success\": !error && statusCode >= 200 && statusCode < 400,\n };\n\n // additive — only emit what the platform actually exposes\n try {\n const u = new URL(url);\n attrs[\"http.host\"] = u.host;\n attrs[\"http.path\"] = u.pathname;\n } catch {\n // ponytail: relative/invalid URL → no host/path, baseline still ships\n }\n if (typeof requestBody === \"string\") attrs[\"http.request_size\"] = requestBody.length;\n if (responseSize) attrs[\"http.response_size\"] = responseSize;\n\n return attrs;\n}\n"],"names":["buildHttpAttributes","args","url","method","statusCode","durationMs","error","requestBody","responseSize","attrs","u"],"mappings":"aAIO,SAASA,EAAoBC,EAQZ,CACtB,KAAM,CAAE,IAAAC,EAAK,OAAAC,EAAQ,WAAAC,EAAY,WAAAC,EAAY,MAAAC,EAAO,YAAAC,EAAa,aAAAC,GAAiBP,EAE5EQ,EAA6B,CACjC,WAAYP,EACZ,cAAeC,EACf,mBAAoBC,EACpB,mBAAoBC,EACpB,eAAgB,CAACC,GAASF,GAAc,KAAOA,EAAa,GAAA,EAI9D,GAAI,CACF,MAAMM,EAAI,IAAI,IAAIR,CAAG,EACrBO,EAAM,WAAW,EAAIC,EAAE,KACvBD,EAAM,WAAW,EAAIC,EAAE,QACzB,MAAQ,CAER,CACA,OAAI,OAAOH,GAAgB,WAAUE,EAAM,mBAAmB,EAAIF,EAAY,QAC1EC,IAAcC,EAAM,oBAAoB,EAAID,GAEzCC,CACT"}
@@ -1,23 +0,0 @@
1
- class o {
2
- constructor(e) {
3
- this.telemetry = e;
4
- }
5
- record(e = "tap", r) {
6
- const t = this.telemetry.currentScreen;
7
- return this.telemetry.log("user.interaction", {
8
- "interaction.type": e,
9
- ...t ? { "interaction.screen": t } : {},
10
- ...r
11
- });
12
- }
13
- // Spread onto the app root <View>: each tap → user.interaction, gesture never stolen.
14
- responderProps() {
15
- return {
16
- onStartShouldSetResponderCapture: () => (this.record("tap"), !1)
17
- };
18
- }
19
- }
20
- export {
21
- o as InteractionEmitter
22
- };
23
- //# sourceMappingURL=interaction-CH8yoY5-.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interaction-CH8yoY5-.js","sources":["../src/adapters/interaction.ts"],"sourcesContent":["import { Telemetry } from \"../core/telemetry\";\n\n/**\n * Best-effort native tap capture → v3 `user.interaction` (#33). No DOM `target_tag`/\n * `target_class` — those are web-only; their absence on native is intentional, not an error.\n *\n * RN has no global tap stream, so `responderProps()` returns a top-level responder-capture\n * handler the consumer spreads onto their app root <View>. It records the tap and returns\n * false, so it observes the gesture without ever claiming it.\n */\nexport class InteractionEmitter {\n constructor(private telemetry: Telemetry) {}\n\n record(type: string = \"tap\", extra?: Record<string, any>): Promise<void> {\n const screen = (this.telemetry as any).currentScreen;\n return this.telemetry.log(\"user.interaction\", {\n \"interaction.type\": type,\n ...(screen ? { \"interaction.screen\": screen } : {}),\n ...extra,\n });\n }\n\n // Spread onto the app root <View>: each tap → user.interaction, gesture never stolen.\n responderProps() {\n return {\n onStartShouldSetResponderCapture: () => {\n this.record(\"tap\");\n return false;\n },\n };\n }\n}\n"],"names":["InteractionEmitter","telemetry","type","extra","screen"],"mappings":"AAUO,MAAMA,EAAmB;AAAA,EAC9B,YAAoBC,GAAsB;AAAtB,SAAA,YAAAA;AAAA,EAAuB;AAAA,EAE3C,OAAOC,IAAe,OAAOC,GAA4C;AACvE,UAAMC,IAAU,KAAK,UAAkB;AACvC,WAAO,KAAK,UAAU,IAAI,oBAAoB;AAAA,MAC5C,oBAAoBF;AAAA,MACpB,GAAIE,IAAS,EAAE,sBAAsBA,EAAA,IAAW,CAAA;AAAA,MAChD,GAAGD;AAAA,IAAA,CACJ;AAAA,EACH;AAAA;AAAA,EAGA,iBAAiB;AACf,WAAO;AAAA,MACL,kCAAkC,OAChC,KAAK,OAAO,KAAK,GACV;AAAA,IACT;AAAA,EAEJ;AACF;"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class n{constructor(e){this.telemetry=e}record(e="tap",r){const t=this.telemetry.currentScreen;return this.telemetry.log("user.interaction",{"interaction.type":e,...t?{"interaction.screen":t}:{},...r})}responderProps(){return{onStartShouldSetResponderCapture:()=>(this.record("tap"),!1)}}}exports.InteractionEmitter=n;
2
- //# sourceMappingURL=interaction-DcNFBW7a.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interaction-DcNFBW7a.cjs","sources":["../src/adapters/interaction.ts"],"sourcesContent":["import { Telemetry } from \"../core/telemetry\";\n\n/**\n * Best-effort native tap capture → v3 `user.interaction` (#33). No DOM `target_tag`/\n * `target_class` — those are web-only; their absence on native is intentional, not an error.\n *\n * RN has no global tap stream, so `responderProps()` returns a top-level responder-capture\n * handler the consumer spreads onto their app root <View>. It records the tap and returns\n * false, so it observes the gesture without ever claiming it.\n */\nexport class InteractionEmitter {\n constructor(private telemetry: Telemetry) {}\n\n record(type: string = \"tap\", extra?: Record<string, any>): Promise<void> {\n const screen = (this.telemetry as any).currentScreen;\n return this.telemetry.log(\"user.interaction\", {\n \"interaction.type\": type,\n ...(screen ? { \"interaction.screen\": screen } : {}),\n ...extra,\n });\n }\n\n // Spread onto the app root <View>: each tap → user.interaction, gesture never stolen.\n responderProps() {\n return {\n onStartShouldSetResponderCapture: () => {\n this.record(\"tap\");\n return false;\n },\n };\n }\n}\n"],"names":["InteractionEmitter","telemetry","type","extra","screen"],"mappings":"gFAUO,MAAMA,CAAmB,CAC9B,YAAoBC,EAAsB,CAAtB,KAAA,UAAAA,CAAuB,CAE3C,OAAOC,EAAe,MAAOC,EAA4C,CACvE,MAAMC,EAAU,KAAK,UAAkB,cACvC,OAAO,KAAK,UAAU,IAAI,mBAAoB,CAC5C,mBAAoBF,EACpB,GAAIE,EAAS,CAAE,qBAAsBA,CAAA,EAAW,CAAA,EAChD,GAAGD,CAAA,CACJ,CACH,CAGA,gBAAiB,CACf,MAAO,CACL,iCAAkC,KAChC,KAAK,OAAO,KAAK,EACV,GACT,CAEJ,CACF"}
@@ -1,49 +0,0 @@
1
- import { b as d } from "./httpAttributes-BV50UKQU.js";
2
- class b {
3
- constructor(r) {
4
- this.telemetry = r, this.originalFetch = global.fetch.bind(global);
5
- }
6
- /**
7
- * Starts intercepting global fetch requests.
8
- * Wraps `global.fetch` with telemetry logging.
9
- *
10
- * @returns Promise<void> resolves immediately after interception is set up.
11
- */
12
- start() {
13
- return new Promise((r) => {
14
- global.fetch = async (e, o) => {
15
- const i = Date.now();
16
- let t = null, n = null;
17
- try {
18
- return t = await this.originalFetch(e, o), t;
19
- } catch (s) {
20
- throw n = s, s;
21
- } finally {
22
- const c = Date.now() - i, l = typeof e == "string" ? e : e.toString(), a = this.telemetry.getEndpoint?.();
23
- if (!(a && l.startsWith(a))) {
24
- const h = t ? Number(t.headers.get("content-length") ?? 0) : 0;
25
- this.telemetry.log("http.request", d({
26
- url: l,
27
- method: o?.method ?? "GET",
28
- statusCode: t?.status ?? 0,
29
- durationMs: c,
30
- error: n,
31
- requestBody: o?.body,
32
- responseSize: h
33
- }));
34
- }
35
- }
36
- }, r();
37
- });
38
- }
39
- /**
40
- * Restores the original fetch function, removing the interception.
41
- */
42
- stop() {
43
- global.fetch = this.originalFetch;
44
- }
45
- }
46
- export {
47
- b as NetworkTrackerNative
48
- };
49
- //# sourceMappingURL=interceptFetchNative.native-VlhtMG-U.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interceptFetchNative.native-VlhtMG-U.js","sources":["../src/adapters/native/interceptFetchNative.native.ts"],"sourcesContent":["import { Telemetry } from \"../../core/telemetry\";\nimport { buildHttpAttributes } from \"../httpAttributes\";\n\n/**\n * Intercepts global `fetch` calls in React Native to log detailed telemetry data\n * about network requests, including timing, method, status, payload sizes, and errors.\n *\n * Use the `start()` method to begin interception.\n */\nexport class NetworkTrackerNative {\n private originalFetch: typeof fetch;\n\n constructor(private telemetry: Telemetry) {\n this.originalFetch = global.fetch.bind(global);\n }\n\n /**\n * Starts intercepting global fetch requests.\n * Wraps `global.fetch` with telemetry logging.\n *\n * @returns Promise<void> resolves immediately after interception is set up.\n */\n public start(): Promise<void> {\n return new Promise((resolve) => {\n global.fetch = async (\n input: string | URL | Request,\n init?: RequestInit\n ): Promise<Response> => {\n const start = Date.now();\n let response: Response | null = null;\n let error: unknown = null;\n\n try {\n response = await this.originalFetch(input, init);\n return response;\n } catch (err) {\n error = err;\n throw err;\n } finally {\n const end = Date.now();\n const durationMs = end - start;\n\n const url = typeof input === \"string\" ? input : input.toString();\n\n // Never self-capture the SDK's own collector POST\n const endpoint = this.telemetry.getEndpoint?.();\n if (!(endpoint && url.startsWith(endpoint))) {\n const responseSize = response\n ? Number(response.headers.get(\"content-length\") ?? 0)\n : 0;\n\n this.telemetry.log(\"http.request\", buildHttpAttributes({\n url,\n method: init?.method ?? \"GET\",\n statusCode: response?.status ?? 0,\n durationMs,\n error,\n requestBody: init?.body,\n responseSize,\n }));\n }\n }\n };\n\n resolve();\n });\n }\n\n /**\n * Restores the original fetch function, removing the interception.\n */\n public stop(): void {\n global.fetch = this.originalFetch;\n }\n}\n"],"names":["NetworkTrackerNative","telemetry","resolve","input","init","start","response","error","err","durationMs","url","endpoint","responseSize","buildHttpAttributes"],"mappings":";AASO,MAAMA,EAAqB;AAAA,EAG9B,YAAoBC,GAAsB;AAAtB,SAAA,YAAAA,GAChB,KAAK,gBAAgB,OAAO,MAAM,KAAK,MAAM;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,QAAuB;AAC1B,WAAO,IAAI,QAAQ,CAACC,MAAY;AAC5B,aAAO,QAAQ,OACXC,GACAC,MACoB;AACpB,cAAMC,IAAQ,KAAK,IAAA;AACnB,YAAIC,IAA4B,MAC5BC,IAAiB;AAErB,YAAI;AACA,iBAAAD,IAAW,MAAM,KAAK,cAAcH,GAAOC,CAAI,GACxCE;AAAA,QACX,SAASE,GAAK;AACV,gBAAAD,IAAQC,GACFA;AAAA,QACV,UAAA;AAEI,gBAAMC,IADM,KAAK,IAAA,IACQJ,GAEnBK,IAAM,OAAOP,KAAU,WAAWA,IAAQA,EAAM,SAAA,GAGhDQ,IAAW,KAAK,UAAU,cAAA;AAChC,cAAI,EAAEA,KAAYD,EAAI,WAAWC,CAAQ,IAAI;AACzC,kBAAMC,IAAeN,IACf,OAAOA,EAAS,QAAQ,IAAI,gBAAgB,KAAK,CAAC,IAClD;AAEN,iBAAK,UAAU,IAAI,gBAAgBO,EAAoB;AAAA,cACnD,KAAAH;AAAA,cACA,QAAQN,GAAM,UAAU;AAAA,cACxB,YAAYE,GAAU,UAAU;AAAA,cAChC,YAAAG;AAAA,cACA,OAAAF;AAAA,cACA,aAAaH,GAAM;AAAA,cACnB,cAAAQ;AAAA,YAAA,CACH,CAAC;AAAA,UACN;AAAA,QACJ;AAAA,MACJ,GAEAV,EAAA;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKO,OAAa;AAChB,WAAO,QAAQ,KAAK;AAAA,EACxB;AACJ;"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("./httpAttributes-xXOD9trQ.cjs");class d{constructor(r){this.telemetry=r,this.originalFetch=global.fetch.bind(global)}start(){return new Promise(r=>{global.fetch=async(e,o)=>{const i=Date.now();let t=null,n=null;try{return t=await this.originalFetch(e,o),t}catch(s){throw n=s,s}finally{const c=Date.now()-i,l=typeof e=="string"?e:e.toString(),a=this.telemetry.getEndpoint?.();if(!(a&&l.startsWith(a))){const h=t?Number(t.headers.get("content-length")??0):0;this.telemetry.log("http.request",u.buildHttpAttributes({url:l,method:o?.method??"GET",statusCode:t?.status??0,durationMs:c,error:n,requestBody:o?.body,responseSize:h}))}}},r()})}stop(){global.fetch=this.originalFetch}}exports.NetworkTrackerNative=d;
2
- //# sourceMappingURL=interceptFetchNative.native-jEAldH14.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interceptFetchNative.native-jEAldH14.cjs","sources":["../src/adapters/native/interceptFetchNative.native.ts"],"sourcesContent":["import { Telemetry } from \"../../core/telemetry\";\nimport { buildHttpAttributes } from \"../httpAttributes\";\n\n/**\n * Intercepts global `fetch` calls in React Native to log detailed telemetry data\n * about network requests, including timing, method, status, payload sizes, and errors.\n *\n * Use the `start()` method to begin interception.\n */\nexport class NetworkTrackerNative {\n private originalFetch: typeof fetch;\n\n constructor(private telemetry: Telemetry) {\n this.originalFetch = global.fetch.bind(global);\n }\n\n /**\n * Starts intercepting global fetch requests.\n * Wraps `global.fetch` with telemetry logging.\n *\n * @returns Promise<void> resolves immediately after interception is set up.\n */\n public start(): Promise<void> {\n return new Promise((resolve) => {\n global.fetch = async (\n input: string | URL | Request,\n init?: RequestInit\n ): Promise<Response> => {\n const start = Date.now();\n let response: Response | null = null;\n let error: unknown = null;\n\n try {\n response = await this.originalFetch(input, init);\n return response;\n } catch (err) {\n error = err;\n throw err;\n } finally {\n const end = Date.now();\n const durationMs = end - start;\n\n const url = typeof input === \"string\" ? input : input.toString();\n\n // Never self-capture the SDK's own collector POST\n const endpoint = this.telemetry.getEndpoint?.();\n if (!(endpoint && url.startsWith(endpoint))) {\n const responseSize = response\n ? Number(response.headers.get(\"content-length\") ?? 0)\n : 0;\n\n this.telemetry.log(\"http.request\", buildHttpAttributes({\n url,\n method: init?.method ?? \"GET\",\n statusCode: response?.status ?? 0,\n durationMs,\n error,\n requestBody: init?.body,\n responseSize,\n }));\n }\n }\n };\n\n resolve();\n });\n }\n\n /**\n * Restores the original fetch function, removing the interception.\n */\n public stop(): void {\n global.fetch = this.originalFetch;\n }\n}\n"],"names":["NetworkTrackerNative","telemetry","resolve","input","init","start","response","error","err","durationMs","url","endpoint","responseSize","buildHttpAttributes"],"mappings":"iIASO,MAAMA,CAAqB,CAG9B,YAAoBC,EAAsB,CAAtB,KAAA,UAAAA,EAChB,KAAK,cAAgB,OAAO,MAAM,KAAK,MAAM,CACjD,CAQO,OAAuB,CAC1B,OAAO,IAAI,QAASC,GAAY,CAC5B,OAAO,MAAQ,MACXC,EACAC,IACoB,CACpB,MAAMC,EAAQ,KAAK,IAAA,EACnB,IAAIC,EAA4B,KAC5BC,EAAiB,KAErB,GAAI,CACA,OAAAD,EAAW,MAAM,KAAK,cAAcH,EAAOC,CAAI,EACxCE,CACX,OAASE,EAAK,CACV,MAAAD,EAAQC,EACFA,CACV,QAAA,CAEI,MAAMC,EADM,KAAK,IAAA,EACQJ,EAEnBK,EAAM,OAAOP,GAAU,SAAWA,EAAQA,EAAM,SAAA,EAGhDQ,EAAW,KAAK,UAAU,cAAA,EAChC,GAAI,EAAEA,GAAYD,EAAI,WAAWC,CAAQ,GAAI,CACzC,MAAMC,EAAeN,EACf,OAAOA,EAAS,QAAQ,IAAI,gBAAgB,GAAK,CAAC,EAClD,EAEN,KAAK,UAAU,IAAI,eAAgBO,EAAAA,oBAAoB,CACnD,IAAAH,EACA,OAAQN,GAAM,QAAU,MACxB,WAAYE,GAAU,QAAU,EAChC,WAAAG,EACA,MAAAF,EACA,YAAaH,GAAM,KACnB,aAAAQ,CAAA,CACH,CAAC,CACN,CACJ,CACJ,EAEAV,EAAA,CACJ,CAAC,CACL,CAKO,MAAa,CAChB,OAAO,MAAQ,KAAK,aACxB,CACJ"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("./httpAttributes-xXOD9trQ.cjs");class g{constructor(o){this.telemetry=o}start(){return new Promise(o=>{const n=this.telemetry,c=window.fetch;if(window.fetch=async(r,t)=>{const u=Date.now();let e=null,s=null;try{return e=await c(r,t),e}catch(i){throw s=i,i}finally{const i=Date.now(),a=typeof r=="string"?r:r.toString(),d=n.getEndpoint?.();if(!(d&&a.startsWith(d))){const y=e?Number(e.headers.get("content-length")??0):0;n.log("http.request",p.buildHttpAttributes({url:a,method:t?.method??"GET",statusCode:e?.status??0,durationMs:i-u,error:s,requestBody:t?.body,responseSize:y}))}}},typeof XMLHttpRequest>"u"){o();return}const l=XMLHttpRequest.prototype.open,h=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(r,t,u,e,s){return this._telemetry={method:r,url:t,start:0},l.apply(this,arguments)},XMLHttpRequest.prototype.send=function(r){const t=this._telemetry;return t.start=Date.now(),this.addEventListener("loadend",()=>{const u=Date.now()-t.start,e=n.getEndpoint?.();if(e&&String(t.url).startsWith(e))return;const s=Number(this.getResponseHeader("content-length")??0);n.log("http.request",p.buildHttpAttributes({url:t.url,method:t.method,statusCode:this.status,durationMs:u,error:this.status===0?"Network error":null,requestBody:r,responseSize:s}))}),h.apply(this,arguments)},o()})}}exports.NetworkTrackerWeb=g;
2
- //# sourceMappingURL=interceptFetchWeb.web-DFzZliik.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interceptFetchWeb.web-DFzZliik.cjs","sources":["../src/adapters/web/interceptFetchWeb.web.ts"],"sourcesContent":["// interceptHttp.web.ts\nimport { Telemetry } from \"../../core/telemetry\";\nimport { buildHttpAttributes } from \"../httpAttributes\";\n\n/**\n * NetworkTrackerWeb intercepts all HTTP requests made through\n * `window.fetch` and `XMLHttpRequest` in a browser environment.\n * \n * It logs detailed telemetry data such as request URL, HTTP method,\n * response status, request and response body sizes, request duration,\n * and error information, if any.\n * \n * This class should be instantiated once and the `start` method called\n * during application initialization to begin interception.\n */\nexport class NetworkTrackerWeb {\n private telemetry: Telemetry;\n\n /**\n * Create a NetworkTrackerWeb instance.\n * @param telemetry - An instance of Telemetry used for logging network events.\n */\n constructor(telemetry: Telemetry) {\n this.telemetry = telemetry;\n }\n\n /**\n * Starts intercepting HTTP requests made through `fetch` and `XMLHttpRequest`.\n * \n * This method patches the global `fetch` function and `XMLHttpRequest` methods\n * `open` and `send` to gather telemetry and log it asynchronously.\n * \n * @returns A Promise that resolves immediately once interception is setup.\n */\n public start(): Promise<void> {\n return new Promise((resolve) => {\n // Capture telemetry instance to use inside patched functions\n const telemetry = this.telemetry;\n\n // --- Patch window.fetch ---\n const originalFetch = window.fetch;\n window.fetch = async (\n input: RequestInfo | URL,\n init?: RequestInit\n ): Promise<Response> => {\n const start = Date.now();\n let response: Response | null = null;\n let error: any = null;\n\n try {\n response = await originalFetch(input, init);\n return response;\n } catch (err) {\n error = err;\n throw err;\n } finally {\n const end = Date.now();\n const url = typeof input === \"string\" ? input : input.toString();\n\n // Never self-capture the SDK's own collector POST\n const endpoint = telemetry.getEndpoint?.();\n if (!(endpoint && url.startsWith(endpoint))) {\n const responseSize = response\n ? Number(response.headers.get(\"content-length\") ?? 0)\n : 0;\n\n telemetry.log(\"http.request\", buildHttpAttributes({\n url,\n method: init?.method ?? \"GET\",\n statusCode: response?.status ?? 0,\n durationMs: end - start,\n error,\n requestBody: init?.body,\n responseSize,\n }));\n }\n }\n };\n\n // --- Patch XMLHttpRequest methods (absent in some RN-Web runtimes) ---\n if (typeof XMLHttpRequest === \"undefined\") { resolve(); return; }\n const origOpen = XMLHttpRequest.prototype.open;\n const origSend = XMLHttpRequest.prototype.send;\n\n /**\n * Patch XMLHttpRequest.open to capture HTTP method and URL.\n * Stores telemetry data on the XMLHttpRequest instance.\n */\n XMLHttpRequest.prototype.open = function (\n method: string,\n url: string,\n async?: boolean,\n user?: string | null,\n password?: string | null\n ) {\n // Store telemetry info on the xhr instance\n (this as any)._telemetry = {\n method,\n url,\n start: 0,\n };\n return origOpen.apply(this, arguments as any);\n };\n\n /**\n * Patch XMLHttpRequest.send to start timing and listen for completion.\n * Logs telemetry when the request finishes.\n */\n XMLHttpRequest.prototype.send = function (body?: Document | BodyInit | null) {\n const t = (this as any)._telemetry;\n t.start = Date.now();\n\n this.addEventListener(\"loadend\", () => {\n const durationMs = Date.now() - t.start;\n\n // Never self-capture the SDK's own collector POST\n const endpoint = telemetry.getEndpoint?.();\n if (endpoint && String(t.url).startsWith(endpoint)) return;\n\n const responseSize = Number(this.getResponseHeader(\"content-length\") ?? 0);\n\n telemetry.log(\"http.request\", buildHttpAttributes({\n url: t.url,\n method: t.method,\n statusCode: this.status,\n durationMs,\n error: this.status === 0 ? \"Network error\" : null,\n requestBody: body,\n responseSize,\n }));\n });\n\n return origSend.apply(this, arguments as any);\n };\n\n // Resolve immediately since interception setup is synchronous\n resolve();\n });\n }\n}\n"],"names":["NetworkTrackerWeb","telemetry","resolve","originalFetch","input","init","start","response","error","err","end","url","endpoint","responseSize","buildHttpAttributes","origOpen","origSend","method","async","user","password","body","durationMs"],"mappings":"iIAeO,MAAMA,CAAkB,CAO3B,YAAYC,EAAsB,CAC9B,KAAK,UAAYA,CACrB,CAUO,OAAuB,CAC1B,OAAO,IAAI,QAASC,GAAY,CAE5B,MAAMD,EAAY,KAAK,UAGjBE,EAAgB,OAAO,MAwC7B,GAvCA,OAAO,MAAQ,MACXC,EACAC,IACoB,CACpB,MAAMC,EAAQ,KAAK,IAAA,EACnB,IAAIC,EAA4B,KAC5BC,EAAa,KAEjB,GAAI,CACA,OAAAD,EAAW,MAAMJ,EAAcC,EAAOC,CAAI,EACnCE,CACX,OAASE,EAAK,CACV,MAAAD,EAAQC,EACFA,CACV,QAAA,CACI,MAAMC,EAAM,KAAK,IAAA,EACXC,EAAM,OAAOP,GAAU,SAAWA,EAAQA,EAAM,SAAA,EAGhDQ,EAAWX,EAAU,cAAA,EAC3B,GAAI,EAAEW,GAAYD,EAAI,WAAWC,CAAQ,GAAI,CACzC,MAAMC,EAAeN,EACf,OAAOA,EAAS,QAAQ,IAAI,gBAAgB,GAAK,CAAC,EAClD,EAENN,EAAU,IAAI,eAAgBa,sBAAoB,CAC9C,IAAAH,EACA,OAAQN,GAAM,QAAU,MACxB,WAAYE,GAAU,QAAU,EAChC,WAAYG,EAAMJ,EAClB,MAAAE,EACA,YAAaH,GAAM,KACnB,aAAAQ,CAAA,CACH,CAAC,CACN,CACJ,CACJ,EAGI,OAAO,eAAmB,IAAa,CAAEX,EAAA,EAAW,MAAQ,CAChE,MAAMa,EAAW,eAAe,UAAU,KACpCC,EAAW,eAAe,UAAU,KAM1C,eAAe,UAAU,KAAO,SAC5BC,EACAN,EACAO,EACAC,EACAC,EACF,CAEG,YAAa,WAAa,CACvB,OAAAH,EACA,IAAAN,EACA,MAAO,CAAA,EAEJI,EAAS,MAAM,KAAM,SAAgB,CAChD,EAMA,eAAe,UAAU,KAAO,SAAUM,EAAmC,CACzE,MAAM,EAAK,KAAa,WACxB,SAAE,MAAQ,KAAK,IAAA,EAEf,KAAK,iBAAiB,UAAW,IAAM,CACnC,MAAMC,EAAa,KAAK,IAAA,EAAQ,EAAE,MAG5BV,EAAWX,EAAU,cAAA,EAC3B,GAAIW,GAAY,OAAO,EAAE,GAAG,EAAE,WAAWA,CAAQ,EAAG,OAEpD,MAAMC,EAAe,OAAO,KAAK,kBAAkB,gBAAgB,GAAK,CAAC,EAEzEZ,EAAU,IAAI,eAAgBa,sBAAoB,CAC9C,IAAK,EAAE,IACP,OAAQ,EAAE,OACV,WAAY,KAAK,OACjB,WAAAQ,EACA,MAAO,KAAK,SAAW,EAAI,gBAAkB,KAC7C,YAAaD,EACb,aAAAR,CAAA,CACH,CAAC,CACN,CAAC,EAEMG,EAAS,MAAM,KAAM,SAAgB,CAChD,EAGAd,EAAA,CACJ,CAAC,CACL,CACJ"}
@@ -1,77 +0,0 @@
1
- import { b as d } from "./httpAttributes-BV50UKQU.js";
2
- class w {
3
- /**
4
- * Create a NetworkTrackerWeb instance.
5
- * @param telemetry - An instance of Telemetry used for logging network events.
6
- */
7
- constructor(o) {
8
- this.telemetry = o;
9
- }
10
- /**
11
- * Starts intercepting HTTP requests made through `fetch` and `XMLHttpRequest`.
12
- *
13
- * This method patches the global `fetch` function and `XMLHttpRequest` methods
14
- * `open` and `send` to gather telemetry and log it asynchronously.
15
- *
16
- * @returns A Promise that resolves immediately once interception is setup.
17
- */
18
- start() {
19
- return new Promise((o) => {
20
- const n = this.telemetry, c = window.fetch;
21
- if (window.fetch = async (r, t) => {
22
- const a = Date.now();
23
- let e = null, s = null;
24
- try {
25
- return e = await c(r, t), e;
26
- } catch (u) {
27
- throw s = u, u;
28
- } finally {
29
- const u = Date.now(), i = typeof r == "string" ? r : r.toString(), p = n.getEndpoint?.();
30
- if (!(p && i.startsWith(p))) {
31
- const y = e ? Number(e.headers.get("content-length") ?? 0) : 0;
32
- n.log("http.request", d({
33
- url: i,
34
- method: t?.method ?? "GET",
35
- statusCode: e?.status ?? 0,
36
- durationMs: u - a,
37
- error: s,
38
- requestBody: t?.body,
39
- responseSize: y
40
- }));
41
- }
42
- }
43
- }, typeof XMLHttpRequest > "u") {
44
- o();
45
- return;
46
- }
47
- const l = XMLHttpRequest.prototype.open, h = XMLHttpRequest.prototype.send;
48
- XMLHttpRequest.prototype.open = function(r, t, a, e, s) {
49
- return this._telemetry = {
50
- method: r,
51
- url: t,
52
- start: 0
53
- }, l.apply(this, arguments);
54
- }, XMLHttpRequest.prototype.send = function(r) {
55
- const t = this._telemetry;
56
- return t.start = Date.now(), this.addEventListener("loadend", () => {
57
- const a = Date.now() - t.start, e = n.getEndpoint?.();
58
- if (e && String(t.url).startsWith(e)) return;
59
- const s = Number(this.getResponseHeader("content-length") ?? 0);
60
- n.log("http.request", d({
61
- url: t.url,
62
- method: t.method,
63
- statusCode: this.status,
64
- durationMs: a,
65
- error: this.status === 0 ? "Network error" : null,
66
- requestBody: r,
67
- responseSize: s
68
- }));
69
- }), h.apply(this, arguments);
70
- }, o();
71
- });
72
- }
73
- }
74
- export {
75
- w as NetworkTrackerWeb
76
- };
77
- //# sourceMappingURL=interceptFetchWeb.web-DfsMfoRP.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interceptFetchWeb.web-DfsMfoRP.js","sources":["../src/adapters/web/interceptFetchWeb.web.ts"],"sourcesContent":["// interceptHttp.web.ts\nimport { Telemetry } from \"../../core/telemetry\";\nimport { buildHttpAttributes } from \"../httpAttributes\";\n\n/**\n * NetworkTrackerWeb intercepts all HTTP requests made through\n * `window.fetch` and `XMLHttpRequest` in a browser environment.\n * \n * It logs detailed telemetry data such as request URL, HTTP method,\n * response status, request and response body sizes, request duration,\n * and error information, if any.\n * \n * This class should be instantiated once and the `start` method called\n * during application initialization to begin interception.\n */\nexport class NetworkTrackerWeb {\n private telemetry: Telemetry;\n\n /**\n * Create a NetworkTrackerWeb instance.\n * @param telemetry - An instance of Telemetry used for logging network events.\n */\n constructor(telemetry: Telemetry) {\n this.telemetry = telemetry;\n }\n\n /**\n * Starts intercepting HTTP requests made through `fetch` and `XMLHttpRequest`.\n * \n * This method patches the global `fetch` function and `XMLHttpRequest` methods\n * `open` and `send` to gather telemetry and log it asynchronously.\n * \n * @returns A Promise that resolves immediately once interception is setup.\n */\n public start(): Promise<void> {\n return new Promise((resolve) => {\n // Capture telemetry instance to use inside patched functions\n const telemetry = this.telemetry;\n\n // --- Patch window.fetch ---\n const originalFetch = window.fetch;\n window.fetch = async (\n input: RequestInfo | URL,\n init?: RequestInit\n ): Promise<Response> => {\n const start = Date.now();\n let response: Response | null = null;\n let error: any = null;\n\n try {\n response = await originalFetch(input, init);\n return response;\n } catch (err) {\n error = err;\n throw err;\n } finally {\n const end = Date.now();\n const url = typeof input === \"string\" ? input : input.toString();\n\n // Never self-capture the SDK's own collector POST\n const endpoint = telemetry.getEndpoint?.();\n if (!(endpoint && url.startsWith(endpoint))) {\n const responseSize = response\n ? Number(response.headers.get(\"content-length\") ?? 0)\n : 0;\n\n telemetry.log(\"http.request\", buildHttpAttributes({\n url,\n method: init?.method ?? \"GET\",\n statusCode: response?.status ?? 0,\n durationMs: end - start,\n error,\n requestBody: init?.body,\n responseSize,\n }));\n }\n }\n };\n\n // --- Patch XMLHttpRequest methods (absent in some RN-Web runtimes) ---\n if (typeof XMLHttpRequest === \"undefined\") { resolve(); return; }\n const origOpen = XMLHttpRequest.prototype.open;\n const origSend = XMLHttpRequest.prototype.send;\n\n /**\n * Patch XMLHttpRequest.open to capture HTTP method and URL.\n * Stores telemetry data on the XMLHttpRequest instance.\n */\n XMLHttpRequest.prototype.open = function (\n method: string,\n url: string,\n async?: boolean,\n user?: string | null,\n password?: string | null\n ) {\n // Store telemetry info on the xhr instance\n (this as any)._telemetry = {\n method,\n url,\n start: 0,\n };\n return origOpen.apply(this, arguments as any);\n };\n\n /**\n * Patch XMLHttpRequest.send to start timing and listen for completion.\n * Logs telemetry when the request finishes.\n */\n XMLHttpRequest.prototype.send = function (body?: Document | BodyInit | null) {\n const t = (this as any)._telemetry;\n t.start = Date.now();\n\n this.addEventListener(\"loadend\", () => {\n const durationMs = Date.now() - t.start;\n\n // Never self-capture the SDK's own collector POST\n const endpoint = telemetry.getEndpoint?.();\n if (endpoint && String(t.url).startsWith(endpoint)) return;\n\n const responseSize = Number(this.getResponseHeader(\"content-length\") ?? 0);\n\n telemetry.log(\"http.request\", buildHttpAttributes({\n url: t.url,\n method: t.method,\n statusCode: this.status,\n durationMs,\n error: this.status === 0 ? \"Network error\" : null,\n requestBody: body,\n responseSize,\n }));\n });\n\n return origSend.apply(this, arguments as any);\n };\n\n // Resolve immediately since interception setup is synchronous\n resolve();\n });\n }\n}\n"],"names":["NetworkTrackerWeb","telemetry","resolve","originalFetch","input","init","start","response","error","err","end","url","endpoint","responseSize","buildHttpAttributes","origOpen","origSend","method","async","user","password","body","durationMs"],"mappings":";AAeO,MAAMA,EAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAO3B,YAAYC,GAAsB;AAC9B,SAAK,YAAYA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUO,QAAuB;AAC1B,WAAO,IAAI,QAAQ,CAACC,MAAY;AAE5B,YAAMD,IAAY,KAAK,WAGjBE,IAAgB,OAAO;AAwC7B,UAvCA,OAAO,QAAQ,OACXC,GACAC,MACoB;AACpB,cAAMC,IAAQ,KAAK,IAAA;AACnB,YAAIC,IAA4B,MAC5BC,IAAa;AAEjB,YAAI;AACA,iBAAAD,IAAW,MAAMJ,EAAcC,GAAOC,CAAI,GACnCE;AAAA,QACX,SAASE,GAAK;AACV,gBAAAD,IAAQC,GACFA;AAAA,QACV,UAAA;AACI,gBAAMC,IAAM,KAAK,IAAA,GACXC,IAAM,OAAOP,KAAU,WAAWA,IAAQA,EAAM,SAAA,GAGhDQ,IAAWX,EAAU,cAAA;AAC3B,cAAI,EAAEW,KAAYD,EAAI,WAAWC,CAAQ,IAAI;AACzC,kBAAMC,IAAeN,IACf,OAAOA,EAAS,QAAQ,IAAI,gBAAgB,KAAK,CAAC,IAClD;AAEN,YAAAN,EAAU,IAAI,gBAAgBa,EAAoB;AAAA,cAC9C,KAAAH;AAAA,cACA,QAAQN,GAAM,UAAU;AAAA,cACxB,YAAYE,GAAU,UAAU;AAAA,cAChC,YAAYG,IAAMJ;AAAA,cAClB,OAAAE;AAAA,cACA,aAAaH,GAAM;AAAA,cACnB,cAAAQ;AAAA,YAAA,CACH,CAAC;AAAA,UACN;AAAA,QACJ;AAAA,MACJ,GAGI,OAAO,iBAAmB,KAAa;AAAE,QAAAX,EAAA;AAAW;AAAA,MAAQ;AAChE,YAAMa,IAAW,eAAe,UAAU,MACpCC,IAAW,eAAe,UAAU;AAM1C,qBAAe,UAAU,OAAO,SAC5BC,GACAN,GACAO,GACAC,GACAC,GACF;AAEG,oBAAa,aAAa;AAAA,UACvB,QAAAH;AAAA,UACA,KAAAN;AAAA,UACA,OAAO;AAAA,QAAA,GAEJI,EAAS,MAAM,MAAM,SAAgB;AAAA,MAChD,GAMA,eAAe,UAAU,OAAO,SAAUM,GAAmC;AACzE,cAAM,IAAK,KAAa;AACxB,iBAAE,QAAQ,KAAK,IAAA,GAEf,KAAK,iBAAiB,WAAW,MAAM;AACnC,gBAAMC,IAAa,KAAK,IAAA,IAAQ,EAAE,OAG5BV,IAAWX,EAAU,cAAA;AAC3B,cAAIW,KAAY,OAAO,EAAE,GAAG,EAAE,WAAWA,CAAQ,EAAG;AAEpD,gBAAMC,IAAe,OAAO,KAAK,kBAAkB,gBAAgB,KAAK,CAAC;AAEzE,UAAAZ,EAAU,IAAI,gBAAgBa,EAAoB;AAAA,YAC9C,KAAK,EAAE;AAAA,YACP,QAAQ,EAAE;AAAA,YACV,YAAY,KAAK;AAAA,YACjB,YAAAQ;AAAA,YACA,OAAO,KAAK,WAAW,IAAI,kBAAkB;AAAA,YAC7C,aAAaD;AAAA,YACb,cAAAR;AAAA,UAAA,CACH,CAAC;AAAA,QACN,CAAC,GAEMG,EAAS,MAAM,MAAM,SAAgB;AAAA,MAChD,GAGAd,EAAA;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;"}
@@ -1,48 +0,0 @@
1
- import { Platform as o } from "react-native";
2
- function m() {
3
- const r = global.performance;
4
- return r && r.memory && typeof r.memory.usedJSHeapSize == "number" ? r.memory.usedJSHeapSize / (1024 * 1024) : null;
5
- }
6
- class l {
7
- constructor(e) {
8
- this.telemetry = e, this.intervalId = null;
9
- }
10
- /**
11
- * Records a memory_usage metric (value = used heap MB) per sample, on the v3 metric path.
12
- */
13
- recordMemoryUsage() {
14
- const e = m();
15
- if (e == null) return;
16
- const t = e < 256 ? "low" : e < 512 ? "moderate" : "high";
17
- this.telemetry.logMetric("memory_usage", e, {
18
- "memory.usage_mb": e,
19
- "memory.pressure_level": t,
20
- "memory.unit": "MB",
21
- "memory.type": "heap",
22
- "memory.source": o.OS
23
- });
24
- }
25
- /**
26
- * Starts periodic memory usage logging at the given interval.
27
- * Returns a resolved Promise for async startup flows.
28
- *
29
- * @param intervalMs Sampling interval in milliseconds (default: 30s)
30
- */
31
- start(e = 3e4) {
32
- return new Promise((t) => {
33
- this.recordMemoryUsage(), this.intervalId = setInterval(() => {
34
- this.recordMemoryUsage();
35
- }, e), t();
36
- });
37
- }
38
- /**
39
- * Stops the periodic memory logging if it was started.
40
- */
41
- stop() {
42
- this.intervalId !== null && (clearInterval(this.intervalId), this.intervalId = null);
43
- }
44
- }
45
- export {
46
- l as TelemetryMemoryUsageNative
47
- };
48
- //# sourceMappingURL=memoryNative.native-BWLh2S9L.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memoryNative.native-BWLh2S9L.js","sources":["../src/adapters/native/memoryNative.native.ts"],"sourcesContent":["// telemetryMemoryUsage.native.ts\nimport { Telemetry } from \"../../core/telemetry\";\nimport { Platform } from \"react-native\";\n\n/**\n * Attempts to retrieve JavaScript heap memory usage in MB.\n * Note: This is only supported on some JavaScript engines (e.g., Hermes).\n * Returns null if not available.\n */\nfunction getNativeMemoryUsage(): number | null {\n const perf: any = global.performance;\n if (perf && perf.memory && typeof perf.memory.usedJSHeapSize === \"number\") {\n return perf.memory.usedJSHeapSize / (1024 * 1024); // Convert bytes to MB\n }\n return null;\n}\n\ntype MemoryPressureLevel = \"low\" | \"moderate\" | \"high\";\n\n/**\n * Logs JavaScript memory usage and pressure level at regular intervals\n * in a React Native environment.\n */\nexport class TelemetryMemoryUsageNative {\n private intervalId: NodeJS.Timeout | null = null;\n\n constructor(private telemetry: Telemetry) { }\n\n /**\n * Records a memory_usage metric (value = used heap MB) per sample, on the v3 metric path.\n */\n recordMemoryUsage(): void {\n const usedMb = getNativeMemoryUsage();\n if (usedMb == null) return; // Skip if unsupported\n\n // Classify pressure level based on used heap memory (in MB)\n const pressureLevel: MemoryPressureLevel =\n usedMb < 256 ? \"low\" : usedMb < 512 ? \"moderate\" : \"high\";\n\n this.telemetry.logMetric(\"memory_usage\", usedMb, {\n \"memory.usage_mb\": usedMb,\n \"memory.pressure_level\": pressureLevel,\n \"memory.unit\": \"MB\",\n \"memory.type\": \"heap\",\n \"memory.source\": Platform.OS,\n });\n }\n\n /**\n * Starts periodic memory usage logging at the given interval.\n * Returns a resolved Promise for async startup flows.\n * \n * @param intervalMs Sampling interval in milliseconds (default: 30s)\n */\n start(intervalMs: number = 30000): Promise<void> {\n return new Promise((resolve) => {\n this.recordMemoryUsage();\n\n this.intervalId = setInterval(() => {\n this.recordMemoryUsage();\n }, intervalMs);\n\n resolve();\n });\n }\n\n /**\n * Stops the periodic memory logging if it was started.\n */\n stop(): void {\n if (this.intervalId !== null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n}\n"],"names":["getNativeMemoryUsage","perf","TelemetryMemoryUsageNative","telemetry","usedMb","pressureLevel","Platform","intervalMs","resolve"],"mappings":";AASA,SAASA,IAAsC;AAC3C,QAAMC,IAAY,OAAO;AACzB,SAAIA,KAAQA,EAAK,UAAU,OAAOA,EAAK,OAAO,kBAAmB,WACtDA,EAAK,OAAO,kBAAkB,OAAO,QAEzC;AACX;AAQO,MAAMC,EAA2B;AAAA,EAGpC,YAAoBC,GAAsB;AAAtB,SAAA,YAAAA,GAFpB,KAAQ,aAAoC;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA,EAK5C,oBAA0B;AACtB,UAAMC,IAASJ,EAAA;AACf,QAAII,KAAU,KAAM;AAGpB,UAAMC,IACFD,IAAS,MAAM,QAAQA,IAAS,MAAM,aAAa;AAEvD,SAAK,UAAU,UAAU,gBAAgBA,GAAQ;AAAA,MAC7C,mBAAmBA;AAAA,MACnB,yBAAyBC;AAAA,MACzB,eAAe;AAAA,MACf,eAAe;AAAA,MACf,iBAAiBC,EAAS;AAAA,IAAA,CAC7B;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAMC,IAAqB,KAAsB;AAC7C,WAAO,IAAI,QAAQ,CAACC,MAAY;AAC5B,WAAK,kBAAA,GAEL,KAAK,aAAa,YAAY,MAAM;AAChC,aAAK,kBAAA;AAAA,MACT,GAAGD,CAAU,GAEbC,EAAA;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,OAAa;AACT,IAAI,KAAK,eAAe,SACpB,cAAc,KAAK,UAAU,GAC7B,KAAK,aAAa;AAAA,EAE1B;AACJ;"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react-native");function s(){const r=global.performance;return r&&r.memory&&typeof r.memory.usedJSHeapSize=="number"?r.memory.usedJSHeapSize/(1024*1024):null}class m{constructor(e){this.telemetry=e,this.intervalId=null}recordMemoryUsage(){const e=s();if(e==null)return;const t=e<256?"low":e<512?"moderate":"high";this.telemetry.logMetric("memory_usage",e,{"memory.usage_mb":e,"memory.pressure_level":t,"memory.unit":"MB","memory.type":"heap","memory.source":o.Platform.OS})}start(e=3e4){return new Promise(t=>{this.recordMemoryUsage(),this.intervalId=setInterval(()=>{this.recordMemoryUsage()},e),t()})}stop(){this.intervalId!==null&&(clearInterval(this.intervalId),this.intervalId=null)}}exports.TelemetryMemoryUsageNative=m;
2
- //# sourceMappingURL=memoryNative.native-DCXSOd4Q.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memoryNative.native-DCXSOd4Q.cjs","sources":["../src/adapters/native/memoryNative.native.ts"],"sourcesContent":["// telemetryMemoryUsage.native.ts\nimport { Telemetry } from \"../../core/telemetry\";\nimport { Platform } from \"react-native\";\n\n/**\n * Attempts to retrieve JavaScript heap memory usage in MB.\n * Note: This is only supported on some JavaScript engines (e.g., Hermes).\n * Returns null if not available.\n */\nfunction getNativeMemoryUsage(): number | null {\n const perf: any = global.performance;\n if (perf && perf.memory && typeof perf.memory.usedJSHeapSize === \"number\") {\n return perf.memory.usedJSHeapSize / (1024 * 1024); // Convert bytes to MB\n }\n return null;\n}\n\ntype MemoryPressureLevel = \"low\" | \"moderate\" | \"high\";\n\n/**\n * Logs JavaScript memory usage and pressure level at regular intervals\n * in a React Native environment.\n */\nexport class TelemetryMemoryUsageNative {\n private intervalId: NodeJS.Timeout | null = null;\n\n constructor(private telemetry: Telemetry) { }\n\n /**\n * Records a memory_usage metric (value = used heap MB) per sample, on the v3 metric path.\n */\n recordMemoryUsage(): void {\n const usedMb = getNativeMemoryUsage();\n if (usedMb == null) return; // Skip if unsupported\n\n // Classify pressure level based on used heap memory (in MB)\n const pressureLevel: MemoryPressureLevel =\n usedMb < 256 ? \"low\" : usedMb < 512 ? \"moderate\" : \"high\";\n\n this.telemetry.logMetric(\"memory_usage\", usedMb, {\n \"memory.usage_mb\": usedMb,\n \"memory.pressure_level\": pressureLevel,\n \"memory.unit\": \"MB\",\n \"memory.type\": \"heap\",\n \"memory.source\": Platform.OS,\n });\n }\n\n /**\n * Starts periodic memory usage logging at the given interval.\n * Returns a resolved Promise for async startup flows.\n * \n * @param intervalMs Sampling interval in milliseconds (default: 30s)\n */\n start(intervalMs: number = 30000): Promise<void> {\n return new Promise((resolve) => {\n this.recordMemoryUsage();\n\n this.intervalId = setInterval(() => {\n this.recordMemoryUsage();\n }, intervalMs);\n\n resolve();\n });\n }\n\n /**\n * Stops the periodic memory logging if it was started.\n */\n stop(): void {\n if (this.intervalId !== null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n}\n"],"names":["getNativeMemoryUsage","perf","TelemetryMemoryUsageNative","telemetry","usedMb","pressureLevel","Platform","intervalMs","resolve"],"mappings":"gHASA,SAASA,GAAsC,CAC3C,MAAMC,EAAY,OAAO,YACzB,OAAIA,GAAQA,EAAK,QAAU,OAAOA,EAAK,OAAO,gBAAmB,SACtDA,EAAK,OAAO,gBAAkB,KAAO,MAEzC,IACX,CAQO,MAAMC,CAA2B,CAGpC,YAAoBC,EAAsB,CAAtB,KAAA,UAAAA,EAFpB,KAAQ,WAAoC,IAEA,CAK5C,mBAA0B,CACtB,MAAMC,EAASJ,EAAA,EACf,GAAII,GAAU,KAAM,OAGpB,MAAMC,EACFD,EAAS,IAAM,MAAQA,EAAS,IAAM,WAAa,OAEvD,KAAK,UAAU,UAAU,eAAgBA,EAAQ,CAC7C,kBAAmBA,EACnB,wBAAyBC,EACzB,cAAe,KACf,cAAe,OACf,gBAAiBC,EAAAA,SAAS,EAAA,CAC7B,CACL,CAQA,MAAMC,EAAqB,IAAsB,CAC7C,OAAO,IAAI,QAASC,GAAY,CAC5B,KAAK,kBAAA,EAEL,KAAK,WAAa,YAAY,IAAM,CAChC,KAAK,kBAAA,CACT,EAAGD,CAAU,EAEbC,EAAA,CACJ,CAAC,CACL,CAKA,MAAa,CACL,KAAK,aAAe,OACpB,cAAc,KAAK,UAAU,EAC7B,KAAK,WAAa,KAE1B,CACJ"}
@@ -1,48 +0,0 @@
1
- function o() {
2
- const r = performance;
3
- return r && r.memory && typeof r.memory.usedJSHeapSize == "number" ? r.memory.usedJSHeapSize / (1024 * 1024) : null;
4
- }
5
- class m {
6
- constructor(e) {
7
- this.telemetry = e, this.intervalId = null;
8
- }
9
- /**
10
- * Records a memory_usage metric (value = used heap MB) per sample, on the v3 metric path.
11
- */
12
- recordMemoryUsage() {
13
- const e = o();
14
- if (e == null) return;
15
- const t = e < 256 ? "low" : e < 512 ? "moderate" : "high";
16
- this.telemetry.logMetric("memory_usage", e, {
17
- "memory.usage_mb": e,
18
- "memory.pressure_level": t,
19
- "memory.unit": "MB",
20
- "memory.type": "heap",
21
- "memory.source": "performance.memory"
22
- });
23
- }
24
- /**
25
- * Starts periodic memory usage logging at the specified interval.
26
- * Returns a Promise that resolves immediately for async compatibility.
27
- *
28
- * @param intervalMs Interval in milliseconds between samples (default 30s)
29
- * @returns Promise<void>
30
- */
31
- start(e = 3e4) {
32
- return new Promise((t) => {
33
- this.recordMemoryUsage(), this.intervalId = window.setInterval(() => {
34
- this.recordMemoryUsage();
35
- }, e), t();
36
- });
37
- }
38
- /**
39
- * Stops the periodic memory logging if running.
40
- */
41
- stop() {
42
- this.intervalId !== null && (clearInterval(this.intervalId), this.intervalId = null);
43
- }
44
- }
45
- export {
46
- m as TelemetryMemoryUsageWeb
47
- };
48
- //# sourceMappingURL=memoryWeb.web-B3YuV-cB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memoryWeb.web-B3YuV-cB.js","sources":["../src/adapters/web/memoryWeb.web.ts"],"sourcesContent":["import { Telemetry } from \"../../core/telemetry\";\n\n/**\n * Attempts to retrieve JavaScript heap memory usage in MB from the browser's\n * performance API. Returns null if unsupported.\n */\nfunction getWebMemoryUsage(): number | null {\n const perf: any = performance;\n if (perf && perf.memory && typeof perf.memory.usedJSHeapSize === \"number\") {\n return perf.memory.usedJSHeapSize / (1024 * 1024); // bytes to MB\n }\n return null;\n}\n\ntype MemoryPressureLevel = \"low\" | \"moderate\" | \"high\";\n\n/**\n * Logs JavaScript heap memory usage and pressure level at regular intervals\n * in browser environments using the Performance API.\n */\nexport class TelemetryMemoryUsageWeb {\n private intervalId: number | null = null;\n\n constructor(private telemetry: Telemetry) { }\n\n /**\n * Records a memory_usage metric (value = used heap MB) per sample, on the v3 metric path.\n */\n recordMemoryUsage(): void {\n const usedMb = getWebMemoryUsage();\n if (usedMb == null) return; // Unsupported in this browser\n\n // Define pressure levels based on used heap size (MB)\n const pressureLevel: MemoryPressureLevel =\n usedMb < 256 ? \"low\" : usedMb < 512 ? \"moderate\" : \"high\";\n\n this.telemetry.logMetric(\"memory_usage\", usedMb, {\n \"memory.usage_mb\": usedMb,\n \"memory.pressure_level\": pressureLevel,\n \"memory.unit\": \"MB\",\n \"memory.type\": \"heap\",\n \"memory.source\": \"performance.memory\",\n });\n }\n\n /**\n * Starts periodic memory usage logging at the specified interval.\n * Returns a Promise that resolves immediately for async compatibility.\n *\n * @param intervalMs Interval in milliseconds between samples (default 30s)\n * @returns Promise<void>\n */\n start(intervalMs: number = 30000): Promise<void> {\n return new Promise((resolve) => {\n this.recordMemoryUsage();\n\n this.intervalId = window.setInterval(() => {\n this.recordMemoryUsage();\n }, intervalMs);\n\n resolve();\n });\n }\n\n /**\n * Stops the periodic memory logging if running.\n */\n stop(): void {\n if (this.intervalId !== null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n}\n"],"names":["getWebMemoryUsage","perf","TelemetryMemoryUsageWeb","telemetry","usedMb","pressureLevel","intervalMs","resolve"],"mappings":"AAMA,SAASA,IAAmC;AACxC,QAAMC,IAAY;AAClB,SAAIA,KAAQA,EAAK,UAAU,OAAOA,EAAK,OAAO,kBAAmB,WACtDA,EAAK,OAAO,kBAAkB,OAAO,QAEzC;AACX;AAQO,MAAMC,EAAwB;AAAA,EAGjC,YAAoBC,GAAsB;AAAtB,SAAA,YAAAA,GAFpB,KAAQ,aAA4B;AAAA,EAEQ;AAAA;AAAA;AAAA;AAAA,EAK5C,oBAA0B;AACtB,UAAMC,IAASJ,EAAA;AACf,QAAII,KAAU,KAAM;AAGpB,UAAMC,IACFD,IAAS,MAAM,QAAQA,IAAS,MAAM,aAAa;AAEvD,SAAK,UAAU,UAAU,gBAAgBA,GAAQ;AAAA,MAC7C,mBAAmBA;AAAA,MACnB,yBAAyBC;AAAA,MACzB,eAAe;AAAA,MACf,eAAe;AAAA,MACf,iBAAiB;AAAA,IAAA,CACpB;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAMC,IAAqB,KAAsB;AAC7C,WAAO,IAAI,QAAQ,CAACC,MAAY;AAC5B,WAAK,kBAAA,GAEL,KAAK,aAAa,OAAO,YAAY,MAAM;AACvC,aAAK,kBAAA;AAAA,MACT,GAAGD,CAAU,GAEbC,EAAA;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,OAAa;AACT,IAAI,KAAK,eAAe,SACpB,cAAc,KAAK,UAAU,GAC7B,KAAK,aAAa;AAAA,EAE1B;AACJ;"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function o(){const r=performance;return r&&r.memory&&typeof r.memory.usedJSHeapSize=="number"?r.memory.usedJSHeapSize/(1024*1024):null}class m{constructor(e){this.telemetry=e,this.intervalId=null}recordMemoryUsage(){const e=o();if(e==null)return;const t=e<256?"low":e<512?"moderate":"high";this.telemetry.logMetric("memory_usage",e,{"memory.usage_mb":e,"memory.pressure_level":t,"memory.unit":"MB","memory.type":"heap","memory.source":"performance.memory"})}start(e=3e4){return new Promise(t=>{this.recordMemoryUsage(),this.intervalId=window.setInterval(()=>{this.recordMemoryUsage()},e),t()})}stop(){this.intervalId!==null&&(clearInterval(this.intervalId),this.intervalId=null)}}exports.TelemetryMemoryUsageWeb=m;
2
- //# sourceMappingURL=memoryWeb.web-CheXAcJn.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memoryWeb.web-CheXAcJn.cjs","sources":["../src/adapters/web/memoryWeb.web.ts"],"sourcesContent":["import { Telemetry } from \"../../core/telemetry\";\n\n/**\n * Attempts to retrieve JavaScript heap memory usage in MB from the browser's\n * performance API. Returns null if unsupported.\n */\nfunction getWebMemoryUsage(): number | null {\n const perf: any = performance;\n if (perf && perf.memory && typeof perf.memory.usedJSHeapSize === \"number\") {\n return perf.memory.usedJSHeapSize / (1024 * 1024); // bytes to MB\n }\n return null;\n}\n\ntype MemoryPressureLevel = \"low\" | \"moderate\" | \"high\";\n\n/**\n * Logs JavaScript heap memory usage and pressure level at regular intervals\n * in browser environments using the Performance API.\n */\nexport class TelemetryMemoryUsageWeb {\n private intervalId: number | null = null;\n\n constructor(private telemetry: Telemetry) { }\n\n /**\n * Records a memory_usage metric (value = used heap MB) per sample, on the v3 metric path.\n */\n recordMemoryUsage(): void {\n const usedMb = getWebMemoryUsage();\n if (usedMb == null) return; // Unsupported in this browser\n\n // Define pressure levels based on used heap size (MB)\n const pressureLevel: MemoryPressureLevel =\n usedMb < 256 ? \"low\" : usedMb < 512 ? \"moderate\" : \"high\";\n\n this.telemetry.logMetric(\"memory_usage\", usedMb, {\n \"memory.usage_mb\": usedMb,\n \"memory.pressure_level\": pressureLevel,\n \"memory.unit\": \"MB\",\n \"memory.type\": \"heap\",\n \"memory.source\": \"performance.memory\",\n });\n }\n\n /**\n * Starts periodic memory usage logging at the specified interval.\n * Returns a Promise that resolves immediately for async compatibility.\n *\n * @param intervalMs Interval in milliseconds between samples (default 30s)\n * @returns Promise<void>\n */\n start(intervalMs: number = 30000): Promise<void> {\n return new Promise((resolve) => {\n this.recordMemoryUsage();\n\n this.intervalId = window.setInterval(() => {\n this.recordMemoryUsage();\n }, intervalMs);\n\n resolve();\n });\n }\n\n /**\n * Stops the periodic memory logging if running.\n */\n stop(): void {\n if (this.intervalId !== null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n}\n"],"names":["getWebMemoryUsage","perf","TelemetryMemoryUsageWeb","telemetry","usedMb","pressureLevel","intervalMs","resolve"],"mappings":"gFAMA,SAASA,GAAmC,CACxC,MAAMC,EAAY,YAClB,OAAIA,GAAQA,EAAK,QAAU,OAAOA,EAAK,OAAO,gBAAmB,SACtDA,EAAK,OAAO,gBAAkB,KAAO,MAEzC,IACX,CAQO,MAAMC,CAAwB,CAGjC,YAAoBC,EAAsB,CAAtB,KAAA,UAAAA,EAFpB,KAAQ,WAA4B,IAEQ,CAK5C,mBAA0B,CACtB,MAAMC,EAASJ,EAAA,EACf,GAAII,GAAU,KAAM,OAGpB,MAAMC,EACFD,EAAS,IAAM,MAAQA,EAAS,IAAM,WAAa,OAEvD,KAAK,UAAU,UAAU,eAAgBA,EAAQ,CAC7C,kBAAmBA,EACnB,wBAAyBC,EACzB,cAAe,KACf,cAAe,OACf,gBAAiB,oBAAA,CACpB,CACL,CASA,MAAMC,EAAqB,IAAsB,CAC7C,OAAO,IAAI,QAASC,GAAY,CAC5B,KAAK,kBAAA,EAEL,KAAK,WAAa,OAAO,YAAY,IAAM,CACvC,KAAK,kBAAA,CACT,EAAGD,CAAU,EAEbC,EAAA,CACJ,CAAC,CACL,CAKA,MAAa,CACL,KAAK,aAAe,OACpB,cAAc,KAAK,UAAU,EAC7B,KAAK,WAAa,KAE1B,CACJ"}
@@ -1,70 +0,0 @@
1
- import { d as t } from "./debug-DsvQ9y3W.js";
2
- import n from "@react-native-async-storage/async-storage";
3
- import { b as h } from "./batch-DLG_gtOm.js";
4
- const y = "https://your.telemetry.endpoint/collect", o = "telemetry_failed_events";
5
- async function c(r) {
6
- const a = JSON.parse(await n.getItem(o) || "[]");
7
- await n.setItem(o, JSON.stringify([...a, ...r]));
8
- }
9
- async function d(r, a, e, s = 3) {
10
- let l = 0, m;
11
- for (; l < s; )
12
- try {
13
- const i = await fetch(r, {
14
- method: "POST",
15
- headers: {
16
- "Content-Type": "application/json",
17
- ...a ? { "X-API-Key": a } : {}
18
- },
19
- body: h(e)
20
- });
21
- if (!i.ok)
22
- throw t.warn("Telemetry send failed with status:", i.status), new Error(`Telemetry send failed: ${i.status}`);
23
- t.log("Telemetry send succeeded, events sent:", e.length ?? 0);
24
- return;
25
- } catch (i) {
26
- m = i, l++, l < s && await new Promise(
27
- (g) => setTimeout(g, 500 * 2 ** l + Math.random() * 200)
28
- );
29
- }
30
- throw m;
31
- }
32
- function u(r = y, a) {
33
- return {
34
- async send(e) {
35
- await d(r, a, e);
36
- },
37
- async onFailure(e) {
38
- await c(e);
39
- },
40
- async replayFailed() {
41
- t.log("Telemetry replayFailedNative launched"), t.log("AsyncStorage available methods:", Object.keys(n));
42
- const e = JSON.parse(await n.getItem(o) || "[]");
43
- if (e.length > 0) {
44
- t.log("Replaying failed events, count:", e.length), await n.removeItem(o), t.log("Failed events removed from storage, attempting to resend");
45
- try {
46
- await d(r, a, e);
47
- } catch (s) {
48
- throw await c(e), s;
49
- }
50
- }
51
- }
52
- };
53
- }
54
- async function v(r = y, a) {
55
- t.log("Telemetry replayFailedNative launched"), t.log("AsyncStorage available methods:", Object.keys(n));
56
- const e = JSON.parse(await n.getItem(o) || "[]");
57
- if (e.length > 0) {
58
- await n.removeItem(o);
59
- try {
60
- t.log("Replaying failed events, count:", e.length), t.log("Failed events removed from storage, attempting to resend"), await d(r, a, e);
61
- } catch (s) {
62
- throw t.warn("Telemetry replay failed Native Sender class:", s), await c(e), s;
63
- }
64
- }
65
- }
66
- export {
67
- u as nativeSender,
68
- v as replayFailedNative
69
- };
70
- //# sourceMappingURL=nativeSender-BE_mzw_S.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nativeSender-BE_mzw_S.js","sources":["../src/adapters/nativeSender.ts"],"sourcesContent":["import { debug } from \"../core/debug\";\nimport type { TelemetryEvent, Sender } from \"../core/telemetry\";\nimport AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport { buildBatch } from \"./batch\";\n\nconst DEFAULT_ENDPOINT = \"https://your.telemetry.endpoint/collect\";\nconst STORAGE_KEY = \"telemetry_failed_events\";\n\nasync function persistFailed(events: TelemetryEvent[]) {\n const existing = JSON.parse((await AsyncStorage.getItem(STORAGE_KEY)) || \"[]\");\n await AsyncStorage.setItem(STORAGE_KEY, JSON.stringify([...existing, ...events]));\n}\n\n// ⬇️ Helper: send with retries (exponential backoff + jitter)\nasync function sendWithRetry(endpoint: string, apiKey: string | undefined, events: TelemetryEvent[], retryCount: number = 3) {\n let attempts = 0;\n let lastError: any;\n\n while (attempts < retryCount) {\n try {\n const res = await fetch(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(apiKey ? { \"X-API-Key\": apiKey } : {}),\n },\n body: buildBatch(events),\n });\n\n if (!res.ok) {\n\n debug.warn(\"Telemetry send failed with status:\", res.status);\n throw new Error(`Telemetry send failed: ${res.status}`);\n }\n\n debug.log(\"Telemetry send succeeded, events sent:\", events.length ?? 0);\n\n return; // ✅ success\n } catch (err) {\n lastError = err;\n attempts++;\n if (attempts < retryCount) {\n // ⬇️ exponential backoff with jitter\n await new Promise(res =>\n setTimeout(res, 500 * 2 ** attempts + Math.random() * 200)\n );\n }\n }\n }\n\n // ❌ after retries still failed\n throw lastError;\n}\n\nexport function nativeSender(endpoint: string = DEFAULT_ENDPOINT, apiKey?: string): Sender {\n return {\n async send(events) {\n // Retry + backoff here; persistence on final failure is the core flush()'s\n // job via onFailure() — kept single, so a failed batch isn't persisted twice.\n await sendWithRetry(endpoint, apiKey, events);\n },\n async onFailure(events) {\n await persistFailed(events);\n },\n async replayFailed() {\n debug.log(\"Telemetry replayFailedNative launched\");\n debug.log(\"AsyncStorage available methods:\", Object.keys(AsyncStorage));\n const stored = JSON.parse((await AsyncStorage.getItem(STORAGE_KEY)) || \"[]\");\n if (stored.length > 0) {\n debug.log(\"Replaying failed events, count:\", stored.length);\n await AsyncStorage.removeItem(STORAGE_KEY);\n debug.log(\"Failed events removed from storage, attempting to resend\");\n try {\n await sendWithRetry(endpoint, apiKey, stored);\n } catch (err) {\n // If replay fails again, re-store\n await persistFailed(stored);\n throw err;\n }\n }\n },\n };\n}\n\n// Recover failed events on app start\nexport async function replayFailedNative(endpoint: string = DEFAULT_ENDPOINT, apiKey?: string) {\n debug.log(\"Telemetry replayFailedNative launched\");\n debug.log(\"AsyncStorage available methods:\", Object.keys(AsyncStorage));\n const stored = JSON.parse((await AsyncStorage.getItem(STORAGE_KEY)) || \"[]\");\n if (stored.length > 0) {\n await AsyncStorage.removeItem(STORAGE_KEY);\n try {\n debug.log(\"Replaying failed events, count:\", stored.length);\n debug.log(\"Failed events removed from storage, attempting to resend\");\n await sendWithRetry(endpoint, apiKey, stored);\n } catch (err) {\n // If replay fails again, re-store\n debug.warn(\"Telemetry replay failed Native Sender class:\", err);\n await persistFailed(stored);\n throw err;\n }\n }\n}\n\n"],"names":["DEFAULT_ENDPOINT","STORAGE_KEY","persistFailed","events","existing","AsyncStorage","sendWithRetry","endpoint","apiKey","retryCount","attempts","lastError","res","buildBatch","debug","err","nativeSender","stored","replayFailedNative"],"mappings":";;;AAKA,MAAMA,IAAmB,2CACnBC,IAAc;AAEpB,eAAeC,EAAcC,GAA0B;AACnD,QAAMC,IAAW,KAAK,MAAO,MAAMC,EAAa,QAAQJ,CAAW,KAAM,IAAI;AAC7E,QAAMI,EAAa,QAAQJ,GAAa,KAAK,UAAU,CAAC,GAAGG,GAAU,GAAGD,CAAM,CAAC,CAAC;AACpF;AAGA,eAAeG,EAAcC,GAAkBC,GAA4BL,GAA0BM,IAAqB,GAAG;AACzH,MAAIC,IAAW,GACXC;AAEJ,SAAOD,IAAWD;AACd,QAAI;AACA,YAAMG,IAAM,MAAM,MAAML,GAAU;AAAA,QAC9B,QAAQ;AAAA,QACR,SAAS;AAAA,UACL,gBAAgB;AAAA,UAChB,GAAIC,IAAS,EAAE,aAAaA,MAAW,CAAA;AAAA,QAAC;AAAA,QAE5C,MAAMK,EAAWV,CAAM;AAAA,MAAA,CAC1B;AAED,UAAI,CAACS,EAAI;AAEL,cAAAE,EAAM,KAAK,sCAAsCF,EAAI,MAAM,GACrD,IAAI,MAAM,0BAA0BA,EAAI,MAAM,EAAE;AAG1D,MAAAE,EAAM,IAAI,0CAA0CX,EAAO,UAAU,CAAC;AAEtE;AAAA,IACJ,SAASY,GAAK;AACV,MAAAJ,IAAYI,GACZL,KACIA,IAAWD,KAEX,MAAM,IAAI;AAAA,QAAQ,CAAAG,MACd,WAAWA,GAAK,MAAM,KAAKF,IAAW,KAAK,OAAA,IAAW,GAAG;AAAA,MAAA;AAAA,IAGrE;AAIJ,QAAMC;AACV;AAEO,SAASK,EAAaT,IAAmBP,GAAkBQ,GAAyB;AACvF,SAAO;AAAA,IACH,MAAM,KAAKL,GAAQ;AAGf,YAAMG,EAAcC,GAAUC,GAAQL,CAAM;AAAA,IAChD;AAAA,IACA,MAAM,UAAUA,GAAQ;AACpB,YAAMD,EAAcC,CAAM;AAAA,IAC9B;AAAA,IACA,MAAM,eAAe;AACjB,MAAAW,EAAM,IAAI,uCAAuC,GACjDA,EAAM,IAAI,mCAAmC,OAAO,KAAKT,CAAY,CAAC;AACtE,YAAMY,IAAS,KAAK,MAAO,MAAMZ,EAAa,QAAQJ,CAAW,KAAM,IAAI;AAC3E,UAAIgB,EAAO,SAAS,GAAG;AACnB,QAAAH,EAAM,IAAI,mCAAmCG,EAAO,MAAM,GAC1D,MAAMZ,EAAa,WAAWJ,CAAW,GACzCa,EAAM,IAAI,0DAA0D;AACpE,YAAI;AACA,gBAAMR,EAAcC,GAAUC,GAAQS,CAAM;AAAA,QAChD,SAASF,GAAK;AAEV,sBAAMb,EAAce,CAAM,GACpBF;AAAA,QACV;AAAA,MACJ;AAAA,IACJ;AAAA,EAAA;AAER;AAGA,eAAsBG,EAAmBX,IAAmBP,GAAkBQ,GAAiB;AAC3F,EAAAM,EAAM,IAAI,uCAAuC,GACjDA,EAAM,IAAI,mCAAmC,OAAO,KAAKT,CAAY,CAAC;AACtE,QAAMY,IAAS,KAAK,MAAO,MAAMZ,EAAa,QAAQJ,CAAW,KAAM,IAAI;AAC3E,MAAIgB,EAAO,SAAS,GAAG;AACnB,UAAMZ,EAAa,WAAWJ,CAAW;AACzC,QAAI;AACA,MAAAa,EAAM,IAAI,mCAAmCG,EAAO,MAAM,GAC1DH,EAAM,IAAI,0DAA0D,GACpE,MAAMR,EAAcC,GAAUC,GAAQS,CAAM;AAAA,IAChD,SAASF,GAAK;AAEV,YAAAD,EAAM,KAAK,gDAAgDC,CAAG,GAC9D,MAAMb,EAAce,CAAM,GACpBF;AAAA,IACV;AAAA,EACJ;AACJ;"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./debug-rnOOxFpN.cjs"),n=require("@react-native-async-storage/async-storage"),m=require("./batch-CLBFgYPC.cjs"),u="https://your.telemetry.endpoint/collect",s="telemetry_failed_events";async function d(r){const a=JSON.parse(await n.getItem(s)||"[]");await n.setItem(s,JSON.stringify([...a,...r]))}async function c(r,a,e,i=3){let o=0,g;for(;o<i;)try{const l=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",...a?{"X-API-Key":a}:{}},body:m.buildBatch(e)});if(!l.ok)throw t.debug.warn("Telemetry send failed with status:",l.status),new Error(`Telemetry send failed: ${l.status}`);t.debug.log("Telemetry send succeeded, events sent:",e.length??0);return}catch(l){g=l,o++,o<i&&await new Promise(y=>setTimeout(y,500*2**o+Math.random()*200))}throw g}function h(r=u,a){return{async send(e){await c(r,a,e)},async onFailure(e){await d(e)},async replayFailed(){t.debug.log("Telemetry replayFailedNative launched"),t.debug.log("AsyncStorage available methods:",Object.keys(n));const e=JSON.parse(await n.getItem(s)||"[]");if(e.length>0){t.debug.log("Replaying failed events, count:",e.length),await n.removeItem(s),t.debug.log("Failed events removed from storage, attempting to resend");try{await c(r,a,e)}catch(i){throw await d(e),i}}}}}async function w(r=u,a){t.debug.log("Telemetry replayFailedNative launched"),t.debug.log("AsyncStorage available methods:",Object.keys(n));const e=JSON.parse(await n.getItem(s)||"[]");if(e.length>0){await n.removeItem(s);try{t.debug.log("Replaying failed events, count:",e.length),t.debug.log("Failed events removed from storage, attempting to resend"),await c(r,a,e)}catch(i){throw t.debug.warn("Telemetry replay failed Native Sender class:",i),await d(e),i}}}exports.nativeSender=h;exports.replayFailedNative=w;
2
- //# sourceMappingURL=nativeSender-DyAUGY7c.cjs.map