@goliapkg/sentori-react-native 2.0.0 → 2.2.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 (62) hide show
  1. package/lib/capture.d.ts +6 -1
  2. package/lib/capture.d.ts.map +1 -1
  3. package/lib/capture.js +49 -2
  4. package/lib/capture.js.map +1 -1
  5. package/lib/compat/sentry.d.ts +14 -0
  6. package/lib/compat/sentry.d.ts.map +1 -1
  7. package/lib/compat/sentry.js +6 -0
  8. package/lib/compat/sentry.js.map +1 -1
  9. package/lib/config.d.ts +12 -18
  10. package/lib/config.d.ts.map +1 -1
  11. package/lib/config.js.map +1 -1
  12. package/lib/handlers/network.d.ts.map +1 -1
  13. package/lib/handlers/network.js +7 -0
  14. package/lib/handlers/network.js.map +1 -1
  15. package/lib/index.d.ts +7 -0
  16. package/lib/index.d.ts.map +1 -1
  17. package/lib/index.js +6 -0
  18. package/lib/index.js.map +1 -1
  19. package/lib/init.d.ts +17 -0
  20. package/lib/init.d.ts.map +1 -1
  21. package/lib/init.js +37 -0
  22. package/lib/init.js.map +1 -1
  23. package/lib/navigation.d.ts.map +1 -1
  24. package/lib/navigation.js +14 -1
  25. package/lib/navigation.js.map +1 -1
  26. package/lib/runtime-metrics-fps.d.ts +19 -0
  27. package/lib/runtime-metrics-fps.d.ts.map +1 -0
  28. package/lib/runtime-metrics-fps.js +128 -0
  29. package/lib/runtime-metrics-fps.js.map +1 -0
  30. package/lib/runtime-metrics-heap.d.ts +13 -0
  31. package/lib/runtime-metrics-heap.d.ts.map +1 -0
  32. package/lib/runtime-metrics-heap.js +67 -0
  33. package/lib/runtime-metrics-heap.js.map +1 -0
  34. package/lib/runtime-metrics-network.d.ts +23 -0
  35. package/lib/runtime-metrics-network.d.ts.map +1 -0
  36. package/lib/runtime-metrics-network.js +99 -0
  37. package/lib/runtime-metrics-network.js.map +1 -0
  38. package/lib/runtime-metrics.d.ts +43 -0
  39. package/lib/runtime-metrics.d.ts.map +1 -0
  40. package/lib/runtime-metrics.js +115 -0
  41. package/lib/runtime-metrics.js.map +1 -0
  42. package/lib/transport.d.ts +18 -0
  43. package/lib/transport.d.ts.map +1 -1
  44. package/lib/transport.js +31 -0
  45. package/lib/transport.js.map +1 -1
  46. package/package.json +2 -2
  47. package/src/__tests__/before-send.test.ts +72 -0
  48. package/src/__tests__/compat-sentry.test.ts +121 -0
  49. package/src/__tests__/runtime-metrics-instruments.test.ts +109 -0
  50. package/src/__tests__/runtime-metrics-network.test.ts +78 -0
  51. package/src/capture.ts +48 -2
  52. package/src/compat/sentry.ts +8 -0
  53. package/src/config.ts +12 -15
  54. package/src/handlers/network.ts +11 -0
  55. package/src/index.ts +14 -0
  56. package/src/init.ts +58 -0
  57. package/src/navigation.ts +14 -1
  58. package/src/runtime-metrics-fps.ts +137 -0
  59. package/src/runtime-metrics-heap.ts +78 -0
  60. package/src/runtime-metrics-network.ts +103 -0
  61. package/src/runtime-metrics.ts +122 -0
  62. package/src/transport.ts +39 -0
package/lib/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAiCA;;kDAEkD;AAClD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAClE,eAAe,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACrD,CAAC;AASF,wBAAgB,YAAY,IAAI,IAAI,GAAG,MAAM,CAE5C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAyGzE"}
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAiCA;;kDAEkD;AAClD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAClE,eAAe,EAAE,MAAM;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACrD,CAAC;AASF,wBAAgB,YAAY,IAAI,IAAI,GAAG,MAAM,CAE5C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAsHzE"}
package/lib/navigation.js CHANGED
@@ -20,7 +20,7 @@
20
20
  // a request parented to the current screen, pass it explicitly:
21
21
  // `startSpan(op, { parent: activeSpan() })`.
22
22
  import { useEffect, useRef } from 'react';
23
- import { setActiveSpan, startSpan } from '@goliapkg/sentori-core';
23
+ import { emitMetric, setActiveSpan, startSpan } from '@goliapkg/sentori-core';
24
24
  import { getNativeFrameCounters, resetNativeFrameCounters, } from './native';
25
25
  import { track } from './track';
26
26
  import { captureStep } from './trail';
@@ -138,6 +138,19 @@ export function useTraceNavigation(navigationRef) {
138
138
  if (next === null || next === prev)
139
139
  return;
140
140
  const dwellMs = finishOpenSpanWithDwell();
141
+ // v2.1 W2 — emit dwell as a runtime metric so the BI panel
142
+ // can rank screens by how long users sat on them. Tagged
143
+ // with `from` + `to` so a release-over-release diff can spot
144
+ // a 2x dwell regression on Onboarding etc. emit is cheap +
145
+ // bounded by the core ring cap; if `capture.runtimeMetrics:
146
+ // false` the flush is off but the ring still records up to
147
+ // the cap before dropping oldest.
148
+ if (typeof dwellMs === 'number' && dwellMs >= 0) {
149
+ emitMetric('runtime.route_nav_ms', dwellMs, {
150
+ from: prev ?? '',
151
+ to: next ?? '',
152
+ });
153
+ }
141
154
  openScreenSpan(prev, next, dwellMs);
142
155
  });
143
156
  return () => {
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /** Idempotent start. Safe to call multiple times; only the first
2
+ * call kicks off the rAF loop. */
3
+ export declare function startFpsInstrument(): void;
4
+ /** Stop the loop. Used by tests + by hosts that want to opt out
5
+ * mid-session. */
6
+ export declare function stopFpsInstrument(): void;
7
+ /** Test-only state inspection. */
8
+ export declare function __peekFpsInstrumentState(): {
9
+ count: number;
10
+ running: boolean;
11
+ };
12
+ /** Test-only force-emit (skips the every-300-frames gate). */
13
+ export declare function __forceEmitFpsForTests(): void;
14
+ /** Test-only sample injection so we can assert without spinning
15
+ * rAF in the test runner. */
16
+ export declare function __pushSampleForTests(dt: number): void;
17
+ /** Test-only reset between runs. */
18
+ export declare function __resetFpsInstrumentForTests(): void;
19
+ //# sourceMappingURL=runtime-metrics-fps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-metrics-fps.d.ts","sourceRoot":"","sources":["../src/runtime-metrics-fps.ts"],"names":[],"mappings":"AAwFA;mCACmC;AACnC,wBAAgB,kBAAkB,IAAI,IAAI,CAQzC;AAED;mBACmB;AACnB,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,kCAAkC;AAClC,wBAAgB,wBAAwB,IAAI;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB,CAEA;AAED,8DAA8D;AAC9D,wBAAgB,sBAAsB,IAAI,IAAI,CAI7C;AAED;8BAC8B;AAC9B,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAIrD;AAED,oCAAoC;AACpC,wBAAgB,4BAA4B,IAAI,IAAI,CAMnD"}
@@ -0,0 +1,128 @@
1
+ // v2.1 W2 part 3 — FPS auto-instrument.
2
+ //
3
+ // Rolling 5 s window of inter-frame Δt measured via rAF; emit
4
+ // runtime.fps.p50 + runtime.fps.p95 every 5 s.
5
+ //
6
+ // Perf bedrock (.claude/CLAUDE.md):
7
+ // • per-tick cost must be < 0.5 ms on a Pixel-5-equivalent
8
+ // bench → stop-ship gate in W2 part 4 CI
9
+ // • main-thread sustained < 1 %
10
+ // • no allocation inside the rAF callback hot path
11
+ //
12
+ // Implementation choices:
13
+ // • single-frame Δt = perf.now() - prev — cheap, no allocation
14
+ // • rolling window stored in a fixed-size Float32Array (no
15
+ // splice / shift — circular buffer write index)
16
+ // • percentile computed by copying-and-sorting only at emit
17
+ // time (every 5 s, ~300 floats) — no per-tick sort
18
+ //
19
+ // Bail-outs:
20
+ // • if requestAnimationFrame isn't available (rare RN host),
21
+ // never start the loop
22
+ // • if perf.now() is missing (older RN engines), fall back to
23
+ // Date.now() — coarser but better than crashing
24
+ import { emitMetric } from '@goliapkg/sentori-core';
25
+ const TICK_FRAMES_BEFORE_EMIT = 300; // ~5 s at 60 fps
26
+ const SAMPLE_CAP = 600; // safety: 10 s at 60 fps caps memory
27
+ let _running = false;
28
+ let _samples = new Float32Array(SAMPLE_CAP);
29
+ let _write = 0;
30
+ let _count = 0;
31
+ let _prev = 0;
32
+ function now() {
33
+ // Engines without perf.now() (very old RN runtimes / minimal
34
+ // JSCore builds) fall back to wall-clock. Date.now() has 1 ms
35
+ // resolution so FPS readings cap at 1000; good enough.
36
+ const p = globalThis.performance;
37
+ return p?.now ? p.now() : Date.now();
38
+ }
39
+ function rafTick(t) {
40
+ if (!_running)
41
+ return;
42
+ if (_prev !== 0) {
43
+ const dt = t - _prev;
44
+ if (dt > 0 && dt < 1000) {
45
+ _samples[_write] = dt;
46
+ _write = (_write + 1) % SAMPLE_CAP;
47
+ _count += 1;
48
+ if (_count >= TICK_FRAMES_BEFORE_EMIT) {
49
+ emitWindow();
50
+ _count = 0;
51
+ _write = 0;
52
+ }
53
+ }
54
+ }
55
+ _prev = t;
56
+ requestAnimationFrame(rafTick);
57
+ }
58
+ function emitWindow() {
59
+ // Copy + sort. ~300 floats, well under 1 ms even on a slow phone.
60
+ // Allocation lives outside the per-tick hot path — only at emit.
61
+ const n = _count;
62
+ if (n === 0)
63
+ return;
64
+ const slice = new Float32Array(n);
65
+ for (let i = 0; i < n; i++)
66
+ slice[i] = _samples[i];
67
+ slice.sort();
68
+ const p50dt = percentile(slice, 0.5);
69
+ const p95dt = percentile(slice, 0.95);
70
+ // FPS = 1000 ms / per-frame Δt.
71
+ const fpsP50 = p50dt > 0 ? Math.round(1000 / p50dt) : 0;
72
+ // p95 of Δt is the *slowest* 95 % — i.e. when frames are bad.
73
+ // p95 FPS conventionally means "5 % worst frames as fps".
74
+ const fpsP5Slow = p95dt > 0 ? Math.round(1000 / p95dt) : 0;
75
+ emitMetric('runtime.fps.p50', fpsP50);
76
+ emitMetric('runtime.fps.p95', fpsP5Slow);
77
+ }
78
+ function percentile(sorted, q) {
79
+ if (sorted.length === 0)
80
+ return 0;
81
+ // Discrete percentile — index = ceil(q * n) - 1, clamped.
82
+ const idx = Math.min(sorted.length - 1, Math.max(0, Math.ceil(q * sorted.length) - 1));
83
+ return sorted[idx];
84
+ }
85
+ /** Idempotent start. Safe to call multiple times; only the first
86
+ * call kicks off the rAF loop. */
87
+ export function startFpsInstrument() {
88
+ if (_running)
89
+ return;
90
+ if (typeof requestAnimationFrame !== 'function')
91
+ return;
92
+ _running = true;
93
+ _prev = 0;
94
+ _count = 0;
95
+ _write = 0;
96
+ requestAnimationFrame(rafTick);
97
+ }
98
+ /** Stop the loop. Used by tests + by hosts that want to opt out
99
+ * mid-session. */
100
+ export function stopFpsInstrument() {
101
+ _running = false;
102
+ }
103
+ /** Test-only state inspection. */
104
+ export function __peekFpsInstrumentState() {
105
+ return { count: _count, running: _running };
106
+ }
107
+ /** Test-only force-emit (skips the every-300-frames gate). */
108
+ export function __forceEmitFpsForTests() {
109
+ emitWindow();
110
+ _count = 0;
111
+ _write = 0;
112
+ }
113
+ /** Test-only sample injection so we can assert without spinning
114
+ * rAF in the test runner. */
115
+ export function __pushSampleForTests(dt) {
116
+ _samples[_write] = dt;
117
+ _write = (_write + 1) % SAMPLE_CAP;
118
+ _count += 1;
119
+ }
120
+ /** Test-only reset between runs. */
121
+ export function __resetFpsInstrumentForTests() {
122
+ _running = false;
123
+ _samples = new Float32Array(SAMPLE_CAP);
124
+ _write = 0;
125
+ _count = 0;
126
+ _prev = 0;
127
+ }
128
+ //# sourceMappingURL=runtime-metrics-fps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-metrics-fps.js","sourceRoot":"","sources":["../src/runtime-metrics-fps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /** Idempotent start. No-op on hosts that don't expose
2
+ * performance.memory — checked once at start so we don't pay
3
+ * for the detect on every tick. */
4
+ export declare function startHeapInstrument(): void;
5
+ /** Stop. Idempotent. */
6
+ export declare function stopHeapInstrument(): void;
7
+ /** Test-only force tick (skips the 30 s wait). */
8
+ export declare function __forceHeapTickForTests(): void;
9
+ /** Test-only state. */
10
+ export declare function __peekHeapInstrumentState(): {
11
+ running: boolean;
12
+ };
13
+ //# sourceMappingURL=runtime-metrics-heap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-metrics-heap.d.ts","sourceRoot":"","sources":["../src/runtime-metrics-heap.ts"],"names":[],"mappings":"AAgDA;;oCAEoC;AACpC,wBAAgB,mBAAmB,IAAI,IAAI,CAQ1C;AAED,wBAAwB;AACxB,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC;AAED,kDAAkD;AAClD,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED,uBAAuB;AACvB,wBAAgB,yBAAyB,IAAI;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAEhE"}
@@ -0,0 +1,67 @@
1
+ // v2.1 W2 part 3 — JS heap auto-instrument.
2
+ //
3
+ // Polls `performance.memory.usedJSHeapSize` every 30 s, emits
4
+ // runtime.heap.used_bytes. Web-only metric, RN best-effort —
5
+ // the V8/Hermes value depends on which engine RN is wired to:
6
+ // • Hermes (RN ≥ 0.70 default): exposes a per-isolate count
7
+ // when memoryReporter is enabled (Hermes 0.12+)
8
+ // • JSC (legacy / explicit opt-in): no native equivalent
9
+ // • Web (sdk-javascript wires this same module): Chromium
10
+ // gates it behind a high-resolution-timer flag in some
11
+ // contexts; treat missing field as a silent no-op
12
+ //
13
+ // Cost: one number read + one emit every 30 s. Negligible.
14
+ // The timer .unref()s so Node tests / CLI hosts exit cleanly.
15
+ import { emitMetric } from '@goliapkg/sentori-core';
16
+ const TICK_MS = 30_000;
17
+ let _timer = null;
18
+ function readHeap() {
19
+ const perf = globalThis.performance;
20
+ return perf?.memory ?? null;
21
+ }
22
+ function tickOnce() {
23
+ const m = readHeap();
24
+ if (!m)
25
+ return;
26
+ if (typeof m.usedJSHeapSize === 'number' && Number.isFinite(m.usedJSHeapSize)) {
27
+ emitMetric('runtime.heap.used_bytes', m.usedJSHeapSize);
28
+ }
29
+ // Total + limit help capacity-plan but cost an extra ~16 B
30
+ // per row downstream — keep them only when present.
31
+ if (typeof m.totalJSHeapSize === 'number' && Number.isFinite(m.totalJSHeapSize)) {
32
+ emitMetric('runtime.heap.total_bytes', m.totalJSHeapSize);
33
+ }
34
+ if (typeof m.jsHeapSizeLimit === 'number' && Number.isFinite(m.jsHeapSizeLimit)) {
35
+ emitMetric('runtime.heap.limit_bytes', m.jsHeapSizeLimit);
36
+ }
37
+ }
38
+ /** Idempotent start. No-op on hosts that don't expose
39
+ * performance.memory — checked once at start so we don't pay
40
+ * for the detect on every tick. */
41
+ export function startHeapInstrument() {
42
+ if (_timer !== null)
43
+ return;
44
+ if (!readHeap())
45
+ return;
46
+ // One immediate sample at start so the first dashboard render
47
+ // doesn't sit empty for 30 s.
48
+ tickOnce();
49
+ _timer = setInterval(tickOnce, TICK_MS);
50
+ _timer.unref?.();
51
+ }
52
+ /** Stop. Idempotent. */
53
+ export function stopHeapInstrument() {
54
+ if (_timer !== null) {
55
+ clearInterval(_timer);
56
+ _timer = null;
57
+ }
58
+ }
59
+ /** Test-only force tick (skips the 30 s wait). */
60
+ export function __forceHeapTickForTests() {
61
+ tickOnce();
62
+ }
63
+ /** Test-only state. */
64
+ export function __peekHeapInstrumentState() {
65
+ return { running: _timer !== null };
66
+ }
67
+ //# sourceMappingURL=runtime-metrics-heap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-metrics-heap.js","sourceRoot":"","sources":["../src/runtime-metrics-heap.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,8DAA8D;AAC9D,6DAA6D;AAC7D,8DAA8D;AAC9D,8DAA8D;AAC9D,oDAAoD;AACpD,2DAA2D;AAC3D,4DAA4D;AAC5D,2DAA2D;AAC3D,sDAAsD;AACtD,EAAE;AACF,2DAA2D;AAC3D,8DAA8D;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,OAAO,GAAG,MAAM,CAAC;AAQvB,IAAI,MAAM,GAA0C,IAAI,CAAC;AAEzD,SAAS,QAAQ;IACf,MAAM,IAAI,GAAI,UAAyD,CAAC,WAAW,CAAC;IACpF,OAAO,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,SAAS,QAAQ;IACf,MAAM,CAAC,GAAG,QAAQ,EAAE,CAAC;IACrB,IAAI,CAAC,CAAC;QAAE,OAAO;IACf,IAAI,OAAO,CAAC,CAAC,cAAc,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC;QAC9E,UAAU,CAAC,yBAAyB,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;IAC1D,CAAC;IACD,2DAA2D;IAC3D,oDAAoD;IACpD,IAAI,OAAO,CAAC,CAAC,eAAe,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC;QAChF,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,eAAe,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC;QAChF,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;oCAEoC;AACpC,MAAM,UAAU,mBAAmB;IACjC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO;IAC5B,IAAI,CAAC,QAAQ,EAAE;QAAE,OAAO;IACxB,8DAA8D;IAC9D,8BAA8B;IAC9B,QAAQ,EAAE,CAAC;IACX,MAAM,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvC,MAA4C,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1D,CAAC;AAED,wBAAwB;AACxB,MAAM,UAAU,kBAAkB;IAChC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,uBAAuB;IACrC,QAAQ,EAAE,CAAC;AACb,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,yBAAyB;IACvC,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /** Called from handlers/network.ts on every outbound request.
2
+ * Cheap — two adds, no allocation. */
3
+ export declare function recordNetworkBytes(sent: number, received: number): void;
4
+ /** Estimate request bytes from a fetch init. Used by the fetch
5
+ * patch in handlers/network.ts. */
6
+ export declare function estimateRequestBytes(init?: RequestInit): number;
7
+ /** Read response bytes from the Content-Length header. Returns
8
+ * 0 if missing or unparseable — undercount-safe. */
9
+ export declare function estimateResponseBytes(headers: Headers | undefined | null): number;
10
+ /** Idempotent start — second call is a no-op. */
11
+ export declare function startNetworkBytesInstrument(): void;
12
+ /** Stop the periodic emit. Idempotent. */
13
+ export declare function stopNetworkBytesInstrument(): void;
14
+ /** Test-only: force one emit tick + reset counters. */
15
+ export declare function __forceNetworkEmitForTests(): void;
16
+ /** Test-only: peek raw counter state without resetting. */
17
+ export declare function __peekNetworkCountersForTests(): {
18
+ sent: number;
19
+ received: number;
20
+ };
21
+ /** Test-only: reset for clean test runs. */
22
+ export declare function __resetNetworkBytesForTests(): void;
23
+ //# sourceMappingURL=runtime-metrics-network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-metrics-network.d.ts","sourceRoot":"","sources":["../src/runtime-metrics-network.ts"],"names":[],"mappings":"AA4BA;uCACuC;AACvC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAGvE;AAYD;oCACoC;AACpC,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,CAE/D;AAED;qDACqD;AACrD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAMjF;AAaD,iDAAiD;AACjD,wBAAgB,2BAA2B,IAAI,IAAI,CAIlD;AAED,0CAA0C;AAC1C,wBAAgB,0BAA0B,IAAI,IAAI,CAKjD;AAED,uDAAuD;AACvD,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED,2DAA2D;AAC3D,wBAAgB,6BAA6B,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAElF;AAED,4CAA4C;AAC5C,wBAAgB,2BAA2B,IAAI,IAAI,CAIlD"}
@@ -0,0 +1,99 @@
1
+ // v2.1 W2 part 4 — network bytes auto-instrument.
2
+ //
3
+ // Two counters (sent / received bytes) incremented by the existing
4
+ // fetch patch on every request/response, drained every 30 s as
5
+ // runtime.network.bytes_sent + runtime.network.bytes_received.
6
+ //
7
+ // Best-effort: not every Response exposes `content-length`
8
+ // (chunked encoding, server stripped it, gzipped without a
9
+ // pre-decode header). For those we report 0 — undercounts vs.
10
+ // over-attributing arbitrary numbers. Request body size is
11
+ // estimated only when init.body is a string or has `.byteLength`;
12
+ // FormData / Blob / ReadableStream are not measured.
13
+ //
14
+ // XHR is NOT instrumented here — the existing patchXhr() in
15
+ // handlers/network.ts does the trace span work, and XHR usage in
16
+ // 2026-era RN apps is rare enough that the engineering cost of
17
+ // a second patch isn't justified by the missing data. If a host
18
+ // app shows up with significant XHR traffic we add it in a patch
19
+ // release.
20
+ import { emitMetric } from '@goliapkg/sentori-core';
21
+ const TICK_MS = 30_000;
22
+ let _bytesSent = 0;
23
+ let _bytesReceived = 0;
24
+ let _timer = null;
25
+ /** Called from handlers/network.ts on every outbound request.
26
+ * Cheap — two adds, no allocation. */
27
+ export function recordNetworkBytes(sent, received) {
28
+ if (sent > 0)
29
+ _bytesSent += sent;
30
+ if (received > 0)
31
+ _bytesReceived += received;
32
+ }
33
+ function estimateBodyBytes(body) {
34
+ if (body == null)
35
+ return 0;
36
+ if (typeof body === 'string')
37
+ return body.length;
38
+ // ArrayBuffer / Uint8Array / ArrayBufferView all carry byteLength.
39
+ const maybe = body;
40
+ if (typeof maybe.byteLength === 'number')
41
+ return maybe.byteLength;
42
+ // FormData / Blob / ReadableStream — not measured.
43
+ return 0;
44
+ }
45
+ /** Estimate request bytes from a fetch init. Used by the fetch
46
+ * patch in handlers/network.ts. */
47
+ export function estimateRequestBytes(init) {
48
+ return estimateBodyBytes(init?.body);
49
+ }
50
+ /** Read response bytes from the Content-Length header. Returns
51
+ * 0 if missing or unparseable — undercount-safe. */
52
+ export function estimateResponseBytes(headers) {
53
+ if (!headers)
54
+ return 0;
55
+ const v = headers.get?.('content-length');
56
+ if (!v)
57
+ return 0;
58
+ const n = parseInt(v, 10);
59
+ return Number.isFinite(n) && n > 0 ? n : 0;
60
+ }
61
+ function emit() {
62
+ if (_bytesSent > 0) {
63
+ emitMetric('runtime.network.bytes_sent', _bytesSent);
64
+ _bytesSent = 0;
65
+ }
66
+ if (_bytesReceived > 0) {
67
+ emitMetric('runtime.network.bytes_received', _bytesReceived);
68
+ _bytesReceived = 0;
69
+ }
70
+ }
71
+ /** Idempotent start — second call is a no-op. */
72
+ export function startNetworkBytesInstrument() {
73
+ if (_timer !== null)
74
+ return;
75
+ _timer = setInterval(emit, TICK_MS);
76
+ _timer.unref?.();
77
+ }
78
+ /** Stop the periodic emit. Idempotent. */
79
+ export function stopNetworkBytesInstrument() {
80
+ if (_timer !== null) {
81
+ clearInterval(_timer);
82
+ _timer = null;
83
+ }
84
+ }
85
+ /** Test-only: force one emit tick + reset counters. */
86
+ export function __forceNetworkEmitForTests() {
87
+ emit();
88
+ }
89
+ /** Test-only: peek raw counter state without resetting. */
90
+ export function __peekNetworkCountersForTests() {
91
+ return { sent: _bytesSent, received: _bytesReceived };
92
+ }
93
+ /** Test-only: reset for clean test runs. */
94
+ export function __resetNetworkBytesForTests() {
95
+ stopNetworkBytesInstrument();
96
+ _bytesSent = 0;
97
+ _bytesReceived = 0;
98
+ }
99
+ //# sourceMappingURL=runtime-metrics-network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-metrics-network.js","sourceRoot":"","sources":["../src/runtime-metrics-network.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Drain core's runtime-metrics ring and POST to
3
+ * /v1/runtime-metrics:batch. Rebuffers on failure so the next
4
+ * tick retries; sustained outages spill into the ring's drop
5
+ * counter which reports to the SDK self-report channel.
6
+ *
7
+ * Returns when the round-trip settles (success or failure). Per
8
+ * the NEVER rule, never throws — failure is logged + rebuffered,
9
+ * the resolved promise's value is undefined.
10
+ */
11
+ export declare function flushRuntimeMetrics(): Promise<void>;
12
+ /**
13
+ * Start the 30 s flush timer. Called once from `init()`. Idempotent
14
+ * — repeated calls are a no-op so users that call
15
+ * `Sentori.init({ metrics: true })` more than once (HMR, fast
16
+ * refresh) don't get multiple timers.
17
+ */
18
+ export declare function startRuntimeMetricsTimer(): void;
19
+ /**
20
+ * Capture the wall-clock at `init()` so cold-start instrumentation
21
+ * has a t0. Called from init() before any other auto-instrument
22
+ * fires. Returns the captured t0 in millis (callers that want to
23
+ * stash + use it later can hold the value).
24
+ */
25
+ export declare function markColdStartT0(): number;
26
+ /**
27
+ * Emit one `runtime.cold_start_ms` metric point. Idempotent per
28
+ * session — the second + later calls are a no-op so route-nav
29
+ * instrument (W2 part 3) can call this safely without worrying
30
+ * about double-counting.
31
+ *
32
+ * Hosts that want a more interactive-pixel-perfect cold-start
33
+ * boundary (TTI vs. raw init→render) can call
34
+ * `markTimeToFullDisplay()` and we emit that separately as
35
+ * `runtime.time_to_full_display_ms` (existing v1 instrument).
36
+ */
37
+ export declare function emitColdStart(): void;
38
+ /**
39
+ * Test-only escape hatch: stop the timer + reset cold-start state
40
+ * so vitest / bun:test teardown doesn't leak intervals across runs.
41
+ */
42
+ export declare function __resetRuntimeMetricsRnForTests(): void;
43
+ //# sourceMappingURL=runtime-metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-metrics.d.ts","sourceRoot":"","sources":["../src/runtime-metrics.ts"],"names":[],"mappings":"AAiCA;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAWzD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAS/C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAWpC;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,IAAI,IAAI,CAOtD"}
@@ -0,0 +1,115 @@
1
+ // v2.1 W2 part 2 — RN runtime metrics flusher + cold-start
2
+ // instrument.
3
+ //
4
+ // The buffer + emit primitives live in @goliapkg/sentori-core
5
+ // (runtime-metrics.ts). This module owns:
6
+ // • the periodic flush timer (30 s, coalesced w/ event flush)
7
+ // • the rebuffer-on-failure recovery path
8
+ // • the cold-start auto-instrument (one-shot at init)
9
+ //
10
+ // Other auto-instrument modules (FPS / heap / route-nav / network
11
+ // bytes) ship in the W2 part 3+ chunks; each is its own file with
12
+ // its own per-tick perf budget test gated as stop-ship in CI.
13
+ //
14
+ // NEVER rule: every public surface here is wrapped in safeFn
15
+ // boundaries by the SDK init layer; the flush timer itself
16
+ // catches all rejections + reports via the circuit breaker.
17
+ import { drainRuntimeMetricsForFlush, emitMetric, rebufferRuntimeMetrics, reportInternal, } from '@goliapkg/sentori-core';
18
+ import { getConfig, isInitialized } from './config';
19
+ import { sendRuntimeMetricsBatch } from './transport';
20
+ const FLUSH_INTERVAL_MS = 30_000;
21
+ let _timer = null;
22
+ let _coldStartT0 = null;
23
+ let _coldStartEmitted = false;
24
+ /**
25
+ * Drain core's runtime-metrics ring and POST to
26
+ * /v1/runtime-metrics:batch. Rebuffers on failure so the next
27
+ * tick retries; sustained outages spill into the ring's drop
28
+ * counter which reports to the SDK self-report channel.
29
+ *
30
+ * Returns when the round-trip settles (success or failure). Per
31
+ * the NEVER rule, never throws — failure is logged + rebuffered,
32
+ * the resolved promise's value is undefined.
33
+ */
34
+ export async function flushRuntimeMetrics() {
35
+ if (!isInitialized())
36
+ return;
37
+ const config = getConfig();
38
+ if (!config)
39
+ return;
40
+ const batch = drainRuntimeMetricsForFlush();
41
+ if (batch.length === 0)
42
+ return;
43
+ const ok = await sendRuntimeMetricsBatch(config.ingestUrl, config.token, batch);
44
+ if (!ok) {
45
+ rebufferRuntimeMetrics(batch);
46
+ reportInternal('runtime-metrics.flush', new Error('runtime-metrics POST failed'));
47
+ }
48
+ }
49
+ /**
50
+ * Start the 30 s flush timer. Called once from `init()`. Idempotent
51
+ * — repeated calls are a no-op so users that call
52
+ * `Sentori.init({ metrics: true })` more than once (HMR, fast
53
+ * refresh) don't get multiple timers.
54
+ */
55
+ export function startRuntimeMetricsTimer() {
56
+ if (_timer !== null)
57
+ return;
58
+ _timer = setInterval(() => {
59
+ void flushRuntimeMetrics();
60
+ }, FLUSH_INTERVAL_MS);
61
+ // Don't keep Node alive solely for this timer. RN's setInterval
62
+ // is a NoopRef so this is harmless there; Node + CLI tests
63
+ // benefit so the process can exit cleanly.
64
+ _timer.unref?.();
65
+ }
66
+ /**
67
+ * Capture the wall-clock at `init()` so cold-start instrumentation
68
+ * has a t0. Called from init() before any other auto-instrument
69
+ * fires. Returns the captured t0 in millis (callers that want to
70
+ * stash + use it later can hold the value).
71
+ */
72
+ export function markColdStartT0() {
73
+ if (_coldStartT0 === null) {
74
+ _coldStartT0 = Date.now();
75
+ }
76
+ return _coldStartT0;
77
+ }
78
+ /**
79
+ * Emit one `runtime.cold_start_ms` metric point. Idempotent per
80
+ * session — the second + later calls are a no-op so route-nav
81
+ * instrument (W2 part 3) can call this safely without worrying
82
+ * about double-counting.
83
+ *
84
+ * Hosts that want a more interactive-pixel-perfect cold-start
85
+ * boundary (TTI vs. raw init→render) can call
86
+ * `markTimeToFullDisplay()` and we emit that separately as
87
+ * `runtime.time_to_full_display_ms` (existing v1 instrument).
88
+ */
89
+ export function emitColdStart() {
90
+ if (_coldStartEmitted)
91
+ return;
92
+ if (_coldStartT0 === null)
93
+ return;
94
+ const ms = Date.now() - _coldStartT0;
95
+ if (ms <= 0 || ms > 60_000) {
96
+ // Implausible — likely the host called emit before init or
97
+ // we got into a freeze-then-resume situation. Drop silently.
98
+ return;
99
+ }
100
+ emitMetric('runtime.cold_start_ms', ms);
101
+ _coldStartEmitted = true;
102
+ }
103
+ /**
104
+ * Test-only escape hatch: stop the timer + reset cold-start state
105
+ * so vitest / bun:test teardown doesn't leak intervals across runs.
106
+ */
107
+ export function __resetRuntimeMetricsRnForTests() {
108
+ if (_timer !== null) {
109
+ clearInterval(_timer);
110
+ _timer = null;
111
+ }
112
+ _coldStartT0 = null;
113
+ _coldStartEmitted = false;
114
+ }
115
+ //# sourceMappingURL=runtime-metrics.js.map