@fuzdev/fuz_app 0.129.0 → 0.131.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 +23 -6
- package/dist/actions/connection_closer.d.ts +3 -1
- package/dist/actions/connection_closer.d.ts.map +1 -1
- package/dist/actions/register_action_ws.d.ts +46 -0
- package/dist/actions/register_action_ws.d.ts.map +1 -1
- package/dist/actions/register_action_ws.js +108 -14
- package/dist/actions/rpc_client.d.ts.map +1 -1
- package/dist/actions/transports.d.ts +2 -1
- package/dist/actions/transports.d.ts.map +1 -1
- package/dist/actions/transports.js +2 -1
- package/dist/actions/transports_ws_backend.d.ts +38 -4
- package/dist/actions/transports_ws_backend.d.ts.map +1 -1
- package/dist/actions/transports_ws_backend.js +69 -4
- package/dist/auth/audit_log_routes.d.ts +7 -3
- package/dist/auth/audit_log_routes.d.ts.map +1 -1
- package/dist/auth/audit_log_routes.js +50 -26
- package/dist/auth/scope_kind_schema.d.ts.map +1 -1
- package/dist/auth/scope_kind_schema.js +1 -3
- package/dist/db/db_pg.js +1 -1
- package/dist/http/CLAUDE.md +1 -1
- package/dist/http/jsonrpc_errors.d.ts.map +1 -1
- package/dist/http/jsonrpc_errors.js +7 -5
- package/dist/realtime/sse.d.ts +14 -1
- package/dist/realtime/sse.d.ts.map +1 -1
- package/dist/realtime/sse.js +77 -1
- package/dist/realtime/sse_auth_guard.js +1 -1
- package/dist/realtime/subscriber_registry.d.ts +44 -8
- package/dist/realtime/subscriber_registry.d.ts.map +1 -1
- package/dist/realtime/subscriber_registry.js +64 -10
- package/dist/runtime/mock.js +1 -1
- package/dist/server/app_server.d.ts +4 -1
- package/dist/server/app_server.d.ts.map +1 -1
- package/dist/testing/CLAUDE.md +21 -6
- 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 +0 -4
- 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/peer_ping_ws.js +4 -4
- 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/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_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/cross_backend/ws_inbound_dispatch.d.ts +20 -0
- package/dist/testing/cross_backend/ws_inbound_dispatch.d.ts.map +1 -0
- package/dist/testing/cross_backend/ws_inbound_dispatch.js +177 -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/ui/Datatable.svelte +2 -2
- package/dist/ui/ui_format.d.ts.map +1 -1
- package/dist/ui/ui_format.js +2 -0
- package/package.json +19 -19
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
*
|
|
23
23
|
* @module
|
|
24
24
|
*/
|
|
25
|
+
import { Logger } from '@fuzdev/fuz_util/log.ts';
|
|
25
26
|
/**
|
|
26
27
|
* Generic subscriber registry with channel-based filtering and identity-keyed disconnection.
|
|
27
28
|
*
|
|
@@ -52,6 +53,16 @@
|
|
|
52
53
|
* behind it. The twin of the Rust `fuz_realtime` `SseRegistry`
|
|
53
54
|
* (`subscribe_pending` / `admit` / `subscribe`).
|
|
54
55
|
*
|
|
56
|
+
* ## Shutdown
|
|
57
|
+
*
|
|
58
|
+
* `close_all` — the close `AppServer.close` runs — closes every stream,
|
|
59
|
+
* pending or admitted, and leaves the registry **closing** for good: every
|
|
60
|
+
* later registration is born closed. `subscribe_pending` registers nothing,
|
|
61
|
+
* so `admit` refuses the handle and the route's stream ends after its connect
|
|
62
|
+
* comment; `subscribe` closes the stream it is given at once. A stream still
|
|
63
|
+
* opening when the server shuts down therefore ends rather than outliving it.
|
|
64
|
+
* The flag is set in the same synchronous step that closes the live streams.
|
|
65
|
+
*
|
|
55
66
|
* @example
|
|
56
67
|
* ```ts
|
|
57
68
|
* const registry = new SubscriberRegistry<SseNotification>();
|
|
@@ -91,8 +102,10 @@
|
|
|
91
102
|
* return unauthorized();
|
|
92
103
|
* }
|
|
93
104
|
* const {response, stream} = create_sse_response(c, log);
|
|
94
|
-
*
|
|
95
|
-
*
|
|
105
|
+
* // first: a client that already left closes the stream, its listener runs at
|
|
106
|
+
* // once, and `admit` then refuses the removed registration
|
|
107
|
+
* stream.on_close(pending.unsubscribe);
|
|
108
|
+
* if (!registry.admit(pending, stream)) stream.close(); // the body is the connect comment alone
|
|
96
109
|
* return response;
|
|
97
110
|
* ```
|
|
98
111
|
*/
|
|
@@ -103,8 +116,13 @@ export class SubscriberRegistry {
|
|
|
103
116
|
// another registry names nothing here
|
|
104
117
|
#pending = new WeakMap();
|
|
105
118
|
#max_per_scope;
|
|
119
|
+
#log;
|
|
120
|
+
// set once by `close_all`, never cleared — every later registration is born
|
|
121
|
+
// closed (class doc, "Shutdown")
|
|
122
|
+
#closing = false;
|
|
106
123
|
constructor(options) {
|
|
107
124
|
this.#max_per_scope = options?.max_per_scope ?? null;
|
|
125
|
+
this.#log = options?.log === undefined ? new Logger('[sse]') : options.log;
|
|
108
126
|
}
|
|
109
127
|
/**
|
|
110
128
|
* Number of open — **admitted** — subscribers. A registration still pending
|
|
@@ -130,6 +148,15 @@ export class SubscriberRegistry {
|
|
|
130
148
|
}
|
|
131
149
|
return count;
|
|
132
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Whether `close_all` has run — the registry is shutting down and every
|
|
153
|
+
* registration from now on is born closed (class doc, "Shutdown"). The
|
|
154
|
+
* audit stream route reads it to skip the re-reads for a registration
|
|
155
|
+
* admission will refuse anyway.
|
|
156
|
+
*/
|
|
157
|
+
get closing() {
|
|
158
|
+
return this.#closing;
|
|
159
|
+
}
|
|
133
160
|
/**
|
|
134
161
|
* Add a subscriber, admitted at once — the one-step form of
|
|
135
162
|
* `subscribe_pending` + `admit`.
|
|
@@ -139,12 +166,20 @@ export class SubscriberRegistry {
|
|
|
139
166
|
* nothing, and the stream would open on a dead credential (class doc,
|
|
140
167
|
* "Two-phase registration").
|
|
141
168
|
*
|
|
169
|
+
* Once the registry is closing, the subscriber is born closed: `stream` is
|
|
170
|
+
* closed at once, nothing is registered, and the returned function is a
|
|
171
|
+
* no-op.
|
|
172
|
+
*
|
|
142
173
|
* @param stream - SSE stream to send data to
|
|
143
174
|
* @param options - channel filter and identity slots (`scope` + `groups`)
|
|
144
175
|
* @returns unsubscribe function
|
|
145
176
|
* @mutates registry - adds the new subscriber; closes oldest matching subscribers when `max_per_scope` is exceeded
|
|
146
177
|
*/
|
|
147
178
|
subscribe(stream, options) {
|
|
179
|
+
if (this.#closing) {
|
|
180
|
+
stream.close();
|
|
181
|
+
return () => { };
|
|
182
|
+
}
|
|
148
183
|
const subscriber = this.#create_entry(options);
|
|
149
184
|
this.#admit_entry(subscriber, stream);
|
|
150
185
|
this.#subscribers.add(subscriber);
|
|
@@ -161,13 +196,17 @@ export class SubscriberRegistry {
|
|
|
161
196
|
* broadcast, is not counted, and evicts nothing. A caller that then refuses
|
|
162
197
|
* the request calls the returned handle's `unsubscribe`.
|
|
163
198
|
*
|
|
199
|
+
* Once the registry is closing, the registration is born closed: nothing
|
|
200
|
+
* is registered, and `admit` refuses the handle.
|
|
201
|
+
*
|
|
164
202
|
* @param options - channel filter and identity slots (`scope` + `groups`)
|
|
165
203
|
* @returns the pending handle `admit` takes
|
|
166
|
-
* @mutates registry - adds the un-admitted registration
|
|
204
|
+
* @mutates registry - adds the un-admitted registration, unless the registry is closing
|
|
167
205
|
*/
|
|
168
206
|
subscribe_pending(options) {
|
|
169
207
|
const subscriber = this.#create_entry(options);
|
|
170
|
-
this.#
|
|
208
|
+
if (!this.#closing)
|
|
209
|
+
this.#subscribers.add(subscriber);
|
|
171
210
|
const pending = {
|
|
172
211
|
unsubscribe: () => {
|
|
173
212
|
this.#subscribers.delete(subscriber);
|
|
@@ -180,9 +219,9 @@ export class SubscriberRegistry {
|
|
|
180
219
|
* Admit a pending subscription, attaching the stream it delivers to — phase
|
|
181
220
|
* two (class doc).
|
|
182
221
|
*
|
|
183
|
-
* If the registration is gone — a revocation
|
|
184
|
-
* pending,
|
|
185
|
-
* is refused. Otherwise the per-scope cap is enforced as in `subscribe`,
|
|
222
|
+
* If the registration is gone — a revocation or the shutdown closed it
|
|
223
|
+
* while it was pending, it was born closed, or it was unsubscribed —
|
|
224
|
+
* nothing is evicted and the subscription is refused. Otherwise the per-scope cap is enforced as in `subscribe`,
|
|
186
225
|
* counting only admitted subscribers, and the stream starts receiving
|
|
187
226
|
* `broadcast` data. Admitting twice is refused the second time.
|
|
188
227
|
*
|
|
@@ -240,16 +279,20 @@ export class SubscriberRegistry {
|
|
|
240
279
|
}
|
|
241
280
|
/**
|
|
242
281
|
* Force-close every subscriber, pending or admitted — the shutdown close
|
|
243
|
-
* `AppServer.close` runs through the registry's `ConnectionCloser
|
|
282
|
+
* `AppServer.close` runs through the registry's `ConnectionCloser` — and
|
|
283
|
+
* leave the registry closing, for good: every later registration is born
|
|
284
|
+
* closed (class doc, "Shutdown"). A second call closes nothing.
|
|
244
285
|
*
|
|
245
286
|
* A stream whose `close` throws does not stop the loop: every subscriber is
|
|
246
287
|
* removed and closed, and the first error is thrown afterward.
|
|
247
288
|
*
|
|
248
289
|
* @returns the number of subscribers closed
|
|
249
|
-
* @mutates registry - removes every subscriber and closes its stream
|
|
290
|
+
* @mutates registry - sets the registry closing, removes every subscriber, and closes its stream
|
|
250
291
|
* @throws the first error a stream's `close` threw, after every subscriber was attempted
|
|
251
292
|
*/
|
|
252
293
|
close_all() {
|
|
294
|
+
// before any close, so a registration a close listener triggers is born closed too
|
|
295
|
+
this.#closing = true;
|
|
253
296
|
return this.#close_where(() => true);
|
|
254
297
|
}
|
|
255
298
|
#close_where(predicate) {
|
|
@@ -304,6 +347,11 @@ export class SubscriberRegistry {
|
|
|
304
347
|
* Close `scope`'s oldest **admitted** subscribers until one more fits under
|
|
305
348
|
* `max`. Pending registrations are neither counted nor closed — a
|
|
306
349
|
* subscription that may yet be refused must not cost a live one its slot.
|
|
350
|
+
*
|
|
351
|
+
* Every victim is removed, then closed in its own `try`: a stream whose
|
|
352
|
+
* `close` throws is still unregistered, the rest are still closed, and the
|
|
353
|
+
* error is logged — it belongs to another subscriber, so it must not fail
|
|
354
|
+
* the admission that evicted it.
|
|
307
355
|
*/
|
|
308
356
|
#enforce_scope_limit(scope, max) {
|
|
309
357
|
// admitted subscribers with this scope, in registration order (the
|
|
@@ -318,8 +366,14 @@ export class SubscriberRegistry {
|
|
|
318
366
|
const overflow = matching.length - (max - 1);
|
|
319
367
|
for (let i = 0; i < overflow; i++) {
|
|
320
368
|
const [victim, stream] = matching[i];
|
|
321
|
-
stream
|
|
369
|
+
// removed first, so a stream whose close throws is unregistered too
|
|
322
370
|
this.#subscribers.delete(victim);
|
|
371
|
+
try {
|
|
372
|
+
stream.close();
|
|
373
|
+
}
|
|
374
|
+
catch (error) {
|
|
375
|
+
this.#log?.error('error closing a stream evicted by the cap:', error);
|
|
376
|
+
}
|
|
323
377
|
}
|
|
324
378
|
}
|
|
325
379
|
}
|
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))
|
|
@@ -433,7 +433,10 @@ export interface AppServer {
|
|
|
433
433
|
* audit stream — including transports supplied through
|
|
434
434
|
* `WsEndpointSpec.transport` or added by hand, since they are registered
|
|
435
435
|
* on the backend's closer and the backend is going away; a close that
|
|
436
|
-
* throws is logged and the shutdown goes on
|
|
436
|
+
* throws is logged and the shutdown goes on. Each transport and registry
|
|
437
|
+
* is left closing, so an upgrade or stream that registers afterward is
|
|
438
|
+
* born closed — refused at once rather than outliving the server — and
|
|
439
|
+
* a closed transport hosts no other server
|
|
437
440
|
* 3. release what assembly acquired, last acquired first: remove the
|
|
438
441
|
* audit listeners `create_app_server` registered on `deps.audit` (the
|
|
439
442
|
* audit-log SSE listener, the WS auth guards, each
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app_server.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/server/app_server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"app_server.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/server/app_server.ts"],"names":[],"mappings":"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"}
|
package/dist/testing/CLAUDE.md
CHANGED
|
@@ -1202,6 +1202,22 @@ action (manifest-excluded), so parity is behavioral here, not via the manifest
|
|
|
1202
1202
|
gate. Cross-process only; fuz_app's own wiring is
|
|
1203
1203
|
`src/test/cross_backend/peer_ping_ws.cross.test.ts`.
|
|
1204
1204
|
|
|
1205
|
+
### `cross_backend/ws_inbound_dispatch.ts` — `describe_ws_inbound_dispatch_cross_tests`
|
|
1206
|
+
|
|
1207
|
+
Real-upgrade parity for the two refusals a WebSocket request meets ahead of
|
|
1208
|
+
dispatch: a request whose id names a request still running on the socket →
|
|
1209
|
+
`invalid_request` with `data.reason: 'duplicate_request_id'`, not dispatched
|
|
1210
|
+
(the running request answers under its id as usual, and the id frees once it
|
|
1211
|
+
has); and past the per-socket in-flight ceiling (128 on both spines) a new
|
|
1212
|
+
request → `queue_overflow` with its id, not dispatched, the socket left open,
|
|
1213
|
+
the duplicate check first. Requests are held in flight with `peer/ping` — the
|
|
1214
|
+
client's responder withholds the server's ping echo until the test releases
|
|
1215
|
+
it — so the suite gates on `capabilities.peer_request`.
|
|
1216
|
+
`describe_ws_inbound_dispatch_cross_tests({setup_test, capabilities, base_url,
|
|
1217
|
+
ws_path})`. The wire literals are independent copies of the producers'
|
|
1218
|
+
constants, so a value changed on one spine fails here. Cross-process only;
|
|
1219
|
+
fuz_app's own wiring is `src/test/cross_backend/ws_inbound_dispatch.cross.test.ts`.
|
|
1220
|
+
|
|
1205
1221
|
### `cross_backend/ws_connection_cap.ts` — `describe_ws_connection_cap_cross_tests`
|
|
1206
1222
|
|
|
1207
1223
|
Real-upgrade parity for the **per-account WebSocket connection cap** — the
|
|
@@ -1595,7 +1611,7 @@ success-path gate. Gated on `capabilities.ready`. Imperative (not a
|
|
|
1595
1611
|
`conformance_table` row) because `/ready` is a public flat-REST route, not a
|
|
1596
1612
|
JSON-RPC envelope, and the probe needs `fresh_transport({origin: null})` —
|
|
1597
1613
|
the same reasons the sibling `cross_backend/origin.ts` suite is imperative.
|
|
1598
|
-
|
|
1614
|
+
Runs both legs (`cross_backend/ready_parity.db.test.ts` +
|
|
1599
1615
|
`cross_backend/ready.cross.test.ts`).
|
|
1600
1616
|
|
|
1601
1617
|
Both backends read the **same** committed
|
|
@@ -1677,7 +1693,7 @@ USERNAME_LENGTH_MAX]` = `[3, 39]` boundary edges (just-outside → 400,
|
|
|
1677
1693
|
|
|
1678
1694
|
Ungated (login + signup are on every spine). Runs both legs via the shared
|
|
1679
1695
|
`{setup_test}` protocol: in-process (`identity_parity.db.test.ts`, plain
|
|
1680
|
-
`gro test`) and cross-process (`identity_parity.cross.test.ts`).
|
|
1696
|
+
`gro test`) and cross-process (`identity_parity.cross.test.ts`).
|
|
1681
1697
|
The accepted-case 403s rely on `create_spine_route_specs` zeroing
|
|
1682
1698
|
`signup_fail_floor_ms` (mirroring `login_fail_floor_ms: 0`) so they don't each
|
|
1683
1699
|
pay the 250ms denial floor.
|
|
@@ -1822,8 +1838,8 @@ re-roll the serve / daemon-info / WS-attach / drain boilerplate:
|
|
|
1822
1838
|
- `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.
|
|
1823
1839
|
- `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).
|
|
1824
1840
|
- `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.
|
|
1825
|
-
- `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.
|
|
1826
|
-
- `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.
|
|
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. Shared by the spine_stub cross test, the TS cross tests, and the binary.
|
|
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.
|
|
1827
1843
|
- `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()`.
|
|
1828
1844
|
|
|
1829
1845
|
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.
|
|
@@ -1865,8 +1881,7 @@ beyond the `audit_log_list` RPC reads — structurally in-process).
|
|
|
1865
1881
|
above). The TS spine binary serves `GET /api/admin/audit/stream` —
|
|
1866
1882
|
`build_spine_app` passes `audit_log_sse: true` and `create_spine_route_specs`
|
|
1867
1883
|
mounts `create_audit_log_route_specs({stream: ctx.audit_sse})` when
|
|
1868
|
-
`ctx.audit_sse` is set (keeps
|
|
1869
|
-
shared surface snapshot SSE-free, since the surface stub ctx has
|
|
1884
|
+
`ctx.audit_sse` is set (keeps the shared surface snapshot SSE-free, since the surface stub ctx has
|
|
1870
1885
|
`audit_sse: null`). `capabilities.sse` is scoped to the TS spine configs
|
|
1871
1886
|
(`ts_spine_backend_config.ts`), not the shared `ts_default_capabilities`,
|
|
1872
1887
|
which stays honest for consumers who don't wire `audit_log_sse`. The
|
|
@@ -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';
|
|
@@ -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';
|
|
@@ -14,13 +14,6 @@ import '../assert_dev_env.js';
|
|
|
14
14
|
* `create_app_server`), and
|
|
15
15
|
* - the `cross_backend_ts_*` self-test projects.
|
|
16
16
|
*
|
|
17
|
-
* **`$lib`-free by contract.** This module and everything it imports use
|
|
18
|
-
* relative specifiers (no `$lib` SvelteKit alias) so the spawned TS test
|
|
19
|
-
* binary — run under Gro's loader, which resolves `.js`→`.ts` and package
|
|
20
|
-
* imports but **not** the `$lib` alias — can import it transitively. Keep
|
|
21
|
-
* it that way: a `$lib` import anywhere in this graph breaks the binary
|
|
22
|
-
* spawn while still typechecking under vitest.
|
|
23
|
-
*
|
|
24
17
|
* @module
|
|
25
18
|
*/
|
|
26
19
|
import type { Logger } from '@fuzdev/fuz_util/log.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default_spine_surface.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/default_spine_surface.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B
|
|
1
|
+
{"version":3,"file":"default_spine_surface.d.ts","sourceRoot":"../src/lib/","sources":["../../../src/lib/testing/cross_backend/default_spine_surface.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAItD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAEtF,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI1F,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAe3E;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,MAAM,CAAwC,CAAC;AAElG;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,EAAE,gBAGxB,CAAC;AAEH,yCAAyC;AACzC,MAAM,WAAW,wBAAwB;IACxC;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACzD;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,GAC/B,KAAK,gBAAgB,EACrB,UAAU,wBAAwB,KAChC,KAAK,CAAC,eAAe,CAQvB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,GAAI,KAAK,gBAAgB,KAAG,KAAK,CAAC,SAAS,CAgC/E,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,6BAA6B,GAAI,MAAM,MAAM,KAAG,SAC+B,CAAC;AAE7F;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,QAAO,cAS1C,CAAC"}
|
|
@@ -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;
|
|
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;AA8C9B,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"}
|
|
@@ -31,9 +31,6 @@ import '../assert_dev_env.js';
|
|
|
31
31
|
* the TS spine binary and the Rust `testing_spine_stub` both mount the serve
|
|
32
32
|
* routes + the seeder.
|
|
33
33
|
*
|
|
34
|
-
* `$lib`-free by contract (relative specifiers only) so it imports from the
|
|
35
|
-
* spawnable cross-process test files.
|
|
36
|
-
*
|
|
37
34
|
* @module
|
|
38
35
|
*/
|
|
39
36
|
import { describe, assert } from 'vitest';
|