@cubenest/rrweb-core 0.1.0-alpha.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/NOTICE +15 -0
- package/README.md +26 -0
- package/dist/compat/index.d.ts +37 -0
- package/dist/compat/index.d.ts.map +1 -0
- package/dist/compat/index.js +97 -0
- package/dist/compat/index.js.map +1 -0
- package/dist/compression/index.d.ts +24 -0
- package/dist/compression/index.d.ts.map +1 -0
- package/dist/compression/index.js +61 -0
- package/dist/compression/index.js.map +1 -0
- package/dist/console/buffer.d.ts +99 -0
- package/dist/console/buffer.d.ts.map +1 -0
- package/dist/console/buffer.js +169 -0
- package/dist/console/buffer.js.map +1 -0
- package/dist/console/index.d.ts +3 -0
- package/dist/console/index.d.ts.map +1 -0
- package/dist/console/index.js +16 -0
- package/dist/console/index.js.map +1 -0
- package/dist/console/types.d.ts +61 -0
- package/dist/console/types.d.ts.map +1 -0
- package/dist/console/types.js +11 -0
- package/dist/console/types.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/masking/body.d.ts +30 -0
- package/dist/masking/body.d.ts.map +1 -0
- package/dist/masking/body.js +33 -0
- package/dist/masking/body.js.map +1 -0
- package/dist/masking/headers.d.ts +16 -0
- package/dist/masking/headers.d.ts.map +1 -0
- package/dist/masking/headers.js +46 -0
- package/dist/masking/headers.js.map +1 -0
- package/dist/masking/index.d.ts +8 -0
- package/dist/masking/index.d.ts.map +1 -0
- package/dist/masking/index.js +11 -0
- package/dist/masking/index.js.map +1 -0
- package/dist/masking/inputs.d.ts +15 -0
- package/dist/masking/inputs.d.ts.map +1 -0
- package/dist/masking/inputs.js +36 -0
- package/dist/masking/inputs.js.map +1 -0
- package/dist/masking/regex.d.ts +96 -0
- package/dist/masking/regex.d.ts.map +1 -0
- package/dist/masking/regex.js +182 -0
- package/dist/masking/regex.js.map +1 -0
- package/dist/masking/selectors.d.ts +67 -0
- package/dist/masking/selectors.d.ts.map +1 -0
- package/dist/masking/selectors.js +137 -0
- package/dist/masking/selectors.js.map +1 -0
- package/dist/masking/text.d.ts +9 -0
- package/dist/masking/text.d.ts.map +1 -0
- package/dist/masking/text.js +15 -0
- package/dist/masking/text.js.map +1 -0
- package/dist/network/cdp.d.ts +54 -0
- package/dist/network/cdp.d.ts.map +1 -0
- package/dist/network/cdp.js +282 -0
- package/dist/network/cdp.js.map +1 -0
- package/dist/network/index.d.ts +4 -0
- package/dist/network/index.d.ts.map +1 -0
- package/dist/network/index.js +14 -0
- package/dist/network/index.js.map +1 -0
- package/dist/network/types.d.ts +133 -0
- package/dist/network/types.d.ts.map +1 -0
- package/dist/network/types.js +35 -0
- package/dist/network/types.js.map +1 -0
- package/dist/network/web-request.d.ts +76 -0
- package/dist/network/web-request.d.ts.map +1 -0
- package/dist/network/web-request.js +294 -0
- package/dist/network/web-request.js.map +1 -0
- package/dist/persistence/index.d.ts +3 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +11 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/store.d.ts +18 -0
- package/dist/persistence/store.d.ts.map +1 -0
- package/dist/persistence/store.js +327 -0
- package/dist/persistence/store.js.map +1 -0
- package/dist/persistence/types.d.ts +76 -0
- package/dist/persistence/types.d.ts.map +1 -0
- package/dist/persistence/types.js +21 -0
- package/dist/persistence/types.js.map +1 -0
- package/dist/rrweb.d.ts +5 -0
- package/dist/rrweb.d.ts.map +1 -0
- package/dist/rrweb.js +13 -0
- package/dist/rrweb.js.map +1 -0
- package/dist/screenshot/base64.d.ts +8 -0
- package/dist/screenshot/base64.d.ts.map +1 -0
- package/dist/screenshot/base64.js +21 -0
- package/dist/screenshot/base64.js.map +1 -0
- package/dist/screenshot/cdp.d.ts +50 -0
- package/dist/screenshot/cdp.d.ts.map +1 -0
- package/dist/screenshot/cdp.js +65 -0
- package/dist/screenshot/cdp.js.map +1 -0
- package/dist/screenshot/index.d.ts +4 -0
- package/dist/screenshot/index.d.ts.map +1 -0
- package/dist/screenshot/index.js +10 -0
- package/dist/screenshot/index.js.map +1 -0
- package/dist/screenshot/tabs.d.ts +44 -0
- package/dist/screenshot/tabs.d.ts.map +1 -0
- package/dist/screenshot/tabs.js +63 -0
- package/dist/screenshot/tabs.js.map +1 -0
- package/dist/screenshot/types.d.ts +27 -0
- package/dist/screenshot/types.d.ts.map +1 -0
- package/dist/screenshot/types.js +18 -0
- package/dist/screenshot/types.js.map +1 -0
- package/dist/shadow-dom/index.d.ts +3 -0
- package/dist/shadow-dom/index.d.ts.map +1 -0
- package/dist/shadow-dom/index.js +8 -0
- package/dist/shadow-dom/index.js.map +1 -0
- package/dist/shadow-dom/traverse.d.ts +54 -0
- package/dist/shadow-dom/traverse.d.ts.map +1 -0
- package/dist/shadow-dom/traverse.js +209 -0
- package/dist/shadow-dom/traverse.js.map +1 -0
- package/dist/shadow-dom/types.d.ts +43 -0
- package/dist/shadow-dom/types.d.ts.map +1 -0
- package/dist/shadow-dom/types.js +25 -0
- package/dist/shadow-dom/types.js.map +1 -0
- package/dist/throttling/apply.d.ts +59 -0
- package/dist/throttling/apply.d.ts.map +1 -0
- package/dist/throttling/apply.js +101 -0
- package/dist/throttling/apply.js.map +1 -0
- package/dist/throttling/defaults.d.ts +60 -0
- package/dist/throttling/defaults.d.ts.map +1 -0
- package/dist/throttling/defaults.js +81 -0
- package/dist/throttling/defaults.js.map +1 -0
- package/dist/throttling/guards.d.ts +69 -0
- package/dist/throttling/guards.d.ts.map +1 -0
- package/dist/throttling/guards.js +212 -0
- package/dist/throttling/guards.js.map +1 -0
- package/dist/throttling/index.d.ts +5 -0
- package/dist/throttling/index.d.ts.map +1 -0
- package/dist/throttling/index.js +11 -0
- package/dist/throttling/index.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
// chrome.webRequest network adapter — Task 1.7.
|
|
2
|
+
//
|
|
3
|
+
// Subscribes to the chrome.webRequest event family from the extension
|
|
4
|
+
// service worker. P2/peek owns the listener; we accept the event source as
|
|
5
|
+
// a parameter rather than reading `chrome.webRequest` off a global so the
|
|
6
|
+
// substrate stays environment-agnostic.
|
|
7
|
+
//
|
|
8
|
+
// chrome.webRequest reports an HTTP exchange across multiple events:
|
|
9
|
+
//
|
|
10
|
+
// - onBeforeRequest — request URL + method + body (limited)
|
|
11
|
+
// - onSendHeaders — final request headers (after browser merging)
|
|
12
|
+
// - onHeadersReceived — response headers, status
|
|
13
|
+
// - onCompleted — terminal success: cache hint + size + final ts
|
|
14
|
+
// - onErrorOccurred — terminal failure: error string
|
|
15
|
+
//
|
|
16
|
+
// We correlate by `requestId` (chrome.webRequest's own monotonic id, scoped
|
|
17
|
+
// to a profile). Bodies are NOT accessible via chrome.webRequest in MV3 —
|
|
18
|
+
// the `requestBody` field is only populated by `onBeforeRequest` and only
|
|
19
|
+
// for form-encoded payloads, but our adapter doesn't depend on it: we
|
|
20
|
+
// surface what the transport gives us, and `responseBody` is always
|
|
21
|
+
// undefined here.
|
|
22
|
+
import { redactBody, redactNetworkHeaders } from '../masking';
|
|
23
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
24
|
+
// chrome.webRequest payload narrowing
|
|
25
|
+
// ────────────────────────────────────────────────────────────────────────────
|
|
26
|
+
function readNumber(value) {
|
|
27
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
28
|
+
}
|
|
29
|
+
function readString(value) {
|
|
30
|
+
return typeof value === 'string' ? value : undefined;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* chrome.webRequest serializes headers as `{ name, value }[]` (preserving
|
|
34
|
+
* insertion order). We collapse to a plain record — the masking module
|
|
35
|
+
* already handles case-insensitive matching, so the lossy collapse is
|
|
36
|
+
* cheap and matches the CDP path's shape.
|
|
37
|
+
*/
|
|
38
|
+
function readHeaderArray(value) {
|
|
39
|
+
if (!Array.isArray(value))
|
|
40
|
+
return {};
|
|
41
|
+
const out = {};
|
|
42
|
+
for (const item of value) {
|
|
43
|
+
if (item === null || typeof item !== 'object')
|
|
44
|
+
continue;
|
|
45
|
+
const entry = item;
|
|
46
|
+
const name = readString(entry.name);
|
|
47
|
+
if (name === undefined)
|
|
48
|
+
continue;
|
|
49
|
+
// chrome.webRequest may expose `binaryValue` for non-UTF-8 headers; we
|
|
50
|
+
// ignore those (they're rare in practice — bodies/cookies aside).
|
|
51
|
+
const headerValue = readString(entry.value);
|
|
52
|
+
if (headerValue !== undefined)
|
|
53
|
+
out[name] = headerValue;
|
|
54
|
+
}
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* chrome.webRequest's `requestBody` field shape on `onBeforeRequest`:
|
|
59
|
+
* { formData?: Record<string, string[]>, raw?: { bytes: ArrayBuffer }[] }
|
|
60
|
+
*
|
|
61
|
+
* `formData` is the only field that's safely textual. We serialize it to a
|
|
62
|
+
* stable querystring-like representation so the redactor has something to
|
|
63
|
+
* scan; `raw` is left alone (binary).
|
|
64
|
+
*/
|
|
65
|
+
function readRequestBody(value) {
|
|
66
|
+
if (value === null || typeof value !== 'object')
|
|
67
|
+
return undefined;
|
|
68
|
+
const formData = value.formData;
|
|
69
|
+
if (formData === null || typeof formData !== 'object')
|
|
70
|
+
return undefined;
|
|
71
|
+
const parts = [];
|
|
72
|
+
for (const [key, values] of Object.entries(formData)) {
|
|
73
|
+
if (!Array.isArray(values))
|
|
74
|
+
continue;
|
|
75
|
+
for (const v of values) {
|
|
76
|
+
if (typeof v === 'string')
|
|
77
|
+
parts.push(`${key}=${v}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return parts.length > 0 ? parts.join('&') : undefined;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Build a `NetworkCaptureAdapter` that consumes chrome.webRequest events.
|
|
84
|
+
*
|
|
85
|
+
* The adapter installs five listeners on `source`, all gated by
|
|
86
|
+
* `options.filter` (defaulting to `{ urls: ['<all_urls>'] }`). On
|
|
87
|
+
* `dispose()` every listener is removed and the in-flight map is cleared.
|
|
88
|
+
*
|
|
89
|
+
* @param source A `WebRequestEventSource` — typically the global
|
|
90
|
+
* `chrome.webRequest` itself.
|
|
91
|
+
* @param options `{ filter?, maxBodyBytes?, extraInfoSpec? }`.
|
|
92
|
+
*/
|
|
93
|
+
export function createWebRequestNetworkAdapter(source, options = {}) {
|
|
94
|
+
const filter = options.filter ?? { urls: ['<all_urls>'] };
|
|
95
|
+
const maxBodyBytes = options.maxBodyBytes ?? 1024 * 1024;
|
|
96
|
+
const extraInfo = options.extraInfoSpec ?? {};
|
|
97
|
+
const onBeforeRequestExtra = extraInfo.onBeforeRequest ?? ['requestBody'];
|
|
98
|
+
const onSendHeadersExtra = extraInfo.onSendHeaders ?? ['requestHeaders'];
|
|
99
|
+
const onHeadersReceivedExtra = extraInfo.onHeadersReceived ?? ['responseHeaders'];
|
|
100
|
+
const inFlight = new Map();
|
|
101
|
+
const requestHandlers = new Set();
|
|
102
|
+
const responseHandlers = new Set();
|
|
103
|
+
const errorHandlers = new Set();
|
|
104
|
+
const emitRequest = (req) => {
|
|
105
|
+
for (const h of requestHandlers)
|
|
106
|
+
h(req);
|
|
107
|
+
};
|
|
108
|
+
const emitResponse = (res) => {
|
|
109
|
+
for (const h of responseHandlers)
|
|
110
|
+
h(res);
|
|
111
|
+
};
|
|
112
|
+
const emitError = (err) => {
|
|
113
|
+
for (const h of errorHandlers)
|
|
114
|
+
h(err);
|
|
115
|
+
};
|
|
116
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
117
|
+
// onBeforeRequest — emit CapturedRequest with whatever we know now.
|
|
118
|
+
//
|
|
119
|
+
// chrome.webRequest's `timeStamp` is already in ms epoch.
|
|
120
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
121
|
+
// biome-ignore lint/suspicious/noExplicitAny: webRequest's per-event payload is documented separately.
|
|
122
|
+
const beforeRequestListener = (details) => {
|
|
123
|
+
if (details === null || typeof details !== 'object')
|
|
124
|
+
return;
|
|
125
|
+
const requestId = readString(details.requestId);
|
|
126
|
+
if (requestId === undefined)
|
|
127
|
+
return;
|
|
128
|
+
const startTs = readNumber(details.timeStamp) ?? Date.now();
|
|
129
|
+
const requestBodyRaw = readRequestBody(details.requestBody);
|
|
130
|
+
const requestBody = requestBodyRaw !== undefined
|
|
131
|
+
? redactBody(requestBodyRaw, { maxLengthBytes: maxBodyBytes })
|
|
132
|
+
: undefined;
|
|
133
|
+
const captured = {
|
|
134
|
+
id: requestId,
|
|
135
|
+
ts: startTs,
|
|
136
|
+
url: readString(details.url) ?? '',
|
|
137
|
+
method: readString(details.method) ?? 'GET',
|
|
138
|
+
// onBeforeRequest doesn't carry headers — they arrive on onSendHeaders.
|
|
139
|
+
// We start with an empty record; onSendHeaders upgrades the entry.
|
|
140
|
+
headers: {},
|
|
141
|
+
...(requestBody !== undefined ? { requestBody } : {}),
|
|
142
|
+
...(readString(details.type) !== undefined
|
|
143
|
+
? { resourceType: readString(details.type) }
|
|
144
|
+
: {}),
|
|
145
|
+
};
|
|
146
|
+
inFlight.set(requestId, {
|
|
147
|
+
startTs,
|
|
148
|
+
request: captured,
|
|
149
|
+
headersUpgraded: false,
|
|
150
|
+
});
|
|
151
|
+
emitRequest(captured);
|
|
152
|
+
};
|
|
153
|
+
source.onBeforeRequest.addListener(beforeRequestListener, filter, onBeforeRequestExtra);
|
|
154
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
155
|
+
// onSendHeaders — final request headers. We mutate the in-flight record
|
|
156
|
+
// so a later request-emission won't lose them; we DO NOT re-emit the
|
|
157
|
+
// request (consumers expect one onRequest event per exchange).
|
|
158
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
159
|
+
// biome-ignore lint/suspicious/noExplicitAny: webRequest's per-event payload is documented separately.
|
|
160
|
+
const sendHeadersListener = (details) => {
|
|
161
|
+
if (details === null || typeof details !== 'object')
|
|
162
|
+
return;
|
|
163
|
+
const requestId = readString(details.requestId);
|
|
164
|
+
if (requestId === undefined)
|
|
165
|
+
return;
|
|
166
|
+
const entry = inFlight.get(requestId);
|
|
167
|
+
if (entry === undefined)
|
|
168
|
+
return;
|
|
169
|
+
const headers = redactNetworkHeaders(readHeaderArray(details.requestHeaders));
|
|
170
|
+
entry.request = { ...entry.request, headers };
|
|
171
|
+
entry.headersUpgraded = true;
|
|
172
|
+
};
|
|
173
|
+
source.onSendHeaders.addListener(sendHeadersListener, filter, onSendHeadersExtra);
|
|
174
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
175
|
+
// onHeadersReceived — record response status + headers; defer emission
|
|
176
|
+
// until onCompleted (matches the CDP path, which also defers).
|
|
177
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
178
|
+
// biome-ignore lint/suspicious/noExplicitAny: webRequest's per-event payload is documented separately.
|
|
179
|
+
const headersReceivedListener = (details) => {
|
|
180
|
+
if (details === null || typeof details !== 'object')
|
|
181
|
+
return;
|
|
182
|
+
const requestId = readString(details.requestId);
|
|
183
|
+
if (requestId === undefined)
|
|
184
|
+
return;
|
|
185
|
+
const entry = inFlight.get(requestId);
|
|
186
|
+
if (entry === undefined)
|
|
187
|
+
return;
|
|
188
|
+
const headers = redactNetworkHeaders(readHeaderArray(details.responseHeaders));
|
|
189
|
+
entry.pendingResponse = {
|
|
190
|
+
status: readNumber(details.statusCode) ?? 0,
|
|
191
|
+
...(readString(details.statusLine) !== undefined
|
|
192
|
+
? { statusText: readString(details.statusLine) }
|
|
193
|
+
: {}),
|
|
194
|
+
headers,
|
|
195
|
+
};
|
|
196
|
+
};
|
|
197
|
+
source.onHeadersReceived.addListener(headersReceivedListener, filter, onHeadersReceivedExtra);
|
|
198
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
199
|
+
// onCompleted — terminal success. Emit CapturedResponse.
|
|
200
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
201
|
+
// biome-ignore lint/suspicious/noExplicitAny: webRequest's per-event payload is documented separately.
|
|
202
|
+
const completedListener = (details) => {
|
|
203
|
+
if (details === null || typeof details !== 'object')
|
|
204
|
+
return;
|
|
205
|
+
const requestId = readString(details.requestId);
|
|
206
|
+
if (requestId === undefined)
|
|
207
|
+
return;
|
|
208
|
+
const entry = inFlight.get(requestId);
|
|
209
|
+
if (entry === undefined)
|
|
210
|
+
return;
|
|
211
|
+
const ts = readNumber(details.timeStamp) ?? Date.now();
|
|
212
|
+
const durationMs = Math.max(0, ts - entry.startTs);
|
|
213
|
+
const encodedSize = readNumber(details.responseSize);
|
|
214
|
+
const fromCache = details.fromCache === true;
|
|
215
|
+
const pending = entry.pendingResponse ?? {
|
|
216
|
+
status: readNumber(details.statusCode) ?? 0,
|
|
217
|
+
headers: {},
|
|
218
|
+
};
|
|
219
|
+
const captured = {
|
|
220
|
+
id: requestId,
|
|
221
|
+
ts,
|
|
222
|
+
status: pending.status,
|
|
223
|
+
...(pending.statusText !== undefined ? { statusText: pending.statusText } : {}),
|
|
224
|
+
headers: pending.headers,
|
|
225
|
+
fromCache,
|
|
226
|
+
...(encodedSize !== undefined ? { encodedSize } : {}),
|
|
227
|
+
durationMs,
|
|
228
|
+
};
|
|
229
|
+
inFlight.delete(requestId);
|
|
230
|
+
emitResponse(captured);
|
|
231
|
+
};
|
|
232
|
+
source.onCompleted.addListener(completedListener, filter);
|
|
233
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
234
|
+
// onErrorOccurred — terminal failure. Emit CapturedResponse with
|
|
235
|
+
// errorText AND a parallel onError event.
|
|
236
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
237
|
+
// biome-ignore lint/suspicious/noExplicitAny: webRequest's per-event payload is documented separately.
|
|
238
|
+
const errorOccurredListener = (details) => {
|
|
239
|
+
if (details === null || typeof details !== 'object')
|
|
240
|
+
return;
|
|
241
|
+
const requestId = readString(details.requestId);
|
|
242
|
+
if (requestId === undefined)
|
|
243
|
+
return;
|
|
244
|
+
const entry = inFlight.get(requestId);
|
|
245
|
+
const ts = readNumber(details.timeStamp) ?? Date.now();
|
|
246
|
+
const errorText = readString(details.error) ?? 'unknown';
|
|
247
|
+
const durationMs = entry !== undefined ? Math.max(0, ts - entry.startTs) : undefined;
|
|
248
|
+
const fromCache = details.fromCache === true;
|
|
249
|
+
const pending = entry?.pendingResponse ?? { status: 0, headers: {} };
|
|
250
|
+
const captured = {
|
|
251
|
+
id: requestId,
|
|
252
|
+
ts,
|
|
253
|
+
status: pending.status,
|
|
254
|
+
...(pending.statusText !== undefined ? { statusText: pending.statusText } : {}),
|
|
255
|
+
headers: pending.headers,
|
|
256
|
+
fromCache,
|
|
257
|
+
...(durationMs !== undefined ? { durationMs } : {}),
|
|
258
|
+
errorText,
|
|
259
|
+
};
|
|
260
|
+
inFlight.delete(requestId);
|
|
261
|
+
emitResponse(captured);
|
|
262
|
+
emitError({ id: requestId, ts, errorText });
|
|
263
|
+
};
|
|
264
|
+
source.onErrorOccurred.addListener(errorOccurredListener, filter);
|
|
265
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
266
|
+
// Adapter surface
|
|
267
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
268
|
+
return {
|
|
269
|
+
onRequest(handler) {
|
|
270
|
+
requestHandlers.add(handler);
|
|
271
|
+
return () => requestHandlers.delete(handler);
|
|
272
|
+
},
|
|
273
|
+
onResponse(handler) {
|
|
274
|
+
responseHandlers.add(handler);
|
|
275
|
+
return () => responseHandlers.delete(handler);
|
|
276
|
+
},
|
|
277
|
+
onError(handler) {
|
|
278
|
+
errorHandlers.add(handler);
|
|
279
|
+
return () => errorHandlers.delete(handler);
|
|
280
|
+
},
|
|
281
|
+
async dispose() {
|
|
282
|
+
source.onBeforeRequest.removeListener(beforeRequestListener);
|
|
283
|
+
source.onSendHeaders.removeListener(sendHeadersListener);
|
|
284
|
+
source.onHeadersReceived.removeListener(headersReceivedListener);
|
|
285
|
+
source.onCompleted.removeListener(completedListener);
|
|
286
|
+
source.onErrorOccurred.removeListener(errorOccurredListener);
|
|
287
|
+
requestHandlers.clear();
|
|
288
|
+
responseHandlers.clear();
|
|
289
|
+
errorHandlers.clear();
|
|
290
|
+
inFlight.clear();
|
|
291
|
+
},
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
//# sourceMappingURL=web-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-request.js","sourceRoot":"","sources":["../../src/network/web-request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Public barrel for the IndexedDB persistence module.
|
|
2
|
+
//
|
|
3
|
+
// Locked surface per IMPLEMENTATION_PLAN.md Public API contract (line 726):
|
|
4
|
+
//
|
|
5
|
+
// export { createSessionStore, type SessionChunk } from './persistence';
|
|
6
|
+
//
|
|
7
|
+
// The factory + companion `SessionStore` / `SessionStoreOptions` types
|
|
8
|
+
// are re-exported so consumers can declare-and-pass without reaching
|
|
9
|
+
// into `./store` directly.
|
|
10
|
+
export { createSessionStore } from './store';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,4EAA4E;AAC5E,EAAE;AACF,2EAA2E;AAC3E,EAAE;AACF,uEAAuE;AACvE,qEAAqE;AACrE,2BAA2B;AAE3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SessionStore, SessionStoreOptions } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Open an IDB-backed chunk store for a session.
|
|
4
|
+
*
|
|
5
|
+
* The returned `SessionStore` is scoped to `sessionId`; all read/write
|
|
6
|
+
* operations are filtered by it. Multiple stores for different sessions
|
|
7
|
+
* can be opened concurrently — they share the same DB connection's
|
|
8
|
+
* keyspace but are isolated by the composite key.
|
|
9
|
+
*
|
|
10
|
+
* @param sessionId non-empty session identifier; used as the first
|
|
11
|
+
* component of every chunk's composite key
|
|
12
|
+
* @param options optional overrides (dbName, storeName, IDBFactory)
|
|
13
|
+
* @throws {Error} if `sessionId` is empty / non-string, or if no
|
|
14
|
+
* `IDBFactory` is available (`globalThis.indexedDB`
|
|
15
|
+
* undefined and `options.indexedDB` not provided)
|
|
16
|
+
*/
|
|
17
|
+
export declare function createSessionStore(sessionId: string, options?: SessionStoreOptions): Promise<SessionStore>;
|
|
18
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/persistence/store.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAAgB,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAkG/E;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAwNvB"}
|