@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.
- package/README.md +831 -186
- package/dist/appLifecycle-CECgRVu_.cjs +2 -0
- package/dist/appLifecycle-CECgRVu_.cjs.map +1 -0
- package/dist/appLifecycle-DQErzJIR.js +22 -0
- package/dist/appLifecycle-DQErzJIR.js.map +1 -0
- package/dist/batch-CwoO7noL.js +56 -0
- package/dist/batch-CwoO7noL.js.map +1 -0
- package/dist/batch-DNu8Xr9T.cjs +2 -0
- package/dist/batch-DNu8Xr9T.cjs.map +1 -0
- package/dist/crashCapture-BOJ8nSAZ.cjs +4 -0
- package/dist/crashCapture-BOJ8nSAZ.cjs.map +1 -0
- package/dist/crashCapture-BW8WuyaU.js +70 -0
- package/dist/crashCapture-BW8WuyaU.js.map +1 -0
- package/dist/crashHandler.web-8F_k2veo.js +29 -0
- package/dist/crashHandler.web-8F_k2veo.js.map +1 -0
- package/dist/crashHandler.web-CWmF56mJ.cjs +2 -0
- package/dist/crashHandler.web-CWmF56mJ.cjs.map +1 -0
- package/dist/crashHandlerNative.native-C2kSikDt.cjs +2 -0
- package/dist/crashHandlerNative.native-C2kSikDt.cjs.map +1 -0
- package/dist/crashHandlerNative.native-FupMnr1U.js +39 -0
- package/dist/crashHandlerNative.native-FupMnr1U.js.map +1 -0
- package/dist/deviceInfo.native-BJ-3Jj1T.js +53 -0
- package/dist/deviceInfo.native-BJ-3Jj1T.js.map +1 -0
- package/dist/deviceInfo.native-BoeTZcD6.cjs +2 -0
- package/dist/deviceInfo.native-BoeTZcD6.cjs.map +1 -0
- package/dist/deviceInfo.web-3L3IDQQA.cjs +2 -0
- package/dist/deviceInfo.web-3L3IDQQA.cjs.map +1 -0
- package/dist/deviceInfo.web-BFB1-pcA.js +41 -0
- package/dist/deviceInfo.web-BFB1-pcA.js.map +1 -0
- package/dist/frameTracker-CHG6sIx9.cjs +2 -0
- package/dist/frameTracker-CHG6sIx9.cjs.map +1 -0
- package/dist/frameTracker-DdB8W_kC.js +54 -0
- package/dist/frameTracker-DdB8W_kC.js.map +1 -0
- package/dist/httpAttributes-BrrtM8zh.js +70 -0
- package/dist/httpAttributes-BrrtM8zh.js.map +1 -0
- package/dist/httpAttributes-D0m6UID7.cjs +2 -0
- package/dist/httpAttributes-D0m6UID7.cjs.map +1 -0
- package/dist/index-BtLlV1HA.js +57 -0
- package/dist/index-BtLlV1HA.js.map +1 -0
- package/dist/{deviceInfo.native-D2k0LDhI.js → index-C2XQ-EYw.js} +362 -411
- package/dist/index-C2XQ-EYw.js.map +1 -0
- package/dist/index-CXsVZY35.cjs +2 -0
- package/dist/index-CXsVZY35.cjs.map +1 -0
- package/dist/index-DLquF88M.cjs +2 -0
- package/dist/index-DLquF88M.cjs.map +1 -0
- package/dist/index.native.cjs +1 -1
- package/dist/index.native.cjs.map +1 -1
- package/dist/index.native.js +94 -59
- package/dist/index.native.js.map +1 -1
- package/dist/index.web.cjs +1 -1
- package/dist/index.web.cjs.map +1 -1
- package/dist/index.web.js +88 -33
- package/dist/index.web.js.map +1 -1
- package/dist/interactionWeb.web-Bl_cZlgh.cjs +2 -0
- package/dist/interactionWeb.web-Bl_cZlgh.cjs.map +1 -0
- package/dist/interactionWeb.web-CJAviVQ7.js +109 -0
- package/dist/interactionWeb.web-CJAviVQ7.js.map +1 -0
- package/dist/interceptFetchWeb.web-T88kO-bE.cjs +2 -0
- package/dist/interceptFetchWeb.web-T88kO-bE.cjs.map +1 -0
- package/dist/interceptFetchWeb.web-UXC2Lb6X.js +61 -0
- package/dist/interceptFetchWeb.web-UXC2Lb6X.js.map +1 -0
- package/dist/interceptHttpNative.native-BVpFuoNB.cjs +2 -0
- package/dist/interceptHttpNative.native-BVpFuoNB.cjs.map +1 -0
- package/dist/interceptHttpNative.native-rX-lPNST.js +18 -0
- package/dist/interceptHttpNative.native-rX-lPNST.js.map +1 -0
- package/dist/loadingTime-Bhomd9qq.cjs +2 -0
- package/dist/loadingTime-Bhomd9qq.cjs.map +1 -0
- package/dist/loadingTime-ZkYvFijA.js +70 -0
- package/dist/loadingTime-ZkYvFijA.js.map +1 -0
- package/dist/memoryNative.native-C42h9SjK.js +54 -0
- package/dist/memoryNative.native-C42h9SjK.js.map +1 -0
- package/dist/memoryNative.native-CA-7w9w1.cjs +2 -0
- package/dist/memoryNative.native-CA-7w9w1.cjs.map +1 -0
- package/dist/memoryStore-BIGZmmfD.cjs +2 -0
- package/dist/memoryStore-BIGZmmfD.cjs.map +1 -0
- package/dist/memoryStore-F5I-GQKM.js +193 -0
- package/dist/memoryStore-F5I-GQKM.js.map +1 -0
- package/dist/nativeSender-CfQaRuDK.cjs +2 -0
- package/dist/nativeSender-CfQaRuDK.cjs.map +1 -0
- package/dist/nativeSender-pgVSIv-X.js +59 -0
- package/dist/nativeSender-pgVSIv-X.js.map +1 -0
- package/dist/navigationRef-BzYbs8cm.js +28 -0
- package/dist/navigationRef-BzYbs8cm.js.map +1 -0
- package/dist/navigationRef-C-_qhb43.cjs +2 -0
- package/dist/navigationRef-C-_qhb43.cjs.map +1 -0
- package/dist/{navigationTracker-Cts68dgG.js → navigationTracker-BmywA_Bg.js} +4 -4
- package/dist/navigationTracker-BmywA_Bg.js.map +1 -0
- package/dist/navigationTracker-HkwVyywz.cjs +2 -0
- package/dist/navigationTracker-HkwVyywz.cjs.map +1 -0
- package/dist/navigationWeb.web-CW_z7Ca4.cjs +2 -0
- package/dist/navigationWeb.web-CW_z7Ca4.cjs.map +1 -0
- package/dist/navigationWeb.web-CcwgKuIZ.js +55 -0
- package/dist/navigationWeb.web-CcwgKuIZ.js.map +1 -0
- package/dist/{networkInfo.native-BK5fpAOL.js → networkInfo.native-CGrx9cnH.js} +15 -15
- package/dist/{networkInfo.native-BK5fpAOL.js.map → networkInfo.native-CGrx9cnH.js.map} +1 -1
- package/dist/{networkInfo.native-cxuw93Uy.cjs → networkInfo.native-YVySdv3S.cjs} +2 -2
- package/dist/{networkInfo.native-cxuw93Uy.cjs.map → networkInfo.native-YVySdv3S.cjs.map} +1 -1
- package/dist/{networkInfo.web-twcNn_hc.js → networkInfo.web-B2YlLNsI.js} +3 -3
- package/dist/networkInfo.web-B2YlLNsI.js.map +1 -0
- package/dist/networkInfo.web-PltJTHsy.cjs +2 -0
- package/dist/networkInfo.web-PltJTHsy.cjs.map +1 -0
- package/dist/runtimeReady.native-Bh7EcYmK.js +14 -0
- package/dist/runtimeReady.native-Bh7EcYmK.js.map +1 -0
- package/dist/runtimeReady.native-jUmuE1lV.cjs +2 -0
- package/dist/runtimeReady.native-jUmuE1lV.cjs.map +1 -0
- package/dist/runtimeReady.web-C8fdIbVR.js +25 -0
- package/dist/runtimeReady.web-C8fdIbVR.js.map +1 -0
- package/dist/runtimeReady.web-DHW682RN.cjs +2 -0
- package/dist/runtimeReady.web-DHW682RN.cjs.map +1 -0
- package/dist/seedRuntimeReady-BKwkBEAF.cjs +2 -0
- package/dist/seedRuntimeReady-BKwkBEAF.cjs.map +1 -0
- package/dist/seedRuntimeReady-Cz8nOKoo.js +10 -0
- package/dist/seedRuntimeReady-Cz8nOKoo.js.map +1 -0
- package/dist/src/adapters/appLifecycle.d.ts +8 -1
- package/dist/src/adapters/batch.d.ts +2 -0
- package/dist/src/adapters/crashCapture.d.ts +38 -9
- package/dist/src/adapters/failedEvents.d.ts +43 -0
- package/dist/src/adapters/frameAggregate.d.ts +8 -3
- package/dist/src/adapters/frameTracker.d.ts +30 -0
- package/dist/src/adapters/httpAttributes.d.ts +18 -0
- package/dist/src/adapters/loadingTime.d.ts +67 -0
- package/dist/src/adapters/native/interceptHttpNative.native.d.ts +18 -0
- package/dist/src/adapters/native/memoryNative.native.d.ts +15 -11
- package/dist/src/adapters/native/runtimeReady.native.d.ts +1 -0
- package/dist/src/adapters/native/store.native.d.ts +10 -0
- package/dist/src/adapters/nativeSender.d.ts +2 -2
- package/dist/src/adapters/navigationRef.d.ts +21 -0
- package/dist/src/adapters/navigationTracker.d.ts +1 -1
- package/dist/src/adapters/screenTiming.d.ts +8 -2
- package/dist/src/adapters/seedRuntimeReady.d.ts +8 -0
- package/dist/src/adapters/traceHeader.d.ts +33 -0
- package/dist/src/adapters/traceManager.d.ts +131 -0
- package/dist/src/adapters/uiInteraction.d.ts +111 -0
- package/dist/src/adapters/viewManager.d.ts +161 -0
- package/dist/src/adapters/viewport.d.ts +15 -0
- package/dist/src/adapters/web/interactionWeb.web.d.ts +36 -0
- package/dist/src/adapters/web/interceptFetchWeb.web.d.ts +3 -11
- package/dist/src/adapters/web/navigationWeb.web.d.ts +10 -0
- package/dist/src/adapters/web/runtimeReady.web.d.ts +5 -0
- package/dist/src/adapters/web/store.web.d.ts +12 -0
- package/dist/src/adapters/web/webVitals.web.d.ts +49 -0
- package/dist/src/adapters/webSender.d.ts +2 -2
- package/dist/src/adapters/webVitals.d.ts +25 -0
- package/dist/src/adapters/xhrIntercept.d.ts +53 -0
- package/dist/src/core/beforeSend.d.ts +20 -0
- package/dist/src/core/debug.d.ts +7 -0
- package/dist/src/core/memoryStore.d.ts +23 -0
- package/dist/src/core/store.d.ts +41 -0
- package/dist/src/core/telemetry.d.ts +305 -35
- package/dist/src/core/userProfile.d.ts +12 -0
- package/dist/src/core/utils/json.d.ts +7 -0
- package/dist/src/core/utils/uuid.d.ts +10 -1
- package/dist/src/createTelemetry.native.d.ts +7 -0
- package/dist/src/createTelemetry.web.d.ts +7 -0
- package/dist/src/index.base.d.ts +17 -1
- package/dist/src/index.native.d.ts +46 -9
- package/dist/src/index.web.d.ts +33 -2
- package/dist/store.native-BYBJcy6o.js +32 -0
- package/dist/store.native-BYBJcy6o.js.map +1 -0
- package/dist/store.native-TPqXngmF.cjs +2 -0
- package/dist/store.native-TPqXngmF.cjs.map +1 -0
- package/dist/store.web-CvqqN-_Z.cjs +2 -0
- package/dist/store.web-CvqqN-_Z.cjs.map +1 -0
- package/dist/store.web-DJAlN0nc.js +31 -0
- package/dist/store.web-DJAlN0nc.js.map +1 -0
- package/dist/telemetry-ByDJIz_9.js +1280 -0
- package/dist/telemetry-ByDJIz_9.js.map +1 -0
- package/dist/telemetry-CrU7i1Jc.cjs +2 -0
- package/dist/telemetry-CrU7i1Jc.cjs.map +1 -0
- package/dist/uiInteraction-CdzvEI1p.cjs +2 -0
- package/dist/uiInteraction-CdzvEI1p.cjs.map +1 -0
- package/dist/uiInteraction-DAqxxz0q.js +104 -0
- package/dist/uiInteraction-DAqxxz0q.js.map +1 -0
- package/dist/viewport-Dd85GUNO.cjs +2 -0
- package/dist/viewport-Dd85GUNO.cjs.map +1 -0
- package/dist/viewport-Dzmt5QwK.js +15 -0
- package/dist/viewport-Dzmt5QwK.js.map +1 -0
- package/dist/web-vitals.attribution-CVCPiX-h.cjs +2 -0
- package/dist/web-vitals.attribution-CVCPiX-h.cjs.map +1 -0
- package/dist/web-vitals.attribution-xw9N5MKQ.js +488 -0
- package/dist/web-vitals.attribution-xw9N5MKQ.js.map +1 -0
- package/dist/webSender-BIwslfpT.js +63 -0
- package/dist/webSender-BIwslfpT.js.map +1 -0
- package/dist/webSender-CVtE4sOF.cjs +2 -0
- package/dist/webSender-CVtE4sOF.cjs.map +1 -0
- package/dist/webVitals.web-CNIpsKlA.js +85 -0
- package/dist/webVitals.web-CNIpsKlA.js.map +1 -0
- package/dist/webVitals.web-DpWJ-iYp.cjs +2 -0
- package/dist/webVitals.web-DpWJ-iYp.cjs.map +1 -0
- package/dist/xhrIntercept-BADex6Cq.cjs +2 -0
- package/dist/xhrIntercept-BADex6Cq.cjs.map +1 -0
- package/dist/xhrIntercept-BNiA41Mj.js +53 -0
- package/dist/xhrIntercept-BNiA41Mj.js.map +1 -0
- package/docs/migration-v4.md +190 -0
- package/package.json +12 -4
- package/dist/appLifecycle-Cynw0kAv.js +0 -14
- package/dist/appLifecycle-Cynw0kAv.js.map +0 -1
- package/dist/appLifecycle-DvJIt7ym.cjs +0 -2
- package/dist/appLifecycle-DvJIt7ym.cjs.map +0 -1
- package/dist/batch-CLBFgYPC.cjs +0 -2
- package/dist/batch-CLBFgYPC.cjs.map +0 -1
- package/dist/batch-DLG_gtOm.js +0 -12
- package/dist/batch-DLG_gtOm.js.map +0 -1
- package/dist/crashCapture-BYTM4FLC.cjs +0 -2
- package/dist/crashCapture-BYTM4FLC.cjs.map +0 -1
- package/dist/crashCapture-D_rkkBVa.js +0 -31
- package/dist/crashCapture-D_rkkBVa.js.map +0 -1
- package/dist/crashHandler.web-BSxDpFTo.cjs +0 -2
- package/dist/crashHandler.web-BSxDpFTo.cjs.map +0 -1
- package/dist/crashHandler.web-D59bmhg9.js +0 -32
- package/dist/crashHandler.web-D59bmhg9.js.map +0 -1
- package/dist/crashHandlerNative.native-DeAFze4E.cjs +0 -2
- package/dist/crashHandlerNative.native-DeAFze4E.cjs.map +0 -1
- package/dist/crashHandlerNative.native-d7qJkzA6.js +0 -41
- package/dist/crashHandlerNative.native-d7qJkzA6.js.map +0 -1
- package/dist/debug-DsvQ9y3W.js +0 -68
- package/dist/debug-DsvQ9y3W.js.map +0 -1
- package/dist/debug-rnOOxFpN.cjs +0 -2
- package/dist/debug-rnOOxFpN.cjs.map +0 -1
- package/dist/deviceInfo.native-7hbRYixR.cjs +0 -2
- package/dist/deviceInfo.native-7hbRYixR.cjs.map +0 -1
- package/dist/deviceInfo.native-D2k0LDhI.js.map +0 -1
- package/dist/deviceInfo.web-ByNAlEJh.cjs +0 -2
- package/dist/deviceInfo.web-ByNAlEJh.cjs.map +0 -1
- package/dist/deviceInfo.web-DzQyEku6.js +0 -40
- package/dist/deviceInfo.web-DzQyEku6.js.map +0 -1
- package/dist/frameAggregate-C_HoVFcK.cjs +0 -2
- package/dist/frameAggregate-C_HoVFcK.cjs.map +0 -1
- package/dist/frameAggregate-Cwh1juw1.js +0 -17
- package/dist/frameAggregate-Cwh1juw1.js.map +0 -1
- package/dist/frameDropsNative.native-CP7zrXDf.js +0 -23
- package/dist/frameDropsNative.native-CP7zrXDf.js.map +0 -1
- package/dist/frameDropsNative.native-DKqEDqip.cjs +0 -2
- package/dist/frameDropsNative.native-DKqEDqip.cjs.map +0 -1
- package/dist/frameDropsWeb.web-C9Lt3Fuj.js +0 -22
- package/dist/frameDropsWeb.web-C9Lt3Fuj.js.map +0 -1
- package/dist/frameDropsWeb.web-azpwQCUz.cjs +0 -2
- package/dist/frameDropsWeb.web-azpwQCUz.cjs.map +0 -1
- package/dist/httpAttributes-BV50UKQU.js +0 -19
- package/dist/httpAttributes-BV50UKQU.js.map +0 -1
- package/dist/httpAttributes-xXOD9trQ.cjs +0 -2
- package/dist/httpAttributes-xXOD9trQ.cjs.map +0 -1
- package/dist/interaction-CH8yoY5-.js +0 -23
- package/dist/interaction-CH8yoY5-.js.map +0 -1
- package/dist/interaction-DcNFBW7a.cjs +0 -2
- package/dist/interaction-DcNFBW7a.cjs.map +0 -1
- package/dist/interceptFetchNative.native-VlhtMG-U.js +0 -49
- package/dist/interceptFetchNative.native-VlhtMG-U.js.map +0 -1
- package/dist/interceptFetchNative.native-jEAldH14.cjs +0 -2
- package/dist/interceptFetchNative.native-jEAldH14.cjs.map +0 -1
- package/dist/interceptFetchWeb.web-DFzZliik.cjs +0 -2
- package/dist/interceptFetchWeb.web-DFzZliik.cjs.map +0 -1
- package/dist/interceptFetchWeb.web-DfsMfoRP.js +0 -77
- package/dist/interceptFetchWeb.web-DfsMfoRP.js.map +0 -1
- package/dist/memoryNative.native-BWLh2S9L.js +0 -48
- package/dist/memoryNative.native-BWLh2S9L.js.map +0 -1
- package/dist/memoryNative.native-DCXSOd4Q.cjs +0 -2
- package/dist/memoryNative.native-DCXSOd4Q.cjs.map +0 -1
- package/dist/memoryWeb.web-B3YuV-cB.js +0 -48
- package/dist/memoryWeb.web-B3YuV-cB.js.map +0 -1
- package/dist/memoryWeb.web-CheXAcJn.cjs +0 -2
- package/dist/memoryWeb.web-CheXAcJn.cjs.map +0 -1
- package/dist/nativeSender-BE_mzw_S.js +0 -70
- package/dist/nativeSender-BE_mzw_S.js.map +0 -1
- package/dist/nativeSender-DyAUGY7c.cjs +0 -2
- package/dist/nativeSender-DyAUGY7c.cjs.map +0 -1
- package/dist/navigationNative.native-3tO5JxSd.cjs +0 -2
- package/dist/navigationNative.native-3tO5JxSd.cjs.map +0 -1
- package/dist/navigationNative.native-BUCGPQX2.js +0 -25
- package/dist/navigationNative.native-BUCGPQX2.js.map +0 -1
- package/dist/navigationTracker-B2GMwyKk.cjs +0 -2
- package/dist/navigationTracker-B2GMwyKk.cjs.map +0 -1
- package/dist/navigationTracker-Cts68dgG.js.map +0 -1
- package/dist/navigationWeb.web-B0necr5j.cjs +0 -2
- package/dist/navigationWeb.web-B0necr5j.cjs.map +0 -1
- package/dist/navigationWeb.web-CORzE_Id.js +0 -46
- package/dist/navigationWeb.web-CORzE_Id.js.map +0 -1
- package/dist/networkInfo.web-DJmw1sNK.cjs +0 -2
- package/dist/networkInfo.web-DJmw1sNK.cjs.map +0 -1
- package/dist/networkInfo.web-twcNn_hc.js.map +0 -1
- package/dist/src/adapters/interaction.d.ts +0 -17
- package/dist/src/adapters/native/frameDropsNative.native.d.ts +0 -16
- package/dist/src/adapters/native/interceptFetchNative.native.d.ts +0 -23
- package/dist/src/adapters/native/navigationNative.native.d.ts +0 -12
- package/dist/src/adapters/web/frameDropsWeb.web.d.ts +0 -16
- package/dist/src/adapters/web/memoryWeb.web.d.ts +0 -26
- package/dist/telemetry-Co4MYdwa.cjs +0 -2
- package/dist/telemetry-Co4MYdwa.cjs.map +0 -1
- package/dist/telemetry-KI0x4gzC.js +0 -389
- package/dist/telemetry-KI0x4gzC.js.map +0 -1
- package/dist/v4-BysszJq8.js +0 -31
- package/dist/v4-BysszJq8.js.map +0 -1
- package/dist/v4-CqdK_b8Y.cjs +0 -2
- package/dist/v4-CqdK_b8Y.cjs.map +0 -1
- package/dist/webSender-B27tmT1w.js +0 -42
- package/dist/webSender-B27tmT1w.js.map +0 -1
- package/dist/webSender-BWi4x1df.cjs +0 -2
- package/dist/webSender-BWi4x1df.cjs.map +0 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const c = [60, 90, 120];
|
|
2
|
+
function d(i) {
|
|
3
|
+
const t = i.filter((r) => r > 0);
|
|
4
|
+
if (t.length === 0) return 60;
|
|
5
|
+
const s = 1e3 / (t[Math.ceil(0.05 * t.length) - 1] ?? t[0]);
|
|
6
|
+
return c.reduce((r, a) => Math.abs(a - s) < Math.abs(r - s) ? a : r);
|
|
7
|
+
}
|
|
8
|
+
function u(i, t, e) {
|
|
9
|
+
const s = [...i].sort((o, l) => o - l), r = d(s), a = 1e3 / r, m = s[s.length - 1], n = s[Math.ceil(0.95 * s.length) - 1], h = i.filter((o) => o > a * 2).length;
|
|
10
|
+
return {
|
|
11
|
+
value: n,
|
|
12
|
+
attributes: {
|
|
13
|
+
"frame.max_ms": m,
|
|
14
|
+
"frame.p95_ms": n,
|
|
15
|
+
"frame.dropped_count": h,
|
|
16
|
+
"frame.target_fps": r,
|
|
17
|
+
"frame.window_duration_ms": Math.round(Math.max(0, t)),
|
|
18
|
+
"frame.source": e
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
class f {
|
|
23
|
+
constructor(t, e = 1e4) {
|
|
24
|
+
this.telemetry = t, this.windowMs = e, this.lastFrameTime = performance.now(), this.windowStart = this.lastFrameTime, this.deltas = [], this.started = !1;
|
|
25
|
+
}
|
|
26
|
+
/** Idempotent in full: a second call must not start a second rAF loop double-counting frames. */
|
|
27
|
+
start() {
|
|
28
|
+
if (this.started) return Promise.resolve();
|
|
29
|
+
this.started = !0, this.telemetry.views.onBoundary(() => this.emitWindow(performance.now()));
|
|
30
|
+
const t = () => {
|
|
31
|
+
const e = performance.now();
|
|
32
|
+
this.deltas.push(e - this.lastFrameTime), this.lastFrameTime = e, e - this.windowStart >= this.windowMs && this.emitWindow(e), requestAnimationFrame(t);
|
|
33
|
+
};
|
|
34
|
+
return requestAnimationFrame(t), Promise.resolve();
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Close the open window and ship it. `ViewManager` **awaits** this at a boundary and
|
|
38
|
+
* before the successor mints, which is what lands a route change's dropped frames on the
|
|
39
|
+
* departing `view.id` rather than the arriving one (§5.1).
|
|
40
|
+
*
|
|
41
|
+
* An empty window emits nothing — a p95 over no samples is not a number — but it still
|
|
42
|
+
* resets the clock, so `frame.window_duration_ms` always describes the samples it carries.
|
|
43
|
+
*/
|
|
44
|
+
async emitWindow(t) {
|
|
45
|
+
const e = t - this.windowStart;
|
|
46
|
+
if (this.windowStart = t, this.deltas.length === 0) return;
|
|
47
|
+
const { value: s, attributes: r } = u(this.deltas, e, "requestAnimationFrame");
|
|
48
|
+
this.deltas = [], await this.telemetry.logMetric("frame_render_time", s, r);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
f as FrameDropTracker
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=frameTracker-DdB8W_kC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frameTracker-DdB8W_kC.js","sources":["../src/adapters/frameAggregate.ts","../src/adapters/frameTracker.ts"],"sourcesContent":["// Aggregate a window of frame deltas (ms) into the `frame_render_time` metric (§5.1).\n// Shared by both builds so the percentile math and the refresh-rate measurement live once.\n\nexport interface FrameAggregate {\n value: number; // metric value = p95 frame time (representative render time)\n attributes: {\n \"frame.max_ms\": number;\n \"frame.p95_ms\": number;\n \"frame.dropped_count\": number; // frames slower than 2x budget\n \"frame.target_fps\": number;\n \"frame.window_duration_ms\": number;\n \"frame.source\": string;\n };\n}\n\n/**\n * §5.1 fixes the domain at three values. A 144 Hz panel therefore snaps to 120 — the\n * point of the key is the dropped-frame budget, not a display census.\n */\nconst REFRESH_RATES = [60, 90, 120];\n\n/**\n * The refresh rate, **measured** rather than assumed (§5.1). rAF cannot fire faster than the\n * display, so the floor of the window's deltas *is* the refresh interval — no new platform\n * API is involved.\n *\n * ⚠ The floor is the **5th percentile, not the minimum**. A single spurious short delta — a\n * double-dispatched callback, a clock adjustment — would snap a 60 Hz device to 120 and double\n * its `frame.dropped_count`, reintroducing the wrong-budget defect this key exists to fix. A\n * real 120 Hz display produces short deltas by the hundred, so p5 finds them and one artefact\n * cannot. Snapping to the three-value domain absorbs whatever jitter is left.\n *\n * ponytail: a window with no positive delta falls back to 60, which is also v3's constant.\n */\nfunction measureTargetFps(sorted: number[]): number {\n const positive = sorted.filter((d) => d > 0);\n if (positive.length === 0) return 60;\n const floor = positive[Math.ceil(0.05 * positive.length) - 1] ?? positive[0];\n const fps = 1000 / floor;\n return REFRESH_RATES.reduce((a, b) => (Math.abs(b - fps) < Math.abs(a - fps) ? b : a));\n}\n\n/**\n * `deltas` must be non-empty. Percentile is nearest-rank on the sorted deltas.\n * `windowMs` is the *actual* elapsed window — variable-length since §5.1's view-boundary\n * reset, which is exactly why `frame.window_duration_ms` is required on the wire.\n */\nexport function aggregateFrames(deltas: number[], windowMs: number, source: string): FrameAggregate {\n const sorted = [...deltas].sort((a, b) => a - b);\n const targetFps = measureTargetFps(sorted);\n const budget = 1000 / targetFps;\n const max = sorted[sorted.length - 1];\n const p95 = sorted[Math.ceil(0.95 * sorted.length) - 1];\n const dropped = deltas.filter((d) => d > budget * 2).length;\n\n return {\n value: p95,\n attributes: {\n \"frame.max_ms\": max,\n \"frame.p95_ms\": p95,\n \"frame.dropped_count\": dropped,\n \"frame.target_fps\": targetFps,\n \"frame.window_duration_ms\": Math.round(Math.max(0, windowMs)),\n \"frame.source\": source,\n },\n };\n}\n","// The rAF sampling loop behind `frame_render_time` (§5.1), shared by both builds: rAF and\n// `performance.now()` are globals RN polyfills and the browser ships, so there is nothing\n// platform-specific left to split. Web and native therefore cannot drift on window length,\n// on the refresh-rate measurement or on the boundary reset.\n\nimport { aggregateFrames } from \"./frameAggregate\";\n\n/**\n * All this tracker needs of core. Structural, so it is testable without a `Telemetry`.\n */\ntype FrameEmitter = {\n logMetric(name: string, value: number, data?: Record<string, any>): unknown;\n views: { onBoundary(fn: () => unknown): () => void };\n};\n\nexport class FrameDropTracker {\n private lastFrameTime = performance.now();\n private windowStart = this.lastFrameTime;\n private deltas: number[] = [];\n private started = false;\n\n constructor(private telemetry: FrameEmitter, private windowMs = 10000) { }\n\n /** Idempotent in full: a second call must not start a second rAF loop double-counting frames. */\n start(): Promise<void> {\n if (this.started) return Promise.resolve();\n this.started = true;\n this.telemetry.views.onBoundary(() => this.emitWindow(performance.now()));\n\n const loop = () => {\n const now = performance.now();\n this.deltas.push(now - this.lastFrameTime);\n this.lastFrameTime = now;\n // ponytail: first window includes the startup delta; acceptable noise, not worth gating.\n if (now - this.windowStart >= this.windowMs) void this.emitWindow(now);\n requestAnimationFrame(loop);\n };\n\n requestAnimationFrame(loop);\n return Promise.resolve();\n }\n\n /**\n * Close the open window and ship it. `ViewManager` **awaits** this at a boundary and\n * before the successor mints, which is what lands a route change's dropped frames on the\n * departing `view.id` rather than the arriving one (§5.1).\n *\n * An empty window emits nothing — a p95 over no samples is not a number — but it still\n * resets the clock, so `frame.window_duration_ms` always describes the samples it carries.\n */\n private async emitWindow(now: number): Promise<void> {\n const elapsed = now - this.windowStart;\n this.windowStart = now;\n if (this.deltas.length === 0) return;\n\n const { value, attributes } = aggregateFrames(this.deltas, elapsed, \"requestAnimationFrame\");\n this.deltas = [];\n await this.telemetry.logMetric(\"frame_render_time\", value, attributes);\n }\n}\n"],"names":["REFRESH_RATES","measureTargetFps","sorted","positive","d","fps","a","b","aggregateFrames","deltas","windowMs","source","targetFps","budget","max","p95","dropped","FrameDropTracker","telemetry","loop","now","elapsed","value","attributes"],"mappings":"AAmBA,MAAMA,IAAgB,CAAC,IAAI,IAAI,GAAG;AAelC,SAASC,EAAiBC,GAA0B;AAChD,QAAMC,IAAWD,EAAO,OAAO,CAACE,MAAMA,IAAI,CAAC;AAC3C,MAAID,EAAS,WAAW,EAAG,QAAO;AAElC,QAAME,IAAM,OADEF,EAAS,KAAK,KAAK,OAAOA,EAAS,MAAM,IAAI,CAAC,KAAKA,EAAS,CAAC;AAE3E,SAAOH,EAAc,OAAO,CAACM,GAAGC,MAAO,KAAK,IAAIA,IAAIF,CAAG,IAAI,KAAK,IAAIC,IAAID,CAAG,IAAIE,IAAID,CAAE;AACzF;AAOO,SAASE,EAAgBC,GAAkBC,GAAkBC,GAAgC;AAChG,QAAMT,IAAS,CAAC,GAAGO,CAAM,EAAE,KAAK,CAACH,GAAGC,MAAMD,IAAIC,CAAC,GACzCK,IAAYX,EAAiBC,CAAM,GACnCW,IAAS,MAAOD,GAChBE,IAAMZ,EAAOA,EAAO,SAAS,CAAC,GAC9Ba,IAAMb,EAAO,KAAK,KAAK,OAAOA,EAAO,MAAM,IAAI,CAAC,GAChDc,IAAUP,EAAO,OAAO,CAACL,MAAMA,IAAIS,IAAS,CAAC,EAAE;AAErD,SAAO;AAAA,IACH,OAAOE;AAAA,IACP,YAAY;AAAA,MACR,gBAAgBD;AAAA,MAChB,gBAAgBC;AAAA,MAChB,uBAAuBC;AAAA,MACvB,oBAAoBJ;AAAA,MACpB,4BAA4B,KAAK,MAAM,KAAK,IAAI,GAAGF,CAAQ,CAAC;AAAA,MAC5D,gBAAgBC;AAAA,IAAA;AAAA,EACpB;AAER;ACnDO,MAAMM,EAAiB;AAAA,EAM1B,YAAoBC,GAAiCR,IAAW,KAAO;AAAnD,SAAA,YAAAQ,GAAiC,KAAA,WAAAR,GALrD,KAAQ,gBAAgB,YAAY,IAAA,GACpC,KAAQ,cAAc,KAAK,eAC3B,KAAQ,SAAmB,CAAA,GAC3B,KAAQ,UAAU;AAAA,EAEuD;AAAA;AAAA,EAGzE,QAAuB;AACnB,QAAI,KAAK,QAAS,QAAO,QAAQ,QAAA;AACjC,SAAK,UAAU,IACf,KAAK,UAAU,MAAM,WAAW,MAAM,KAAK,WAAW,YAAY,IAAA,CAAK,CAAC;AAExE,UAAMS,IAAO,MAAM;AACf,YAAMC,IAAM,YAAY,IAAA;AACxB,WAAK,OAAO,KAAKA,IAAM,KAAK,aAAa,GACzC,KAAK,gBAAgBA,GAEjBA,IAAM,KAAK,eAAe,KAAK,YAAe,KAAK,WAAWA,CAAG,GACrE,sBAAsBD,CAAI;AAAA,IAC9B;AAEA,iCAAsBA,CAAI,GACnB,QAAQ,QAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAc,WAAWC,GAA4B;AACjD,UAAMC,IAAUD,IAAM,KAAK;AAE3B,QADA,KAAK,cAAcA,GACf,KAAK,OAAO,WAAW,EAAG;AAE9B,UAAM,EAAE,OAAAE,GAAO,YAAAC,MAAef,EAAgB,KAAK,QAAQa,GAAS,uBAAuB;AAC3F,SAAK,SAAS,CAAA,GACd,MAAM,KAAK,UAAU,UAAU,qBAAqBC,GAAOC,CAAU;AAAA,EACzE;AACJ;"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
function p(t) {
|
|
2
|
+
return /^v\d+$/i.test(t) ? !1 : /\d/.test(t) ? !0 : t.length >= 32;
|
|
3
|
+
}
|
|
4
|
+
function g(t) {
|
|
5
|
+
const e = t.split("/").filter((i) => i !== "");
|
|
6
|
+
if (e.length === 0) return "/";
|
|
7
|
+
const r = "/" + e.slice(0, 6).map((i) => p(i) ? "{id}" : i).join("/");
|
|
8
|
+
return e.length > 6 ? r + "/…" : r;
|
|
9
|
+
}
|
|
10
|
+
function c(t) {
|
|
11
|
+
let e = 0;
|
|
12
|
+
for (let n = 0; n < t.length; n++) {
|
|
13
|
+
const r = t.charCodeAt(n);
|
|
14
|
+
if (r < 128) e += 1;
|
|
15
|
+
else if (r < 2048) e += 2;
|
|
16
|
+
else if (r >= 55296 && r <= 56319 && n + 1 < t.length) {
|
|
17
|
+
const i = t.charCodeAt(n + 1);
|
|
18
|
+
i >= 56320 && i <= 57343 ? (e += 4, n++) : e += 3;
|
|
19
|
+
} else e += 3;
|
|
20
|
+
}
|
|
21
|
+
return e;
|
|
22
|
+
}
|
|
23
|
+
function m(t) {
|
|
24
|
+
if (typeof t == "string") return c(t);
|
|
25
|
+
if (t instanceof ArrayBuffer || ArrayBuffer.isView(t)) return t.byteLength;
|
|
26
|
+
if (typeof Blob < "u" && t instanceof Blob) return t.size;
|
|
27
|
+
if (typeof URLSearchParams < "u" && t instanceof URLSearchParams)
|
|
28
|
+
return c(t.toString());
|
|
29
|
+
}
|
|
30
|
+
function U(t) {
|
|
31
|
+
const e = globalThis.location?.href;
|
|
32
|
+
try {
|
|
33
|
+
const n = e ? new URL(t, e) : new URL(t);
|
|
34
|
+
return { host: n.host, path: n.pathname };
|
|
35
|
+
} catch {
|
|
36
|
+
const n = t.split("#")[0].split("?")[0];
|
|
37
|
+
return { path: n.startsWith("/") ? n : "/" + n };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function _(t) {
|
|
41
|
+
if (t == null || t === "") return;
|
|
42
|
+
const e = Number(t);
|
|
43
|
+
return Number.isFinite(e) ? e : void 0;
|
|
44
|
+
}
|
|
45
|
+
function d(t, e) {
|
|
46
|
+
return !!e && t.startsWith(e);
|
|
47
|
+
}
|
|
48
|
+
function z(t) {
|
|
49
|
+
const { url: e, method: n, statusCode: r, durationMs: i, error: a, requestBody: h, responseSize: o } = t, { host: u, path: l } = U(e), s = {
|
|
50
|
+
// uppercased here, reporting-only — the forwarded request is never touched (§9.5).
|
|
51
|
+
// Not defaulted: §9.5 authorises a case change, never inventing a verb. `fetch`'s own
|
|
52
|
+
// GET default is applied by its caller, where it is a real observation.
|
|
53
|
+
"http.method": String(n).toUpperCase(),
|
|
54
|
+
"http.status_code": r,
|
|
55
|
+
// 0 = never got a response: DNS/TLS/timeout/abort
|
|
56
|
+
"http.duration_ms": i,
|
|
57
|
+
"http.success": !a && r >= 200 && r < 400,
|
|
58
|
+
"http.route": g(l)
|
|
59
|
+
};
|
|
60
|
+
u && (s["http.host"] = u);
|
|
61
|
+
const f = m(h);
|
|
62
|
+
return f && (s["http.request_size"] = f), typeof o == "number" && Number.isFinite(o) && (s["http.response_size"] = o), s;
|
|
63
|
+
}
|
|
64
|
+
export {
|
|
65
|
+
z as b,
|
|
66
|
+
_ as c,
|
|
67
|
+
d as i,
|
|
68
|
+
g as n
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=httpAttributes-BrrtM8zh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpAttributes-BrrtM8zh.js","sources":["../src/adapters/httpAttributes.ts"],"sourcesContent":["// Shared http.request attribute builder — the single source of truth so the web fetch patch\n// and the shared XHR patch stay in lockstep on the v4 wire contract (§4.4, #95).\n//\n// `http.url` and `http.path` are gone outright (§9.1): the identifier lives in the path, so\n// query-stripping would not have addressed the threat. `http.host` + `http.route` replace them,\n// and the route template is normalized here, SDK-side — nothing raw ever leaves the device.\n\nconst MAX_ROUTE_DEPTH = 6;\n\n// contract §4.4.1, verbatim. This is the decision, not an illustration — do not \"improve\" it.\nfunction isVariable(s: string): boolean {\n if (/^v\\d+$/i.test(s)) return false; // version carve-out: /v2/ survives\n if (/\\d/.test(s)) return true; // any digit\n return s.length >= 32; // opaque all-alpha token / dashless UUID\n}\n\n/**\n * Path → route template. `/` stays `/`, no case folding, trailing slash dropped, depth capped\n * at 6 segments with a trailing `/…`. No cardinality guard: a client-side rolling collapse\n * would make one row mean different things on different phones.\n */\nexport function normalizeRoute(path: string): string {\n const segments = path.split(\"/\").filter((s) => s !== \"\");\n if (segments.length === 0) return \"/\";\n const kept = segments.slice(0, MAX_ROUTE_DEPTH).map((s) => (isVariable(s) ? \"{id}\" : s));\n const route = \"/\" + kept.join(\"/\");\n return segments.length > MAX_ROUTE_DEPTH ? route + \"/…\" : route;\n}\n\n/** UTF-8 byte length. v3 shipped `String.length` — UTF-16 code units, 2-3× short on non-ASCII. */\nexport function utf8Bytes(s: string): number {\n let n = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) n += 1;\n else if (c < 0x800) n += 2;\n else if (c >= 0xd800 && c <= 0xdbff && i + 1 < s.length) {\n const lo = s.charCodeAt(i + 1);\n if (lo >= 0xdc00 && lo <= 0xdfff) { n += 4; i++; } else n += 3; // lone surrogate → U+FFFD\n } else n += 3;\n }\n return n;\n}\n\n/**\n * Body size for every type measurable **without consuming the body**. `FormData` and streams\n * return undefined and the key is omitted — draining a consumer's request body is a far worse\n * bug than a missing key.\n */\nexport function requestBodySize(body: unknown): number | undefined {\n if (typeof body === \"string\") return utf8Bytes(body);\n if (body instanceof ArrayBuffer) return body.byteLength;\n if (ArrayBuffer.isView(body)) return body.byteLength; // TypedArray | DataView\n if (typeof Blob !== \"undefined\" && body instanceof Blob) return body.size;\n if (typeof URLSearchParams !== \"undefined\" && body instanceof URLSearchParams) {\n return utf8Bytes(body.toString()); // serialising a copy, not draining the body\n }\n return undefined;\n}\n\n// host keeps the port, deliberately unlike §6.4's trace gate. §4.4 omits it on a *native*\n// relative URL specifically: a browser resolves `/api/x` against the page, and RN has no\n// `location` to resolve against — a capability check, not a platform branch.\nfunction splitUrl(url: string): { host?: string; path: string } {\n const base = (globalThis as any).location?.href;\n try {\n const u = base ? new URL(url, base) : new URL(url);\n return { host: u.host, path: u.pathname };\n } catch {\n // native relative URL: no host to report, but the path is still routable\n const path = url.split(\"#\")[0].split(\"?\")[0];\n return { path: path.startsWith(\"/\") ? path : \"/\" + path };\n }\n}\n\n/** `content-length` → a response size. Absent or unparseable → undefined, so the key is omitted. */\nexport function contentLengthSize(header: string | null | undefined): number | undefined {\n if (header == null || header === \"\") return undefined;\n const n = Number(header);\n return Number.isFinite(n) ? n : undefined;\n}\n\n/** The #95 invariant, in one place: an `http.request` never describes the collector POST. */\nexport function isCollectorUrl(url: string, endpoint: string | undefined): boolean {\n return !!endpoint && url.startsWith(endpoint);\n}\n\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 const { host, path } = splitUrl(url);\n\n const attrs: Record<string, any> = {\n // uppercased here, reporting-only — the forwarded request is never touched (§9.5).\n // Not defaulted: §9.5 authorises a case change, never inventing a verb. `fetch`'s own\n // GET default is applied by its caller, where it is a real observation.\n \"http.method\": String(method).toUpperCase(),\n \"http.status_code\": statusCode, // 0 = never got a response: DNS/TLS/timeout/abort\n \"http.duration_ms\": durationMs,\n \"http.success\": !error && statusCode >= 200 && statusCode < 400,\n \"http.route\": normalizeRoute(path),\n };\n if (host) attrs[\"http.host\"] = host;\n\n // §4.4's two null disciplines differ on purpose, so do not unify them:\n // request_size is \"omitted when unmeasurable, never 0\"; response_size ships a real 0.\n const reqSize = requestBodySize(requestBody);\n if (reqSize) attrs[\"http.request_size\"] = reqSize;\n if (typeof responseSize === \"number\" && Number.isFinite(responseSize)) {\n attrs[\"http.response_size\"] = responseSize;\n }\n\n return attrs;\n}\n"],"names":["isVariable","s","normalizeRoute","path","segments","route","utf8Bytes","n","i","c","lo","requestBodySize","body","splitUrl","url","base","u","contentLengthSize","header","isCollectorUrl","endpoint","buildHttpAttributes","args","method","statusCode","durationMs","error","requestBody","responseSize","host","attrs","reqSize"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";function g(t){return/^v\d+$/i.test(t)?!1:/\d/.test(t)?!0:t.length>=32}function l(t){const e=t.split("/").filter(i=>i!=="");if(e.length===0)return"/";const r="/"+e.slice(0,6).map(i=>g(i)?"{id}":i).join("/");return e.length>6?r+"/…":r}function f(t){let e=0;for(let n=0;n<t.length;n++){const r=t.charCodeAt(n);if(r<128)e+=1;else if(r<2048)e+=2;else if(r>=55296&&r<=56319&&n+1<t.length){const i=t.charCodeAt(n+1);i>=56320&&i<=57343?(e+=4,n++):e+=3}else e+=3}return e}function m(t){if(typeof t=="string")return f(t);if(t instanceof ArrayBuffer||ArrayBuffer.isView(t))return t.byteLength;if(typeof Blob<"u"&&t instanceof Blob)return t.size;if(typeof URLSearchParams<"u"&&t instanceof URLSearchParams)return f(t.toString())}function U(t){const e=globalThis.location?.href;try{const n=e?new URL(t,e):new URL(t);return{host:n.host,path:n.pathname}}catch{const n=t.split("#")[0].split("?")[0];return{path:n.startsWith("/")?n:"/"+n}}}function d(t){if(t==null||t==="")return;const e=Number(t);return Number.isFinite(e)?e:void 0}function z(t,e){return!!e&&t.startsWith(e)}function _(t){const{url:e,method:n,statusCode:r,durationMs:i,error:a,requestBody:h,responseSize:o}=t,{host:u,path:p}=U(e),s={"http.method":String(n).toUpperCase(),"http.status_code":r,"http.duration_ms":i,"http.success":!a&&r>=200&&r<400,"http.route":l(p)};u&&(s["http.host"]=u);const c=m(h);return c&&(s["http.request_size"]=c),typeof o=="number"&&Number.isFinite(o)&&(s["http.response_size"]=o),s}exports.buildHttpAttributes=_;exports.contentLengthSize=d;exports.isCollectorUrl=z;exports.normalizeRoute=l;
|
|
2
|
+
//# sourceMappingURL=httpAttributes-D0m6UID7.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpAttributes-D0m6UID7.cjs","sources":["../src/adapters/httpAttributes.ts"],"sourcesContent":["// Shared http.request attribute builder — the single source of truth so the web fetch patch\n// and the shared XHR patch stay in lockstep on the v4 wire contract (§4.4, #95).\n//\n// `http.url` and `http.path` are gone outright (§9.1): the identifier lives in the path, so\n// query-stripping would not have addressed the threat. `http.host` + `http.route` replace them,\n// and the route template is normalized here, SDK-side — nothing raw ever leaves the device.\n\nconst MAX_ROUTE_DEPTH = 6;\n\n// contract §4.4.1, verbatim. This is the decision, not an illustration — do not \"improve\" it.\nfunction isVariable(s: string): boolean {\n if (/^v\\d+$/i.test(s)) return false; // version carve-out: /v2/ survives\n if (/\\d/.test(s)) return true; // any digit\n return s.length >= 32; // opaque all-alpha token / dashless UUID\n}\n\n/**\n * Path → route template. `/` stays `/`, no case folding, trailing slash dropped, depth capped\n * at 6 segments with a trailing `/…`. No cardinality guard: a client-side rolling collapse\n * would make one row mean different things on different phones.\n */\nexport function normalizeRoute(path: string): string {\n const segments = path.split(\"/\").filter((s) => s !== \"\");\n if (segments.length === 0) return \"/\";\n const kept = segments.slice(0, MAX_ROUTE_DEPTH).map((s) => (isVariable(s) ? \"{id}\" : s));\n const route = \"/\" + kept.join(\"/\");\n return segments.length > MAX_ROUTE_DEPTH ? route + \"/…\" : route;\n}\n\n/** UTF-8 byte length. v3 shipped `String.length` — UTF-16 code units, 2-3× short on non-ASCII. */\nexport function utf8Bytes(s: string): number {\n let n = 0;\n for (let i = 0; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 0x80) n += 1;\n else if (c < 0x800) n += 2;\n else if (c >= 0xd800 && c <= 0xdbff && i + 1 < s.length) {\n const lo = s.charCodeAt(i + 1);\n if (lo >= 0xdc00 && lo <= 0xdfff) { n += 4; i++; } else n += 3; // lone surrogate → U+FFFD\n } else n += 3;\n }\n return n;\n}\n\n/**\n * Body size for every type measurable **without consuming the body**. `FormData` and streams\n * return undefined and the key is omitted — draining a consumer's request body is a far worse\n * bug than a missing key.\n */\nexport function requestBodySize(body: unknown): number | undefined {\n if (typeof body === \"string\") return utf8Bytes(body);\n if (body instanceof ArrayBuffer) return body.byteLength;\n if (ArrayBuffer.isView(body)) return body.byteLength; // TypedArray | DataView\n if (typeof Blob !== \"undefined\" && body instanceof Blob) return body.size;\n if (typeof URLSearchParams !== \"undefined\" && body instanceof URLSearchParams) {\n return utf8Bytes(body.toString()); // serialising a copy, not draining the body\n }\n return undefined;\n}\n\n// host keeps the port, deliberately unlike §6.4's trace gate. §4.4 omits it on a *native*\n// relative URL specifically: a browser resolves `/api/x` against the page, and RN has no\n// `location` to resolve against — a capability check, not a platform branch.\nfunction splitUrl(url: string): { host?: string; path: string } {\n const base = (globalThis as any).location?.href;\n try {\n const u = base ? new URL(url, base) : new URL(url);\n return { host: u.host, path: u.pathname };\n } catch {\n // native relative URL: no host to report, but the path is still routable\n const path = url.split(\"#\")[0].split(\"?\")[0];\n return { path: path.startsWith(\"/\") ? path : \"/\" + path };\n }\n}\n\n/** `content-length` → a response size. Absent or unparseable → undefined, so the key is omitted. */\nexport function contentLengthSize(header: string | null | undefined): number | undefined {\n if (header == null || header === \"\") return undefined;\n const n = Number(header);\n return Number.isFinite(n) ? n : undefined;\n}\n\n/** The #95 invariant, in one place: an `http.request` never describes the collector POST. */\nexport function isCollectorUrl(url: string, endpoint: string | undefined): boolean {\n return !!endpoint && url.startsWith(endpoint);\n}\n\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 const { host, path } = splitUrl(url);\n\n const attrs: Record<string, any> = {\n // uppercased here, reporting-only — the forwarded request is never touched (§9.5).\n // Not defaulted: §9.5 authorises a case change, never inventing a verb. `fetch`'s own\n // GET default is applied by its caller, where it is a real observation.\n \"http.method\": String(method).toUpperCase(),\n \"http.status_code\": statusCode, // 0 = never got a response: DNS/TLS/timeout/abort\n \"http.duration_ms\": durationMs,\n \"http.success\": !error && statusCode >= 200 && statusCode < 400,\n \"http.route\": normalizeRoute(path),\n };\n if (host) attrs[\"http.host\"] = host;\n\n // §4.4's two null disciplines differ on purpose, so do not unify them:\n // request_size is \"omitted when unmeasurable, never 0\"; response_size ships a real 0.\n const reqSize = requestBodySize(requestBody);\n if (reqSize) attrs[\"http.request_size\"] = reqSize;\n if (typeof responseSize === \"number\" && Number.isFinite(responseSize)) {\n attrs[\"http.response_size\"] = responseSize;\n }\n\n return attrs;\n}\n"],"names":["isVariable","s","normalizeRoute","path","segments","route","utf8Bytes","n","i","c","lo","requestBodySize","body","splitUrl","url","base","u","contentLengthSize","header","isCollectorUrl","endpoint","buildHttpAttributes","args","method","statusCode","durationMs","error","requestBody","responseSize","host","attrs","reqSize"],"mappings":"aAUA,SAASA,EAAWC,EAAoB,CACpC,MAAI,UAAU,KAAKA,CAAC,EAAU,GAC1B,KAAK,KAAKA,CAAC,EAAU,GAClBA,EAAE,QAAU,EACvB,CAOO,SAASC,EAAeC,EAAsB,CACjD,MAAMC,EAAWD,EAAK,MAAM,GAAG,EAAE,OAAQF,GAAMA,IAAM,EAAE,EACvD,GAAIG,EAAS,SAAW,EAAG,MAAO,IAElC,MAAMC,EAAQ,IADDD,EAAS,MAAM,EAAG,CAAe,EAAE,IAAKH,GAAOD,EAAWC,CAAC,EAAI,OAASA,CAAE,EAC9D,KAAK,GAAG,EACjC,OAAOG,EAAS,OAAS,EAAkBC,EAAQ,KAAOA,CAC9D,CAGO,SAASC,EAAUL,EAAmB,CACzC,IAAIM,EAAI,EACR,QAASC,EAAI,EAAGA,EAAIP,EAAE,OAAQO,IAAK,CAC/B,MAAMC,EAAIR,EAAE,WAAWO,CAAC,EACxB,GAAIC,EAAI,IAAMF,GAAK,UACVE,EAAI,KAAOF,GAAK,UAChBE,GAAK,OAAUA,GAAK,OAAUD,EAAI,EAAIP,EAAE,OAAQ,CACrD,MAAMS,EAAKT,EAAE,WAAWO,EAAI,CAAC,EACzBE,GAAM,OAAUA,GAAM,OAAUH,GAAK,EAAGC,KAAYD,GAAK,CACjE,MAAOA,GAAK,CAChB,CACA,OAAOA,CACX,CAOO,SAASI,EAAgBC,EAAmC,CAC/D,GAAI,OAAOA,GAAS,SAAU,OAAON,EAAUM,CAAI,EAEnD,GADIA,aAAgB,aAChB,YAAY,OAAOA,CAAI,SAAUA,EAAK,WAC1C,GAAI,OAAO,KAAS,KAAeA,aAAgB,YAAaA,EAAK,KACrE,GAAI,OAAO,gBAAoB,KAAeA,aAAgB,gBAC1D,OAAON,EAAUM,EAAK,UAAU,CAGxC,CAKA,SAASC,EAASC,EAA8C,CAC5D,MAAMC,EAAQ,WAAmB,UAAU,KAC3C,GAAI,CACA,MAAMC,EAAID,EAAO,IAAI,IAAID,EAAKC,CAAI,EAAI,IAAI,IAAID,CAAG,EACjD,MAAO,CAAE,KAAME,EAAE,KAAM,KAAMA,EAAE,QAAA,CACnC,MAAQ,CAEJ,MAAMb,EAAOW,EAAI,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAC3C,MAAO,CAAE,KAAMX,EAAK,WAAW,GAAG,EAAIA,EAAO,IAAMA,CAAA,CACvD,CACJ,CAGO,SAASc,EAAkBC,EAAuD,CACrF,GAAIA,GAAU,MAAQA,IAAW,GAAI,OACrC,MAAMX,EAAI,OAAOW,CAAM,EACvB,OAAO,OAAO,SAASX,CAAC,EAAIA,EAAI,MACpC,CAGO,SAASY,EAAeL,EAAaM,EAAuC,CAC/E,MAAO,CAAC,CAACA,GAAYN,EAAI,WAAWM,CAAQ,CAChD,CAEO,SAASC,EAAoBC,EAQZ,CACpB,KAAM,CAAE,IAAAR,EAAK,OAAAS,EAAQ,WAAAC,EAAY,WAAAC,EAAY,MAAAC,EAAO,YAAAC,EAAa,aAAAC,GAAiBN,EAC5E,CAAE,KAAAO,EAAM,KAAA1B,GAASU,EAASC,CAAG,EAE7BgB,EAA6B,CAI/B,cAAe,OAAOP,CAAM,EAAE,YAAA,EAC9B,mBAAoBC,EACpB,mBAAoBC,EACpB,eAAgB,CAACC,GAASF,GAAc,KAAOA,EAAa,IAC5D,aAActB,EAAeC,CAAI,CAAA,EAEjC0B,IAAMC,EAAM,WAAW,EAAID,GAI/B,MAAME,EAAUpB,EAAgBgB,CAAW,EAC3C,OAAII,IAASD,EAAM,mBAAmB,EAAIC,GACtC,OAAOH,GAAiB,UAAY,OAAO,SAASA,CAAY,IAChEE,EAAM,oBAAoB,EAAIF,GAG3BE,CACX"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import h from "react-native";
|
|
2
|
+
var o = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {}, m = {}, c, x;
|
|
3
|
+
function R() {
|
|
4
|
+
if (x) return c;
|
|
5
|
+
x = 1;
|
|
6
|
+
var t = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 62, 0, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 63, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51];
|
|
7
|
+
return c = function(n, a) {
|
|
8
|
+
for (var i = n.length, s = n[i - 2] === "=" ? 2 : n[i - 1] === "=" ? 1 : 0, r, d = 0, l = i - s & 4294967292, e = 0; e < l; e += 4)
|
|
9
|
+
r = t[n.charCodeAt(e)] << 18 | t[n.charCodeAt(e + 1)] << 12 | t[n.charCodeAt(e + 2)] << 6 | t[n.charCodeAt(e + 3)], a[d++] = r >> 16 & 255, a[d++] = r >> 8 & 255, a[d++] = r & 255;
|
|
10
|
+
s === 1 && (r = t[n.charCodeAt(e)] << 10 | t[n.charCodeAt(e + 1)] << 4 | t[n.charCodeAt(e + 2)] >> 2, a[d++] = r >> 8 & 255, a[d++] = r & 255), s === 2 && (r = t[n.charCodeAt(e)] << 2 | t[n.charCodeAt(e + 1)] >> 4, a[d++] = r & 255);
|
|
11
|
+
}, c;
|
|
12
|
+
}
|
|
13
|
+
var g;
|
|
14
|
+
function b() {
|
|
15
|
+
if (g) return m;
|
|
16
|
+
g = 1;
|
|
17
|
+
const t = R(), { NativeModules: f } = h;
|
|
18
|
+
class n extends Error {
|
|
19
|
+
}
|
|
20
|
+
class a extends Error {
|
|
21
|
+
}
|
|
22
|
+
let i = !1;
|
|
23
|
+
function s(e) {
|
|
24
|
+
i || (console.warn("Using an insecure random number generator, this should only happen when running in a debugger without support for crypto.getRandomValues"), i = !0);
|
|
25
|
+
for (let u = 0, p; u < e.length; u++)
|
|
26
|
+
(u & 3) === 0 && (p = Math.random() * 4294967296), e[u] = p >>> ((u & 3) << 3) & 255;
|
|
27
|
+
return e;
|
|
28
|
+
}
|
|
29
|
+
function r(e) {
|
|
30
|
+
if (f.RNGetRandomValues)
|
|
31
|
+
return f.RNGetRandomValues.getRandomBase64(e);
|
|
32
|
+
if (f.ExpoRandom)
|
|
33
|
+
return f.ExpoRandom.getRandomBase64String(e);
|
|
34
|
+
if (o.ExpoModules)
|
|
35
|
+
return o.ExpoModules.ExpoRandom.getRandomBase64String(e);
|
|
36
|
+
throw new Error("Native module not found");
|
|
37
|
+
}
|
|
38
|
+
function d(e) {
|
|
39
|
+
if (!(e instanceof Int8Array || e instanceof Uint8Array || e instanceof Int16Array || e instanceof Uint16Array || e instanceof Int32Array || e instanceof Uint32Array || e instanceof Uint8ClampedArray))
|
|
40
|
+
throw new n("Expected an integer array");
|
|
41
|
+
if (e.byteLength > 65536)
|
|
42
|
+
throw new a("Can only request a maximum of 65536 bytes");
|
|
43
|
+
return o.expo && o.expo.modules && o.expo.modules.ExpoCrypto && o.expo.modules.ExpoCrypto.getRandomValues ? (o.expo.modules.ExpoCrypto.getRandomValues(e), e) : l() ? s(e) : (t(r(e.byteLength), new Uint8Array(e.buffer, e.byteOffset, e.byteLength)), e);
|
|
44
|
+
}
|
|
45
|
+
function l() {
|
|
46
|
+
return "RN$Bridgeless" in o && RN$Bridgeless === !0 ? !1 : __DEV__ && typeof o.nativeCallSyncHook > "u";
|
|
47
|
+
}
|
|
48
|
+
return typeof o.crypto != "object" && (o.crypto = {}), typeof o.crypto.getRandomValues != "function" && (o.crypto.getRandomValues = d), m;
|
|
49
|
+
}
|
|
50
|
+
b();
|
|
51
|
+
const y = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
52
|
+
__proto__: null
|
|
53
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
54
|
+
export {
|
|
55
|
+
y as i
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=index-BtLlV1HA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BtLlV1HA.js","sources":["../node_modules/fast-base64-decode/index.js","../node_modules/react-native-get-random-values/index.js"],"sourcesContent":["'use strict'\n\nvar lookup = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 62, 0, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 63, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]\n\nmodule.exports = function base64Decode (source, target) {\n var sourceLength = source.length\n var paddingLength = (source[sourceLength - 2] === '=' ? 2 : (source[sourceLength - 1] === '=' ? 1 : 0))\n\n var tmp\n var byteIndex = 0\n var baseLength = (sourceLength - paddingLength) & 0xfffffffc\n\n for (var i = 0; i < baseLength; i += 4) {\n tmp = (lookup[source.charCodeAt(i)] << 18) | (lookup[source.charCodeAt(i + 1)] << 12) | (lookup[source.charCodeAt(i + 2)] << 6) | (lookup[source.charCodeAt(i + 3)])\n\n target[byteIndex++] = (tmp >> 16) & 0xFF\n target[byteIndex++] = (tmp >> 8) & 0xFF\n target[byteIndex++] = (tmp) & 0xFF\n }\n\n if (paddingLength === 1) {\n tmp = (lookup[source.charCodeAt(i)] << 10) | (lookup[source.charCodeAt(i + 1)] << 4) | (lookup[source.charCodeAt(i + 2)] >> 2)\n\n target[byteIndex++] = (tmp >> 8) & 0xFF\n target[byteIndex++] = tmp & 0xFF\n }\n\n if (paddingLength === 2) {\n tmp = (lookup[source.charCodeAt(i)] << 2) | (lookup[source.charCodeAt(i + 1)] >> 4)\n\n target[byteIndex++] = tmp & 0xFF\n }\n}\n","const base64Decode = require('fast-base64-decode')\nconst { NativeModules } = require('react-native')\n\nclass TypeMismatchError extends Error {}\nclass QuotaExceededError extends Error {}\n\nlet warned = false\nfunction insecureRandomValues (array) {\n if (!warned) {\n console.warn('Using an insecure random number generator, this should only happen when running in a debugger without support for crypto.getRandomValues')\n warned = true\n }\n\n for (let i = 0, r; i < array.length; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000\n array[i] = (r >>> ((i & 0x03) << 3)) & 0xff\n }\n\n return array\n}\n\n/**\n * @param {number} byteLength\n * @returns {string}\n */\nfunction getRandomBase64 (byteLength) {\n if (NativeModules.RNGetRandomValues) {\n return NativeModules.RNGetRandomValues.getRandomBase64(byteLength)\n } else if (NativeModules.ExpoRandom) {\n // Expo SDK 41-44\n return NativeModules.ExpoRandom.getRandomBase64String(byteLength)\n } else if (global.ExpoModules) {\n // Expo SDK 45+\n return global.ExpoModules.ExpoRandom.getRandomBase64String(byteLength);\n } else {\n throw new Error('Native module not found')\n }\n}\n\n/**\n * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Uint8ClampedArray} array\n */\nfunction getRandomValues (array) {\n if (!(array instanceof Int8Array || array instanceof Uint8Array || array instanceof Int16Array || array instanceof Uint16Array || array instanceof Int32Array || array instanceof Uint32Array || array instanceof Uint8ClampedArray)) {\n throw new TypeMismatchError('Expected an integer array')\n }\n\n if (array.byteLength > 65536) {\n throw new QuotaExceededError('Can only request a maximum of 65536 bytes')\n }\n\n // Expo SDK 48+\n if (global.expo && global.expo.modules && global.expo.modules.ExpoCrypto && global.expo.modules.ExpoCrypto.getRandomValues) {\n // ExpoCrypto.getRandomValues doesn't return the array\n global.expo.modules.ExpoCrypto.getRandomValues(array)\n return array\n }\n\n // Calling getRandomBase64 in remote debugging mode leads to the error\n // \"Calling synchronous methods on native modules is not supported in Chrome\".\n // So in that specific case we fall back to just using Math.random().\n if (isRemoteDebuggingInChrome()) {\n return insecureRandomValues(array)\n }\n\n base64Decode(getRandomBase64(array.byteLength), new Uint8Array(array.buffer, array.byteOffset, array.byteLength))\n\n return array\n}\n\nfunction isRemoteDebuggingInChrome () {\n // Remote debugging in Chrome is not supported in bridgeless\n if ('RN$Bridgeless' in global && RN$Bridgeless === true) {\n return false\n }\n\n return __DEV__ && typeof global.nativeCallSyncHook === 'undefined'\n}\n\nif (typeof global.crypto !== 'object') {\n global.crypto = {}\n}\n\nif (typeof global.crypto.getRandomValues !== 'function') {\n global.crypto.getRandomValues = getRandomValues\n}\n"],"names":["lookup","fastBase64Decode","source","target","sourceLength","paddingLength","tmp","byteIndex","baseLength","i","base64Decode","require$$0","NativeModules","require$$1","TypeMismatchError","QuotaExceededError","warned","insecureRandomValues","array","r","getRandomBase64","byteLength","global","getRandomValues","isRemoteDebuggingInChrome"],"mappings":"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","x_google_ignoreList":[0,1]}
|