@cxpinsight/react-native 0.18.1 → 0.18.3
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/CHANGELOG.md +33 -0
- package/lib/CXPinsight.d.ts +14 -0
- package/lib/CXPinsight.d.ts.map +1 -1
- package/lib/CXPinsight.js +168 -25
- package/lib/CXPinsight.js.map +1 -1
- package/lib/CXPinsightProvider.d.ts.map +1 -1
- package/lib/CXPinsightProvider.js +17 -2
- package/lib/CXPinsightProvider.js.map +1 -1
- package/lib/core/captureLedger.d.ts +75 -0
- package/lib/core/captureLedger.d.ts.map +1 -0
- package/lib/core/captureLedger.js +74 -0
- package/lib/core/captureLedger.js.map +1 -0
- package/lib/core/captureStatus.d.ts +197 -0
- package/lib/core/captureStatus.d.ts.map +1 -0
- package/lib/core/captureStatus.js +168 -0
- package/lib/core/captureStatus.js.map +1 -0
- package/lib/core/consent.d.ts +2 -0
- package/lib/core/consent.d.ts.map +1 -1
- package/lib/core/consent.js +6 -0
- package/lib/core/consent.js.map +1 -1
- package/lib/core/eventQueue.d.ts +11 -0
- package/lib/core/eventQueue.d.ts.map +1 -1
- package/lib/core/eventQueue.js +30 -0
- package/lib/core/eventQueue.js.map +1 -1
- package/lib/core/mobileRecorder.d.ts +2 -0
- package/lib/core/mobileRecorder.d.ts.map +1 -1
- package/lib/core/mobileRecorder.js +21 -3
- package/lib/core/mobileRecorder.js.map +1 -1
- package/lib/core/networkCapture.d.ts +8 -0
- package/lib/core/networkCapture.d.ts.map +1 -1
- package/lib/core/networkCapture.js +19 -0
- package/lib/core/networkCapture.js.map +1 -1
- package/lib/core/triggerEngine.d.ts +1 -1
- package/lib/core/triggerEngine.d.ts.map +1 -1
- package/lib/core/triggerEngine.js +7 -0
- package/lib/core/triggerEngine.js.map +1 -1
- package/lib/instrumented/interactionObserver.d.ts +2 -0
- package/lib/instrumented/interactionObserver.d.ts.map +1 -1
- package/lib/instrumented/interactionObserver.js +55 -5
- package/lib/instrumented/interactionObserver.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NOT_REPORTED = exports.EVENTS = exports.CATEGORY_OF = void 0;
|
|
4
|
+
exports.eventKeyOf = eventKeyOf;
|
|
5
|
+
exports.gateFor = gateFor;
|
|
6
|
+
exports.eventStatus = eventStatus;
|
|
7
|
+
exports.deliveryStatus = deliveryStatus;
|
|
8
|
+
exports.CATEGORY_OF = {
|
|
9
|
+
events: 'analytics',
|
|
10
|
+
recordings: 'recording',
|
|
11
|
+
networkEvents: 'network',
|
|
12
|
+
interactions: 'surveys',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Every event the SDK can emit, the capture switches it needs, and the hook
|
|
16
|
+
* that produces it. `custom` is the app's own track() calls. `recording` and
|
|
17
|
+
* `screenshots` are not events but are reported the same way.
|
|
18
|
+
*/
|
|
19
|
+
exports.EVENTS = {
|
|
20
|
+
session_start: { gates: ['events'], hook: 'session' },
|
|
21
|
+
first_visit: { gates: ['events'], hook: 'session' },
|
|
22
|
+
app_opened: { gates: ['events'], hook: 'lifecycle' },
|
|
23
|
+
app_installed: { gates: ['events'], hook: 'lifecycle' },
|
|
24
|
+
app_updated: { gates: ['events'], hook: 'lifecycle' },
|
|
25
|
+
app_foregrounded: { gates: ['events'], hook: 'lifecycle' },
|
|
26
|
+
app_backgrounded: { gates: ['events'], hook: 'lifecycle' },
|
|
27
|
+
page_view: { gates: ['events'], hook: 'navigation' },
|
|
28
|
+
click: { gates: ['events'], hook: 'tap_capture' },
|
|
29
|
+
field_focus: { gates: ['events'], hook: 'tap_capture' },
|
|
30
|
+
field_blur: { gates: ['events'], hook: 'tap_capture' },
|
|
31
|
+
scroll: { gates: ['events'], hook: 'scroll_capture' },
|
|
32
|
+
swipe: { gates: ['events'], hook: 'scroll_capture' },
|
|
33
|
+
api_call: { gates: ['networkEvents'], hook: 'network_capture' },
|
|
34
|
+
deep_link_opened: { gates: ['events'], hook: 'deep_links' },
|
|
35
|
+
survey_shown: { gates: ['interactions', 'events'], hook: 'survey_configs' },
|
|
36
|
+
survey_closed: { gates: ['interactions', 'events'], hook: 'survey_configs' },
|
|
37
|
+
survey_suppressed: { gates: ['interactions', 'events'], hook: 'survey_configs' },
|
|
38
|
+
error: { gates: ['events'], hook: null },
|
|
39
|
+
custom: { gates: ['events'], hook: null },
|
|
40
|
+
recording: { gates: ['recordings'], hook: 'recording' },
|
|
41
|
+
screenshots: { gates: ['recordings'], hook: 'screenshots' },
|
|
42
|
+
};
|
|
43
|
+
/** Names the SDK uses internally that are not reported as their own row. */
|
|
44
|
+
exports.NOT_REPORTED = new Set(['sdk_diagnostic']);
|
|
45
|
+
/** The report row an event name counts under. */
|
|
46
|
+
function eventKeyOf(name) {
|
|
47
|
+
if (exports.NOT_REPORTED.has(name))
|
|
48
|
+
return null;
|
|
49
|
+
if (name === 'long_press')
|
|
50
|
+
return 'click'; // tracked as click
|
|
51
|
+
return (name in exports.EVENTS ? name : 'custom');
|
|
52
|
+
}
|
|
53
|
+
/** The switch-and-consent gate for one capture key, in captureAllowed()'s order. */
|
|
54
|
+
function gateFor(snippet, dashboard, decided, consentRequired) {
|
|
55
|
+
if (snippet === false)
|
|
56
|
+
return 'off_in_app';
|
|
57
|
+
if (dashboard === false)
|
|
58
|
+
return 'off_in_dashboard';
|
|
59
|
+
if (decided === false)
|
|
60
|
+
return 'declined';
|
|
61
|
+
if (decided === undefined && consentRequired)
|
|
62
|
+
return 'waiting_for_consent';
|
|
63
|
+
return 'on';
|
|
64
|
+
}
|
|
65
|
+
const GATE_REASON = {
|
|
66
|
+
off_in_app: (k) => `The app's init config sets capture.${k} to false.`,
|
|
67
|
+
off_in_dashboard: (k) => `Turned off in the dashboard (capture.${k}).`,
|
|
68
|
+
declined: (k) => `This person declined consent for ${k === 'networkEvents' ? 'network capture' : k === 'recordings' ? 'session replay' : k === 'interactions' ? 'surveys' : 'product analytics'}.`,
|
|
69
|
+
waiting_for_consent: () => 'The app requires consent and this person has not answered yet; nothing is sent until they do.',
|
|
70
|
+
};
|
|
71
|
+
function eventStatus(i) {
|
|
72
|
+
const out = {};
|
|
73
|
+
for (const key of Object.keys(exports.EVENTS)) {
|
|
74
|
+
const spec = exports.EVENTS[key];
|
|
75
|
+
const closed = spec.gates.find((g) => i.gates[g] !== 'on');
|
|
76
|
+
if (closed) {
|
|
77
|
+
const state = i.gates[closed];
|
|
78
|
+
out[key] = { state, reason: GATE_REASON[state](closed) };
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
out[key] = hookStatus(key, i);
|
|
82
|
+
}
|
|
83
|
+
return out;
|
|
84
|
+
}
|
|
85
|
+
const ON = (reason) => ({ state: 'on', reason });
|
|
86
|
+
function hookStatus(key, i) {
|
|
87
|
+
const spec = exports.EVENTS[key];
|
|
88
|
+
const h = spec.hook ? i.hooks[spec.hook] : undefined;
|
|
89
|
+
const failed = (what) => ({ state: 'install_failed', reason: `${what}${h?.detail ? ` (${h.detail})` : ''}` });
|
|
90
|
+
switch (spec.hook) {
|
|
91
|
+
case null:
|
|
92
|
+
return ON(key === 'custom' ? 'Sent whenever the app calls CXPinsight.track().' : 'Sent when the SDK hits an error.');
|
|
93
|
+
case 'session':
|
|
94
|
+
return h?.state === 'installed' ? ON('Session tracking started.')
|
|
95
|
+
: h?.state === 'failed' ? failed('Session tracking could not start')
|
|
96
|
+
: { state: 'not_started', reason: 'Session tracking has not started.' };
|
|
97
|
+
case 'lifecycle':
|
|
98
|
+
return h?.state === 'installed' ? ON('App open, install/update and foreground/background are tracked.')
|
|
99
|
+
: h?.state === 'failed' ? failed('Lifecycle tracking could not start')
|
|
100
|
+
: { state: 'not_started', reason: 'Lifecycle tracking has not started.' };
|
|
101
|
+
case 'navigation': {
|
|
102
|
+
if (h?.state === 'failed')
|
|
103
|
+
return failed('The navigation ref given to CXPinsightProvider never became ready');
|
|
104
|
+
if (i.navigation === 'ref')
|
|
105
|
+
return ON('Tracked from the navigation ref given to CXPinsightProvider.');
|
|
106
|
+
if (i.navigation === 'screen_prop')
|
|
107
|
+
return ON('Tracked from the screenName prop on CXPinsightProvider.');
|
|
108
|
+
if ((i.counts.page_view?.produced ?? 0) > 0)
|
|
109
|
+
return ON('The app reports screens with trackScreen().');
|
|
110
|
+
return { state: 'not_connected', reason: 'No navigation is connected: no navigationRef or screenName on CXPinsightProvider, and no trackScreen() call. Screen views, screen durations and every event\'s screen stay empty.' };
|
|
111
|
+
}
|
|
112
|
+
case 'tap_capture': {
|
|
113
|
+
if (h?.state === 'not_installed')
|
|
114
|
+
return { state: 'off_in_app', reason: 'autoCaptureTaps is false; only components the babel plugin rewrote report.' };
|
|
115
|
+
if (h?.state !== 'installed')
|
|
116
|
+
return failed('Automatic capture could not hook React\'s element factory; only components the babel plugin rewrote report');
|
|
117
|
+
const taps = (i.counts.click?.produced ?? 0) + (i.counts.click?.blocked ?? 0);
|
|
118
|
+
if (key === 'click' && i.touches >= 5 && taps === 0) {
|
|
119
|
+
return { state: 'not_firing', reason: `${i.touches} screen touches were seen this launch and no tap event was produced — the app's touchables are not ones the SDK recognises.` };
|
|
120
|
+
}
|
|
121
|
+
return ON(key === 'click' ? 'Captured automatically on every touchable.' : 'Captured automatically on every text input; the value never leaves the device.');
|
|
122
|
+
}
|
|
123
|
+
case 'scroll_capture':
|
|
124
|
+
return h?.state === 'installed' ? ON('Captured automatically on scroll views and lists.')
|
|
125
|
+
: failed('Scroll capture could not install on this React Native version');
|
|
126
|
+
case 'network_capture':
|
|
127
|
+
if (h?.state === 'installed')
|
|
128
|
+
return ON('fetch and XMLHttpRequest are captured.');
|
|
129
|
+
if (h?.state === 'failed')
|
|
130
|
+
return failed('Network capture could not patch fetch/XMLHttpRequest, or the app replaced fetch after the SDK patched it');
|
|
131
|
+
return { state: 'not_started', reason: 'Network capture has not started.' };
|
|
132
|
+
case 'deep_links':
|
|
133
|
+
return h?.state === 'installed' ? ON('Deep links that open the app are tracked.')
|
|
134
|
+
: h?.state === 'failed' ? failed('Deep link tracking could not start')
|
|
135
|
+
: { state: 'not_started', reason: 'Deep link tracking has not started.' };
|
|
136
|
+
case 'survey_configs':
|
|
137
|
+
return h?.state === 'installed' ? ON('Survey targeting loaded; shown/closed/suppressed are tracked.')
|
|
138
|
+
: h?.state === 'failed' ? failed('Survey targeting could not be loaded, so no survey can show')
|
|
139
|
+
: { state: 'not_started', reason: 'Survey targeting has not loaded yet.' };
|
|
140
|
+
case 'recording':
|
|
141
|
+
if (i.recording === 'recording')
|
|
142
|
+
return ON('A recording is running for this session.');
|
|
143
|
+
if (i.recording === 'sampled_out')
|
|
144
|
+
return { state: 'sampled_out', reason: 'The dashboard\'s recording sample rate skipped this session (decided on the device).' };
|
|
145
|
+
if (i.recording === 'start_failed')
|
|
146
|
+
return { state: 'start_failed', reason: 'The server did not accept the recording start.' };
|
|
147
|
+
return { state: 'not_started', reason: 'Allowed, but no recording has started.' };
|
|
148
|
+
case 'screenshots':
|
|
149
|
+
if (i.screenshotsOffInDashboard)
|
|
150
|
+
return { state: 'off_in_dashboard', reason: 'Screenshots are turned off in the dashboard.' };
|
|
151
|
+
if (i.recording !== 'recording')
|
|
152
|
+
return { state: 'not_started', reason: 'Screenshots are taken only while a recording runs.' };
|
|
153
|
+
if (i.screenshotSource === 'none')
|
|
154
|
+
return { state: 'no_capturer', reason: 'No screenshot capturer in this build: the SDK\'s native module is missing (rebuild the app after installing) and no captureScreen was passed.' };
|
|
155
|
+
return ON(i.screenshotSource === 'native' ? 'Taken by the SDK\'s own native module.'
|
|
156
|
+
: i.screenshotSource === 'host' ? 'Taken by the app\'s captureScreen.'
|
|
157
|
+
: 'Taken with react-native-view-shot.');
|
|
158
|
+
}
|
|
159
|
+
return ON('Allowed.');
|
|
160
|
+
}
|
|
161
|
+
function deliveryStatus(q) {
|
|
162
|
+
if (q.held)
|
|
163
|
+
return { state: 'held_for_consent', reason: 'Events are kept on the device until consent is answered.', pending: q.pending };
|
|
164
|
+
if (q.consecutiveFailures > 0)
|
|
165
|
+
return { state: 'retrying', reason: `The last ${q.consecutiveFailures} send attempt(s) failed; retrying with backoff.`, pending: q.pending };
|
|
166
|
+
return { state: 'sending', reason: 'Events are being sent.', pending: q.pending };
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=captureStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captureStatus.js","sourceRoot":"","sources":["../../src/core/captureStatus.ts"],"names":[],"mappings":";;;;;;;AA+Ca,QAAA,WAAW,GAAwC;IAC9D,MAAM,EAAE,WAAW;IACnB,UAAU,EAAE,WAAW;IACvB,aAAa,EAAE,SAAS;IACxB,YAAY,EAAE,SAAS;CACxB,CAAC;AAEF;;;;GAIG;AACU,QAAA,MAAM,GAAG;IACpB,aAAa,EAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;IACzD,WAAW,EAAQ,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;IACzD,UAAU,EAAS,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;IAC3D,aAAa,EAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;IAC3D,WAAW,EAAQ,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;IAC3D,gBAAgB,EAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;IAC3D,gBAAgB,EAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;IAC3D,SAAS,EAAU,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE;IAC5D,KAAK,EAAc,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE;IAC7D,WAAW,EAAQ,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE;IAC7D,UAAU,EAAS,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE;IAC7D,MAAM,EAAa,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAChE,KAAK,EAAc,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAChE,QAAQ,EAAW,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE;IACxE,gBAAgB,EAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE;IAC5D,YAAY,EAAO,EAAE,KAAK,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAChF,aAAa,EAAM,EAAE,KAAK,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAChF,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE;IAChF,KAAK,EAAc,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;IACpD,MAAM,EAAa,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;IACpD,SAAS,EAAU,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;IAC/D,WAAW,EAAQ,EAAE,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE;CACuB,CAAC;AAG3F,4EAA4E;AAC/D,QAAA,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAExD,iDAAiD;AACjD,oBAA2B,IAAY;IACrC,IAAI,QAAA,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,OAAO,CAAC,CAAW,mBAAmB;IACxE,OAAO,CAAC,IAAI,IAAI,QAAA,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAa,CAAC;AACxD,CAAC;AAID,oFAAoF;AACpF,iBACE,OAA4B,EAC5B,SAA8B,EAC9B,OAA4B,EAC5B,eAAwB;IAExB,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,YAAY,CAAC;IAC3C,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,kBAAkB,CAAC;IACnD,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,UAAU,CAAC;IACzC,IAAI,OAAO,KAAK,SAAS,IAAI,eAAe;QAAE,OAAO,qBAAqB,CAAC;IAC3E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,WAAW,GAAgD;IAC/D,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,sCAAsC,CAAC,YAAY;IACtE,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,wCAAwC,CAAC,IAAI;IACtE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,oCAAoC,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,GAAG;IAClM,mBAAmB,EAAE,GAAG,EAAE,CAAC,+FAA+F;CAC3H,CAAC;AAcF,qBAA4B,CAAgB;IAC1C,MAAM,GAAG,GAAG,EAAmC,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAA,MAAM,CAAe,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAC3D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACzD,SAAS;QACX,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,EAAE,GAAG,CAAC,MAAc,EAAe,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAEtE,SAAS,UAAU,CAAC,GAAa,EAAE,CAAgB;IACjD,MAAM,IAAI,GAAG,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAe,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAEnI,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,IAAI;YACP,OAAO,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;QAEvH,KAAK,SAAS;YACZ,OAAO,CAAC,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,2BAA2B,CAAC;gBAC/D,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,kCAAkC,CAAC;oBACpE,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;QAE5E,KAAK,WAAW;YACd,OAAO,CAAC,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,iEAAiE,CAAC;gBACrG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,oCAAoC,CAAC;oBACtE,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC;QAE9E,KAAK,YAAY,EAAE,CAAC;YAClB,IAAI,CAAC,EAAE,KAAK,KAAK,QAAQ;gBAAE,OAAO,MAAM,CAAC,mEAAmE,CAAC,CAAC;YAC9G,IAAI,CAAC,CAAC,UAAU,KAAK,KAAK;gBAAE,OAAO,EAAE,CAAC,8DAA8D,CAAC,CAAC;YACtG,IAAI,CAAC,CAAC,UAAU,KAAK,aAAa;gBAAE,OAAO,EAAE,CAAC,yDAAyD,CAAC,CAAC;YACzG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;gBAAE,OAAO,EAAE,CAAC,6CAA6C,CAAC,CAAC;YACtG,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,mLAAmL,EAAE,CAAC;QACjO,CAAC;QAED,KAAK,aAAa,EAAE,CAAC;YACnB,IAAI,CAAC,EAAE,KAAK,KAAK,eAAe;gBAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,4EAA4E,EAAE,CAAC;YACvJ,IAAI,CAAC,EAAE,KAAK,KAAK,WAAW;gBAAE,OAAO,MAAM,CAAC,4GAA4G,CAAC,CAAC;YAC1J,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;YAC9E,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACpD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,6HAA6H,EAAE,CAAC;YACpL,CAAC;YACD,OAAO,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,gFAAgF,CAAC,CAAC;QAC/J,CAAC;QAED,KAAK,gBAAgB;YACnB,OAAO,CAAC,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,mDAAmD,CAAC;gBACvF,CAAC,CAAC,MAAM,CAAC,+DAA+D,CAAC,CAAC;QAE9E,KAAK,iBAAiB;YACpB,IAAI,CAAC,EAAE,KAAK,KAAK,WAAW;gBAAE,OAAO,EAAE,CAAC,wCAAwC,CAAC,CAAC;YAClF,IAAI,CAAC,EAAE,KAAK,KAAK,QAAQ;gBAAE,OAAO,MAAM,CAAC,0GAA0G,CAAC,CAAC;YACrJ,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAC;QAE9E,KAAK,YAAY;YACf,OAAO,CAAC,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,2CAA2C,CAAC;gBAC/E,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,oCAAoC,CAAC;oBACtE,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC;QAE9E,KAAK,gBAAgB;YACnB,OAAO,CAAC,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,+DAA+D,CAAC;gBACnG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,6DAA6D,CAAC;oBAC/F,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC;QAE/E,KAAK,WAAW;YACd,IAAI,CAAC,CAAC,SAAS,KAAK,WAAW;gBAAE,OAAO,EAAE,CAAC,0CAA0C,CAAC,CAAC;YACvF,IAAI,CAAC,CAAC,SAAS,KAAK,aAAa;gBAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,sFAAsF,EAAE,CAAC;YACnK,IAAI,CAAC,CAAC,SAAS,KAAK,cAAc;gBAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,gDAAgD,EAAE,CAAC;YAC/H,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,wCAAwC,EAAE,CAAC;QAEpF,KAAK,aAAa;YAChB,IAAI,CAAC,CAAC,yBAAyB;gBAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,8CAA8C,EAAE,CAAC;YAC9H,IAAI,CAAC,CAAC,SAAS,KAAK,WAAW;gBAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,oDAAoD,EAAE,CAAC;YAC/H,IAAI,CAAC,CAAC,gBAAgB,KAAK,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,+IAA+I,EAAE,CAAC;YAC5N,OAAO,EAAE,CAAC,CAAC,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,wCAAwC;gBAClF,CAAC,CAAC,CAAC,CAAC,gBAAgB,KAAK,MAAM,CAAC,CAAC,CAAC,oCAAoC;oBACtE,CAAC,CAAC,oCAAoC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC;AACxB,CAAC;AAID,wBAA+B,CAAkE;IAC/F,IAAI,CAAC,CAAC,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,0DAA0D,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACzI,IAAI,CAAC,CAAC,mBAAmB,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,mBAAmB,iDAAiD,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5K,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,wBAAwB,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AACpF,CAAC"}
|
package/lib/core/consent.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ export declare function setConsentHandler(cb: ((granted: boolean) => void) | nul
|
|
|
16
16
|
export declare function mayUse(category: ConsentCategory): boolean;
|
|
17
17
|
/** Kept for call sites that predate categories; analytics is the broadest. */
|
|
18
18
|
export declare function mayCapture(): boolean;
|
|
19
|
+
/** The stored answer for one category: true, false, or undefined when not asked. */
|
|
20
|
+
export declare function decisionFor(category: ConsentCategory): boolean | undefined;
|
|
19
21
|
/** True when events should be held rather than sent (awaiting a decision). */
|
|
20
22
|
export declare function isPending(): boolean;
|
|
21
23
|
export declare function consentRequired(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../src/core/consent.ts"],"names":[],"mappings":"AAsCA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;AAEvD,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,YAAI,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AAC5F,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAS1D,gFAAgF;AAChF,wBAAsB,WAAW,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAczE;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAE/E;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAIzD;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,UAAU,GAAG,IAAI,CAM9C;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAiB7D;AAED,wBAAgB,YAAY,IAAI,IAAI,CAAqC;AACzE,wBAAgB,aAAa,IAAI,IAAI,CAAsC;AAE3E,+DAA+D;AAC/D,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD"}
|
|
1
|
+
{"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../../src/core/consent.ts"],"names":[],"mappings":"AAsCA,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;AAEvD,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,YAAI,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AAC5F,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAS1D,gFAAgF;AAChF,wBAAsB,WAAW,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAczE;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAE/E;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAIzD;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,GAAG,SAAS,CAG1E;AAED,8EAA8E;AAC9E,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,IAAI,UAAU,GAAG,IAAI,CAM9C;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAiB7D;AAED,wBAAgB,YAAY,IAAI,IAAI,CAAqC;AACzE,wBAAgB,aAAa,IAAI,IAAI,CAAsC;AAE3E,+DAA+D;AAC/D,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD"}
|
package/lib/core/consent.js
CHANGED
|
@@ -38,6 +38,7 @@ exports.initConsent = initConsent;
|
|
|
38
38
|
exports.setConsentHandler = setConsentHandler;
|
|
39
39
|
exports.mayUse = mayUse;
|
|
40
40
|
exports.mayCapture = mayCapture;
|
|
41
|
+
exports.decisionFor = decisionFor;
|
|
41
42
|
exports.isPending = isPending;
|
|
42
43
|
exports.consentRequired = consentRequired;
|
|
43
44
|
exports.getConsent = getConsent;
|
|
@@ -126,6 +127,11 @@ function mayUse(category) {
|
|
|
126
127
|
function mayCapture() {
|
|
127
128
|
return mayUse('analytics');
|
|
128
129
|
}
|
|
130
|
+
/** The stored answer for one category: true, false, or undefined when not asked. */
|
|
131
|
+
function decisionFor(category) {
|
|
132
|
+
const d = categories?.[category];
|
|
133
|
+
return typeof d === 'boolean' ? d : undefined;
|
|
134
|
+
}
|
|
129
135
|
/** True when events should be held rather than sent (awaiting a decision). */
|
|
130
136
|
function isPending() {
|
|
131
137
|
return required && categories === null;
|
package/lib/core/consent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/core/consent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/core/consent.ts"],"names":[],"mappings":"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"}
|
package/lib/core/eventQueue.d.ts
CHANGED
|
@@ -7,6 +7,17 @@ export declare function startQueue(options?: {
|
|
|
7
7
|
}): Promise<void>;
|
|
8
8
|
/** Enqueue an event */
|
|
9
9
|
export declare function enqueue(event: TrackEvent): void;
|
|
10
|
+
/**
|
|
11
|
+
* What the server says it did with a batch it accepted. HTTP success is not
|
|
12
|
+
* "stored": the server's storage sampling drops whole sessions, and an origin
|
|
13
|
+
* outside the allowlist is answered 202 with accepted:false. The reply says so;
|
|
14
|
+
* the capture status reports it instead of assuming.
|
|
15
|
+
*/
|
|
16
|
+
export declare function serverVerdict(sent: number, data: unknown): {
|
|
17
|
+
stored: number;
|
|
18
|
+
sampledOut: number;
|
|
19
|
+
rejected: number;
|
|
20
|
+
};
|
|
10
21
|
/** Flush queued events to the server. */
|
|
11
22
|
export declare function flush(): Promise<void>;
|
|
12
23
|
/** Stop the queue and clean up */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventQueue.d.ts","sourceRoot":"","sources":["../../src/core/eventQueue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"eventQueue.d.ts","sourceRoot":"","sources":["../../src/core/eventQueue.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAyE3C,iDAAiD;AACjD,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhB;AAeD,uBAAuB;AACvB,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAY/C;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAYnH;AAKD,yCAAyC;AACzC,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAwD3C;AAED,kCAAkC;AAClC,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAU/C;AAED,mCAAmC;AACnC,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAShD;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,IAAI;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB,CAOA"}
|
package/lib/core/eventQueue.js
CHANGED
|
@@ -35,6 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.startQueue = startQueue;
|
|
37
37
|
exports.enqueue = enqueue;
|
|
38
|
+
exports.serverVerdict = serverVerdict;
|
|
38
39
|
exports.flush = flush;
|
|
39
40
|
exports.stopQueue = stopQueue;
|
|
40
41
|
exports.clearQueue = clearQueue;
|
|
@@ -44,6 +45,8 @@ const types_1 = require("../types");
|
|
|
44
45
|
const storage = __importStar(require("./storage"));
|
|
45
46
|
const network_1 = require("./network");
|
|
46
47
|
const consent_1 = require("./consent");
|
|
48
|
+
const captureLedger_1 = require("./captureLedger");
|
|
49
|
+
const captureStatus_1 = require("./captureStatus");
|
|
47
50
|
const DEFAULT_FLUSH_INTERVAL = 30000; // 30s
|
|
48
51
|
const DEFAULT_FLUSH_THRESHOLD = 10;
|
|
49
52
|
const MAX_BATCH_SIZE = 100;
|
|
@@ -147,6 +150,27 @@ function enqueue(event) {
|
|
|
147
150
|
void flush();
|
|
148
151
|
}
|
|
149
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* What the server says it did with a batch it accepted. HTTP success is not
|
|
155
|
+
* "stored": the server's storage sampling drops whole sessions, and an origin
|
|
156
|
+
* outside the allowlist is answered 202 with accepted:false. The reply says so;
|
|
157
|
+
* the capture status reports it instead of assuming.
|
|
158
|
+
*/
|
|
159
|
+
function serverVerdict(sent, data) {
|
|
160
|
+
const d = (data && typeof data === 'object' ? data : {});
|
|
161
|
+
if (d.reason === 'sampled_out') {
|
|
162
|
+
const dropped = typeof d.dropped === 'number' ? d.dropped : sent;
|
|
163
|
+
return { stored: 0, sampledOut: dropped, rejected: Math.max(0, sent - dropped) };
|
|
164
|
+
}
|
|
165
|
+
if (d.accepted === false)
|
|
166
|
+
return { stored: 0, sampledOut: 0, rejected: sent };
|
|
167
|
+
if (typeof d.eventsCreated === 'number') {
|
|
168
|
+
const sampledOut = typeof d.sampledOut === 'number' ? d.sampledOut : 0;
|
|
169
|
+
return { stored: d.eventsCreated, sampledOut, rejected: Math.max(0, sent - d.eventsCreated - sampledOut) };
|
|
170
|
+
}
|
|
171
|
+
return { stored: sent, sampledOut: 0, rejected: 0 };
|
|
172
|
+
}
|
|
173
|
+
const keysOf = (events) => events.map((e) => (0, captureStatus_1.eventKeyOf)(e.eventName)).filter((k) => k !== null);
|
|
150
174
|
/** Flush queued events to the server. */
|
|
151
175
|
async function flush() {
|
|
152
176
|
if (isFlushing || queue.length === 0)
|
|
@@ -172,11 +196,17 @@ async function flush() {
|
|
|
172
196
|
: await (0, network_1.sdkFetch)('POST', '/api/engagement/events/track-batch', { events: eventsToSend });
|
|
173
197
|
ok = result.success;
|
|
174
198
|
error = result.error;
|
|
199
|
+
if (ok)
|
|
200
|
+
captureLedger_1.ledger.server(serverVerdict(eventsToSend.length, result.data));
|
|
175
201
|
}
|
|
176
202
|
catch (err) {
|
|
177
203
|
ok = false;
|
|
178
204
|
error = err instanceof Error ? err.message : 'network error';
|
|
179
205
|
}
|
|
206
|
+
if (ok)
|
|
207
|
+
captureLedger_1.ledger.sent(keysOf(eventsToSend));
|
|
208
|
+
else
|
|
209
|
+
captureLedger_1.ledger.failed(keysOf(eventsToSend));
|
|
180
210
|
if (ok) {
|
|
181
211
|
consecutiveFailures = 0;
|
|
182
212
|
nextRetryAt = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventQueue.js","sourceRoot":"","sources":["../../src/core/eventQueue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"eventQueue.js","sourceRoot":"","sources":["../../src/core/eventQueue.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA6D;AAE7D,oCAAwC;AACxC,MAAY,OAAO,sCAAkB;AACrC,uCAAqC;AACrC,uCAAsC;AACtC,mDAAyC;AACzC,mDAA6C;AAE7C,MAAM,sBAAsB,GAAG,KAAM,CAAC,CAAC,MAAM;AAC7C,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,gFAAgF;AAChF,iFAAiF;AACjF,6EAA6E;AAC7E,4EAA4E;AAC5E,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B,+EAA+E;AAC/E,+EAA+E;AAC/E,2EAA2E;AAC3E,oEAAoE;AACpE,MAAM,aAAa,GAAG,IAAK,CAAC;AAC5B,MAAM,YAAY,GAAG,CAAC,GAAG,KAAM,CAAC,CAAC,gBAAgB;AAEjD,6EAA6E;AAC7E,2EAA2E;AAC3E,2EAA2E;AAC3E,8EAA8E;AAC9E,2EAA2E;AAC3E,uDAAuD;AACvD,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,IAAI,KAAK,GAAiB,EAAE,CAAC;AAC7B,IAAI,UAAU,GAA0C,IAAI,CAAC;AAC7D,IAAI,YAAY,GAAyC,IAAI,CAAC;AAC9D,IAAI,cAAc,GAAG,uBAAuB,CAAC;AAC7C,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,IAAI,oBAAoB,GAA8B,IAAI,CAAC;AAC3D,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,gBAAgB;AAChB,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAC5B,IAAI,WAAW,GAAG,CAAC,CAAC;AACpB,IAAI,YAAY,GAAG,CAAC,CAAC;AAErB,SAAS,GAAG,CAAC,GAAG,IAAe;IAC7B,IAAI,SAAS;QAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,gDAAgD;AAChD,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC;AACjC,CAAC;AAED,SAAS,eAAe;IACtB,IAAI,YAAY;QAAE,OAAO;IACzB,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;QAC7B,YAAY,GAAG,IAAI,CAAC;QACpB,KAAK,OAAO,CAAC,GAAG,CAAC,oBAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC,EAAE,mBAAmB,CAAC,CAAC;AAC1B,CAAC;AAED,uEAAuE;AACvE,KAAK,UAAU,UAAU;IACvB,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,CAAC,YAAY,CAAC,CAAC;QAC3B,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,oBAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,iDAAiD;AAC1C,KAAK,qBAAqB,OAIhC;IACC,SAAS,GAAG,OAAO,EAAE,KAAK,IAAI,KAAK,CAAC;IACpC,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,uBAAuB,CAAC;IACpE,MAAM,QAAQ,GAAG,OAAO,EAAE,aAAa,IAAI,sBAAsB,CAAC;IAElE,uDAAuD;IACvD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAe,oBAAY,CAAC,WAAW,CAAC,CAAC;IAC5E,IAAI,SAAS,EAAE,MAAM,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QACzB,SAAS,EAAE,CAAC;QACZ,GAAG,CAAC,YAAY,SAAS,CAAC,MAAM,sBAAsB,CAAC,CAAC;IAC1D,CAAC;IAED,mBAAmB,GAAG,CAAC,CAAC;IACxB,WAAW,GAAG,CAAC,CAAC;IAEhB,iBAAiB;IACjB,SAAS,EAAE,CAAC;IACZ,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;IAEvD,sBAAsB;IACtB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,oBAAoB,GAAG,uBAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAC7E,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS;IAChB,IAAI,KAAK,CAAC,MAAM,IAAI,cAAc;QAAE,OAAO;IAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;IAC/C,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC1B,YAAY,IAAI,QAAQ,CAAC;IACzB,GAAG,CAAC,cAAc,cAAc,cAAc,QAAQ,YAAY,YAAY,SAAS,CAAC,CAAC;AAC3F,CAAC;AAED,uBAAuB;AACvB,iBAAwB,KAAiB;IACvC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,SAAS,EAAE,CAAC;IACZ,GAAG,CAAC,aAAa,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,MAAM,WAAW,CAAC,CAAC;IAE9D,eAAe,EAAE,CAAC;IAElB,8EAA8E;IAC9E,iCAAiC;IACjC,IAAI,KAAK,CAAC,MAAM,IAAI,cAAc,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,WAAW,EAAE,CAAC;QAChE,KAAK,KAAK,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,uBAA8B,IAAY,EAAE,IAAa;IACvD,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAA4B,CAAC;IACpF,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QACjE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC;IACnF,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC9E,IAAI,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,GAAG,UAAU,CAAC,EAAE,CAAC;IAC7G,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,MAAoB,EAAY,EAAE,CAChD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,0BAAU,EAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAEnG,yCAAyC;AAClC,KAAK;IACV,IAAI,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC7C,8EAA8E;IAC9E,6EAA6E;IAC7E,8EAA8E;IAC9E,4CAA4C;IAC5C,IAAI,IAAA,mBAAS,GAAE;QAAE,OAAO;IACxB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;QAC7B,GAAG,CAAC,iCAAiC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IACD,UAAU,GAAG,IAAI,CAAC;IAElB,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IACrD,GAAG,CAAC,YAAY,YAAY,CAAC,MAAM,SAAS,CAAC,CAAC;IAE9C,IAAI,EAAE,GAAG,KAAK,CAAC;IACf,IAAI,KAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,MAAM,GACV,YAAY,CAAC,MAAM,KAAK,CAAC;YACvB,CAAC,CAAC,MAAM,IAAA,kBAAQ,EAAC,MAAM,EAAE,8BAA8B,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC,MAAM,IAAA,kBAAQ,EAAC,MAAM,EAAE,oCAAoC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QAC7F,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;QACpB,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QACrB,IAAI,EAAE;YAAE,sBAAM,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,EAAE,GAAG,KAAK,CAAC;QACX,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;IAC/D,CAAC;IAED,IAAI,EAAE;QAAE,sBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;;QACrC,sBAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAEzC,IAAI,EAAE,EAAE,CAAC;QACP,mBAAmB,GAAG,CAAC,CAAC;QACxB,WAAW,GAAG,CAAC,CAAC;QAChB,GAAG,CAAC,kBAAkB,YAAY,CAAC,MAAM,cAAc,CAAC,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,oEAAoE;QACpE,KAAK,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC;QAC/B,SAAS,EAAE,CAAC;QACZ,mBAAmB,IAAI,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC;QAChD,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACjC,GAAG,CAAC,iBAAiB,KAAK,IAAI,SAAS,eAAe,mBAAmB,iBAAiB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnH,CAAC;IAED,MAAM,UAAU,EAAE,CAAC;IACnB,UAAU,GAAG,KAAK,CAAC;IAEnB,6EAA6E;IAC7E,gDAAgD;IAChD,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;QACzC,KAAK,KAAK,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED,kCAAkC;AAC3B,KAAK;IACV,SAAS,EAAE,CAAC;IACZ,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,oBAAoB,GAAG,IAAI,CAAC;IAC5B,MAAM,KAAK,EAAE,CAAC;IACd,KAAK,GAAG,EAAE,CAAC;IACX,mBAAmB,GAAG,CAAC,CAAC;IACxB,WAAW,GAAG,CAAC,CAAC;IAChB,MAAM,UAAU,EAAE,CAAC;IACnB,MAAM,OAAO,CAAC,MAAM,CAAC,oBAAY,CAAC,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,mCAAmC;AAC5B,KAAK;IACV,KAAK,GAAG,EAAE,CAAC;IACX,mBAAmB,GAAG,CAAC,CAAC;IACxB,WAAW,GAAG,CAAC,CAAC;IAChB,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,CAAC,YAAY,CAAC,CAAC;QAC3B,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,MAAM,OAAO,CAAC,MAAM,CAAC,oBAAY,CAAC,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,+DAA+D;AAC/D;IAME,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,MAAM;QACrB,OAAO,EAAE,YAAY;QACrB,mBAAmB;QACnB,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,UAAU,EAAE,CAAC;QACf,aAAa,CAAC,UAAU,CAAC,CAAC;QAC1B,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAqB;IAC3C,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACnD,wEAAwE;QACxE,+DAA+D;QAC/D,KAAK,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;IACxC,CAAC;AACH,CAAC"}
|
|
@@ -5,6 +5,8 @@ export declare function shotStats(): {
|
|
|
5
5
|
budget: number;
|
|
6
6
|
};
|
|
7
7
|
export declare function isRecording(): boolean;
|
|
8
|
+
export type RecordingOutcome = 'recording' | 'sampled_out' | 'start_failed' | 'not_started';
|
|
9
|
+
export declare function recordingOutcome(): RecordingOutcome;
|
|
8
10
|
export declare function startRecording(opts: {
|
|
9
11
|
sessionId: string;
|
|
10
12
|
userId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobileRecorder.d.ts","sourceRoot":"","sources":["../../src/core/mobileRecorder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mobileRecorder.d.ts","sourceRoot":"","sources":["../../src/core/mobileRecorder.ts"],"names":[],"mappings":"AA2EA,iEAAiE;AACjE,wBAAgB,SAAS,IAAI;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAElF;AA0DD,wBAAgB,WAAW,IAAI,OAAO,CAErC;AA2CD,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,aAAa,CAAC;AAE5F,wBAAgB,gBAAgB,IAAI,gBAAgB,CAEnD;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC;CACnE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiEhB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAI9E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAIjF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAsB;AAC5E,wBAAgB,eAAe,IAAI,IAAI,CAAuB;AAE9D,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAIvE;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAI1E;AAKD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,IAAI,CAOhE;AA0BD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9C;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAcnD"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.shotStats = shotStats;
|
|
4
4
|
exports.isRecording = isRecording;
|
|
5
|
+
exports.recordingOutcome = recordingOutcome;
|
|
5
6
|
exports.startRecording = startRecording;
|
|
6
7
|
exports.recordFrame = recordFrame;
|
|
7
8
|
exports.recordScreen = recordScreen;
|
|
@@ -26,6 +27,7 @@ exports.stopRecording = stopRecording;
|
|
|
26
27
|
*
|
|
27
28
|
* Never records entered text: value_change frames store a masked placeholder.
|
|
28
29
|
*/
|
|
30
|
+
const captureLedger_1 = require("./captureLedger");
|
|
29
31
|
const network_1 = require("./network");
|
|
30
32
|
const interactionObserver_1 = require("../instrumented/interactionObserver");
|
|
31
33
|
const viewShot_1 = require("./viewShot");
|
|
@@ -102,15 +104,21 @@ function captureShot(reason, force = false) {
|
|
|
102
104
|
: Promise.resolve().then(() => provider()));
|
|
103
105
|
take()
|
|
104
106
|
.then((b64) => {
|
|
105
|
-
if (!recordingId
|
|
107
|
+
if (!recordingId)
|
|
106
108
|
return;
|
|
109
|
+
if (!b64) {
|
|
110
|
+
captureLedger_1.ledger.shot('empty');
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
107
113
|
const bytes = b64Bytes(b64);
|
|
108
114
|
if (bytes > SHOT_MAX_BYTES) {
|
|
109
115
|
shotsDropped += 1;
|
|
116
|
+
captureLedger_1.ledger.shot('dropped');
|
|
110
117
|
return; // one oversized frame, skipped
|
|
111
118
|
}
|
|
112
119
|
if (shotBytesUsed + bytes > SHOT_BUDGET_BYTES) {
|
|
113
120
|
shotsDropped += 1;
|
|
121
|
+
captureLedger_1.ledger.shot('dropped');
|
|
114
122
|
if (!budgetNotified) {
|
|
115
123
|
budgetNotified = true;
|
|
116
124
|
if ((0, network_1.getConfig)()?.debug) {
|
|
@@ -122,8 +130,9 @@ function captureShot(reason, force = false) {
|
|
|
122
130
|
}
|
|
123
131
|
shotBytesUsed += bytes;
|
|
124
132
|
recordFrame('screenshot', { image: b64, format: 'jpg', reason });
|
|
133
|
+
captureLedger_1.ledger.shot('taken');
|
|
125
134
|
})
|
|
126
|
-
.catch(() => { });
|
|
135
|
+
.catch(() => { captureLedger_1.ledger.shot('failed'); /* screenshots are best-effort */ });
|
|
127
136
|
}, 350);
|
|
128
137
|
}
|
|
129
138
|
function isRecording() {
|
|
@@ -169,6 +178,10 @@ function shouldRecordSession(applicationId, sessionId, rate) {
|
|
|
169
178
|
// render that), and it would also defeat the "one recording per session"
|
|
170
179
|
// invariant onSessionRollover enforces.
|
|
171
180
|
let sampledOutFor = null;
|
|
181
|
+
let lastOutcome = 'not_started';
|
|
182
|
+
function recordingOutcome() {
|
|
183
|
+
return recordingId ? 'recording' : lastOutcome;
|
|
184
|
+
}
|
|
172
185
|
async function startRecording(opts) {
|
|
173
186
|
if (recordingId)
|
|
174
187
|
return;
|
|
@@ -183,6 +196,7 @@ async function startRecording(opts) {
|
|
|
183
196
|
sampledOutFor = keep ? null : opts.sessionId;
|
|
184
197
|
}
|
|
185
198
|
if (sampledOutFor === opts.sessionId) {
|
|
199
|
+
lastOutcome = 'sampled_out';
|
|
186
200
|
// No capture, no upload — behaves exactly like recording.enabled=false for
|
|
187
201
|
// this session. Return silently; the caller doesn't need to distinguish
|
|
188
202
|
// "sampled out" from "already running" — both cases mean "nothing more to do".
|
|
@@ -203,8 +217,10 @@ async function startRecording(opts) {
|
|
|
203
217
|
privacy: { maskInputs },
|
|
204
218
|
});
|
|
205
219
|
const id = res.success && res.data ? (res.data.recordingId ?? null) : null;
|
|
206
|
-
if (!id)
|
|
220
|
+
if (!id) {
|
|
221
|
+
lastOutcome = 'start_failed';
|
|
207
222
|
return;
|
|
223
|
+
}
|
|
208
224
|
recordingId = id;
|
|
209
225
|
startTs = Date.now();
|
|
210
226
|
buffer = [];
|
|
@@ -227,6 +243,7 @@ async function startRecording(opts) {
|
|
|
227
243
|
}
|
|
228
244
|
catch {
|
|
229
245
|
// Best-effort; a failed start just means no recording this session.
|
|
246
|
+
lastOutcome = 'start_failed';
|
|
230
247
|
}
|
|
231
248
|
}
|
|
232
249
|
function recordFrame(kind, data) {
|
|
@@ -328,6 +345,7 @@ async function stopRecording() {
|
|
|
328
345
|
if (!recordingId)
|
|
329
346
|
return;
|
|
330
347
|
const id = recordingId;
|
|
348
|
+
lastOutcome = 'not_started';
|
|
331
349
|
recordFrame('stop', {});
|
|
332
350
|
await flush();
|
|
333
351
|
if (unsubscribeInteractions) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobileRecorder.js","sourceRoot":"","sources":["../../src/core/mobileRecorder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mobileRecorder.js","sourceRoot":"","sources":["../../src/core/mobileRecorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,14 @@ export declare function sanitizeBody(raw: unknown): string | undefined;
|
|
|
34
34
|
export declare function startNetworkCapture(base: string, emitFn: EmitFn, opts?: {
|
|
35
35
|
bodies?: boolean;
|
|
36
36
|
}): boolean;
|
|
37
|
+
/** Whether fetch/XHR are patched right now — reported in the capture status. */
|
|
38
|
+
export declare function isNetworkCaptureActive(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Whether OUR fetch is still the global one. An app (or a library such as a
|
|
41
|
+
* polyfill or an HTTP client set up after the SDK) that assigns global.fetch
|
|
42
|
+
* after we patched it silently ends api_call capture for fetch.
|
|
43
|
+
*/
|
|
44
|
+
export declare function isFetchIntact(): boolean;
|
|
37
45
|
export declare function stopNetworkCapture(): void;
|
|
38
46
|
export {};
|
|
39
47
|
//# sourceMappingURL=networkCapture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networkCapture.d.ts","sourceRoot":"","sources":["../../src/core/networkCapture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,KAAK,OAAO,GAAG;IACb,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IACxD,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IACrD,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AACF,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"networkCapture.d.ts","sourceRoot":"","sources":["../../src/core/networkCapture.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,KAAK,OAAO,GAAG;IACb,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IACxD,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IACrD,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AACF,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AA6BtC,iBAAS,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGpC;AAeD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAExD;AAoDD,0BAA0B;AAC1B,eAAO,MAAM,WAAW,kBAAY,CAAC;AAqCrC,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAoB7D;AAqBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAwEtG;AAED,gFAAgF;AAChF,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAGvC;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAOzC"}
|
|
@@ -4,11 +4,14 @@ exports.__scrubPath = void 0;
|
|
|
4
4
|
exports.isConnectivityProbe = isConnectivityProbe;
|
|
5
5
|
exports.sanitizeBody = sanitizeBody;
|
|
6
6
|
exports.startNetworkCapture = startNetworkCapture;
|
|
7
|
+
exports.isNetworkCaptureActive = isNetworkCaptureActive;
|
|
8
|
+
exports.isFetchIntact = isFetchIntact;
|
|
7
9
|
exports.stopNetworkCapture = stopNetworkCapture;
|
|
8
10
|
let emit = null;
|
|
9
11
|
let apiBase = '';
|
|
10
12
|
let captureBodies = false;
|
|
11
13
|
let origFetch = null;
|
|
14
|
+
let ourFetch = null;
|
|
12
15
|
let origXhrOpen = null;
|
|
13
16
|
let origXhrSend = null;
|
|
14
17
|
/**
|
|
@@ -241,6 +244,7 @@ function startNetworkCapture(base, emitFn, opts) {
|
|
|
241
244
|
throw err;
|
|
242
245
|
});
|
|
243
246
|
};
|
|
247
|
+
ourFetch = g.fetch;
|
|
244
248
|
patchedAny = true;
|
|
245
249
|
}
|
|
246
250
|
// ── XMLHttpRequest ──
|
|
@@ -271,12 +275,27 @@ function startNetworkCapture(base, emitFn, opts) {
|
|
|
271
275
|
emit = null; // nothing hooked; do not claim capture is on
|
|
272
276
|
return patchedAny;
|
|
273
277
|
}
|
|
278
|
+
/** Whether fetch/XHR are patched right now — reported in the capture status. */
|
|
279
|
+
function isNetworkCaptureActive() {
|
|
280
|
+
return emit !== null;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Whether OUR fetch is still the global one. An app (or a library such as a
|
|
284
|
+
* polyfill or an HTTP client set up after the SDK) that assigns global.fetch
|
|
285
|
+
* after we patched it silently ends api_call capture for fetch.
|
|
286
|
+
*/
|
|
287
|
+
function isFetchIntact() {
|
|
288
|
+
if (!ourFetch)
|
|
289
|
+
return true;
|
|
290
|
+
return globalThis.fetch === ourFetch;
|
|
291
|
+
}
|
|
274
292
|
function stopNetworkCapture() {
|
|
275
293
|
const g = globalThis;
|
|
276
294
|
if (origFetch) {
|
|
277
295
|
g.fetch = origFetch;
|
|
278
296
|
origFetch = null;
|
|
279
297
|
}
|
|
298
|
+
ourFetch = null;
|
|
280
299
|
const XHR = g.XMLHttpRequest;
|
|
281
300
|
if (XHR && origXhrOpen) {
|
|
282
301
|
XHR.prototype.open = origXhrOpen;
|