@goliapkg/sentori-react-native 4.0.0 → 5.1.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 (308) hide show
  1. package/MIGRATION.md +131 -0
  2. package/README.md +40 -30
  3. package/android/build.gradle +21 -0
  4. package/android/src/main/java/com/sentori/SentoriCrashHandler.kt +29 -0
  5. package/android/src/main/java/com/sentori/SentoriModule.kt +8 -0
  6. package/android/src/main/java/com/sentori/SentoriScreenshotCapture.kt +36 -4
  7. package/android/src/test/java/com/sentori/SentoriCrashHandlerTest.kt +7 -2
  8. package/android/src/test/resources/robolectric.properties +10 -0
  9. package/ios/SentoriCrashHandler.swift +48 -4
  10. package/ios/SentoriModule.swift +12 -0
  11. package/ios/SentoriScreenshotCapture.swift +34 -3
  12. package/lib/config.d.ts +17 -47
  13. package/lib/config.d.ts.map +1 -1
  14. package/lib/config.js +3 -0
  15. package/lib/config.js.map +1 -1
  16. package/lib/device.d.ts +5 -0
  17. package/lib/device.d.ts.map +1 -0
  18. package/lib/device.js +29 -0
  19. package/lib/device.js.map +1 -0
  20. package/lib/emit-hooks.d.ts +7 -0
  21. package/lib/emit-hooks.d.ts.map +1 -0
  22. package/lib/emit-hooks.js +24 -0
  23. package/lib/emit-hooks.js.map +1 -0
  24. package/lib/error-boundary.d.ts.map +1 -1
  25. package/lib/error-boundary.js +1 -1
  26. package/lib/error-boundary.js.map +1 -1
  27. package/lib/feature-flags.d.ts.map +1 -1
  28. package/lib/handlers/dev-symbolicate.d.ts +1 -1
  29. package/lib/handlers/dev-symbolicate.d.ts.map +1 -1
  30. package/lib/handlers/dev-symbolicate.js +2 -0
  31. package/lib/handlers/dev-symbolicate.js.map +1 -1
  32. package/lib/handlers/global.js +1 -1
  33. package/lib/handlers/global.js.map +1 -1
  34. package/lib/handlers/lifecycle.js +3 -3
  35. package/lib/handlers/lifecycle.js.map +1 -1
  36. package/lib/handlers/network.d.ts +2 -2
  37. package/lib/handlers/network.d.ts.map +1 -1
  38. package/lib/handlers/network.js +69 -187
  39. package/lib/handlers/network.js.map +1 -1
  40. package/lib/handlers/promise.js +1 -1
  41. package/lib/handlers/promise.js.map +1 -1
  42. package/lib/handlers/screenshot.d.ts.map +1 -1
  43. package/lib/handlers/screenshot.js +3 -12
  44. package/lib/handlers/screenshot.js.map +1 -1
  45. package/lib/index.d.ts +32 -109
  46. package/lib/index.d.ts.map +1 -1
  47. package/lib/index.js +54 -103
  48. package/lib/index.js.map +1 -1
  49. package/lib/init.d.ts +3 -150
  50. package/lib/init.d.ts.map +1 -1
  51. package/lib/init.js +100 -261
  52. package/lib/init.js.map +1 -1
  53. package/lib/long-task-monitor.d.ts +1 -7
  54. package/lib/long-task-monitor.d.ts.map +1 -1
  55. package/lib/long-task-monitor.js +37 -58
  56. package/lib/long-task-monitor.js.map +1 -1
  57. package/lib/mask.d.ts +5 -13
  58. package/lib/mask.d.ts.map +1 -1
  59. package/lib/mask.js +29 -30
  60. package/lib/mask.js.map +1 -1
  61. package/lib/mobile-vitals.d.ts +3 -31
  62. package/lib/mobile-vitals.d.ts.map +1 -1
  63. package/lib/mobile-vitals.js +22 -61
  64. package/lib/mobile-vitals.js.map +1 -1
  65. package/lib/native-pending.d.ts +3 -0
  66. package/lib/native-pending.d.ts.map +1 -0
  67. package/lib/native-pending.js +64 -0
  68. package/lib/native-pending.js.map +1 -0
  69. package/lib/native.d.ts +4 -11
  70. package/lib/native.d.ts.map +1 -1
  71. package/lib/native.js +23 -0
  72. package/lib/native.js.map +1 -1
  73. package/lib/navigation.d.ts +3 -17
  74. package/lib/navigation.d.ts.map +1 -1
  75. package/lib/navigation.js +32 -133
  76. package/lib/navigation.js.map +1 -1
  77. package/lib/netinfo.d.ts +1 -1
  78. package/lib/netinfo.d.ts.map +1 -1
  79. package/lib/netinfo.js +2 -2
  80. package/lib/netinfo.js.map +1 -1
  81. package/lib/push.d.ts.map +1 -1
  82. package/lib/push.js +2 -4
  83. package/lib/push.js.map +1 -1
  84. package/lib/rage-tap.d.ts.map +1 -1
  85. package/lib/rage-tap.js +56 -23
  86. package/lib/rage-tap.js.map +1 -1
  87. package/lib/replay-screens.d.ts +15 -0
  88. package/lib/replay-screens.d.ts.map +1 -0
  89. package/lib/replay-screens.js +87 -0
  90. package/lib/replay-screens.js.map +1 -0
  91. package/lib/replay.d.ts.map +1 -1
  92. package/lib/replay.js +3 -24
  93. package/lib/replay.js.map +1 -1
  94. package/lib/responsiveness-detector.d.ts +18 -0
  95. package/lib/responsiveness-detector.d.ts.map +1 -0
  96. package/lib/responsiveness-detector.js +55 -0
  97. package/lib/responsiveness-detector.js.map +1 -0
  98. package/lib/scope.d.ts +7 -0
  99. package/lib/scope.d.ts.map +1 -0
  100. package/lib/scope.js +41 -0
  101. package/lib/scope.js.map +1 -0
  102. package/lib/transport.d.ts +19 -92
  103. package/lib/transport.d.ts.map +1 -1
  104. package/lib/transport.js +75 -288
  105. package/lib/transport.js.map +1 -1
  106. package/lib/verbs.d.ts +16 -0
  107. package/lib/verbs.d.ts.map +1 -0
  108. package/lib/verbs.js +153 -0
  109. package/lib/verbs.js.map +1 -0
  110. package/package.json +4 -3
  111. package/src/__tests__/iron-rule.test.ts +128 -0
  112. package/src/__tests__/replay-screens.test.ts +63 -0
  113. package/src/__tests__/responsiveness-detector.test.ts +74 -0
  114. package/src/__tests__/screenshot.test.ts +0 -2
  115. package/src/__tests__/transport.test.ts +66 -213
  116. package/src/__tests__/verbs.test.ts +91 -0
  117. package/src/config.ts +20 -47
  118. package/src/device.ts +36 -0
  119. package/src/emit-hooks.ts +30 -0
  120. package/src/error-boundary.tsx +1 -1
  121. package/src/handlers/dev-symbolicate.ts +2 -1
  122. package/src/handlers/global.ts +1 -1
  123. package/src/handlers/lifecycle.ts +3 -3
  124. package/src/handlers/network.ts +95 -211
  125. package/src/handlers/promise.ts +1 -1
  126. package/src/handlers/screenshot.ts +3 -11
  127. package/src/index.ts +84 -215
  128. package/src/init.ts +115 -449
  129. package/src/long-task-monitor.ts +42 -64
  130. package/src/mask.ts +29 -31
  131. package/src/mobile-vitals.ts +22 -82
  132. package/src/native-pending.ts +92 -0
  133. package/src/native.ts +33 -0
  134. package/src/navigation.ts +34 -142
  135. package/src/netinfo.ts +3 -3
  136. package/src/push.ts +2 -5
  137. package/src/rage-tap.tsx +72 -25
  138. package/src/replay-screens.ts +95 -0
  139. package/src/replay.ts +3 -20
  140. package/src/responsiveness-detector.ts +66 -0
  141. package/src/scope.ts +50 -0
  142. package/src/transport.ts +84 -371
  143. package/src/verbs.ts +198 -0
  144. package/lib/breadcrumbs.d.ts +0 -18
  145. package/lib/breadcrumbs.d.ts.map +0 -1
  146. package/lib/breadcrumbs.js +0 -42
  147. package/lib/breadcrumbs.js.map +0 -1
  148. package/lib/bundle-info.d.ts +0 -12
  149. package/lib/bundle-info.d.ts.map +0 -1
  150. package/lib/bundle-info.js +0 -73
  151. package/lib/bundle-info.js.map +0 -1
  152. package/lib/capture.d.ts +0 -140
  153. package/lib/capture.d.ts.map +0 -1
  154. package/lib/capture.js +0 -511
  155. package/lib/capture.js.map +0 -1
  156. package/lib/compat/sentry.d.ts +0 -126
  157. package/lib/compat/sentry.d.ts.map +0 -1
  158. package/lib/compat/sentry.js +0 -332
  159. package/lib/compat/sentry.js.map +0 -1
  160. package/lib/control-channel.d.ts +0 -6
  161. package/lib/control-channel.d.ts.map +0 -1
  162. package/lib/control-channel.js +0 -96
  163. package/lib/control-channel.js.map +0 -1
  164. package/lib/expo-compat.d.ts +0 -270
  165. package/lib/expo-compat.d.ts.map +0 -1
  166. package/lib/expo-compat.js +0 -500
  167. package/lib/expo-compat.js.map +0 -1
  168. package/lib/feedback-widget.d.ts +0 -35
  169. package/lib/feedback-widget.d.ts.map +0 -1
  170. package/lib/feedback-widget.js +0 -193
  171. package/lib/feedback-widget.js.map +0 -1
  172. package/lib/feedback.d.ts +0 -2
  173. package/lib/feedback.d.ts.map +0 -1
  174. package/lib/feedback.js +0 -17
  175. package/lib/feedback.js.map +0 -1
  176. package/lib/heartbeat.d.ts +0 -9
  177. package/lib/heartbeat.d.ts.map +0 -1
  178. package/lib/heartbeat.js +0 -138
  179. package/lib/heartbeat.js.map +0 -1
  180. package/lib/index.js.bak +0 -64
  181. package/lib/install-id.d.ts +0 -17
  182. package/lib/install-id.d.ts.map +0 -1
  183. package/lib/install-id.js +0 -125
  184. package/lib/install-id.js.map +0 -1
  185. package/lib/lifecycle.d.ts +0 -28
  186. package/lib/lifecycle.d.ts.map +0 -1
  187. package/lib/lifecycle.js +0 -73
  188. package/lib/lifecycle.js.map +0 -1
  189. package/lib/measure.d.ts +0 -4
  190. package/lib/measure.d.ts.map +0 -1
  191. package/lib/measure.js +0 -25
  192. package/lib/measure.js.map +0 -1
  193. package/lib/metrics.d.ts +0 -24
  194. package/lib/metrics.d.ts.map +0 -1
  195. package/lib/metrics.js +0 -81
  196. package/lib/metrics.js.map +0 -1
  197. package/lib/pre-crash-sentinel.d.ts +0 -12
  198. package/lib/pre-crash-sentinel.d.ts.map +0 -1
  199. package/lib/pre-crash-sentinel.js +0 -116
  200. package/lib/pre-crash-sentinel.js.map +0 -1
  201. package/lib/report-security.d.ts +0 -40
  202. package/lib/report-security.d.ts.map +0 -1
  203. package/lib/report-security.js +0 -159
  204. package/lib/report-security.js.map +0 -1
  205. package/lib/runtime-metrics-fps.d.ts +0 -19
  206. package/lib/runtime-metrics-fps.d.ts.map +0 -1
  207. package/lib/runtime-metrics-fps.js +0 -128
  208. package/lib/runtime-metrics-fps.js.map +0 -1
  209. package/lib/runtime-metrics-heap.d.ts +0 -13
  210. package/lib/runtime-metrics-heap.d.ts.map +0 -1
  211. package/lib/runtime-metrics-heap.js +0 -67
  212. package/lib/runtime-metrics-heap.js.map +0 -1
  213. package/lib/runtime-metrics-network.d.ts +0 -23
  214. package/lib/runtime-metrics-network.d.ts.map +0 -1
  215. package/lib/runtime-metrics-network.js +0 -99
  216. package/lib/runtime-metrics-network.js.map +0 -1
  217. package/lib/runtime-metrics.d.ts +0 -43
  218. package/lib/runtime-metrics.d.ts.map +0 -1
  219. package/lib/runtime-metrics.js +0 -115
  220. package/lib/runtime-metrics.js.map +0 -1
  221. package/lib/sample-profiler.d.ts +0 -21
  222. package/lib/sample-profiler.d.ts.map +0 -1
  223. package/lib/sample-profiler.js +0 -152
  224. package/lib/sample-profiler.js.map +0 -1
  225. package/lib/sentinel-context.d.ts +0 -4
  226. package/lib/sentinel-context.d.ts.map +0 -1
  227. package/lib/sentinel-context.js +0 -52
  228. package/lib/sentinel-context.js.map +0 -1
  229. package/lib/session-tracker.d.ts +0 -6
  230. package/lib/session-tracker.d.ts.map +0 -1
  231. package/lib/session-tracker.js +0 -50
  232. package/lib/session-tracker.js.map +0 -1
  233. package/lib/stack.d.ts +0 -3
  234. package/lib/stack.d.ts.map +0 -1
  235. package/lib/stack.js +0 -7
  236. package/lib/stack.js.map +0 -1
  237. package/lib/state-snapshots.d.ts +0 -33
  238. package/lib/state-snapshots.d.ts.map +0 -1
  239. package/lib/state-snapshots.js +0 -109
  240. package/lib/state-snapshots.js.map +0 -1
  241. package/lib/track.d.ts +0 -34
  242. package/lib/track.d.ts.map +0 -1
  243. package/lib/track.js +0 -107
  244. package/lib/track.js.map +0 -1
  245. package/lib/trail.d.ts +0 -12
  246. package/lib/trail.d.ts.map +0 -1
  247. package/lib/trail.js +0 -28
  248. package/lib/trail.js.map +0 -1
  249. package/lib/trust-score.d.ts +0 -20
  250. package/lib/trust-score.d.ts.map +0 -1
  251. package/lib/trust-score.js +0 -151
  252. package/lib/trust-score.js.map +0 -1
  253. package/lib/types.d.ts +0 -2
  254. package/lib/types.d.ts.map +0 -1
  255. package/lib/types.js +0 -4
  256. package/lib/types.js.map +0 -1
  257. package/lib/uuid.d.ts +0 -2
  258. package/lib/uuid.d.ts.map +0 -1
  259. package/lib/uuid.js +0 -3
  260. package/lib/uuid.js.map +0 -1
  261. package/src/__tests__/before-send.test.ts +0 -72
  262. package/src/__tests__/breadcrumbs.test.ts +0 -44
  263. package/src/__tests__/capture-replay.test.ts +0 -150
  264. package/src/__tests__/compat-sentry.test.ts +0 -121
  265. package/src/__tests__/control-channel.test.ts +0 -111
  266. package/src/__tests__/install-id.test.ts +0 -60
  267. package/src/__tests__/long-task-monitor.test.ts +0 -59
  268. package/src/__tests__/measure.test.ts +0 -45
  269. package/src/__tests__/navigation.test.ts +0 -175
  270. package/src/__tests__/push.test.ts +0 -238
  271. package/src/__tests__/report-security.test.ts +0 -106
  272. package/src/__tests__/runtime-metrics-instruments.test.ts +0 -109
  273. package/src/__tests__/runtime-metrics-network.test.ts +0 -78
  274. package/src/__tests__/sample-profiler.test.ts +0 -59
  275. package/src/__tests__/stack.test.ts +0 -45
  276. package/src/__tests__/state-snapshots.test.ts +0 -119
  277. package/src/__tests__/tracing.test.ts +0 -201
  278. package/src/__tests__/track.test.ts +0 -91
  279. package/src/__tests__/uuid.test.ts +0 -41
  280. package/src/breadcrumbs.ts +0 -57
  281. package/src/bundle-info.ts +0 -95
  282. package/src/capture.ts +0 -660
  283. package/src/compat/sentry.ts +0 -490
  284. package/src/control-channel.ts +0 -98
  285. package/src/expo-compat.ts +0 -698
  286. package/src/feedback-widget.tsx +0 -316
  287. package/src/feedback.ts +0 -21
  288. package/src/heartbeat.ts +0 -157
  289. package/src/install-id.ts +0 -146
  290. package/src/lifecycle.ts +0 -76
  291. package/src/measure.ts +0 -28
  292. package/src/metrics.ts +0 -94
  293. package/src/pre-crash-sentinel.ts +0 -140
  294. package/src/report-security.ts +0 -165
  295. package/src/runtime-metrics-fps.ts +0 -137
  296. package/src/runtime-metrics-heap.ts +0 -78
  297. package/src/runtime-metrics-network.ts +0 -103
  298. package/src/runtime-metrics.ts +0 -122
  299. package/src/sample-profiler.ts +0 -169
  300. package/src/sentinel-context.ts +0 -60
  301. package/src/session-tracker.ts +0 -53
  302. package/src/stack.ts +0 -10
  303. package/src/state-snapshots.ts +0 -133
  304. package/src/track.ts +0 -123
  305. package/src/trail.ts +0 -32
  306. package/src/trust-score.ts +0 -176
  307. package/src/types.ts +0 -21
  308. package/src/uuid.ts +0 -2
@@ -1,152 +0,0 @@
1
- // v1.1 #4 升级 — JS sample profiler (idle-tick sampler).
2
- //
3
- // What it does:
4
- // • setInterval(50ms) — captures `new Error().stack` of the tick
5
- // callback, parses out the top frames, increments per-frame
6
- // counts in a rolling window
7
- // • every 60 s, emits a `sentori.profile` span with the aggregated
8
- // flame-data (frame name → tick count) as span data
9
- //
10
- // What it does NOT do:
11
- // • Sample frames during a busy JS task. JS is single-threaded;
12
- // while the busy code is running, our setInterval can't fire,
13
- // so the busy stack never gets sampled. Long-task monitor (#4
14
- // v0.9.6) catches that case from a different angle (duration).
15
- //
16
- // Idle-tick sampling is still useful: shows which functions appear
17
- // most often between busy moments — typically the render hot path,
18
- // frequent timer callbacks, recurring middleware. Pairs with
19
- // long-task-monitor (catches the 200ms+ outliers).
20
- //
21
- // Real Hermes off-thread sampling profiler (which would catch busy
22
- // frames too) needs RN-internal HermesAPI access, deferred to v1.2.
23
- import { startSpan } from '@goliapkg/sentori-core';
24
- const SAMPLE_INTERVAL_MS = 50;
25
- const FLUSH_INTERVAL_MS = 60_000;
26
- const MAX_FRAMES = 200; // safety cap per profile
27
- const MAX_FRAME_NAME_LEN = 120;
28
- /** Floor on user-configured sample interval. Going below ~20 ms costs
29
- * measurable JS-thread time to `new Error().stack` + regex parse on
30
- * every tick — past that point you'd see the profile drag down the
31
- * thing you're profiling. */
32
- const MIN_SAMPLE_INTERVAL_MS = 20;
33
- /** Floor on flush interval. Sub-5s windows produce a span every few
34
- * seconds, which is just noise for an aggregator that's looking at
35
- * per-minute hotspot trends. */
36
- const MIN_FLUSH_INTERVAL_MS = 5_000;
37
- /** How many stack-trace lines to keep per tick (after dropping the
38
- * Error ctor + sampleTick frames). 10 is enough to see the JS-side
39
- * call shape; deeper than that the bottom frames are usually RN
40
- * runtime / event loop and not actionable. */
41
- const FRAMES_PER_TICK = 10;
42
- let _frameCounts = new Map();
43
- let _windowStartedAt = 0;
44
- let _sampleTimer = null;
45
- let _flushTimer = null;
46
- /**
47
- * Start the idle-tick sample profiler. Idempotent — calling twice
48
- * is a no-op after the first successful start.
49
- *
50
- * Pairs naturally with `longTaskMonitor` (≥200ms outliers): the
51
- * profiler shows the *distribution* of code that runs in idle gaps,
52
- * the long-task monitor catches the few outliers that are blocking
53
- * the thread. Together they cover the JS-side perf signal cheaply.
54
- */
55
- export function startSampleProfiler(opts) {
56
- if (!opts.enabled || _sampleTimer !== null)
57
- return;
58
- const sampleMs = Math.max(MIN_SAMPLE_INTERVAL_MS, opts.sampleMs ?? SAMPLE_INTERVAL_MS);
59
- const flushMs = Math.max(MIN_FLUSH_INTERVAL_MS, opts.flushMs ?? FLUSH_INTERVAL_MS);
60
- _windowStartedAt = Date.now();
61
- _sampleTimer = setInterval(() => sampleTick(), sampleMs);
62
- _flushTimer = setInterval(() => flushWindow(), flushMs);
63
- _sampleTimer.unref?.();
64
- _flushTimer.unref?.();
65
- }
66
- export function stopSampleProfiler() {
67
- if (_sampleTimer !== null) {
68
- clearInterval(_sampleTimer);
69
- _sampleTimer = null;
70
- }
71
- if (_flushTimer !== null) {
72
- clearInterval(_flushTimer);
73
- _flushTimer = null;
74
- }
75
- _frameCounts.clear();
76
- _windowStartedAt = 0;
77
- }
78
- function sampleTick() {
79
- const stack = new Error().stack;
80
- if (!stack)
81
- return;
82
- // Skip the first 2 frames — they're our `sampleTick` + `Error
83
- // ctor` which would dominate every sample.
84
- const lines = stack.split('\n').slice(2, 2 + FRAMES_PER_TICK);
85
- for (const line of lines) {
86
- const frame = parseFrameName(line);
87
- if (frame) {
88
- _frameCounts.set(frame, (_frameCounts.get(frame) ?? 0) + 1);
89
- }
90
- }
91
- }
92
- /** Pull a stable identifier from one stack-trace line. Handles:
93
- *
94
- * at FunctionName (file://path/Foo.js:123:45)
95
- * at file://path/Foo.js:123:45 (anonymous)
96
- * FunctionName@file://path/Foo.js:123:45 (Hermes style)
97
- *
98
- * Drops absolute path noise — keeps `Foo.js:Line` so re-deploys
99
- * with stable code paths bucket together. */
100
- function parseFrameName(line) {
101
- const trimmed = line.trim();
102
- if (trimmed.length === 0)
103
- return null;
104
- // Hermes / JSC: `FunctionName@file:line:col` or just `@file:line:col`.
105
- // Standard: `at FunctionName (file:line:col)`.
106
- let raw = trimmed.replace(/^at\s+/, '');
107
- raw = raw.replace(/\s*[(\[].*$/, ''); // strip the file part after `(`
108
- // Hermes: split on @
109
- if (raw.includes('@')) {
110
- raw = raw.split('@')[0] ?? raw;
111
- }
112
- raw = raw.trim();
113
- if (raw.length === 0 || raw.length > MAX_FRAME_NAME_LEN)
114
- return null;
115
- // Ignore the obvious noise frames.
116
- if (raw === 'Object.<anonymous>' || raw === '<anonymous>')
117
- return null;
118
- return raw;
119
- }
120
- function flushWindow() {
121
- if (_frameCounts.size === 0)
122
- return;
123
- const windowEndedAt = Date.now();
124
- const durationMs = windowEndedAt - _windowStartedAt;
125
- // Top-N frames so attachment doesn't bloat unboundedly.
126
- const top = Array.from(_frameCounts.entries())
127
- .sort((a, b) => b[1] - a[1])
128
- .slice(0, MAX_FRAMES);
129
- const span = startSpan('sentori.profile', {
130
- name: 'js.sample-profile',
131
- startNowMs: _windowStartedAt,
132
- tags: {
133
- 'profile.kind': 'sample',
134
- 'profile.sample_count': String(sampleCount(top)),
135
- 'profile.duration_ms': String(durationMs),
136
- },
137
- });
138
- span.setData('flameData', Object.fromEntries(top));
139
- span.finish({ endNowMs: windowEndedAt, status: 'ok' });
140
- _frameCounts.clear();
141
- _windowStartedAt = windowEndedAt;
142
- }
143
- function sampleCount(entries) {
144
- let total = 0;
145
- for (const [, n] of entries)
146
- total += n;
147
- return total;
148
- }
149
- export function __resetSampleProfilerForTests() {
150
- stopSampleProfiler();
151
- }
152
- //# sourceMappingURL=sample-profiler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sample-profiler.js","sourceRoot":"","sources":["../src/sample-profiler.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,gBAAgB;AAChB,mEAAmE;AACnE,gEAAgE;AAChE,iCAAiC;AACjC,qEAAqE;AACrE,wDAAwD;AACxD,EAAE;AACF,uBAAuB;AACvB,kEAAkE;AAClE,kEAAkE;AAClE,kEAAkE;AAClE,mEAAmE;AACnE,EAAE;AACF,mEAAmE;AACnE,mEAAmE;AACnE,6DAA6D;AAC7D,mDAAmD;AACnD,EAAE;AACF,mEAAmE;AACnE,oEAAoE;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,yBAAyB;AACjD,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B;;;8BAG8B;AAC9B,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC;;iCAEiC;AACjC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAEpC;;;+CAG+C;AAC/C,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,IAAI,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC7C,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzB,IAAI,YAAY,GAA0C,IAAI,CAAC;AAC/D,IAAI,WAAW,GAA0C,IAAI,CAAC;AAW9D;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAA2B;IAC7D,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,QAAQ,IAAI,kBAAkB,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,OAAO,IAAI,iBAAiB,CAAC,CAAC;IAEnF,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,QAAQ,CAAC,CAAC;IACzD,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;IACvD,YAAkD,CAAC,KAAK,EAAE,EAAE,CAAC;IAC7D,WAAiD,CAAC,KAAK,EAAE,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,aAAa,CAAC,YAAY,CAAC,CAAC;QAC5B,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,aAAa,CAAC,WAAW,CAAC,CAAC;QAC3B,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC;IACD,YAAY,CAAC,KAAK,EAAE,CAAC;IACrB,gBAAgB,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,OAAO;IACnB,8DAA8D;IAC9D,2CAA2C;IAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC;IAC9D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;6CAO6C;AAC7C,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,uEAAuE;IACvE,kDAAkD;IAClD,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,gCAAgC;IACtE,qBAAqB;IACrB,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IACjC,CAAC;IACD,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACjB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACrE,mCAAmC;IACnC,IAAI,GAAG,KAAK,oBAAoB,IAAI,GAAG,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IACvE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IACpC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,aAAa,GAAG,gBAAgB,CAAC;IACpD,wDAAwD;IACxD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;SAC3C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3B,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAExB,MAAM,IAAI,GAAG,SAAS,CAAC,iBAAiB,EAAE;QACxC,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE,gBAAgB;QAC5B,IAAI,EAAE;YACJ,cAAc,EAAE,QAAQ;YACxB,sBAAsB,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAChD,qBAAqB,EAAE,MAAM,CAAC,UAAU,CAAC;SAC1C;KACF,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvD,YAAY,CAAC,KAAK,EAAE,CAAC;IACrB,gBAAgB,GAAG,aAAa,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAAC,OAA2B;IAC9C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO;QAAE,KAAK,IAAI,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,kBAAkB,EAAE,CAAC;AACvB,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { App, Device } from './types';
2
- export declare const collectDeviceForSentinel: () => Device;
3
- export declare const getAppForSentinel: (release: string) => App;
4
- //# sourceMappingURL=sentinel-context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sentinel-context.d.ts","sourceRoot":"","sources":["../src/sentinel-context.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,wBAAwB,QAAO,MAgC3C,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,KAAG,GAkBnD,CAAC"}
@@ -1,52 +0,0 @@
1
- // Shared device + app collectors. Used by both capture.ts (errors)
2
- // and pre-crash-sentinel.ts (nearCrash). Same shape so the dashboard
3
- // can render both kinds of events through the same UI components.
4
- import { getCachedNetworkType } from './netinfo';
5
- export const collectDeviceForSentinel = () => {
6
- let os = 'other';
7
- let osVersion = '0';
8
- let locale;
9
- const networkType = getCachedNetworkType();
10
- try {
11
- // eslint-disable-next-line @typescript-eslint/no-require-imports
12
- const RN = require('react-native');
13
- const rnOS = RN.Platform.OS;
14
- os = rnOS === 'android' || rnOS === 'ios' || rnOS === 'web' ? rnOS : 'other';
15
- osVersion = String(RN.Platform.Version);
16
- if (rnOS === 'ios') {
17
- const s = RN.NativeModules.SettingsManager?.settings;
18
- locale = s?.AppleLocale ?? s?.AppleLanguages?.[0];
19
- }
20
- else if (rnOS === 'android') {
21
- locale = RN.NativeModules.I18nManager?.localeIdentifier;
22
- }
23
- }
24
- catch {
25
- // not in RN runtime
26
- }
27
- const device = { os, osVersion };
28
- if (locale)
29
- device.locale = locale;
30
- if (networkType)
31
- device.networkType = networkType;
32
- return device;
33
- };
34
- export const getAppForSentinel = (release) => {
35
- const m = /^(?:[^@]+@)?([^+]+)(?:\+(.+))?$/.exec(release);
36
- const version = m?.[1] ?? '0.0.0';
37
- const build = m?.[2];
38
- let rnVersion = 'unknown';
39
- try {
40
- // eslint-disable-next-line @typescript-eslint/no-require-imports
41
- rnVersion = require('react-native/package.json').version;
42
- }
43
- catch {
44
- // not in RN runtime
45
- }
46
- return {
47
- build,
48
- framework: { name: 'react-native', version: rnVersion },
49
- version,
50
- };
51
- };
52
- //# sourceMappingURL=sentinel-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sentinel-context.js","sourceRoot":"","sources":["../src/sentinel-context.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,qEAAqE;AACrE,kEAAkE;AAElE,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGjD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAW,EAAE;IACnD,IAAI,EAAE,GAAiB,OAAO,CAAC;IAC/B,IAAI,SAAS,GAAG,GAAG,CAAC;IACpB,IAAI,MAA0B,CAAC;IAC/B,MAAM,WAAW,GAAG,oBAAoB,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAQhC,CAAC;QACF,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7E,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,QAAQ,CAAC;YACrD,MAAM,GAAG,CAAC,EAAE,WAAW,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,gBAAgB,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IACD,MAAM,MAAM,GAAW,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;IACzC,IAAI,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,IAAI,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;IAClD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAO,EAAE;IACxD,MAAM,CAAC,GAAG,iCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;IAClC,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAErB,IAAI,SAAS,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC;QACH,iEAAiE;QACjE,SAAS,GAAI,OAAO,CAAC,2BAA2B,CAAyB,CAAC,OAAO,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IAED,OAAO;QACL,KAAK;QACL,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE;QACvD,OAAO;KACR,CAAC;AACJ,CAAC,CAAC"}
@@ -1,6 +0,0 @@
1
- export declare const startSession: () => void;
2
- export declare const endSession: (status?: "exited") => void;
3
- export declare const markSessionErrored: () => void;
4
- export declare const markSessionCrashed: () => void;
5
- export declare const __resetSessionForTests: () => void;
6
- //# sourceMappingURL=session-tracker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-tracker.d.ts","sourceRoot":"","sources":["../src/session-tracker.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,YAAY,QAAO,IAS/B,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,SAAS,QAAQ,KAAG,IAG9C,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,IAErC,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,IAErC,CAAC;AAEF,eAAO,MAAM,sBAAsB,QAAO,IAEzC,CAAC"}
@@ -1,50 +0,0 @@
1
- /**
2
- * Phase 26 sub-B: RN session tracker glue.
3
- *
4
- * Mirrors the JS SDK's session-tracker but sends through the RN
5
- * transport. AppState binding lives in `handlers/lifecycle.ts`; this
6
- * file is just the singleton + the start/end/markErrored/markCrashed
7
- * surface.
8
- */
9
- import { SessionTracker } from '@goliapkg/sentori-core';
10
- import { getConfig } from './config';
11
- import { getUser } from './capture';
12
- import { sendSessionPing } from './transport';
13
- let _tracker = null;
14
- const tracker = () => {
15
- if (_tracker)
16
- return _tracker;
17
- _tracker = new SessionTracker((ping) => {
18
- const cfg = getConfig();
19
- if (!cfg)
20
- return;
21
- void sendSessionPing(cfg.ingestUrl, cfg.token, ping);
22
- });
23
- return _tracker;
24
- };
25
- export const startSession = () => {
26
- const cfg = getConfig();
27
- if (!cfg)
28
- return;
29
- const user = getUser();
30
- tracker().start({
31
- environment: cfg.environment,
32
- release: cfg.release,
33
- userId: user?.id ?? null,
34
- });
35
- };
36
- export const endSession = (status) => {
37
- if (!_tracker)
38
- return;
39
- _tracker.end(status);
40
- };
41
- export const markSessionErrored = () => {
42
- _tracker?.markErrored();
43
- };
44
- export const markSessionCrashed = () => {
45
- _tracker?.markCrashed();
46
- };
47
- export const __resetSessionForTests = () => {
48
- _tracker = null;
49
- };
50
- //# sourceMappingURL=session-tracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-tracker.js","sourceRoot":"","sources":["../src/session-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,IAAI,QAAQ,GAA0B,IAAI,CAAC;AAE3C,MAAM,OAAO,GAAG,GAAmB,EAAE;IACnC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,QAAQ,GAAG,IAAI,cAAc,CAAC,CAAC,IAAI,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,KAAK,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,GAAS,EAAE;IACrC,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,OAAO,EAAE,CAAC,KAAK,CAAC;QACd,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI;KACzB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAiB,EAAQ,EAAE;IACpD,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAS,EAAE;IAC3C,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAS,EAAE;IAC3C,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAS,EAAE;IAC/C,QAAQ,GAAG,IAAI,CAAC;AAClB,CAAC,CAAC"}
package/lib/stack.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import type { Frame } from './types';
2
- export declare const parseStack: (stack: string | undefined) => Frame[];
3
- //# sourceMappingURL=stack.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../src/stack.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,GAAG,SAAS,KAAG,KAAK,EACrC,CAAA"}
package/lib/stack.js DELETED
@@ -1,7 +0,0 @@
1
- // Phase 21: regex + parse loop moved to @goliapkg/sentori-core.
2
- // RN keeps the long path (no shortFilenames option) because Hermes
3
- // paths are already short and native symbolication needs the
4
- // absolute form.
5
- import { parseStack as parseStackCore } from '@goliapkg/sentori-core';
6
- export const parseStack = (stack) => parseStackCore(stack);
7
- //# sourceMappingURL=stack.js.map
package/lib/stack.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"stack.js","sourceRoot":"","sources":["../src/stack.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,mEAAmE;AACnE,6DAA6D;AAC7D,iBAAiB;AACjB,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAIrE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAyB,EAAW,EAAE,CAC/D,cAAc,CAAC,KAAK,CAAC,CAAA"}
@@ -1,33 +0,0 @@
1
- type StoreLike = {
2
- getState?: () => unknown;
3
- subscribe?: (cb: () => void) => () => void;
4
- };
5
- export type StateSnapshot = {
6
- /** Wall-clock when the diff fired. */
7
- ts: number;
8
- /** Top-level key/value diff vs the previous snapshot. Empty diff
9
- * doesn't get recorded. */
10
- diff: Record<string, unknown>;
11
- /** Source label so the viewer can show "Redux" / "Zustand" / "Manual". */
12
- source: string;
13
- };
14
- export declare function bindState(opts: {
15
- redux?: StoreLike;
16
- zustand?: StoreLike;
17
- /** Additional named stores. The label is used as the snapshot's
18
- * `source` and as the diff bucket key. */
19
- custom?: Record<string, StoreLike>;
20
- }): void;
21
- export declare function unbindState(): void;
22
- /** Manual recording for state not in a subscribed store. */
23
- export declare function recordState(snapshot: Record<string, unknown>, source?: string): void;
24
- export declare function getStateSnapshots(): StateSnapshot[];
25
- export declare function clearStateSnapshots(): void;
26
- /** Returns the top-level key/value diff (next has the value, prev
27
- * may not contain the key). Empty diff returns `{}` so callers can
28
- * no-op on empty. */
29
- export declare function shallowDiff(prev: unknown, next: unknown): null | Record<string, unknown>;
30
- /** Test-only. */
31
- export declare function __resetStateSnapshotsForTests(): void;
32
- export {};
33
- //# sourceMappingURL=state-snapshots.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-snapshots.d.ts","sourceRoot":"","sources":["../src/state-snapshots.ts"],"names":[],"mappings":"AAwBA,KAAK,SAAS,GAAG;IACf,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,sCAAsC;IACtC,EAAE,EAAE,MAAM,CAAC;IACX;gCAC4B;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAMF,wBAAgB,SAAS,CAAC,IAAI,EAAE;IAC9B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;+CAC2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACpC,GAAG,IAAI,CASP;AAsBD,wBAAgB,WAAW,IAAI,IAAI,CAUlC;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,SAAW,GAAG,IAAI,CAEtF;AAED,wBAAgB,iBAAiB,IAAI,aAAa,EAAE,CAEnD;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAOD;;sBAEsB;AACtB,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAaxF;AAED,iBAAiB;AACjB,wBAAgB,6BAA6B,IAAI,IAAI,CAGpD"}
@@ -1,109 +0,0 @@
1
- // v0.9.2 +S2 — State Time-travel (SDK side).
2
- //
3
- // `sentori.bindState({ redux, zustand })` subscribes to a store-like
4
- // object and records a shallow diff every time it emits a change.
5
- // A ring buffer of the last N snapshots travels with each
6
- // captureException as a `stateSnapshot` attachment — the dashboard's
7
- // time-travel viewer (v0.9.2.1) renders the timeline.
8
- //
9
- // Why diffs and not full snapshots:
10
- // • prod stores can be huge (carts, paginated lists, etc.)
11
- // • a diff drops to ~1% of full snapshot size in typical apps
12
- // • the viewer rehydrates by applying diffs forward from a baseline
13
- //
14
- // `recordState(obj)` is the manual escape hatch for state that isn't
15
- // in a redux/zustand store (e.g. `useState` in a deeply-nested
16
- // component, or React Context). The host calls it where it makes sense.
17
- //
18
- // Privacy: the same mask query that protects screenshots is consulted
19
- // before serializing — any path matching `nativeID` shape isn't yet,
20
- // but `mask.matchPath` can be added later. v0.9.2 ships without
21
- // path masking; consumers should keep PII out of bindState scopes.
22
- const MAX_SNAPSHOTS = 50;
23
- let _snapshots = [];
24
- let _unsubscribers = [];
25
- let _lastByLabel = {};
26
- export function bindState(opts) {
27
- unbindState();
28
- bindOne('redux', opts.redux);
29
- bindOne('zustand', opts.zustand);
30
- if (opts.custom) {
31
- for (const [label, store] of Object.entries(opts.custom)) {
32
- bindOne(label, store);
33
- }
34
- }
35
- }
36
- function bindOne(label, store) {
37
- if (!store)
38
- return;
39
- if (typeof store.getState !== 'function' || typeof store.subscribe !== 'function')
40
- return;
41
- try {
42
- _lastByLabel[label] = store.getState();
43
- const unsub = store.subscribe(() => {
44
- const next = store.getState();
45
- const prev = _lastByLabel[label];
46
- const diff = shallowDiff(prev, next);
47
- if (diff && Object.keys(diff).length > 0) {
48
- push({ diff, source: label, ts: Date.now() });
49
- }
50
- _lastByLabel[label] = next;
51
- });
52
- _unsubscribers.push(unsub);
53
- }
54
- catch {
55
- // ignore bad stores
56
- }
57
- }
58
- export function unbindState() {
59
- for (const u of _unsubscribers) {
60
- try {
61
- u();
62
- }
63
- catch {
64
- // ignore
65
- }
66
- }
67
- _unsubscribers = [];
68
- _lastByLabel = {};
69
- }
70
- /** Manual recording for state not in a subscribed store. */
71
- export function recordState(snapshot, source = 'manual') {
72
- push({ diff: snapshot, source, ts: Date.now() });
73
- }
74
- export function getStateSnapshots() {
75
- return _snapshots.slice();
76
- }
77
- export function clearStateSnapshots() {
78
- _snapshots = [];
79
- }
80
- function push(s) {
81
- _snapshots.push(s);
82
- while (_snapshots.length > MAX_SNAPSHOTS)
83
- _snapshots.shift();
84
- }
85
- /** Returns the top-level key/value diff (next has the value, prev
86
- * may not contain the key). Empty diff returns `{}` so callers can
87
- * no-op on empty. */
88
- export function shallowDiff(prev, next) {
89
- if (typeof next !== 'object' || next === null)
90
- return null;
91
- const nObj = next;
92
- if (typeof prev !== 'object' || prev === null) {
93
- return { ...nObj };
94
- }
95
- const pObj = prev;
96
- const out = {};
97
- const keys = new Set([...Object.keys(pObj), ...Object.keys(nObj)]);
98
- for (const k of keys) {
99
- if (pObj[k] !== nObj[k])
100
- out[k] = nObj[k];
101
- }
102
- return out;
103
- }
104
- /** Test-only. */
105
- export function __resetStateSnapshotsForTests() {
106
- unbindState();
107
- _snapshots = [];
108
- }
109
- //# sourceMappingURL=state-snapshots.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state-snapshots.js","sourceRoot":"","sources":["../src/state-snapshots.ts"],"names":[],"mappings":"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"}
package/lib/track.d.ts DELETED
@@ -1,34 +0,0 @@
1
- export type TrackProps = Record<string, unknown>;
2
- export type TrackEvent = {
3
- environment?: string;
4
- name: string;
5
- props?: TrackProps;
6
- release?: string;
7
- route?: string;
8
- sessionId?: string;
9
- ts: string;
10
- userId?: string;
11
- };
12
- /**
13
- * Record a typed analytics event. Cheap to call from render hooks —
14
- * pushes into a 500-slot ring drained every 30 s (or on overflow) by
15
- * the transport flusher.
16
- *
17
- * Reserved names start with `$` (e.g. `$pageview`) and are emitted by
18
- * the SDK itself; you can still call `track('$pageview', …)` from app
19
- * code to backfill routes the auto-instrumentation missed.
20
- *
21
- * Server caps: name ≤ 200 chars, ≤ 40 prop keys. Calls exceeding the
22
- * cap are dropped client-side (no throw) so app code can fire-and-
23
- * forget without try/catch.
24
- */
25
- export declare function track(name: string, props?: TrackProps, route?: string): void;
26
- export declare function flushTrack(): Promise<void>;
27
- /**
28
- * Start the 30 s flush timer. Called once from `init()`. Idempotent.
29
- * `__resetTrackForTests` is exposed for vitest / bun:test teardown.
30
- */
31
- export declare function startTrackTimer(): void;
32
- export declare function __peekTrackBuffer(): readonly TrackEvent[];
33
- export declare function __resetTrackForTests(): void;
34
- //# sourceMappingURL=track.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../src/track.ts"],"names":[],"mappings":"AAwBA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAUF;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CA8B5E;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAOhD;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAOtC;AAED,wBAAgB,iBAAiB,IAAI,SAAS,UAAU,EAAE,CAEzD;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAM3C"}
package/lib/track.js DELETED
@@ -1,107 +0,0 @@
1
- // v1.1 chunk B — analytics `track` events on the SDK side.
2
- //
3
- // `sentori.track(name, props?)` pushes a single typed analytics event
4
- // into a fixed-size ring. A timer flushes the ring every 30 s (or
5
- // when the buffer hits 500) to `POST /v1/track:batch`. Best-effort;
6
- // a flush failure drops the batch — analytics aren't critical
7
- // telemetry.
8
- //
9
- // Why not one fetch per event: a busy app emitting `$pageview` +
10
- // custom funnel events every nav would saturate the JS thread and
11
- // the host's outbound connection pool. The same batching shape the
12
- // metrics module uses keeps `track()` cheap to call from render
13
- // hooks.
14
- //
15
- // Auto-pageview (`$pageview`) is emitted from `useTraceNavigation`
16
- // in navigation.ts whenever react-navigation swaps the active route.
17
- // Hosts that don't use react-navigation can call
18
- // `sentori.track('$pageview', { route: 'Cart' })` themselves.
19
- import { addInternalBreadcrumb } from './breadcrumbs';
20
- import { getCurrentUserId } from './capture';
21
- import { getConfig, isInitialized } from './config';
22
- import { sendTrackBatch } from './transport';
23
- const MAX_BUFFER = 500;
24
- const NAME_MAX = 200;
25
- const PROPS_KEYS_MAX = 40;
26
- const FLUSH_INTERVAL_MS = 30_000;
27
- let _buf = [];
28
- let _timer = null;
29
- /**
30
- * Record a typed analytics event. Cheap to call from render hooks —
31
- * pushes into a 500-slot ring drained every 30 s (or on overflow) by
32
- * the transport flusher.
33
- *
34
- * Reserved names start with `$` (e.g. `$pageview`) and are emitted by
35
- * the SDK itself; you can still call `track('$pageview', …)` from app
36
- * code to backfill routes the auto-instrumentation missed.
37
- *
38
- * Server caps: name ≤ 200 chars, ≤ 40 prop keys. Calls exceeding the
39
- * cap are dropped client-side (no throw) so app code can fire-and-
40
- * forget without try/catch.
41
- */
42
- export function track(name, props, route) {
43
- if (!isInitialized())
44
- return;
45
- if (typeof name !== 'string' || name.length === 0 || name.length > NAME_MAX) {
46
- return;
47
- }
48
- if (props && Object.keys(props).length > PROPS_KEYS_MAX) {
49
- return;
50
- }
51
- const config = getConfig();
52
- const ev = {
53
- name,
54
- props,
55
- release: config?.release,
56
- environment: config?.environment,
57
- route,
58
- ts: new Date().toISOString(),
59
- userId: getCurrentUserId(),
60
- };
61
- _buf.push(ev);
62
- // v2.0 W3 — auto-breadcrumb. When `init.capture.trackAutoBreadcrumb`
63
- // is `true`, push a `{ type: 'track', data: { name, props } }`
64
- // breadcrumb so the customer journey leading up to a later
65
- // `captureException` / `captureMessage` is visible in the dashboard.
66
- // Defaults off — see Config.trackAutoBreadcrumb docstring.
67
- if (config?.trackAutoBreadcrumb === true) {
68
- addInternalBreadcrumb('track', props ? { name, props } : { name });
69
- }
70
- if (_buf.length >= MAX_BUFFER) {
71
- void flushTrack();
72
- }
73
- }
74
- export async function flushTrack() {
75
- if (_buf.length === 0)
76
- return;
77
- const config = getConfig();
78
- if (!config)
79
- return;
80
- const batch = _buf;
81
- _buf = [];
82
- await sendTrackBatch(config.ingestUrl, config.token, batch);
83
- }
84
- /**
85
- * Start the 30 s flush timer. Called once from `init()`. Idempotent.
86
- * `__resetTrackForTests` is exposed for vitest / bun:test teardown.
87
- */
88
- export function startTrackTimer() {
89
- if (_timer !== null)
90
- return;
91
- _timer = setInterval(() => {
92
- void flushTrack();
93
- }, FLUSH_INTERVAL_MS);
94
- // Don't keep the process alive solely for this timer.
95
- _timer.unref?.();
96
- }
97
- export function __peekTrackBuffer() {
98
- return _buf;
99
- }
100
- export function __resetTrackForTests() {
101
- if (_timer !== null) {
102
- clearInterval(_timer);
103
- _timer = null;
104
- }
105
- _buf = [];
106
- }
107
- //# sourceMappingURL=track.js.map
package/lib/track.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"track.js","sourceRoot":"","sources":["../src/track.ts"],"names":[],"mappings":"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"}
package/lib/trail.d.ts DELETED
@@ -1,12 +0,0 @@
1
- import { TrailBuffer, type TrailStep } from '@goliapkg/sentori-core';
2
- /**
3
- * Phase 46 — record a step into the session-trail buffer. The buffer
4
- * is a fixed-size FIFO (default 30 steps); pushing past capacity
5
- * drops the oldest entry. Steps are only uploaded if
6
- * `init({ capture: { sessionTrail: true } })` is on AND a
7
- * `captureException` follows.
8
- */
9
- export declare const captureStep: (label: string, opts?: Partial<TrailStep>) => void;
10
- export declare const getTrailBuffer: () => TrailBuffer;
11
- export declare const __resetTrailForTests: () => void;
12
- //# sourceMappingURL=trail.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"trail.d.ts","sourceRoot":"","sources":["../src/trail.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAIrE;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,EAAE,OAAO,OAAO,CAAC,SAAS,CAAC,KAAG,IAMtE,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,WAAqB,CAAC;AAExD,eAAO,MAAM,oBAAoB,QAAO,IAEvC,CAAC"}