@fuzdev/fuz_app 0.52.0 → 0.53.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 +29 -9
- package/dist/actions/action_codegen.d.ts +10 -35
- package/dist/actions/action_codegen.d.ts.map +1 -1
- package/dist/actions/action_codegen.js +13 -42
- package/dist/actions/action_peer.d.ts.map +1 -1
- package/dist/actions/action_peer.js +0 -9
- package/dist/actions/action_registry.d.ts +0 -4
- package/dist/actions/action_registry.d.ts.map +1 -1
- package/dist/actions/action_registry.js +4 -10
- package/dist/actions/action_rpc.d.ts +16 -0
- package/dist/actions/action_rpc.d.ts.map +1 -1
- package/dist/actions/action_rpc.js +41 -20
- package/dist/actions/action_spec.d.ts +54 -5
- package/dist/actions/action_spec.d.ts.map +1 -1
- package/dist/actions/action_spec.js +21 -5
- package/dist/actions/frontend_rpc_client.d.ts +1 -9
- package/dist/actions/frontend_rpc_client.d.ts.map +1 -1
- package/dist/actions/frontend_rpc_client.js +1 -9
- package/dist/actions/register_action_ws.d.ts +16 -0
- package/dist/actions/register_action_ws.d.ts.map +1 -1
- package/dist/actions/register_action_ws.js +41 -1
- package/dist/actions/request_tracker.svelte.d.ts +10 -15
- package/dist/actions/request_tracker.svelte.d.ts.map +1 -1
- package/dist/actions/request_tracker.svelte.js +10 -15
- package/dist/actions/rpc_client.d.ts +0 -1
- package/dist/actions/rpc_client.d.ts.map +1 -1
- package/dist/actions/rpc_client.js +3 -17
- package/dist/actions/socket.svelte.d.ts +0 -1
- package/dist/actions/socket.svelte.d.ts.map +1 -1
- package/dist/actions/socket.svelte.js +0 -1
- package/dist/actions/transports.d.ts +4 -3
- package/dist/actions/transports.d.ts.map +1 -1
- package/dist/actions/transports.js +4 -13
- package/dist/actions/transports_ws_auth_guard.d.ts +0 -2
- package/dist/actions/transports_ws_auth_guard.d.ts.map +1 -1
- package/dist/actions/transports_ws_auth_guard.js +0 -2
- package/dist/actions/transports_ws_backend.d.ts.map +1 -1
- package/dist/actions/transports_ws_backend.js +0 -9
- package/dist/auth/CLAUDE.md +24 -14
- package/dist/auth/account_queries.d.ts +0 -3
- package/dist/auth/account_queries.d.ts.map +1 -1
- package/dist/auth/account_queries.js +0 -3
- package/dist/auth/admin_action_specs.d.ts +5 -0
- package/dist/auth/admin_action_specs.d.ts.map +1 -1
- package/dist/auth/admin_action_specs.js +5 -0
- package/dist/auth/api_token_queries.d.ts +0 -1
- package/dist/auth/api_token_queries.d.ts.map +1 -1
- package/dist/auth/api_token_queries.js +0 -1
- package/dist/auth/audit_log_queries.d.ts +0 -1
- package/dist/auth/audit_log_queries.d.ts.map +1 -1
- package/dist/auth/audit_log_queries.js +0 -1
- package/dist/auth/audit_log_routes.d.ts +2 -2
- package/dist/auth/audit_log_routes.js +2 -2
- package/dist/auth/invite_queries.d.ts +0 -1
- package/dist/auth/invite_queries.d.ts.map +1 -1
- package/dist/auth/invite_queries.js +0 -1
- package/dist/auth/permit_offer_action_specs.d.ts +1 -0
- package/dist/auth/permit_offer_action_specs.d.ts.map +1 -1
- package/dist/auth/permit_offer_action_specs.js +1 -0
- package/dist/auth/permit_offer_queries.d.ts +0 -1
- package/dist/auth/permit_offer_queries.d.ts.map +1 -1
- package/dist/auth/permit_offer_queries.js +0 -1
- package/dist/auth/permit_queries.d.ts +0 -1
- package/dist/auth/permit_queries.d.ts.map +1 -1
- package/dist/auth/permit_queries.js +0 -1
- package/dist/auth/session_lifecycle.d.ts +0 -1
- package/dist/auth/session_lifecycle.d.ts.map +1 -1
- package/dist/auth/session_lifecycle.js +0 -1
- package/dist/auth/session_middleware.d.ts +0 -4
- package/dist/auth/session_middleware.d.ts.map +1 -1
- package/dist/auth/session_middleware.js +0 -4
- package/dist/cli/config.d.ts +0 -3
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +0 -3
- package/dist/cli/daemon.d.ts +1 -1
- package/dist/cli/daemon.js +1 -1
- package/dist/db/create_db.d.ts +0 -1
- package/dist/db/create_db.d.ts.map +1 -1
- package/dist/db/create_db.js +0 -1
- package/dist/db/db.d.ts +0 -4
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js +0 -4
- package/dist/db/db_pg.d.ts +2 -2
- package/dist/db/db_pg.js +2 -2
- package/dist/db/db_pglite.d.ts +1 -2
- package/dist/db/db_pglite.d.ts.map +1 -1
- package/dist/db/db_pglite.js +1 -2
- package/dist/db/migrate.d.ts +0 -1
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +0 -1
- package/dist/dev/setup.d.ts +0 -3
- package/dist/dev/setup.d.ts.map +1 -1
- package/dist/dev/setup.js +0 -3
- package/dist/env/load.d.ts +0 -2
- package/dist/env/load.d.ts.map +1 -1
- package/dist/env/load.js +0 -2
- package/dist/hono_context.d.ts +2 -5
- package/dist/hono_context.d.ts.map +1 -1
- package/dist/hono_context.js +2 -5
- package/dist/http/common_routes.d.ts +0 -8
- package/dist/http/common_routes.d.ts.map +1 -1
- package/dist/http/common_routes.js +0 -8
- package/dist/http/db_routes.d.ts +0 -3
- package/dist/http/db_routes.d.ts.map +1 -1
- package/dist/http/db_routes.js +0 -3
- package/dist/http/error_schemas.d.ts +12 -11
- package/dist/http/error_schemas.d.ts.map +1 -1
- package/dist/http/error_schemas.js +11 -7
- package/dist/http/jsonrpc_errors.d.ts +0 -6
- package/dist/http/jsonrpc_errors.d.ts.map +1 -1
- package/dist/http/jsonrpc_errors.js +0 -6
- package/dist/http/origin.d.ts +6 -13
- package/dist/http/origin.d.ts.map +1 -1
- package/dist/http/origin.js +7 -14
- package/dist/http/proxy.d.ts +1 -7
- package/dist/http/proxy.d.ts.map +1 -1
- package/dist/http/proxy.js +1 -7
- package/dist/http/route_spec.d.ts +13 -35
- package/dist/http/route_spec.d.ts.map +1 -1
- package/dist/http/route_spec.js +10 -22
- package/dist/http/schema_helpers.d.ts +0 -4
- package/dist/http/schema_helpers.d.ts.map +1 -1
- package/dist/http/schema_helpers.js +0 -4
- package/dist/http/surface.d.ts +2 -12
- package/dist/http/surface.d.ts.map +1 -1
- package/dist/http/surface.js +1 -12
- package/dist/rate_limiter.d.ts +16 -0
- package/dist/rate_limiter.d.ts.map +1 -1
- package/dist/rate_limiter.js +26 -0
- package/dist/realtime/sse.d.ts +0 -1
- package/dist/realtime/sse.d.ts.map +1 -1
- package/dist/realtime/sse.js +0 -1
- package/dist/realtime/subscriber_registry.d.ts +0 -3
- package/dist/realtime/subscriber_registry.d.ts.map +1 -1
- package/dist/realtime/subscriber_registry.js +0 -3
- package/dist/runtime/fs.d.ts +1 -4
- package/dist/runtime/fs.d.ts.map +1 -1
- package/dist/runtime/fs.js +1 -4
- package/dist/runtime/mock.d.ts +0 -3
- package/dist/runtime/mock.d.ts.map +1 -1
- package/dist/runtime/mock.js +0 -3
- package/dist/server/app_server.d.ts +27 -5
- package/dist/server/app_server.d.ts.map +1 -1
- package/dist/server/app_server.js +19 -7
- package/dist/server/startup.d.ts +0 -2
- package/dist/server/startup.d.ts.map +1 -1
- package/dist/server/startup.js +0 -2
- package/dist/server/static.d.ts +0 -1
- package/dist/server/static.d.ts.map +1 -1
- package/dist/server/static.js +0 -1
- package/dist/server/validate_nginx.d.ts +0 -3
- package/dist/server/validate_nginx.d.ts.map +1 -1
- package/dist/server/validate_nginx.js +0 -3
- package/dist/testing/CLAUDE.md +1 -1
- package/dist/testing/admin_integration.d.ts +0 -1
- package/dist/testing/admin_integration.d.ts.map +1 -1
- package/dist/testing/admin_integration.js +3 -6
- package/dist/testing/adversarial_404.d.ts +0 -2
- package/dist/testing/adversarial_404.d.ts.map +1 -1
- package/dist/testing/adversarial_404.js +0 -2
- package/dist/testing/adversarial_headers.d.ts +0 -1
- package/dist/testing/adversarial_headers.d.ts.map +1 -1
- package/dist/testing/adversarial_headers.js +0 -1
- package/dist/testing/adversarial_input.d.ts +0 -2
- package/dist/testing/adversarial_input.d.ts.map +1 -1
- package/dist/testing/adversarial_input.js +0 -2
- package/dist/testing/app_server.d.ts +22 -0
- package/dist/testing/app_server.d.ts.map +1 -1
- package/dist/testing/app_server.js +2 -4
- package/dist/testing/assertions.d.ts +0 -4
- package/dist/testing/assertions.d.ts.map +1 -1
- package/dist/testing/assertions.js +0 -4
- package/dist/testing/attack_surface.d.ts +0 -4
- package/dist/testing/attack_surface.d.ts.map +1 -1
- package/dist/testing/attack_surface.js +0 -4
- package/dist/testing/audit_completeness.d.ts +0 -1
- package/dist/testing/audit_completeness.d.ts.map +1 -1
- package/dist/testing/audit_completeness.js +0 -1
- package/dist/testing/auth_apps.d.ts +2 -10
- package/dist/testing/auth_apps.d.ts.map +1 -1
- package/dist/testing/auth_apps.js +2 -10
- package/dist/testing/data_exposure.d.ts +0 -11
- package/dist/testing/data_exposure.d.ts.map +1 -1
- package/dist/testing/data_exposure.js +0 -11
- package/dist/testing/db.d.ts +0 -6
- package/dist/testing/db.d.ts.map +1 -1
- package/dist/testing/db.js +0 -6
- package/dist/testing/error_coverage.d.ts +0 -14
- package/dist/testing/error_coverage.d.ts.map +1 -1
- package/dist/testing/error_coverage.js +0 -14
- package/dist/testing/integration.d.ts +0 -1
- package/dist/testing/integration.d.ts.map +1 -1
- package/dist/testing/integration.js +0 -1
- package/dist/testing/integration_helpers.d.ts +1 -36
- package/dist/testing/integration_helpers.d.ts.map +1 -1
- package/dist/testing/integration_helpers.js +1 -43
- package/dist/testing/middleware.d.ts +0 -10
- package/dist/testing/middleware.d.ts.map +1 -1
- package/dist/testing/middleware.js +0 -10
- package/dist/testing/mock_fs.d.ts +0 -2
- package/dist/testing/mock_fs.d.ts.map +1 -1
- package/dist/testing/mock_fs.js +0 -2
- package/dist/testing/rate_limiting.d.ts +0 -1
- package/dist/testing/rate_limiting.d.ts.map +1 -1
- package/dist/testing/rate_limiting.js +0 -1
- package/dist/testing/round_trip.d.ts +0 -2
- package/dist/testing/round_trip.d.ts.map +1 -1
- package/dist/testing/round_trip.js +0 -2
- package/dist/testing/rpc_attack_surface.d.ts +0 -2
- package/dist/testing/rpc_attack_surface.d.ts.map +1 -1
- package/dist/testing/rpc_attack_surface.js +0 -2
- package/dist/testing/rpc_helpers.d.ts +0 -6
- package/dist/testing/rpc_helpers.d.ts.map +1 -1
- package/dist/testing/rpc_helpers.js +0 -6
- package/dist/testing/rpc_round_trip.d.ts +0 -2
- package/dist/testing/rpc_round_trip.d.ts.map +1 -1
- package/dist/testing/rpc_round_trip.js +0 -2
- package/dist/testing/schema_generators.d.ts +0 -3
- package/dist/testing/schema_generators.d.ts.map +1 -1
- package/dist/testing/schema_generators.js +17 -3
- package/dist/testing/sse_round_trip.d.ts +0 -1
- package/dist/testing/sse_round_trip.d.ts.map +1 -1
- package/dist/testing/sse_round_trip.js +0 -1
- package/dist/testing/standard.d.ts +0 -2
- package/dist/testing/standard.d.ts.map +1 -1
- package/dist/testing/standard.js +0 -2
- package/dist/testing/stubs.d.ts +3 -5
- package/dist/testing/stubs.d.ts.map +1 -1
- package/dist/testing/stubs.js +5 -5
- package/dist/testing/surface_invariants.d.ts +0 -3
- package/dist/testing/surface_invariants.d.ts.map +1 -1
- package/dist/testing/surface_invariants.js +0 -3
- package/dist/ui/CLAUDE.md +1 -1
- package/dist/ui/audit_log_state.svelte.js +1 -1
- package/dist/ui/position_helpers.d.ts +0 -3
- package/dist/ui/position_helpers.d.ts.map +1 -1
- package/dist/ui/position_helpers.js +0 -3
- package/dist/ui/sidebar_state.svelte.d.ts +1 -2
- package/dist/ui/sidebar_state.svelte.d.ts.map +1 -1
- package/dist/ui/sidebar_state.svelte.js +1 -2
- package/dist/ui/ui_fetch.d.ts +1 -7
- package/dist/ui/ui_fetch.d.ts.map +1 -1
- package/dist/ui/ui_fetch.js +1 -7
- package/dist/ui/ui_format.d.ts +2 -14
- package/dist/ui/ui_format.d.ts.map +1 -1
- package/dist/ui/ui_format.js +2 -14
- package/package.json +2 -2
|
@@ -16,8 +16,6 @@ export interface AdversarialTestOptions {
|
|
|
16
16
|
* - wrong role → 403 — every role route, tested with all non-matching roles
|
|
17
17
|
* - authenticated without role → 403 — every role route, no-role context
|
|
18
18
|
* - correct auth passes guard — every protected route, assert not 401/403
|
|
19
|
-
*
|
|
20
|
-
* @param options - the test configuration
|
|
21
19
|
*/
|
|
22
20
|
export declare const describe_adversarial_auth: (options: AdversarialTestOptions) => void;
|
|
23
21
|
/**
|
|
@@ -83,8 +81,6 @@ export interface StandardAttackSurfaceOptions {
|
|
|
83
81
|
*
|
|
84
82
|
* Consumer test files call this with project-specific options, then add
|
|
85
83
|
* any project-specific assertions in additional `describe` blocks.
|
|
86
|
-
*
|
|
87
|
-
* @param options - the test configuration
|
|
88
84
|
*/
|
|
89
85
|
export declare const describe_standard_attack_surface_tests: (options: StandardAttackSurfaceOptions) => void;
|
|
90
86
|
//# sourceMappingURL=attack_surface.d.ts.map
|
|
@@ -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,EAON,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,MAAM,yBAAyB,CAAC;AAoBjC,OAAO,EAA4B,KAAK,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAsClF,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;CACrB;AAED
|
|
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,EAON,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,MAAM,yBAAyB,CAAC;AAoBjC,OAAO,EAA4B,KAAK,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAsClF,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;CACrB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,GAAI,SAAS,sBAAsB,KAAG,IAkH3E,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,gHAAgH;IAChH,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;CAC5D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,sCAAsC,GAClD,SAAS,4BAA4B,KACnC,IAuEF,CAAC"}
|
|
@@ -53,8 +53,6 @@ const build_error_schema_lookup = (route_specs, middleware_specs) => {
|
|
|
53
53
|
* - wrong role → 403 — every role route, tested with all non-matching roles
|
|
54
54
|
* - authenticated without role → 403 — every role route, no-role context
|
|
55
55
|
* - correct auth passes guard — every protected route, assert not 401/403
|
|
56
|
-
*
|
|
57
|
-
* @param options - the test configuration
|
|
58
56
|
*/
|
|
59
57
|
export const describe_adversarial_auth = (options) => {
|
|
60
58
|
const { build, roles } = options;
|
|
@@ -203,8 +201,6 @@ export const resolve_standard_error_schema_tightness = (consumer) => {
|
|
|
203
201
|
*
|
|
204
202
|
* Consumer test files call this with project-specific options, then add
|
|
205
203
|
* any project-specific assertions in additional `describe` blocks.
|
|
206
|
-
*
|
|
207
|
-
* @param options - the test configuration
|
|
208
204
|
*/
|
|
209
205
|
export const describe_standard_attack_surface_tests = (options) => {
|
|
210
206
|
const { build, snapshot_path, expected_public_routes, expected_api_middleware, roles, api_path_prefix = '/api/', security_policy, } = options;
|
|
@@ -38,7 +38,6 @@ export interface AuditCompletenessTestOptions {
|
|
|
38
38
|
* event type. Exercises routes via HTTP requests against a real PGlite
|
|
39
39
|
* database, then queries the `audit_log` table to verify events.
|
|
40
40
|
*
|
|
41
|
-
* @param options - session config, route factory, and optional overrides
|
|
42
41
|
* @throws Error at setup time when `options.rpc_endpoints` is empty — the
|
|
43
42
|
* mutation-audit tests drive permit flow, session/token revoke-all, and
|
|
44
43
|
* invite create/delete through their RPC action specs. Hard-fails via
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit_completeness.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/audit_completeness.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAkB7B,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAIrD,OAAO,EAGN,KAAK,eAAe,EAEpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIN,KAAK,SAAS,EACd,MAAM,SAAS,CAAC;AAKjB,OAAO,EAIN,KAAK,uBAAuB,EAC5B,MAAM,kBAAkB,CAAC;AAsB1B;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC5C,4CAA4C;IAC5C,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,wDAAwD;IACxD,kBAAkB,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAChE;;;;;;;;;;;OAWG;IACH,aAAa,EAAE,uBAAuB,CAAC;IACvC,iDAAiD;IACjD,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,qEAAqE;IACrE,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CAChC;AAoDD
|
|
1
|
+
{"version":3,"file":"audit_completeness.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/audit_completeness.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAkB7B,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAIrD,OAAO,EAGN,KAAK,eAAe,EAEpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIN,KAAK,SAAS,EACd,MAAM,SAAS,CAAC;AAKjB,OAAO,EAIN,KAAK,uBAAuB,EAC5B,MAAM,kBAAkB,CAAC;AAsB1B;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC5C,4CAA4C;IAC5C,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,wDAAwD;IACxD,kBAAkB,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAChE;;;;;;;;;;;OAWG;IACH,aAAa,EAAE,uBAAuB,CAAC;IACvC,iDAAiD;IACjD,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,qEAAqE;IACrE,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CAChC;AAoDD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iCAAiC,GAAI,SAAS,4BAA4B,KAAG,IAyezF,CAAC"}
|
|
@@ -63,7 +63,6 @@ const json_session_headers = (test_app, extra) => test_app.create_session_header
|
|
|
63
63
|
* event type. Exercises routes via HTTP requests against a real PGlite
|
|
64
64
|
* database, then queries the `audit_log` table to verify events.
|
|
65
65
|
*
|
|
66
|
-
* @param options - session config, route factory, and optional overrides
|
|
67
66
|
* @throws Error at setup time when `options.rpc_endpoints` is empty — the
|
|
68
67
|
* mutation-audit tests drive permit flow, session/token revoke-all, and
|
|
69
68
|
* invite create/delete through their RPC action specs. Hard-fails via
|
|
@@ -12,10 +12,7 @@ import { type RouteSpec, type RouteAuth } from '../http/route_spec.js';
|
|
|
12
12
|
import { type RequestContext } from '../auth/request_context.js';
|
|
13
13
|
import { type CredentialType } from '../hono_context.js';
|
|
14
14
|
/**
|
|
15
|
-
* Create a mock
|
|
16
|
-
*
|
|
17
|
-
* @param role - optional role to grant
|
|
18
|
-
* @returns a valid `RequestContext`
|
|
15
|
+
* Create a mock `RequestContext` with optional role permit.
|
|
19
16
|
*/
|
|
20
17
|
export declare const create_test_request_context: (role?: string) => RequestContext;
|
|
21
18
|
/**
|
|
@@ -23,8 +20,7 @@ export declare const create_test_request_context: (role?: string) => RequestCont
|
|
|
23
20
|
*
|
|
24
21
|
* @param route_specs - the route specs to register
|
|
25
22
|
* @param auth_ctx - optional request context to inject via middleware
|
|
26
|
-
* @param credential_type - optional credential type (default: `'session'` when auth_ctx provided)
|
|
27
|
-
* @returns a configured Hono app
|
|
23
|
+
* @param credential_type - optional credential type (default: `'session'` when `auth_ctx` provided)
|
|
28
24
|
*/
|
|
29
25
|
export declare const create_test_app_from_specs: (route_specs: Array<RouteSpec>, auth_ctx?: RequestContext, credential_type?: CredentialType) => Hono;
|
|
30
26
|
/** Pre-built Hono apps for each auth level, shared across adversarial test suites. */
|
|
@@ -39,15 +35,11 @@ export interface AuthTestApps {
|
|
|
39
35
|
*
|
|
40
36
|
* @param route_specs - the route specs to register
|
|
41
37
|
* @param roles - all roles in the app
|
|
42
|
-
* @returns apps keyed by auth level
|
|
43
38
|
*/
|
|
44
39
|
export declare const create_auth_test_apps: (route_specs: Array<RouteSpec>, roles: Array<string>) => AuthTestApps;
|
|
45
40
|
/**
|
|
46
41
|
* Select the Hono test app with correct auth for a route.
|
|
47
42
|
*
|
|
48
|
-
* @param apps - the pre-built auth test apps
|
|
49
|
-
* @param auth - the route's auth options
|
|
50
|
-
* @returns the correctly-authenticated Hono app
|
|
51
43
|
* @throws Error if `auth.type === 'role'` and `auth.role` is not present in
|
|
52
44
|
* `apps.by_role` — surfaces a missing entry in the `roles` array passed to
|
|
53
45
|
* `create_auth_test_apps`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth_apps.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/auth_apps.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAE7B;;;;;;;GAOG;AAEH,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAG1B,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAExF,OAAO,EAAsB,KAAK,cAAc,EAAC,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAsB,KAAK,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAI5E
|
|
1
|
+
{"version":3,"file":"auth_apps.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/auth_apps.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAE7B;;;;;;;GAOG;AAEH,OAAO,EAAC,IAAI,EAAC,MAAM,MAAM,CAAC;AAG1B,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAExF,OAAO,EAAsB,KAAK,cAAc,EAAC,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAsB,KAAK,cAAc,EAAC,MAAM,oBAAoB,CAAC;AAI5E;;GAEG;AACH,eAAO,MAAM,2BAA2B,GAAI,OAAO,MAAM,KAAG,cAI1D,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,GACtC,aAAa,KAAK,CAAC,SAAS,CAAC,EAC7B,WAAW,cAAc,EACzB,kBAAkB,cAAc,KAC9B,IAkBF,CAAC;AAEF,sFAAsF;AACtF,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC3B;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GACjC,aAAa,KAAK,CAAC,SAAS,CAAC,EAC7B,OAAO,KAAK,CAAC,MAAM,CAAC,KAClB,YAeF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,YAAY,EAAE,MAAM,SAAS,KAAG,IAcrE,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,MAA4C,CAAC"}
|
|
@@ -16,10 +16,7 @@ import { CREDENTIAL_TYPE_KEY } from '../hono_context.js';
|
|
|
16
16
|
import { create_stub_db } from './stubs.js';
|
|
17
17
|
import { create_test_account, create_test_actor, create_test_permit } from './entities.js';
|
|
18
18
|
/**
|
|
19
|
-
* Create a mock
|
|
20
|
-
*
|
|
21
|
-
* @param role - optional role to grant
|
|
22
|
-
* @returns a valid `RequestContext`
|
|
19
|
+
* Create a mock `RequestContext` with optional role permit.
|
|
23
20
|
*/
|
|
24
21
|
export const create_test_request_context = (role) => ({
|
|
25
22
|
account: create_test_account({ id: 'acc_1', username: 'testuser' }),
|
|
@@ -31,8 +28,7 @@ export const create_test_request_context = (role) => ({
|
|
|
31
28
|
*
|
|
32
29
|
* @param route_specs - the route specs to register
|
|
33
30
|
* @param auth_ctx - optional request context to inject via middleware
|
|
34
|
-
* @param credential_type - optional credential type (default: `'session'` when auth_ctx provided)
|
|
35
|
-
* @returns a configured Hono app
|
|
31
|
+
* @param credential_type - optional credential type (default: `'session'` when `auth_ctx` provided)
|
|
36
32
|
*/
|
|
37
33
|
export const create_test_app_from_specs = (route_specs, auth_ctx, credential_type) => {
|
|
38
34
|
const app = new Hono();
|
|
@@ -52,7 +48,6 @@ export const create_test_app_from_specs = (route_specs, auth_ctx, credential_typ
|
|
|
52
48
|
*
|
|
53
49
|
* @param route_specs - the route specs to register
|
|
54
50
|
* @param roles - all roles in the app
|
|
55
|
-
* @returns apps keyed by auth level
|
|
56
51
|
*/
|
|
57
52
|
export const create_auth_test_apps = (route_specs, roles) => {
|
|
58
53
|
const by_role = new Map();
|
|
@@ -69,9 +64,6 @@ export const create_auth_test_apps = (route_specs, roles) => {
|
|
|
69
64
|
/**
|
|
70
65
|
* Select the Hono test app with correct auth for a route.
|
|
71
66
|
*
|
|
72
|
-
* @param apps - the pre-built auth test apps
|
|
73
|
-
* @param auth - the route's auth options
|
|
74
|
-
* @returns the correctly-authenticated Hono app
|
|
75
67
|
* @throws Error if `auth.type === 'role'` and `auth.role` is not present in
|
|
76
68
|
* `apps.by_role` — surfaces a missing entry in the `roles` array passed to
|
|
77
69
|
* `create_auth_test_apps`.
|
|
@@ -9,23 +9,14 @@ import { type DbFactory } from './db.js';
|
|
|
9
9
|
*
|
|
10
10
|
* Walks `properties`, `items`, `allOf`/`anyOf`/`oneOf`, and
|
|
11
11
|
* `additionalProperties` to find every declared field name at any depth.
|
|
12
|
-
*
|
|
13
|
-
* @param schema - JSON Schema object
|
|
14
|
-
* @returns set of all property names found
|
|
15
12
|
*/
|
|
16
13
|
export declare const collect_json_schema_property_names: (schema: unknown) => Set<string>;
|
|
17
14
|
/**
|
|
18
15
|
* Assert that no output schema in the surface contains sensitive field names.
|
|
19
|
-
*
|
|
20
|
-
* @param surface - the app surface to check
|
|
21
|
-
* @param sensitive_fields - field names to flag
|
|
22
16
|
*/
|
|
23
17
|
export declare const assert_output_schemas_no_sensitive_fields: (surface: AppSurface, sensitive_fields?: ReadonlyArray<string>) => void;
|
|
24
18
|
/**
|
|
25
19
|
* Assert that non-admin route output schemas don't contain admin-only fields.
|
|
26
|
-
*
|
|
27
|
-
* @param surface - the app surface to check
|
|
28
|
-
* @param admin_only_fields - field names that are admin-only
|
|
29
20
|
*/
|
|
30
21
|
export declare const assert_non_admin_schemas_no_admin_fields: (surface: AppSurface, admin_only_fields?: ReadonlyArray<string>) => void;
|
|
31
22
|
/** Options for `describe_data_exposure_tests`. */
|
|
@@ -55,8 +46,6 @@ export interface DataExposureTestOptions {
|
|
|
55
46
|
* 2. Runtime — fire real requests and check response bodies against blocklists
|
|
56
47
|
* 3. Cross-privilege — admin routes return 403 for non-admin, error responses
|
|
57
48
|
* contain no sensitive fields
|
|
58
|
-
*
|
|
59
|
-
* @param options - test configuration
|
|
60
49
|
*/
|
|
61
50
|
export declare const describe_data_exposure_tests: (options: DataExposureTestOptions) => void;
|
|
62
51
|
//# sourceMappingURL=data_exposure.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data_exposure.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/data_exposure.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAgB7B,OAAO,KAAK,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAChF,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAG9D,OAAO,EAAwB,KAAK,SAAS,EAAC,MAAM,SAAS,CAAC;AAe9D
|
|
1
|
+
{"version":3,"file":"data_exposure.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/data_exposure.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAgB7B,OAAO,KAAK,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAChF,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAG9D,OAAO,EAAwB,KAAK,SAAS,EAAC,MAAM,SAAS,CAAC;AAe9D;;;;;GAKG;AACH,eAAO,MAAM,kCAAkC,GAAI,QAAQ,OAAO,KAAG,GAAG,CAAC,MAAM,CAuB9E,CAAC;AAIF;;GAEG;AACH,eAAO,MAAM,yCAAyC,GACrD,SAAS,UAAU,EACnB,mBAAkB,aAAa,CAAC,MAAM,CAA6B,KACjE,IAWF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wCAAwC,GACpD,SAAS,UAAU,EACnB,oBAAmB,aAAa,CAAC,MAAM,CAA8B,KACnE,IAcF,CAAC;AAIF,kDAAkD;AAClD,MAAM,WAAW,uBAAuB;IACvC,4DAA4D;IAC5D,KAAK,EAAE,MAAM,cAAc,CAAC;IAC5B,wCAAwC;IACxC,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,4CAA4C;IAC5C,kBAAkB,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAChE,2FAA2F;IAC3F,gBAAgB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,iGAAiG;IACjG,iBAAiB,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CACpB,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,iBAAiB,GAAG,oBAAoB,CAAC,CAC5E,CAAC;IACF,qEAAqE;IACrE,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAChC,kDAAkD;IAClD,WAAW,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,GAAI,SAAS,uBAAuB,KAAG,IAmC/E,CAAC"}
|
|
@@ -25,9 +25,6 @@ import { SENSITIVE_FIELD_BLOCKLIST, ADMIN_ONLY_FIELD_BLOCKLIST, assert_no_sensit
|
|
|
25
25
|
*
|
|
26
26
|
* Walks `properties`, `items`, `allOf`/`anyOf`/`oneOf`, and
|
|
27
27
|
* `additionalProperties` to find every declared field name at any depth.
|
|
28
|
-
*
|
|
29
|
-
* @param schema - JSON Schema object
|
|
30
|
-
* @returns set of all property names found
|
|
31
28
|
*/
|
|
32
29
|
export const collect_json_schema_property_names = (schema) => {
|
|
33
30
|
const names = new Set();
|
|
@@ -59,9 +56,6 @@ export const collect_json_schema_property_names = (schema) => {
|
|
|
59
56
|
// --- Schema-level assertions ---
|
|
60
57
|
/**
|
|
61
58
|
* Assert that no output schema in the surface contains sensitive field names.
|
|
62
|
-
*
|
|
63
|
-
* @param surface - the app surface to check
|
|
64
|
-
* @param sensitive_fields - field names to flag
|
|
65
59
|
*/
|
|
66
60
|
export const assert_output_schemas_no_sensitive_fields = (surface, sensitive_fields = SENSITIVE_FIELD_BLOCKLIST) => {
|
|
67
61
|
for (const route of surface.routes) {
|
|
@@ -75,9 +69,6 @@ export const assert_output_schemas_no_sensitive_fields = (surface, sensitive_fie
|
|
|
75
69
|
};
|
|
76
70
|
/**
|
|
77
71
|
* Assert that non-admin route output schemas don't contain admin-only fields.
|
|
78
|
-
*
|
|
79
|
-
* @param surface - the app surface to check
|
|
80
|
-
* @param admin_only_fields - field names that are admin-only
|
|
81
72
|
*/
|
|
82
73
|
export const assert_non_admin_schemas_no_admin_fields = (surface, admin_only_fields = ADMIN_ONLY_FIELD_BLOCKLIST) => {
|
|
83
74
|
const non_admin = surface.routes.filter((r) => r.auth.type !== 'keeper' && !(r.auth.type === 'role' && r.auth.role === 'admin'));
|
|
@@ -98,8 +89,6 @@ export const assert_non_admin_schemas_no_admin_fields = (surface, admin_only_fie
|
|
|
98
89
|
* 2. Runtime — fire real requests and check response bodies against blocklists
|
|
99
90
|
* 3. Cross-privilege — admin routes return 403 for non-admin, error responses
|
|
100
91
|
* contain no sensitive fields
|
|
101
|
-
*
|
|
102
|
-
* @param options - test configuration
|
|
103
92
|
*/
|
|
104
93
|
export const describe_data_exposure_tests = (options) => {
|
|
105
94
|
const { build, sensitive_fields = SENSITIVE_FIELD_BLOCKLIST, admin_only_fields = ADMIN_ONLY_FIELD_BLOCKLIST, } = options;
|
package/dist/testing/db.d.ts
CHANGED
|
@@ -20,7 +20,6 @@ export interface DbFactory {
|
|
|
20
20
|
* Removes all tables, sequences, indexes, types, and functions.
|
|
21
21
|
* The database instance remains usable after reset.
|
|
22
22
|
*
|
|
23
|
-
* @param db - the database to reset
|
|
24
23
|
* @mutates db - drops the `public` schema and recreates it; all rows in all
|
|
25
24
|
* tables are gone after this returns.
|
|
26
25
|
*/
|
|
@@ -35,7 +34,6 @@ export declare const reset_pglite: (db: Db) => Promise<void>;
|
|
|
35
34
|
* cold-start cost again.
|
|
36
35
|
*
|
|
37
36
|
* @param init_schema - callback to initialize the database schema
|
|
38
|
-
* @returns a factory that creates in-memory pglite databases
|
|
39
37
|
*/
|
|
40
38
|
export declare const create_pglite_factory: (init_schema: (db: Db) => Promise<void>) => DbFactory;
|
|
41
39
|
/**
|
|
@@ -91,7 +89,6 @@ export declare const AUTH_DROP_TABLES: readonly ["app_settings", "invite", "audi
|
|
|
91
89
|
* Safe on fresh databases (`IF EXISTS` on all statements). No-op effect for
|
|
92
90
|
* PGlite (already fresh), but harmless to call unconditionally.
|
|
93
91
|
*
|
|
94
|
-
* @param db - the database to clean
|
|
95
92
|
* @mutates db - drops every table in `AUTH_DROP_TABLES` plus `schema_version`.
|
|
96
93
|
*/
|
|
97
94
|
export declare const drop_auth_schema: (db: Db) => Promise<void>;
|
|
@@ -105,15 +102,12 @@ export declare const drop_auth_schema: (db: Db) => Promise<void>;
|
|
|
105
102
|
*
|
|
106
103
|
* @param factories - one or more database factories to run suites against
|
|
107
104
|
* @param truncate_tables - tables to truncate between tests (children first for FK safety)
|
|
108
|
-
* @returns a `describe_db` function for use in test files
|
|
109
105
|
* @mutates the underlying database between tests — `beforeEach` issues
|
|
110
106
|
* `TRUNCATE <truncate_tables> CASCADE` against the shared instance.
|
|
111
107
|
*/
|
|
112
108
|
export declare const create_describe_db: (factories: DbFactory | Array<DbFactory>, truncate_tables: Array<string>) => ((name: string, fn: (get_db: () => Db) => void) => void);
|
|
113
109
|
/**
|
|
114
110
|
* Log factory status to console.
|
|
115
|
-
*
|
|
116
|
-
* @param factories - the database factories to report on
|
|
117
111
|
*/
|
|
118
112
|
export declare const log_db_factory_status: (factories: Array<DbFactory>) => void;
|
|
119
113
|
//# sourceMappingURL=db.d.ts.map
|
package/dist/testing/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/db.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AA6B7B,OAAO,KAAK,EAAC,EAAE,EAAC,MAAM,aAAa,CAAC;AAKpC;;GAEG;AACH,eAAO,MAAM,KAAK,SAA4B,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1B,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/db.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AA6B7B,OAAO,KAAK,EAAC,EAAE,EAAC,MAAM,aAAa,CAAC;AAKpC;;GAEG;AACH,eAAO,MAAM,KAAK,SAA4B,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1B,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,GAAU,IAAI,EAAE,KAAG,OAAO,CAAC,IAAI,CAGvD,CAAC;AAMF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,GAAI,aAAa,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,KAAG,SAkB7E,CAAC;AAEH;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,iBAAiB,GAC7B,aAAa,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,EACtC,WAAW,MAAM,KACf,SA2DF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,UAQhC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gCAAgC,UAAyC,CAAC;AAEvF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,+IAWnB,CAAC;AAEX;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,GAAU,IAAI,EAAE,KAAG,OAAO,CAAC,IAAI,CAK3D,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,GAC9B,WAAW,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,EACvC,iBAAiB,KAAK,CAAC,MAAM,CAAC,KAC5B,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,KAAK,IAAI,CAwBzD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,WAAW,KAAK,CAAC,SAAS,CAAC,KAAG,IAMnE,CAAC"}
|
package/dist/testing/db.js
CHANGED
|
@@ -36,7 +36,6 @@ export const IS_CI = process.env.CI === 'true';
|
|
|
36
36
|
* Removes all tables, sequences, indexes, types, and functions.
|
|
37
37
|
* The database instance remains usable after reset.
|
|
38
38
|
*
|
|
39
|
-
* @param db - the database to reset
|
|
40
39
|
* @mutates db - drops the `public` schema and recreates it; all rows in all
|
|
41
40
|
* tables are gone after this returns.
|
|
42
41
|
*/
|
|
@@ -57,7 +56,6 @@ let module_db = null;
|
|
|
57
56
|
* cold-start cost again.
|
|
58
57
|
*
|
|
59
58
|
* @param init_schema - callback to initialize the database schema
|
|
60
|
-
* @returns a factory that creates in-memory pglite databases
|
|
61
59
|
*/
|
|
62
60
|
export const create_pglite_factory = (init_schema) => ({
|
|
63
61
|
name: 'pglite',
|
|
@@ -209,7 +207,6 @@ export const AUTH_DROP_TABLES = [
|
|
|
209
207
|
* Safe on fresh databases (`IF EXISTS` on all statements). No-op effect for
|
|
210
208
|
* PGlite (already fresh), but harmless to call unconditionally.
|
|
211
209
|
*
|
|
212
|
-
* @param db - the database to clean
|
|
213
210
|
* @mutates db - drops every table in `AUTH_DROP_TABLES` plus `schema_version`.
|
|
214
211
|
*/
|
|
215
212
|
export const drop_auth_schema = async (db) => {
|
|
@@ -228,7 +225,6 @@ export const drop_auth_schema = async (db) => {
|
|
|
228
225
|
*
|
|
229
226
|
* @param factories - one or more database factories to run suites against
|
|
230
227
|
* @param truncate_tables - tables to truncate between tests (children first for FK safety)
|
|
231
|
-
* @returns a `describe_db` function for use in test files
|
|
232
228
|
* @mutates the underlying database between tests — `beforeEach` issues
|
|
233
229
|
* `TRUNCATE <truncate_tables> CASCADE` against the shared instance.
|
|
234
230
|
*/
|
|
@@ -258,8 +254,6 @@ export const create_describe_db = (factories, truncate_tables) => {
|
|
|
258
254
|
};
|
|
259
255
|
/**
|
|
260
256
|
* Log factory status to console.
|
|
261
|
-
*
|
|
262
|
-
* @param factories - the database factories to report on
|
|
263
257
|
*/
|
|
264
258
|
export const log_db_factory_status = (factories) => {
|
|
265
259
|
const enabled = factories.filter((f) => !f.skip).map((f) => f.name);
|
|
@@ -71,10 +71,7 @@ export declare class ErrorCoverageCollector {
|
|
|
71
71
|
* (e.g., `/api/accounts/abc` → `/api/accounts/:id`). When `code` is provided,
|
|
72
72
|
* it is stored alongside the status for per-code coverage tracking.
|
|
73
73
|
*
|
|
74
|
-
* @param route_specs - route specs for path resolution
|
|
75
|
-
* @param method - HTTP method
|
|
76
74
|
* @param path - request path (may be concrete)
|
|
77
|
-
* @param status - observed HTTP status code
|
|
78
75
|
* @param code - observed body `error` code (pass when the route's error
|
|
79
76
|
* schema declares specific codes via `z.literal` or `z.enum`)
|
|
80
77
|
* @mutates `this.observed` - adds the resolved `"METHOD /spec-path:STATUS"`
|
|
@@ -90,10 +87,6 @@ export declare class ErrorCoverageCollector {
|
|
|
90
87
|
* for per-code coverage. Pass an explicit `code` to override the
|
|
91
88
|
* auto-extracted value or when the body was already consumed.
|
|
92
89
|
*
|
|
93
|
-
* @param route_specs - route specs for schema lookup and path resolution
|
|
94
|
-
* @param method - HTTP method
|
|
95
|
-
* @param path - request path
|
|
96
|
-
* @param response - the Response to validate and record
|
|
97
90
|
* @param code - observed body `error` code (override; if omitted and the
|
|
98
91
|
* response body is a JSON object with a string `error` field, that value
|
|
99
92
|
* is auto-extracted)
|
|
@@ -111,10 +104,6 @@ export declare class ErrorCoverageCollector {
|
|
|
111
104
|
* `z.enum`), reports per-code rows; otherwise reports one row per status.
|
|
112
105
|
* A status-only observation (no code) satisfies all declared codes for that
|
|
113
106
|
* status — the "any-code" rule.
|
|
114
|
-
*
|
|
115
|
-
* @param route_specs - route specs to check coverage against
|
|
116
|
-
* @param options - exclusion configuration (skip routes or statuses)
|
|
117
|
-
* @returns uncovered entries with method, path, status, and optional code
|
|
118
107
|
*/
|
|
119
108
|
uncovered(route_specs: Array<RouteSpec>, options?: CoverageFilterOptions): Array<UncoveredEntry>;
|
|
120
109
|
}
|
|
@@ -142,9 +131,6 @@ export interface ErrorCoverageOptions extends CoverageFilterOptions {
|
|
|
142
131
|
* When `min_coverage` is 0 (default), logs coverage info without failing.
|
|
143
132
|
* When > 0, fails if coverage is below the threshold.
|
|
144
133
|
*
|
|
145
|
-
* @param collector - the coverage collector with recorded observations
|
|
146
|
-
* @param route_specs - route specs to check coverage against
|
|
147
|
-
* @param options - threshold and exclusion configuration
|
|
148
134
|
* @throws AssertionError if `min_coverage > 0` and the covered/total ratio
|
|
149
135
|
* falls below the threshold — the failure message lists every uncovered
|
|
150
136
|
* route + status (+ code).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error_coverage.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/error_coverage.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAE7B;;;;;;;;;;;GAWG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAGtB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAIrD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,4BAA4B,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,KAAK,CAAC,MAAM,CAAC,GAAG,IAWhF,CAAC;AAEF,sFAAsF;AACtF,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,6EAA6E;AAC7E,MAAM,WAAW,qBAAqB;IACrC,kDAAkD;IAClD,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,iCAAiC;IACjC,eAAe,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAChC;AAqDD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,sBAAsB;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAE3C
|
|
1
|
+
{"version":3,"file":"error_coverage.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/error_coverage.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAE7B;;;;;;;;;;;GAWG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAGtB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAIrD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,4BAA4B,GAAI,QAAQ,CAAC,CAAC,OAAO,KAAG,KAAK,CAAC,MAAM,CAAC,GAAG,IAWhF,CAAC;AAEF,sFAAsF;AACtF,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,6EAA6E;AAC7E,MAAM,WAAW,qBAAqB;IACrC,kDAAkD;IAClD,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,iCAAiC;IACjC,eAAe,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAChC;AAqDD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,sBAAsB;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAE3C;;;;;;;;;;;;OAYG;IACH,MAAM,CACL,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,EAC7B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACX,IAAI;IAUP;;;;;;;;;;;;;;;;OAgBG;IACG,iBAAiB,CACtB,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,EAC7B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,EAClB,IAAI,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC;IAgBhB;;;;;;;;OAQG;IACH,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,KAAK,CAAC,cAAc,CAAC;CAKhG;AAED;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,MAAM,CAAC;AAEtD,2CAA2C;AAC3C,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IAClE,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAaD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,qBAAqB,GACjC,WAAW,sBAAsB,EACjC,aAAa,KAAK,CAAC,SAAS,CAAC,EAC7B,UAAU,oBAAoB,KAC5B,IAqBF,CAAC"}
|
|
@@ -113,10 +113,7 @@ export class ErrorCoverageCollector {
|
|
|
113
113
|
* (e.g., `/api/accounts/abc` → `/api/accounts/:id`). When `code` is provided,
|
|
114
114
|
* it is stored alongside the status for per-code coverage tracking.
|
|
115
115
|
*
|
|
116
|
-
* @param route_specs - route specs for path resolution
|
|
117
|
-
* @param method - HTTP method
|
|
118
116
|
* @param path - request path (may be concrete)
|
|
119
|
-
* @param status - observed HTTP status code
|
|
120
117
|
* @param code - observed body `error` code (pass when the route's error
|
|
121
118
|
* schema declares specific codes via `z.literal` or `z.enum`)
|
|
122
119
|
* @mutates `this.observed` - adds the resolved `"METHOD /spec-path:STATUS"`
|
|
@@ -140,10 +137,6 @@ export class ErrorCoverageCollector {
|
|
|
140
137
|
* for per-code coverage. Pass an explicit `code` to override the
|
|
141
138
|
* auto-extracted value or when the body was already consumed.
|
|
142
139
|
*
|
|
143
|
-
* @param route_specs - route specs for schema lookup and path resolution
|
|
144
|
-
* @param method - HTTP method
|
|
145
|
-
* @param path - request path
|
|
146
|
-
* @param response - the Response to validate and record
|
|
147
140
|
* @param code - observed body `error` code (override; if omitted and the
|
|
148
141
|
* response body is a JSON object with a string `error` field, that value
|
|
149
142
|
* is auto-extracted)
|
|
@@ -176,10 +169,6 @@ export class ErrorCoverageCollector {
|
|
|
176
169
|
* `z.enum`), reports per-code rows; otherwise reports one row per status.
|
|
177
170
|
* A status-only observation (no code) satisfies all declared codes for that
|
|
178
171
|
* status — the "any-code" rule.
|
|
179
|
-
*
|
|
180
|
-
* @param route_specs - route specs to check coverage against
|
|
181
|
-
* @param options - exclusion configuration (skip routes or statuses)
|
|
182
|
-
* @returns uncovered entries with method, path, status, and optional code
|
|
183
172
|
*/
|
|
184
173
|
uncovered(route_specs, options) {
|
|
185
174
|
return walk_coverage(this, route_specs, options)
|
|
@@ -213,9 +202,6 @@ const format_uncovered = (entry) => `${entry.method} ${entry.path} → ${entry.s
|
|
|
213
202
|
* When `min_coverage` is 0 (default), logs coverage info without failing.
|
|
214
203
|
* When > 0, fails if coverage is below the threshold.
|
|
215
204
|
*
|
|
216
|
-
* @param collector - the coverage collector with recorded observations
|
|
217
|
-
* @param route_specs - route specs to check coverage against
|
|
218
|
-
* @param options - threshold and exclusion configuration
|
|
219
205
|
* @throws AssertionError if `min_coverage > 0` and the covered/total ratio
|
|
220
206
|
* falls below the threshold — the failure message lists every uncovered
|
|
221
207
|
* route + status (+ code).
|
|
@@ -51,7 +51,6 @@ export interface StandardIntegrationTestOptions {
|
|
|
51
51
|
* Each test group asserts that required routes exist, failing with a descriptive
|
|
52
52
|
* message if the consumer's route specs are misconfigured.
|
|
53
53
|
*
|
|
54
|
-
* @param options - session config and route factory
|
|
55
54
|
* @throws Error at setup time when `options.rpc_endpoints` is empty — the
|
|
56
55
|
* suite hard-fails via `require_rpc_endpoint_path` rather than running
|
|
57
56
|
* tests that would crash mid-suite trying to dispatch
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/integration.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAsB7B,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAA6C,KAAK,eAAe,EAAC,MAAM,iBAAiB,CAAC;AACjG,OAAO,EAIN,KAAK,SAAS,EACd,MAAM,SAAS,CAAC;AAOjB,OAAO,EAKN,KAAK,uBAAuB,EAC5B,MAAM,kBAAkB,CAAC;AAqB1B;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC9C,4CAA4C;IAC5C,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,wDAAwD;IACxD,kBAAkB,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAChE,iDAAiD;IACjD,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAChC;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,EAAE,uBAAuB,CAAC;CACvC;AAsBD
|
|
1
|
+
{"version":3,"file":"integration.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/integration.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAsB7B,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAA6C,KAAK,eAAe,EAAC,MAAM,iBAAiB,CAAC;AACjG,OAAO,EAIN,KAAK,SAAS,EACd,MAAM,SAAS,CAAC;AAOjB,OAAO,EAKN,KAAK,uBAAuB,EAC5B,MAAM,kBAAkB,CAAC;AAqB1B;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC9C,4CAA4C;IAC5C,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,wDAAwD;IACxD,kBAAkB,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAChE,iDAAiD;IACjD,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAChC;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,EAAE,uBAAuB,CAAC;CACvC;AAsBD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,mCAAmC,GAC/C,SAAS,8BAA8B,KACrC,IAg8CF,CAAC"}
|
|
@@ -56,7 +56,6 @@ const build_test_app_options = (options, db) => ({
|
|
|
56
56
|
* Each test group asserts that required routes exist, failing with a descriptive
|
|
57
57
|
* message if the consumer's route specs are misconfigured.
|
|
58
58
|
*
|
|
59
|
-
* @param options - session config and route factory
|
|
60
59
|
* @throws Error at setup time when `options.rpc_endpoints` is empty — the
|
|
61
60
|
* suite hard-fails via `require_rpc_endpoint_path` rather than running
|
|
62
61
|
* tests that would crash mid-suite trying to dispatch
|
|
@@ -8,10 +8,7 @@ import type { TestApp, TestAccount } from './app_server.js';
|
|
|
8
8
|
*
|
|
9
9
|
* Supports both exact matches and parameterized paths (`:param` segments).
|
|
10
10
|
*
|
|
11
|
-
* @param specs - route specs to search
|
|
12
|
-
* @param method - HTTP method
|
|
13
11
|
* @param path - request path (exact or with concrete param values)
|
|
14
|
-
* @returns matching route spec, or `undefined`
|
|
15
12
|
*/
|
|
16
13
|
export declare const find_route_spec: (specs: Array<RouteSpec>, method: string, path: string) => RouteSpec | undefined;
|
|
17
14
|
/**
|
|
@@ -31,14 +28,7 @@ export type RestAuthRouteSuffix = (typeof REST_AUTH_ROUTE_SUFFIXES)[number];
|
|
|
31
28
|
* method name (e.g. `/sessions/revoke-all`) fails loudly at the call site
|
|
32
29
|
* instead of silently returning `undefined`.
|
|
33
30
|
*
|
|
34
|
-
* @
|
|
35
|
-
* @param suffix - REST auth path suffix
|
|
36
|
-
* @param method - HTTP method
|
|
37
|
-
* @returns matching route spec, or `undefined`
|
|
38
|
-
* @throws Error if `suffix` is not in `REST_AUTH_ROUTE_SUFFIXES` — surfaces
|
|
39
|
-
* accidental use of a post-RPC-migration method name (e.g.
|
|
40
|
-
* `/sessions/revoke-all`) at the call site rather than silently returning
|
|
41
|
-
* `undefined`.
|
|
31
|
+
* @throws Error if `suffix` is not in `REST_AUTH_ROUTE_SUFFIXES`.
|
|
42
32
|
*/
|
|
43
33
|
export declare const find_auth_route: (specs: Array<RouteSpec>, suffix: RestAuthRouteSuffix, method: RouteMethod) => RouteSpec | undefined;
|
|
44
34
|
/**
|
|
@@ -47,10 +37,6 @@ export declare const find_auth_route: (specs: Array<RouteSpec>, suffix: RestAuth
|
|
|
47
37
|
* For 2xx responses, validates against `spec.output`.
|
|
48
38
|
* For error responses, validates against the merged error schema for that status code.
|
|
49
39
|
*
|
|
50
|
-
* @param route_specs - route specs for schema lookup
|
|
51
|
-
* @param method - HTTP method of the request
|
|
52
|
-
* @param path - path of the request
|
|
53
|
-
* @param response - the Response to validate
|
|
54
40
|
* @throws Error if no route spec matches `method` + `path`, if the response
|
|
55
41
|
* body fails to parse against the declared output / error schema, or if the
|
|
56
42
|
* response is non-JSON despite a declared schema for that status.
|
|
@@ -58,10 +44,6 @@ export declare const find_auth_route: (specs: Array<RouteSpec>, suffix: RestAuth
|
|
|
58
44
|
export declare const assert_response_matches_spec: (route_specs: Array<RouteSpec>, method: string, path: string, response: Response) => Promise<void>;
|
|
59
45
|
/**
|
|
60
46
|
* Create an expired test cookie — validly signed but with an expiry timestamp in 1970.
|
|
61
|
-
*
|
|
62
|
-
* @param keyring - keyring for signing
|
|
63
|
-
* @param session_options - session config
|
|
64
|
-
* @returns signed cookie value with long-past expiry
|
|
65
47
|
*/
|
|
66
48
|
export declare const create_expired_test_cookie: (keyring: Keyring, session_options: SessionOptions<string>) => Promise<string>;
|
|
67
49
|
/**
|
|
@@ -69,10 +51,7 @@ export declare const create_expired_test_cookie: (keyring: Keyring, session_opti
|
|
|
69
51
|
*
|
|
70
52
|
* Error schemas use `z.looseObject` (intentional — multiple producers), but
|
|
71
53
|
* test responses should be checked for fields that could leak information.
|
|
72
|
-
* Flags any field not in the known-safe set so callers can decide whether to
|
|
73
|
-
* fail or log.
|
|
74
54
|
*
|
|
75
|
-
* @param body - parsed error response JSON
|
|
76
55
|
* @returns array of unexpected field names (empty = clean)
|
|
77
56
|
*/
|
|
78
57
|
export declare const check_error_response_fields: (body: Record<string, unknown>) => Array<string>;
|
|
@@ -82,16 +61,12 @@ export declare const check_error_response_fields: (body: Record<string, unknown>
|
|
|
82
61
|
* Checks both field names and string values for patterns indicating
|
|
83
62
|
* stack traces, SQL, or internal paths.
|
|
84
63
|
*
|
|
85
|
-
* @param body - parsed error response JSON
|
|
86
64
|
* @param context - description for error messages
|
|
87
65
|
*/
|
|
88
66
|
export declare const assert_no_error_info_leakage: (body: Record<string, unknown>, context: string) => void;
|
|
89
67
|
/**
|
|
90
68
|
* Assert that a 429 response includes a valid `Retry-After` header
|
|
91
69
|
* matching the JSON body's `retry_after` field.
|
|
92
|
-
*
|
|
93
|
-
* @param response - the 429 response
|
|
94
|
-
* @param body - parsed JSON body with `retry_after` field
|
|
95
70
|
*/
|
|
96
71
|
export declare const assert_rate_limit_retry_after_header: (response: Response, body: {
|
|
97
72
|
retry_after: number;
|
|
@@ -104,16 +79,11 @@ export declare const ADMIN_ONLY_FIELD_BLOCKLIST: ReadonlyArray<string>;
|
|
|
104
79
|
* Recursively collect all key names from a parsed JSON value.
|
|
105
80
|
*
|
|
106
81
|
* Walks objects and arrays to find every property name at any nesting depth.
|
|
107
|
-
*
|
|
108
|
-
* @param value - parsed JSON value
|
|
109
|
-
* @returns set of all key names found
|
|
110
82
|
*/
|
|
111
83
|
export declare const collect_json_keys_recursive: (value: unknown) => Set<string>;
|
|
112
84
|
/**
|
|
113
85
|
* Assert that a parsed JSON body contains no fields from the given blocklist.
|
|
114
86
|
*
|
|
115
|
-
* @param body - parsed response JSON
|
|
116
|
-
* @param blocklist - field names to check for
|
|
117
87
|
* @param context - description for error messages
|
|
118
88
|
*/
|
|
119
89
|
export declare const assert_no_sensitive_fields_in_json: (body: unknown, blocklist: ReadonlyArray<string>, context: string) => void;
|
|
@@ -126,11 +96,6 @@ export declare const assert_no_sensitive_fields_in_json: (body: unknown, blockli
|
|
|
126
96
|
* - `role: admin` — the admin account's session cookie
|
|
127
97
|
* - `role: <other>` — the test app's bootstrapped keeper session
|
|
128
98
|
* - `keeper` — the test app's daemon token
|
|
129
|
-
*
|
|
130
|
-
* @param spec - route spec to inspect
|
|
131
|
-
* @param test_app - the assembled test app (for bootstrapped credentials)
|
|
132
|
-
* @param authed_account - an account with no roles (for `authenticated` auth)
|
|
133
|
-
* @param admin_account - an account with `admin` role (for role-gated routes)
|
|
134
99
|
*/
|
|
135
100
|
export declare const pick_auth_headers: (spec: RouteSpec, test_app: TestApp, authed_account: TestAccount, admin_account: TestAccount) => Record<string, string>;
|
|
136
101
|
//# sourceMappingURL=integration_helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration_helpers.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/integration_helpers.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAU7B,OAAO,KAAK,EAAC,SAAS,EAAE,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAElE,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAA8B,KAAK,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAE3F,OAAO,KAAK,EAAC,OAAO,EAAE,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAE1D
|
|
1
|
+
{"version":3,"file":"integration_helpers.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/integration_helpers.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAU7B,OAAO,KAAK,EAAC,SAAS,EAAE,WAAW,EAAC,MAAM,uBAAuB,CAAC;AAElE,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAA8B,KAAK,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAE3F,OAAO,KAAK,EAAC,OAAO,EAAE,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAE1D;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC3B,OAAO,KAAK,CAAC,SAAS,CAAC,EACvB,QAAQ,MAAM,EACd,MAAM,MAAM,KACV,SAAS,GAAG,SAad,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,iFAO3B,CAAC;AACX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,wBAAwB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,GAC3B,OAAO,KAAK,CAAC,SAAS,CAAC,EACvB,QAAQ,mBAAmB,EAC3B,QAAQ,WAAW,KACjB,SAAS,GAAG,SAOd,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,GACxC,aAAa,KAAK,CAAC,SAAS,CAAC,EAC7B,QAAQ,MAAM,EACd,MAAM,MAAM,EACZ,UAAU,QAAQ,KAChB,OAAO,CAAC,IAAI,CAmDd,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,GACtC,SAAS,OAAO,EAChB,iBAAiB,cAAc,CAAC,MAAM,CAAC,KACrC,OAAO,CAAC,MAAM,CAGhB,CAAC;AAgCF;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,KAAK,CAAC,MAAM,CAQvF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B,GACxC,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,MAAM,KACb,IAkBF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oCAAoC,GAChD,UAAU,QAAQ,EAClB,MAAM;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,KACzB,IAUF,CAAC;AAIF,oEAAoE;AACpE,eAAO,MAAM,yBAAyB,EAAE,aAAa,CAAC,MAAM,CAAmC,CAAC;AAEhG,0EAA0E;AAC1E,eAAO,MAAM,0BAA0B,EAAE,aAAa,CAAC,MAAM,CAAgC,CAAC;AAE9F;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,GAAI,OAAO,OAAO,KAAG,GAAG,CAAC,MAAM,CAetE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kCAAkC,GAC9C,MAAM,OAAO,EACb,WAAW,aAAa,CAAC,MAAM,CAAC,EAChC,SAAS,MAAM,KACb,IAKF,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAC7B,MAAM,SAAS,EACf,UAAU,OAAO,EACjB,gBAAgB,WAAW,EAC3B,eAAe,WAAW,KACxB,MAAM,CAAC,MAAM,EAAE,MAAM,CAcvB,CAAC"}
|