@fuzdev/fuz_app 0.110.1 → 0.112.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/dist/actions/CLAUDE.md +15 -11
- package/dist/actions/action_rpc.d.ts +3 -3
- package/dist/actions/action_rpc.d.ts.map +1 -1
- package/dist/actions/action_rpc.js +4 -6
- package/dist/actions/peer_ping.d.ts +8 -0
- package/dist/actions/peer_ping.d.ts.map +1 -1
- package/dist/actions/peer_ping.js +8 -0
- package/dist/actions/peer_request.d.ts +1 -1
- package/dist/actions/peer_request.js +1 -1
- package/dist/actions/perform_action.d.ts +16 -9
- package/dist/actions/perform_action.d.ts.map +1 -1
- package/dist/actions/perform_action.js +30 -21
- package/dist/actions/register_action_ws.d.ts +1 -1
- package/dist/actions/register_action_ws.d.ts.map +1 -1
- package/dist/actions/register_action_ws.js +88 -21
- package/dist/auth/CLAUDE.md +59 -10
- package/dist/auth/account_action_specs.d.ts +0 -2
- package/dist/auth/account_action_specs.d.ts.map +1 -1
- package/dist/auth/account_actions.d.ts.map +1 -1
- package/dist/auth/account_actions.js +10 -1
- package/dist/auth/account_queries.d.ts +22 -0
- package/dist/auth/account_queries.d.ts.map +1 -1
- package/dist/auth/account_queries.js +70 -16
- package/dist/auth/account_schema.d.ts +27 -9
- package/dist/auth/account_schema.d.ts.map +1 -1
- package/dist/auth/account_schema.js +23 -3
- package/dist/auth/actor_search_actions.d.ts +3 -3
- package/dist/auth/actor_search_actions.d.ts.map +1 -1
- package/dist/auth/actor_search_actions.js +10 -6
- package/dist/auth/admin_action_specs.d.ts +0 -2
- package/dist/auth/admin_action_specs.d.ts.map +1 -1
- package/dist/auth/api_token_queries.d.ts +9 -4
- package/dist/auth/api_token_queries.d.ts.map +1 -1
- package/dist/auth/api_token_queries.js +36 -8
- package/dist/auth/app_settings_queries.d.ts +8 -0
- package/dist/auth/app_settings_queries.d.ts.map +1 -1
- package/dist/auth/app_settings_queries.js +16 -3
- package/dist/auth/audit_log_queries.d.ts +21 -3
- package/dist/auth/audit_log_queries.d.ts.map +1 -1
- package/dist/auth/audit_log_queries.js +38 -7
- package/dist/auth/audit_log_schema.d.ts +0 -1
- package/dist/auth/audit_log_schema.d.ts.map +1 -1
- package/dist/auth/auth_ddl.d.ts +6 -0
- package/dist/auth/auth_ddl.d.ts.map +1 -1
- package/dist/auth/auth_ddl.js +9 -0
- package/dist/auth/cell_actions.d.ts.map +1 -1
- package/dist/auth/cell_actions.js +3 -8
- package/dist/auth/cell_audit_actions.d.ts.map +1 -1
- package/dist/auth/cell_audit_actions.js +1 -1
- package/dist/auth/cell_field_actions.js +1 -1
- package/dist/auth/cell_grant_actions.js +1 -1
- package/dist/auth/cell_item_actions.js +1 -1
- package/dist/auth/invite_queries.d.ts +10 -0
- package/dist/auth/invite_queries.d.ts.map +1 -1
- package/dist/auth/invite_queries.js +28 -7
- package/dist/auth/migrations.d.ts.map +1 -1
- package/dist/auth/migrations.js +10 -0
- package/dist/auth/role_grant_offer_ddl.d.ts +34 -2
- package/dist/auth/role_grant_offer_ddl.d.ts.map +1 -1
- package/dist/auth/role_grant_offer_ddl.js +61 -2
- package/dist/auth/role_grant_offer_queries.d.ts.map +1 -1
- package/dist/auth/role_grant_offer_queries.js +48 -53
- package/dist/auth/role_grant_queries.d.ts +18 -0
- package/dist/auth/role_grant_queries.d.ts.map +1 -1
- package/dist/auth/role_grant_queries.js +58 -18
- package/dist/auth/session_queries.d.ts +12 -3
- package/dist/auth/session_queries.d.ts.map +1 -1
- package/dist/auth/session_queries.js +26 -6
- package/dist/db/CLAUDE.md +34 -0
- package/dist/db/cell_audit_queries.d.ts.map +1 -1
- package/dist/db/cell_audit_queries.js +3 -1
- package/dist/db/cell_field_queries.d.ts +12 -3
- package/dist/db/cell_field_queries.d.ts.map +1 -1
- package/dist/db/cell_field_queries.js +25 -7
- package/dist/db/cell_grant_queries.d.ts +10 -2
- package/dist/db/cell_grant_queries.d.ts.map +1 -1
- package/dist/db/cell_grant_queries.js +29 -11
- package/dist/db/cell_item_queries.d.ts +13 -2
- package/dist/db/cell_item_queries.d.ts.map +1 -1
- package/dist/db/cell_item_queries.js +27 -7
- package/dist/db/cell_queries.d.ts +32 -3
- package/dist/db/cell_queries.d.ts.map +1 -1
- package/dist/db/cell_queries.js +57 -22
- package/dist/db/fact_queries.d.ts +7 -0
- package/dist/db/fact_queries.d.ts.map +1 -1
- package/dist/db/fact_queries.js +27 -4
- package/dist/db/schema_ready.d.ts +6 -1
- package/dist/db/schema_ready.d.ts.map +1 -1
- package/dist/db/schema_ready.js +6 -2
- package/dist/db/sql_columns.d.ts +144 -0
- package/dist/db/sql_columns.d.ts.map +1 -0
- package/dist/db/sql_columns.js +164 -0
- package/dist/db/sql_identifier.d.ts +6 -5
- package/dist/db/sql_identifier.d.ts.map +1 -1
- package/dist/db/sql_identifier.js +6 -5
- package/dist/http/CLAUDE.md +4 -2
- package/dist/http/jsonrpc_helpers.d.ts +13 -0
- package/dist/http/jsonrpc_helpers.d.ts.map +1 -1
- package/dist/http/jsonrpc_helpers.js +13 -0
- package/dist/http/route_spec.d.ts +2 -2
- package/dist/server/app_server.d.ts.map +1 -1
- package/dist/server/app_server.js +1 -2
- package/dist/server/serve_fact_route.d.ts.map +1 -1
- package/dist/server/serve_fact_route.js +7 -2
- package/dist/testing/CLAUDE.md +55 -28
- package/dist/testing/admin_integration.d.ts +0 -3
- package/dist/testing/admin_integration.d.ts.map +1 -1
- package/dist/testing/admin_integration.js +0 -1
- package/dist/testing/adversarial_404.d.ts.map +1 -1
- package/dist/testing/adversarial_404.js +4 -1
- package/dist/testing/adversarial_input.d.ts.map +1 -1
- package/dist/testing/adversarial_input.js +5 -4
- package/dist/testing/app_server.d.ts +4 -3
- package/dist/testing/app_server.d.ts.map +1 -1
- package/dist/testing/app_server.js +11 -5
- package/dist/testing/attack_surface.d.ts +16 -0
- package/dist/testing/attack_surface.d.ts.map +1 -1
- package/dist/testing/attack_surface.js +36 -13
- package/dist/testing/audit_completeness.d.ts +0 -3
- package/dist/testing/audit_completeness.d.ts.map +1 -1
- package/dist/testing/audit_completeness.js +0 -1
- package/dist/testing/auth_apps.d.ts +9 -2
- package/dist/testing/auth_apps.d.ts.map +1 -1
- package/dist/testing/auth_apps.js +9 -2
- package/dist/testing/cross_backend/account_lifecycle.d.ts +5 -4
- package/dist/testing/cross_backend/account_lifecycle.d.ts.map +1 -1
- package/dist/testing/cross_backend/account_lifecycle.js +7 -0
- package/dist/testing/cross_backend/action_manifest.d.ts +19 -3
- package/dist/testing/cross_backend/action_manifest.d.ts.map +1 -1
- package/dist/testing/cross_backend/action_manifest.js +10 -4
- package/dist/testing/cross_backend/action_manifest_parity.d.ts +9 -3
- package/dist/testing/cross_backend/action_manifest_parity.d.ts.map +1 -1
- package/dist/testing/cross_backend/action_manifest_parity.js +6 -0
- package/dist/testing/cross_backend/actor_lookup.d.ts +3 -2
- package/dist/testing/cross_backend/actor_lookup.d.ts.map +1 -1
- package/dist/testing/cross_backend/body_size.d.ts +4 -2
- package/dist/testing/cross_backend/body_size.d.ts.map +1 -1
- package/dist/testing/cross_backend/body_size.js +1 -1
- package/dist/testing/cross_backend/cell_crud.d.ts +2 -2
- package/dist/testing/cross_backend/cell_crud.d.ts.map +1 -1
- package/dist/testing/cross_backend/cell_crud.js +10 -0
- package/dist/testing/cross_backend/cell_gated_create.d.ts +3 -3
- package/dist/testing/cross_backend/cell_gated_create.d.ts.map +1 -1
- package/dist/testing/cross_backend/cell_grant_role.d.ts +2 -2
- package/dist/testing/cross_backend/cell_grant_role.d.ts.map +1 -1
- package/dist/testing/cross_backend/cell_relations.d.ts +2 -2
- package/dist/testing/cross_backend/cell_relations.d.ts.map +1 -1
- package/dist/testing/cross_backend/expected_schema.json +1 -1
- package/dist/testing/cross_backend/fact_serving.d.ts +2 -2
- package/dist/testing/cross_backend/fact_serving.d.ts.map +1 -1
- package/dist/testing/cross_backend/make_cross_backend_project.d.ts +17 -2
- package/dist/testing/cross_backend/make_cross_backend_project.d.ts.map +1 -1
- package/dist/testing/cross_backend/make_cross_backend_project.js +23 -3
- package/dist/testing/cross_backend/origin.d.ts +4 -2
- package/dist/testing/cross_backend/origin.d.ts.map +1 -1
- package/dist/testing/cross_backend/origin.js +1 -1
- package/dist/testing/cross_backend/peer_ping_ws.d.ts.map +1 -1
- package/dist/testing/cross_backend/peer_ping_ws.js +11 -7
- package/dist/testing/cross_backend/query_shape.d.ts +6 -5
- package/dist/testing/cross_backend/query_shape.d.ts.map +1 -1
- package/dist/testing/cross_backend/ready.d.ts +2 -2
- package/dist/testing/cross_backend/ready.d.ts.map +1 -1
- package/dist/testing/cross_backend/role_grant_offer_enumeration.d.ts.map +1 -1
- package/dist/testing/cross_backend/role_grant_offer_enumeration.js +7 -1
- package/dist/testing/cross_backend/setup.d.ts +26 -6
- package/dist/testing/cross_backend/setup.d.ts.map +1 -1
- package/dist/testing/cross_backend/standard.d.ts +5 -1
- package/dist/testing/cross_backend/standard.d.ts.map +1 -1
- package/dist/testing/cross_backend/standard.js +1 -5
- package/dist/testing/cross_backend/testing_backdoor.js +1 -1
- package/dist/testing/cross_backend/testing_reset_actions.d.ts +5 -0
- package/dist/testing/cross_backend/testing_reset_actions.d.ts.map +1 -1
- package/dist/testing/cross_backend/token_lifetime.d.ts.map +1 -1
- package/dist/testing/cross_backend/token_lifetime.js +6 -0
- package/dist/testing/cross_backend/token_scope_surface.d.ts +2 -2
- package/dist/testing/cross_backend/token_scope_surface.d.ts.map +1 -1
- package/dist/testing/cross_backend/wire_shapes.d.ts +22 -0
- package/dist/testing/cross_backend/wire_shapes.d.ts.map +1 -0
- package/dist/testing/cross_backend/wire_shapes.js +41 -0
- package/dist/testing/data_exposure.d.ts +0 -3
- package/dist/testing/data_exposure.d.ts.map +1 -1
- package/dist/testing/data_exposure.js +0 -1
- package/dist/testing/db.d.ts +62 -7
- package/dist/testing/db.d.ts.map +1 -1
- package/dist/testing/db.js +86 -28
- package/dist/testing/integration.d.ts.map +1 -1
- package/dist/testing/integration.js +15 -2
- package/dist/testing/round_trip.d.ts +0 -3
- package/dist/testing/round_trip.d.ts.map +1 -1
- package/dist/testing/round_trip.js +0 -4
- package/dist/testing/rpc_attack_surface.js +2 -2
- package/dist/testing/rpc_round_trip.d.ts +0 -3
- package/dist/testing/rpc_round_trip.d.ts.map +1 -1
- package/dist/testing/rpc_round_trip.js +0 -1
- package/dist/testing/schema_generators.d.ts +15 -0
- package/dist/testing/schema_generators.d.ts.map +1 -1
- package/dist/testing/schema_generators.js +45 -11
- package/dist/testing/standard.d.ts +5 -1
- package/dist/testing/standard.d.ts.map +1 -1
- package/dist/testing/standard.js +2 -7
- package/dist/timestamp.d.ts +58 -0
- package/dist/timestamp.d.ts.map +1 -0
- package/dist/timestamp.js +57 -0
- package/dist/ui/AdminOverview.svelte +5 -10
- package/dist/ui/AdminOverview.svelte.d.ts.map +1 -1
- package/dist/ui/RoleGrantOfferHistory.svelte +3 -1
- package/dist/ui/RoleGrantOfferHistory.svelte.d.ts.map +1 -1
- package/dist/ui/role_grant_offers_state.svelte.d.ts.map +1 -1
- package/dist/ui/role_grant_offers_state.svelte.js +6 -2
- package/package.json +1 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import '../assert_dev_env.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { RpcPathCapabilityGatedCrossSuiteOptions, SetupTest } from './setup.js';
|
|
3
3
|
/**
|
|
4
4
|
* The fact suite adds one optional knob to the shared cell options: a setup
|
|
5
5
|
* variant whose keeper carries a **second actor**. Only the multi-actor case
|
|
6
6
|
* needs it; the rest of the suite runs single-actor, so wiring it is opt-in.
|
|
7
7
|
* Omit it and the multi-actor case silently skips.
|
|
8
8
|
*/
|
|
9
|
-
export interface FactServingCrossTestOptions extends
|
|
9
|
+
export interface FactServingCrossTestOptions extends RpcPathCapabilityGatedCrossSuiteOptions {
|
|
10
10
|
readonly setup_test_multi_actor?: SetupTest;
|
|
11
11
|
}
|
|
12
12
|
export declare const describe_fact_serving_cross_tests: (options: FactServingCrossTestOptions) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fact_serving.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/fact_serving.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAiD9B,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"fact_serving.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/fact_serving.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAiD9B,OAAO,KAAK,EAAE,uCAAuC,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAErF;;;;;GAKG;AACH,MAAM,WAAW,2BAA4B,SAAQ,uCAAuC;IAC3F,QAAQ,CAAC,sBAAsB,CAAC,EAAE,SAAS,CAAC;CAC5C;AA8BD,eAAO,MAAM,iCAAiC,GAAI,SAAS,2BAA2B,KAAG,IAiOxF,CAAC"}
|
|
@@ -48,14 +48,27 @@ export interface CrossBackendProjectOptions {
|
|
|
48
48
|
readonly exclude?: ReadonlyArray<string>;
|
|
49
49
|
/** vitest `sequence.groupOrder`. Default: `3` (runs after unit + db). */
|
|
50
50
|
readonly group_order?: number;
|
|
51
|
+
/**
|
|
52
|
+
* Per-test timeout in ms. Default: `30_000` — see `DEFAULT_TEST_TIMEOUT`
|
|
53
|
+
* for why the 5 s vitest default does not fit a spawned-backend suite.
|
|
54
|
+
* Always emitted, so a consumer's root `testTimeout` never leaks in.
|
|
55
|
+
*/
|
|
56
|
+
readonly test_timeout?: number;
|
|
57
|
+
/**
|
|
58
|
+
* Per-hook timeout in ms for `beforeAll` / `afterAll` etc. Default:
|
|
59
|
+
* `30_000`. Always emitted, so a consumer's root `hookTimeout` never
|
|
60
|
+
* leaks in.
|
|
61
|
+
*/
|
|
62
|
+
readonly hook_timeout?: number;
|
|
51
63
|
}
|
|
52
64
|
/**
|
|
53
65
|
* Build a single cross-backend vitest project config. Spread the results
|
|
54
66
|
* into `test.projects` in the consumer's `vite.config.ts`. `isolate: false`
|
|
55
67
|
* + `fileParallelism: false` because a project shares one spawned backend
|
|
56
|
-
* across its files
|
|
68
|
+
* across its files, and `testTimeout` / `hookTimeout` are always emitted so
|
|
69
|
+
* a spawned-backend case is never held to vitest's 5 s / 10 s defaults.
|
|
57
70
|
*/
|
|
58
|
-
export declare const make_cross_backend_project: ({ name, global_setup, include, exclude, group_order }: CrossBackendProjectOptions) => {
|
|
71
|
+
export declare const make_cross_backend_project: ({ name, global_setup, include, exclude, group_order, test_timeout, hook_timeout }: CrossBackendProjectOptions) => {
|
|
59
72
|
extends: true;
|
|
60
73
|
test: {
|
|
61
74
|
name: string;
|
|
@@ -67,6 +80,8 @@ export declare const make_cross_backend_project: ({ name, global_setup, include,
|
|
|
67
80
|
sequence: {
|
|
68
81
|
groupOrder: number;
|
|
69
82
|
};
|
|
83
|
+
testTimeout: number;
|
|
84
|
+
hookTimeout: number;
|
|
70
85
|
};
|
|
71
86
|
};
|
|
72
87
|
//# sourceMappingURL=make_cross_backend_project.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make_cross_backend_project.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/make_cross_backend_project.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;
|
|
1
|
+
{"version":3,"file":"make_cross_backend_project.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/make_cross_backend_project.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AA2BH,MAAM,WAAW,0BAA0B;IAC1C;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,yEAAyE;IACzE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,GAAI,mFAQxC,0BAA0B,KAAG;IAC/B,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACvB,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,EAAE,KAAK,CAAC;QACf,eAAe,EAAE,KAAK,CAAC;QACvB,QAAQ,EAAE;YAAE,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC;QACjC,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACpB,CAAC;CAcD,CAAC"}
|
|
@@ -31,13 +31,31 @@
|
|
|
31
31
|
const DEFAULT_INCLUDE = ['src/test/cross_backend/*.cross.test.ts'];
|
|
32
32
|
/** vitest `sequence.groupOrder` for cross-backend projects — after unit (1) + db (2). */
|
|
33
33
|
const DEFAULT_GROUP_ORDER = 3;
|
|
34
|
+
/**
|
|
35
|
+
* Per-test timeout (ms). vitest's 5 s default is far too tight here: a
|
|
36
|
+
* cross-backend case talks to a spawned backend over a real socket and most
|
|
37
|
+
* begin with a full `_testing_reset` (truncate + reseed the auth tables,
|
|
38
|
+
* mint a session), which alone can outlast 5 s on a cold pool or a loaded
|
|
39
|
+
* machine. 30 s is the ecosystem's convention for backend-spawning suites —
|
|
40
|
+
* long enough that no honest case flakes, short enough that a hung socket
|
|
41
|
+
* still fails the run rather than stalling CI.
|
|
42
|
+
*/
|
|
43
|
+
const DEFAULT_TEST_TIMEOUT = 30_000;
|
|
44
|
+
/**
|
|
45
|
+
* Per-hook timeout (ms). `beforeAll` / `afterAll` in these suites do the
|
|
46
|
+
* heaviest work in the project — bootstrap fixtures, seeded accounts, file
|
|
47
|
+
* uploads — so hooks get the same 30 s budget as tests rather than vitest's
|
|
48
|
+
* 10 s default.
|
|
49
|
+
*/
|
|
50
|
+
const DEFAULT_HOOK_TIMEOUT = 30_000;
|
|
34
51
|
/**
|
|
35
52
|
* Build a single cross-backend vitest project config. Spread the results
|
|
36
53
|
* into `test.projects` in the consumer's `vite.config.ts`. `isolate: false`
|
|
37
54
|
* + `fileParallelism: false` because a project shares one spawned backend
|
|
38
|
-
* across its files
|
|
55
|
+
* across its files, and `testTimeout` / `hookTimeout` are always emitted so
|
|
56
|
+
* a spawned-backend case is never held to vitest's 5 s / 10 s defaults.
|
|
39
57
|
*/
|
|
40
|
-
export const make_cross_backend_project = ({ name, global_setup, include = DEFAULT_INCLUDE, exclude = [], group_order = DEFAULT_GROUP_ORDER }) => ({
|
|
58
|
+
export const make_cross_backend_project = ({ name, global_setup, include = DEFAULT_INCLUDE, exclude = [], group_order = DEFAULT_GROUP_ORDER, test_timeout = DEFAULT_TEST_TIMEOUT, hook_timeout = DEFAULT_HOOK_TIMEOUT }) => ({
|
|
41
59
|
extends: true,
|
|
42
60
|
test: {
|
|
43
61
|
name,
|
|
@@ -46,6 +64,8 @@ export const make_cross_backend_project = ({ name, global_setup, include = DEFAU
|
|
|
46
64
|
globalSetup: [global_setup],
|
|
47
65
|
isolate: false,
|
|
48
66
|
fileParallelism: false,
|
|
49
|
-
sequence: { groupOrder: group_order }
|
|
67
|
+
sequence: { groupOrder: group_order },
|
|
68
|
+
testTimeout: test_timeout,
|
|
69
|
+
hookTimeout: hook_timeout
|
|
50
70
|
}
|
|
51
71
|
});
|
|
@@ -2,8 +2,10 @@ import '../assert_dev_env.js';
|
|
|
2
2
|
import type { RpcPathCrossSuiteOptions } from './setup.js';
|
|
3
3
|
/**
|
|
4
4
|
* Options for the origin parity suite. The standard RPC-dispatched
|
|
5
|
-
* cross-suite shape (`setup_test` / `
|
|
6
|
-
*
|
|
5
|
+
* cross-suite shape (`setup_test` / `rpc_path`); aliases the shared
|
|
6
|
+
* `RpcPathCrossSuiteOptions` rather than minting a duplicate. Origin
|
|
7
|
+
* middleware is on every spine, so no case is capability-gated and the flag
|
|
8
|
+
* bundle is not on the shape.
|
|
7
9
|
*/
|
|
8
10
|
export type OriginCrossTestOptions = RpcPathCrossSuiteOptions;
|
|
9
11
|
export declare const describe_origin_cross_tests: (options: OriginCrossTestOptions) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"origin.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/origin.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAkC9B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAG3D
|
|
1
|
+
{"version":3,"file":"origin.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/origin.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAkC9B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAG3D;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAM9D,eAAO,MAAM,2BAA2B,GAAI,SAAS,sBAAsB,KAAG,IAwC7E,CAAC"}
|
|
@@ -15,7 +15,7 @@ import '../assert_dev_env.js';
|
|
|
15
15
|
* clients (curl, CLI, server-to-server) carry no `Origin` and must not be
|
|
16
16
|
* blocked; token auth is the control for those callers.
|
|
17
17
|
*
|
|
18
|
-
* Runs both legs via the shared `
|
|
18
|
+
* Runs both legs via the shared `setup_test` protocol: the
|
|
19
19
|
* in-process leg (`auth/origin_parity.db.test.ts`, plain `gro test`) and the
|
|
20
20
|
* cross-process leg (`cross_backend/origin.cross.test.ts`, the TS spine
|
|
21
21
|
* binaries + Rust `testing_spine_stub` over real HTTP). Origin middleware is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer_ping_ws.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/peer_ping_ws.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAkD9B,OAAO,EAAE,KAAK,mBAAmB,EAAW,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"peer_ping_ws.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/peer_ping_ws.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAkD9B,OAAO,EAAE,KAAK,mBAAmB,EAAW,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAuB5C,6DAA6D;AAC7D,MAAM,WAAW,qBAAqB;IACrC,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAC/B,iFAAiF;IACjF,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC;IAC3C,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GAAI,SAAS,qBAAqB,KAAG,IAwN5E,CAAC"}
|
|
@@ -40,16 +40,20 @@ import { create_ws_transport } from '../transports/ws_transport.js';
|
|
|
40
40
|
import { is_response_for } from '../transports/ws_client.js';
|
|
41
41
|
import { create_jsonrpc_request, is_jsonrpc_request } from '../../http/jsonrpc_helpers.js';
|
|
42
42
|
import { test_if } from './capabilities.js';
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
// The wire literals below are deliberate independent copies of the
|
|
44
|
+
// producers' constants (`actions/peer_ping.ts` on TS, `REASON_PEER_*` /
|
|
45
|
+
// `PEER_PING_METHOD` on Rust) — parity by test, not codegen. The harness
|
|
46
|
+
// asserts the bytes on the wire, so importing the producer would make a
|
|
47
|
+
// renamed-value regression invisible on both sides at once. Names track the
|
|
48
|
+
// producers'.
|
|
45
49
|
/** Wire method (both directions). Mirrors the Rust `PEER_PING_METHOD`. */
|
|
46
50
|
const PEER_PING_METHOD = 'peer/ping';
|
|
47
|
-
|
|
48
|
-
// as an independent TS-side copy of the Rust `REASON_PEER_*` constants
|
|
49
|
-
// (parity by test, not codegen).
|
|
51
|
+
/** Stable `data.reason` discriminators — the cross-impl wire contract. */
|
|
50
52
|
const REASON_PEER_TIMEOUT = 'peer_timeout';
|
|
51
|
-
const
|
|
53
|
+
const REASON_PEER_PING_INVALID_REPLY = 'peer_ping_invalid_reply';
|
|
52
54
|
const REASON_PEER_NO_TRANSPORT = 'peer_no_transport';
|
|
55
|
+
/** JSON-RPC endpoint path — matches the spine's `/api/rpc` (and the forge's). */
|
|
56
|
+
const RPC_PATH = '/api/rpc';
|
|
53
57
|
/** A reply payload that satisfies the Rust `PingResponse` shape. */
|
|
54
58
|
const valid_reply = (nonce) => ({ nonce, protocol_version: 1 });
|
|
55
59
|
/**
|
|
@@ -126,7 +130,7 @@ export const describe_peer_ping_ws_tests = (options) => {
|
|
|
126
130
|
try {
|
|
127
131
|
const frame = await ping_raw(ws, 3, { nonce: 1, timeout_ms: 2000 });
|
|
128
132
|
assert.ok('error' in frame, 'a malformed reply must error, not return garbage');
|
|
129
|
-
assert.strictEqual(error_reason(frame),
|
|
133
|
+
assert.strictEqual(error_reason(frame), REASON_PEER_PING_INVALID_REPLY);
|
|
130
134
|
}
|
|
131
135
|
finally {
|
|
132
136
|
await ws.close();
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import '../assert_dev_env.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { RpcPathCapabilityGatedCrossSuiteOptions } from './setup.js';
|
|
3
3
|
/**
|
|
4
|
-
* Options for the query-shape parity suite. The standard
|
|
5
|
-
* cross-suite shape (`setup_test` / `capabilities` /
|
|
6
|
-
*
|
|
4
|
+
* Options for the query-shape parity suite. The standard capability-gating
|
|
5
|
+
* RPC-dispatched cross-suite shape (`setup_test` / `capabilities` /
|
|
6
|
+
* `rpc_path`); aliases the shared `RpcPathCapabilityGatedCrossSuiteOptions`
|
|
7
|
+
* rather than minting a duplicate.
|
|
7
8
|
*/
|
|
8
|
-
export type QueryShapeCrossTestOptions =
|
|
9
|
+
export type QueryShapeCrossTestOptions = RpcPathCapabilityGatedCrossSuiteOptions;
|
|
9
10
|
export declare const describe_query_shape_cross_tests: (options: QueryShapeCrossTestOptions) => void;
|
|
10
11
|
//# sourceMappingURL=query_shape.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query_shape.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/query_shape.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AA0C9B,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"query_shape.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/query_shape.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AA0C9B,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,YAAY,CAAC;AAG1E;;;;;GAKG;AACH,MAAM,MAAM,0BAA0B,GAAG,uCAAuC,CAAC;AAQjF,eAAO,MAAM,gCAAgC,GAAI,SAAS,0BAA0B,KAAG,IAwHtF,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import '../assert_dev_env.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { CapabilityGatedCrossSuiteOptions } from './setup.js';
|
|
3
3
|
/** Options for the readiness-probe parity suite. */
|
|
4
|
-
export interface ReadyCrossTestOptions extends
|
|
4
|
+
export interface ReadyCrossTestOptions extends CapabilityGatedCrossSuiteOptions {
|
|
5
5
|
/** Readiness probe path. Default `/ready`. */
|
|
6
6
|
readonly ready_path?: string;
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ready.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/ready.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAkC9B,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ready.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/ready.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAkC9B,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,YAAY,CAAC;AAEnE,oDAAoD;AACpD,MAAM,WAAW,qBAAsB,SAAQ,gCAAgC;IAC9E,8CAA8C;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,0BAA0B,GAAI,SAAS,qBAAqB,KAAG,IAuB3E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role_grant_offer_enumeration.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/role_grant_offer_enumeration.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"role_grant_offer_enumeration.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/role_grant_offer_enumeration.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAwD9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAK5C;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,kBAAkB,CAAC;AAEtD,sDAAsD;AACtD,MAAM,WAAW,yCAAyC;IACzD;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAC/B,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC3B;AAQD,eAAO,MAAM,iDAAiD,GAC7D,SAAS,yCAAyC,KAChD,IAqGF,CAAC"}
|
|
@@ -46,6 +46,7 @@ import { describe, test, assert } from 'vitest';
|
|
|
46
46
|
import { rpc_call } from '../rpc_helpers.js';
|
|
47
47
|
import { ROLE_ADMIN } from '../../auth/role_schema.js';
|
|
48
48
|
import { ERROR_ROLE_GRANT_OFFER_ACTOR_MISMATCH, ERROR_ROLE_GRANT_OFFER_NOT_FOUND } from '../../auth/role_grant_offer_action_specs.js';
|
|
49
|
+
import { assert_iso8601_seconds } from './wire_shapes.js';
|
|
49
50
|
import { SPINE_RPC_PATH } from './spine_surface_constants.js';
|
|
50
51
|
/** A well-formed UUID that never names a real offer — exercises the not-found arm. */
|
|
51
52
|
const NIL_UUID = '00000000-0000-0000-0000-000000000000';
|
|
@@ -84,7 +85,12 @@ export const describe_role_grant_offer_enumeration_cross_tests = (options) => {
|
|
|
84
85
|
// Offer ROLE_ADMIN to the keeper's account, TARGETED at actor A.
|
|
85
86
|
const created = await rpc(fixture.fresh_transport(), 'role_grant_offer_create', { to_account_id: fixture.account.id, to_actor_id: target_actor.id, role: ROLE_ADMIN }, grantor.create_session_headers());
|
|
86
87
|
assert.ok(created.ok, `offer create must succeed: ${JSON.stringify(created)}`);
|
|
87
|
-
const
|
|
88
|
+
const offer = created.result.offer;
|
|
89
|
+
// Byte-shape gate on the offer's server-minted timestamps — a
|
|
90
|
+
// millisecond stamp parses the same but is a wire divergence.
|
|
91
|
+
assert_iso8601_seconds(offer.created_at, 'offer.created_at');
|
|
92
|
+
assert_iso8601_seconds(offer.expires_at, 'offer.expires_at');
|
|
93
|
+
const offer_id = offer.id;
|
|
88
94
|
// Sibling actor B (same account) tries to accept A's offer → 403
|
|
89
95
|
// actor_mismatch. The offer stays pending (no mutation on the denial).
|
|
90
96
|
const sibling_accept = await rpc(fixture.transport, 'role_grant_offer_accept', { offer_id, acting: sibling.id }, fixture.create_session_headers());
|
|
@@ -217,16 +217,27 @@ export type SetupTest = () => Promise<TestFixture>;
|
|
|
217
217
|
* Base options shared by every imperative cross-backend parity suite
|
|
218
218
|
* (`origin` / `ready` / `body_size` / `cell_*` / `actor_*` /
|
|
219
219
|
* `account_lifecycle` / `app_settings` / `testing_backdoor` / …). The
|
|
220
|
-
* `
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
220
|
+
* `setup_test` core is identical across them; each suite extends this with
|
|
221
|
+
* its own path field (`rpc_path` for RPC-dispatched suites via
|
|
222
|
+
* `RpcPathCrossSuiteOptions`, `ready_path` for the readiness probe, etc.),
|
|
223
|
+
* and a suite that actually gates cases on a capability flag extends
|
|
224
|
+
* `CapabilityGatedCrossSuiteOptions` instead. Lives here in the neutral
|
|
225
|
+
* fixture-types home rather than in any one domain helper, so a non-cell
|
|
226
|
+
* suite never reaches into the cell helpers for its option shape.
|
|
226
227
|
*/
|
|
227
228
|
export interface CrossSuiteOptions {
|
|
228
229
|
/** Per-test fixture-producing function (fresh keeper + db per call). */
|
|
229
230
|
readonly setup_test: SetupTest;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* `CrossSuiteOptions` for a suite that reads capability flags — the ones
|
|
234
|
+
* whose cases are `test_if`-gated on a per-backend declaration. The field is
|
|
235
|
+
* on this variant rather than the base so a suite's option type states
|
|
236
|
+
* whether it consults capabilities: a caller cannot pass a flag bundle to a
|
|
237
|
+
* suite that ignores it, and a suite cannot quietly stop reading one while
|
|
238
|
+
* still demanding it.
|
|
239
|
+
*/
|
|
240
|
+
export interface CapabilityGatedCrossSuiteOptions extends CrossSuiteOptions {
|
|
230
241
|
/** Backend capability declarations — each suite gates on its own flag. */
|
|
231
242
|
readonly capabilities: BackendCapabilities;
|
|
232
243
|
}
|
|
@@ -241,6 +252,15 @@ export interface RpcPathCrossSuiteOptions extends CrossSuiteOptions {
|
|
|
241
252
|
/** RPC endpoint path the methods are mounted on. Default `/api/rpc`. */
|
|
242
253
|
readonly rpc_path?: string;
|
|
243
254
|
}
|
|
255
|
+
/**
|
|
256
|
+
* The RPC-dispatched shape for a capability-gating suite — the intersection
|
|
257
|
+
* of `RpcPathCrossSuiteOptions` and `CapabilityGatedCrossSuiteOptions`, and
|
|
258
|
+
* the most common option shape among the imperative cross suites (every
|
|
259
|
+
* `cell_*` suite, `query_shape`, `token_scope_surface`, `fact_serving`,
|
|
260
|
+
* `account_lifecycle`).
|
|
261
|
+
*/
|
|
262
|
+
export interface RpcPathCapabilityGatedCrossSuiteOptions extends RpcPathCrossSuiteOptions, CapabilityGatedCrossSuiteOptions {
|
|
263
|
+
}
|
|
244
264
|
/**
|
|
245
265
|
* Cross-process backend handle enriched with the bootstrapped keeper's
|
|
246
266
|
* captured credentials. Consumers compose this in vitest's
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/setup.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,7 +59,11 @@ export interface StandardCrossProcessTestOptions {
|
|
|
59
59
|
* in-process and cross-process tests.
|
|
60
60
|
*/
|
|
61
61
|
surface_source: AppSurfaceSpec;
|
|
62
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Backend capability declarations. Forwarded to the one bundled suite
|
|
64
|
+
* that gates on them (`describe_standard_integration_tests`); the other
|
|
65
|
+
* suites in the bundle read no flags and take no capability field.
|
|
66
|
+
*/
|
|
63
67
|
capabilities: BackendCapabilities;
|
|
64
68
|
/** Session config — needed for cookie_name + factory-form rpc_endpoints resolution. */
|
|
65
69
|
session_options: SessionOptions<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/standard.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAM5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,WAAW,+BAA+B;IAC/C,2CAA2C;IAC3C,UAAU,EAAE,SAAS,CAAC;IACtB;;;OAGG;IACH,cAAc,EAAE,cAAc,CAAC;IAC/B
|
|
1
|
+
{"version":3,"file":"standard.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/standard.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAM5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,WAAW,+BAA+B;IAC/C,2CAA2C;IAC3C,UAAU,EAAE,SAAS,CAAC;IACtB;;;OAGG;IACH,cAAc,EAAE,cAAc,CAAC;IAC/B;;;;OAIG;IACH,YAAY,EAAE,mBAAmB,CAAC;IAClC,uFAAuF;IACvF,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC;;;;;OAKG;IACH,aAAa,EAAE,uBAAuB,CAAC;IACvC;;;OAGG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,sBAAsB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/F;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,GAAG,CAC1B,MAAM,EACN,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CACnF,CAAC;CACF;AAED;;;;GAIG;AACH,eAAO,MAAM,qCAAqC,GACjD,SAAS,+BAA+B,KACtC,IAoCF,CAAC"}
|
|
@@ -21,28 +21,24 @@ export const describe_standard_cross_process_tests = (options) => {
|
|
|
21
21
|
describe_round_trip_validation({
|
|
22
22
|
setup_test: options.setup_test,
|
|
23
23
|
surface_source: options.surface_source,
|
|
24
|
-
capabilities: options.capabilities,
|
|
25
24
|
skip_routes: options.round_trip_skip_routes,
|
|
26
25
|
success_fixtures: options.rest_success_fixtures
|
|
27
26
|
});
|
|
28
27
|
describe_rpc_round_trip_tests({
|
|
29
28
|
setup_test: options.setup_test,
|
|
30
29
|
surface_source: options.surface_source,
|
|
31
|
-
capabilities: options.capabilities,
|
|
32
30
|
session_options: options.session_options,
|
|
33
31
|
rpc_endpoints: options.rpc_endpoints,
|
|
34
32
|
success_fixtures: options.rpc_success_fixtures
|
|
35
33
|
});
|
|
36
34
|
describe_data_exposure_tests({
|
|
37
35
|
setup_test: options.setup_test,
|
|
38
|
-
surface_source: options.surface_source
|
|
39
|
-
capabilities: options.capabilities
|
|
36
|
+
surface_source: options.surface_source
|
|
40
37
|
});
|
|
41
38
|
if (options.roles) {
|
|
42
39
|
describe_standard_admin_integration_tests({
|
|
43
40
|
setup_test: options.setup_test,
|
|
44
41
|
surface_source: options.surface_source,
|
|
45
|
-
capabilities: options.capabilities,
|
|
46
42
|
session_options: options.session_options,
|
|
47
43
|
roles: options.roles,
|
|
48
44
|
rpc_endpoints: options.rpc_endpoints,
|
|
@@ -30,7 +30,7 @@ import '../assert_dev_env.js';
|
|
|
30
30
|
*
|
|
31
31
|
* Each method is sent with **valid** params so each case varies only the
|
|
32
32
|
* credential. (Validation runs after the gates — the order is 401 → authz →
|
|
33
|
-
* 403 → 400 — so the shapes are belt-and-suspenders here rather than load-
|
|
33
|
+
* 403 → 429 → 400 — so the shapes are belt-and-suspenders here rather than load-
|
|
34
34
|
* bearing.) The handler never runs (the gate refuses first), so the writes
|
|
35
35
|
* never execute.
|
|
36
36
|
*
|
|
@@ -428,6 +428,11 @@ export declare const testing_action_manifest_action_spec: {
|
|
|
428
428
|
}>;
|
|
429
429
|
roles: z.ZodArray<z.ZodString>;
|
|
430
430
|
credential_types: z.ZodArray<z.ZodString>;
|
|
431
|
+
rate_limit: z.ZodNullable<z.ZodEnum<{
|
|
432
|
+
account: "account";
|
|
433
|
+
ip: "ip";
|
|
434
|
+
both: "both";
|
|
435
|
+
}>>;
|
|
431
436
|
}, z.core.$strict>>;
|
|
432
437
|
}, z.core.$strict>;
|
|
433
438
|
readonly async: true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing_reset_actions.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/testing_reset_actions.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAKzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAqCzC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;QAiBpC;;;;;;;;WAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWyC,CAAC;AAE/C;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;CAWA,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;CAwBC,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,mCAAmC,QAAO,SACmB,CAAC;AAE3E;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;CAeK,CAAC;AAE/C;;;;;;;;;GASG;AACH,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWF,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,qCAAqC,QAAO,SAGvD,CAAC;AAEH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;CAYJ,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,uCAAuC,QAAO,SAGzD,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,mCAAmC
|
|
1
|
+
{"version":3,"file":"testing_reset_actions.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/testing_reset_actions.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAKzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAqCzC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;QAiBpC;;;;;;;;WAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWyC,CAAC;AAE/C;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;CAWA,CAAC;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;CAwBC,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,mCAAmC,QAAO,SACmB,CAAC;AAE3E;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;CAeK,CAAC;AAE/C;;;;;;;;;GASG;AACH,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWF,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,qCAAqC,QAAO,SAGvD,CAAC;AAEH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;;;;;CAYJ,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,uCAAuC,QAAO,SAGzD,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYF,CAAC;AAyB/C,eAAO,MAAM,qCAAqC,GACjD,SAAS,aAAa,CAAC,SAAS,CAAC,KAC/B,SAMF,CAAC;AAEF,4CAA4C;AAC5C,MAAM,WAAW,2BAA2B;IAC3C;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACjD;;;;;OAKG;IACH,QAAQ,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IAC9C;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CACxD;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,sBAAsB,GAClC,MAAM,OAAO,EACb,SAAS,2BAA2B,KAClC,KAAK,CAAC,SAAS,CAsIjB,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,0BAA0B,UAAmC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token_lifetime.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/token_lifetime.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"token_lifetime.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/token_lifetime.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAgD9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C;;;;GAIG;AACH,MAAM,WAAW,6BAA6B;IAC7C,wEAAwE;IACxE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC3B;AAaD,eAAO,MAAM,mCAAmC,GAC/C,SAAS,6BAA6B,KACpC,IAsHF,CAAC"}
|
|
@@ -37,6 +37,7 @@ import '../assert_dev_env.js';
|
|
|
37
37
|
import { describe, test, assert } from 'vitest';
|
|
38
38
|
import { account_token_create_action_spec, account_token_list_action_spec, TokenCreateOutput, TokenListOutput } from '../../auth/account_action_specs.js';
|
|
39
39
|
import { cross_rpc_call, error_reason, expect_output } from './cell_cross_helpers.js';
|
|
40
|
+
import { assert_iso8601_seconds } from './wire_shapes.js';
|
|
40
41
|
import { SPINE_RPC_PATH } from './spine_surface_constants.js';
|
|
41
42
|
/** TTL used by the bounded-mint case. */
|
|
42
43
|
const TTL_DAYS = 30;
|
|
@@ -61,6 +62,9 @@ export const describe_token_lifetime_cross_tests = (options) => {
|
|
|
61
62
|
}, fixture.create_session_headers());
|
|
62
63
|
const created = expect_output(create_res, TokenCreateOutput);
|
|
63
64
|
assert.ok(created.expires_at !== null, 'a ttl mint must return a non-null expires_at — null means the spine dropped the field');
|
|
65
|
+
// Byte-shape gate: `z.string()` accepts a millisecond stamp too, so
|
|
66
|
+
// `expect_output` above can't tell the two spines apart.
|
|
67
|
+
assert_iso8601_seconds(created.expires_at, 'token_create.expires_at');
|
|
64
68
|
const expires_ms = Date.parse(created.expires_at);
|
|
65
69
|
assert.ok(!Number.isNaN(expires_ms), `expires_at must parse as a date: ${created.expires_at}`);
|
|
66
70
|
const expected = before + TTL_DAYS * 86_400_000;
|
|
@@ -71,6 +75,8 @@ export const describe_token_lifetime_cross_tests = (options) => {
|
|
|
71
75
|
const row = listed.tokens.find((t) => t.id === created.id);
|
|
72
76
|
assert.ok(row, 'the minted token must appear in account_token_list');
|
|
73
77
|
assert.ok(row.expires_at !== null, 'account_token_list must report the stored expiry, not null');
|
|
78
|
+
assert_iso8601_seconds(row.expires_at, 'token_list.expires_at');
|
|
79
|
+
assert_iso8601_seconds(row.created_at, 'token_list.created_at');
|
|
74
80
|
});
|
|
75
81
|
test('an eternal mint stores NULL expiry', async () => {
|
|
76
82
|
const fixture = await setup_test();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import '../assert_dev_env.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { RpcPathCapabilityGatedCrossSuiteOptions } from './setup.js';
|
|
3
3
|
/** Options for the token-scope surface parity suite. */
|
|
4
|
-
export interface TokenScopeSurfaceCrossTestOptions extends
|
|
4
|
+
export interface TokenScopeSurfaceCrossTestOptions extends RpcPathCapabilityGatedCrossSuiteOptions {
|
|
5
5
|
/** Audit-log SSE path. Default `/api/admin/audit/stream`. */
|
|
6
6
|
readonly sse_path?: string;
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token_scope_surface.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/token_scope_surface.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAiE9B,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"token_scope_surface.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/token_scope_surface.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAiE9B,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,YAAY,CAAC;AAkB1E,wDAAwD;AACxD,MAAM,WAAW,iCAAkC,SAAQ,uCAAuC;IACjG,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC3B;AA2DD,eAAO,MAAM,wCAAwC,GACpD,SAAS,iCAAiC,KACxC,IAwHF,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import '../assert_dev_env.js';
|
|
2
|
+
/**
|
|
3
|
+
* Assert `value` is a timestamp in the spine's canonical wire shape:
|
|
4
|
+
* second-precision UTC, exactly 20 characters. The TS spine emits it from
|
|
5
|
+
* the `iso8601_timestamp_column` SQL projection (`db/sql_columns.ts`) and
|
|
6
|
+
* `to_iso8601_seconds` (`timestamp.ts`); the Rust spine from
|
|
7
|
+
* `fuz_db::iso8601_timestamp_column` and `fuz_sys::rfc3339_now`.
|
|
8
|
+
*
|
|
9
|
+
* @param value - the field read off a wire response
|
|
10
|
+
* @param label - the field's name, for the failure message
|
|
11
|
+
*/
|
|
12
|
+
export declare const assert_iso8601_seconds: (value: unknown, label: string) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Assert `value` is either `null` or a canonical second-precision UTC
|
|
15
|
+
* timestamp — the shape of every nullable timestamp on the wire
|
|
16
|
+
* (`expires_at`, `deleted_at`, `updated_at`, …).
|
|
17
|
+
*
|
|
18
|
+
* @param value - the field read off a wire response
|
|
19
|
+
* @param label - the field's name, for the failure message
|
|
20
|
+
*/
|
|
21
|
+
export declare const assert_iso8601_seconds_nullable: (value: unknown, label: string) => void;
|
|
22
|
+
//# sourceMappingURL=wire_shapes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire_shapes.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/wire_shapes.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAkB9B;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,OAAO,EAAE,OAAO,MAAM,KAAG,IAMtE,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B,GAAI,OAAO,OAAO,EAAE,OAAO,MAAM,KAAG,IAG/E,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import '../assert_dev_env.js';
|
|
2
|
+
/**
|
|
3
|
+
* Wire-shape assertions shared by the cross-backend suites.
|
|
4
|
+
*
|
|
5
|
+
* A field can carry the right value on both backends and still be a parity
|
|
6
|
+
* defect if the two serialize it differently — a millisecond
|
|
7
|
+
* `2026-05-17T12:34:56.789Z` and a second-precision `2026-05-17T12:34:56Z`
|
|
8
|
+
* both parse as the same instant, so a Zod `z.string()` check and an
|
|
9
|
+
* `assert.ok(value)` pass on either. These helpers pin the bytes.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import { assert } from 'vitest';
|
|
14
|
+
import { ISO8601_SECONDS } from '../../timestamp.js';
|
|
15
|
+
/**
|
|
16
|
+
* Assert `value` is a timestamp in the spine's canonical wire shape:
|
|
17
|
+
* second-precision UTC, exactly 20 characters. The TS spine emits it from
|
|
18
|
+
* the `iso8601_timestamp_column` SQL projection (`db/sql_columns.ts`) and
|
|
19
|
+
* `to_iso8601_seconds` (`timestamp.ts`); the Rust spine from
|
|
20
|
+
* `fuz_db::iso8601_timestamp_column` and `fuz_sys::rfc3339_now`.
|
|
21
|
+
*
|
|
22
|
+
* @param value - the field read off a wire response
|
|
23
|
+
* @param label - the field's name, for the failure message
|
|
24
|
+
*/
|
|
25
|
+
export const assert_iso8601_seconds = (value, label) => {
|
|
26
|
+
assert.isTrue(typeof value === 'string', `${label} must be a string, got ${JSON.stringify(value)}`);
|
|
27
|
+
assert.match(value, ISO8601_SECONDS, `${label} must be second-precision UTC`);
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Assert `value` is either `null` or a canonical second-precision UTC
|
|
31
|
+
* timestamp — the shape of every nullable timestamp on the wire
|
|
32
|
+
* (`expires_at`, `deleted_at`, `updated_at`, …).
|
|
33
|
+
*
|
|
34
|
+
* @param value - the field read off a wire response
|
|
35
|
+
* @param label - the field's name, for the failure message
|
|
36
|
+
*/
|
|
37
|
+
export const assert_iso8601_seconds_nullable = (value, label) => {
|
|
38
|
+
if (value === null)
|
|
39
|
+
return;
|
|
40
|
+
assert_iso8601_seconds(value, label);
|
|
41
|
+
};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import './assert_dev_env.js';
|
|
2
2
|
import type { AppSurface, AppSurfaceSpec } from '../http/surface.js';
|
|
3
|
-
import type { BackendCapabilities } from './cross_backend/capabilities.js';
|
|
4
3
|
import type { SetupTest } from './cross_backend/setup.js';
|
|
5
4
|
/**
|
|
6
5
|
* Recursively collect all property names from a JSON Schema.
|
|
@@ -26,8 +25,6 @@ export interface DataExposureTestOptions {
|
|
|
26
25
|
* TS by the consumer; same shape for in-process and cross-process tests.
|
|
27
26
|
*/
|
|
28
27
|
surface_source: AppSurfaceSpec;
|
|
29
|
-
/** Backend capability declarations. */
|
|
30
|
-
capabilities: BackendCapabilities;
|
|
31
28
|
/** Fields that must never appear in any response. Default: `sensitive_field_blocklist`. */
|
|
32
29
|
sensitive_fields?: ReadonlyArray<string>;
|
|
33
30
|
/** Fields that must not appear in non-admin responses. Default: `admin_only_field_blocklist`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_exposure.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/data_exposure.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAqB7B,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAYrE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"data_exposure.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/data_exposure.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAqB7B,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAYrE,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,0BAA0B,CAAC;AAIvE;;;;;GAKG;AACH,eAAO,MAAM,kCAAkC,GAAI,QAAQ,OAAO,KAAG,GAAG,CAAC,MAAM,CAuB9E,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,yCAAyC,GACrD,SAAS,UAAU,EACnB,mBAAkB,aAAa,CAAC,MAAM,CAA6B,KACjE,IAWF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wCAAwC,GACpD,SAAS,UAAU,EACnB,oBAAmB,aAAa,CAAC,MAAM,CAA8B,KACnE,IAgBF,CAAC;AAIF,kDAAkD;AAClD,MAAM,WAAW,uBAAuB;IACvC,kEAAkE;IAClE,UAAU,EAAE,SAAS,CAAC;IACtB;;;OAGG;IACH,cAAc,EAAE,cAAc,CAAC;IAC/B,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,iGAAiG;IACjG,iBAAiB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,kDAAkD;IAClD,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,GAAI,SAAS,uBAAuB,KAAG,IA0L/E,CAAC"}
|
|
@@ -96,7 +96,6 @@ export const describe_data_exposure_tests = (options) => {
|
|
|
96
96
|
const { surface, route_specs } = options.surface_source;
|
|
97
97
|
const { sensitive_fields = sensitive_field_blocklist, admin_only_fields = admin_only_field_blocklist } = options;
|
|
98
98
|
const skip_set = new Set(options.skip_routes);
|
|
99
|
-
void options.capabilities;
|
|
100
99
|
describe('data exposure — schema-level', () => {
|
|
101
100
|
test('no sensitive fields in any output schema', () => {
|
|
102
101
|
assert_output_schemas_no_sensitive_fields(surface, sensitive_fields);
|