@fuzdev/fuz_app 0.126.0 → 0.128.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 +37 -21
- package/dist/actions/connection_closer.d.ts +16 -4
- package/dist/actions/connection_closer.d.ts.map +1 -1
- package/dist/actions/connection_closer.js +20 -4
- package/dist/actions/register_action_ws.d.ts +10 -2
- package/dist/actions/register_action_ws.d.ts.map +1 -1
- package/dist/actions/register_action_ws.js +6 -3
- package/dist/actions/register_ws_endpoint.d.ts +3 -1
- package/dist/actions/register_ws_endpoint.d.ts.map +1 -1
- package/dist/actions/register_ws_endpoint.js +3 -1
- package/dist/auth/CLAUDE.md +13 -9
- package/dist/auth/audit_emitter.d.ts +59 -12
- package/dist/auth/audit_emitter.d.ts.map +1 -1
- package/dist/auth/audit_emitter.js +53 -15
- package/dist/auth/middleware.d.ts +30 -0
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +59 -0
- package/dist/http/CLAUDE.md +3 -3
- package/dist/http/surface.d.ts +12 -11
- package/dist/http/surface.d.ts.map +1 -1
- package/dist/http/surface.js +1 -15
- package/dist/rate_limiter.d.ts +19 -1
- package/dist/rate_limiter.d.ts.map +1 -1
- package/dist/rate_limiter.js +23 -0
- package/dist/realtime/sse_auth_guard.d.ts +3 -1
- package/dist/realtime/sse_auth_guard.d.ts.map +1 -1
- package/dist/server/app_server.d.ts +41 -13
- package/dist/server/app_server.d.ts.map +1 -1
- package/dist/server/app_server.js +105 -50
- package/dist/testing/CLAUDE.md +51 -38
- package/dist/testing/app_server.d.ts +1 -1
- package/dist/testing/app_server.d.ts.map +1 -1
- package/dist/testing/app_server.js +15 -14
- package/dist/testing/attack_surface.d.ts +1 -1
- package/dist/testing/attack_surface.d.ts.map +1 -1
- package/dist/testing/audit_drift_guard.d.ts +4 -2
- package/dist/testing/audit_drift_guard.d.ts.map +1 -1
- package/dist/testing/audit_drift_guard.js +14 -4
- package/dist/testing/cross_backend/account_lifecycle.d.ts.map +1 -1
- package/dist/testing/cross_backend/account_lifecycle.js +1 -2
- package/dist/testing/cross_backend/capabilities.d.ts +3 -1
- package/dist/testing/cross_backend/capabilities.d.ts.map +1 -1
- package/dist/testing/cross_backend/default_backend_configs.d.ts +3 -34
- package/dist/testing/cross_backend/default_backend_configs.d.ts.map +1 -1
- package/dist/testing/cross_backend/default_backend_configs.js +1 -31
- package/dist/testing/cross_backend/rust_spine_stub_backend_config.d.ts +1 -1
- package/dist/testing/cross_backend/rust_spine_stub_backend_config.d.ts.map +1 -1
- package/dist/testing/cross_backend/rust_spine_stub_backend_config.js +3 -3
- package/dist/testing/cross_backend/spine_surface_constants.d.ts +43 -3
- package/dist/testing/cross_backend/spine_surface_constants.d.ts.map +1 -1
- package/dist/testing/cross_backend/spine_surface_constants.js +43 -3
- package/dist/testing/cross_backend/testing_backdoor.d.ts +15 -1
- package/dist/testing/cross_backend/testing_backdoor.d.ts.map +1 -1
- package/dist/testing/cross_backend/testing_backdoor.js +49 -5
- package/dist/testing/cross_backend/testing_reset_actions.d.ts +27 -18
- package/dist/testing/cross_backend/testing_reset_actions.d.ts.map +1 -1
- package/dist/testing/cross_backend/testing_reset_actions.js +30 -19
- package/dist/testing/cross_backend/testing_server_core.d.ts +11 -11
- package/dist/testing/cross_backend/testing_server_core.d.ts.map +1 -1
- package/dist/testing/cross_backend/testing_server_core.js +2 -2
- package/dist/testing/cross_backend/ts_spine_backend_config.d.ts +0 -2
- package/dist/testing/cross_backend/ts_spine_backend_config.d.ts.map +1 -1
- package/dist/testing/cross_backend/ts_spine_backend_config.js +2 -4
- package/dist/testing/cross_backend/ws_action_rate_limit.d.ts +1 -1
- package/dist/testing/cross_backend/ws_action_rate_limit.d.ts.map +1 -1
- package/dist/testing/cross_backend/ws_round_trip.d.ts +2 -1
- package/dist/testing/cross_backend/ws_round_trip.d.ts.map +1 -1
- package/dist/testing/cross_backend/ws_round_trip.js +40 -4
- package/dist/testing/middleware.d.ts.map +1 -1
- package/dist/testing/middleware.js +4 -3
- package/dist/testing/stubs.d.ts +26 -6
- package/dist/testing/stubs.d.ts.map +1 -1
- package/dist/testing/stubs.js +56 -16
- package/dist/testing/ws_round_trip.d.ts +7 -31
- package/dist/testing/ws_round_trip.d.ts.map +1 -1
- package/dist/testing/ws_round_trip.js +0 -38
- package/package.json +1 -1
|
@@ -9,25 +9,24 @@ import './assert_dev_env.js';
|
|
|
9
9
|
* token id), and exposes a `connect()` factory returning a `WsClient`
|
|
10
10
|
* per connection.
|
|
11
11
|
*
|
|
12
|
-
*
|
|
12
|
+
* Two layers are exported:
|
|
13
13
|
*
|
|
14
14
|
* - **Primitives** (`create_fake_ws`, `create_fake_hono_context`,
|
|
15
15
|
* `create_stub_upgrade`, `MinimalActionEnvironment`,
|
|
16
16
|
* `dispatch_ws_message`) — used by fuz_app's own dispatcher tests
|
|
17
17
|
* and by consumers wiring tight one-off tests.
|
|
18
|
-
* - **Harness** (`create_ws_test_harness
|
|
19
|
-
*
|
|
18
|
+
* - **Harness** (`create_ws_test_harness`) — the high-level driver.
|
|
19
|
+
* Give it specs + handlers, get back
|
|
20
20
|
* `{transport, connect()}`. `connect()` is async and resolves after
|
|
21
21
|
* `on_socket_open` completes, so broadcasts sent immediately after
|
|
22
22
|
* `await harness.connect()` reach the client. Returns a `WsClient`
|
|
23
23
|
* (shared interface — see `transports/ws_client.ts`); the same
|
|
24
24
|
* interface is implemented by `transports/ws_transport.ts` for
|
|
25
25
|
* cross-process tests.
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* so both in-process and cross-process drivers reference one source.
|
|
26
|
+
*
|
|
27
|
+
* Wire-frame types + predicates (`is_notification`, `is_response_for`,
|
|
28
|
+
* `JsonrpcNotificationFrame`, ...) live in `transports/ws_client.ts` so
|
|
29
|
+
* both in-process and cross-process drivers reference one source.
|
|
31
30
|
*
|
|
32
31
|
* Hono's wire upgrade is skipped — there is no server, so no runtime
|
|
33
32
|
* adapter — but the full dispatch path is exercised
|
|
@@ -223,27 +222,4 @@ export interface WsTestHarness {
|
|
|
223
222
|
* `onOpen`/`onMessage`/`onClose` path against a real `WSContext`.
|
|
224
223
|
*/
|
|
225
224
|
export declare const create_ws_test_harness: (options: CreateWsTestHarnessOptions) => WsTestHarness;
|
|
226
|
-
/** Convenience: default identity for keeper-authenticated connections. */
|
|
227
|
-
export declare const keeper_identity: () => WsConnectIdentity;
|
|
228
|
-
/**
|
|
229
|
-
* Wire a typed broadcast API against the harness's transport, matching
|
|
230
|
-
* how a consumer's real backend composes the stack. Returns the typed
|
|
231
|
-
* API so tests can call `.zap_run_created(...)` / `.workspace_changed(...)`
|
|
232
|
-
* etc. directly.
|
|
233
|
-
*
|
|
234
|
-
* ```ts
|
|
235
|
-
* const harness = create_ws_test_harness({actions});
|
|
236
|
-
* const broadcast = build_broadcast_api<MyBackendActionsApi>({
|
|
237
|
-
* harness,
|
|
238
|
-
* specs: my_broadcast_action_specs,
|
|
239
|
-
* });
|
|
240
|
-
* const client = await harness.connect(keeper_identity());
|
|
241
|
-
* await broadcast.zap_run_created({run_id: '...', ...});
|
|
242
|
-
* await client.wait_for(is_notification('zap_run_created'));
|
|
243
|
-
* ```
|
|
244
|
-
*/
|
|
245
|
-
export declare const build_broadcast_api: <TApi extends object>(options: {
|
|
246
|
-
harness: WsTestHarness;
|
|
247
|
-
specs: ReadonlyArray<ActionSpecUnion>;
|
|
248
|
-
}) => TApi;
|
|
249
225
|
//# sourceMappingURL=ws_round_trip.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws_round_trip.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/ws_round_trip.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAE7B
|
|
1
|
+
{"version":3,"file":"ws_round_trip.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/ws_round_trip.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,14 +2,11 @@ import './assert_dev_env.js';
|
|
|
2
2
|
import { WSContext, createWSMessageEvent } from 'hono/ws';
|
|
3
3
|
import { Logger } from '@fuzdev/fuz_util/log.ts';
|
|
4
4
|
import { create_uuid } from '@fuzdev/fuz_util/id.ts';
|
|
5
|
-
import { ActionDispatcher } from '../actions/action_dispatcher.js';
|
|
6
|
-
import { create_broadcast_api } from '../actions/broadcast_api.js';
|
|
7
5
|
import { register_action_ws } from '../actions/register_action_ws.js';
|
|
8
6
|
import { create_stub_db } from './stubs.js';
|
|
9
7
|
import { BackendWebsocketTransport } from '../actions/transports_ws_backend.js';
|
|
10
8
|
import { AUTH_SESSION_TOKEN_HASH_KEY, REQUEST_CONTEXT_KEY } from '../auth/request_context.js';
|
|
11
9
|
import { hash_session_token } from '../auth/session_queries.js';
|
|
12
|
-
import { ROLE_KEEPER } from '../auth/role_schema.js';
|
|
13
10
|
import { ACCOUNT_ID_KEY, AUTH_API_TOKEN_ID_KEY, CREDENTIAL_TYPE_KEY, TEST_CONTEXT_PRESET_KEY } from '../hono_context.js';
|
|
14
11
|
import { create_jsonrpc_request } from '../http/jsonrpc_helpers.js';
|
|
15
12
|
import { create_test_account, create_test_actor, create_test_role_grant } from './entities.js';
|
|
@@ -388,38 +385,3 @@ export const create_ws_test_harness = (options) => {
|
|
|
388
385
|
};
|
|
389
386
|
return { transport, connect };
|
|
390
387
|
};
|
|
391
|
-
/** Convenience: default identity for keeper-authenticated connections. */
|
|
392
|
-
export const keeper_identity = () => ({
|
|
393
|
-
credential_type: 'daemon_token',
|
|
394
|
-
roles: [ROLE_KEEPER]
|
|
395
|
-
});
|
|
396
|
-
// ---------------------------------------------------------------------
|
|
397
|
-
// Broadcast wiring — for tests that assert on server-initiated
|
|
398
|
-
// notification fan-out. `build_broadcast_api` mirrors how consumer
|
|
399
|
-
// `backend_actions_api.ts` composes the real stack (peer + transport
|
|
400
|
-
// registered + `create_broadcast_api`); the helper exists so each test
|
|
401
|
-
// doesn't re-spell that boilerplate.
|
|
402
|
-
// ---------------------------------------------------------------------
|
|
403
|
-
const make_peer = () => new ActionDispatcher({ environment: new MinimalActionEnvironment([]) });
|
|
404
|
-
/**
|
|
405
|
-
* Wire a typed broadcast API against the harness's transport, matching
|
|
406
|
-
* how a consumer's real backend composes the stack. Returns the typed
|
|
407
|
-
* API so tests can call `.zap_run_created(...)` / `.workspace_changed(...)`
|
|
408
|
-
* etc. directly.
|
|
409
|
-
*
|
|
410
|
-
* ```ts
|
|
411
|
-
* const harness = create_ws_test_harness({actions});
|
|
412
|
-
* const broadcast = build_broadcast_api<MyBackendActionsApi>({
|
|
413
|
-
* harness,
|
|
414
|
-
* specs: my_broadcast_action_specs,
|
|
415
|
-
* });
|
|
416
|
-
* const client = await harness.connect(keeper_identity());
|
|
417
|
-
* await broadcast.zap_run_created({run_id: '...', ...});
|
|
418
|
-
* await client.wait_for(is_notification('zap_run_created'));
|
|
419
|
-
* ```
|
|
420
|
-
*/
|
|
421
|
-
export const build_broadcast_api = (options) => {
|
|
422
|
-
const peer = make_peer();
|
|
423
|
-
peer.transports.register_transport(options.harness.transport);
|
|
424
|
-
return create_broadcast_api({ peer, specs: options.specs });
|
|
425
|
-
};
|