@fuzdev/fuz_app 0.130.0 → 0.132.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/action_dispatcher.js +0 -1
- package/dist/actions/action_event_data.d.ts +2 -2
- package/dist/actions/action_event_types.d.ts +2 -2
- package/dist/actions/action_rpc.js +0 -1
- package/dist/actions/action_spec.d.ts +19 -19
- package/dist/actions/perform_action.js +0 -1
- package/dist/actions/register_action_ws.d.ts.map +1 -1
- package/dist/actions/register_action_ws.js +3 -1
- package/dist/actions/rpc_client.d.ts.map +1 -1
- package/dist/actions/transports_http.d.ts +7 -0
- package/dist/actions/transports_http.d.ts.map +1 -1
- package/dist/actions/transports_http.js +18 -1
- package/dist/actions/transports_ws_backend.d.ts +4 -3
- package/dist/actions/transports_ws_backend.d.ts.map +1 -1
- package/dist/actions/transports_ws_backend.js +4 -3
- package/dist/auth/CLAUDE.md +1 -1
- package/dist/auth/account_routes.js +1 -1
- package/dist/auth/audit_log_routes.d.ts.map +1 -1
- package/dist/auth/audit_log_routes.js +3 -1
- package/dist/auth/audit_log_schema.d.ts +5 -5
- package/dist/auth/cell_action_specs.d.ts +3 -3
- package/dist/auth/credential_type_schema.d.ts +1 -1
- package/dist/auth/middleware.d.ts +13 -10
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +14 -10
- package/dist/auth/scope_kind_schema.d.ts.map +1 -1
- package/dist/auth/scope_kind_schema.js +1 -3
- package/dist/cli/daemon.js +0 -1
- package/dist/cli/logger.js +0 -1
- package/dist/db/db_pg.js +1 -1
- package/dist/env/load.js +0 -1
- package/dist/hono_context.d.ts +1 -1
- package/dist/http/CLAUDE.md +2 -1
- package/dist/http/auth_shape.d.ts +6 -6
- package/dist/http/error_schemas.d.ts +12 -2
- package/dist/http/error_schemas.d.ts.map +1 -1
- package/dist/http/error_schemas.js +10 -1
- package/dist/http/jsonrpc_errors.d.ts.map +1 -1
- package/dist/http/origin.d.ts +10 -6
- package/dist/http/origin.d.ts.map +1 -1
- package/dist/http/origin.js +10 -6
- package/dist/http/route_spec.d.ts +19 -12
- package/dist/http/route_spec.d.ts.map +1 -1
- package/dist/http/route_spec.js +33 -6
- package/dist/http/schema_helpers.d.ts +3 -1
- package/dist/http/schema_helpers.d.ts.map +1 -1
- package/dist/http/schema_helpers.js +3 -2
- package/dist/http/simple_request.d.ts +63 -0
- package/dist/http/simple_request.d.ts.map +1 -0
- package/dist/http/simple_request.js +84 -0
- package/dist/http/surface.js +0 -1
- package/dist/realtime/sse.js +0 -1
- package/dist/runtime/mock.js +1 -1
- package/dist/server/app_server.d.ts +2 -2
- package/dist/server/app_server.d.ts.map +1 -1
- package/dist/server/app_server.js +5 -2
- package/dist/testing/CLAUDE.md +21 -6
- package/dist/testing/admin_integration.d.ts.map +1 -1
- package/dist/testing/admin_integration.js +2 -1
- package/dist/testing/attack_surface.d.ts.map +1 -1
- package/dist/testing/attack_surface.js +14 -15
- package/dist/testing/audit_completeness.js +1 -1
- package/dist/testing/cross_backend/account_lifecycle.d.ts.map +1 -1
- package/dist/testing/cross_backend/account_lifecycle.js +0 -3
- package/dist/testing/cross_backend/action_manifest.d.ts +10 -14
- package/dist/testing/cross_backend/action_manifest.d.ts.map +1 -1
- package/dist/testing/cross_backend/action_manifest.js +0 -4
- package/dist/testing/cross_backend/actor_lookup.d.ts.map +1 -1
- package/dist/testing/cross_backend/actor_lookup.js +0 -3
- package/dist/testing/cross_backend/actor_search.d.ts.map +1 -1
- package/dist/testing/cross_backend/actor_search.js +0 -2
- package/dist/testing/cross_backend/app_settings.d.ts.map +1 -1
- package/dist/testing/cross_backend/app_settings.js +0 -2
- package/dist/testing/cross_backend/body_size.d.ts.map +1 -1
- package/dist/testing/cross_backend/body_size.js +0 -3
- package/dist/testing/cross_backend/body_size_smuggling.d.ts.map +1 -1
- package/dist/testing/cross_backend/body_size_smuggling.js +0 -2
- package/dist/testing/cross_backend/cell_cross_helpers.d.ts.map +1 -1
- package/dist/testing/cross_backend/cell_cross_helpers.js +0 -3
- package/dist/testing/cross_backend/cell_crud.d.ts.map +1 -1
- package/dist/testing/cross_backend/cell_crud.js +0 -3
- package/dist/testing/cross_backend/cell_gated_create.d.ts +0 -2
- package/dist/testing/cross_backend/cell_gated_create.d.ts.map +1 -1
- package/dist/testing/cross_backend/cell_gated_create.js +0 -4
- package/dist/testing/cross_backend/cell_grant_role.d.ts.map +1 -1
- package/dist/testing/cross_backend/cell_grant_role.js +0 -2
- package/dist/testing/cross_backend/cell_relations.d.ts.map +1 -1
- package/dist/testing/cross_backend/cell_relations.js +0 -3
- package/dist/testing/cross_backend/cookie_attributes.d.ts.map +1 -1
- package/dist/testing/cross_backend/cookie_attributes.js +0 -3
- package/dist/testing/cross_backend/credential_header_robustness.d.ts.map +1 -1
- package/dist/testing/cross_backend/credential_header_robustness.js +0 -2
- package/dist/testing/cross_backend/default_spine_surface.d.ts +0 -7
- package/dist/testing/cross_backend/default_spine_surface.d.ts.map +1 -1
- package/dist/testing/cross_backend/fact_serving.d.ts.map +1 -1
- package/dist/testing/cross_backend/fact_serving.js +0 -3
- package/dist/testing/cross_backend/full_spine_mount.d.ts +0 -5
- package/dist/testing/cross_backend/full_spine_mount.d.ts.map +1 -1
- package/dist/testing/cross_backend/identity_parity.d.ts.map +1 -1
- package/dist/testing/cross_backend/identity_parity.js +0 -2
- package/dist/testing/cross_backend/login_security.d.ts.map +1 -1
- package/dist/testing/cross_backend/login_security.js +0 -3
- package/dist/testing/cross_backend/origin.d.ts.map +1 -1
- package/dist/testing/cross_backend/origin.js +0 -3
- package/dist/testing/cross_backend/query_shape.d.ts.map +1 -1
- package/dist/testing/cross_backend/query_shape.js +0 -3
- package/dist/testing/cross_backend/ready.d.ts.map +1 -1
- package/dist/testing/cross_backend/ready.js +0 -3
- package/dist/testing/cross_backend/role_grant_offer_enumeration.d.ts.map +1 -1
- package/dist/testing/cross_backend/role_grant_offer_enumeration.js +0 -3
- package/dist/testing/cross_backend/role_grant_participation.d.ts.map +1 -1
- package/dist/testing/cross_backend/role_grant_participation.js +0 -3
- package/dist/testing/cross_backend/session_cap.d.ts.map +1 -1
- package/dist/testing/cross_backend/session_cap.js +0 -3
- package/dist/testing/cross_backend/simple_request.d.ts +11 -0
- package/dist/testing/cross_backend/simple_request.d.ts.map +1 -0
- package/dist/testing/cross_backend/simple_request.js +142 -0
- package/dist/testing/cross_backend/test_cell_gated_create_authorize.d.ts.map +1 -1
- package/dist/testing/cross_backend/test_cell_gated_create_authorize.js +0 -3
- package/dist/testing/cross_backend/testing_backdoor.d.ts.map +1 -1
- package/dist/testing/cross_backend/testing_backdoor.js +0 -3
- package/dist/testing/cross_backend/testing_reset_actions.d.ts +5 -5
- package/dist/testing/cross_backend/testing_server_bun.js +1 -1
- package/dist/testing/cross_backend/token_lifetime.d.ts.map +1 -1
- package/dist/testing/cross_backend/token_lifetime.js +0 -4
- package/dist/testing/cross_backend/token_scope_surface.d.ts.map +1 -1
- package/dist/testing/cross_backend/token_scope_surface.js +0 -3
- package/dist/testing/cross_backend/ts_spine_backend_config.d.ts +1 -1
- package/dist/testing/cross_backend/ts_spine_backend_config.js +1 -1
- package/dist/testing/cross_backend/ws_action_rate_limit.d.ts.map +1 -1
- package/dist/testing/cross_backend/ws_action_rate_limit.js +0 -3
- package/dist/testing/cross_backend/ws_connection_cap.d.ts.map +1 -1
- package/dist/testing/cross_backend/ws_connection_cap.js +0 -3
- package/dist/testing/integration.d.ts.map +1 -1
- package/dist/testing/integration.js +40 -11
- package/dist/testing/rpc_helpers.d.ts.map +1 -1
- package/dist/testing/rpc_helpers.js +19 -7
- package/dist/testing/stubs.d.ts.map +1 -1
- package/dist/testing/stubs.js +3 -0
- package/dist/testing/transports/sse_frame_reader.d.ts.map +1 -1
- package/dist/testing/transports/sse_frame_reader.js +4 -1
- package/dist/testing/transports/ws_client.js +0 -1
- package/dist/ui/Datatable.svelte +2 -2
- package/dist/ui/auth_state.svelte.d.ts.map +1 -1
- package/dist/ui/auth_state.svelte.js +5 -1
- package/dist/ui/ui_format.d.ts.map +1 -1
- package/dist/ui/ui_format.js +2 -0
- package/package.json +19 -19
package/dist/realtime/sse.js
CHANGED
package/dist/runtime/mock.js
CHANGED
|
@@ -299,7 +299,7 @@ export const create_mock_runtime = (args = []) => {
|
|
|
299
299
|
},
|
|
300
300
|
// === HTTP ===
|
|
301
301
|
fetch: async (input, init) => {
|
|
302
|
-
fetch_calls.push({ input
|
|
302
|
+
fetch_calls.push({ input, init });
|
|
303
303
|
const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
|
|
304
304
|
for (const [pattern, response] of mock_fetch_responses) {
|
|
305
305
|
if (url.includes(pattern))
|
|
@@ -63,13 +63,13 @@ export interface BootstrapDisabledOptions {
|
|
|
63
63
|
}
|
|
64
64
|
export interface BootstrapSurfaceOnlyOptions {
|
|
65
65
|
mode: 'surface_only';
|
|
66
|
-
/** Route prefix for surface generation. Default `'/api/account'
|
|
66
|
+
/** Route prefix for surface generation. Default `'/api/account'`; must sit under `/api/`. */
|
|
67
67
|
route_prefix?: string;
|
|
68
68
|
}
|
|
69
69
|
export interface BootstrapLiveOptions {
|
|
70
70
|
mode: 'live';
|
|
71
71
|
token_path: string;
|
|
72
|
-
/** Route prefix for bootstrap routes. Default `'/api/account'
|
|
72
|
+
/** Route prefix for bootstrap routes. Default `'/api/account'`; must sit under `/api/`. */
|
|
73
73
|
route_prefix?: string;
|
|
74
74
|
/**
|
|
75
75
|
* Called after successful bootstrap (account + session created).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app_server.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/server/app_server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC;AAG1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAIN,KAAK,WAAW,EAChB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACN,WAAW,EAMX,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEhF,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAIN,KAAK,SAAS,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAGN,KAAK,eAAe,EACpB,MAAM,6BAA6B,CAAC;AAarC,OAAO,EAGN,KAAK,cAAc,EACnB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EAAsB,KAAK,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAEzF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,sBAAsB,GACjC,wBAAwB,GAAG,2BAA2B,GAAG,oBAAoB,CAAC;AAE/E,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC3C,IAAI,EAAE,cAAc,CAAC;IACrB,
|
|
1
|
+
{"version":3,"file":"app_server.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/server/app_server.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
import { Hono } from 'hono';
|
|
11
11
|
import { logger } from 'hono/logger';
|
|
12
12
|
import { bodyLimit } from 'hono/body-limit';
|
|
13
|
-
import { z } from 'zod';
|
|
14
13
|
import { session_cookie_options } from '../auth/session_cookie.js';
|
|
15
14
|
import { create_audit_log_sse, create_sse_connection_closer, audit_log_event_specs } from '../realtime/sse_auth_guard.js';
|
|
16
15
|
import { BaseServerEnv } from './env.js';
|
|
@@ -333,7 +332,11 @@ const assemble_app_server = async (options, releases) => {
|
|
|
333
332
|
bootstrap_ip_rate_limiter
|
|
334
333
|
});
|
|
335
334
|
const prefix = options.bootstrap.route_prefix ?? '/api/account';
|
|
336
|
-
|
|
335
|
+
const prefixed = prefix_route_specs(prefix, bootstrap_routes);
|
|
336
|
+
for (const route of prefixed) {
|
|
337
|
+
assert_endpoint_in_auth_scope('bootstrap.route_prefix', route.path);
|
|
338
|
+
}
|
|
339
|
+
factory_routes.push(...prefixed);
|
|
337
340
|
}
|
|
338
341
|
// RPC endpoint auto-mount — resolve specs then append their routes so
|
|
339
342
|
// surface generation and live dispatch share one source of truth.
|
package/dist/testing/CLAUDE.md
CHANGED
|
@@ -1564,6 +1564,22 @@ in-process `auth/origin_parity.db.test.ts` + the cross-process
|
|
|
1564
1564
|
Rust spine returned a plain-text body — now converged to the canonical TS
|
|
1565
1565
|
`{error: "forbidden_origin"}` via `fuz_http::forbidden_origin_response()`.
|
|
1566
1566
|
|
|
1567
|
+
### CORS simple-request parity — `cross_backend/simple_request.ts`
|
|
1568
|
+
|
|
1569
|
+
`describe_simple_request_cross_tests({setup_test, rpc_path?, login_path?, logout_path?})`
|
|
1570
|
+
— a JSON route refuses any `POST` that isn't `application/json` with a flat
|
|
1571
|
+
415 `{error: 'unsupported_content_type'}` before reading a credential or the
|
|
1572
|
+
body: the CORS-safelisted types in any spelling (`text/plain`, `Text/Plain`,
|
|
1573
|
+
form-encoded, multipart) on RPC with a session, untyped RPC (a byte body, so
|
|
1574
|
+
`fetch` adds no type), `application/octet-stream` / `+json` / empty-typed RPC
|
|
1575
|
+
and login, form-encoded login, a forged `text/plain` logout with a session
|
|
1576
|
+
(which must leave the session valid), and an untyped logout with no session
|
|
1577
|
+
(415, not 401); a bodyless JSON logout reaches the auth check (401), and
|
|
1578
|
+
`application/json` with a charset is dispatched. The TS spine checks per route
|
|
1579
|
+
(`apply_route_specs`), the Rust spine in each JSON handler. Runs both legs:
|
|
1580
|
+
the in-process `auth/simple_request_parity.db.test.ts` and the cross-process
|
|
1581
|
+
`simple_request.cross.test.ts`.
|
|
1582
|
+
|
|
1567
1583
|
### Query-string shape parity — `cross_backend/query_shape.ts`
|
|
1568
1584
|
|
|
1569
1585
|
`describe_query_shape_cross_tests({setup_test, capabilities, rpc_path?})` —
|
|
@@ -1611,7 +1627,7 @@ success-path gate. Gated on `capabilities.ready`. Imperative (not a
|
|
|
1611
1627
|
`conformance_table` row) because `/ready` is a public flat-REST route, not a
|
|
1612
1628
|
JSON-RPC envelope, and the probe needs `fresh_transport({origin: null})` —
|
|
1613
1629
|
the same reasons the sibling `cross_backend/origin.ts` suite is imperative.
|
|
1614
|
-
|
|
1630
|
+
Runs both legs (`cross_backend/ready_parity.db.test.ts` +
|
|
1615
1631
|
`cross_backend/ready.cross.test.ts`).
|
|
1616
1632
|
|
|
1617
1633
|
Both backends read the **same** committed
|
|
@@ -1693,7 +1709,7 @@ USERNAME_LENGTH_MAX]` = `[3, 39]` boundary edges (just-outside → 400,
|
|
|
1693
1709
|
|
|
1694
1710
|
Ungated (login + signup are on every spine). Runs both legs via the shared
|
|
1695
1711
|
`{setup_test}` protocol: in-process (`identity_parity.db.test.ts`, plain
|
|
1696
|
-
`gro test`) and cross-process (`identity_parity.cross.test.ts`).
|
|
1712
|
+
`gro test`) and cross-process (`identity_parity.cross.test.ts`).
|
|
1697
1713
|
The accepted-case 403s rely on `create_spine_route_specs` zeroing
|
|
1698
1714
|
`signup_fail_floor_ms` (mirroring `login_fail_floor_ms: 0`) so they don't each
|
|
1699
1715
|
pay the 250ms denial floor.
|
|
@@ -1838,8 +1854,8 @@ re-roll the serve / daemon-info / WS-attach / drain boilerplate:
|
|
|
1838
1854
|
- `testing/cross_backend/testing_server_node.ts` — `create_node_testing_adapter()` (`@hono/node-server` + `@hono/node-ws`). Optional peer deps (like `ws`); only test binaries import them. Its factory sets the `ws` server's `maxPayload` to `max_message_bytes` (default `DEFAULT_WS_MAX_MESSAGE_BYTES`) — `@hono/node-ws` takes no option for it, and `ws`'s own default is 100 MiB — so an oversized message is refused at the frame layer (still `WS_CLOSE_MESSAGE_TOO_BIG`) before it is buffered whole. Bun's adapter sets twice it as its frame cap (see below); Deno takes no frame cap and keeps the per-message check alone.
|
|
1839
1855
|
- `testing/cross_backend/testing_server_deno.ts` — `create_deno_testing_adapter()` (`Deno.serve` + `@hono/deno`, an optional peer dep; `Deno` declared locally so it typechecks under the Node toolchain). Spawn the entry with `--sloppy-imports` (Deno doesn't do `.js`→`.ts`; Gro's loader does, so the Node path needs no flag).
|
|
1840
1856
|
- `testing/cross_backend/testing_server_bun.ts` — `create_bun_testing_adapter()` (`Bun.serve` + `@hono/bun`'s module-level `getConnInfo`, `upgradeWebSocket`, and `websocket`; `Bun.serve` declared locally so it typechecks under the Node toolchain). Needs the optional `@hono/bun` peer dep (the counterpart to Node's `@hono/node-server` + `@hono/node-ws`; `Bun.serve` is built in), and Bun resolves `.js`→`.ts` natively (no flag, unlike Deno). Reuses `create_node_runtime` (Bun implements the `node:fs`/`node:process` surface). WS is module-level + stateless (like Deno) — the `websocket` handler is threaded into `serve`, where `Bun.serve` wants it, so no post-serve attach. It carries `maxPayloadLength` at twice `max_message_bytes` rather than Bun's 16 MiB default: past its cap Bun drops the socket without a close frame (1006), so the headroom leaves a message just over the limit to the per-message check (`WS_CLOSE_MESSAGE_TOO_BIG`, as on Node), while a grossly oversized one is refused before Bun buffers it whole.
|
|
1841
|
-
- `testing/cross_backend/default_spine_surface.ts` — the canonical no-domain spine surface (account/admin/audit/signup + bootstrap): `spine_session_options`, `spine_roles`, `create_spine_route_specs`, `spine_rpc_endpoints`, `create_spine_surface_spec`. This is the **declared** surface — the `create_standard_rpc_actions` bundle the spec-derived suites auto-enumerate. It passes `daemon_token: true` (both spine binaries mount the daemon-token layer) and leaves `GET /api/surface` at its default, off — the TS spine binary does too, and the Rust `testing_spine_stub` serves none.
|
|
1842
|
-
- `testing/cross_backend/full_spine_mount.ts` — `build_full_spine_rpc_actions(deps, options)` — the **full** live RPC mount: the declared bundle **plus** the off-declared-surface families the binary live-mounts (`_testing_*` backdoors, the cell verb set, the opt-in `actor_lookup` / `actor_search` resolvers). `build_full_spine_mount(deps, options)` builds it once for both of the binary's endpoints, returning `FullSpineMount` (`{rpc_actions, ws_actions}`): the WS list is `protocol_actions` plus every RPC action not already among them, twinning the Rust `testing_spine_stub`, which serves one registry on RPC and WS (the one difference is `cancel` — a registered protocol action on TS, owned by the read loop on Rust). Single-sources the mount so the binary and the `spine_method_coverage` reconciliation test build the same list.
|
|
1857
|
+
- `testing/cross_backend/default_spine_surface.ts` — the canonical no-domain spine surface (account/admin/audit/signup + bootstrap): `spine_session_options`, `spine_roles`, `create_spine_route_specs`, `spine_rpc_endpoints`, `create_spine_surface_spec`. This is the **declared** surface — the `create_standard_rpc_actions` bundle the spec-derived suites auto-enumerate. It passes `daemon_token: true` (both spine binaries mount the daemon-token layer) and leaves `GET /api/surface` at its default, off — the TS spine binary does too, and the Rust `testing_spine_stub` serves none. Shared by the spine_stub cross test, the TS cross tests, and the binary.
|
|
1858
|
+
- `testing/cross_backend/full_spine_mount.ts` — `build_full_spine_rpc_actions(deps, options)` — the **full** live RPC mount: the declared bundle **plus** the off-declared-surface families the binary live-mounts (`_testing_*` backdoors, the cell verb set, the opt-in `actor_lookup` / `actor_search` resolvers). `build_full_spine_mount(deps, options)` builds it once for both of the binary's endpoints, returning `FullSpineMount` (`{rpc_actions, ws_actions}`): the WS list is `protocol_actions` plus every RPC action not already among them, twinning the Rust `testing_spine_stub`, which serves one registry on RPC and WS (the one difference is `cancel` — a registered protocol action on TS, owned by the read loop on Rust). Single-sources the mount so the binary and the `spine_method_coverage` reconciliation test build the same list.
|
|
1843
1859
|
- `testing/cross_backend/ts_spine_backend_config.ts` — `ts_spine_node_backend_config()` / `ts_spine_deno_backend_config()` / `ts_spine_bun_backend_config()` presets (in-memory PGlite, no external infra), the TS analog of `rust_spine_stub_backend_config()`.
|
|
1844
1860
|
|
|
1845
1861
|
fuz_app's own binary wiring (`src/test/cross_backend/testing_spine_server{,_node,_deno,_bun}.ts`) is the worked example: ~one `build_app` over `create_app_backend` + `create_app_server` (`rate_limiters: 'disabled_for_testing'` plus whichever login / action limiters its env toggles built, `build_full_spine_mount`'s two lists on one `rpc_endpoints` entry and one `ws_endpoints` entry, whose `transport` is also the role-grant-offer `notification_sender`), reusing `default_spine_surface`. `src/test/cross_backend/testing_spine_server.db.test.ts` builds it with the Node adapter in-process and asserts its surface lists `/api/ws` and passes the surface invariants. The `_node`/`_deno`/`_bun` entries differ only in which adapter they wire — `build_spine_app` is runtime-agnostic. It leaves `create_app_server`'s `auth_cleanup` off, as the Rust `testing_spine_stub` leaves its twin unscheduled: a background pass would delete rows and write audit rows under a running suite. A consumer's cross-process test binary may schedule it when nothing its suites seed is already expired (the conformance table's `expired_session` principal seeds a backdated session row); an in-process harness leaves it off.
|
|
@@ -1881,8 +1897,7 @@ beyond the `audit_log_list` RPC reads — structurally in-process).
|
|
|
1881
1897
|
above). The TS spine binary serves `GET /api/admin/audit/stream` —
|
|
1882
1898
|
`build_spine_app` passes `audit_log_sse: true` and `create_spine_route_specs`
|
|
1883
1899
|
mounts `create_audit_log_route_specs({stream: ctx.audit_sse})` when
|
|
1884
|
-
`ctx.audit_sse` is set (keeps
|
|
1885
|
-
shared surface snapshot SSE-free, since the surface stub ctx has
|
|
1900
|
+
`ctx.audit_sse` is set (keeps the shared surface snapshot SSE-free, since the surface stub ctx has
|
|
1886
1901
|
`audit_sse: null`). `capabilities.sse` is scoped to the TS spine configs
|
|
1887
1902
|
(`ts_spine_backend_config.ts`), not the shared `ts_default_capabilities`,
|
|
1888
1903
|
which stays honest for consumers who don't wire `audit_log_sse`. The
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin_integration.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/admin_integration.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAgC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAW3E,OAAO,EAKN,KAAK,uBAAuB,EAC5B,MAAM,kBAAkB,CAAC;AAmB1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,0BAA0B,CAAC;AAYvE;;GAEG;AACH,MAAM,WAAW,mCAAmC;IACnD;;;;OAIG;IACH,UAAU,EAAE,SAAS,CAAC;IACtB;;;;OAIG;IACH,cAAc,EAAE,cAAc,CAAC;IAC/B,uFAAuF;IACvF,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,4GAA4G;IAC5G,KAAK,EAAE,gBAAgB,CAAC;IACxB;;;OAGG;IACH,aAAa,EAAE,uBAAuB,CAAC;IACvC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAiBD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,yCAAyC,GACrD,SAAS,mCAAmC,KAC1C,
|
|
1
|
+
{"version":3,"file":"admin_integration.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/admin_integration.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAgC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAW3E,OAAO,EAKN,KAAK,uBAAuB,EAC5B,MAAM,kBAAkB,CAAC;AAmB1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,0BAA0B,CAAC;AAYvE;;GAEG;AACH,MAAM,WAAW,mCAAmC;IACnD;;;;OAIG;IACH,UAAU,EAAE,SAAS,CAAC;IACtB;;;;OAIG;IACH,cAAc,EAAE,cAAc,CAAC;IAC/B,uFAAuF;IACvF,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,4GAA4G;IAC5G,KAAK,EAAE,gBAAgB,CAAC;IACxB;;;OAGG;IACH,aAAa,EAAE,uBAAuB,CAAC;IACvC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAiBD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,yCAAyC,GACrD,SAAS,mCAAmC,KAC1C,IAm5BF,CAAC"}
|
|
@@ -595,7 +595,8 @@ export const describe_standard_admin_integration_tests = (options) => {
|
|
|
595
595
|
headers: {
|
|
596
596
|
host: 'localhost',
|
|
597
597
|
origin: 'http://localhost:5173',
|
|
598
|
-
cookie: `${cookie_name}=${user_two_cookie}
|
|
598
|
+
cookie: `${cookie_name}=${user_two_cookie}`,
|
|
599
|
+
'content-type': 'application/json'
|
|
599
600
|
}
|
|
600
601
|
});
|
|
601
602
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attack_surface.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/attack_surface.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAoB7B,OAAO,EAQN,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,MAAM,yBAAyB,CAAC;AAejC,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAsDpF,oFAAoF;AACpF,MAAM,WAAW,sBAAsB;IACtC,+EAA+E;IAC/E,KAAK,EAAE,MAAM,cAAc,CAAC;IAC5B,yDAAyD;IACzD,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB,GAAI,SAAS,sBAAsB,KAAG,
|
|
1
|
+
{"version":3,"file":"attack_surface.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/attack_surface.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAoB7B,OAAO,EAQN,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,MAAM,yBAAyB,CAAC;AAejC,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAsDpF,oFAAoF;AACpF,MAAM,WAAW,sBAAsB;IACtC,+EAA+E;IAC/E,KAAK,EAAE,MAAM,cAAc,CAAC;IAC5B,yDAAyD;IACzD,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,yBAAyB,GAAI,SAAS,sBAAsB,KAAG,IA6J3E,CAAC;AAIF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,uCAAuC,GACnD,UAAU,2BAA2B,GAAG,IAAI,GAAG,SAAS,KACtD,2BAA2B,GAAG,IAWhC,CAAC;AAEF,0DAA0D;AAC1D,MAAM,WAAW,4BAA4B;IAC5C,+EAA+E;IAC/E,KAAK,EAAE,MAAM,cAAc,CAAC;IAC5B,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,sBAAsB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,iIAAiI;IACjI,uBAAuB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC,yDAAyD;IACzD,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,qEAAqE;IACrE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,eAAe,CAAC,EAAE,4BAA4B,CAAC;IAC/C;;;;;;;;;;;OAWG;IACH,sBAAsB,CAAC,EAAE,2BAA2B,GAAG,IAAI,CAAC;IAC5D;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,sCAAsC,GAClD,SAAS,4BAA4B,KACnC,IA4EF,CAAC"}
|
|
@@ -91,13 +91,17 @@ export const describe_adversarial_auth = (options) => {
|
|
|
91
91
|
const spec_lookup = build_route_spec_lookup(route_specs);
|
|
92
92
|
const test_path = (route) => resolve_valid_path(route.path, spec_lookup.get(`${route.method} ${route.path}`)?.params);
|
|
93
93
|
const apps = create_auth_test_apps(route_specs, roles);
|
|
94
|
+
// every route's request carries the JSON content type a real client sends, so
|
|
95
|
+
// the per-route content-type check (415) never answers ahead of the auth gate
|
|
96
|
+
const probe_init = (route) => ({
|
|
97
|
+
method: route.method,
|
|
98
|
+
headers: { 'content-type': 'application/json' }
|
|
99
|
+
});
|
|
94
100
|
describe('adversarial HTTP auth enforcement', () => {
|
|
95
101
|
describe('unauthenticated → 401', () => {
|
|
96
102
|
for (const route of protected_routes) {
|
|
97
103
|
test(`${route.method} ${route.path}`, async () => {
|
|
98
|
-
const res = await apps.public.request(test_path(route),
|
|
99
|
-
method: route.method
|
|
100
|
-
});
|
|
104
|
+
const res = await apps.public.request(test_path(route), probe_init(route));
|
|
101
105
|
assert.strictEqual(res.status, 401, `${route.method} ${route.path}`);
|
|
102
106
|
const body = await res.json();
|
|
103
107
|
assert.strictEqual(body.error, ERROR_AUTHENTICATION_REQUIRED);
|
|
@@ -126,9 +130,7 @@ export const describe_adversarial_auth = (options) => {
|
|
|
126
130
|
const app = apps.by_role.get(wrong_role);
|
|
127
131
|
if (!app)
|
|
128
132
|
throw new Error(`No test app for role '${wrong_role}'`);
|
|
129
|
-
const res = await app.request(test_path(route),
|
|
130
|
-
method: route.method
|
|
131
|
-
});
|
|
133
|
+
const res = await app.request(test_path(route), probe_init(route));
|
|
132
134
|
assert.strictEqual(res.status, 403, `${route.method} ${route.path}`);
|
|
133
135
|
const body = await res.json();
|
|
134
136
|
assert.strictEqual(body.error, ERROR_INSUFFICIENT_PERMISSIONS);
|
|
@@ -141,9 +143,7 @@ export const describe_adversarial_auth = (options) => {
|
|
|
141
143
|
describe('authenticated without role → 403', () => {
|
|
142
144
|
for (const route of role_only_routes) {
|
|
143
145
|
test(`${route.method} ${route.path}`, async () => {
|
|
144
|
-
const res = await apps.authed.request(test_path(route),
|
|
145
|
-
method: route.method
|
|
146
|
-
});
|
|
146
|
+
const res = await apps.authed.request(test_path(route), probe_init(route));
|
|
147
147
|
assert.strictEqual(res.status, 403, `${route.method} ${route.path}`);
|
|
148
148
|
const body = await res.json();
|
|
149
149
|
assert.strictEqual(body.error, ERROR_INSUFFICIENT_PERMISSIONS);
|
|
@@ -175,9 +175,9 @@ export const describe_adversarial_auth = (options) => {
|
|
|
175
175
|
continue;
|
|
176
176
|
}
|
|
177
177
|
test(`${route.method} ${route.path} (${refused})`, async () => {
|
|
178
|
-
const res = await apps.by_credential_type
|
|
179
|
-
|
|
180
|
-
|
|
178
|
+
const res = await apps.by_credential_type
|
|
179
|
+
.get(refused)
|
|
180
|
+
.request(test_path(route), probe_init(route));
|
|
181
181
|
assert.strictEqual(res.status, 403, `${route.method} ${route.path}`);
|
|
182
182
|
const body = await res.json();
|
|
183
183
|
assert.strictEqual(body.error, ERROR_CREDENTIAL_TYPE_REQUIRED);
|
|
@@ -190,12 +190,11 @@ export const describe_adversarial_auth = (options) => {
|
|
|
190
190
|
describe('correct auth passes guard', () => {
|
|
191
191
|
for (const route of protected_routes) {
|
|
192
192
|
test(`${route.method} ${route.path}`, async () => {
|
|
193
|
-
const res = await select_auth_app(apps, route.auth).request(test_path(route),
|
|
194
|
-
method: route.method
|
|
195
|
-
});
|
|
193
|
+
const res = await select_auth_app(apps, route.auth).request(test_path(route), probe_init(route));
|
|
196
194
|
// handler may error (500) or return 404 (stub deps) — that's fine, we only verify auth passed
|
|
197
195
|
assert.notStrictEqual(res.status, 401, 'should not be 401 (auth rejected)');
|
|
198
196
|
assert.notStrictEqual(res.status, 403, 'should not be 403 (role rejected)');
|
|
197
|
+
assert.notStrictEqual(res.status, 415, 'should not be 415 (content type refused)');
|
|
199
198
|
// handler-level 404 (resource not found with stub deps) is fine —
|
|
200
199
|
// only reject router-level 404 (route not registered)
|
|
201
200
|
if (res.status === 404) {
|
|
@@ -155,7 +155,7 @@ export const describe_audit_completeness_tests = (options) => {
|
|
|
155
155
|
assert.ok(logout_route, 'Expected POST /logout route');
|
|
156
156
|
const res = await fixture.transport(logout_route.path, {
|
|
157
157
|
method: 'POST',
|
|
158
|
-
headers: fixture.create_session_headers()
|
|
158
|
+
headers: fixture.create_session_headers({ 'content-type': 'application/json' })
|
|
159
159
|
});
|
|
160
160
|
assert.strictEqual(res.status, 200);
|
|
161
161
|
const events = await list_audit_events({ request: fixture.transport }, rpc_path, observer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account_lifecycle.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/account_lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"account_lifecycle.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/account_lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAmC9B,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,YAAY,CAAC;AAG1E;;;;;GAKG;AACH,MAAM,MAAM,gCAAgC,GAAG,uCAAuC,CAAC;AAEvF,eAAO,MAAM,sCAAsC,GAClD,SAAS,gCAAgC,KACvC,IAoUF,CAAC"}
|
|
@@ -12,9 +12,6 @@ import '../assert_dev_env.js';
|
|
|
12
12
|
* `result` is parsed against the verb's declared Zod **output** schema, so
|
|
13
13
|
* a TS↔Rust envelope drift fails the assertion.
|
|
14
14
|
*
|
|
15
|
-
* `$lib`-free by contract (relative specifiers only) so it can be imported
|
|
16
|
-
* from the spawnable cross-process test files.
|
|
17
|
-
*
|
|
18
15
|
* @module
|
|
19
16
|
*/
|
|
20
17
|
import { describe, assert } from 'vitest';
|
|
@@ -27,10 +27,6 @@ import '../assert_dev_env.js';
|
|
|
27
27
|
*
|
|
28
28
|
* Paired with `action_manifest_parity.ts` for the diff + assertion helpers.
|
|
29
29
|
*
|
|
30
|
-
* `$lib`-free by contract — reached by the spawned TS binary (via
|
|
31
|
-
* `testing_reset_actions.ts` → `full_spine_mount.ts`), so every import is
|
|
32
|
-
* relative.
|
|
33
|
-
*
|
|
34
30
|
* @module
|
|
35
31
|
*/
|
|
36
32
|
import { z } from 'zod';
|
|
@@ -53,15 +49,15 @@ export declare const ActionManifestEntry: z.ZodObject<{
|
|
|
53
49
|
side_effects: z.ZodBoolean;
|
|
54
50
|
/** The `account` auth axis. */
|
|
55
51
|
account: z.ZodEnum<{
|
|
56
|
-
optional: "optional";
|
|
57
|
-
none: "none";
|
|
58
52
|
required: "required";
|
|
53
|
+
none: "none";
|
|
54
|
+
optional: "optional";
|
|
59
55
|
}>;
|
|
60
56
|
/** The `actor` auth axis. */
|
|
61
57
|
actor: z.ZodEnum<{
|
|
62
|
-
optional: "optional";
|
|
63
|
-
none: "none";
|
|
64
58
|
required: "required";
|
|
59
|
+
none: "none";
|
|
60
|
+
optional: "optional";
|
|
65
61
|
}>;
|
|
66
62
|
/** Required roles (any-of), sorted; `[]` when the action declares no role gate. */
|
|
67
63
|
roles: z.ZodArray<z.ZodString>;
|
|
@@ -69,9 +65,9 @@ export declare const ActionManifestEntry: z.ZodObject<{
|
|
|
69
65
|
credential_types: z.ZodArray<z.ZodString>;
|
|
70
66
|
/** Per-action rate-limit class, or `null` when the action declares none. */
|
|
71
67
|
rate_limit: z.ZodNullable<z.ZodEnum<{
|
|
68
|
+
both: "both";
|
|
72
69
|
account: "account";
|
|
73
70
|
ip: "ip";
|
|
74
|
-
both: "both";
|
|
75
71
|
}>>;
|
|
76
72
|
}, z.core.$strict>;
|
|
77
73
|
export type ActionManifestEntry = z.infer<typeof ActionManifestEntry>;
|
|
@@ -84,15 +80,15 @@ export declare const ActionManifest: z.ZodObject<{
|
|
|
84
80
|
side_effects: z.ZodBoolean;
|
|
85
81
|
/** The `account` auth axis. */
|
|
86
82
|
account: z.ZodEnum<{
|
|
87
|
-
optional: "optional";
|
|
88
|
-
none: "none";
|
|
89
83
|
required: "required";
|
|
84
|
+
none: "none";
|
|
85
|
+
optional: "optional";
|
|
90
86
|
}>;
|
|
91
87
|
/** The `actor` auth axis. */
|
|
92
88
|
actor: z.ZodEnum<{
|
|
93
|
-
optional: "optional";
|
|
94
|
-
none: "none";
|
|
95
89
|
required: "required";
|
|
90
|
+
none: "none";
|
|
91
|
+
optional: "optional";
|
|
96
92
|
}>;
|
|
97
93
|
/** Required roles (any-of), sorted; `[]` when the action declares no role gate. */
|
|
98
94
|
roles: z.ZodArray<z.ZodString>;
|
|
@@ -100,9 +96,9 @@ export declare const ActionManifest: z.ZodObject<{
|
|
|
100
96
|
credential_types: z.ZodArray<z.ZodString>;
|
|
101
97
|
/** Per-action rate-limit class, or `null` when the action declares none. */
|
|
102
98
|
rate_limit: z.ZodNullable<z.ZodEnum<{
|
|
99
|
+
both: "both";
|
|
103
100
|
account: "account";
|
|
104
101
|
ip: "ip";
|
|
105
|
-
both: "both";
|
|
106
102
|
}>>;
|
|
107
103
|
}, z.core.$strict>>;
|
|
108
104
|
}, z.core.$strict>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action_manifest.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/action_manifest.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B
|
|
1
|
+
{"version":3,"file":"action_manifest.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/action_manifest.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAE9E;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB;IAC/B,uCAAuC;;IAEvC,iGAAiG;;IAEjG,+BAA+B;;;;;;IAE/B,6BAA6B;;;;;;IAE7B,mFAAmF;;IAEnF,iFAAiF;;IAEjF,4EAA4E;;;;;;kBAE3E,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,kEAAkE;AAClE,eAAO,MAAM,cAAc;;QAlB1B,uCAAuC;;QAEvC,iGAAiG;;QAEjG,+BAA+B;;;;;;QAE/B,6BAA6B;;;;;;QAE7B,mFAAmF;;QAEnF,iFAAiF;;QAEjF,4EAA4E;;;;;;;kBAQ3E,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAM5D;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC;CACnC,KAAG,mBAQF,CAAC;AAMH;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,GACjC,OAAO,aAAa,CACnB,IAAI,CAAC,yBAAyB,EAAE,QAAQ,GAAG,MAAM,GAAG,cAAc,GAAG,YAAY,CAAC,CAClF,KACC,cAED,CAAC"}
|
|
@@ -27,10 +27,6 @@ import '../assert_dev_env.js';
|
|
|
27
27
|
*
|
|
28
28
|
* Paired with `action_manifest_parity.ts` for the diff + assertion helpers.
|
|
29
29
|
*
|
|
30
|
-
* `$lib`-free by contract — reached by the spawned TS binary (via
|
|
31
|
-
* `testing_reset_actions.ts` → `full_spine_mount.ts`), so every import is
|
|
32
|
-
* relative.
|
|
33
|
-
*
|
|
34
30
|
* @module
|
|
35
31
|
*/
|
|
36
32
|
import { z } from 'zod';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actor_lookup.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/actor_lookup.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"actor_lookup.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/actor_lookup.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAkC9B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAG3D;;;;;GAKG;AACH,MAAM,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AASnE,eAAO,MAAM,iCAAiC,GAAI,SAAS,2BAA2B,KAAG,IAkDxF,CAAC"}
|
|
@@ -25,9 +25,6 @@ import '../assert_dev_env.js';
|
|
|
25
25
|
* binaries + Rust `testing_spine_stub` over real HTTP). `actor_lookup` is
|
|
26
26
|
* mounted on every spine, so the suite is ungated.
|
|
27
27
|
*
|
|
28
|
-
* `$lib`-free by contract (relative specifiers only), like the sibling
|
|
29
|
-
* cross-backend suites.
|
|
30
|
-
*
|
|
31
28
|
* @module
|
|
32
29
|
*/
|
|
33
30
|
import { describe, test, assert } from 'vitest';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actor_search.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/actor_search.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"actor_search.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/actor_search.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAyC9B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAG3D,qFAAqF;AACrF,MAAM,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AASnE,eAAO,MAAM,iCAAiC,GAAI,SAAS,2BAA2B,KAAG,IAyDxF,CAAC"}
|
|
@@ -29,8 +29,6 @@ import '../assert_dev_env.js';
|
|
|
29
29
|
* (`cross_backend/actor_search.cross.test.ts`, TS spine binaries + Rust
|
|
30
30
|
* `testing_spine_stub`). Mounted on every spine, so the suite is ungated.
|
|
31
31
|
*
|
|
32
|
-
* `$lib`-free by contract (relative specifiers only).
|
|
33
|
-
*
|
|
34
32
|
* @module
|
|
35
33
|
*/
|
|
36
34
|
import { describe, test, assert } from 'vitest';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app_settings.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/app_settings.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"app_settings.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/app_settings.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAoC9B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAG3D,qFAAqF;AACrF,MAAM,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AAiBnE,eAAO,MAAM,iCAAiC,GAAI,SAAS,2BAA2B,KAAG,IA8DxF,CAAC"}
|
|
@@ -26,8 +26,6 @@ import '../assert_dev_env.js';
|
|
|
26
26
|
* binaries + Rust `testing_spine_stub`). Mounted on every spine, so the
|
|
27
27
|
* suite is ungated.
|
|
28
28
|
*
|
|
29
|
-
* `$lib`-free by contract (relative specifiers only).
|
|
30
|
-
*
|
|
31
29
|
* @module
|
|
32
30
|
*/
|
|
33
31
|
import { describe, test, assert } from 'vitest';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body_size.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/body_size.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"body_size.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/body_size.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AA0D9B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAG3D;;;;;;GAMG;AACH,MAAM,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;AAmDhE,eAAO,MAAM,8BAA8B,GAAI,SAAS,wBAAwB,KAAG,IA0ClF,CAAC"}
|
|
@@ -47,9 +47,6 @@ import '../assert_dev_env.js';
|
|
|
47
47
|
*
|
|
48
48
|
* Cited property: `docs/security.md` §"Body Size Limiting".
|
|
49
49
|
*
|
|
50
|
-
* `$lib`-free by contract (relative specifiers only), like the sibling
|
|
51
|
-
* cross-backend suites.
|
|
52
|
-
*
|
|
53
50
|
* @module
|
|
54
51
|
*/
|
|
55
52
|
import { describe, test, assert } from 'vitest';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"body_size_smuggling.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/body_size_smuggling.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"body_size_smuggling.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/body_size_smuggling.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAwD9B,4EAA4E;AAC5E,MAAM,WAAW,iCAAiC;IACjD,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACrC;AAqDD,eAAO,MAAM,wCAAwC,GACpD,SAAS,iCAAiC,KACxC,IAiFF,CAAC"}
|
|
@@ -44,8 +44,6 @@ import '../assert_dev_env.js';
|
|
|
44
44
|
* Cited property: `docs/security.md` §"Body Size Limiting" (connection handling
|
|
45
45
|
* on oversized reject).
|
|
46
46
|
*
|
|
47
|
-
* `$lib`-free by contract (relative + `node:` specifiers only).
|
|
48
|
-
*
|
|
49
47
|
* @module
|
|
50
48
|
*/
|
|
51
49
|
import { connect } from 'node:net';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell_cross_helpers.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/cell_cross_helpers.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"cell_cross_helpers.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/cell_cross_helpers.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAgB9B,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE,qEAAqE;AACrE,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC9F;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAC1B,WAAW,cAAc,EACzB,MAAM,MAAM,EACZ,QAAQ,MAAM,EACd,QAAQ,OAAO,EACf,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC7B,OAAO,CAAC,SAAS,CAMnB,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,YAAY,GAAI,GAAG,SAAS,KAAG,OAG/B,CAAC;AAEd;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,GAAG,SAAS,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAG,CAUrE,CAAC"}
|
|
@@ -9,9 +9,6 @@ import '../assert_dev_env.js';
|
|
|
9
9
|
* the wire-shape parity gate. A TS↔Rust envelope drift, not just a payload
|
|
10
10
|
* field drift, fails the assertion.
|
|
11
11
|
*
|
|
12
|
-
* `$lib`-free by contract (relative specifiers only) so the suites can be
|
|
13
|
-
* imported from the spawnable cross-process test files.
|
|
14
|
-
*
|
|
15
12
|
* @module
|
|
16
13
|
*/
|
|
17
14
|
import { assert } from 'vitest';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell_crud.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/cell_crud.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"cell_crud.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/cell_crud.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAyD9B,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,YAAY,CAAC;AAG1E,eAAO,MAAM,8BAA8B,GAC1C,SAAS,uCAAuC,KAC9C,IA+cF,CAAC"}
|
|
@@ -39,9 +39,6 @@ import '../assert_dev_env.js';
|
|
|
39
39
|
* `describe_cell_relations_cross_tests` alongside the grant verbs rather than
|
|
40
40
|
* here.
|
|
41
41
|
*
|
|
42
|
-
* `$lib`-free by contract (relative specifiers only) so the suite can be
|
|
43
|
-
* imported from the spawnable cross-process test files.
|
|
44
|
-
*
|
|
45
42
|
* @module
|
|
46
43
|
*/
|
|
47
44
|
import { describe, assert } from 'vitest';
|
|
@@ -21,8 +21,6 @@ export declare const describe_cell_gated_create_cross_tests: (options: RpcPathCa
|
|
|
21
21
|
*
|
|
22
22
|
* Gated on `capabilities.cell_gated_create` — a `pending` contribution only
|
|
23
23
|
* exists when the directory authorizer is mounted (reference spine binaries).
|
|
24
|
-
*
|
|
25
|
-
* `$lib`-free by contract (relative specifiers only).
|
|
26
24
|
*/
|
|
27
25
|
export declare const describe_cell_moderate_cross_tests: (options: RpcPathCapabilityGatedCrossSuiteOptions) => void;
|
|
28
26
|
//# sourceMappingURL=cell_gated_create.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell_gated_create.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/cell_gated_create.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"cell_gated_create.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/cell_gated_create.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAuD9B,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,YAAY,CAAC;AAkB1E,eAAO,MAAM,sCAAsC,GAClD,SAAS,uCAAuC,KAC9C,IAwPF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,kCAAkC,GAC9C,SAAS,uCAAuC,KAC9C,IAyKF,CAAC"}
|
|
@@ -39,8 +39,6 @@ import '../assert_dev_env.js';
|
|
|
39
39
|
* the in-process default app (the authorizer hook's in-process coverage is the
|
|
40
40
|
* standalone `auth/cell_create_authorize.db.test.ts`).
|
|
41
41
|
*
|
|
42
|
-
* `$lib`-free by contract (relative specifiers only).
|
|
43
|
-
*
|
|
44
42
|
* @module
|
|
45
43
|
*/
|
|
46
44
|
import { describe, assert } from 'vitest';
|
|
@@ -168,8 +166,6 @@ export const describe_cell_gated_create_cross_tests = (options) => {
|
|
|
168
166
|
*
|
|
169
167
|
* Gated on `capabilities.cell_gated_create` — a `pending` contribution only
|
|
170
168
|
* exists when the directory authorizer is mounted (reference spine binaries).
|
|
171
|
-
*
|
|
172
|
-
* `$lib`-free by contract (relative specifiers only).
|
|
173
169
|
*/
|
|
174
170
|
export const describe_cell_moderate_cross_tests = (options) => {
|
|
175
171
|
const { setup_test, capabilities } = options;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell_grant_role.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/cell_grant_role.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"cell_grant_role.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/cell_grant_role.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAiD9B,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,YAAY,CAAC;AAG1E,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,gBAAyB,CAAC;AAEvD,oFAAoF;AACpF,eAAO,MAAM,yBAAyB,qBAAqB,CAAC;AAK5D,eAAO,MAAM,oCAAoC,GAChD,SAAS,uCAAuC,KAC9C,IAsOF,CAAC"}
|
|
@@ -29,8 +29,6 @@ import '../assert_dev_env.js';
|
|
|
29
29
|
* (`cross_backend/cell_grant_role.cross.test.ts`). Gated on
|
|
30
30
|
* `capabilities.cell_relations` (true on every spine, so it never skips).
|
|
31
31
|
*
|
|
32
|
-
* `$lib`-free by contract (relative specifiers only).
|
|
33
|
-
*
|
|
34
32
|
* @module
|
|
35
33
|
*/
|
|
36
34
|
import { describe, assert } from 'vitest';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cell_relations.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/cell_relations.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"cell_relations.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/cell_relations.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAyF9B,OAAO,KAAK,EAAE,uCAAuC,EAAE,MAAM,YAAY,CAAC;AAsF1E,eAAO,MAAM,mCAAmC,GAC/C,SAAS,uCAAuC,KAC9C,IAi2BF,CAAC"}
|
|
@@ -52,9 +52,6 @@ import '../assert_dev_env.js';
|
|
|
52
52
|
* closed role registry the Rust spine deliberately lacks, so role-grant
|
|
53
53
|
* parity is out of scope here (the TS impl covers it in-process).
|
|
54
54
|
*
|
|
55
|
-
* `$lib`-free by contract (relative specifiers only) so the suite can be
|
|
56
|
-
* imported from the spawnable cross-process test files.
|
|
57
|
-
*
|
|
58
55
|
* @module
|
|
59
56
|
*/
|
|
60
57
|
import { describe, assert } from 'vitest';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookie_attributes.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/cookie_attributes.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"cookie_attributes.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/cookie_attributes.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AA4C9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,6DAA6D;AAC7D,MAAM,WAAW,gCAAgC;IAChD,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC9B;AAoED,eAAO,MAAM,sCAAsC,GAClD,SAAS,gCAAgC,KACvC,IAmFF,CAAC"}
|
|
@@ -35,9 +35,6 @@ import '../assert_dev_env.js';
|
|
|
35
35
|
* codec directly). Cited property: `docs/security.md` §"Session Security"
|
|
36
36
|
* (the "Cookie attributes" bullet — `HttpOnly; Secure; SameSite=Strict; Path=/`).
|
|
37
37
|
*
|
|
38
|
-
* `$lib`-free by contract (relative specifiers only), like the sibling
|
|
39
|
-
* cross-backend suites.
|
|
40
|
-
*
|
|
41
38
|
* @module
|
|
42
39
|
*/
|
|
43
40
|
import { describe, test, assert } from 'vitest';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential_header_robustness.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/credential_header_robustness.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"credential_header_robustness.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/credential_header_robustness.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAyD9B,qGAAqG;AACrG,MAAM,WAAW,0CAA0C;IAC1D,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC9B;AAwFD,eAAO,MAAM,iDAAiD,GAC7D,SAAS,0CAA0C,KACjD,IAkHF,CAAC"}
|
|
@@ -44,8 +44,6 @@ import '../assert_dev_env.js';
|
|
|
44
44
|
* §"Credential Type Hierarchy" (a leaked / conflicting credential header can't
|
|
45
45
|
* escalate the credential ceiling) + §"API Token Security" (bearer handling).
|
|
46
46
|
*
|
|
47
|
-
* `$lib`-free by contract (relative + `node:` specifiers only).
|
|
48
|
-
*
|
|
49
47
|
* @module
|
|
50
48
|
*/
|
|
51
49
|
import { connect } from 'node:net';
|