@syncular/testkit 0.1.3 → 0.2.1
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 +210 -0
- package/dist/client.d.ts +68 -0
- package/dist/client.js +145 -0
- package/dist/clock.d.ts +24 -0
- package/dist/clock.js +32 -0
- package/dist/create-test-sync.d.ts +67 -0
- package/dist/create-test-sync.js +90 -0
- package/dist/faults.d.ts +52 -50
- package/dist/faults.js +74 -192
- package/dist/index.d.ts +17 -11
- package/dist/index.js +18 -11
- package/dist/react.d.ts +10 -0
- package/dist/react.js +41 -0
- package/dist/server.d.ts +44 -4
- package/dist/server.js +68 -4
- package/package.json +41 -57
- package/src/client.ts +218 -0
- package/src/clock.ts +45 -0
- package/src/create-test-sync.ts +158 -0
- package/src/faults.ts +77 -338
- package/src/index.ts +44 -10
- package/src/react.ts +46 -0
- package/src/server.ts +102 -3
- package/dist/audit.d.ts +0 -22
- package/dist/audit.d.ts.map +0 -1
- package/dist/audit.js +0 -40
- package/dist/audit.js.map +0 -1
- package/dist/client-bridge.d.ts +0 -77
- package/dist/client-bridge.d.ts.map +0 -1
- package/dist/client-bridge.js +0 -540
- package/dist/client-bridge.js.map +0 -1
- package/dist/deterministic.d.ts +0 -31
- package/dist/deterministic.d.ts.map +0 -1
- package/dist/deterministic.js +0 -69
- package/dist/deterministic.js.map +0 -1
- package/dist/disposable.d.ts +0 -10
- package/dist/disposable.d.ts.map +0 -1
- package/dist/disposable.js +0 -28
- package/dist/disposable.js.map +0 -1
- package/dist/faults.d.ts.map +0 -1
- package/dist/faults.js.map +0 -1
- package/dist/hono-node-server.d.ts +0 -20
- package/dist/hono-node-server.d.ts.map +0 -1
- package/dist/hono-node-server.js +0 -90
- package/dist/hono-node-server.js.map +0 -1
- package/dist/http-fixtures.d.ts +0 -32
- package/dist/http-fixtures.d.ts.map +0 -1
- package/dist/http-fixtures.js +0 -117
- package/dist/http-fixtures.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/project-scoped-tasks.d.ts +0 -40
- package/dist/project-scoped-tasks.d.ts.map +0 -1
- package/dist/project-scoped-tasks.js +0 -247
- package/dist/project-scoped-tasks.js.map +0 -1
- package/dist/realtime-ws.d.ts +0 -48
- package/dist/realtime-ws.d.ts.map +0 -1
- package/dist/realtime-ws.js +0 -203
- package/dist/realtime-ws.js.map +0 -1
- package/dist/runtime-process.d.ts +0 -14
- package/dist/runtime-process.d.ts.map +0 -1
- package/dist/runtime-process.js +0 -99
- package/dist/runtime-process.js.map +0 -1
- package/dist/server.d.ts.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/sync-builders.d.ts +0 -48
- package/dist/sync-builders.d.ts.map +0 -1
- package/dist/sync-builders.js +0 -66
- package/dist/sync-builders.js.map +0 -1
- package/dist/sync-http.d.ts +0 -48
- package/dist/sync-http.d.ts.map +0 -1
- package/dist/sync-http.js +0 -43
- package/dist/sync-http.js.map +0 -1
- package/dist/sync-parse.d.ts +0 -8
- package/dist/sync-parse.d.ts.map +0 -1
- package/dist/sync-parse.js +0 -38
- package/dist/sync-parse.js.map +0 -1
- package/dist/sync-response.d.ts +0 -6
- package/dist/sync-response.d.ts.map +0 -1
- package/dist/sync-response.js +0 -19
- package/dist/sync-response.js.map +0 -1
- package/src/audit.ts +0 -74
- package/src/client-bridge.ts +0 -841
- package/src/deterministic.ts +0 -121
- package/src/disposable.ts +0 -50
- package/src/hono-node-server.ts +0 -144
- package/src/http-fixtures.ts +0 -187
- package/src/project-scoped-tasks.ts +0 -351
- package/src/realtime-ws.ts +0 -354
- package/src/runtime-process.ts +0 -159
- package/src/sync-builders.ts +0 -136
- package/src/sync-http.ts +0 -117
- package/src/sync-parse.ts +0 -86
- package/src/sync-response.ts +0 -43
package/dist/server.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC"}
|
package/dist/sync-builders.d.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import type { SyncCombinedRequest, SyncOperation, SyncPullRequest, SyncPushBatchRequest, SyncSubscriptionRequest } from '@syncular/core';
|
|
2
|
-
export interface CreateSyncUpsertOperationOptions {
|
|
3
|
-
table: string;
|
|
4
|
-
rowId: string;
|
|
5
|
-
payload: Record<string, unknown>;
|
|
6
|
-
baseVersion?: number | null;
|
|
7
|
-
}
|
|
8
|
-
export declare function createSyncUpsertOperation(options: CreateSyncUpsertOperationOptions): SyncOperation;
|
|
9
|
-
export interface CreateSyncDeleteOperationOptions {
|
|
10
|
-
table: string;
|
|
11
|
-
rowId: string;
|
|
12
|
-
baseVersion?: number | null;
|
|
13
|
-
}
|
|
14
|
-
export declare function createSyncDeleteOperation(options: CreateSyncDeleteOperationOptions): SyncOperation;
|
|
15
|
-
export interface CreateSyncSubscriptionOptions {
|
|
16
|
-
id: string;
|
|
17
|
-
table: string;
|
|
18
|
-
scopes: SyncSubscriptionRequest['scopes'];
|
|
19
|
-
params?: SyncSubscriptionRequest['params'];
|
|
20
|
-
cursor?: number;
|
|
21
|
-
bootstrapState?: SyncSubscriptionRequest['bootstrapState'];
|
|
22
|
-
crdtStateVectors?: SyncSubscriptionRequest['crdtStateVectors'];
|
|
23
|
-
}
|
|
24
|
-
export declare function createSyncSubscription(options: CreateSyncSubscriptionOptions): SyncSubscriptionRequest;
|
|
25
|
-
export interface CreateSyncPushRequestOptions {
|
|
26
|
-
clientId: string;
|
|
27
|
-
clientCommitId: string;
|
|
28
|
-
operations: SyncOperation[];
|
|
29
|
-
schemaVersion?: number;
|
|
30
|
-
}
|
|
31
|
-
export declare function createSyncPushRequest(options: CreateSyncPushRequestOptions): SyncPushBatchRequest;
|
|
32
|
-
export interface CreateSyncPullRequestOptions {
|
|
33
|
-
clientId: string;
|
|
34
|
-
schemaVersion?: number;
|
|
35
|
-
subscriptions: SyncSubscriptionRequest[];
|
|
36
|
-
limitCommits?: number;
|
|
37
|
-
limitSnapshotRows?: number;
|
|
38
|
-
maxSnapshotPages?: number;
|
|
39
|
-
dedupeRows?: boolean;
|
|
40
|
-
}
|
|
41
|
-
export declare function createSyncPullRequest(options: CreateSyncPullRequestOptions): SyncPullRequest;
|
|
42
|
-
export interface CreateSyncCombinedRequestOptions {
|
|
43
|
-
clientId: string;
|
|
44
|
-
push?: Omit<SyncPushBatchRequest, 'clientId'>;
|
|
45
|
-
pull?: Omit<SyncPullRequest, 'clientId'>;
|
|
46
|
-
}
|
|
47
|
-
export declare function createSyncCombinedRequest(options: CreateSyncCombinedRequestOptions): SyncCombinedRequest;
|
|
48
|
-
//# sourceMappingURL=sync-builders.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-builders.d.ts","sourceRoot":"","sources":["../src/sync-builders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,oBAAoB,EACpB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,gCAAgC;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gCAAgC,GACxC,aAAa,CAQf;AAED,MAAM,WAAW,gCAAgC;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gCAAgC,GACxC,aAAa,CAQf;AAED,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,CAAC,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,uBAAuB,CAAC,gBAAgB,CAAC,CAAC;IAC3D,gBAAgB,CAAC,EAAE,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;CAChE;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,6BAA6B,GACrC,uBAAuB,CAUzB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,oBAAoB,CAWtB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,uBAAuB,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,eAAe,CAgBjB;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;CAC1C;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gCAAgC,GACxC,mBAAmB,CAMrB"}
|
package/dist/sync-builders.js
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
export function createSyncUpsertOperation(options) {
|
|
2
|
-
return {
|
|
3
|
-
table: options.table,
|
|
4
|
-
row_id: options.rowId,
|
|
5
|
-
op: 'upsert',
|
|
6
|
-
payload: options.payload,
|
|
7
|
-
base_version: options.baseVersion ?? null,
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
export function createSyncDeleteOperation(options) {
|
|
11
|
-
return {
|
|
12
|
-
table: options.table,
|
|
13
|
-
row_id: options.rowId,
|
|
14
|
-
op: 'delete',
|
|
15
|
-
payload: null,
|
|
16
|
-
base_version: options.baseVersion ?? null,
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export function createSyncSubscription(options) {
|
|
20
|
-
return {
|
|
21
|
-
id: options.id,
|
|
22
|
-
table: options.table,
|
|
23
|
-
scopes: options.scopes,
|
|
24
|
-
...(options.params ? { params: options.params } : {}),
|
|
25
|
-
cursor: options.cursor ?? 0,
|
|
26
|
-
bootstrapState: options.bootstrapState ?? null,
|
|
27
|
-
crdtStateVectors: options.crdtStateVectors ?? [],
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
export function createSyncPushRequest(options) {
|
|
31
|
-
return {
|
|
32
|
-
clientId: options.clientId,
|
|
33
|
-
commits: [
|
|
34
|
-
{
|
|
35
|
-
clientCommitId: options.clientCommitId,
|
|
36
|
-
operations: options.operations,
|
|
37
|
-
schemaVersion: options.schemaVersion ?? 1,
|
|
38
|
-
},
|
|
39
|
-
],
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
export function createSyncPullRequest(options) {
|
|
43
|
-
return {
|
|
44
|
-
clientId: options.clientId,
|
|
45
|
-
schemaVersion: options.schemaVersion ?? 1,
|
|
46
|
-
subscriptions: options.subscriptions,
|
|
47
|
-
limitCommits: options.limitCommits ?? 50,
|
|
48
|
-
...(options.limitSnapshotRows !== undefined
|
|
49
|
-
? { limitSnapshotRows: options.limitSnapshotRows }
|
|
50
|
-
: {}),
|
|
51
|
-
...(options.maxSnapshotPages !== undefined
|
|
52
|
-
? { maxSnapshotPages: options.maxSnapshotPages }
|
|
53
|
-
: {}),
|
|
54
|
-
...(options.dedupeRows !== undefined
|
|
55
|
-
? { dedupeRows: options.dedupeRows }
|
|
56
|
-
: {}),
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
export function createSyncCombinedRequest(options) {
|
|
60
|
-
return {
|
|
61
|
-
clientId: options.clientId,
|
|
62
|
-
...(options.push ? { push: options.push } : {}),
|
|
63
|
-
...(options.pull ? { pull: options.pull } : {}),
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=sync-builders.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-builders.js","sourceRoot":"","sources":["../src/sync-builders.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,yBAAyB,CACvC,OAAyC;IAEzC,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,KAAK;QACrB,EAAE,EAAE,QAAQ;QACZ,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;KAC1C,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,yBAAyB,CACvC,OAAyC;IAEzC,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,KAAK;QACrB,EAAE,EAAE,QAAQ;QACZ,OAAO,EAAE,IAAI;QACb,YAAY,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;KAC1C,CAAC;AACJ,CAAC;AAYD,MAAM,UAAU,sBAAsB,CACpC,OAAsC;IAEtC,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC;QAC3B,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;QAC9C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,EAAE;KACjD,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,qBAAqB,CACnC,OAAqC;IAErC,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE;YACP;gBACE,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,CAAC;aAC1C;SACF;KACF,CAAC;AACJ,CAAC;AAYD,MAAM,UAAU,qBAAqB,CACnC,OAAqC;IAErC,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,CAAC;QACzC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;QACxC,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS;YACzC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE;YAClD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS;YACxC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE;YAChD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS;YAClC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE;YACpC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,yBAAyB,CACvC,OAAyC;IAEzC,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC;AACJ,CAAC"}
|
package/dist/sync-http.d.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import type { SyncCombinedRequest, SyncCombinedResponse, SyncPullRequest, SyncPullResponse, SyncPushRequest, SyncPushResponse } from '@syncular/core';
|
|
2
|
-
export interface JsonActorHeadersOptions {
|
|
3
|
-
actorId: string;
|
|
4
|
-
actorHeader?: string;
|
|
5
|
-
extraHeaders?: Record<string, string>;
|
|
6
|
-
}
|
|
7
|
-
export declare function createJsonActorHeaders(options: JsonActorHeadersOptions): Record<string, string>;
|
|
8
|
-
export interface PostJsonWithActorOptions<TBody> {
|
|
9
|
-
fetch: typeof globalThis.fetch;
|
|
10
|
-
url: string;
|
|
11
|
-
actorId: string;
|
|
12
|
-
actorHeader?: string;
|
|
13
|
-
extraHeaders?: Record<string, string>;
|
|
14
|
-
body: TBody;
|
|
15
|
-
}
|
|
16
|
-
export interface PostJsonWithActorResult<TResponse> {
|
|
17
|
-
response: Response;
|
|
18
|
-
json: TResponse;
|
|
19
|
-
}
|
|
20
|
-
export declare function postJsonWithActor<TBody, TResponse>(options: PostJsonWithActorOptions<TBody>): Promise<PostJsonWithActorResult<TResponse>>;
|
|
21
|
-
export interface PostSyncCombinedRequestOptions {
|
|
22
|
-
fetch: typeof globalThis.fetch;
|
|
23
|
-
url: string;
|
|
24
|
-
actorId: string;
|
|
25
|
-
actorHeader?: string;
|
|
26
|
-
extraHeaders?: Record<string, string>;
|
|
27
|
-
body: SyncCombinedRequest;
|
|
28
|
-
}
|
|
29
|
-
export declare function postSyncCombinedRequest(options: PostSyncCombinedRequestOptions): Promise<PostJsonWithActorResult<SyncCombinedResponse>>;
|
|
30
|
-
export interface PostSyncPushRequestOptions {
|
|
31
|
-
fetch: typeof globalThis.fetch;
|
|
32
|
-
url: string;
|
|
33
|
-
actorId: string;
|
|
34
|
-
actorHeader?: string;
|
|
35
|
-
extraHeaders?: Record<string, string>;
|
|
36
|
-
body: SyncPushRequest;
|
|
37
|
-
}
|
|
38
|
-
export declare function postSyncPushRequest(options: PostSyncPushRequestOptions): Promise<PostJsonWithActorResult<SyncPushResponse>>;
|
|
39
|
-
export interface PostSyncPullRequestOptions {
|
|
40
|
-
fetch: typeof globalThis.fetch;
|
|
41
|
-
url: string;
|
|
42
|
-
actorId: string;
|
|
43
|
-
actorHeader?: string;
|
|
44
|
-
extraHeaders?: Record<string, string>;
|
|
45
|
-
body: SyncPullRequest;
|
|
46
|
-
}
|
|
47
|
-
export declare function postSyncPullRequest(options: PostSyncPullRequestOptions): Promise<PostJsonWithActorResult<SyncPullResponse>>;
|
|
48
|
-
//# sourceMappingURL=sync-http.d.ts.map
|
package/dist/sync-http.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-http.d.ts","sourceRoot":"","sources":["../src/sync-http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAOxB,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMxB;AAED,MAAM,WAAW,wBAAwB,CAAC,KAAK;IAC7C,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,EAAE,KAAK,CAAC;CACb;AAED,MAAM,WAAW,uBAAuB,CAAC,SAAS;IAChD,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EACtD,OAAO,EAAE,wBAAwB,CAAC,KAAK,CAAC,GACvC,OAAO,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAa7C;AAED,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,CAAC,CAMxD;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC,CAMpD;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,CAAC,CAMpD"}
|
package/dist/sync-http.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { parseSyncCombinedResponse, parseSyncPullResponse, parseSyncPushResponse, } from './sync-parse.js';
|
|
2
|
-
export function createJsonActorHeaders(options) {
|
|
3
|
-
return {
|
|
4
|
-
'content-type': 'application/json',
|
|
5
|
-
[options.actorHeader ?? 'x-actor-id']: options.actorId,
|
|
6
|
-
...options.extraHeaders,
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
export async function postJsonWithActor(options) {
|
|
10
|
-
const response = await options.fetch(options.url, {
|
|
11
|
-
method: 'POST',
|
|
12
|
-
headers: createJsonActorHeaders({
|
|
13
|
-
actorId: options.actorId,
|
|
14
|
-
actorHeader: options.actorHeader,
|
|
15
|
-
extraHeaders: options.extraHeaders,
|
|
16
|
-
}),
|
|
17
|
-
body: JSON.stringify(options.body),
|
|
18
|
-
});
|
|
19
|
-
const json = (await response.json());
|
|
20
|
-
return { response, json };
|
|
21
|
-
}
|
|
22
|
-
export async function postSyncCombinedRequest(options) {
|
|
23
|
-
const result = await postJsonWithActor(options);
|
|
24
|
-
return {
|
|
25
|
-
response: result.response,
|
|
26
|
-
json: parseSyncCombinedResponse(result.json),
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
export async function postSyncPushRequest(options) {
|
|
30
|
-
const result = await postJsonWithActor(options);
|
|
31
|
-
return {
|
|
32
|
-
response: result.response,
|
|
33
|
-
json: parseSyncPushResponse(result.json),
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
export async function postSyncPullRequest(options) {
|
|
37
|
-
const result = await postJsonWithActor(options);
|
|
38
|
-
return {
|
|
39
|
-
response: result.response,
|
|
40
|
-
json: parseSyncPullResponse(result.json),
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=sync-http.js.map
|
package/dist/sync-http.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-http.js","sourceRoot":"","sources":["../src/sync-http.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAQtB,MAAM,UAAU,sBAAsB,CACpC,OAAgC;IAEhC,OAAO;QACL,cAAc,EAAE,kBAAkB;QAClC,CAAC,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC,EAAE,OAAO,CAAC,OAAO;QACtD,GAAG,OAAO,CAAC,YAAY;KACxB,CAAC;AACJ,CAAC;AAgBD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAwC;IAExC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAChD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,sBAAsB,CAAC;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,YAAY,EAAE,OAAO,CAAC,YAAY;SACnC,CAAC;QACF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;KACnC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAc,CAAC;IAClD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,OAAuC;IAEvC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAA+B,OAAO,CAAC,CAAC;IAC9E,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC;KAC7C,CAAC;AACJ,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAmC;IAEnC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAA2B,OAAO,CAAC,CAAC;IAC1E,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC;KACzC,CAAC;AACJ,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAmC;IAEnC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAA2B,OAAO,CAAC,CAAC;IAC1E,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC;KACzC,CAAC;AACJ,CAAC"}
|
package/dist/sync-parse.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { type SyncCombinedResponse, type SyncPullResponse, type SyncPushResponse } from '@syncular/core';
|
|
2
|
-
export declare function parseSyncCombinedResponse(value: unknown): SyncCombinedResponse;
|
|
3
|
-
export declare function parseSyncPushResponse(value: unknown): SyncPushResponse;
|
|
4
|
-
export declare function parseSyncPullResponse(value: unknown): SyncPullResponse;
|
|
5
|
-
export declare function readSyncCombinedResponse(response: Response): Promise<SyncCombinedResponse>;
|
|
6
|
-
export declare function readSyncPushResponse(response: Response): Promise<SyncPushResponse>;
|
|
7
|
-
export declare function readSyncPullResponse(response: Response): Promise<SyncPullResponse>;
|
|
8
|
-
//# sourceMappingURL=sync-parse.d.ts.map
|
package/dist/sync-parse.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-parse.d.ts","sourceRoot":"","sources":["../src/sync-parse.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EAEtB,MAAM,gBAAgB,CAAC;AA0CxB,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,GACb,oBAAoB,CAItB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAItE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAItE;AAED,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAE3B;AAED,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAE3B"}
|
package/dist/sync-parse.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { SyncCombinedResponseSchema, SyncPullResponseSchema, SyncPushResponseSchema, } from '@syncular/core';
|
|
2
|
-
function formatIssue(issue) {
|
|
3
|
-
const path = issue.path.length > 0
|
|
4
|
-
? issue.path
|
|
5
|
-
.map((segment) => typeof segment === 'symbol' ? segment.toString() : String(segment))
|
|
6
|
-
.join('.')
|
|
7
|
-
: 'root';
|
|
8
|
-
return `${path}: ${issue.message}`;
|
|
9
|
-
}
|
|
10
|
-
function formatIssues(issues) {
|
|
11
|
-
return issues.map((issue) => formatIssue(issue)).join('; ');
|
|
12
|
-
}
|
|
13
|
-
function parseOrThrow(label, value, parse) {
|
|
14
|
-
const parsed = parse(value);
|
|
15
|
-
if (parsed.success) {
|
|
16
|
-
return parsed.data;
|
|
17
|
-
}
|
|
18
|
-
throw new Error(`${label} validation failed: ${formatIssues(parsed.error.issues)}`);
|
|
19
|
-
}
|
|
20
|
-
export function parseSyncCombinedResponse(value) {
|
|
21
|
-
return parseOrThrow('SyncCombinedResponse', value, (input) => SyncCombinedResponseSchema.safeParse(input));
|
|
22
|
-
}
|
|
23
|
-
export function parseSyncPushResponse(value) {
|
|
24
|
-
return parseOrThrow('SyncPushResponse', value, (input) => SyncPushResponseSchema.safeParse(input));
|
|
25
|
-
}
|
|
26
|
-
export function parseSyncPullResponse(value) {
|
|
27
|
-
return parseOrThrow('SyncPullResponse', value, (input) => SyncPullResponseSchema.safeParse(input));
|
|
28
|
-
}
|
|
29
|
-
export async function readSyncCombinedResponse(response) {
|
|
30
|
-
return parseSyncCombinedResponse(await response.json());
|
|
31
|
-
}
|
|
32
|
-
export async function readSyncPushResponse(response) {
|
|
33
|
-
return parseSyncPushResponse(await response.json());
|
|
34
|
-
}
|
|
35
|
-
export async function readSyncPullResponse(response) {
|
|
36
|
-
return parseSyncPullResponse(await response.json());
|
|
37
|
-
}
|
|
38
|
-
//# sourceMappingURL=sync-parse.js.map
|
package/dist/sync-parse.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-parse.js","sourceRoot":"","sources":["../src/sync-parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,0BAA0B,EAE1B,sBAAsB,EAEtB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAWxB,SAAS,WAAW,CAAC,KAAiB;IACpC,MAAM,IAAI,GACR,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QACnB,CAAC,CAAC,KAAK,CAAC,IAAI;aACP,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACf,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CACnE;aACA,IAAI,CAAC,GAAG,CAAC;QACd,CAAC,CAAC,MAAM,CAAC;IACb,OAAO,GAAG,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;AACrC,CAAC;AAED,SAAS,YAAY,CAAC,MAAiC;IACrD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,YAAY,CACnB,KAAa,EACb,KAAc,EACd,KAAyC;IAEzC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,uBAAuB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CACnE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAAc;IAEd,OAAO,YAAY,CAAC,sBAAsB,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAC3D,0BAA0B,CAAC,SAAS,CAAC,KAAK,CAAC,CAC5C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,YAAY,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACvD,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CACxC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,OAAO,YAAY,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACvD,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CACxC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAAkB;IAElB,OAAO,yBAAyB,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAkB;IAElB,OAAO,qBAAqB,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAkB;IAElB,OAAO,qBAAqB,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC"}
|
package/dist/sync-response.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { type SyncChange, type SyncPullResponse } from '@syncular/core';
|
|
2
|
-
export type SyncSubscriptionRecord = Pick<SyncPullResponse['subscriptions'][number], 'id' | 'commits'>;
|
|
3
|
-
export declare function subscriptionChanges(subscriptions: SyncSubscriptionRecord[] | undefined, subscriptionId: string): SyncChange[];
|
|
4
|
-
export declare function findSubscriptionChange(subscriptions: SyncSubscriptionRecord[] | undefined, subscriptionId: string, rowId: string): SyncChange | undefined;
|
|
5
|
-
export declare function subscriptionChangeRow(change: SyncChange | undefined): Record<string, unknown> | undefined;
|
|
6
|
-
//# sourceMappingURL=sync-response.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-response.d.ts","sourceRoot":"","sources":["../src/sync-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,gBAAgB,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,EACzC,IAAI,GAAG,SAAS,CACjB,CAAC;AAEF,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,sBAAsB,EAAE,GAAG,SAAS,EACnD,cAAc,EAAE,MAAM,GACrB,UAAU,EAAE,CASd;AAED,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,sBAAsB,EAAE,GAAG,SAAS,EACnD,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,GACZ,UAAU,GAAG,SAAS,CAGxB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,GAAG,SAAS,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAMrC"}
|
package/dist/sync-response.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { isRecord, } from '@syncular/core';
|
|
2
|
-
export function subscriptionChanges(subscriptions, subscriptionId) {
|
|
3
|
-
const subscription = subscriptions?.find((item) => item.id === subscriptionId);
|
|
4
|
-
if (!subscription) {
|
|
5
|
-
return [];
|
|
6
|
-
}
|
|
7
|
-
return subscription.commits?.flatMap((commit) => commit.changes) ?? [];
|
|
8
|
-
}
|
|
9
|
-
export function findSubscriptionChange(subscriptions, subscriptionId, rowId) {
|
|
10
|
-
const changes = subscriptionChanges(subscriptions, subscriptionId);
|
|
11
|
-
return changes.find((change) => change.row_id === rowId);
|
|
12
|
-
}
|
|
13
|
-
export function subscriptionChangeRow(change) {
|
|
14
|
-
if (!change) {
|
|
15
|
-
return undefined;
|
|
16
|
-
}
|
|
17
|
-
return isRecord(change.row_json) ? change.row_json : undefined;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=sync-response.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-response.js","sourceRoot":"","sources":["../src/sync-response.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,GAGT,MAAM,gBAAgB,CAAC;AAOxB,MAAM,UAAU,mBAAmB,CACjC,aAAmD,EACnD,cAAsB;IAEtB,MAAM,YAAY,GAAG,aAAa,EAAE,IAAI,CACtC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,cAAc,CACrC,CAAC;IACF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,aAAmD,EACnD,cAAsB,EACtB,KAAa;IAEb,MAAM,OAAO,GAAG,mBAAmB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IACnE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAA8B;IAE9B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC"}
|
package/src/audit.ts
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { isDeepStrictEqual } from 'node:util';
|
|
2
|
-
|
|
3
|
-
export interface RedactedAuditChange {
|
|
4
|
-
redaction?: {
|
|
5
|
-
payload?: unknown;
|
|
6
|
-
reason?: unknown;
|
|
7
|
-
};
|
|
8
|
-
rowJson?: unknown;
|
|
9
|
-
scopes?: unknown;
|
|
10
|
-
[key: string]: unknown;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface RedactedAuditDebugExport {
|
|
14
|
-
commits?: Array<{
|
|
15
|
-
changes?: RedactedAuditChange[];
|
|
16
|
-
[key: string]: unknown;
|
|
17
|
-
}>;
|
|
18
|
-
[key: string]: unknown;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function assertAuditChangeRedacted(
|
|
22
|
-
change: RedactedAuditChange,
|
|
23
|
-
message = 'Expected audit change to be redacted'
|
|
24
|
-
): void {
|
|
25
|
-
if ('rowJson' in change) {
|
|
26
|
-
throw new Error(`${message}: rowJson must be omitted`);
|
|
27
|
-
}
|
|
28
|
-
if ('scopes' in change) {
|
|
29
|
-
throw new Error(`${message}: raw scopes must be omitted`);
|
|
30
|
-
}
|
|
31
|
-
if (
|
|
32
|
-
!isDeepStrictEqual(change.redaction, {
|
|
33
|
-
payload: 'omitted',
|
|
34
|
-
reason: 'audit_redacted_by_default',
|
|
35
|
-
})
|
|
36
|
-
) {
|
|
37
|
-
throw new Error(`${message}: missing canonical redaction marker`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export function assertAuditJsonExcludes(
|
|
42
|
-
value: unknown,
|
|
43
|
-
forbiddenNeedles: readonly string[],
|
|
44
|
-
message = 'Audit JSON leaked forbidden content'
|
|
45
|
-
): void {
|
|
46
|
-
const serialized = JSON.stringify(value);
|
|
47
|
-
for (const needle of forbiddenNeedles) {
|
|
48
|
-
if (!needle) continue;
|
|
49
|
-
if (serialized.includes(needle)) {
|
|
50
|
-
throw new Error(`${message}: ${needle}`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export function assertAuditDebugExportRedacted(
|
|
56
|
-
value: RedactedAuditDebugExport,
|
|
57
|
-
forbiddenNeedles: readonly string[] = [],
|
|
58
|
-
message = 'Expected audit debug export to be redacted'
|
|
59
|
-
): void {
|
|
60
|
-
for (const commit of value.commits ?? []) {
|
|
61
|
-
for (const change of commit.changes ?? []) {
|
|
62
|
-
assertAuditChangeRedacted(change, message);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
assertAuditJsonExcludes(value, forbiddenNeedles, message);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export async function readJsonResponse<T>(response: Response): Promise<T> {
|
|
69
|
-
return (await response.json()) as T;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export async function readTextResponse(response: Response): Promise<string> {
|
|
73
|
-
return await response.text();
|
|
74
|
-
}
|