@goliapkg/sentori-react-native 1.0.0 → 1.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.
- package/lib/capture.d.ts +34 -0
- package/lib/capture.d.ts.map +1 -1
- package/lib/capture.js +87 -2
- package/lib/capture.js.map +1 -1
- package/lib/config.d.ts +3 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js.map +1 -1
- package/lib/index.d.ts +15 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +15 -4
- package/lib/index.js.map +1 -1
- package/lib/init.d.ts +3 -0
- package/lib/init.d.ts.map +1 -1
- package/lib/init.js +1 -0
- package/lib/init.js.map +1 -1
- package/lib/lifecycle.d.ts +28 -0
- package/lib/lifecycle.d.ts.map +1 -0
- package/lib/lifecycle.js +73 -0
- package/lib/lifecycle.js.map +1 -0
- package/lib/metrics.d.ts +18 -1
- package/lib/metrics.d.ts.map +1 -1
- package/lib/metrics.js +19 -2
- package/lib/metrics.js.map +1 -1
- package/package.json +3 -3
- package/src/capture.ts +103 -3
- package/src/config.ts +3 -0
- package/src/index.ts +35 -2
- package/src/init.ts +4 -0
- package/src/lifecycle.ts +76 -0
- package/src/metrics.ts +19 -1
package/lib/capture.d.ts
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
|
+
import { type CaptureMessageOptions } from '@goliapkg/sentori-core';
|
|
1
2
|
import type { Event, Tags, User } from './types';
|
|
2
3
|
export { captureStep, __resetTrailForTests } from './trail';
|
|
4
|
+
/**
|
|
5
|
+
* v2.0 — set a single scope tag merged onto every subsequent
|
|
6
|
+
* capture. Per-call `extras.tags` / `opts.tags` win over scope tags.
|
|
7
|
+
*
|
|
8
|
+
* sentori.setTag('rollout', 'dark-mode-v2');
|
|
9
|
+
* sentori.captureException(err); // event.tags carries rollout
|
|
10
|
+
*/
|
|
11
|
+
export declare const setTag: (key: string, value: string) => void;
|
|
12
|
+
/**
|
|
13
|
+
* v2.0 — bulk variant of setTag. Existing tags are merged with
|
|
14
|
+
* the input record (`Object.assign` style).
|
|
15
|
+
*/
|
|
16
|
+
export declare const setTags: (record: Record<string, string>) => void;
|
|
17
|
+
export declare const __resetScopeForTests: () => void;
|
|
3
18
|
export declare const __resetScreenshotBudgetForTests: () => void;
|
|
4
19
|
/**
|
|
5
20
|
* Attach a stable user identifier to events captured after this call.
|
|
@@ -64,6 +79,25 @@ export declare const captureError: (error: Error, extras?: CaptureExtras) => voi
|
|
|
64
79
|
* visible. */
|
|
65
80
|
declare function captureAndAttachReplay(event: Event, ndjson: string): Promise<void>;
|
|
66
81
|
export declare const captureException: (error: Error, extras?: CaptureExtras) => void;
|
|
82
|
+
/**
|
|
83
|
+
* Manually report an issue without an Error instance.
|
|
84
|
+
*
|
|
85
|
+
* Routes to the dashboard Issues module — distinct from `track`
|
|
86
|
+
* (analytics) and `recordMetric` (numeric). Use for "operator should
|
|
87
|
+
* look at this" signals: a fallback that fired, an unexpected state,
|
|
88
|
+
* a feature flag rollout that crossed a threshold.
|
|
89
|
+
*
|
|
90
|
+
* sentori.captureMessage('Payment provider returned 500, used fallback')
|
|
91
|
+
* sentori.captureMessage('Detected impossible state in session reducer', {
|
|
92
|
+
* level: 'error',
|
|
93
|
+
* tags: { reducer: 'session' },
|
|
94
|
+
* })
|
|
95
|
+
*
|
|
96
|
+
* Wrapped in `safeFn` per the NEVER rule — any internal failure is
|
|
97
|
+
* swallowed and (optionally) self-reported; the host app never sees
|
|
98
|
+
* a thrown error.
|
|
99
|
+
*/
|
|
100
|
+
export declare const captureMessage: (message: string, opts?: CaptureMessageOptions | undefined) => void | undefined;
|
|
67
101
|
/** rc.4 — test hook. The real replay attach path is internal so we
|
|
68
102
|
* don't bloat the public surface, but the encoding bug Insight hit
|
|
69
103
|
* on 2026-05-18 needs a behaviour-level test that exercises the
|
package/lib/capture.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAK3B,MAAM,wBAAwB,CAAC;AAuBhC,OAAO,KAAK,EAA+B,KAAK,EAAgB,IAAI,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE5F,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAW5D;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,IAEnD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,IAExD,CAAC;AAQF,eAAO,MAAM,oBAAoB,QAAO,IAGvC,CAAC;AAYF,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;AAI7C;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc,iFAqC1B,CAAC;AAEF;;;0DAG0D;AAC1D,eAAO,MAAM,gCAAgC,+BAAyB,CAAC"}
|
package/lib/capture.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { sealTrail, shouldSample } from '@goliapkg/sentori-core';
|
|
1
|
+
import { safeFn, sealTrail, shouldSample, } from '@goliapkg/sentori-core';
|
|
2
2
|
import { base64Utf8 } from './base64';
|
|
3
3
|
import { __peekBreadcrumbCount, addBreadcrumb, getBreadcrumbs, } from './breadcrumbs';
|
|
4
4
|
import { getBundleInfo } from './bundle-info';
|
|
@@ -18,6 +18,38 @@ import { getCachedNetworkType } from './netinfo';
|
|
|
18
18
|
import { getRecentNativeException } from './native';
|
|
19
19
|
export { captureStep, __resetTrailForTests } from './trail';
|
|
20
20
|
let _user = null;
|
|
21
|
+
/** v2.0 — global scope tags merged onto every captured event
|
|
22
|
+
* (captureException + captureMessage). Set via `setTag` /
|
|
23
|
+
* `setTags`; reset by passing `{}`. Per-call tags win on conflict. */
|
|
24
|
+
let _scopeTags = {};
|
|
25
|
+
/**
|
|
26
|
+
* v2.0 — set a single scope tag merged onto every subsequent
|
|
27
|
+
* capture. Per-call `extras.tags` / `opts.tags` win over scope tags.
|
|
28
|
+
*
|
|
29
|
+
* sentori.setTag('rollout', 'dark-mode-v2');
|
|
30
|
+
* sentori.captureException(err); // event.tags carries rollout
|
|
31
|
+
*/
|
|
32
|
+
export const setTag = (key, value) => {
|
|
33
|
+
_scopeTags[key] = String(value);
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* v2.0 — bulk variant of setTag. Existing tags are merged with
|
|
37
|
+
* the input record (`Object.assign` style).
|
|
38
|
+
*/
|
|
39
|
+
export const setTags = (record) => {
|
|
40
|
+
for (const [k, v] of Object.entries(record))
|
|
41
|
+
_scopeTags[k] = String(v);
|
|
42
|
+
};
|
|
43
|
+
/** Internal — merge global scope tags into a per-call tag record. */
|
|
44
|
+
function mergeScopeTags(perCall) {
|
|
45
|
+
if (Object.keys(_scopeTags).length === 0)
|
|
46
|
+
return perCall;
|
|
47
|
+
return { ..._scopeTags, ...(perCall ?? {}) };
|
|
48
|
+
}
|
|
49
|
+
export const __resetScopeForTests = () => {
|
|
50
|
+
_user = null;
|
|
51
|
+
_scopeTags = {};
|
|
52
|
+
};
|
|
21
53
|
// Phase 42 sub-D.08 — per-session screenshot quota. Defaults: 10 in
|
|
22
54
|
// prod, unlimited (-1 sentinel) in dev so test loops + react-error-
|
|
23
55
|
// overlay reruns don't run out partway through the session.
|
|
@@ -92,7 +124,7 @@ export const captureError = (error, extras) => {
|
|
|
92
124
|
device: collectDevice(),
|
|
93
125
|
app: collectApp(config.release),
|
|
94
126
|
user: extras?.user ?? _user,
|
|
95
|
-
tags: extras?.tags,
|
|
127
|
+
tags: mergeScopeTags(extras?.tags),
|
|
96
128
|
...(flags ? { flags } : {}),
|
|
97
129
|
...(bundle ? { bundle } : {}),
|
|
98
130
|
breadcrumbs: crumbs,
|
|
@@ -239,6 +271,59 @@ async function captureAndAttachSessionTrail(event) {
|
|
|
239
271
|
event.attachments.push(attachment);
|
|
240
272
|
}
|
|
241
273
|
export const captureException = captureError;
|
|
274
|
+
const DEFAULT_MESSAGE_LEVEL = 'info';
|
|
275
|
+
/**
|
|
276
|
+
* Manually report an issue without an Error instance.
|
|
277
|
+
*
|
|
278
|
+
* Routes to the dashboard Issues module — distinct from `track`
|
|
279
|
+
* (analytics) and `recordMetric` (numeric). Use for "operator should
|
|
280
|
+
* look at this" signals: a fallback that fired, an unexpected state,
|
|
281
|
+
* a feature flag rollout that crossed a threshold.
|
|
282
|
+
*
|
|
283
|
+
* sentori.captureMessage('Payment provider returned 500, used fallback')
|
|
284
|
+
* sentori.captureMessage('Detected impossible state in session reducer', {
|
|
285
|
+
* level: 'error',
|
|
286
|
+
* tags: { reducer: 'session' },
|
|
287
|
+
* })
|
|
288
|
+
*
|
|
289
|
+
* Wrapped in `safeFn` per the NEVER rule — any internal failure is
|
|
290
|
+
* swallowed and (optionally) self-reported; the host app never sees
|
|
291
|
+
* a thrown error.
|
|
292
|
+
*/
|
|
293
|
+
export const captureMessage = safeFn('captureMessage', (message, opts = {}) => {
|
|
294
|
+
if (!isInitialized())
|
|
295
|
+
return;
|
|
296
|
+
if (typeof message !== 'string' || message.length === 0)
|
|
297
|
+
return;
|
|
298
|
+
const config = getConfig();
|
|
299
|
+
if (!config)
|
|
300
|
+
return;
|
|
301
|
+
if (!shouldSample(config.messageSampleRate)) {
|
|
302
|
+
addBreadcrumb({ type: 'custom', data: { reason: 'sampled-out', kind: 'message' } });
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
const flags = getFeatureFlagSnapshot();
|
|
306
|
+
const bundle = getBundleInfo();
|
|
307
|
+
const crumbs = opts.breadcrumbs ?? getBreadcrumbs();
|
|
308
|
+
const event = {
|
|
309
|
+
id: uuidV7(),
|
|
310
|
+
timestamp: new Date().toISOString(),
|
|
311
|
+
kind: 'message',
|
|
312
|
+
level: opts.level ?? DEFAULT_MESSAGE_LEVEL,
|
|
313
|
+
message,
|
|
314
|
+
platform: 'javascript',
|
|
315
|
+
release: config.release,
|
|
316
|
+
environment: config.environment,
|
|
317
|
+
device: collectDevice(),
|
|
318
|
+
app: collectApp(config.release),
|
|
319
|
+
user: opts.user ?? _user,
|
|
320
|
+
tags: mergeScopeTags(opts.tags),
|
|
321
|
+
...(flags ? { flags } : {}),
|
|
322
|
+
...(bundle ? { bundle } : {}),
|
|
323
|
+
breadcrumbs: crumbs,
|
|
324
|
+
};
|
|
325
|
+
enqueue(event);
|
|
326
|
+
});
|
|
242
327
|
/** rc.4 — test hook. The real replay attach path is internal so we
|
|
243
328
|
* don't bloat the public surface, but the encoding bug Insight hit
|
|
244
329
|
* on 2026-05-18 needs a behaviour-level test that exercises the
|
package/lib/capture.js.map
CHANGED
|
@@ -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":"AAAA,OAAO,EAGL,MAAM,EACN,SAAS,EACT,YAAY,GACb,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAI5D,IAAI,KAAK,GAAgB,IAAI,CAAC;AAE9B;;uEAEuE;AACvE,IAAI,UAAU,GAA2B,EAAE,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,KAAa,EAAQ,EAAE;IACzD,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAA8B,EAAQ,EAAE;IAC9D,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,qEAAqE;AACrE,SAAS,cAAc,CAAC,OAAyB;IAC/C,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACzD,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAS,EAAE;IAC7C,KAAK,GAAG,IAAI,CAAC;IACb,UAAU,GAAG,EAAE,CAAC;AAClB,CAAC,CAAC;AAEF,oEAAoE;AACpE,oEAAoE;AACpE,4DAA4D;AAC5D,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAE1B,SAAS,gBAAgB;IACvB,OAAO,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAS,EAAE;IACxD,iBAAiB,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAiB,EAAQ,EAAE;IACjD,KAAK,GAAG,IAAI,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,GAAgB,EAAE,CAAC,KAAK,CAAC;AAEhD;sEACsE;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAuB,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,SAAS,CAAC;AAajF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,KAMtC,EAA0D,EAAE;IAC3D,IAAI,CAAC,aAAa,EAAE;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,MAAsB,EAAQ,EAAE;IACzE,IAAI,CAAC,aAAa,EAAE;QAAE,OAAO;IAC7B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,gEAAgE;IAChE,8DAA8D;IAC9D,qEAAqE;IACrE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;QAC1C,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAClF,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,KAAK,GAAU;QACnB,EAAE,EAAE,MAAM,EAAE;QACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,MAAM,EAAE,aAAa,EAAE;QACvB,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,KAAK;QAC3B,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC;QAClC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,WAAW,EAAE,MAAM;QACnB,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;QAC3B,WAAW,EAAE,MAAM,EAAE,WAAW;KACjC,CAAC;IACF,iEAAiE;IACjE,mEAAmE;IACnE,kEAAkE;IAClE,mEAAmE;IACnE,iEAAiE;IACjE,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,CAAC;QAC9C,sCAAsC;QACtC,OAAO,CAAC,IAAI,CACV,4BAA4B,EAC5B,UAAU,EAAE,KAAK,CAAC,EAAE,EACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAC7B,iBAAiB,EAAE,MAAM,CAAC,kBAAkB,IAAI,MAAM,EAAE,UAAU,KAAK,KAAK,EAC5E,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,EAC/C,aAAa,EAAE,eAAe,EAAE,CACjC,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,oEAAoE;IACpE,kBAAkB,EAAE,CAAC;IAErB,8DAA8D;IAC9D,gEAAgE;IAChE,yDAAyD;IACzD,MAAM,cAAc,GAClB,MAAM,CAAC,kBAAkB,IAAI,MAAM,EAAE,UAAU,KAAK,KAAK,IAAI,eAAe,EAAE,CAAC;IAEjF,gEAAgE;IAChE,iEAAiE;IACjE,kEAAkE;IAClE,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,KAAK,IAAmB,EAAE;QACzC,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,CAAC;YAC9C,MAAM,wBAAwB,CAAC,KAAK,CAAC,KAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,0BAA0B,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,mBAAmB,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,4BAA4B,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,kEAAkE;QAClE,iEAAiE;QACjE,oCAAoC;QACpC,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;QAC3C,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,8BAA8B,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YAC5D,mBAAmB,EAAE,CAAC;QACxB,CAAC;QACD,kEAAkE;QAClE,+DAA+D;QAC/D,MAAM,YAAY,GAAG,WAAW,EAAE,CAAC;QACnC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,IAAI,eAAe,EAAE,EAAE,CAAC;YAC1E,iEAAiE;YACjE,sDAAsD;YACtD,6DAA6D;YAC7D,8DAA8D;YAC9D,8BAA8B;YAC9B,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACV,uEAAuE,EACvE,UAAU,EAAE,KAAK,CAAC,EAAE,CACrB,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,CAAC;YAC9C,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACV,mBAAmB,EACnB,UAAU,EAAE,KAAK,CAAC,EAAE,EACpB,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,EAC9C,QAAQ,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,EAC5E,uBAAuB,EAAE,qBAAqB,EAAE,CACjD,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC,CAAC;IACF,KAAK,QAAQ,EAAE,CAAC;AAClB,CAAC,CAAC;AAEF;;;;;;;;;;;;eAYe;AACf,KAAK,UAAU,sBAAsB,CAAC,KAAY,EAAE,MAAc;IAChE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC,KAAK,CAAC,EAAE,EACR,QAAQ,EACR,EAAE,MAAM,EAAE,SAAS,EAAE,sBAAsB,EAAE,EAC7C,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAC;QACF,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,CAAC;gBAC9C,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CACV,uCAAuC,EACvC,UAAU,EAAE,KAAK,CAAC,EAAE,EACpB,cAAc,EAAE,MAAM,CAAC,MAAM,CAC9B,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,WAAW;YAAE,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;QAC/C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,CAAC;YAC9C,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACV,mCAAmC,EACnC,UAAU,EAAE,KAAK,CAAC,EAAE,EACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAC7B,CAAC,CACF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;6DAE6D;AAC7D,KAAK,UAAU,8BAA8B,CAC3C,KAAY,EACZ,SAA+C;IAE/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC,KAAK,CAAC,EAAE,EACR,eAAe,EACf,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,EACzC,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAC;QACF,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,KAAK,CAAC,WAAW;gBAAE,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;YAC/C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,4BAA4B,CAAC,KAAY;IACtD,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACjC,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,MAAM,gBAAgB,CACvC,KAAK,CAAC,EAAE,EACR,cAAc,EACd,EAAE,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,EACzC,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAC;IACF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,6BAA6B,EAAE,EAAE,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,WAAW;QAAE,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;IAC/C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAE7C,MAAM,qBAAqB,GAAiB,MAAM,CAAC;AAEnD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAClC,gBAAgB,EAChB,CAAC,OAAe,EAAE,OAA8B,EAAE,EAAQ,EAAE;IAC1D,IAAI,CAAC,aAAa,EAAE;QAAE,OAAO;IAC7B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAChE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC5C,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QACpF,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,IAAI,cAAc,EAAE,CAAC;IAEpD,MAAM,KAAK,GAAU;QACnB,EAAE,EAAE,MAAM,EAAE;QACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,qBAAqB;QAC1C,OAAO;QACP,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,MAAM,EAAE,aAAa,EAAE;QACvB,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK;QACxB,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,WAAW,EAAE,MAAM;KACpB,CAAC;IAEF,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC,CACF,CAAC;AAEF;;;0DAG0D;AAC1D,MAAM,CAAC,MAAM,gCAAgC,GAAG,sBAAsB,CAAC;AAEvE,4DAA4D;AAC5D,SAAS,eAAe;IACtB,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,iBAAiB;IAC9C,IAAI,iBAAiB,IAAI,MAAM;QAAE,OAAO,KAAK,CAAC;IAC9C,iBAAiB,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,0BAA0B,CAAC,KAAY;IACpD,IAAI,IAAI,GAAkD,IAAI,CAAC;IAC/D,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,iBAAiB,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,CAAC;YAC9C,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,CAAC;YAC9C,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACV,iFAAiF,EACjF,UAAU,EAAE,KAAK,CAAC,EAAE,CACrB,CAAC;QACJ,CAAC;QACD,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,2BAA2B,EAAE,EAAE,CAAC,CAAC;QACjF,OAAO;IACT,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,CAAC;QAC9C,sCAAsC;QACtC,OAAO,CAAC,IAAI,CACV,yCAAyC,EACzC,UAAU,EAAE,KAAK,CAAC,EAAE,EACpB,YAAY,EAAE,IAAI,CAAC,SAAS,EAC5B,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CACnC,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAA0B,MAAM,gBAAgB,CAC9D,KAAK,CAAC,EAAE,EACR,YAAY,EACZ,IAAI,EACJ,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAC;IACF,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,CAAC;YAC9C,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,aAAa,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,0BAA0B,EAAE,EAAE,CAAC,CAAC;QAChF,OAAO;IACT,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,WAAW;QAAE,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;IAC/C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,aAAa,GAAG,CAAC,KAAY,EAAgB,EAAE;IACnD,MAAM,QAAQ,GAAI,KAA6B,CAAC,KAAK,CAAC;IACtD,IAAI,KAAK,GAAwB,IAAI,CAAC;IACtC,IAAI,QAAQ,YAAY,KAAK,EAAE,CAAC;QAC9B,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,kEAAkE;IAClE,kEAAkE;IAClE,kEAAkE;IAClE,mEAAmE;IACnE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,wBAAwB,EAAE,CAAC;QAC1C,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;YACnC,KAAK,GAAG;gBACN,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,iBAAiB;gBACtC,OAAO,EAAE,MAAM,CAAC,MAAM;gBACtB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBACpC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE;oBACrB,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,KAAK;oBACZ,IAAI,EAAE,CAAC,GAAG,CAAC;iBACZ,CAAC,CAAC;gBACH,KAAK,EAAE,IAAI;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,OAAO;QAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9B,KAAK;KACN,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,GAAW,EAAE;IACjC,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,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAQhC,CAAC;QACF,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,GAAG,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,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,gEAAgE;QAChE,6DAA6D;QAC7D,+DAA+D;QAC/D,+DAA+D;QAC/D,+DAA+D;QAC/D,8DAA8D;QAC9D,yDAAyD;QACzD,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,qCAAqC;IACvC,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,4DAA4D;IAC5D,6DAA6D;IAC7D,kEAAkE;IAClE,+DAA+D;IAC/D,yCAAyC;IACzC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,IAAI,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,OAAe,EAAO,EAAE;IAC1C,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,SAAS,GAAI,OAAO,CAAC,2BAA2B,CAAyB,CAAC,OAAO,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IAED,OAAO;QACL,OAAO;QACP,KAAK;QACL,SAAS,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE;KACxD,CAAC;AACJ,CAAC,CAAC"}
|
package/lib/config.d.ts
CHANGED
|
@@ -10,6 +10,9 @@ export type Config = {
|
|
|
10
10
|
* `null` = keep everything (default). */
|
|
11
11
|
errorSampleRate: null | number;
|
|
12
12
|
traceSampleRate: null | number;
|
|
13
|
+
/** v2.0 — sampling rate for `kind: 'message'` events emitted via
|
|
14
|
+
* `captureMessage`. `null` = keep all (default). */
|
|
15
|
+
messageSampleRate: null | number;
|
|
13
16
|
/** Phase 46: when true, every `captureException` seals the
|
|
14
17
|
* session-trail buffer and uploads it as a `sessionTrail`
|
|
15
18
|
* attachment. Defaults to false. */
|
package/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,kBAAkB,EAAE,OAAO,CAAC;IAC5B;8CAC0C;IAC1C,eAAe,EAAE,IAAI,GAAG,MAAM,CAAC;IAC/B,eAAe,EAAE,IAAI,GAAG,MAAM,CAAC;IAC/B;;yCAEqC;IACrC,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAIF,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,IAE1C,CAAC;AAEF,eAAO,MAAM,SAAS,QAAO,MAAM,GAAG,IAAe,CAAC;AAEtD,eAAO,MAAM,aAAa,QAAO,OAA2B,CAAC;AAE7D,eAAO,MAAM,eAAe,QAAO,IAElC,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,kBAAkB,EAAE,OAAO,CAAC;IAC5B;8CAC0C;IAC1C,eAAe,EAAE,IAAI,GAAG,MAAM,CAAC;IAC/B,eAAe,EAAE,IAAI,GAAG,MAAM,CAAC;IAC/B;yDACqD;IACrD,iBAAiB,EAAE,IAAI,GAAG,MAAM,CAAC;IACjC;;yCAEqC;IACrC,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAIF,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,IAE1C,CAAC;AAEF,eAAO,MAAM,SAAS,QAAO,MAAM,GAAG,IAAe,CAAC;AAEtD,eAAO,MAAM,aAAa,QAAO,OAA2B,CAAC;AAE7D,eAAO,MAAM,eAAe,QAAO,IAElC,CAAC"}
|
package/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAqBA,IAAI,OAAO,GAAkB,IAAI,CAAC;AAElC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAc,EAAQ,EAAE;IAChD,OAAO,GAAG,MAAM,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,GAAkB,EAAE,CAAC,OAAO,CAAC;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAY,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC;AAE7D,MAAM,CAAC,MAAM,eAAe,GAAG,GAAS,EAAE;IACxC,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC,CAAC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -4,9 +4,10 @@ import { clearMaskQuery, registerMaskQuery } from './mask';
|
|
|
4
4
|
import { measureFn } from './measure';
|
|
5
5
|
import { getColdStartMs, markTimeToFullDisplay } from './mobile-vitals';
|
|
6
6
|
import { bindState, recordState, unbindState } from './state-snapshots';
|
|
7
|
-
import { startMoment } from '@goliapkg/sentori-core';
|
|
7
|
+
import { startMoment, startSpan, startTrace, withScopedSpan } from '@goliapkg/sentori-core';
|
|
8
8
|
import { getInstallId } from './install-id';
|
|
9
9
|
import { flushMetrics, recordMetric } from './metrics';
|
|
10
|
+
import { close, flush } from './lifecycle';
|
|
10
11
|
import { linkFederatedIdentity, reportPinMismatch, reportSecurity } from './report-security';
|
|
11
12
|
import { flushTrack, track } from './track';
|
|
12
13
|
import { queryTrustScore } from './trust-score';
|
|
@@ -16,8 +17,11 @@ export declare const sentori: {
|
|
|
16
17
|
addBreadcrumb: (input: import("./breadcrumbs").AddBreadcrumbInput) => void;
|
|
17
18
|
setUser: (user: import("@goliapkg/sentori-core").User | null) => void;
|
|
18
19
|
getUser: () => import("@goliapkg/sentori-core").User | null;
|
|
20
|
+
setTag: (key: string, value: string) => void;
|
|
21
|
+
setTags: (record: Record<string, string>) => void;
|
|
19
22
|
captureError: (error: Error, extras?: import("./capture").CaptureExtras) => void;
|
|
20
23
|
captureException: (error: Error, extras?: import("./capture").CaptureExtras) => void;
|
|
24
|
+
captureMessage: (message: string, opts?: import("@goliapkg/sentori-core").CaptureMessageOptions | undefined) => void | undefined;
|
|
21
25
|
captureStep: (label: string, opts?: Partial<import("@goliapkg/sentori-core").TrailStep>) => void;
|
|
22
26
|
sendUserFeedback: (input: {
|
|
23
27
|
body: string;
|
|
@@ -40,6 +44,9 @@ export declare const sentori: {
|
|
|
40
44
|
linkFederatedIdentity: typeof linkFederatedIdentity;
|
|
41
45
|
measureFn: typeof measureFn;
|
|
42
46
|
startMoment: typeof startMoment;
|
|
47
|
+
startSpan: typeof startSpan;
|
|
48
|
+
startTrace: typeof startTrace;
|
|
49
|
+
withScopedSpan: typeof withScopedSpan;
|
|
43
50
|
bindState: typeof bindState;
|
|
44
51
|
recordState: typeof recordState;
|
|
45
52
|
unbindState: typeof unbindState;
|
|
@@ -57,11 +64,16 @@ export declare const sentori: {
|
|
|
57
64
|
startSession: () => void;
|
|
58
65
|
endSession: (status?: "exited") => void;
|
|
59
66
|
markSessionCrashed: () => void;
|
|
67
|
+
flush: typeof flush;
|
|
68
|
+
close: typeof close;
|
|
60
69
|
};
|
|
61
70
|
export default sentori;
|
|
62
71
|
export { init, init as initSentori } from './init';
|
|
63
72
|
export { addBreadcrumb } from './breadcrumbs';
|
|
64
|
-
export { captureError, captureException, captureStep, getUser, sendUserFeedback, setUser, } from './capture';
|
|
73
|
+
export { captureError, captureException, captureMessage, captureStep, getUser, sendUserFeedback, setTag, setTags, setUser, } from './capture';
|
|
74
|
+
export { startMoment, startSpan, startTrace, withScopedSpan, type SpanContextLike, type StartSpanOptions, } from '@goliapkg/sentori-core';
|
|
75
|
+
export { close, flush } from './lifecycle';
|
|
76
|
+
export type { CaptureMessageOptions, MessageLevel, } from '@goliapkg/sentori-core';
|
|
65
77
|
export { ErrorBoundary } from './error-boundary';
|
|
66
78
|
export { FeedbackButton, type FeedbackButtonHandle, type FeedbackButtonProps } from './feedback-widget';
|
|
67
79
|
export { clearAllFeatureFlags, clearFeatureFlag, getFeatureFlags, setFeatureFlag, } from './feature-flags';
|
|
@@ -73,7 +85,7 @@ export { linkFederatedIdentity, reportPinMismatch, reportSecurity, type Security
|
|
|
73
85
|
export { queryTrustScore, type TrustScore, type TrustSignal, } from './trust-score';
|
|
74
86
|
export { measureFn } from './measure';
|
|
75
87
|
export { getColdStartMs, markTimeToFullDisplay, type TimeToFullDisplayHandle, } from './mobile-vitals';
|
|
76
|
-
export { MomentHandle, type MomentProperties
|
|
88
|
+
export { MomentHandle, type MomentProperties } from '@goliapkg/sentori-core';
|
|
77
89
|
export { bindState, recordState, type StateSnapshot, unbindState, } from './state-snapshots';
|
|
78
90
|
export { RageTapCapture } from './rage-tap';
|
|
79
91
|
export { probeNativeScreenshot, probeNativeWireframe, startAnrWatchdog, stopAnrWatchdog, triggerNativeCrash, } from './native';
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,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,EACL,WAAW,EACX,SAAS,EACT,UAAU,EACV,cAAc,EACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5C,eAAO,MAAM,OAAO;;;;;;;;;;;;;aA6IoX,CAAC;eAAmB,CAAC;YAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAhG7a,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,cAAc,EACd,WAAW,EACX,OAAO,EACP,gBAAgB,EAChB,MAAM,EACN,OAAO,EACP,OAAO,GACR,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,WAAW,EACX,SAAS,EACT,UAAU,EACV,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EACV,qBAAqB,EACrB,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,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,UAAU,EAAE,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,KAAK,UAAU,EACf,KAAK,WAAW,GACjB,MAAM,eAAe,CAAC;AACvB,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,MAAM,wBAAwB,CAAC;AAC7E,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/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { init } from './init';
|
|
2
2
|
import { addBreadcrumb } from './breadcrumbs';
|
|
3
|
-
import { captureError, captureException, captureStep, getUser, sendUserFeedback, setUser, } from './capture';
|
|
3
|
+
import { captureError, captureException, captureMessage, captureStep, getUser, sendUserFeedback, setTag, setTags, setUser, } from './capture';
|
|
4
4
|
import { ErrorBoundary } from './error-boundary';
|
|
5
5
|
import { FeedbackButton } from './feedback-widget';
|
|
6
6
|
import { clearAllFeatureFlags, clearFeatureFlag, getFeatureFlags, setFeatureFlag, } from './feature-flags';
|
|
@@ -8,9 +8,10 @@ import { clearMaskQuery, registerMaskQuery } from './mask';
|
|
|
8
8
|
import { measureFn } from './measure';
|
|
9
9
|
import { getColdStartMs, markTimeToFullDisplay, } from './mobile-vitals';
|
|
10
10
|
import { bindState, recordState, unbindState } from './state-snapshots';
|
|
11
|
-
import { startMoment } from '@goliapkg/sentori-core';
|
|
11
|
+
import { startMoment, startSpan, startTrace, withScopedSpan, } from '@goliapkg/sentori-core';
|
|
12
12
|
import { getInstallId } from './install-id';
|
|
13
13
|
import { flushMetrics, recordMetric } from './metrics';
|
|
14
|
+
import { close, flush } from './lifecycle';
|
|
14
15
|
import { linkFederatedIdentity, reportPinMismatch, reportSecurity } from './report-security';
|
|
15
16
|
import { flushTrack, track } from './track';
|
|
16
17
|
import { queryTrustScore } from './trust-score';
|
|
@@ -21,8 +22,11 @@ export const sentori = {
|
|
|
21
22
|
addBreadcrumb,
|
|
22
23
|
setUser,
|
|
23
24
|
getUser,
|
|
25
|
+
setTag,
|
|
26
|
+
setTags,
|
|
24
27
|
captureError,
|
|
25
28
|
captureException,
|
|
29
|
+
captureMessage,
|
|
26
30
|
captureStep,
|
|
27
31
|
sendUserFeedback,
|
|
28
32
|
recordMetric,
|
|
@@ -36,6 +40,9 @@ export const sentori = {
|
|
|
36
40
|
linkFederatedIdentity,
|
|
37
41
|
measureFn,
|
|
38
42
|
startMoment,
|
|
43
|
+
startSpan,
|
|
44
|
+
startTrace,
|
|
45
|
+
withScopedSpan,
|
|
39
46
|
bindState,
|
|
40
47
|
recordState,
|
|
41
48
|
unbindState,
|
|
@@ -53,11 +60,15 @@ export const sentori = {
|
|
|
53
60
|
startSession,
|
|
54
61
|
endSession,
|
|
55
62
|
markSessionCrashed,
|
|
63
|
+
flush,
|
|
64
|
+
close,
|
|
56
65
|
};
|
|
57
66
|
export default sentori;
|
|
58
67
|
export { init, init as initSentori } from './init';
|
|
59
68
|
export { addBreadcrumb } from './breadcrumbs';
|
|
60
|
-
export { captureError, captureException, captureStep, getUser, sendUserFeedback, setUser, } from './capture';
|
|
69
|
+
export { captureError, captureException, captureMessage, captureStep, getUser, sendUserFeedback, setTag, setTags, setUser, } from './capture';
|
|
70
|
+
export { startMoment, startSpan, startTrace, withScopedSpan, } from '@goliapkg/sentori-core';
|
|
71
|
+
export { close, flush } from './lifecycle';
|
|
61
72
|
export { ErrorBoundary } from './error-boundary';
|
|
62
73
|
export { FeedbackButton } from './feedback-widget';
|
|
63
74
|
export { clearAllFeatureFlags, clearFeatureFlag, getFeatureFlags, setFeatureFlag, } from './feature-flags';
|
|
@@ -69,7 +80,7 @@ export { linkFederatedIdentity, reportPinMismatch, reportSecurity, } from './rep
|
|
|
69
80
|
export { queryTrustScore, } from './trust-score';
|
|
70
81
|
export { measureFn } from './measure';
|
|
71
82
|
export { getColdStartMs, markTimeToFullDisplay, } from './mobile-vitals';
|
|
72
|
-
export { MomentHandle
|
|
83
|
+
export { MomentHandle } from '@goliapkg/sentori-core';
|
|
73
84
|
export { bindState, recordState, unbindState, } from './state-snapshots';
|
|
74
85
|
export { RageTapCapture } from './rage-tap';
|
|
75
86
|
export { probeNativeScreenshot, probeNativeWireframe, startAnrWatchdog, stopAnrWatchdog, triggerNativeCrash, } from './native';
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,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,EAAuD,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,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,cAAc,EACd,qBAAqB,GAEtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/init.d.ts
CHANGED
|
@@ -95,6 +95,9 @@ export type InitOptions = {
|
|
|
95
95
|
sampling?: {
|
|
96
96
|
errors?: null | number;
|
|
97
97
|
traces?: null | number;
|
|
98
|
+
/** v2.0 — sampling rate for `kind: 'message'` events emitted
|
|
99
|
+
* via `sentori.captureMessage()`. `null` / absent → keep all. */
|
|
100
|
+
messages?: null | number;
|
|
98
101
|
};
|
|
99
102
|
};
|
|
100
103
|
export declare const init: (options: InitOptions) => void;
|
package/lib/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAeA,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpE,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAUnF,OAAO,KAAK,EAAkB,cAAc,EAA2B,MAAM,SAAS,CAAC;AAIvF,MAAM,MAAM,WAAW,GAAG;IACxB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,OAAO,CAAC,EACJ,OAAO,GACP;YACE;;qEAEyD;YACzD,OAAO,CAAC,EAAE,OAAO,CAAC;SACnB,CAAC;QACN;;8DAEsD;QACtD,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB;;;;;;;uBAOe;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB;;;6CAGqC;QACrC,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB;;;;6CAIqC;QACrC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;QACrC;;;;6CAIqC;QACrC,eAAe,CAAC,EAAE,OAAO,GAAG;YAAE,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACrD;;;mEAG2D;QAC3D,MAAM,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,KAAK,GAAG,WAAW,CAAA;SAAE,CAAC;QAC1E;;;;uCAI+B;QAC/B,cAAc,CAAC,EAAE,OAAO,GAAG;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACnE;;;6DAGqD;QACrD,SAAS,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;QACvC;;;sEAG8D;QAC9D,gBAAgB,CAAC,EAAE;YACjB,OAAO,EAAE,OAAO,CAAC;YACjB,qBAAqB,CAAC,EAAE,CACtB,IAAI,EAAE,OAAO,sBAAsB,EAAE,eAAe,KAElD,OAAO,sBAAsB,EAAE,iBAAiB,GAChD,OAAO,CAAC,OAAO,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;YAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;KACH,CAAC;IACF;;;;;gEAK4D;IAC5D,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAeA,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpE,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAUnF,OAAO,KAAK,EAAkB,cAAc,EAA2B,MAAM,SAAS,CAAC;AAIvF,MAAM,MAAM,WAAW,GAAG;IACxB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,OAAO,CAAC,EACJ,OAAO,GACP;YACE;;qEAEyD;YACzD,OAAO,CAAC,EAAE,OAAO,CAAC;SACnB,CAAC;QACN;;8DAEsD;QACtD,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB;;;;;;;uBAOe;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB;;;6CAGqC;QACrC,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB;;;;6CAIqC;QACrC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;QACrC;;;;6CAIqC;QACrC,eAAe,CAAC,EAAE,OAAO,GAAG;YAAE,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACrD;;;mEAG2D;QAC3D,MAAM,CAAC,EAAE,KAAK,GAAG,WAAW,GAAG;YAAE,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,KAAK,GAAG,WAAW,CAAA;SAAE,CAAC;QAC1E;;;;uCAI+B;QAC/B,cAAc,CAAC,EAAE,OAAO,GAAG;YAAE,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACnE;;;6DAGqD;QACrD,SAAS,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;QACvC;;;sEAG8D;QAC9D,gBAAgB,CAAC,EAAE;YACjB,OAAO,EAAE,OAAO,CAAC;YACjB,qBAAqB,CAAC,EAAE,CACtB,IAAI,EAAE,OAAO,sBAAsB,EAAE,eAAe,KAElD,OAAO,sBAAsB,EAAE,iBAAiB,GAChD,OAAO,CAAC,OAAO,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;YAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;KACH,CAAC;IACF;;;;;gEAK4D;IAC5D,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;QACvB;0EACkE;QAClE,QAAQ,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;KAC1B,CAAC;CACH,CAAC;AAIF,eAAO,MAAM,IAAI,GAAI,SAAS,WAAW,KAAG,IAwL3C,CAAC;AAiBF,YAAY,EAAE,cAAc,EAAE,CAAC"}
|
package/lib/init.js
CHANGED
|
@@ -47,6 +47,7 @@ export const init = (options) => {
|
|
|
47
47
|
screenshotsEnabled: options.capture?.screenshot === true,
|
|
48
48
|
errorSampleRate: options.sampling?.errors ?? null,
|
|
49
49
|
traceSampleRate: options.sampling?.traces ?? null,
|
|
50
|
+
messageSampleRate: options.sampling?.messages ?? null,
|
|
50
51
|
sessionTrailEnabled: options.capture?.sessionTrail === true,
|
|
51
52
|
});
|
|
52
53
|
// Tell the native crash handler about the config so the JSON it writes
|
package/lib/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAyB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAwB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,gBAAgB,GACjB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAyB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAwB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAuGrB,MAAM,kBAAkB,GAAG,iCAAiC,CAAC;AAE7D,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,OAAoB,EAAQ,EAAE;IACjD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,GAAG,GACP,OAAO,CAAC,WAAW;QACnB,CAAC,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAE/D,oEAAoE;IACpE,gEAAgE;IAChE,oEAAoE;IACpE,2BAA2B;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC;IAC9C,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;QACjB,KAAK,mBAAmB,CACtB,GAAG,EACH,OAAO,CAAC,OAAO,EACf,aAAa,EAAE,EAAE,EAAE,IAAI,IAAI,CAC5B,CAAC;IACJ,CAAC;IAED,SAAS,CAAC;QACR,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,kBAAkB;QAClD,OAAO,EAAE,IAAI;QACb,kBAAkB,EAAE,OAAO,CAAC,OAAO,EAAE,UAAU,KAAK,IAAI;QACxD,eAAe,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI;QACjD,eAAe,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI;QACjD,iBAAiB,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,IAAI,IAAI;QACrD,mBAAmB,EAAE,OAAO,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI;KAC5D,CAAC,CAAC;IAEH,uEAAuE;IACvE,iEAAiE;IACjE,eAAe,CAAC;QACd,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,WAAW,EAAE,GAAG;KACjB,CAAC,CAAC;IACH,4DAA4D;IAC5D,2DAA2D;IAC3D,iEAAiE;IACjE,qCAAqC;IACrC,uBAAuB,EAAE,CAAC;IAC1B,8DAA8D;IAC9D,6DAA6D;IAC7D,uBAAuB;IACvB,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,SAAS,CAAC,oBAAoB,EAAE;YAC3C,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;YAC/B,IAAI,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE;SACrC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,cAAc,EAAE,CAAC;IACjB,0DAA0D;IAC1D,mBAAmB,EAAE,CAAC;IACtB,kEAAkE;IAClE,kEAAkE;IAClE,QAAQ;IACR,qBAAqB,EAAE,CAAC;IACxB,gDAAgD;IAChD,iBAAiB,EAAE,CAAC;IACpB,0DAA0D;IAC1D,eAAe,EAAE,CAAC;IAClB,8DAA8D;IAC9D,2DAA2D;IAC3D,6DAA6D;IAC7D,kDAAkD;IAClD,KAAK,YAAY,EAAE,CAAC;IACpB,8DAA8D;IAC9D,oCAAoC;IACpC,IAAI,OAAO,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAC/C,qBAAqB,CAAC;YACpB,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,gBAAgB;SAC3C,CAAC,CAAC;IACL,CAAC;IACD,iDAAiD;IACjD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;IAC5C,IAAI,EAAE,EAAE,CAAC;QACP,oBAAoB,CAAC;YACnB,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SACjE,CAAC,CAAC;IACL,CAAC;IACD,gDAAgD;IAChD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC;IACnC,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC;QACvB,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACnE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,mDAAmD;IACnD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC;IAC3C,IAAI,EAAE,EAAE,CAAC;QACP,mBAAmB,CAAC;YAClB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACxD,QAAQ,EAAE,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SAC3D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK;QAAE,oBAAoB,EAAE,CAAC;IAC3D,IAAI,OAAO,CAAC,iBAAiB,KAAK,KAAK;QAAE,qBAAqB,EAAE,CAAC;IACjE,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAClF,qBAAqB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC/B,+DAA+D;QAC/D,kEAAkE;QAClE,gEAAgE;QAChE,YAAY,EAAE,CAAC;QACf,uBAAuB,EAAE,CAAC;IAC5B,CAAC;IACD,8DAA8D;IAC9D,2DAA2D;IAC3D,mEAAmE;IACnE,2CAA2C;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IACvC,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;QAC3B,cAAc,CAAC,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,8DAA8D;IAC9D,2DAA2D;IAC3D,iDAAiD;IACjD,kBAAkB,EAAE;SACjB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAE5B,CAAC;gBACF,8DAA8D;gBAC9D,2DAA2D;gBAC3D,0DAA0D;gBAC1D,6DAA6D;gBAC7D,2DAA2D;gBAC3D,IAAI,KAAK,CAAC,mBAAmB,IAAI,KAAK,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;wBAC1C,MAAM,IAAI,GAAG,MAAM,gBAAgB,CACjC,KAAK,CAAC,EAAE,EACR,CAAC,CAAC,IAAI,EACN,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,EAC5C,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CACrB,CAAC;wBACF,IAAI,IAAI,EAAE,CAAC;4BACT,IAAI,CAAC,KAAK,CAAC,WAAW;gCAAE,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;4BAC/C,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC/B,CAAC;oBACH,CAAC;oBACD,OAAO,KAAK,CAAC,mBAAmB,CAAC;gBACnC,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnB,iBAAiB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEpC,kEAAkE;IAClE,mEAAmE;IACnE,qEAAqE;IACrE,uEAAuE;IACvE,IAAI,GAAG,EAAE,OAAO,EAAE,CAAC;QACjB,UAAU,CAAC,GAAG,EAAE;YACd,KAAK,mBAAmB,CAAC,aAAa,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC;QACxD,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Force-flush every pending Sentori buffer (events, metrics,
|
|
3
|
+
* track). Returns when the flush settles or the timeout fires —
|
|
4
|
+
* whichever happens first.
|
|
5
|
+
*
|
|
6
|
+
* Never rejects: per the NEVER rule, individual flush failures
|
|
7
|
+
* are silently absorbed (and self-reported via the internal
|
|
8
|
+
* circuit-breaker), and the resolved promise's value is undefined.
|
|
9
|
+
*
|
|
10
|
+
* await sentori.flush(5_000) // wait up to 5 s, then move on
|
|
11
|
+
* process.exit(0)
|
|
12
|
+
*/
|
|
13
|
+
export declare function flush(timeoutMs?: number): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Flush + shut down. After `close()`, further capture* calls remain
|
|
16
|
+
* silent no-ops via `_closed` gate. Idempotent — re-calling is safe.
|
|
17
|
+
*
|
|
18
|
+
* await sentori.close()
|
|
19
|
+
* // SDK is asleep; no more events go out.
|
|
20
|
+
*/
|
|
21
|
+
export declare function close(timeoutMs?: number): Promise<void>;
|
|
22
|
+
/** Test hook — reset the shutdown latch so unit tests don't have to
|
|
23
|
+
* re-init the whole SDK between cases. */
|
|
24
|
+
export declare function __resetLifecycleForTests(): void;
|
|
25
|
+
/** Internal — capture* implementations check this to short-circuit
|
|
26
|
+
* after `close()`. */
|
|
27
|
+
export declare function isClosed(): boolean;
|
|
28
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAiBA;;;;;;;;;;;GAWG;AACH,wBAAsB,KAAK,CAAC,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBpE;AAED;;;;;;GAMG;AACH,wBAAsB,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7D;AAED;2CAC2C;AAC3C,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C;AAED;uBACuB;AACvB,wBAAgB,QAAQ,IAAI,OAAO,CAElC"}
|
package/lib/lifecycle.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// v2.0 W3 — top-level lifecycle: flush / close.
|
|
2
|
+
//
|
|
3
|
+
// Sentry / OTel parity: a single `flush(timeoutMs?)` that drains
|
|
4
|
+
// every in-flight buffer (events / metrics / track), gated by a
|
|
5
|
+
// timeout so a slow network doesn't hang the host's shutdown path.
|
|
6
|
+
//
|
|
7
|
+
// Use before short-lived process exit (CLI / serverless function /
|
|
8
|
+
// fixture cleanup) to ensure pending captures land before the
|
|
9
|
+
// process dies.
|
|
10
|
+
import { flush as flushTransport } from './transport';
|
|
11
|
+
import { flushMetrics } from './metrics';
|
|
12
|
+
import { flushTrack } from './track';
|
|
13
|
+
import { reportInternal } from '@goliapkg/sentori-core';
|
|
14
|
+
let _closed = false;
|
|
15
|
+
/**
|
|
16
|
+
* Force-flush every pending Sentori buffer (events, metrics,
|
|
17
|
+
* track). Returns when the flush settles or the timeout fires —
|
|
18
|
+
* whichever happens first.
|
|
19
|
+
*
|
|
20
|
+
* Never rejects: per the NEVER rule, individual flush failures
|
|
21
|
+
* are silently absorbed (and self-reported via the internal
|
|
22
|
+
* circuit-breaker), and the resolved promise's value is undefined.
|
|
23
|
+
*
|
|
24
|
+
* await sentori.flush(5_000) // wait up to 5 s, then move on
|
|
25
|
+
* process.exit(0)
|
|
26
|
+
*/
|
|
27
|
+
export async function flush(timeoutMs = 5_000) {
|
|
28
|
+
if (_closed)
|
|
29
|
+
return;
|
|
30
|
+
try {
|
|
31
|
+
const drainAll = Promise.all([
|
|
32
|
+
flushTransport().catch((err) => {
|
|
33
|
+
reportInternal('flush.transport', err);
|
|
34
|
+
}),
|
|
35
|
+
flushMetrics().catch((err) => {
|
|
36
|
+
reportInternal('flush.metrics', err);
|
|
37
|
+
}),
|
|
38
|
+
flushTrack().catch((err) => {
|
|
39
|
+
reportInternal('flush.track', err);
|
|
40
|
+
}),
|
|
41
|
+
]).then(() => undefined);
|
|
42
|
+
const timer = new Promise((resolve) => setTimeout(resolve, timeoutMs));
|
|
43
|
+
await Promise.race([drainAll, timer]);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
// Belt-and-braces: even though each branch already has its own
|
|
47
|
+
// catch, the wrapping race shouldn't be able to surface a
|
|
48
|
+
// failure to the host either. NEVER rule.
|
|
49
|
+
reportInternal('flush', err);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Flush + shut down. After `close()`, further capture* calls remain
|
|
54
|
+
* silent no-ops via `_closed` gate. Idempotent — re-calling is safe.
|
|
55
|
+
*
|
|
56
|
+
* await sentori.close()
|
|
57
|
+
* // SDK is asleep; no more events go out.
|
|
58
|
+
*/
|
|
59
|
+
export async function close(timeoutMs) {
|
|
60
|
+
await flush(timeoutMs);
|
|
61
|
+
_closed = true;
|
|
62
|
+
}
|
|
63
|
+
/** Test hook — reset the shutdown latch so unit tests don't have to
|
|
64
|
+
* re-init the whole SDK between cases. */
|
|
65
|
+
export function __resetLifecycleForTests() {
|
|
66
|
+
_closed = false;
|
|
67
|
+
}
|
|
68
|
+
/** Internal — capture* implementations check this to short-circuit
|
|
69
|
+
* after `close()`. */
|
|
70
|
+
export function isClosed() {
|
|
71
|
+
return _closed;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,EAAE;AACF,iEAAiE;AACjE,gEAAgE;AAChE,mEAAmE;AACnE,EAAE;AACF,mEAAmE;AACnE,8DAA8D;AAC9D,gBAAgB;AAEhB,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,YAAoB,KAAK;IACnD,IAAI,OAAO;QAAE,OAAO;IACpB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;YAC3B,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC7B,cAAc,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;YACzC,CAAC,CAAC;YACF,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC3B,cAAc,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;YACvC,CAAC,CAAC;YACF,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACzB,cAAc,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YACrC,CAAC,CAAC;SACH,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;QAC7E,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,+DAA+D;QAC/D,0DAA0D;QAC1D,0CAA0C;QAC1C,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,SAAkB;IAC5C,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC;AAED;2CAC2C;AAC3C,MAAM,UAAU,wBAAwB;IACtC,OAAO,GAAG,KAAK,CAAC;AAClB,CAAC;AAED;uBACuB;AACvB,MAAM,UAAU,QAAQ;IACtB,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/lib/metrics.d.ts
CHANGED
|
@@ -1,4 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Record a numeric metric point. Cheap to call from a render hook —
|
|
3
|
+
* pushes into a 500-slot ring drained every 30 s (or on overflow).
|
|
4
|
+
*
|
|
5
|
+
* v2.0 — accepts an optional `parent: SpanContextLike` so a metric
|
|
6
|
+
* can be correlated to a span. The dashboard span-detail view joins
|
|
7
|
+
* metric points by `tags.span_id` / `tags.trace_id`.
|
|
8
|
+
*
|
|
9
|
+
* const span = sentori.startSpan({ name: 'db.query users' })
|
|
10
|
+
* sentori.recordMetric('db.query.duration_ms', 42, undefined, { parent: span })
|
|
11
|
+
* span.end({ status: 'ok' })
|
|
12
|
+
*/
|
|
13
|
+
export declare function recordMetric(name: string, value: number, tags?: Record<string, string>, opts?: {
|
|
14
|
+
parent?: {
|
|
15
|
+
spanId: string;
|
|
16
|
+
traceId: string;
|
|
17
|
+
};
|
|
18
|
+
}): void;
|
|
2
19
|
export declare function flushMetrics(): Promise<void>;
|
|
3
20
|
/**
|
|
4
21
|
* Start the 30 s flush timer. Called once from `init()`. Idempotent.
|
package/lib/metrics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AA6BA,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AA6BA;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACtD,IAAI,CAcN;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAOlD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAQxC;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAM7C"}
|
package/lib/metrics.js
CHANGED
|
@@ -16,7 +16,19 @@ const MAX_BUFFER = 500;
|
|
|
16
16
|
const FLUSH_INTERVAL_MS = 30_000;
|
|
17
17
|
let _buf = [];
|
|
18
18
|
let _timer = null;
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Record a numeric metric point. Cheap to call from a render hook —
|
|
21
|
+
* pushes into a 500-slot ring drained every 30 s (or on overflow).
|
|
22
|
+
*
|
|
23
|
+
* v2.0 — accepts an optional `parent: SpanContextLike` so a metric
|
|
24
|
+
* can be correlated to a span. The dashboard span-detail view joins
|
|
25
|
+
* metric points by `tags.span_id` / `tags.trace_id`.
|
|
26
|
+
*
|
|
27
|
+
* const span = sentori.startSpan({ name: 'db.query users' })
|
|
28
|
+
* sentori.recordMetric('db.query.duration_ms', 42, undefined, { parent: span })
|
|
29
|
+
* span.end({ status: 'ok' })
|
|
30
|
+
*/
|
|
31
|
+
export function recordMetric(name, value, tags, opts) {
|
|
20
32
|
if (!isInitialized())
|
|
21
33
|
return;
|
|
22
34
|
if (typeof name !== 'string' || name.length === 0 || name.length > 200)
|
|
@@ -25,7 +37,12 @@ export function recordMetric(name, value, tags) {
|
|
|
25
37
|
return;
|
|
26
38
|
if (tags && Object.keys(tags).length > 20)
|
|
27
39
|
return;
|
|
28
|
-
|
|
40
|
+
// Merge span-context tags so the dashboard can join metric points
|
|
41
|
+
// to the span that produced them without a separate schema column.
|
|
42
|
+
const finalTags = opts?.parent
|
|
43
|
+
? { ...(tags ?? {}), span_id: opts.parent.spanId, trace_id: opts.parent.traceId }
|
|
44
|
+
: tags;
|
|
45
|
+
_buf.push({ name, tags: finalTags, ts: new Date().toISOString(), value });
|
|
29
46
|
if (_buf.length >= MAX_BUFFER) {
|
|
30
47
|
void flushMetrics();
|
|
31
48
|
}
|
package/lib/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,qEAAqE;AACrE,sEAAsE;AACtE,oEAAoE;AACpE,EAAE;AACF,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AACpE,2BAA2B;AAE3B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAS/C,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,IAAI,IAAI,GAAY,EAAE,CAAC;AACvB,IAAI,MAAM,GAA0C,IAAI,CAAC;AAEzD,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,KAAa,EACb,IAA6B;
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,EAAE;AACF,sEAAsE;AACtE,mEAAmE;AACnE,qEAAqE;AACrE,sEAAsE;AACtE,oEAAoE;AACpE,EAAE;AACF,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AACpE,2BAA2B;AAE3B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAS/C,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,IAAI,IAAI,GAAY,EAAE,CAAC;AACvB,IAAI,MAAM,GAA0C,IAAI,CAAC;AAEzD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,KAAa,EACb,IAA6B,EAC7B,IAAuD;IAEvD,IAAI,CAAC,aAAa,EAAE;QAAE,OAAO;IAC7B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO;IAC/E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO;IACjE,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO;IAClD,kEAAkE;IAClE,mEAAmE;IACnE,MAAM,SAAS,GAAuC,IAAI,EAAE,MAAM;QAChE,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;QACjF,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;QAC9B,KAAK,YAAY,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,KAAK,GAAG,IAAI,CAAC;IACnB,IAAI,GAAG,EAAE,CAAC;IACV,MAAM,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO;IAC5B,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QACxB,KAAK,YAAY,EAAE,CAAC;IACtB,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACtB,mEAAmE;IACnE,4DAA4D;IAC3D,MAA4C,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,GAAG,EAAE,CAAC;AACZ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goliapkg/sentori-react-native",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Sentori SDK for React Native
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Sentori SDK for React Native — 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",
|
|
7
7
|
"repository": {
|
|
@@ -76,6 +76,6 @@
|
|
|
76
76
|
"access": "public"
|
|
77
77
|
},
|
|
78
78
|
"dependencies": {
|
|
79
|
-
"@goliapkg/sentori-core": "^0.
|
|
79
|
+
"@goliapkg/sentori-core": "^0.9.0"
|
|
80
80
|
}
|
|
81
81
|
}
|
package/src/capture.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type CaptureMessageOptions,
|
|
3
|
+
type MessageLevel,
|
|
4
|
+
safeFn,
|
|
5
|
+
sealTrail,
|
|
6
|
+
shouldSample,
|
|
7
|
+
} from '@goliapkg/sentori-core';
|
|
2
8
|
|
|
3
9
|
import { base64Utf8 } from './base64';
|
|
4
10
|
import {
|
|
@@ -29,6 +35,41 @@ declare const __DEV__: boolean | undefined;
|
|
|
29
35
|
|
|
30
36
|
let _user: User | null = null;
|
|
31
37
|
|
|
38
|
+
/** v2.0 — global scope tags merged onto every captured event
|
|
39
|
+
* (captureException + captureMessage). Set via `setTag` /
|
|
40
|
+
* `setTags`; reset by passing `{}`. Per-call tags win on conflict. */
|
|
41
|
+
let _scopeTags: Record<string, string> = {};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* v2.0 — set a single scope tag merged onto every subsequent
|
|
45
|
+
* capture. Per-call `extras.tags` / `opts.tags` win over scope tags.
|
|
46
|
+
*
|
|
47
|
+
* sentori.setTag('rollout', 'dark-mode-v2');
|
|
48
|
+
* sentori.captureException(err); // event.tags carries rollout
|
|
49
|
+
*/
|
|
50
|
+
export const setTag = (key: string, value: string): void => {
|
|
51
|
+
_scopeTags[key] = String(value);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* v2.0 — bulk variant of setTag. Existing tags are merged with
|
|
56
|
+
* the input record (`Object.assign` style).
|
|
57
|
+
*/
|
|
58
|
+
export const setTags = (record: Record<string, string>): void => {
|
|
59
|
+
for (const [k, v] of Object.entries(record)) _scopeTags[k] = String(v);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/** Internal — merge global scope tags into a per-call tag record. */
|
|
63
|
+
function mergeScopeTags(perCall: Tags | undefined): Tags | undefined {
|
|
64
|
+
if (Object.keys(_scopeTags).length === 0) return perCall;
|
|
65
|
+
return { ..._scopeTags, ...(perCall ?? {}) };
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export const __resetScopeForTests = (): void => {
|
|
69
|
+
_user = null;
|
|
70
|
+
_scopeTags = {};
|
|
71
|
+
};
|
|
72
|
+
|
|
32
73
|
// Phase 42 sub-D.08 — per-session screenshot quota. Defaults: 10 in
|
|
33
74
|
// prod, unlimited (-1 sentinel) in dev so test loops + react-error-
|
|
34
75
|
// overlay reruns don't run out partway through the session.
|
|
@@ -125,7 +166,7 @@ export const captureError = (error: Error, extras?: CaptureExtras): void => {
|
|
|
125
166
|
device: collectDevice(),
|
|
126
167
|
app: collectApp(config.release),
|
|
127
168
|
user: extras?.user ?? _user,
|
|
128
|
-
tags: extras?.tags,
|
|
169
|
+
tags: mergeScopeTags(extras?.tags),
|
|
129
170
|
...(flags ? { flags } : {}),
|
|
130
171
|
...(bundle ? { bundle } : {}),
|
|
131
172
|
breadcrumbs: crumbs,
|
|
@@ -165,7 +206,7 @@ export const captureError = (error: Error, extras?: CaptureExtras): void => {
|
|
|
165
206
|
// the server symbolicate at ingest against the uploaded map.
|
|
166
207
|
const pipeline = async (): Promise<void> => {
|
|
167
208
|
if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
168
|
-
await symbolicateErrorViaMetro(event.error).catch(() => {});
|
|
209
|
+
await symbolicateErrorViaMetro(event.error!).catch(() => {});
|
|
169
210
|
}
|
|
170
211
|
if (wantScreenshot) {
|
|
171
212
|
await captureAndAttachScreenshot(event);
|
|
@@ -318,6 +359,65 @@ async function captureAndAttachSessionTrail(event: Event): Promise<void> {
|
|
|
318
359
|
|
|
319
360
|
export const captureException = captureError;
|
|
320
361
|
|
|
362
|
+
const DEFAULT_MESSAGE_LEVEL: MessageLevel = 'info';
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Manually report an issue without an Error instance.
|
|
366
|
+
*
|
|
367
|
+
* Routes to the dashboard Issues module — distinct from `track`
|
|
368
|
+
* (analytics) and `recordMetric` (numeric). Use for "operator should
|
|
369
|
+
* look at this" signals: a fallback that fired, an unexpected state,
|
|
370
|
+
* a feature flag rollout that crossed a threshold.
|
|
371
|
+
*
|
|
372
|
+
* sentori.captureMessage('Payment provider returned 500, used fallback')
|
|
373
|
+
* sentori.captureMessage('Detected impossible state in session reducer', {
|
|
374
|
+
* level: 'error',
|
|
375
|
+
* tags: { reducer: 'session' },
|
|
376
|
+
* })
|
|
377
|
+
*
|
|
378
|
+
* Wrapped in `safeFn` per the NEVER rule — any internal failure is
|
|
379
|
+
* swallowed and (optionally) self-reported; the host app never sees
|
|
380
|
+
* a thrown error.
|
|
381
|
+
*/
|
|
382
|
+
export const captureMessage = safeFn(
|
|
383
|
+
'captureMessage',
|
|
384
|
+
(message: string, opts: CaptureMessageOptions = {}): void => {
|
|
385
|
+
if (!isInitialized()) return;
|
|
386
|
+
if (typeof message !== 'string' || message.length === 0) return;
|
|
387
|
+
const config = getConfig();
|
|
388
|
+
if (!config) return;
|
|
389
|
+
|
|
390
|
+
if (!shouldSample(config.messageSampleRate)) {
|
|
391
|
+
addBreadcrumb({ type: 'custom', data: { reason: 'sampled-out', kind: 'message' } });
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
const flags = getFeatureFlagSnapshot();
|
|
396
|
+
const bundle = getBundleInfo();
|
|
397
|
+
const crumbs = opts.breadcrumbs ?? getBreadcrumbs();
|
|
398
|
+
|
|
399
|
+
const event: Event = {
|
|
400
|
+
id: uuidV7(),
|
|
401
|
+
timestamp: new Date().toISOString(),
|
|
402
|
+
kind: 'message',
|
|
403
|
+
level: opts.level ?? DEFAULT_MESSAGE_LEVEL,
|
|
404
|
+
message,
|
|
405
|
+
platform: 'javascript',
|
|
406
|
+
release: config.release,
|
|
407
|
+
environment: config.environment,
|
|
408
|
+
device: collectDevice(),
|
|
409
|
+
app: collectApp(config.release),
|
|
410
|
+
user: opts.user ?? _user,
|
|
411
|
+
tags: mergeScopeTags(opts.tags),
|
|
412
|
+
...(flags ? { flags } : {}),
|
|
413
|
+
...(bundle ? { bundle } : {}),
|
|
414
|
+
breadcrumbs: crumbs,
|
|
415
|
+
};
|
|
416
|
+
|
|
417
|
+
enqueue(event);
|
|
418
|
+
},
|
|
419
|
+
);
|
|
420
|
+
|
|
321
421
|
/** rc.4 — test hook. The real replay attach path is internal so we
|
|
322
422
|
* don't bloat the public surface, but the encoding bug Insight hit
|
|
323
423
|
* on 2026-05-18 needs a behaviour-level test that exercises the
|
package/src/config.ts
CHANGED
|
@@ -10,6 +10,9 @@ export type Config = {
|
|
|
10
10
|
* `null` = keep everything (default). */
|
|
11
11
|
errorSampleRate: null | number;
|
|
12
12
|
traceSampleRate: null | number;
|
|
13
|
+
/** v2.0 — sampling rate for `kind: 'message'` events emitted via
|
|
14
|
+
* `captureMessage`. `null` = keep all (default). */
|
|
15
|
+
messageSampleRate: null | number;
|
|
13
16
|
/** Phase 46: when true, every `captureException` seals the
|
|
14
17
|
* session-trail buffer and uploads it as a `sessionTrail`
|
|
15
18
|
* attachment. Defaults to false. */
|
package/src/index.ts
CHANGED
|
@@ -3,9 +3,12 @@ import { addBreadcrumb } from './breadcrumbs';
|
|
|
3
3
|
import {
|
|
4
4
|
captureError,
|
|
5
5
|
captureException,
|
|
6
|
+
captureMessage,
|
|
6
7
|
captureStep,
|
|
7
8
|
getUser,
|
|
8
9
|
sendUserFeedback,
|
|
10
|
+
setTag,
|
|
11
|
+
setTags,
|
|
9
12
|
setUser,
|
|
10
13
|
} from './capture';
|
|
11
14
|
import { ErrorBoundary } from './error-boundary';
|
|
@@ -24,9 +27,15 @@ import {
|
|
|
24
27
|
type TimeToFullDisplayHandle,
|
|
25
28
|
} from './mobile-vitals';
|
|
26
29
|
import { bindState, recordState, unbindState } from './state-snapshots';
|
|
27
|
-
import {
|
|
30
|
+
import {
|
|
31
|
+
startMoment,
|
|
32
|
+
startSpan,
|
|
33
|
+
startTrace,
|
|
34
|
+
withScopedSpan,
|
|
35
|
+
} from '@goliapkg/sentori-core';
|
|
28
36
|
import { getInstallId } from './install-id';
|
|
29
37
|
import { flushMetrics, recordMetric } from './metrics';
|
|
38
|
+
import { close, flush } from './lifecycle';
|
|
30
39
|
import { linkFederatedIdentity, reportPinMismatch, reportSecurity } from './report-security';
|
|
31
40
|
import { flushTrack, track } from './track';
|
|
32
41
|
import { queryTrustScore } from './trust-score';
|
|
@@ -42,8 +51,11 @@ export const sentori = {
|
|
|
42
51
|
addBreadcrumb,
|
|
43
52
|
setUser,
|
|
44
53
|
getUser,
|
|
54
|
+
setTag,
|
|
55
|
+
setTags,
|
|
45
56
|
captureError,
|
|
46
57
|
captureException,
|
|
58
|
+
captureMessage,
|
|
47
59
|
captureStep,
|
|
48
60
|
sendUserFeedback,
|
|
49
61
|
recordMetric,
|
|
@@ -57,6 +69,9 @@ export const sentori = {
|
|
|
57
69
|
linkFederatedIdentity,
|
|
58
70
|
measureFn,
|
|
59
71
|
startMoment,
|
|
72
|
+
startSpan,
|
|
73
|
+
startTrace,
|
|
74
|
+
withScopedSpan,
|
|
60
75
|
bindState,
|
|
61
76
|
recordState,
|
|
62
77
|
unbindState,
|
|
@@ -74,6 +89,8 @@ export const sentori = {
|
|
|
74
89
|
startSession,
|
|
75
90
|
endSession,
|
|
76
91
|
markSessionCrashed,
|
|
92
|
+
flush,
|
|
93
|
+
close,
|
|
77
94
|
};
|
|
78
95
|
|
|
79
96
|
export default sentori;
|
|
@@ -83,11 +100,27 @@ export { addBreadcrumb } from './breadcrumbs';
|
|
|
83
100
|
export {
|
|
84
101
|
captureError,
|
|
85
102
|
captureException,
|
|
103
|
+
captureMessage,
|
|
86
104
|
captureStep,
|
|
87
105
|
getUser,
|
|
88
106
|
sendUserFeedback,
|
|
107
|
+
setTag,
|
|
108
|
+
setTags,
|
|
89
109
|
setUser,
|
|
90
110
|
} from './capture';
|
|
111
|
+
export {
|
|
112
|
+
startMoment,
|
|
113
|
+
startSpan,
|
|
114
|
+
startTrace,
|
|
115
|
+
withScopedSpan,
|
|
116
|
+
type SpanContextLike,
|
|
117
|
+
type StartSpanOptions,
|
|
118
|
+
} from '@goliapkg/sentori-core';
|
|
119
|
+
export { close, flush } from './lifecycle';
|
|
120
|
+
export type {
|
|
121
|
+
CaptureMessageOptions,
|
|
122
|
+
MessageLevel,
|
|
123
|
+
} from '@goliapkg/sentori-core';
|
|
91
124
|
export { ErrorBoundary } from './error-boundary';
|
|
92
125
|
export { FeedbackButton, type FeedbackButtonHandle, type FeedbackButtonProps } from './feedback-widget';
|
|
93
126
|
export {
|
|
@@ -117,7 +150,7 @@ export {
|
|
|
117
150
|
markTimeToFullDisplay,
|
|
118
151
|
type TimeToFullDisplayHandle,
|
|
119
152
|
} from './mobile-vitals';
|
|
120
|
-
export { MomentHandle, type MomentProperties
|
|
153
|
+
export { MomentHandle, type MomentProperties } from '@goliapkg/sentori-core';
|
|
121
154
|
export {
|
|
122
155
|
bindState,
|
|
123
156
|
recordState,
|
package/src/init.ts
CHANGED
|
@@ -124,6 +124,9 @@ export type InitOptions = {
|
|
|
124
124
|
sampling?: {
|
|
125
125
|
errors?: null | number;
|
|
126
126
|
traces?: null | number;
|
|
127
|
+
/** v2.0 — sampling rate for `kind: 'message'` events emitted
|
|
128
|
+
* via `sentori.captureMessage()`. `null` / absent → keep all. */
|
|
129
|
+
messages?: null | number;
|
|
127
130
|
};
|
|
128
131
|
};
|
|
129
132
|
|
|
@@ -163,6 +166,7 @@ export const init = (options: InitOptions): void => {
|
|
|
163
166
|
screenshotsEnabled: options.capture?.screenshot === true,
|
|
164
167
|
errorSampleRate: options.sampling?.errors ?? null,
|
|
165
168
|
traceSampleRate: options.sampling?.traces ?? null,
|
|
169
|
+
messageSampleRate: options.sampling?.messages ?? null,
|
|
166
170
|
sessionTrailEnabled: options.capture?.sessionTrail === true,
|
|
167
171
|
});
|
|
168
172
|
|
package/src/lifecycle.ts
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// v2.0 W3 — top-level lifecycle: flush / close.
|
|
2
|
+
//
|
|
3
|
+
// Sentry / OTel parity: a single `flush(timeoutMs?)` that drains
|
|
4
|
+
// every in-flight buffer (events / metrics / track), gated by a
|
|
5
|
+
// timeout so a slow network doesn't hang the host's shutdown path.
|
|
6
|
+
//
|
|
7
|
+
// Use before short-lived process exit (CLI / serverless function /
|
|
8
|
+
// fixture cleanup) to ensure pending captures land before the
|
|
9
|
+
// process dies.
|
|
10
|
+
|
|
11
|
+
import { flush as flushTransport } from './transport';
|
|
12
|
+
import { flushMetrics } from './metrics';
|
|
13
|
+
import { flushTrack } from './track';
|
|
14
|
+
import { reportInternal } from '@goliapkg/sentori-core';
|
|
15
|
+
|
|
16
|
+
let _closed = false;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Force-flush every pending Sentori buffer (events, metrics,
|
|
20
|
+
* track). Returns when the flush settles or the timeout fires —
|
|
21
|
+
* whichever happens first.
|
|
22
|
+
*
|
|
23
|
+
* Never rejects: per the NEVER rule, individual flush failures
|
|
24
|
+
* are silently absorbed (and self-reported via the internal
|
|
25
|
+
* circuit-breaker), and the resolved promise's value is undefined.
|
|
26
|
+
*
|
|
27
|
+
* await sentori.flush(5_000) // wait up to 5 s, then move on
|
|
28
|
+
* process.exit(0)
|
|
29
|
+
*/
|
|
30
|
+
export async function flush(timeoutMs: number = 5_000): Promise<void> {
|
|
31
|
+
if (_closed) return;
|
|
32
|
+
try {
|
|
33
|
+
const drainAll = Promise.all([
|
|
34
|
+
flushTransport().catch((err) => {
|
|
35
|
+
reportInternal('flush.transport', err);
|
|
36
|
+
}),
|
|
37
|
+
flushMetrics().catch((err) => {
|
|
38
|
+
reportInternal('flush.metrics', err);
|
|
39
|
+
}),
|
|
40
|
+
flushTrack().catch((err) => {
|
|
41
|
+
reportInternal('flush.track', err);
|
|
42
|
+
}),
|
|
43
|
+
]).then(() => undefined);
|
|
44
|
+
const timer = new Promise<void>((resolve) => setTimeout(resolve, timeoutMs));
|
|
45
|
+
await Promise.race([drainAll, timer]);
|
|
46
|
+
} catch (err) {
|
|
47
|
+
// Belt-and-braces: even though each branch already has its own
|
|
48
|
+
// catch, the wrapping race shouldn't be able to surface a
|
|
49
|
+
// failure to the host either. NEVER rule.
|
|
50
|
+
reportInternal('flush', err);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Flush + shut down. After `close()`, further capture* calls remain
|
|
56
|
+
* silent no-ops via `_closed` gate. Idempotent — re-calling is safe.
|
|
57
|
+
*
|
|
58
|
+
* await sentori.close()
|
|
59
|
+
* // SDK is asleep; no more events go out.
|
|
60
|
+
*/
|
|
61
|
+
export async function close(timeoutMs?: number): Promise<void> {
|
|
62
|
+
await flush(timeoutMs);
|
|
63
|
+
_closed = true;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Test hook — reset the shutdown latch so unit tests don't have to
|
|
67
|
+
* re-init the whole SDK between cases. */
|
|
68
|
+
export function __resetLifecycleForTests(): void {
|
|
69
|
+
_closed = false;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Internal — capture* implementations check this to short-circuit
|
|
73
|
+
* after `close()`. */
|
|
74
|
+
export function isClosed(): boolean {
|
|
75
|
+
return _closed;
|
|
76
|
+
}
|
package/src/metrics.ts
CHANGED
|
@@ -27,16 +27,34 @@ const FLUSH_INTERVAL_MS = 30_000;
|
|
|
27
27
|
let _buf: Point[] = [];
|
|
28
28
|
let _timer: ReturnType<typeof setInterval> | null = null;
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Record a numeric metric point. Cheap to call from a render hook —
|
|
32
|
+
* pushes into a 500-slot ring drained every 30 s (or on overflow).
|
|
33
|
+
*
|
|
34
|
+
* v2.0 — accepts an optional `parent: SpanContextLike` so a metric
|
|
35
|
+
* can be correlated to a span. The dashboard span-detail view joins
|
|
36
|
+
* metric points by `tags.span_id` / `tags.trace_id`.
|
|
37
|
+
*
|
|
38
|
+
* const span = sentori.startSpan({ name: 'db.query users' })
|
|
39
|
+
* sentori.recordMetric('db.query.duration_ms', 42, undefined, { parent: span })
|
|
40
|
+
* span.end({ status: 'ok' })
|
|
41
|
+
*/
|
|
30
42
|
export function recordMetric(
|
|
31
43
|
name: string,
|
|
32
44
|
value: number,
|
|
33
45
|
tags?: Record<string, string>,
|
|
46
|
+
opts?: { parent?: { spanId: string; traceId: string } },
|
|
34
47
|
): void {
|
|
35
48
|
if (!isInitialized()) return;
|
|
36
49
|
if (typeof name !== 'string' || name.length === 0 || name.length > 200) return;
|
|
37
50
|
if (typeof value !== 'number' || !Number.isFinite(value)) return;
|
|
38
51
|
if (tags && Object.keys(tags).length > 20) return;
|
|
39
|
-
|
|
52
|
+
// Merge span-context tags so the dashboard can join metric points
|
|
53
|
+
// to the span that produced them without a separate schema column.
|
|
54
|
+
const finalTags: Record<string, string> | undefined = opts?.parent
|
|
55
|
+
? { ...(tags ?? {}), span_id: opts.parent.spanId, trace_id: opts.parent.traceId }
|
|
56
|
+
: tags;
|
|
57
|
+
_buf.push({ name, tags: finalTags, ts: new Date().toISOString(), value });
|
|
40
58
|
if (_buf.length >= MAX_BUFFER) {
|
|
41
59
|
void flushMetrics();
|
|
42
60
|
}
|