@goliapkg/sentori-react-native 1.0.0-rc.3 → 1.0.0-rc.4

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.
@@ -0,0 +1,25 @@
1
+ /**
2
+ * UTF-8-safe base64 encoder used by every JSON attachment path
3
+ * (sessionTrail, stateSnapshot, replay).
4
+ *
5
+ * Why this needs its own helper:
6
+ * • Hermes' `globalThis.btoa` (and the WHATWG spec) is **Latin-1
7
+ * only** — it throws `InvalidCharacterError` on any code point
8
+ * > 0xFF. A wireframe NDJSON that includes a TextView with
9
+ * Japanese / Chinese / em-dash text triggers it; the JS-side
10
+ * `try / catch` then swallows the throw and the replay
11
+ * attachment silently never lands.
12
+ * • Insight 2026-05-18 rc.3 verify hit exactly this on Android —
13
+ * the walker fix in rc.3 surfaced deep TextView text, which
14
+ * then collided with the unsafe `btoa(ndjson)` path that had
15
+ * worked accidentally on rc.2's shallow (text-free) snapshots.
16
+ *
17
+ * The pattern `btoa(unescape(encodeURIComponent(s)))` rewrites the
18
+ * UTF-8 byte sequence into a Latin-1-equivalent string that btoa
19
+ * can chew. `unescape` is deprecated for HTML but its byte-level
20
+ * behaviour is stable across every JS engine we ship to.
21
+ *
22
+ * Node / bun test fallback uses `Buffer` directly.
23
+ */
24
+ export declare function base64Utf8(s: string): string;
25
+ //# sourceMappingURL=base64.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../src/base64.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK5C"}
package/lib/base64.js ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * UTF-8-safe base64 encoder used by every JSON attachment path
3
+ * (sessionTrail, stateSnapshot, replay).
4
+ *
5
+ * Why this needs its own helper:
6
+ * • Hermes' `globalThis.btoa` (and the WHATWG spec) is **Latin-1
7
+ * only** — it throws `InvalidCharacterError` on any code point
8
+ * > 0xFF. A wireframe NDJSON that includes a TextView with
9
+ * Japanese / Chinese / em-dash text triggers it; the JS-side
10
+ * `try / catch` then swallows the throw and the replay
11
+ * attachment silently never lands.
12
+ * • Insight 2026-05-18 rc.3 verify hit exactly this on Android —
13
+ * the walker fix in rc.3 surfaced deep TextView text, which
14
+ * then collided with the unsafe `btoa(ndjson)` path that had
15
+ * worked accidentally on rc.2's shallow (text-free) snapshots.
16
+ *
17
+ * The pattern `btoa(unescape(encodeURIComponent(s)))` rewrites the
18
+ * UTF-8 byte sequence into a Latin-1-equivalent string that btoa
19
+ * can chew. `unescape` is deprecated for HTML but its byte-level
20
+ * behaviour is stable across every JS engine we ship to.
21
+ *
22
+ * Node / bun test fallback uses `Buffer` directly.
23
+ */
24
+ export function base64Utf8(s) {
25
+ if (typeof globalThis.btoa === 'function') {
26
+ return globalThis.btoa(unescape(encodeURIComponent(s)));
27
+ }
28
+ return Buffer.from(s, 'utf8').toString('base64');
29
+ }
30
+ //# sourceMappingURL=base64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../src/base64.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC1C,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC"}
package/lib/capture.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Tags, User } from './types';
1
+ import type { Event, Tags, User } from './types';
2
2
  export { captureStep, __resetTrailForTests } from './trail';
3
3
  export declare const __resetScreenshotBudgetForTests: () => void;
4
4
  /**
@@ -49,5 +49,24 @@ export declare const sendUserFeedback: (input: {
49
49
  issueId: null | string;
50
50
  }>;
51
51
  export declare const captureError: (error: Error, extras?: CaptureExtras) => void;
52
+ /** v0.9.6 #2 — upload the wireframe replay ring as a `replay`
53
+ * attachment. Plain NDJSON (one snapshot per line) — server may
54
+ * gzip on storage; the network upload is base64.
55
+ *
56
+ * rc.4: route through `base64Utf8` so non-Latin-1 text inside any
57
+ * walked TextView (Japanese / Chinese / em-dash etc.) doesn't blow
58
+ * up the Hermes-spec `btoa`. The pre-rc.4 inline `btoa(ndjson)` path
59
+ * threw `InvalidCharacterError` on those code points, the
60
+ * surrounding catch swallowed it silently, and the replay
61
+ * attachment never landed. Insight 2026-05-18 verify caught it
62
+ * after rc.3's walker fix surfaced deep TextView content. Dev
63
+ * logs replace the silent catch so the next failure shape is
64
+ * visible. */
65
+ declare function captureAndAttachReplay(event: Event, ndjson: string): Promise<void>;
52
66
  export declare const captureException: (error: Error, extras?: CaptureExtras) => void;
67
+ /** rc.4 — test hook. The real replay attach path is internal so we
68
+ * don't bloat the public surface, but the encoding bug Insight hit
69
+ * on 2026-05-18 needs a behaviour-level test that exercises the
70
+ * same code path captureException runs in production. */
71
+ export declare const __captureAndAttachReplayForTests: typeof captureAndAttachReplay;
53
72
  //# sourceMappingURL=capture.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAoD,IAAI,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE5F,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAgB5D,eAAO,MAAM,+BAA+B,QAAO,IAElD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,IAAI,GAAG,IAAI,KAAG,IAE3C,CAAC;AAEF,eAAO,MAAM,OAAO,QAAO,IAAI,GAAG,IAAa,CAAC;AAEhD;sEACsE;AACtE,eAAO,MAAM,gBAAgB,QAAO,MAAM,GAAG,SAAmC,CAAC;AAEjF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;qDAGiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,GAAU,OAAO;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,KAAG,OAAO,CAAC,IAAI,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,CAKxD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,SAAS,aAAa,KAAG,IAqGnE,CAAC;AAyFF,eAAO,MAAM,gBAAgB,UA9LO,KAAK,WAAW,aAAa,KAAG,IA8LxB,CAAC"}
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAA+B,KAAK,EAAgB,IAAI,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE5F,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAgB5D,eAAO,MAAM,+BAA+B,QAAO,IAElD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM,IAAI,GAAG,IAAI,KAAG,IAE3C,CAAC;AAEF,eAAO,MAAM,OAAO,QAAO,IAAI,GAAG,IAAa,CAAC;AAEhD;sEACsE;AACtE,eAAO,MAAM,gBAAgB,QAAO,MAAM,GAAG,SAAmC,CAAC;AAEjF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB;;;qDAGiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,GAAU,OAAO;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,KAAG,OAAO,CAAC,IAAI,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAA;CAAE,CAKxD,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,SAAS,aAAa,KAAG,IAiHnE,CAAC;AAEF;;;;;;;;;;;;eAYe;AACf,iBAAe,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCjF;AAwDD,eAAO,MAAM,gBAAgB,UAzNO,KAAK,WAAW,aAAa,KAAG,IAyNxB,CAAC;AAE7C;;;0DAG0D;AAC1D,eAAO,MAAM,gCAAgC,+BAAyB,CAAC"}
package/lib/capture.js CHANGED
@@ -1,9 +1,10 @@
1
1
  import { sealTrail, shouldSample } from '@goliapkg/sentori-core';
2
+ import { base64Utf8 } from './base64';
2
3
  import { __peekBreadcrumbCount, addBreadcrumb, getBreadcrumbs, } from './breadcrumbs';
3
4
  import { getBundleInfo } from './bundle-info';
4
5
  import { getConfig, isInitialized } from './config';
5
6
  import { getFeatureFlagSnapshot } from './feature-flags';
6
- import { drainReplay } from './replay';
7
+ import { drainReplay, isReplayRunning } from './replay';
7
8
  import { clearStateSnapshots, getStateSnapshots } from './state-snapshots';
8
9
  import { symbolicateErrorViaMetro } from './handlers/dev-symbolicate';
9
10
  import { captureScreenshot } from './handlers/screenshot';
@@ -104,7 +105,7 @@ export const captureError = (error, extras) => {
104
105
  // been silently dropped on the wire. Production builds gate out.
105
106
  if (typeof __DEV__ !== 'undefined' && __DEV__) {
106
107
  // eslint-disable-next-line no-console
107
- console.warn('[sentori] captureException', 'eventId=', event.id, 'breadcrumbs=', crumbs.length, 'wantScreenshot=', config.screenshotsEnabled && extras?.screenshot !== false, 'wantSessionTrail=', config.sessionTrailEnabled);
108
+ console.warn('[sentori] captureException', 'eventId=', event.id, 'breadcrumbs=', crumbs.length, 'wantScreenshot=', config.screenshotsEnabled && extras?.screenshot !== false, 'wantSessionTrail=', config.sessionTrailEnabled, 'wantReplay=', isReplayRunning());
108
109
  }
109
110
  // Phase 26 sub-B: a captured error promotes the current session to
110
111
  // `errored` so the next AppState=background ping reports unhealthy.
@@ -142,6 +143,15 @@ export const captureError = (error, extras) => {
142
143
  if (replayNdjson.length > 0) {
143
144
  await captureAndAttachReplay(event, replayNdjson);
144
145
  }
146
+ else if (typeof __DEV__ !== 'undefined' && __DEV__ && isReplayRunning()) {
147
+ // rc.4 — explicit "replay was on but ring drained empty" signal.
148
+ // Without this, "kinds=screenshot,sessionTrail" looks
149
+ // indistinguishable from `replay: off` even though the ticks
150
+ // were healthy upstream. Insight 2026-05-18 verify shape made
151
+ // this gap painful to triage.
152
+ // eslint-disable-next-line no-console
153
+ console.warn('[sentori] replay drain empty (no frames buffered at captureException)', 'eventId=', event.id);
154
+ }
145
155
  if (typeof __DEV__ !== 'undefined' && __DEV__) {
146
156
  // eslint-disable-next-line no-console
147
157
  console.warn('[sentori] enqueue', 'eventId=', event.id, 'attachments=', event.attachments?.length ?? 0, 'kinds=', (event.attachments ?? []).map((a) => a.kind).join(',') || '(none)', 'breadcrumbsAtEnqueue=', __peekBreadcrumbCount());
@@ -152,21 +162,37 @@ export const captureError = (error, extras) => {
152
162
  };
153
163
  /** v0.9.6 #2 — upload the wireframe replay ring as a `replay`
154
164
  * attachment. Plain NDJSON (one snapshot per line) — server may
155
- * gzip on storage; the network upload is base64. */
165
+ * gzip on storage; the network upload is base64.
166
+ *
167
+ * rc.4: route through `base64Utf8` so non-Latin-1 text inside any
168
+ * walked TextView (Japanese / Chinese / em-dash etc.) doesn't blow
169
+ * up the Hermes-spec `btoa`. The pre-rc.4 inline `btoa(ndjson)` path
170
+ * threw `InvalidCharacterError` on those code points, the
171
+ * surrounding catch swallowed it silently, and the replay
172
+ * attachment never landed. Insight 2026-05-18 verify caught it
173
+ * after rc.3's walker fix surfaced deep TextView content. Dev
174
+ * logs replace the silent catch so the next failure shape is
175
+ * visible. */
156
176
  async function captureAndAttachReplay(event, ndjson) {
157
177
  try {
158
- const base64 = typeof globalThis.btoa === 'function'
159
- ? globalThis.btoa(ndjson)
160
- : Buffer.from(ndjson, 'utf8').toString('base64');
178
+ const base64 = base64Utf8(ndjson);
161
179
  const meta = await uploadAttachment(event.id, 'replay', { base64, mediaType: 'application/x-ndjson' }, { source: 'js' });
162
- if (meta) {
163
- if (!event.attachments)
164
- event.attachments = [];
165
- event.attachments.push(meta);
180
+ if (!meta) {
181
+ if (typeof __DEV__ !== 'undefined' && __DEV__) {
182
+ // eslint-disable-next-line no-console
183
+ console.warn('[sentori] replay upload returned null', 'eventId=', event.id, 'ndjsonBytes=', ndjson.length);
184
+ }
185
+ return;
166
186
  }
187
+ if (!event.attachments)
188
+ event.attachments = [];
189
+ event.attachments.push(meta);
167
190
  }
168
- catch {
169
- // best-effort
191
+ catch (e) {
192
+ if (typeof __DEV__ !== 'undefined' && __DEV__) {
193
+ // eslint-disable-next-line no-console
194
+ console.warn('[sentori] replay attachment threw', 'eventId=', event.id, 'ndjsonBytes=', ndjson.length, e);
195
+ }
170
196
  }
171
197
  }
172
198
  /** v0.9.2 +S2 — upload the rolling state-snapshot ring as a
@@ -175,10 +201,7 @@ async function captureAndAttachReplay(event, ndjson) {
175
201
  async function captureAndAttachStateSnapshots(event, snapshots) {
176
202
  try {
177
203
  const payload = JSON.stringify({ snapshots });
178
- const base64 = typeof globalThis.btoa === 'function'
179
- ? globalThis.btoa(payload)
180
- : // Bun / node fallback
181
- Buffer.from(payload, 'utf8').toString('base64');
204
+ const base64 = base64Utf8(payload);
182
205
  const meta = await uploadAttachment(event.id, 'stateSnapshot', { base64, mediaType: 'application/json' }, { source: 'js' });
183
206
  if (meta) {
184
207
  if (!event.attachments)
@@ -204,11 +227,7 @@ async function captureAndAttachSessionTrail(event) {
204
227
  const payload = sealTrail(trail);
205
228
  trail.clear();
206
229
  const json = JSON.stringify(payload);
207
- // base64 the JSON for the `data:` URI multipart bridge (same
208
- // trick the screenshot path uses).
209
- const base64 = typeof globalThis.btoa === 'function'
210
- ? globalThis.btoa(unescape(encodeURIComponent(json)))
211
- : Buffer.from(json, 'utf-8').toString('base64');
230
+ const base64 = base64Utf8(json);
212
231
  const attachment = await uploadAttachment(event.id, 'sessionTrail', { base64, mediaType: 'application/json' }, { source: 'js' });
213
232
  if (!attachment) {
214
233
  addBreadcrumb({ type: 'custom', data: { reason: 'session-trail-upload-failed' } });
@@ -219,6 +238,11 @@ async function captureAndAttachSessionTrail(event) {
219
238
  event.attachments.push(attachment);
220
239
  }
221
240
  export const captureException = captureError;
241
+ /** rc.4 — test hook. The real replay attach path is internal so we
242
+ * don't bloat the public surface, but the encoding bug Insight hit
243
+ * on 2026-05-18 needs a behaviour-level test that exercises the
244
+ * same code path captureException runs in production. */
245
+ export const __captureAndAttachReplayForTests = captureAndAttachReplay;
222
246
  /** Phase 42 sub-D.08: per-session screenshot quota gate. */
223
247
  function allowScreenshot() {
224
248
  const budget = screenshotBudget();
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAkB,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAOxG,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,cAAc,EACd,qBAAqB,EAEtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5C,eAAO,MAAM,OAAO;;;;;;;;;;aAiG6P,CAAC;eAAmB,CAAC;YAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CAnEtT,CAAC;AAEF,eAAe,OAAO,CAAC;AAEvB,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,gBAAgB,EAChB,OAAO,GACR,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxG,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,aAAa,EAClB,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE1E,YAAY,EACV,KAAK,EACL,YAAY,EACZ,KAAK,EACL,UAAU,EACV,cAAc,EACd,MAAM,EACN,QAAQ,EACR,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,QAAQ,GACT,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAkB,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAOxG,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,cAAc,EACd,qBAAqB,EAEtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5C,eAAO,MAAM,OAAO;;;;;;;;;;aAiGqT,CAAC;eAAmB,CAAC;YAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CAnE9W,CAAC;AAEF,eAAe,OAAO,CAAC;AAEvB,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,gBAAgB,EAChB,OAAO,GACR,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxG,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,aAAa,EAClB,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE1E,YAAY,EACV,KAAK,EACL,YAAY,EACZ,KAAK,EACL,UAAU,EACV,cAAc,EACd,MAAM,EACN,QAAQ,EACR,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,QAAQ,GACT,MAAM,SAAS,CAAC"}
package/lib/replay.d.ts CHANGED
@@ -5,6 +5,12 @@ export type ReplayOptions = {
5
5
  };
6
6
  export declare function startReplay(opts: ReplayOptions): void;
7
7
  export declare function stopReplay(): void;
8
+ /** rc.4 — surface "is replay subsystem alive" so the captureException
9
+ * debug log can label `wantReplay` alongside `wantScreenshot` /
10
+ * `wantSessionTrail`. Insight 2026-05-18 verify flagged that the
11
+ * pre-rc.4 log line was missing `wantReplay`, leaving the failure
12
+ * shape ambiguous (config-off vs. ring-empty vs. attach-failed). */
13
+ export declare function isReplayRunning(): boolean;
8
14
  /** Drain the ring as NDJSON (one snapshot per line). Empty string
9
15
  * when the ring is empty. Also clears the ring so the next session's
10
16
  * replay starts fresh. */
@@ -1 +1 @@
1
- {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAkEA,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;IAC3B,mCAAmC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CA+CrD;AAED,wBAAgB,UAAU,IAAI,IAAI,CAUjC;AAuKD;;2BAE2B;AAC3B,wBAAgB,WAAW,IAAI,MAAM,CAMpC;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAkEA,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;IAC3B,mCAAmC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CA+CrD;AAED,wBAAgB,UAAU,IAAI,IAAI,CAUjC;AAuKD;;;;qEAIqE;AACrE,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;2BAE2B;AAC3B,wBAAgB,WAAW,IAAI,MAAM,CAMpC;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
package/lib/replay.js CHANGED
@@ -263,6 +263,14 @@ function loadNativeReplay() {
263
263
  return null;
264
264
  }
265
265
  }
266
+ /** rc.4 — surface "is replay subsystem alive" so the captureException
267
+ * debug log can label `wantReplay` alongside `wantScreenshot` /
268
+ * `wantSessionTrail`. Insight 2026-05-18 verify flagged that the
269
+ * pre-rc.4 log line was missing `wantReplay`, leaving the failure
270
+ * shape ambiguous (config-off vs. ring-empty vs. attach-failed). */
271
+ export function isReplayRunning() {
272
+ return _running;
273
+ }
266
274
  /** Drain the ring as NDJSON (one snapshot per line). Empty string
267
275
  * when the ring is empty. Also clears the ring so the next session's
268
276
  * replay starts fresh. */
package/lib/replay.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goliapkg/sentori-react-native",
3
- "version": "1.0.0-rc.3",
3
+ "version": "1.0.0-rc.4",
4
4
  "description": "Sentori SDK for React Native \u2014 JS-layer error capture, native crash handlers (iOS / Android), batched transport, fetch + react-navigation tracing.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://sentori.golia.jp",
@@ -0,0 +1,55 @@
1
+ import { describe, expect, test } from 'bun:test';
2
+
3
+ import { base64Utf8 } from '../base64';
4
+
5
+ // Bun ships a spec-compliant `globalThis.btoa` (Latin-1 only — throws
6
+ // on code points > 0xFF). That makes bun:test a faithful stand-in
7
+ // for Hermes' behaviour, which is what runs in the RN app at runtime.
8
+
9
+ describe('base64Utf8', () => {
10
+ test('ASCII round-trips identically to plain btoa', () => {
11
+ const s = '{"ts":1,"nodes":[]}';
12
+ const encoded = base64Utf8(s);
13
+ expect(encoded).toBe(globalThis.btoa(s));
14
+ expect(globalThis.atob(encoded)).toBe(s);
15
+ });
16
+
17
+ test('handles Japanese text (the rc.3 Android crash repro)', () => {
18
+ // The wireframe NDJSON the rc.3 walker produces now includes
19
+ // deep TextView content. If any of that text has code points
20
+ // > 0xFF, the *unsafe* `btoa(s)` path throws and the attachment
21
+ // silently disappears. This is the bug Insight reported.
22
+ const s = '{"kind":"text","text":"こんにちは"}';
23
+ const encoded = base64Utf8(s);
24
+ // Round-trip through the standard decoder back to the same
25
+ // UTF-8 string. atob gives back the Latin-1-encoded byte
26
+ // sequence; decodeURIComponent + escape reverses it.
27
+ const decoded = decodeURIComponent(escape(globalThis.atob(encoded)));
28
+ expect(decoded).toBe(s);
29
+ });
30
+
31
+ test('handles em-dash / smart-quote / emoji', () => {
32
+ const s = 'label — "smart" 🎉';
33
+ const encoded = base64Utf8(s);
34
+ const decoded = decodeURIComponent(escape(globalThis.atob(encoded)));
35
+ expect(decoded).toBe(s);
36
+ });
37
+
38
+ test('the *unsafe* btoa(s) path that the SDK used pre-fix throws on the same input', () => {
39
+ // Locks in why we need this helper at all. If a future
40
+ // refactor reverts to plain `btoa(s)` on UTF-8 NDJSON, the
41
+ // call below will catch it — proving silently-broken
42
+ // attachments aren't acceptable.
43
+ expect(() => globalThis.btoa('こんにちは')).toThrow();
44
+ });
45
+
46
+ test('handles a full multi-line wireframe NDJSON with JP labels', () => {
47
+ const ndjson = [
48
+ '{"ts":1700000000,"width":390,"height":844,"nodes":[{"kind":"text","x":10,"y":20,"w":100,"h":20,"text":"設定"}]}',
49
+ '{"ts":1700000001,"width":390,"height":844,"nodes":[{"kind":"text","x":10,"y":20,"w":100,"h":20,"text":"ログアウト"}]}',
50
+ ].join('\n');
51
+ const encoded = base64Utf8(ndjson);
52
+ const decoded = decodeURIComponent(escape(globalThis.atob(encoded)));
53
+ expect(decoded).toBe(ndjson);
54
+ });
55
+ });
@@ -0,0 +1,150 @@
1
+ import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test';
2
+
3
+ import { __captureAndAttachReplayForTests } from '../capture';
4
+ import { setConfig, __resetForTests as resetConfig } from '../config';
5
+ import type { Event } from '../types';
6
+
7
+ // Insight 2026-05-18 rc.3 verify: walker is healthy, ticks land
8
+ // deep wireframe JSON with TextView text, but the `replay` kind
9
+ // never reaches `event.attachments`. Root cause was the inline
10
+ // `btoa(ndjson)` upload path — spec-compliant Hermes / Bun btoa
11
+ // throws `InvalidCharacterError` on any code point > 0xFF, and the
12
+ // surrounding catch swallowed the throw silently. rc.4 routes
13
+ // through `base64Utf8`, fixing both Latin-1 and UTF-8 inputs.
14
+ //
15
+ // These tests run the actual captureAndAttachReplay function the
16
+ // captureException pipeline runs. fetch is mocked at the
17
+ // transport.ts boundary so the upload landing isn't tested here
18
+ // (covered separately in screenshot.test.ts); what we care about
19
+ // is "does event.attachments grow when the input contains
20
+ // non-Latin-1 text?".
21
+
22
+ const origFetch = globalThis.fetch;
23
+
24
+ beforeEach(() => {
25
+ setConfig({
26
+ enabled: true,
27
+ environment: 'test',
28
+ errorSampleRate: null,
29
+ ingestUrl: 'http://localhost:18080',
30
+ release: 'app@1.0.0+1',
31
+ screenshotsEnabled: true,
32
+ sessionTrailEnabled: true,
33
+ token: 'st_pk_test',
34
+ traceSampleRate: null,
35
+ });
36
+ });
37
+
38
+ afterEach(() => {
39
+ globalThis.fetch = origFetch;
40
+ resetConfig();
41
+ });
42
+
43
+ function makeEvent(): Event {
44
+ return {
45
+ id: '019eaa00-0000-7000-8000-000000000001',
46
+ timestamp: '2026-05-18T05:15:24.000Z',
47
+ kind: 'error',
48
+ platform: 'javascript',
49
+ release: 'app@1.0.0+1',
50
+ environment: 'test',
51
+ device: { os: 'android', osVersion: '36' },
52
+ app: {
53
+ version: '1.0.0',
54
+ build: '1',
55
+ framework: { name: 'react-native', version: '0.80.0' },
56
+ },
57
+ user: null,
58
+ tags: undefined,
59
+ breadcrumbs: [],
60
+ error: { type: 'Error', message: 'boom', stack: [], cause: null },
61
+ fingerprint: undefined,
62
+ };
63
+ }
64
+
65
+ function mockUploadSuccess(): { calls: { url: string; body: unknown }[] } {
66
+ const calls: { url: string; body: unknown }[] = [];
67
+ globalThis.fetch = mock(async (url: Request | string | URL, init?: RequestInit) => {
68
+ let body: unknown = undefined;
69
+ try {
70
+ body = init?.body ? JSON.parse(String(init.body)) : undefined;
71
+ } catch {
72
+ body = init?.body;
73
+ }
74
+ calls.push({ url: String(url), body });
75
+ return new Response(
76
+ JSON.stringify({
77
+ kind: 'replay',
78
+ mediaType: 'application/x-ndjson',
79
+ refId: '019e3000-7000-7000-8000-00000000aaaa',
80
+ sizeBytes: 200,
81
+ }),
82
+ { headers: { 'content-type': 'application/json' }, status: 201 },
83
+ );
84
+ }) as typeof fetch;
85
+ return { calls };
86
+ }
87
+
88
+ describe('captureAndAttachReplay — Insight rc.3 regression', () => {
89
+ test('Latin-1 ndjson attaches replay kind (control)', async () => {
90
+ const { calls } = mockUploadSuccess();
91
+ const event = makeEvent();
92
+ const ndjson =
93
+ '{"ts":1700000000,"width":390,"height":844,"nodes":[' +
94
+ '{"kind":"text","x":10,"y":20,"w":100,"h":20,"text":"Settings"}]}';
95
+ await __captureAndAttachReplayForTests(event, ndjson);
96
+ expect(calls.length).toBe(1);
97
+ expect(event.attachments?.length).toBe(1);
98
+ expect(event.attachments?.[0]?.kind).toBe('replay');
99
+ });
100
+
101
+ test('UTF-8 ndjson attaches replay kind (the rc.3 Android crash repro)', async () => {
102
+ // This is the bug: pre-rc.4 `btoa(ndjson)` threw on the
103
+ // Japanese characters below, the catch swallowed it, the
104
+ // attachment silently never landed. Post-rc.4 the helper
105
+ // handles UTF-8 and the attachment lands normally.
106
+ const { calls } = mockUploadSuccess();
107
+ const event = makeEvent();
108
+ const ndjson =
109
+ '{"ts":1700000000,"width":390,"height":844,"nodes":[' +
110
+ '{"kind":"text","x":10,"y":20,"w":100,"h":20,"text":"設定"},' +
111
+ '{"kind":"text","x":10,"y":50,"w":100,"h":20,"text":"ログアウト"}]}';
112
+ await __captureAndAttachReplayForTests(event, ndjson);
113
+ expect(calls.length).toBe(1);
114
+ expect(event.attachments?.length).toBe(1);
115
+ expect(event.attachments?.[0]?.kind).toBe('replay');
116
+ });
117
+
118
+ test('mixed em-dash / smart-quote / emoji attaches replay kind', async () => {
119
+ const { calls } = mockUploadSuccess();
120
+ const event = makeEvent();
121
+ const ndjson =
122
+ '{"ts":1,"width":390,"height":844,"nodes":[' +
123
+ '{"kind":"text","x":0,"y":0,"w":50,"h":20,"text":"hello — world"},' +
124
+ '{"kind":"text","x":0,"y":30,"w":50,"h":20,"text":"\\"quoted\\""},' +
125
+ '{"kind":"text","x":0,"y":60,"w":50,"h":20,"text":"🎉"}]}';
126
+ await __captureAndAttachReplayForTests(event, ndjson);
127
+ expect(calls.length).toBe(1);
128
+ expect(event.attachments?.length).toBe(1);
129
+ expect(event.attachments?.[0]?.kind).toBe('replay');
130
+ });
131
+
132
+ test('upload returns null → no attachment, no throw', async () => {
133
+ globalThis.fetch = (async () =>
134
+ new Response('{"error":"tooLarge"}', { status: 413 })) as typeof fetch;
135
+ const event = makeEvent();
136
+ const ndjson = '{"ts":1,"nodes":[]}';
137
+ await __captureAndAttachReplayForTests(event, ndjson);
138
+ expect(event.attachments).toBeUndefined();
139
+ });
140
+
141
+ test('fetch throws (offline) → no attachment, no throw out of the function', async () => {
142
+ globalThis.fetch = (async () => {
143
+ throw new TypeError('Network request failed');
144
+ }) as typeof fetch;
145
+ const event = makeEvent();
146
+ const ndjson = '{"ts":1,"nodes":[]}';
147
+ await __captureAndAttachReplayForTests(event, ndjson);
148
+ expect(event.attachments).toBeUndefined();
149
+ });
150
+ });
package/src/base64.ts ADDED
@@ -0,0 +1,29 @@
1
+ /**
2
+ * UTF-8-safe base64 encoder used by every JSON attachment path
3
+ * (sessionTrail, stateSnapshot, replay).
4
+ *
5
+ * Why this needs its own helper:
6
+ * • Hermes' `globalThis.btoa` (and the WHATWG spec) is **Latin-1
7
+ * only** — it throws `InvalidCharacterError` on any code point
8
+ * > 0xFF. A wireframe NDJSON that includes a TextView with
9
+ * Japanese / Chinese / em-dash text triggers it; the JS-side
10
+ * `try / catch` then swallows the throw and the replay
11
+ * attachment silently never lands.
12
+ * • Insight 2026-05-18 rc.3 verify hit exactly this on Android —
13
+ * the walker fix in rc.3 surfaced deep TextView text, which
14
+ * then collided with the unsafe `btoa(ndjson)` path that had
15
+ * worked accidentally on rc.2's shallow (text-free) snapshots.
16
+ *
17
+ * The pattern `btoa(unescape(encodeURIComponent(s)))` rewrites the
18
+ * UTF-8 byte sequence into a Latin-1-equivalent string that btoa
19
+ * can chew. `unescape` is deprecated for HTML but its byte-level
20
+ * behaviour is stable across every JS engine we ship to.
21
+ *
22
+ * Node / bun test fallback uses `Buffer` directly.
23
+ */
24
+ export function base64Utf8(s: string): string {
25
+ if (typeof globalThis.btoa === 'function') {
26
+ return globalThis.btoa(unescape(encodeURIComponent(s)));
27
+ }
28
+ return Buffer.from(s, 'utf8').toString('base64');
29
+ }
package/src/capture.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { sealTrail, shouldSample } from '@goliapkg/sentori-core';
2
2
 
3
+ import { base64Utf8 } from './base64';
3
4
  import {
4
5
  __peekBreadcrumbCount,
5
6
  addBreadcrumb,
@@ -8,7 +9,7 @@ import {
8
9
  import { getBundleInfo } from './bundle-info';
9
10
  import { getConfig, isInitialized } from './config';
10
11
  import { getFeatureFlagSnapshot } from './feature-flags';
11
- import { drainReplay } from './replay';
12
+ import { drainReplay, isReplayRunning } from './replay';
12
13
  import { clearStateSnapshots, getStateSnapshots } from './state-snapshots';
13
14
  import { symbolicateErrorViaMetro } from './handlers/dev-symbolicate';
14
15
  import { captureScreenshot } from './handlers/screenshot';
@@ -143,6 +144,7 @@ export const captureError = (error: Error, extras?: CaptureExtras): void => {
143
144
  'breadcrumbs=', crumbs.length,
144
145
  'wantScreenshot=', config.screenshotsEnabled && extras?.screenshot !== false,
145
146
  'wantSessionTrail=', config.sessionTrailEnabled,
147
+ 'wantReplay=', isReplayRunning(),
146
148
  );
147
149
  }
148
150
 
@@ -184,6 +186,17 @@ export const captureError = (error: Error, extras?: CaptureExtras): void => {
184
186
  const replayNdjson = drainReplay();
185
187
  if (replayNdjson.length > 0) {
186
188
  await captureAndAttachReplay(event, replayNdjson);
189
+ } else if (typeof __DEV__ !== 'undefined' && __DEV__ && isReplayRunning()) {
190
+ // rc.4 — explicit "replay was on but ring drained empty" signal.
191
+ // Without this, "kinds=screenshot,sessionTrail" looks
192
+ // indistinguishable from `replay: off` even though the ticks
193
+ // were healthy upstream. Insight 2026-05-18 verify shape made
194
+ // this gap painful to triage.
195
+ // eslint-disable-next-line no-console
196
+ console.warn(
197
+ '[sentori] replay drain empty (no frames buffered at captureException)',
198
+ 'eventId=', event.id,
199
+ );
187
200
  }
188
201
  if (typeof __DEV__ !== 'undefined' && __DEV__) {
189
202
  // eslint-disable-next-line no-console
@@ -202,25 +215,49 @@ export const captureError = (error: Error, extras?: CaptureExtras): void => {
202
215
 
203
216
  /** v0.9.6 #2 — upload the wireframe replay ring as a `replay`
204
217
  * attachment. Plain NDJSON (one snapshot per line) — server may
205
- * gzip on storage; the network upload is base64. */
218
+ * gzip on storage; the network upload is base64.
219
+ *
220
+ * rc.4: route through `base64Utf8` so non-Latin-1 text inside any
221
+ * walked TextView (Japanese / Chinese / em-dash etc.) doesn't blow
222
+ * up the Hermes-spec `btoa`. The pre-rc.4 inline `btoa(ndjson)` path
223
+ * threw `InvalidCharacterError` on those code points, the
224
+ * surrounding catch swallowed it silently, and the replay
225
+ * attachment never landed. Insight 2026-05-18 verify caught it
226
+ * after rc.3's walker fix surfaced deep TextView content. Dev
227
+ * logs replace the silent catch so the next failure shape is
228
+ * visible. */
206
229
  async function captureAndAttachReplay(event: Event, ndjson: string): Promise<void> {
207
230
  try {
208
- const base64 =
209
- typeof globalThis.btoa === 'function'
210
- ? globalThis.btoa(ndjson)
211
- : Buffer.from(ndjson, 'utf8').toString('base64');
231
+ const base64 = base64Utf8(ndjson);
212
232
  const meta = await uploadAttachment(
213
233
  event.id,
214
234
  'replay',
215
235
  { base64, mediaType: 'application/x-ndjson' },
216
236
  { source: 'js' },
217
237
  );
218
- if (meta) {
219
- if (!event.attachments) event.attachments = [];
220
- event.attachments.push(meta);
238
+ if (!meta) {
239
+ if (typeof __DEV__ !== 'undefined' && __DEV__) {
240
+ // eslint-disable-next-line no-console
241
+ console.warn(
242
+ '[sentori] replay upload returned null',
243
+ 'eventId=', event.id,
244
+ 'ndjsonBytes=', ndjson.length,
245
+ );
246
+ }
247
+ return;
248
+ }
249
+ if (!event.attachments) event.attachments = [];
250
+ event.attachments.push(meta);
251
+ } catch (e) {
252
+ if (typeof __DEV__ !== 'undefined' && __DEV__) {
253
+ // eslint-disable-next-line no-console
254
+ console.warn(
255
+ '[sentori] replay attachment threw',
256
+ 'eventId=', event.id,
257
+ 'ndjsonBytes=', ndjson.length,
258
+ e,
259
+ );
221
260
  }
222
- } catch {
223
- // best-effort
224
261
  }
225
262
  }
226
263
 
@@ -233,11 +270,7 @@ async function captureAndAttachStateSnapshots(
233
270
  ): Promise<void> {
234
271
  try {
235
272
  const payload = JSON.stringify({ snapshots });
236
- const base64 =
237
- typeof globalThis.btoa === 'function'
238
- ? globalThis.btoa(payload)
239
- : // Bun / node fallback
240
- Buffer.from(payload, 'utf8').toString('base64');
273
+ const base64 = base64Utf8(payload);
241
274
  const meta = await uploadAttachment(
242
275
  event.id,
243
276
  'stateSnapshot',
@@ -267,12 +300,7 @@ async function captureAndAttachSessionTrail(event: Event): Promise<void> {
267
300
  const payload = sealTrail(trail);
268
301
  trail.clear();
269
302
  const json = JSON.stringify(payload);
270
- // base64 the JSON for the `data:` URI multipart bridge (same
271
- // trick the screenshot path uses).
272
- const base64 =
273
- typeof globalThis.btoa === 'function'
274
- ? globalThis.btoa(unescape(encodeURIComponent(json)))
275
- : Buffer.from(json, 'utf-8').toString('base64');
303
+ const base64 = base64Utf8(json);
276
304
  const attachment = await uploadAttachment(
277
305
  event.id,
278
306
  'sessionTrail',
@@ -289,6 +317,12 @@ async function captureAndAttachSessionTrail(event: Event): Promise<void> {
289
317
 
290
318
  export const captureException = captureError;
291
319
 
320
+ /** rc.4 — test hook. The real replay attach path is internal so we
321
+ * don't bloat the public surface, but the encoding bug Insight hit
322
+ * on 2026-05-18 needs a behaviour-level test that exercises the
323
+ * same code path captureException runs in production. */
324
+ export const __captureAndAttachReplayForTests = captureAndAttachReplay;
325
+
292
326
  /** Phase 42 sub-D.08: per-session screenshot quota gate. */
293
327
  function allowScreenshot(): boolean {
294
328
  const budget = screenshotBudget();
package/src/replay.ts CHANGED
@@ -296,6 +296,15 @@ function loadNativeReplay(): ReplayNativeModule | null {
296
296
  }
297
297
  }
298
298
 
299
+ /** rc.4 — surface "is replay subsystem alive" so the captureException
300
+ * debug log can label `wantReplay` alongside `wantScreenshot` /
301
+ * `wantSessionTrail`. Insight 2026-05-18 verify flagged that the
302
+ * pre-rc.4 log line was missing `wantReplay`, leaving the failure
303
+ * shape ambiguous (config-off vs. ring-empty vs. attach-failed). */
304
+ export function isReplayRunning(): boolean {
305
+ return _running;
306
+ }
307
+
299
308
  /** Drain the ring as NDJSON (one snapshot per line). Empty string
300
309
  * when the ring is empty. Also clears the ring so the next session's
301
310
  * replay starts fresh. */