procsi 0.4.0 → 0.5.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/README.md +47 -469
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +1 -0
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/off.d.ts.map +1 -1
- package/dist/cli/commands/off.js +11 -2
- package/dist/cli/commands/off.js.map +1 -1
- package/dist/cli/commands/on.d.ts +33 -0
- package/dist/cli/commands/on.d.ts.map +1 -1
- package/dist/cli/commands/on.js +91 -3
- package/dist/cli/commands/on.js.map +1 -1
- package/dist/cli/commands/requests.d.ts +25 -0
- package/dist/cli/commands/requests.d.ts.map +1 -1
- package/dist/cli/commands/requests.js +35 -4
- package/dist/cli/commands/requests.js.map +1 -1
- package/dist/cli/formatters/detail.d.ts.map +1 -1
- package/dist/cli/formatters/detail.js +6 -0
- package/dist/cli/formatters/detail.js.map +1 -1
- package/dist/cli/formatters/table.d.ts.map +1 -1
- package/dist/cli/formatters/table.js +11 -1
- package/dist/cli/formatters/table.js.map +1 -1
- package/dist/cli/tui/App.d.ts.map +1 -1
- package/dist/cli/tui/App.js +47 -2
- package/dist/cli/tui/App.js.map +1 -1
- package/dist/cli/tui/components/AccordionPanel.d.ts.map +1 -1
- package/dist/cli/tui/components/AccordionPanel.js +2 -1
- package/dist/cli/tui/components/AccordionPanel.js.map +1 -1
- package/dist/cli/tui/components/FilterBar.d.ts +10 -2
- package/dist/cli/tui/components/FilterBar.d.ts.map +1 -1
- package/dist/cli/tui/components/FilterBar.js +100 -12
- package/dist/cli/tui/components/FilterBar.js.map +1 -1
- package/dist/cli/tui/components/HelpModal.d.ts.map +1 -1
- package/dist/cli/tui/components/HelpModal.js +2 -1
- package/dist/cli/tui/components/HelpModal.js.map +1 -1
- package/dist/cli/tui/components/RequestListItem.d.ts +8 -0
- package/dist/cli/tui/components/RequestListItem.d.ts.map +1 -1
- package/dist/cli/tui/components/RequestListItem.js +14 -2
- package/dist/cli/tui/components/RequestListItem.js.map +1 -1
- package/dist/cli/tui/components/StatusBar.d.ts.map +1 -1
- package/dist/cli/tui/components/StatusBar.js +1 -0
- package/dist/cli/tui/components/StatusBar.js.map +1 -1
- package/dist/cli/tui/hooks/useRequests.d.ts +4 -1
- package/dist/cli/tui/hooks/useRequests.d.ts.map +1 -1
- package/dist/cli/tui/hooks/useRequests.js +36 -9
- package/dist/cli/tui/hooks/useRequests.js.map +1 -1
- package/dist/cli/tui/utils/filters.d.ts.map +1 -1
- package/dist/cli/tui/utils/filters.js +1 -0
- package/dist/cli/tui/utils/filters.js.map +1 -1
- package/dist/daemon/control.d.ts +3 -0
- package/dist/daemon/control.d.ts.map +1 -1
- package/dist/daemon/control.js +150 -1
- package/dist/daemon/control.js.map +1 -1
- package/dist/daemon/index.js +41 -2
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/procsi-client.d.ts.map +1 -1
- package/dist/daemon/procsi-client.js +1 -0
- package/dist/daemon/procsi-client.js.map +1 -1
- package/dist/daemon/proxy.d.ts +3 -0
- package/dist/daemon/proxy.d.ts.map +1 -1
- package/dist/daemon/proxy.js +19 -6
- package/dist/daemon/proxy.js.map +1 -1
- package/dist/daemon/replay-tracker.d.ts +11 -0
- package/dist/daemon/replay-tracker.d.ts.map +1 -0
- package/dist/daemon/replay-tracker.js +47 -0
- package/dist/daemon/replay-tracker.js.map +1 -0
- package/dist/daemon/replay.d.ts +20 -0
- package/dist/daemon/replay.d.ts.map +1 -0
- package/dist/daemon/replay.js +113 -0
- package/dist/daemon/replay.js.map +1 -0
- package/dist/daemon/storage.d.ts +12 -2
- package/dist/daemon/storage.d.ts.map +1 -1
- package/dist/daemon/storage.js +84 -7
- package/dist/daemon/storage.js.map +1 -1
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +167 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/overrides/php.d.ts +15 -0
- package/dist/overrides/php.d.ts.map +1 -0
- package/dist/overrides/php.js +29 -0
- package/dist/overrides/php.js.map +1 -0
- package/dist/overrides/python.d.ts +19 -0
- package/dist/overrides/python.d.ts.map +1 -0
- package/dist/overrides/python.js +74 -0
- package/dist/overrides/python.js.map +1 -0
- package/dist/overrides/ruby.d.ts +17 -0
- package/dist/overrides/ruby.d.ts.map +1 -0
- package/dist/overrides/ruby.js +55 -0
- package/dist/overrides/ruby.js.map +1 -0
- package/dist/shared/body-search.d.ts +28 -0
- package/dist/shared/body-search.d.ts.map +1 -0
- package/dist/shared/body-search.js +64 -0
- package/dist/shared/body-search.js.map +1 -0
- package/dist/shared/constants.d.ts +2 -0
- package/dist/shared/constants.d.ts.map +1 -1
- package/dist/shared/constants.js +2 -0
- package/dist/shared/constants.js.map +1 -1
- package/dist/shared/control-client.d.ts +23 -2
- package/dist/shared/control-client.d.ts.map +1 -1
- package/dist/shared/control-client.js +15 -2
- package/dist/shared/control-client.js.map +1 -1
- package/dist/shared/daemon.js +1 -0
- package/dist/shared/daemon.js.map +1 -1
- package/dist/shared/project.d.ts +4 -0
- package/dist/shared/project.d.ts.map +1 -1
- package/dist/shared/project.js +4 -0
- package/dist/shared/project.js.map +1 -1
- package/dist/shared/proxy-info.d.ts.map +1 -1
- package/dist/shared/proxy-info.js +5 -0
- package/dist/shared/proxy-info.js.map +1 -1
- package/dist/shared/regex-filter.d.ts +35 -0
- package/dist/shared/regex-filter.d.ts.map +1 -0
- package/dist/shared/regex-filter.js +81 -0
- package/dist/shared/regex-filter.js.map +1 -0
- package/dist/shared/types.d.ts +13 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/procsi/SKILL.md +9 -4
|
@@ -13,6 +13,7 @@ export function createProcsiClient(storage) {
|
|
|
13
13
|
getRequest: async (id) => storage.getRequest(id) ?? null,
|
|
14
14
|
searchBodies: async (options) => storage.searchBodies({
|
|
15
15
|
query: options.query,
|
|
16
|
+
target: options.target,
|
|
16
17
|
filter: options.filter,
|
|
17
18
|
limit: options.limit,
|
|
18
19
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"procsi-client.js","sourceRoot":"","sources":["../../src/daemon/procsi-client.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA0B;IAC3D,OAAO;QACL,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QAClE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAC9B,OAAO,CAAC,mBAAmB,CAAC;YAC1B,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,KAAK,EAAE,OAAO,EAAE,KAAK;YACrB,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC;QACJ,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI;QACxD,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAC9B,OAAO,CAAC,YAAY,CAAC;YACnB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;QACJ,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CACjC,OAAO,CAAC,eAAe,CAAC;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;KACL,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"procsi-client.js","sourceRoot":"","sources":["../../src/daemon/procsi-client.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA0B;IAC3D,OAAO;QACL,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QAClE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAC9B,OAAO,CAAC,mBAAmB,CAAC;YAC1B,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,KAAK,EAAE,OAAO,EAAE,KAAK;YACrB,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC;QACJ,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI;QACxD,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAC9B,OAAO,CAAC,YAAY,CAAC;YACnB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC;QACJ,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CACjC,OAAO,CAAC,eAAe,CAAC;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;KACL,CAAC;AACJ,CAAC"}
|
package/dist/daemon/proxy.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Headers } from "mockttp";
|
|
2
2
|
import type { RequestRepository } from "./storage.js";
|
|
3
3
|
import type { InterceptorRunner } from "./interceptor-runner.js";
|
|
4
|
+
import type { ReplayTracker } from "./replay-tracker.js";
|
|
4
5
|
import { type LogLevel } from "../shared/logger.js";
|
|
5
6
|
/** Default maximum body size to capture (10MB) */
|
|
6
7
|
export declare const DEFAULT_MAX_BODY_SIZE: number;
|
|
@@ -17,6 +18,8 @@ export interface ProxyOptions {
|
|
|
17
18
|
maxBodySize?: number;
|
|
18
19
|
/** Interceptor runner for mock/modify/observe interceptors */
|
|
19
20
|
interceptorRunner?: InterceptorRunner;
|
|
21
|
+
/** Tracks daemon-initiated replay requests via one-time replay tokens. */
|
|
22
|
+
replayTracker?: ReplayTracker;
|
|
20
23
|
}
|
|
21
24
|
export interface ProxyServer {
|
|
22
25
|
port: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/daemon/proxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmC,OAAO,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/daemon/proxy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmC,OAAO,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAqBlE,kDAAkD;AAClD,eAAO,MAAM,qBAAqB,QAAmB,CAAC;AAKtD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,uGAAuG;IACvG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,0EAA0E;IAC1E,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAeD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA0V7E;AAkBD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYvE"}
|
package/dist/daemon/proxy.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as mockttp from "mockttp";
|
|
2
2
|
import { createLogger } from "../shared/logger.js";
|
|
3
|
-
import { PROCSI_RUNTIME_SOURCE_HEADER, PROCSI_SESSION_ID_HEADER, PROCSI_SESSION_TOKEN_HEADER, } from "../shared/constants.js";
|
|
3
|
+
import { PROCSI_RUNTIME_SOURCE_HEADER, PROCSI_SESSION_ID_HEADER, PROCSI_SESSION_TOKEN_HEADER, PROCSI_REPLAY_TOKEN_HEADER, } from "../shared/constants.js";
|
|
4
4
|
/** Default maximum body size to capture (10MB) */
|
|
5
5
|
export const DEFAULT_MAX_BODY_SIZE = 10 * 1024 * 1024;
|
|
6
6
|
const MAX_RUNTIME_SOURCE_LENGTH = 32;
|
|
@@ -20,7 +20,7 @@ function normaliseRuntimeSource(value) {
|
|
|
20
20
|
* Create and start a MITM proxy server that captures all HTTP/HTTPS traffic.
|
|
21
21
|
*/
|
|
22
22
|
export async function createProxy(options) {
|
|
23
|
-
const { storage, sessionId, label, projectRoot, logLevel, interceptorRunner } = options;
|
|
23
|
+
const { storage, sessionId, label, projectRoot, logLevel, interceptorRunner, replayTracker } = options;
|
|
24
24
|
// Create logger if projectRoot is provided
|
|
25
25
|
const logger = projectRoot ? createLogger("proxy", projectRoot, logLevel) : undefined;
|
|
26
26
|
// Map to track request info for response correlation
|
|
@@ -93,6 +93,7 @@ export async function createProxy(options) {
|
|
|
93
93
|
const requestSessionId = storedHeaders[PROCSI_SESSION_ID_HEADER];
|
|
94
94
|
const requestSessionToken = storedHeaders[PROCSI_SESSION_TOKEN_HEADER];
|
|
95
95
|
const runtimeSourceHeader = storedHeaders[PROCSI_RUNTIME_SOURCE_HEADER];
|
|
96
|
+
const replayTokenHeader = storedHeaders[PROCSI_REPLAY_TOKEN_HEADER];
|
|
96
97
|
const legacySessionId = storedHeaders[LEGACY_SESSION_HEADER];
|
|
97
98
|
const headersCopy = { ...storedHeaders };
|
|
98
99
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
@@ -101,6 +102,8 @@ export async function createProxy(options) {
|
|
|
101
102
|
delete headersCopy[PROCSI_SESSION_TOKEN_HEADER];
|
|
102
103
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
103
104
|
delete headersCopy[PROCSI_RUNTIME_SOURCE_HEADER];
|
|
105
|
+
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
106
|
+
delete headersCopy[PROCSI_REPLAY_TOKEN_HEADER];
|
|
104
107
|
// Legacy header used before token hardening. Strip it for compatibility.
|
|
105
108
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
106
109
|
delete headersCopy[LEGACY_SESSION_HEADER];
|
|
@@ -150,6 +153,12 @@ export async function createProxy(options) {
|
|
|
150
153
|
requestBody: decodedBody,
|
|
151
154
|
requestBodyTruncated,
|
|
152
155
|
});
|
|
156
|
+
if (typeof replayTokenHeader === "string") {
|
|
157
|
+
const replay = replayTracker?.consume(replayTokenHeader);
|
|
158
|
+
if (replay) {
|
|
159
|
+
storage.updateRequestReplay(ourId, replay.replayedFromId, replay.replayInitiator);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
153
162
|
// Store mapping from mockttp ID to our ID and timestamp
|
|
154
163
|
requestInfo.set(request.id, { ourId, timestamp, requestBodyTruncated });
|
|
155
164
|
// Run interceptor if available
|
|
@@ -181,14 +190,16 @@ export async function createProxy(options) {
|
|
|
181
190
|
};
|
|
182
191
|
}
|
|
183
192
|
if (result?.interception) {
|
|
184
|
-
// forward() was called — record
|
|
185
|
-
|
|
193
|
+
// forward() was called — record interceptor name, but delay "modified" marking
|
|
194
|
+
// until we know the response was actually changed.
|
|
195
|
+
storage.updateRequestInterception(ourId, result.interception.name);
|
|
186
196
|
}
|
|
187
197
|
}
|
|
188
198
|
// Strip internal procsi attribution headers from the upstream request.
|
|
189
199
|
if (requestSessionId !== undefined ||
|
|
190
200
|
requestSessionToken !== undefined ||
|
|
191
201
|
runtimeSourceHeader !== undefined ||
|
|
202
|
+
replayTokenHeader !== undefined ||
|
|
192
203
|
legacySessionId !== undefined) {
|
|
193
204
|
const upstreamHeaders = flattenHeaders(request.headers);
|
|
194
205
|
const cleanedHeaders = { ...upstreamHeaders };
|
|
@@ -199,6 +210,8 @@ export async function createProxy(options) {
|
|
|
199
210
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
200
211
|
delete cleanedHeaders[PROCSI_RUNTIME_SOURCE_HEADER];
|
|
201
212
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
213
|
+
delete cleanedHeaders[PROCSI_REPLAY_TOKEN_HEADER];
|
|
214
|
+
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
202
215
|
delete cleanedHeaders[LEGACY_SESSION_HEADER];
|
|
203
216
|
return { headers: cleanedHeaders };
|
|
204
217
|
}
|
|
@@ -256,8 +269,8 @@ export async function createProxy(options) {
|
|
|
256
269
|
return buildMockttpResponse(interceptResult.responseOverride);
|
|
257
270
|
}
|
|
258
271
|
if (interceptResult?.interception) {
|
|
259
|
-
// Observe mode —
|
|
260
|
-
storage.updateRequestInterception(info.ourId, interceptResult.interception.name
|
|
272
|
+
// Observe mode — keep interceptor attribution without marking as modified.
|
|
273
|
+
storage.updateRequestInterception(info.ourId, interceptResult.interception.name);
|
|
261
274
|
}
|
|
262
275
|
}
|
|
263
276
|
// Update request with response data using our ID
|
package/dist/daemon/proxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/daemon/proxy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/daemon/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAMnC,OAAO,EAAE,YAAY,EAAiB,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAehC,kDAAkD;AAClD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACtD,MAAM,yBAAyB,GAAG,EAAE,CAAC;AACrC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AAChD,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAyBjD,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,yBAAyB,EAAE,CAAC;QAC3D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAqB;IACrD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,GAC1F,OAAO,CAAC;IAEV,2CAA2C;IAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtF,qDAAqD;IACrD,MAAM,WAAW,GAAG,IAAI,GAAG,EAGxB,CAAC;IAEJ,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,qBAAqB,CAAC;IAEjE,4DAA4D;IAC5D,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA8B,CAAC;IACjE,SAAS,gBAAgB,CAAC,GAAW;QACnC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACxC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,2DAA2D;IAC3D,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA+C,CAAC;IAChF,SAAS,uBAAuB,CAC9B,GAAW,EACX,KAAa;QAEb,MAAM,QAAQ,GAAG,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAChF,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC9B,KAAK,EAAE;YACL,OAAO,EAAE,OAAO,CAAC,SAAS;YAC1B,QAAQ,EAAE,OAAO,CAAC,UAAU;SAC7B;QACD,yCAAyC;QACzC,aAAa,EAAE,KAAK;QACpB,8DAA8D;QAC9D,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjC,oDAAoD;IACpD,+EAA+E;IAC/E,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,IAAI,IAAI,iBAAiB,EAAE,CAAC;YAC9B,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC,eAAe,CAAC;QAC3C,gEAAgE;QAChE,qBAAqB,EAAE,IAAI;QAE3B,aAAa,EAAE,KAAK,EAAE,OAAyB,EAAE,EAAE;YACjD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAE7B,qCAAqC;YACrC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAEjC,mCAAmC;YACnC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAEhD,kDAAkD;YAClD,gFAAgF;YAChF,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YACrE,MAAM,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,GAAG,CAAC,CAAC;YAEnF,kEAAkE;YAClE,2DAA2D;YAC3D,MAAM,WAAW,GACf,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAC5B,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClE,CAAC,CAAC,SAAS,CAAC;YAEhB,6EAA6E;YAC7E,MAAM,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;YACrC,OAAO,aAAa,CAAC,kBAAkB,CAAC,CAAC;YAEzC,qDAAqD;YACrD,MAAM,gBAAgB,GAAG,aAAa,CAAC,wBAAwB,CAAC,CAAC;YACjE,MAAM,mBAAmB,GAAG,aAAa,CAAC,2BAA2B,CAAC,CAAC;YACvE,MAAM,mBAAmB,GAAG,aAAa,CAAC,4BAA4B,CAAC,CAAC;YACxE,MAAM,iBAAiB,GAAG,aAAa,CAAC,0BAA0B,CAAC,CAAC;YACpE,MAAM,eAAe,GAAG,aAAa,CAAC,qBAAqB,CAAC,CAAC;YAC7D,MAAM,WAAW,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;YACzC,gEAAgE;YAChE,OAAO,WAAW,CAAC,wBAAwB,CAAC,CAAC;YAC7C,gEAAgE;YAChE,OAAO,WAAW,CAAC,2BAA2B,CAAC,CAAC;YAChD,gEAAgE;YAChE,OAAO,WAAW,CAAC,4BAA4B,CAAC,CAAC;YACjD,gEAAgE;YAChE,OAAO,WAAW,CAAC,0BAA0B,CAAC,CAAC;YAC/C,yEAAyE;YACzE,gEAAgE;YAChE,OAAO,WAAW,CAAC,qBAAqB,CAAC,CAAC;YAC1C,MAAM,kBAAkB,GAAG,WAAW,CAAC;YAEvC,2EAA2E;YAC3E,IAAI,kBAAkB,GAAG,SAAS,CAAC;YACnC,IAAI,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAChD,IAAI,kBAAkB,GAAG,KAAK,CAAC;YAC/B,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,OAAO,mBAAmB,KAAK,QAAQ,EAAE,CAAC;gBACpF,MAAM,OAAO,GAAG,uBAAuB,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;gBAC/E,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBAClB,kBAAkB,GAAG,gBAAgB,CAAC;oBACtC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;oBAC/B,kBAAkB,GAAG,IAAI,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,MAAM,EAAE,IAAI,CAAC,uDAAuD,EAAE;wBACpE,SAAS,EAAE,gBAAgB;qBAC5B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,IAAI,gBAAgB,KAAK,SAAS,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;gBAC1E,MAAM,EAAE,IAAI,CAAC,+DAA+D,CAAC,CAAC;YAChF,CAAC;YAED,6EAA6E;YAC7E,MAAM,aAAa,GAAG,kBAAkB;gBACtC,CAAC,CAAC,sBAAsB,CAAC,mBAAmB,CAAC;gBAC7C,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,MAAM,GAAG,aAAa,IAAI,aAAa,CAAC;YAE9C,MAAM,EAAE,KAAK,CAAC,kBAAkB,EAAE;gBAChC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,kBAAkB;gBAC3B,aAAa,EAAE,oBAAoB;aACpC,CAAC,CAAC;YAEH,2CAA2C;YAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC;gBAChC,SAAS,EAAE,kBAAkB;gBAC7B,KAAK;gBACL,MAAM;gBACN,SAAS;gBACT,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM;gBAC/B,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,WAAW;gBACxB,oBAAoB;aACrB,CAAC,CAAC;YAEH,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,aAAa,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBACzD,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;gBACpF,CAAC;YACH,CAAC;YAED,wDAAwD;YACxD,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAExE,+BAA+B;YAC/B,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,kBAAkB,GAAuB;oBAC7C,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;oBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,IAAI,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM;oBAC/B,OAAO,EAAE,EAAE,GAAG,kBAAkB,EAAE;oBAClC,IAAI,EAAE,WAAW;iBAClB,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;gBAEhF,IAAI,MAAM,EAAE,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBAChD,mEAAmE;oBACnE,OAAO,CAAC,yBAAyB,CAC/B,KAAK,EACL,MAAM,CAAC,YAAY,CAAC,IAAI,EACxB,MAAM,CAAC,YAAY,CAAC,IAAI,CACzB,CAAC;oBAEF,MAAM,QAAQ,GACZ,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,KAAK,QAAQ;wBAC1C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;wBACvC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC;oBAE/B,OAAO,CAAC,qBAAqB,CAAC,KAAK,EAAE;wBACnC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;wBAClC,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE;wBAC1C,IAAI,EAAE,QAAQ;wBACd,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;wBAClC,qBAAqB,EAAE,KAAK;qBAC7B,CAAC,CAAC;oBAEH,OAAO;wBACL,QAAQ,EAAE,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC;qBACpD,CAAC;gBACJ,CAAC;gBAED,IAAI,MAAM,EAAE,YAAY,EAAE,CAAC;oBACzB,+EAA+E;oBAC/E,mDAAmD;oBACnD,OAAO,CAAC,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;YAED,uEAAuE;YACvE,IACE,gBAAgB,KAAK,SAAS;gBAC9B,mBAAmB,KAAK,SAAS;gBACjC,mBAAmB,KAAK,SAAS;gBACjC,iBAAiB,KAAK,SAAS;gBAC/B,eAAe,KAAK,SAAS,EAC7B,CAAC;gBACD,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACxD,MAAM,cAAc,GAAG,EAAE,GAAG,eAAe,EAAE,CAAC;gBAC9C,gEAAgE;gBAChE,OAAO,cAAc,CAAC,wBAAwB,CAAC,CAAC;gBAChD,gEAAgE;gBAChE,OAAO,cAAc,CAAC,2BAA2B,CAAC,CAAC;gBACnD,gEAAgE;gBAChE,OAAO,cAAc,CAAC,4BAA4B,CAAC,CAAC;gBACpD,gEAAgE;gBAChE,OAAO,cAAc,CAAC,0BAA0B,CAAC,CAAC;gBAClD,gEAAgE;gBAChE,OAAO,cAAc,CAAC,qBAAqB,CAAC,CAAC;gBAC7C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;YACrC,CAAC;YAED,wDAAwD;YACxD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,cAAc,EAAE,KAAK,EAAE,QAA6B,EAAE,OAAyB,EAAE,EAAE;YACjF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAE/B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,mEAAmE;gBACnE,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YAE/C,mCAAmC;YACnC,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEjD,kDAAkD;YAClD,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YACrE,MAAM,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,GAAG,CAAC,CAAC;YAErF,0DAA0D;YAC1D,mDAAmD;YACnD,MAAM,WAAW,GACf,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAC7B,CAAC,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;gBACpE,CAAC,CAAC,SAAS,CAAC;YAEhB,6EAA6E;YAC7E,MAAM,aAAa,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;YACrC,OAAO,aAAa,CAAC,kBAAkB,CAAC,CAAC;YAEzC,MAAM,EAAE,KAAK,CAAC,eAAe,EAAE;gBAC7B,MAAM,EAAE,QAAQ,CAAC,UAAU;gBAC3B,UAAU;gBACV,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,aAAa,EAAE,qBAAqB;aACrC,CAAC,CAAC;YAEH,gDAAgD;YAChD,IAAI,iBAAiB,EAAE,CAAC;gBACtB,MAAM,gBAAgB,GAAwB;oBAC5C,MAAM,EAAE,QAAQ,CAAC,UAAU;oBAC3B,OAAO,EAAE,EAAE,GAAG,aAAa,EAAE;oBAC7B,IAAI,EAAE,WAAW;iBAClB,CAAC;gBAEF,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAC5D,IAAI,CAAC,KAAK,EACV,gBAAgB,CACjB,CAAC;gBAEF,IAAI,eAAe,EAAE,gBAAgB,IAAI,eAAe,CAAC,YAAY,EAAE,CAAC;oBACtE,gDAAgD;oBAChD,OAAO,CAAC,yBAAyB,CAC/B,IAAI,CAAC,KAAK,EACV,eAAe,CAAC,YAAY,CAAC,IAAI,EACjC,eAAe,CAAC,YAAY,CAAC,IAAI,CAClC,CAAC;oBAEF,MAAM,YAAY,GAChB,OAAO,eAAe,CAAC,gBAAgB,CAAC,IAAI,KAAK,QAAQ;wBACvD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC;wBACpD,CAAC,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC;oBAE5C,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE;wBACxC,MAAM,EAAE,eAAe,CAAC,gBAAgB,CAAC,MAAM;wBAC/C,OAAO,EAAE,eAAe,CAAC,gBAAgB,CAAC,OAAO,IAAI,aAAa;wBAClE,IAAI,EAAE,YAAY;wBAClB,UAAU;wBACV,qBAAqB,EAAE,KAAK;qBAC7B,CAAC,CAAC;oBAEH,OAAO,oBAAoB,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;gBAChE,CAAC;gBAED,IAAI,eAAe,EAAE,YAAY,EAAE,CAAC;oBAClC,2EAA2E;oBAC3E,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnF,CAAC;YACH,CAAC;YAED,iDAAiD;YACjD,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE;gBACxC,MAAM,EAAE,QAAQ,CAAC,UAAU;gBAC3B,OAAO,EAAE,aAAa;gBACtB,IAAI,EAAE,WAAW;gBACjB,UAAU;gBACV,qBAAqB;aACtB,CAAC,CAAC;YAEH,wDAAwD;YACxD,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,QAA6B;IAMzD,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,MAAM;QAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ReplayInitiator } from "../shared/types.js";
|
|
2
|
+
export interface ReplayTracker {
|
|
3
|
+
register(token: string, replayedFromId: string, replayInitiator: ReplayInitiator): void;
|
|
4
|
+
consume(token: string): {
|
|
5
|
+
replayedFromId: string;
|
|
6
|
+
replayInitiator: ReplayInitiator;
|
|
7
|
+
} | undefined;
|
|
8
|
+
close(): void;
|
|
9
|
+
}
|
|
10
|
+
export declare function createReplayTracker(): ReplayTracker;
|
|
11
|
+
//# sourceMappingURL=replay-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-tracker.d.ts","sourceRoot":"","sources":["../../src/daemon/replay-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAY1D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxF,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,eAAe,CAAA;KAAE,GAAG,SAAS,CAAC;IACjG,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,mBAAmB,IAAI,aAAa,CAoDnD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const REPLAY_TOKEN_TTL_MS = 60_000;
|
|
2
|
+
const REPLAY_TRACKER_CLEANUP_INTERVAL_MS = 30_000;
|
|
3
|
+
const REPLAY_TRACKER_MAX_ENTRIES = 1000;
|
|
4
|
+
export function createReplayTracker() {
|
|
5
|
+
const pending = new Map();
|
|
6
|
+
function cleanupExpired() {
|
|
7
|
+
const now = Date.now();
|
|
8
|
+
for (const [token, replay] of pending) {
|
|
9
|
+
if (now - replay.createdAt > REPLAY_TOKEN_TTL_MS) {
|
|
10
|
+
pending.delete(token);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const cleanupTimer = setInterval(cleanupExpired, REPLAY_TRACKER_CLEANUP_INTERVAL_MS);
|
|
15
|
+
return {
|
|
16
|
+
register(token, replayedFromId, replayInitiator) {
|
|
17
|
+
cleanupExpired();
|
|
18
|
+
if (pending.size >= REPLAY_TRACKER_MAX_ENTRIES) {
|
|
19
|
+
const oldestKey = pending.keys().next().value;
|
|
20
|
+
if (typeof oldestKey === "string") {
|
|
21
|
+
pending.delete(oldestKey);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
pending.set(token, {
|
|
25
|
+
replayedFromId,
|
|
26
|
+
replayInitiator,
|
|
27
|
+
createdAt: Date.now(),
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
consume(token) {
|
|
31
|
+
const replay = pending.get(token);
|
|
32
|
+
if (!replay) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
pending.delete(token);
|
|
36
|
+
return {
|
|
37
|
+
replayedFromId: replay.replayedFromId,
|
|
38
|
+
replayInitiator: replay.replayInitiator,
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
close() {
|
|
42
|
+
clearInterval(cleanupTimer);
|
|
43
|
+
pending.clear();
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=replay-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay-tracker.js","sourceRoot":"","sources":["../../src/daemon/replay-tracker.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACnC,MAAM,kCAAkC,GAAG,MAAM,CAAC;AAClD,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAcxC,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEjD,SAAS,cAAc;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACtC,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,GAAG,mBAAmB,EAAE,CAAC;gBACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,EAAE,kCAAkC,CAAC,CAAC;IAErF,OAAO;QACL,QAAQ,CAAC,KAAa,EAAE,cAAsB,EAAE,eAAgC;YAC9E,cAAc,EAAE,CAAC;YAEjB,IAAI,OAAO,CAAC,IAAI,IAAI,0BAA0B,EAAE,CAAC;gBAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;gBAC9C,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAClC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE;gBACjB,cAAc;gBACd,eAAe;gBACf,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CACL,KAAa;YAEb,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtB,OAAO;gBACL,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC,CAAC;QACJ,CAAC;QAED,KAAK;YACH,aAAa,CAAC,YAAY,CAAC,CAAC;YAC5B,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare function buildReplayHeaders(options: {
|
|
2
|
+
baseHeaders: Record<string, string>;
|
|
3
|
+
setHeaders?: Record<string, string>;
|
|
4
|
+
removeHeaders?: string[];
|
|
5
|
+
replayToken: string;
|
|
6
|
+
}): Record<string, string>;
|
|
7
|
+
export interface ReplayExecutionOptions {
|
|
8
|
+
proxyPort: number;
|
|
9
|
+
method: string;
|
|
10
|
+
url: string;
|
|
11
|
+
headers: Record<string, string>;
|
|
12
|
+
body?: Buffer;
|
|
13
|
+
timeoutMs?: number;
|
|
14
|
+
caCertPem?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ReplayExecutionResult {
|
|
17
|
+
status: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function replayViaProxy(options: ReplayExecutionOptions): Promise<ReplayExecutionResult>;
|
|
20
|
+
//# sourceMappingURL=replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/daemon/replay.ts"],"names":[],"mappings":"AA6DA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmCzB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAqChC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { ProxyAgent } from "undici";
|
|
2
|
+
import { PROCSI_REPLAY_TOKEN_HEADER, PROCSI_RUNTIME_SOURCE_HEADER, PROCSI_SESSION_ID_HEADER, PROCSI_SESSION_TOKEN_HEADER, } from "../shared/constants.js";
|
|
3
|
+
const DEFAULT_REPLAY_TIMEOUT_MS = 10_000;
|
|
4
|
+
const MIN_REPLAY_TIMEOUT_MS = 1_000;
|
|
5
|
+
const MAX_REPLAY_TIMEOUT_MS = 120_000;
|
|
6
|
+
const LOOPBACK_PROXY_HOST = "127.0.0.1";
|
|
7
|
+
function getErrorMessageWithCause(error) {
|
|
8
|
+
if (!(error instanceof Error)) {
|
|
9
|
+
return String(error);
|
|
10
|
+
}
|
|
11
|
+
const maybeCause = Reflect.get(error, "cause");
|
|
12
|
+
if (maybeCause instanceof Error) {
|
|
13
|
+
return `${error.message}: ${maybeCause.message}`;
|
|
14
|
+
}
|
|
15
|
+
if (typeof maybeCause === "string") {
|
|
16
|
+
return `${error.message}: ${maybeCause}`;
|
|
17
|
+
}
|
|
18
|
+
return error.message;
|
|
19
|
+
}
|
|
20
|
+
const HOP_BY_HOP_HEADERS = new Set([
|
|
21
|
+
"connection",
|
|
22
|
+
"keep-alive",
|
|
23
|
+
"proxy-authenticate",
|
|
24
|
+
"proxy-authorization",
|
|
25
|
+
"te",
|
|
26
|
+
"trailer",
|
|
27
|
+
"transfer-encoding",
|
|
28
|
+
"upgrade",
|
|
29
|
+
]);
|
|
30
|
+
const INTERNAL_HEADERS = new Set([
|
|
31
|
+
PROCSI_SESSION_ID_HEADER,
|
|
32
|
+
PROCSI_SESSION_TOKEN_HEADER,
|
|
33
|
+
PROCSI_RUNTIME_SOURCE_HEADER,
|
|
34
|
+
PROCSI_REPLAY_TOKEN_HEADER,
|
|
35
|
+
]);
|
|
36
|
+
function clampReplayTimeout(timeoutMs) {
|
|
37
|
+
const raw = timeoutMs ?? DEFAULT_REPLAY_TIMEOUT_MS;
|
|
38
|
+
return Math.max(MIN_REPLAY_TIMEOUT_MS, Math.min(MAX_REPLAY_TIMEOUT_MS, Math.floor(raw)));
|
|
39
|
+
}
|
|
40
|
+
function normaliseMethod(method) {
|
|
41
|
+
return method.toUpperCase();
|
|
42
|
+
}
|
|
43
|
+
function canHaveRequestBody(method) {
|
|
44
|
+
const upper = normaliseMethod(method);
|
|
45
|
+
return upper !== "GET" && upper !== "HEAD";
|
|
46
|
+
}
|
|
47
|
+
export function buildReplayHeaders(options) {
|
|
48
|
+
const headers = {};
|
|
49
|
+
for (const [name, value] of Object.entries(options.baseHeaders)) {
|
|
50
|
+
const lowerName = name.toLowerCase();
|
|
51
|
+
if (HOP_BY_HOP_HEADERS.has(lowerName) || INTERNAL_HEADERS.has(lowerName)) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
headers[lowerName] = value;
|
|
55
|
+
}
|
|
56
|
+
if (options.setHeaders) {
|
|
57
|
+
for (const [name, value] of Object.entries(options.setHeaders)) {
|
|
58
|
+
const lowerName = name.toLowerCase();
|
|
59
|
+
if (HOP_BY_HOP_HEADERS.has(lowerName) || INTERNAL_HEADERS.has(lowerName)) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
headers[lowerName] = value;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (options.removeHeaders) {
|
|
66
|
+
for (const name of options.removeHeaders) {
|
|
67
|
+
const lowerName = name.toLowerCase();
|
|
68
|
+
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
69
|
+
delete headers[lowerName];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Let fetch calculate content-length for us
|
|
73
|
+
delete headers["content-length"];
|
|
74
|
+
headers[PROCSI_REPLAY_TOKEN_HEADER] = options.replayToken;
|
|
75
|
+
return headers;
|
|
76
|
+
}
|
|
77
|
+
export async function replayViaProxy(options) {
|
|
78
|
+
const timeoutMs = clampReplayTimeout(options.timeoutMs);
|
|
79
|
+
const dispatcher = new ProxyAgent({
|
|
80
|
+
uri: `http://${LOOPBACK_PROXY_HOST}:${options.proxyPort}`,
|
|
81
|
+
requestTls: options.caCertPem ? { ca: options.caCertPem } : undefined,
|
|
82
|
+
});
|
|
83
|
+
const abortController = new AbortController();
|
|
84
|
+
const timeout = setTimeout(() => abortController.abort(), timeoutMs);
|
|
85
|
+
try {
|
|
86
|
+
const method = normaliseMethod(options.method);
|
|
87
|
+
const body = canHaveRequestBody(method) ? options.body : undefined;
|
|
88
|
+
const response = await fetch(options.url, {
|
|
89
|
+
method,
|
|
90
|
+
headers: options.headers,
|
|
91
|
+
body,
|
|
92
|
+
redirect: "manual",
|
|
93
|
+
signal: abortController.signal,
|
|
94
|
+
dispatcher,
|
|
95
|
+
});
|
|
96
|
+
// Drain response body so the request lifecycle completes.
|
|
97
|
+
await response.arrayBuffer();
|
|
98
|
+
return {
|
|
99
|
+
status: response.status,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
104
|
+
throw new Error(`Replay timed out after ${timeoutMs}ms`);
|
|
105
|
+
}
|
|
106
|
+
throw new Error(`Replay fetch failed: ${getErrorMessageWithCause(error)}`);
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
clearTimeout(timeout);
|
|
110
|
+
await dispatcher.close();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/daemon/replay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AACzC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AACtC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAExC,SAAS,wBAAwB,CAAC,KAAc;IAC9C,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,UAAU,YAAY,KAAK,EAAE,CAAC;QAChC,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;IACnD,CAAC;IACD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,YAAY;IACZ,YAAY;IACZ,oBAAoB;IACpB,qBAAqB;IACrB,IAAI;IACJ,SAAS;IACT,mBAAmB;IACnB,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,wBAAwB;IACxB,2BAA2B;IAC3B,4BAA4B;IAC5B,0BAA0B;CAC3B,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,SAA6B;IACvD,MAAM,GAAG,GAAG,SAAS,IAAI,yBAAyB,CAAC;IACnD,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,eAAe,CAAC,MAAc;IACrC,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;AAC9B,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACtC,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAKlC;IACC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACzE,SAAS;QACX,CAAC;QACD,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzE,SAAS;YACX,CAAC;YACD,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,gEAAgE;YAChE,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,OAAO,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEjC,OAAO,CAAC,0BAA0B,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAE1D,OAAO,OAAO,CAAC;AACjB,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA+B;IAE/B,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC;QAChC,GAAG,EAAE,UAAU,mBAAmB,IAAI,OAAO,CAAC,SAAS,EAAE;QACzD,UAAU,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;KACtE,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QAEnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;YACxC,MAAM;YACN,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI;YACJ,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,eAAe,CAAC,MAAM;YAC9B,UAAU;SACiC,CAAC,CAAC;QAE/C,0DAA0D;QAC1D,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE7B,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,0BAA0B,SAAS,IAAI,CAAC,CAAC;QAC3D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC"}
|
package/dist/daemon/storage.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CapturedRequest, CapturedRequestSummary, InterceptionType, JsonQueryResult, RegisteredSession, RequestFilter, Session } from "../shared/types.js";
|
|
1
|
+
import type { CapturedRequest, CapturedRequestSummary, InterceptionType, JsonQueryResult, RegisteredSession, RequestFilter, Session, BodySearchTarget, ReplayInitiator } from "../shared/types.js";
|
|
2
2
|
import { type LogLevel } from "../shared/logger.js";
|
|
3
3
|
export interface RepositoryOptions {
|
|
4
4
|
maxStoredRequests?: number;
|
|
@@ -13,6 +13,10 @@ export declare class RequestRepository {
|
|
|
13
13
|
* Apply pending database migrations using SQLite's user_version pragma for tracking.
|
|
14
14
|
*/
|
|
15
15
|
private applyMigrations;
|
|
16
|
+
/**
|
|
17
|
+
* Register custom SQLite functions used by filters.
|
|
18
|
+
*/
|
|
19
|
+
private registerSqlFunctions;
|
|
16
20
|
/**
|
|
17
21
|
* Register a new session.
|
|
18
22
|
*/
|
|
@@ -54,7 +58,11 @@ export declare class RequestRepository {
|
|
|
54
58
|
/**
|
|
55
59
|
* Update a request with interceptor metadata.
|
|
56
60
|
*/
|
|
57
|
-
updateRequestInterception(id: string, interceptedBy: string, interceptionType
|
|
61
|
+
updateRequestInterception(id: string, interceptedBy: string, interceptionType?: InterceptionType): void;
|
|
62
|
+
/**
|
|
63
|
+
* Mark a request as replayed, including lineage metadata.
|
|
64
|
+
*/
|
|
65
|
+
updateRequestReplay(id: string, replayedFromId: string, replayInitiator: ReplayInitiator): void;
|
|
58
66
|
/**
|
|
59
67
|
* Get a request by ID.
|
|
60
68
|
*/
|
|
@@ -90,10 +98,12 @@ export declare class RequestRepository {
|
|
|
90
98
|
}): number;
|
|
91
99
|
/**
|
|
92
100
|
* Search through request/response body content for a text pattern.
|
|
101
|
+
* Target can be request, response, or both (default).
|
|
93
102
|
* Only searches text-based bodies (not binary).
|
|
94
103
|
*/
|
|
95
104
|
searchBodies(options: {
|
|
96
105
|
query: string;
|
|
106
|
+
target?: BodySearchTarget;
|
|
97
107
|
limit?: number;
|
|
98
108
|
offset?: number;
|
|
99
109
|
filter?: RequestFilter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/daemon/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,OAAO,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/daemon/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon/storage.js
CHANGED
|
@@ -4,9 +4,12 @@ import { v4 as uuidv4 } from "uuid";
|
|
|
4
4
|
import { createLogger } from "../shared/logger.js";
|
|
5
5
|
import { normaliseContentType, buildTextContentTypeSqlCondition, buildJsonContentTypeSqlCondition, } from "../shared/content-type.js";
|
|
6
6
|
import { DEFAULT_MAX_STORED_REQUESTS } from "../shared/config.js";
|
|
7
|
+
import { normaliseRegexFilterInput } from "../shared/regex-filter.js";
|
|
7
8
|
const DEFAULT_QUERY_LIMIT = 1000;
|
|
8
9
|
const EVICTION_CHECK_INTERVAL = 100;
|
|
9
10
|
const SESSION_TOKEN_BYTES = 16;
|
|
11
|
+
const REGEXP_SQL_FUNCTION = "REGEXP";
|
|
12
|
+
const REGEX_CACHE_MAX_ENTRIES = 100;
|
|
10
13
|
const SCHEMA = `
|
|
11
14
|
CREATE TABLE IF NOT EXISTS sessions (
|
|
12
15
|
id TEXT PRIMARY KEY,
|
|
@@ -38,6 +41,8 @@ CREATE TABLE IF NOT EXISTS requests (
|
|
|
38
41
|
response_content_type TEXT,
|
|
39
42
|
intercepted_by TEXT,
|
|
40
43
|
interception_type TEXT CHECK(interception_type IN ('modified', 'mocked')),
|
|
44
|
+
replayed_from_id TEXT,
|
|
45
|
+
replay_initiator TEXT CHECK(replay_initiator IN ('mcp', 'tui')),
|
|
41
46
|
source TEXT,
|
|
42
47
|
saved INTEGER DEFAULT 0,
|
|
43
48
|
created_at INTEGER DEFAULT (unixepoch()),
|
|
@@ -107,6 +112,14 @@ const MIGRATIONS = [
|
|
|
107
112
|
description: "Add internal session token for trusted runtime attribution headers",
|
|
108
113
|
sql: `ALTER TABLE sessions ADD COLUMN internal_token TEXT;`,
|
|
109
114
|
},
|
|
115
|
+
{
|
|
116
|
+
version: 9,
|
|
117
|
+
description: "Add replay metadata columns",
|
|
118
|
+
sql: `
|
|
119
|
+
ALTER TABLE requests ADD COLUMN replayed_from_id TEXT;
|
|
120
|
+
ALTER TABLE requests ADD COLUMN replay_initiator TEXT;
|
|
121
|
+
`,
|
|
122
|
+
},
|
|
110
123
|
];
|
|
111
124
|
const STATUS_RANGE_MULTIPLIER = 100;
|
|
112
125
|
const MIN_HTTP_STATUS = 100;
|
|
@@ -183,6 +196,11 @@ function applyFilterConditions(conditions, params, filter) {
|
|
|
183
196
|
params.push(pattern, pattern);
|
|
184
197
|
}
|
|
185
198
|
}
|
|
199
|
+
if (filter.regex) {
|
|
200
|
+
const regex = normaliseRegexFilterInput(filter.regex, filter.regexFlags);
|
|
201
|
+
conditions.push(`${REGEXP_SQL_FUNCTION}(?, ?, url) = 1`);
|
|
202
|
+
params.push(regex.pattern, regex.flags);
|
|
203
|
+
}
|
|
186
204
|
if (filter.host) {
|
|
187
205
|
if (filter.host.startsWith(".")) {
|
|
188
206
|
// Suffix match — e.g. ".example.com" matches "api.example.com"
|
|
@@ -268,6 +286,7 @@ export class RequestRepository {
|
|
|
268
286
|
this.db = new Database(dbPath);
|
|
269
287
|
this.db.pragma("journal_mode = WAL");
|
|
270
288
|
this.db.exec(SCHEMA);
|
|
289
|
+
this.registerSqlFunctions();
|
|
271
290
|
this.maxStoredRequests = options?.maxStoredRequests ?? DEFAULT_MAX_STORED_REQUESTS;
|
|
272
291
|
// Fresh databases already have the latest schema — stamp to latest version
|
|
273
292
|
// so migrations don't try to re-apply what's already in the CREATE TABLE.
|
|
@@ -301,6 +320,33 @@ export class RequestRepository {
|
|
|
301
320
|
});
|
|
302
321
|
applyAll();
|
|
303
322
|
}
|
|
323
|
+
/**
|
|
324
|
+
* Register custom SQLite functions used by filters.
|
|
325
|
+
*/
|
|
326
|
+
registerSqlFunctions() {
|
|
327
|
+
const regexCache = new Map();
|
|
328
|
+
this.db.function(REGEXP_SQL_FUNCTION, (patternValue, flagsValue, value) => {
|
|
329
|
+
if (typeof patternValue !== "string")
|
|
330
|
+
return 0;
|
|
331
|
+
const flags = typeof flagsValue === "string" ? flagsValue : "";
|
|
332
|
+
const target = typeof value === "string" ? value : value == null ? "" : String(value);
|
|
333
|
+
const cacheKey = `${flags}\u0000${patternValue}`;
|
|
334
|
+
let regex = regexCache.get(cacheKey);
|
|
335
|
+
if (!regex) {
|
|
336
|
+
const spec = normaliseRegexFilterInput(patternValue, flags);
|
|
337
|
+
regex = new RegExp(spec.pattern, spec.flags);
|
|
338
|
+
regexCache.set(cacheKey, regex);
|
|
339
|
+
if (regexCache.size > REGEX_CACHE_MAX_ENTRIES) {
|
|
340
|
+
const oldest = regexCache.keys().next().value;
|
|
341
|
+
if (typeof oldest === "string") {
|
|
342
|
+
regexCache.delete(oldest);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
regex.lastIndex = 0;
|
|
347
|
+
return regex.test(target) ? 1 : 0;
|
|
348
|
+
});
|
|
349
|
+
}
|
|
304
350
|
/**
|
|
305
351
|
* Register a new session.
|
|
306
352
|
*/
|
|
@@ -444,7 +490,18 @@ export class RequestRepository {
|
|
|
444
490
|
SET intercepted_by = ?, interception_type = ?
|
|
445
491
|
WHERE id = ?
|
|
446
492
|
`);
|
|
447
|
-
stmt.run(interceptedBy, interceptionType, id);
|
|
493
|
+
stmt.run(interceptedBy, interceptionType ?? null, id);
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Mark a request as replayed, including lineage metadata.
|
|
497
|
+
*/
|
|
498
|
+
updateRequestReplay(id, replayedFromId, replayInitiator) {
|
|
499
|
+
const stmt = this.db.prepare(`
|
|
500
|
+
UPDATE requests
|
|
501
|
+
SET replayed_from_id = ?, replay_initiator = ?
|
|
502
|
+
WHERE id = ?
|
|
503
|
+
`);
|
|
504
|
+
stmt.run(replayedFromId, replayInitiator, id);
|
|
448
505
|
}
|
|
449
506
|
/**
|
|
450
507
|
* Get a request by ID.
|
|
@@ -520,6 +577,8 @@ export class RequestRepository {
|
|
|
520
577
|
COALESCE(LENGTH(response_body), 0) as response_body_size,
|
|
521
578
|
intercepted_by,
|
|
522
579
|
interception_type,
|
|
580
|
+
replayed_from_id,
|
|
581
|
+
replay_initiator,
|
|
523
582
|
saved
|
|
524
583
|
FROM requests
|
|
525
584
|
${whereClause}
|
|
@@ -554,19 +613,27 @@ export class RequestRepository {
|
|
|
554
613
|
}
|
|
555
614
|
/**
|
|
556
615
|
* Search through request/response body content for a text pattern.
|
|
616
|
+
* Target can be request, response, or both (default).
|
|
557
617
|
* Only searches text-based bodies (not binary).
|
|
558
618
|
*/
|
|
559
619
|
searchBodies(options) {
|
|
560
620
|
const conditions = [];
|
|
561
621
|
const params = [];
|
|
622
|
+
const target = options.target ?? "both";
|
|
562
623
|
const escaped = escapeLikeWildcards(options.query);
|
|
563
624
|
const pattern = `%${escaped}%`;
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
625
|
+
const bodyMatchClauses = [];
|
|
626
|
+
if (target === "request" || target === "both") {
|
|
627
|
+
const reqCt = buildTextContentTypeSqlCondition("request_content_type");
|
|
628
|
+
bodyMatchClauses.push(`(${reqCt.clause} AND CAST(request_body AS TEXT) LIKE ? ESCAPE '\\')`);
|
|
629
|
+
params.push(...reqCt.params, pattern);
|
|
630
|
+
}
|
|
631
|
+
if (target === "response" || target === "both") {
|
|
632
|
+
const resCt = buildTextContentTypeSqlCondition("response_content_type");
|
|
633
|
+
bodyMatchClauses.push(`(${resCt.clause} AND CAST(response_body AS TEXT) LIKE ? ESCAPE '\\')`);
|
|
634
|
+
params.push(...resCt.params, pattern);
|
|
635
|
+
}
|
|
636
|
+
conditions.push(`(${bodyMatchClauses.join(" OR ")})`);
|
|
570
637
|
applyFilterConditions(conditions, params, options.filter);
|
|
571
638
|
const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
572
639
|
const limit = options.limit ?? DEFAULT_QUERY_LIMIT;
|
|
@@ -588,6 +655,8 @@ export class RequestRepository {
|
|
|
588
655
|
COALESCE(LENGTH(response_body), 0) as response_body_size,
|
|
589
656
|
intercepted_by,
|
|
590
657
|
interception_type,
|
|
658
|
+
replayed_from_id,
|
|
659
|
+
replay_initiator,
|
|
591
660
|
saved
|
|
592
661
|
FROM requests
|
|
593
662
|
${whereClause}
|
|
@@ -804,6 +873,10 @@ export class RequestRepository {
|
|
|
804
873
|
interceptionType: row.interception_type === "modified" || row.interception_type === "mocked"
|
|
805
874
|
? row.interception_type
|
|
806
875
|
: undefined,
|
|
876
|
+
replayedFromId: row.replayed_from_id ?? undefined,
|
|
877
|
+
replayInitiator: row.replay_initiator === "mcp" || row.replay_initiator === "tui"
|
|
878
|
+
? row.replay_initiator
|
|
879
|
+
: undefined,
|
|
807
880
|
...(row.saved === 1 ? { saved: true } : {}),
|
|
808
881
|
};
|
|
809
882
|
}
|
|
@@ -840,6 +913,10 @@ export class RequestRepository {
|
|
|
840
913
|
interceptionType: row.interception_type === "modified" || row.interception_type === "mocked"
|
|
841
914
|
? row.interception_type
|
|
842
915
|
: undefined,
|
|
916
|
+
replayedFromId: row.replayed_from_id ?? undefined,
|
|
917
|
+
replayInitiator: row.replay_initiator === "mcp" || row.replay_initiator === "tui"
|
|
918
|
+
? row.replay_initiator
|
|
919
|
+
: undefined,
|
|
843
920
|
...(row.saved === 1 ? { saved: true } : {}),
|
|
844
921
|
};
|
|
845
922
|
}
|