pyric 0.1.0-alpha.25 → 0.1.0-alpha.27
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 +1 -1
- package/dist/database/connection-lifecycle.d.ts.map +1 -1
- package/dist/database/connection-lifecycle.js +10 -6
- package/dist/database/connection-lifecycle.js.map +1 -1
- package/dist/database/replay.d.ts +53 -1
- package/dist/database/replay.d.ts.map +1 -1
- package/dist/database/replay.js +236 -66
- package/dist/database/replay.js.map +1 -1
- package/dist/database/sandbox/backend.d.ts +5 -0
- package/dist/database/sandbox/backend.d.ts.map +1 -1
- package/dist/database/sandbox/backend.js +15 -0
- package/dist/database/sandbox/backend.js.map +1 -1
- package/dist/database/sandbox/child-listeners.d.ts.map +1 -1
- package/dist/database/sandbox/child-listeners.js +2 -0
- package/dist/database/sandbox/child-listeners.js.map +1 -1
- package/dist/database/sandbox/priority-writes.d.ts +4 -0
- package/dist/database/sandbox/priority-writes.d.ts.map +1 -1
- package/dist/database/sandbox/priority-writes.js +16 -3
- package/dist/database/sandbox/priority-writes.js.map +1 -1
- package/dist/database/sandbox/write-plane.d.ts +32 -0
- package/dist/database/sandbox/write-plane.d.ts.map +1 -1
- package/dist/database/sandbox/write-plane.js +91 -18
- package/dist/database/sandbox/write-plane.js.map +1 -1
- package/dist/rules/index.d.ts +3 -0
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +3 -0
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/internal/rtdb.d.ts +8 -2
- package/dist/rules/internal/rtdb.d.ts.map +1 -1
- package/dist/rules/internal/rtdb.js +5 -1
- package/dist/rules/internal/rtdb.js.map +1 -1
- package/dist/rules/rtdb/grammar/canonical.d.ts +52 -0
- package/dist/rules/rtdb/grammar/canonical.d.ts.map +1 -0
- package/dist/rules/rtdb/grammar/canonical.js +328 -0
- package/dist/rules/rtdb/grammar/canonical.js.map +1 -0
- package/dist/rules/rtdb/grammar/expression-tree.d.ts +86 -0
- package/dist/rules/rtdb/grammar/expression-tree.d.ts.map +1 -0
- package/dist/rules/rtdb/grammar/expression-tree.js +212 -0
- package/dist/rules/rtdb/grammar/expression-tree.js.map +1 -0
- package/dist/rules/rtdb/rules-diff.d.ts +30 -0
- package/dist/rules/rtdb/rules-diff.d.ts.map +1 -0
- package/dist/rules/rtdb/rules-diff.js +81 -0
- package/dist/rules/rtdb/rules-diff.js.map +1 -0
- package/dist/rules/rtdb/simulation/handler.d.ts +9 -0
- package/dist/rules/rtdb/simulation/handler.d.ts.map +1 -1
- package/dist/rules/rtdb/simulation/handler.js +1 -1
- package/dist/rules/rtdb/simulation/handler.js.map +1 -1
- package/package.json +1 -1
- package/src/database/connection-lifecycle.ts +9 -11
- package/src/database/replay.ts +278 -72
- package/src/database/sandbox/backend.ts +13 -0
- package/src/database/sandbox/child-listeners.ts +2 -0
- package/src/database/sandbox/priority-writes.ts +18 -3
- package/src/database/sandbox/write-plane.ts +97 -19
- package/src/rules/index.ts +5 -0
- package/src/rules/internal/rtdb.ts +19 -1
- package/src/rules/rtdb/grammar/canonical.ts +339 -0
- package/src/rules/rtdb/grammar/expression-tree.ts +256 -0
- package/src/rules/rtdb/rules-diff.ts +118 -0
- package/src/rules/rtdb/simulation/handler.ts +1 -1
package/README.md
CHANGED
|
@@ -149,7 +149,7 @@ Development sessions capture Firestore and Realtime Database operations in `.pyr
|
|
|
149
149
|
npx pyric verify
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
The default engine runs locally.
|
|
152
|
+
The default engine runs locally. For production-authority verification, the optional Firestore Rules Test API engine sends derived rule cases to Google's hosted evaluator, and the optional `--engine staging` replays a Realtime Database session against a real instance you provide. They verify rules without deploying to a live app. See [verify against a captured session](packages/site-docs/src/content/ship/ship-to-production.md).
|
|
153
153
|
|
|
154
154
|
## Ship the same application code
|
|
155
155
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-lifecycle.d.ts","sourceRoot":"","sources":["../../src/database/connection-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAErG,qBAAa,uBAAuB;IAQhC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IATxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkC;IAC7D,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwC;IAC5E,OAAO,CAAC,eAAe,CAAS;gBAGb,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,SAAS,EACrB,KAAK,EAAE,OAAO;IAKjC,OAAO,CAAC,gBAAgB;IAQxB,QAAQ,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"connection-lifecycle.d.ts","sourceRoot":"","sources":["../../src/database/connection-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAErG,qBAAa,uBAAuB;IAQhC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IATxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAkC;IAC7D,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwC;IAC5E,OAAO,CAAC,eAAe,CAAS;gBAGb,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,MAAM,SAAS,EACrB,KAAK,EAAE,OAAO;IAKjC,OAAO,CAAC,gBAAgB;IAQxB,QAAQ,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBvD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnC,KAAK,IAAI,IAAI;IAKb,SAAS,IAAI,IAAI;IAQjB,QAAQ,IAAI,IAAI;IAKhB,iBAAiB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAO9D,OAAO,CAAC,SAAS;IAOjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAoEvB"}
|
|
@@ -27,14 +27,18 @@ export class RtdbConnectionLifecycle {
|
|
|
27
27
|
try {
|
|
28
28
|
const requiresRules = !this.admin;
|
|
29
29
|
if (requiresRules) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
// Decided when registered, as production decides it, and recorded as
|
|
31
|
+
// an `onDisconnect.*` operation so a captured session carries it.
|
|
32
|
+
if (operation.kind === 'update') {
|
|
33
|
+
this.backend.registerDisconnect(this.auth(), { kind: 'update', path: operation.path, values: operation.values });
|
|
34
|
+
}
|
|
35
|
+
else if (operation.kind === 'remove') {
|
|
36
|
+
this.backend.registerDisconnect(this.auth(), { kind: 'remove', path: operation.path });
|
|
33
37
|
}
|
|
34
38
|
else {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
this.backend.registerDisconnect(this.auth(), {
|
|
40
|
+
kind: 'set', path: operation.path, value: operation.value, priority: operation.priority ?? null,
|
|
41
|
+
});
|
|
38
42
|
}
|
|
39
43
|
}
|
|
40
44
|
this.operations.set(operation);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-lifecycle.js","sourceRoot":"","sources":["../../src/database/connection-lifecycle.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAA4B,MAAM,iCAAiC,CAAC;AAErG,MAAM,OAAO,uBAAuB;IAQf;IACA;IACA;IATF,UAAU,GAAG,IAAI,wBAAwB,EAAE,CAAC;IACrD,QAAQ,GAAyB,IAAI,CAAC;IACtC,MAAM,GAAG,IAAI,CAAC;IACL,mBAAmB,GAAG,IAAI,GAAG,EAA6B,CAAC;IACpE,eAAe,CAAS;IAEhC,YACmB,OAAoB,EACpB,IAAqB,EACrB,KAAc;QAFd,YAAO,GAAP,OAAO,CAAa;QACpB,SAAI,GAAJ,IAAI,CAAiB;QACrB,UAAK,GAAL,KAAK,CAAS;QAE/B,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAC3D,CAAC;IAEO,gBAAgB;QACtB,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;QAC5F,IAAI,mBAAmB;YAAE,OAAO;QAChC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;IAChE,CAAC;IAED,QAAQ,CAAC,SAA8B;QACrC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC,IAAI,aAAa,EAAE,CAAC;gBAClB,
|
|
1
|
+
{"version":3,"file":"connection-lifecycle.js","sourceRoot":"","sources":["../../src/database/connection-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Sandbox, type SandboxEvent } from '../sandbox/index.js';
|
|
1
|
+
import { type Sandbox, type SandboxCommitEvent, type SandboxEvent, type SandboxOperationEvent } from '../sandbox/index.js';
|
|
2
2
|
export interface RtdbReplayOptions {
|
|
3
3
|
rules: {
|
|
4
4
|
rules: Record<string, unknown>;
|
|
@@ -27,11 +27,22 @@ export interface RtdbReplayResult {
|
|
|
27
27
|
replayedState: unknown;
|
|
28
28
|
divergences: RtdbReplayDivergence[];
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* A divergence replay found. `step` is the index, in `rtdbReplaySteps`, of the
|
|
32
|
+
* captured step it came from; a `state-drift` has none.
|
|
33
|
+
*/
|
|
30
34
|
export type RtdbReplayDivergence = {
|
|
35
|
+
step?: number;
|
|
36
|
+
} & ({
|
|
31
37
|
kind: 'now-denied';
|
|
32
38
|
path?: string;
|
|
33
39
|
method?: string;
|
|
34
40
|
reason?: string;
|
|
41
|
+
} | {
|
|
42
|
+
kind: 'now-allowed';
|
|
43
|
+
path?: string;
|
|
44
|
+
method?: string;
|
|
45
|
+
reason?: string;
|
|
35
46
|
} | {
|
|
36
47
|
kind: 'state-drift';
|
|
37
48
|
path?: string;
|
|
@@ -42,6 +53,47 @@ export type RtdbReplayDivergence = {
|
|
|
42
53
|
path?: string;
|
|
43
54
|
method?: string;
|
|
44
55
|
reason: string;
|
|
56
|
+
});
|
|
57
|
+
/**
|
|
58
|
+
* One captured event of an instance, as replay judges it. Every engine that
|
|
59
|
+
* checks a capture walks these in order, so they agree on which events carry
|
|
60
|
+
* a claim the candidate rules must keep:
|
|
61
|
+
*
|
|
62
|
+
* - `app-commit`: a write an application user made and the rules allowed.
|
|
63
|
+
* - `admin-commit`: an admin write; context, not checked.
|
|
64
|
+
* - `allowed-read`: a `get` or listener attach the rules allowed.
|
|
65
|
+
* - `denial`: an operation by an application user the rules denied.
|
|
66
|
+
* - `allowed-registration`: an `onDisconnect` registration the rules allowed.
|
|
67
|
+
*/
|
|
68
|
+
export type RtdbReplayStep = {
|
|
69
|
+
kind: 'app-commit';
|
|
70
|
+
event: SandboxCommitEvent;
|
|
71
|
+
} | {
|
|
72
|
+
kind: 'admin-commit';
|
|
73
|
+
event: SandboxCommitEvent;
|
|
74
|
+
} | {
|
|
75
|
+
kind: 'allowed-read';
|
|
76
|
+
event: SandboxOperationEvent;
|
|
77
|
+
} | {
|
|
78
|
+
kind: 'denial';
|
|
79
|
+
event: SandboxOperationEvent;
|
|
80
|
+
} | {
|
|
81
|
+
kind: 'allowed-registration';
|
|
82
|
+
event: SandboxOperationEvent;
|
|
45
83
|
};
|
|
84
|
+
/** The captured events of `instance` (name or URL; absent is the default instance), in order, as replay judges them. */
|
|
85
|
+
export declare function rtdbReplaySteps(events: readonly SandboxEvent[], instance?: string): RtdbReplayStep[];
|
|
86
|
+
/**
|
|
87
|
+
* The tree `instance` held when the session began: `capturedState`, the tree
|
|
88
|
+
* the session left it with, with the session's commits rewound. Priorities the
|
|
89
|
+
* rewind restores (a session write that replaced a prioritized node records
|
|
90
|
+
* its prior priority) appear as `.priority` keys, the export format the
|
|
91
|
+
* Realtime Database REST API reads; a prioritized leaf becomes
|
|
92
|
+
* `{ ".value": v, ".priority": p }`. A priority the capture never saw is not
|
|
93
|
+
* carried.
|
|
94
|
+
*/
|
|
95
|
+
export declare function rewoundRtdbTree(events: readonly SandboxEvent[], capturedState: unknown, instance?: string): Promise<unknown>;
|
|
96
|
+
/** The paths where `actual` differs from `expected`, as `state-drift` divergences. */
|
|
97
|
+
export declare function rtdbStateDrift(expected: unknown, actual: unknown): RtdbReplayDivergence[];
|
|
46
98
|
export declare function replay(events: readonly SandboxEvent[], opts: RtdbReplayOptions): Promise<RtdbReplayResult>;
|
|
47
99
|
//# sourceMappingURL=replay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/database/replay.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/database/replay.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAoB7B,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC1C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,CACnD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEP;;;;;;;;;;GAUG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,KAAK,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAEnE,wHAAwH;AACxH,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CAapG;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,aAAa,EAAE,OAAO,EACtB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAYlB;AA2BD,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,oBAAoB,EAAE,CAIzF;AAED,wBAAsB,MAAM,CAC1B,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAuC3B"}
|
package/dist/database/replay.js
CHANGED
|
@@ -1,9 +1,81 @@
|
|
|
1
1
|
import { assertCompleteHistory } from '../sandbox/internal/history-integrity.js';
|
|
2
2
|
import { getClock, initializeSandbox, } from '../sandbox/index.js';
|
|
3
|
-
import {
|
|
4
|
-
import { buildConstraint } from './query-shape.js';
|
|
3
|
+
import { getAdminDatabase, getDatabase, ref, remove, runTransaction, set, setPriority, setWithPriority, update, sandbox as rtdbSandbox, } from './index.js';
|
|
5
4
|
import { isJsonObject, jsonValuesEqual } from './sandbox/data-tree.js';
|
|
6
5
|
import { resolveDatabaseInstance } from '../sandbox/internal/instances.js';
|
|
6
|
+
import { getOrCreateBackend } from './sandbox/backend-for.js';
|
|
7
|
+
/** The captured events of `instance` (name or URL; absent is the default instance), in order, as replay judges them. */
|
|
8
|
+
export function rtdbReplaySteps(events, instance) {
|
|
9
|
+
const name = resolveDatabaseInstance(instance)?.name;
|
|
10
|
+
const steps = [];
|
|
11
|
+
for (const event of events) {
|
|
12
|
+
if (instanceOf(event) !== name)
|
|
13
|
+
continue;
|
|
14
|
+
if (isAllowedRead(event))
|
|
15
|
+
steps.push({ kind: 'allowed-read', event });
|
|
16
|
+
else if (isAppDenial(event))
|
|
17
|
+
steps.push({ kind: 'denial', event });
|
|
18
|
+
else if (isAllowedRegistration(event))
|
|
19
|
+
steps.push({ kind: 'allowed-registration', event });
|
|
20
|
+
else if (isRtdbCommit(event)) {
|
|
21
|
+
steps.push(event.detail?.admin === true ? { kind: 'admin-commit', event } : { kind: 'app-commit', event });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return steps;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* The tree `instance` held when the session began: `capturedState`, the tree
|
|
28
|
+
* the session left it with, with the session's commits rewound. Priorities the
|
|
29
|
+
* rewind restores (a session write that replaced a prioritized node records
|
|
30
|
+
* its prior priority) appear as `.priority` keys, the export format the
|
|
31
|
+
* Realtime Database REST API reads; a prioritized leaf becomes
|
|
32
|
+
* `{ ".value": v, ".priority": p }`. A priority the capture never saw is not
|
|
33
|
+
* carried.
|
|
34
|
+
*/
|
|
35
|
+
export async function rewoundRtdbTree(events, capturedState, instance) {
|
|
36
|
+
const sandbox = initializeSandbox();
|
|
37
|
+
const name = resolveDatabaseInstance(instance)?.name;
|
|
38
|
+
const adminDb = getAdminDatabase(sandbox, name);
|
|
39
|
+
rtdbSandbox.setData(adminDb, { '/': capturedState ?? null });
|
|
40
|
+
const commits = events.filter((event) => instanceOf(event) === name && isRtdbCommit(event));
|
|
41
|
+
await rewindRtdbCommits(adminDb, commits);
|
|
42
|
+
const exported = getOrCreateBackend(sandbox, resolveDatabaseInstance(name)).exportPersistenceState();
|
|
43
|
+
return withExportedPriorities(exported.data ?? null, exported.priorities ?? {});
|
|
44
|
+
}
|
|
45
|
+
/** `tree` with each priority in `priorities` (by absolute path) set as a `.priority` key. */
|
|
46
|
+
function withExportedPriorities(tree, priorities) {
|
|
47
|
+
let out = structuredClone(tree);
|
|
48
|
+
for (const [path, priority] of Object.entries(priorities)) {
|
|
49
|
+
if (priority === null)
|
|
50
|
+
continue;
|
|
51
|
+
const segments = path.split('/').filter(Boolean);
|
|
52
|
+
const attach = (node) => {
|
|
53
|
+
if (node === null || node === undefined)
|
|
54
|
+
return node;
|
|
55
|
+
if (isJsonObject(node))
|
|
56
|
+
return { ...node, '.priority': priority };
|
|
57
|
+
return { '.value': node, '.priority': priority };
|
|
58
|
+
};
|
|
59
|
+
if (segments.length === 0) {
|
|
60
|
+
out = attach(out);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
let parent = out;
|
|
64
|
+
for (const segment of segments.slice(0, -1)) {
|
|
65
|
+
parent = isJsonObject(parent) ? parent[segment] : undefined;
|
|
66
|
+
}
|
|
67
|
+
const last = segments.at(-1);
|
|
68
|
+
if (isJsonObject(parent) && last in parent)
|
|
69
|
+
parent[last] = attach(parent[last]);
|
|
70
|
+
}
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
/** The paths where `actual` differs from `expected`, as `state-drift` divergences. */
|
|
74
|
+
export function rtdbStateDrift(expected, actual) {
|
|
75
|
+
const out = [];
|
|
76
|
+
collectStateDrift(expected, actual, '/', out);
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
7
79
|
export async function replay(events, opts) {
|
|
8
80
|
assertCompleteHistory(events);
|
|
9
81
|
const sandbox = initializeSandbox();
|
|
@@ -11,43 +83,22 @@ export async function replay(events, opts) {
|
|
|
11
83
|
const db = getDatabase(sandbox, target.instance);
|
|
12
84
|
const adminDb = getAdminDatabase(sandbox, target.instance);
|
|
13
85
|
rtdbSandbox.setRules(db, opts.rules);
|
|
14
|
-
const
|
|
15
|
-
const commits = instanceEvents.filter(isRtdbCommit);
|
|
86
|
+
const steps = rtdbReplaySteps(events, target.instance);
|
|
16
87
|
const divergences = [];
|
|
17
88
|
let checkedEvents = 0;
|
|
18
89
|
const hasCapturedState = opts.capturedState !== undefined;
|
|
19
90
|
if (hasCapturedState) {
|
|
91
|
+
// Rewound in this sandbox, not through `rewoundRtdbTree`: priorities live
|
|
92
|
+
// in the backend's metadata, and no tree export carries them.
|
|
20
93
|
rtdbSandbox.setData(adminDb, { '/': opts.capturedState });
|
|
21
|
-
await rewindRtdbCommits(adminDb,
|
|
94
|
+
await rewindRtdbCommits(adminDb, steps.flatMap((step) => (step.kind === 'app-commit' || step.kind === 'admin-commit' ? [step.event] : [])));
|
|
22
95
|
}
|
|
23
|
-
for (const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (!isRtdbCommit(event))
|
|
30
|
-
continue;
|
|
31
|
-
const commit = event;
|
|
32
|
-
const path = commit.path ?? '/';
|
|
33
|
-
const isAdmin = commit.detail?.admin === true;
|
|
34
|
-
if (isAdmin) {
|
|
35
|
-
await replayRtdbAdminCommit(target, commit, divergences);
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
checkedEvents += 1;
|
|
39
|
-
try {
|
|
40
|
-
await replayRtdbAppCommit(target, commit, divergences);
|
|
41
|
-
}
|
|
42
|
-
catch (e) {
|
|
43
|
-
const isError = e instanceof Error;
|
|
44
|
-
divergences.push({
|
|
45
|
-
kind: 'now-denied',
|
|
46
|
-
path,
|
|
47
|
-
method: commit.method,
|
|
48
|
-
reason: isError ? e.message : String(e),
|
|
49
|
-
});
|
|
50
|
-
}
|
|
96
|
+
for (const [index, step] of steps.entries()) {
|
|
97
|
+
const before = divergences.length;
|
|
98
|
+
await replayStep(target, step, divergences, () => { checkedEvents += 1; });
|
|
99
|
+
// Each divergence names the replay step it came from, so engines compare step for step.
|
|
100
|
+
for (const divergence of divergences.slice(before))
|
|
101
|
+
divergence.step = index;
|
|
51
102
|
}
|
|
52
103
|
const replayedState = rtdbSandbox.snapshotState(adminDb);
|
|
53
104
|
if (hasCapturedState) {
|
|
@@ -61,6 +112,37 @@ export async function replay(events, opts) {
|
|
|
61
112
|
divergences,
|
|
62
113
|
};
|
|
63
114
|
}
|
|
115
|
+
/** Replay one step under the candidate rules; `checked` counts a step that carries a claim. */
|
|
116
|
+
async function replayStep(target, step, divergences, checked) {
|
|
117
|
+
if (step.kind === 'admin-commit') {
|
|
118
|
+
await replayRtdbAdminCommit(target, step.event, divergences);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
checked();
|
|
122
|
+
if (step.kind === 'allowed-read') {
|
|
123
|
+
await replayRtdbRead(target, step.event, divergences);
|
|
124
|
+
}
|
|
125
|
+
else if (step.kind === 'denial') {
|
|
126
|
+
checkRtdbDecision(target, step.event, 'deny', divergences);
|
|
127
|
+
}
|
|
128
|
+
else if (step.kind === 'allowed-registration') {
|
|
129
|
+
checkRtdbDecision(target, step.event, 'allow', divergences);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
const commit = step.event;
|
|
133
|
+
try {
|
|
134
|
+
await replayRtdbAppCommit(target, commit, divergences);
|
|
135
|
+
}
|
|
136
|
+
catch (e) {
|
|
137
|
+
divergences.push({
|
|
138
|
+
kind: 'now-denied',
|
|
139
|
+
path: commit.path ?? '/',
|
|
140
|
+
method: commit.method,
|
|
141
|
+
reason: e instanceof Error ? e.message : String(e),
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
64
146
|
/**
|
|
65
147
|
* The instance an event names, or `undefined` for the default instance. An
|
|
66
148
|
* event captured before events named their instance carries no field, so it
|
|
@@ -87,58 +169,146 @@ async function replayRtdbAppCommit({ sandbox, instance }, commit, divergences) {
|
|
|
87
169
|
}
|
|
88
170
|
}
|
|
89
171
|
/**
|
|
90
|
-
* A
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
172
|
+
* A read by an application user that was allowed: a one-shot `get`, or the
|
|
173
|
+
* attach of a listener, whose first read the same `.read` rules decide. The
|
|
174
|
+
* candidate rules must keep allowing it: its `.read` rules, and the `query.*`
|
|
175
|
+
* rule expressions when it carried a query. An admin read and a denied read
|
|
176
|
+
* carry no claim the candidate rules must keep.
|
|
94
177
|
*/
|
|
95
|
-
function
|
|
178
|
+
function isAllowedRead(event) {
|
|
96
179
|
return event.kind === 'operation'
|
|
97
180
|
&& event.service === 'rtdb'
|
|
98
|
-
&& event.method === 'get'
|
|
181
|
+
&& (event.method === 'get' || (event.method === 'listen' && event.origin === 'listener'))
|
|
99
182
|
&& event.origin !== 'admin'
|
|
100
|
-
&& event.result === 'allow'
|
|
101
|
-
&& event.request?.query !== undefined;
|
|
183
|
+
&& event.result === 'allow';
|
|
102
184
|
}
|
|
103
|
-
/**
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
185
|
+
/**
|
|
186
|
+
* Decide an allowed read again under the candidate rules, by its `.read`
|
|
187
|
+
* rules and `query.*` expressions alone, against the replay tree at that
|
|
188
|
+
* point. The read is not run: a listener on an unindexed query only warns,
|
|
189
|
+
* where running it as a one-shot query would refuse it for the index.
|
|
190
|
+
*/
|
|
191
|
+
async function replayRtdbRead({ sandbox, instance }, event, divergences) {
|
|
192
|
+
syncReplayClock(sandbox, event.at);
|
|
193
|
+
const path = event.path ?? '/';
|
|
194
|
+
const backend = getOrCreateBackend(sandbox, resolveDatabaseInstance(instance));
|
|
195
|
+
try {
|
|
196
|
+
backend.validateRead(event.auth, path, event.request?.query);
|
|
114
197
|
}
|
|
115
|
-
|
|
116
|
-
|
|
198
|
+
catch (e) {
|
|
199
|
+
const reason = e instanceof Error ? e.message : String(e);
|
|
200
|
+
const denied = e.code === 'PERMISSION_DENIED';
|
|
201
|
+
divergences.push(denied
|
|
202
|
+
? { kind: 'now-denied', path, method: event.method, reason }
|
|
203
|
+
: { kind: 'unsupported', path, method: event.method, reason });
|
|
117
204
|
}
|
|
118
|
-
|
|
119
|
-
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* An operation by an application user that the rules denied. A candidate
|
|
208
|
+
* ruleset that allows it has opened access the captured rules kept closed.
|
|
209
|
+
*/
|
|
210
|
+
function isAppDenial(event) {
|
|
211
|
+
return event.kind === 'operation'
|
|
212
|
+
&& event.service === 'rtdb'
|
|
213
|
+
&& event.origin !== 'admin'
|
|
214
|
+
&& event.result === 'deny'
|
|
215
|
+
&& !isRevocation(event);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* A listener the rules stopped allowing after it attached, because of a write
|
|
219
|
+
* or a rules change. It is a consequence, not a request: its attach was
|
|
220
|
+
* checked as an allowed read, and the write that caused it is checked itself.
|
|
221
|
+
*/
|
|
222
|
+
function isRevocation(event) {
|
|
223
|
+
return event.detail?.revoked === true;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* An `onDisconnect` registration by an application user that the rules
|
|
227
|
+
* allowed. Production decides a registration when it is made, so the
|
|
228
|
+
* candidate rules must keep allowing it at that point in the session.
|
|
229
|
+
*/
|
|
230
|
+
function isAllowedRegistration(event) {
|
|
231
|
+
return event.kind === 'operation'
|
|
232
|
+
&& event.service === 'rtdb'
|
|
233
|
+
&& event.origin !== 'admin'
|
|
234
|
+
&& event.result === 'allow'
|
|
235
|
+
&& typeof event.method === 'string'
|
|
236
|
+
&& event.method.startsWith('onDisconnect.');
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* The backend check that decides a captured operation again under the
|
|
240
|
+
* candidate rules, against the replay tree as it stands at that point in the
|
|
241
|
+
* session, without writing or emitting an event; or the reason it cannot be
|
|
242
|
+
* decided from what the capture holds.
|
|
243
|
+
*/
|
|
244
|
+
function decisionCheck(backend, event) {
|
|
245
|
+
const path = event.path ?? '/';
|
|
246
|
+
const data = event.request?.data;
|
|
247
|
+
const detail = (event.detail ?? {});
|
|
248
|
+
switch (event.method) {
|
|
249
|
+
case 'get':
|
|
250
|
+
case 'listen':
|
|
251
|
+
return () => backend.validateRead(event.auth, path, event.request?.query);
|
|
252
|
+
case 'set':
|
|
253
|
+
case 'transaction':
|
|
254
|
+
return () => backend.validateSet(event.auth, path, data ?? null, (detail.priority ?? null));
|
|
255
|
+
case 'remove':
|
|
256
|
+
return () => backend.validateSet(event.auth, path, null);
|
|
257
|
+
case 'update':
|
|
258
|
+
if (!isJsonObject(detail.patch) || typeof detail.rootPath !== 'string') {
|
|
259
|
+
return 'the capture records only the denied path of this update, not the paths written with it, so the update cannot be rebuilt.';
|
|
260
|
+
}
|
|
261
|
+
return () => backend.validateUpdate(event.auth, detail.rootPath, detail.patch);
|
|
262
|
+
case 'setPriority':
|
|
263
|
+
return () => backend.validatePriority(event.auth, path, data);
|
|
264
|
+
case 'onDisconnect.set':
|
|
265
|
+
return () => backend.validateSet(event.auth, path, data ?? null, (detail.priority ?? null));
|
|
266
|
+
case 'onDisconnect.remove':
|
|
267
|
+
return () => backend.validateSet(event.auth, path, null);
|
|
268
|
+
case 'onDisconnect.update':
|
|
269
|
+
if (!isJsonObject(data))
|
|
270
|
+
return 'the captured onDisconnect update did not contain an object patch.';
|
|
271
|
+
return () => backend.validateUpdate(event.auth, path, data);
|
|
272
|
+
default:
|
|
273
|
+
return `RTDB replay does not check '${event.method}' operations.`;
|
|
120
274
|
}
|
|
121
|
-
return constraints;
|
|
122
275
|
}
|
|
123
|
-
|
|
276
|
+
/**
|
|
277
|
+
* Decide a captured operation again under the candidate rules. `captured` is
|
|
278
|
+
* the verdict the session's rules gave: a denial the candidate rules allow is
|
|
279
|
+
* `now-allowed`, an allowed registration they deny is `now-denied`.
|
|
280
|
+
*/
|
|
281
|
+
function checkRtdbDecision({ sandbox, instance }, event, captured, divergences) {
|
|
124
282
|
syncReplayClock(sandbox, event.at);
|
|
125
283
|
const path = event.path ?? '/';
|
|
126
|
-
const
|
|
127
|
-
|
|
284
|
+
const check = decisionCheck(getOrCreateBackend(sandbox, resolveDatabaseInstance(instance)), event);
|
|
285
|
+
if (typeof check === 'string') {
|
|
286
|
+
divergences.push({ kind: 'unsupported', path, method: event.method, reason: check });
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
let allowed = true;
|
|
290
|
+
let reason;
|
|
128
291
|
try {
|
|
129
|
-
|
|
130
|
-
await get(query(ref(db, path), ...constraintsOfSpec(event.request?.query)));
|
|
292
|
+
check();
|
|
131
293
|
}
|
|
132
294
|
catch (e) {
|
|
295
|
+
reason = e instanceof Error ? e.message : String(e);
|
|
296
|
+
if (e.code !== 'PERMISSION_DENIED') {
|
|
297
|
+
divergences.push({ kind: 'unsupported', path, method: event.method, reason });
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
allowed = false;
|
|
301
|
+
}
|
|
302
|
+
if (captured === 'deny' && allowed) {
|
|
133
303
|
divergences.push({
|
|
134
|
-
kind: 'now-
|
|
304
|
+
kind: 'now-allowed',
|
|
135
305
|
path,
|
|
136
306
|
method: event.method,
|
|
137
|
-
reason:
|
|
307
|
+
reason: 'the captured rules denied this operation; the candidate rules allow it.',
|
|
138
308
|
});
|
|
139
309
|
}
|
|
140
|
-
|
|
141
|
-
|
|
310
|
+
else if (captured === 'allow' && !allowed) {
|
|
311
|
+
divergences.push({ kind: 'now-denied', path, method: event.method, reason });
|
|
142
312
|
}
|
|
143
313
|
}
|
|
144
314
|
async function replayRtdbAdminCommit({ sandbox, instance }, commit, divergences) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/database/replay.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/database/replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import type { AuthState, Sandbox } from 'pyric/sandbox';
|
|
7
7
|
import type { ChildListener, ValueListenerSnapshot } from './listener-types.js';
|
|
8
8
|
import type { Priority, QueryRow, QuerySpec } from './query.js';
|
|
9
|
+
import { WritePlane } from './write-plane.js';
|
|
9
10
|
import type { JsonValue } from './data-tree.js';
|
|
10
11
|
import type { ListenerAttribution } from '../../sandbox/attribution/listener-owners.js';
|
|
11
12
|
export declare class RtdbBackend {
|
|
@@ -50,6 +51,10 @@ export declare class RtdbBackend {
|
|
|
50
51
|
update(auth: AuthState, path: string, patch: Record<string, JsonValue>): void;
|
|
51
52
|
remove(auth: AuthState, path: string): void;
|
|
52
53
|
setPriority(auth: AuthState, path: string, priority: Priority): void;
|
|
54
|
+
validateRead(auth: AuthState, path: string, spec?: QuerySpec): void;
|
|
55
|
+
validatePriority(auth: AuthState, path: string, priority: Priority): void;
|
|
56
|
+
/** Decide and record an `onDisconnect` registration; see `WritePlane.registerDisconnect`. */
|
|
57
|
+
registerDisconnect(auth: AuthState, operation: Parameters<WritePlane['registerDisconnect']>[1]): void;
|
|
53
58
|
validateSet(auth: AuthState, path: string, value: unknown, priority?: Priority): void;
|
|
54
59
|
validateUpdate(auth: AuthState, path: string, patch: Record<string, unknown>): void;
|
|
55
60
|
onValue(auth: AuthState, path: string, cb: (snap: ValueListenerSnapshot) => void, query?: QuerySpec, cancelCallback?: (error: Error) => void, onCanceled?: () => void, attribution?: ListenerAttribution): () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/database/sandbox/backend.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGhF,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../../src/database/sandbox/backend.ts"],"names":[],"mappings":"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"}
|