@fuzdev/fuz_app 0.103.0 → 0.105.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 +2 -2
- package/dist/actions/action_bridge.d.ts.map +1 -1
- package/dist/actions/action_bridge.js +2 -2
- package/dist/actions/action_codegen.d.ts.map +1 -1
- package/dist/actions/action_codegen.js +3 -3
- package/dist/actions/action_dispatcher.d.ts.map +1 -1
- package/dist/actions/action_dispatcher.js +3 -3
- package/dist/actions/action_event.d.ts.map +1 -1
- package/dist/actions/action_event.js +11 -11
- package/dist/actions/action_event_data.d.ts.map +1 -1
- package/dist/actions/action_event_data.js +2 -2
- package/dist/actions/action_event_helpers.d.ts.map +1 -1
- package/dist/actions/action_event_helpers.js +2 -2
- package/dist/actions/action_event_types.d.ts.map +1 -1
- package/dist/actions/action_event_types.js +4 -4
- package/dist/actions/action_rpc.d.ts.map +1 -1
- package/dist/actions/action_rpc.js +13 -13
- package/dist/actions/action_spec.d.ts.map +1 -1
- package/dist/actions/action_spec.js +6 -6
- package/dist/actions/action_types.d.ts.map +1 -1
- package/dist/actions/broadcast_api.d.ts.map +1 -1
- package/dist/actions/broadcast_api.js +1 -1
- package/dist/actions/cancel.d.ts.map +1 -1
- package/dist/actions/cancel.js +3 -3
- package/dist/actions/compile_action_registry.d.ts.map +1 -1
- package/dist/actions/frontend_rpc_client.d.ts.map +1 -1
- package/dist/actions/frontend_rpc_client.js +3 -3
- package/dist/actions/heartbeat.d.ts.map +1 -1
- package/dist/actions/heartbeat.js +2 -2
- package/dist/actions/peer_ping.d.ts.map +1 -1
- package/dist/actions/peer_ping.js +6 -6
- package/dist/actions/peer_request.d.ts.map +1 -1
- package/dist/actions/perform_action.d.ts.map +1 -1
- package/dist/actions/perform_action.js +13 -13
- package/dist/actions/protocol.d.ts.map +1 -1
- package/dist/actions/protocol.js +1 -1
- package/dist/actions/register_action_ws.d.ts.map +1 -1
- package/dist/actions/register_action_ws.js +14 -11
- package/dist/actions/register_ws_endpoint.d.ts.map +1 -1
- package/dist/actions/register_ws_endpoint.js +3 -3
- package/dist/actions/request_tracker.svelte.d.ts.map +1 -1
- package/dist/actions/request_tracker.svelte.js +2 -2
- package/dist/actions/rpc_client.d.ts.map +1 -1
- package/dist/actions/rpc_client.js +7 -7
- package/dist/actions/socket.svelte.d.ts.map +1 -1
- package/dist/actions/socket.svelte.js +4 -3
- package/dist/actions/transports.d.ts.map +1 -1
- package/dist/actions/transports_http.d.ts.map +1 -1
- package/dist/actions/transports_http.js +7 -7
- package/dist/actions/transports_ws.d.ts.map +1 -1
- package/dist/actions/transports_ws.js +3 -3
- package/dist/actions/transports_ws_auth_guard.d.ts +4 -4
- package/dist/actions/transports_ws_auth_guard.d.ts.map +1 -1
- package/dist/actions/transports_ws_auth_guard.js +5 -5
- package/dist/actions/transports_ws_backend.d.ts.map +1 -1
- package/dist/actions/transports_ws_backend.js +2 -2
- package/dist/actions/ws_endpoint_spec.d.ts +2 -2
- package/dist/actions/ws_endpoint_spec.d.ts.map +1 -1
- package/dist/auth/CLAUDE.md +40 -18
- package/dist/auth/account_action_specs.d.ts +4 -4
- package/dist/auth/account_action_specs.d.ts.map +1 -1
- package/dist/auth/account_action_specs.js +18 -19
- package/dist/auth/account_actions.d.ts +3 -3
- package/dist/auth/account_actions.d.ts.map +1 -1
- package/dist/auth/account_actions.js +10 -10
- package/dist/auth/account_queries.d.ts.map +1 -1
- package/dist/auth/account_queries.js +6 -6
- package/dist/auth/account_route_schema.d.ts.map +1 -1
- package/dist/auth/account_route_schema.js +19 -19
- package/dist/auth/account_routes.d.ts +2 -2
- package/dist/auth/account_routes.d.ts.map +1 -1
- package/dist/auth/account_routes.js +27 -27
- package/dist/auth/account_schema.d.ts +13 -2
- package/dist/auth/account_schema.d.ts.map +1 -1
- package/dist/auth/account_schema.js +22 -11
- package/dist/auth/actor_lookup_action_specs.d.ts.map +1 -1
- package/dist/auth/actor_lookup_action_specs.js +5 -5
- package/dist/auth/actor_lookup_actions.d.ts +4 -2
- package/dist/auth/actor_lookup_actions.d.ts.map +1 -1
- package/dist/auth/actor_lookup_actions.js +3 -3
- package/dist/auth/actor_lookup_queries.d.ts.map +1 -1
- package/dist/auth/actor_search_action_specs.d.ts.map +1 -1
- package/dist/auth/actor_search_action_specs.js +6 -6
- package/dist/auth/actor_search_actions.d.ts +4 -2
- package/dist/auth/actor_search_actions.d.ts.map +1 -1
- package/dist/auth/actor_search_actions.js +5 -5
- package/dist/auth/actor_search_queries.d.ts.map +1 -1
- package/dist/auth/admin_action_specs.d.ts +2 -2
- package/dist/auth/admin_action_specs.d.ts.map +1 -1
- package/dist/auth/admin_action_specs.js +55 -55
- package/dist/auth/admin_actions.d.ts +5 -5
- package/dist/auth/admin_actions.d.ts.map +1 -1
- package/dist/auth/admin_actions.js +45 -44
- package/dist/auth/all_action_spec_registries.d.ts.map +1 -1
- package/dist/auth/all_action_spec_registries.js +1 -1
- package/dist/auth/all_cell_actions.d.ts.map +1 -1
- package/dist/auth/all_cell_actions.js +1 -1
- package/dist/auth/api_token.d.ts.map +1 -1
- package/dist/auth/api_token_queries.d.ts +7 -2
- package/dist/auth/api_token_queries.d.ts.map +1 -1
- package/dist/auth/api_token_queries.js +8 -3
- package/dist/auth/app_settings_queries.d.ts.map +1 -1
- package/dist/auth/app_settings_schema.d.ts.map +1 -1
- package/dist/auth/app_settings_schema.js +3 -3
- package/dist/auth/audit_emitter.d.ts +28 -20
- package/dist/auth/audit_emitter.d.ts.map +1 -1
- package/dist/auth/audit_emitter.js +37 -19
- package/dist/auth/audit_log_ddl.js +1 -1
- package/dist/auth/audit_log_queries.d.ts.map +1 -1
- package/dist/auth/audit_log_queries.js +2 -2
- package/dist/auth/audit_log_route_schema.d.ts.map +1 -1
- package/dist/auth/audit_log_route_schema.js +1 -1
- package/dist/auth/audit_log_routes.d.ts.map +1 -1
- package/dist/auth/audit_log_routes.js +3 -3
- package/dist/auth/audit_log_schema.d.ts +2 -2
- package/dist/auth/audit_log_schema.d.ts.map +1 -1
- package/dist/auth/audit_log_schema.js +69 -68
- package/dist/auth/auth_ddl.js +3 -3
- package/dist/auth/auth_guard_resolver.d.ts.map +1 -1
- package/dist/auth/bearer_auth.d.ts.map +1 -1
- package/dist/auth/bootstrap_account.d.ts.map +1 -1
- package/dist/auth/bootstrap_account.js +5 -5
- package/dist/auth/bootstrap_route_schema.d.ts.map +1 -1
- package/dist/auth/bootstrap_route_schema.js +6 -6
- package/dist/auth/bootstrap_routes.d.ts.map +1 -1
- package/dist/auth/bootstrap_routes.js +7 -7
- package/dist/auth/cell_action_specs.d.ts +227 -2
- package/dist/auth/cell_action_specs.d.ts.map +1 -1
- package/dist/auth/cell_action_specs.js +117 -39
- package/dist/auth/cell_actions.d.ts +34 -11
- package/dist/auth/cell_actions.d.ts.map +1 -1
- package/dist/auth/cell_actions.js +155 -41
- package/dist/auth/cell_audit_action_specs.d.ts.map +1 -1
- package/dist/auth/cell_audit_action_specs.js +4 -4
- package/dist/auth/cell_audit_actions.d.ts.map +1 -1
- package/dist/auth/cell_audit_actions.js +3 -3
- package/dist/auth/cell_audit_events.d.ts +1 -1
- package/dist/auth/cell_audit_events.d.ts.map +1 -1
- package/dist/auth/cell_audit_events.js +7 -6
- package/dist/auth/cell_audit_metadata.d.ts +15 -0
- package/dist/auth/cell_audit_metadata.d.ts.map +1 -1
- package/dist/auth/cell_audit_metadata.js +13 -2
- package/dist/auth/cell_authorize.d.ts.map +1 -1
- package/dist/auth/cell_data_schema.d.ts.map +1 -1
- package/dist/auth/cell_data_schema.js +1 -1
- package/dist/auth/cell_field_action_specs.d.ts.map +1 -1
- package/dist/auth/cell_field_action_specs.js +16 -16
- package/dist/auth/cell_field_actions.d.ts +2 -2
- package/dist/auth/cell_field_actions.d.ts.map +1 -1
- package/dist/auth/cell_field_actions.js +11 -11
- package/dist/auth/cell_field_audit_metadata.d.ts.map +1 -1
- package/dist/auth/cell_field_audit_metadata.js +2 -2
- package/dist/auth/cell_grant_action_specs.d.ts.map +1 -1
- package/dist/auth/cell_grant_action_specs.js +15 -15
- package/dist/auth/cell_grant_actions.d.ts +2 -2
- package/dist/auth/cell_grant_actions.d.ts.map +1 -1
- package/dist/auth/cell_grant_actions.js +12 -12
- package/dist/auth/cell_grant_audit_metadata.d.ts.map +1 -1
- package/dist/auth/cell_grant_audit_metadata.js +3 -3
- package/dist/auth/cell_item_action_specs.d.ts +6 -2
- package/dist/auth/cell_item_action_specs.d.ts.map +1 -1
- package/dist/auth/cell_item_action_specs.js +25 -21
- package/dist/auth/cell_item_actions.d.ts +2 -2
- package/dist/auth/cell_item_actions.d.ts.map +1 -1
- package/dist/auth/cell_item_actions.js +14 -14
- package/dist/auth/cell_item_audit_metadata.d.ts.map +1 -1
- package/dist/auth/cell_item_audit_metadata.js +3 -3
- package/dist/auth/cell_relation_visibility.d.ts.map +1 -1
- package/dist/auth/cleanup.d.ts.map +1 -1
- package/dist/auth/cleanup.js +2 -2
- package/dist/auth/credential_type_schema.d.ts.map +1 -1
- package/dist/auth/credential_type_schema.js +5 -5
- package/dist/auth/daemon_token.d.ts.map +1 -1
- package/dist/auth/daemon_token_middleware.d.ts.map +1 -1
- package/dist/auth/daemon_token_middleware.js +2 -2
- package/dist/auth/deps.d.ts +20 -5
- package/dist/auth/deps.d.ts.map +1 -1
- package/dist/auth/grant_path_schema.d.ts.map +1 -1
- package/dist/auth/grant_path_schema.js +8 -8
- package/dist/auth/invite_queries.d.ts.map +1 -1
- package/dist/auth/invite_schema.d.ts.map +1 -1
- package/dist/auth/invite_schema.js +2 -2
- package/dist/auth/keyring.d.ts.map +1 -1
- package/dist/auth/keyring.js +1 -1
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +7 -7
- package/dist/auth/migrations.d.ts.map +1 -1
- package/dist/auth/migrations.js +22 -20
- package/dist/auth/password.d.ts.map +1 -1
- package/dist/auth/password_argon2.d.ts.map +1 -1
- package/dist/auth/password_argon2.js +2 -2
- package/dist/auth/request_context.d.ts.map +1 -1
- package/dist/auth/request_context.js +7 -7
- package/dist/auth/role_grant_offer_action_specs.d.ts.map +1 -1
- package/dist/auth/role_grant_offer_action_specs.js +35 -35
- package/dist/auth/role_grant_offer_actions.d.ts +7 -4
- package/dist/auth/role_grant_offer_actions.d.ts.map +1 -1
- package/dist/auth/role_grant_offer_actions.js +43 -43
- package/dist/auth/role_grant_offer_notifications.d.ts.map +1 -1
- package/dist/auth/role_grant_offer_notifications.js +13 -13
- package/dist/auth/role_grant_offer_queries.d.ts +1 -1
- package/dist/auth/role_grant_offer_queries.d.ts.map +1 -1
- package/dist/auth/role_grant_offer_queries.js +11 -11
- package/dist/auth/role_grant_offer_schema.d.ts.map +1 -1
- package/dist/auth/role_grant_offer_schema.js +7 -7
- package/dist/auth/role_grant_queries.d.ts.map +1 -1
- package/dist/auth/role_grant_queries.js +3 -3
- package/dist/auth/role_schema.d.ts.map +1 -1
- package/dist/auth/role_schema.js +7 -7
- package/dist/auth/scope_kind_schema.d.ts.map +1 -1
- package/dist/auth/self_service_role_action_specs.d.ts.map +1 -1
- package/dist/auth/self_service_role_action_specs.js +5 -5
- package/dist/auth/self_service_role_actions.d.ts +3 -3
- package/dist/auth/self_service_role_actions.d.ts.map +1 -1
- package/dist/auth/self_service_role_actions.js +9 -9
- package/dist/auth/session_cookie.d.ts.map +1 -1
- package/dist/auth/session_cookie.js +3 -3
- package/dist/auth/session_middleware.d.ts.map +1 -1
- package/dist/auth/session_middleware.js +4 -4
- package/dist/auth/session_queries.d.ts +14 -4
- package/dist/auth/session_queries.d.ts.map +1 -1
- package/dist/auth/session_queries.js +13 -3
- package/dist/auth/signup_route_schema.d.ts.map +1 -1
- package/dist/auth/signup_route_schema.js +6 -6
- package/dist/auth/signup_routes.d.ts.map +1 -1
- package/dist/auth/signup_routes.js +11 -11
- package/dist/auth/standard_action_specs.d.ts.map +1 -1
- package/dist/auth/standard_action_specs.js +1 -1
- package/dist/auth/standard_rpc_actions.d.ts +4 -4
- package/dist/auth/standard_rpc_actions.d.ts.map +1 -1
- package/dist/auth/standard_rpc_actions.js +3 -3
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +3 -3
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +1 -1
- package/dist/cli/logger.d.ts.map +1 -1
- package/dist/cli/logger.js +1 -1
- package/dist/cli/util.d.ts.map +1 -1
- package/dist/cli/util.js +1 -1
- package/dist/db/CLAUDE.md +16 -6
- package/dist/db/cell_audit_queries.d.ts.map +1 -1
- package/dist/db/cell_audit_queries.js +1 -1
- package/dist/db/cell_ddl.d.ts +14 -1
- package/dist/db/cell_ddl.d.ts.map +1 -1
- package/dist/db/cell_ddl.js +26 -6
- package/dist/db/cell_field_queries.d.ts.map +1 -1
- package/dist/db/cell_grant_queries.d.ts.map +1 -1
- package/dist/db/cell_grant_queries.js +1 -1
- package/dist/db/cell_history_ddl.d.ts.map +1 -1
- package/dist/db/cell_history_ddl.js +4 -4
- package/dist/db/cell_item_queries.d.ts.map +1 -1
- package/dist/db/cell_queries.d.ts +46 -1
- package/dist/db/cell_queries.d.ts.map +1 -1
- package/dist/db/cell_queries.js +42 -5
- package/dist/db/create_db.d.ts.map +1 -1
- package/dist/db/create_db.js +1 -1
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db_pg.d.ts.map +1 -1
- package/dist/db/db_pg.js +1 -1
- package/dist/db/db_pglite.d.ts.map +1 -1
- package/dist/db/db_pglite.js +1 -1
- package/dist/db/fact_ddl.d.ts.map +1 -1
- package/dist/db/fact_ddl.js +3 -3
- package/dist/db/fact_disk_storage.d.ts +1 -1
- package/dist/db/fact_disk_storage.d.ts.map +1 -1
- package/dist/db/fact_disk_storage.js +6 -6
- package/dist/db/fact_queries.d.ts +1 -1
- package/dist/db/fact_queries.d.ts.map +1 -1
- package/dist/db/fact_queries.js +2 -2
- package/dist/db/fact_store.d.ts +1 -1
- package/dist/db/fact_store.d.ts.map +1 -1
- package/dist/db/fact_store.js +9 -9
- package/dist/db/fact_store_errors.d.ts.map +1 -1
- package/dist/db/file_fact_url.d.ts +1 -1
- package/dist/db/file_fact_url.d.ts.map +1 -1
- package/dist/db/file_fact_url.js +1 -1
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/pg_error.d.ts.map +1 -1
- package/dist/db/query_deps.d.ts.map +1 -1
- package/dist/db/schema_ready.d.ts.map +1 -1
- package/dist/db/schema_ready.js +2 -2
- package/dist/db/status.d.ts.map +1 -1
- package/dist/db/status.js +6 -6
- package/dist/dev/setup.d.ts.map +1 -1
- package/dist/dev/setup.js +6 -6
- package/dist/env/dotenv.d.ts.map +1 -1
- package/dist/env/load.d.ts.map +1 -1
- package/dist/env/resolve.d.ts.map +1 -1
- package/dist/hono_context.d.ts.map +1 -1
- package/dist/hono_context.js +2 -2
- package/dist/http/auth_shape.d.ts.map +1 -1
- package/dist/http/auth_shape.js +6 -6
- package/dist/http/client_ip.d.ts.map +1 -1
- package/dist/http/common_routes.d.ts.map +1 -1
- package/dist/http/common_routes.js +8 -8
- package/dist/http/db_routes.d.ts.map +1 -1
- package/dist/http/db_routes.js +27 -23
- package/dist/http/error_schemas.d.ts +1 -1
- package/dist/http/error_schemas.d.ts.map +1 -1
- package/dist/http/error_schemas.js +13 -13
- package/dist/http/jsonrpc.d.ts.map +1 -1
- package/dist/http/jsonrpc.js +9 -9
- package/dist/http/jsonrpc_errors.d.ts.map +1 -1
- package/dist/http/jsonrpc_errors.js +21 -21
- package/dist/http/jsonrpc_helpers.d.ts.map +1 -1
- package/dist/http/jsonrpc_helpers.js +7 -7
- package/dist/http/middleware_spec.d.ts.map +1 -1
- package/dist/http/origin.d.ts.map +1 -1
- package/dist/http/pending_effects.d.ts.map +1 -1
- package/dist/http/proxy.d.ts.map +1 -1
- package/dist/http/proxy.js +1 -1
- package/dist/http/route_spec.d.ts.map +1 -1
- package/dist/http/route_spec.js +6 -6
- package/dist/http/schema_helpers.d.ts.map +1 -1
- package/dist/http/schema_helpers.js +1 -1
- package/dist/http/surface.d.ts.map +1 -1
- package/dist/http/surface.js +11 -11
- package/dist/http/surface_query.d.ts.map +1 -1
- package/dist/http/surface_query.js +1 -1
- package/dist/primitive_schemas.d.ts.map +1 -1
- package/dist/primitive_schemas.js +1 -1
- package/dist/rate_limiter.d.ts.map +1 -1
- package/dist/rate_limiter.js +4 -4
- package/dist/realtime/sse.d.ts.map +1 -1
- package/dist/realtime/sse.js +2 -2
- package/dist/realtime/sse_auth_guard.d.ts +4 -4
- package/dist/realtime/sse_auth_guard.d.ts.map +1 -1
- package/dist/realtime/sse_auth_guard.js +8 -8
- package/dist/realtime/subscriber_registry.d.ts.map +1 -1
- package/dist/runtime/deno.d.ts.map +1 -1
- package/dist/runtime/deno.js +7 -7
- package/dist/runtime/deps.d.ts.map +1 -1
- package/dist/runtime/fs.d.ts.map +1 -1
- package/dist/runtime/mock.d.ts.map +1 -1
- package/dist/runtime/mock.js +3 -3
- package/dist/runtime/node.d.ts.map +1 -1
- package/dist/runtime/node.js +7 -7
- package/dist/schema_meta.d.ts.map +1 -1
- package/dist/server/app_backend.d.ts +3 -3
- package/dist/server/app_backend.d.ts.map +1 -1
- package/dist/server/app_backend.js +3 -3
- package/dist/server/app_server.d.ts +6 -6
- package/dist/server/app_server.d.ts.map +1 -1
- package/dist/server/app_server.js +32 -32
- package/dist/server/app_server_context.d.ts.map +1 -1
- package/dist/server/env.d.ts.map +1 -1
- package/dist/server/env.js +9 -9
- package/dist/server/fact_write.d.ts +1 -1
- package/dist/server/fact_write.d.ts.map +1 -1
- package/dist/server/fact_write.js +2 -1
- package/dist/server/file_fact_fetcher.d.ts.map +1 -1
- package/dist/server/file_fact_fetcher.js +1 -1
- package/dist/server/serve_fact_route.d.ts.map +1 -1
- package/dist/server/serve_fact_route.js +15 -13
- package/dist/server/startup.d.ts.map +1 -1
- package/dist/server/static.d.ts.map +1 -1
- package/dist/server/validate_nginx.js +1 -1
- package/dist/server/x_accel.d.ts.map +1 -1
- package/dist/server/x_accel.js +1 -1
- package/dist/testing/CLAUDE.md +27 -18
- package/dist/testing/admin_integration.d.ts.map +1 -1
- package/dist/testing/admin_integration.js +62 -62
- package/dist/testing/adversarial_404.d.ts.map +1 -1
- package/dist/testing/adversarial_404.js +1 -1
- package/dist/testing/adversarial_headers.d.ts.map +1 -1
- package/dist/testing/adversarial_headers.js +15 -15
- package/dist/testing/adversarial_input.d.ts.map +1 -1
- package/dist/testing/adversarial_input.js +22 -22
- package/dist/testing/app_server.d.ts.map +1 -1
- package/dist/testing/app_server.js +32 -32
- package/dist/testing/assertions.d.ts.map +1 -1
- package/dist/testing/attack_surface.d.ts.map +1 -1
- package/dist/testing/attack_surface.js +12 -12
- package/dist/testing/audit_completeness.d.ts.map +1 -1
- package/dist/testing/audit_completeness.js +41 -41
- package/dist/testing/audit_drift_guard.d.ts +3 -1
- package/dist/testing/audit_drift_guard.d.ts.map +1 -1
- package/dist/testing/audit_drift_guard.js +12 -6
- package/dist/testing/auth_apps.d.ts.map +1 -1
- package/dist/testing/auth_apps.js +4 -4
- package/dist/testing/bootstrap_success.d.ts.map +1 -1
- package/dist/testing/bootstrap_success.js +11 -11
- package/dist/testing/connection_closer_helpers.d.ts.map +1 -1
- package/dist/testing/connection_closer_helpers.js +1 -1
- package/dist/testing/cross_backend/account_lifecycle.d.ts.map +1 -1
- package/dist/testing/cross_backend/account_lifecycle.js +1 -1
- package/dist/testing/cross_backend/action_manifest.d.ts.map +1 -1
- package/dist/testing/cross_backend/action_manifest.js +4 -4
- package/dist/testing/cross_backend/action_manifest_parity.d.ts.map +1 -1
- package/dist/testing/cross_backend/actor_lookup.d.ts.map +1 -1
- package/dist/testing/cross_backend/actor_lookup.js +3 -3
- package/dist/testing/cross_backend/actor_search.d.ts.map +1 -1
- package/dist/testing/cross_backend/actor_search.js +5 -5
- package/dist/testing/cross_backend/app_settings.d.ts.map +1 -1
- package/dist/testing/cross_backend/app_settings.js +6 -6
- package/dist/testing/cross_backend/backend_config.d.ts.map +1 -1
- package/dist/testing/cross_backend/bench/bench_report.d.ts.map +1 -1
- package/dist/testing/cross_backend/bench/bench_report.js +5 -5
- package/dist/testing/cross_backend/bench/run_cross_impl_bench.d.ts.map +1 -1
- package/dist/testing/cross_backend/bench/run_cross_impl_bench.js +2 -2
- package/dist/testing/cross_backend/bench/scenario.d.ts.map +1 -1
- package/dist/testing/cross_backend/bench/scenario.js +1 -1
- package/dist/testing/cross_backend/body_size.d.ts.map +1 -1
- package/dist/testing/cross_backend/body_size.js +1 -1
- package/dist/testing/cross_backend/bootstrap_backend.d.ts.map +1 -1
- package/dist/testing/cross_backend/bootstrap_backend.js +2 -2
- package/dist/testing/cross_backend/build_test_backend_paths.js +1 -1
- package/dist/testing/cross_backend/capabilities.js +2 -2
- package/dist/testing/cross_backend/cell_cross_helpers.d.ts.map +1 -1
- package/dist/testing/cross_backend/cell_crud.d.ts.map +1 -1
- package/dist/testing/cross_backend/cell_crud.js +5 -2
- package/dist/testing/cross_backend/cell_gated_create.d.ts +24 -0
- package/dist/testing/cross_backend/cell_gated_create.d.ts.map +1 -1
- package/dist/testing/cross_backend/cell_gated_create.js +178 -35
- package/dist/testing/cross_backend/cell_grant_role.d.ts.map +1 -1
- package/dist/testing/cross_backend/cell_grant_role.js +2 -2
- package/dist/testing/cross_backend/cell_relations.d.ts.map +1 -1
- package/dist/testing/cross_backend/cell_relations.js +13 -13
- package/dist/testing/cross_backend/conformance_case.d.ts.map +1 -1
- package/dist/testing/cross_backend/conformance_case.js +11 -11
- package/dist/testing/cross_backend/conformance_table.d.ts.map +1 -1
- package/dist/testing/cross_backend/conformance_table.js +11 -11
- package/dist/testing/cross_backend/cookie_attributes.d.ts.map +1 -1
- package/dist/testing/cross_backend/cookie_attributes.js +4 -4
- package/dist/testing/cross_backend/create_cross_backend_global_setup.d.ts +1 -1
- package/dist/testing/cross_backend/create_cross_backend_global_setup.d.ts.map +1 -1
- package/dist/testing/cross_backend/create_cross_backend_global_setup.js +1 -1
- package/dist/testing/cross_backend/create_dual_spawn_global_setup.d.ts +1 -1
- package/dist/testing/cross_backend/create_dual_spawn_global_setup.d.ts.map +1 -1
- package/dist/testing/cross_backend/create_dual_spawn_global_setup.js +1 -1
- package/dist/testing/cross_backend/credential_header_robustness.js +1 -1
- package/dist/testing/cross_backend/default_backend_configs.d.ts.map +1 -1
- package/dist/testing/cross_backend/default_backend_configs.js +12 -12
- package/dist/testing/cross_backend/default_spine_surface.d.ts.map +1 -1
- package/dist/testing/cross_backend/default_spine_surface.js +9 -9
- package/dist/testing/cross_backend/expected_schema.json +3 -0
- package/dist/testing/cross_backend/fact_serving.d.ts.map +1 -1
- package/dist/testing/cross_backend/fact_serving.js +2 -2
- package/dist/testing/cross_backend/full_spine_mount.d.ts.map +1 -1
- package/dist/testing/cross_backend/full_spine_mount.js +11 -8
- package/dist/testing/cross_backend/identity_parity.d.ts.map +1 -1
- package/dist/testing/cross_backend/identity_parity.js +28 -24
- package/dist/testing/cross_backend/in_process_setup.d.ts.map +1 -1
- package/dist/testing/cross_backend/in_process_setup.js +9 -9
- package/dist/testing/cross_backend/login_security.d.ts.map +1 -1
- package/dist/testing/cross_backend/login_security.js +2 -2
- package/dist/testing/cross_backend/make_cross_backend_project.d.ts +1 -1
- package/dist/testing/cross_backend/make_cross_backend_project.d.ts.map +1 -1
- package/dist/testing/cross_backend/make_cross_backend_project.js +3 -3
- package/dist/testing/cross_backend/method_coverage.d.ts.map +1 -1
- package/dist/testing/cross_backend/origin.d.ts.map +1 -1
- package/dist/testing/cross_backend/origin.js +4 -4
- package/dist/testing/cross_backend/peer_ping_ws.d.ts.map +1 -1
- package/dist/testing/cross_backend/peer_ping_ws.js +6 -6
- package/dist/testing/cross_backend/ready.d.ts.map +1 -1
- package/dist/testing/cross_backend/role_grant_offer_enumeration.d.ts.map +1 -1
- package/dist/testing/cross_backend/role_grant_offer_enumeration.js +1 -1
- package/dist/testing/cross_backend/role_grant_offer_notification_ws.d.ts.map +1 -1
- package/dist/testing/cross_backend/role_grant_offer_notification_ws.js +1 -1
- package/dist/testing/cross_backend/role_grant_participation.d.ts.map +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 +5 -5
- package/dist/testing/cross_backend/setup.d.ts.map +1 -1
- package/dist/testing/cross_backend/setup.js +36 -36
- package/dist/testing/cross_backend/spawn_backend.d.ts.map +1 -1
- package/dist/testing/cross_backend/spawn_backend.js +1 -1
- package/dist/testing/cross_backend/sse_round_trip.d.ts.map +1 -1
- package/dist/testing/cross_backend/sse_round_trip.js +10 -7
- package/dist/testing/cross_backend/standard.d.ts.map +1 -1
- package/dist/testing/cross_backend/standard.js +5 -5
- package/dist/testing/cross_backend/test_cell_gated_create_authorize.d.ts +12 -7
- 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 +54 -15
- package/dist/testing/cross_backend/testing_backdoor.d.ts.map +1 -1
- package/dist/testing/cross_backend/testing_backdoor.js +7 -7
- package/dist/testing/cross_backend/testing_reset_actions.d.ts.map +1 -1
- package/dist/testing/cross_backend/testing_reset_actions.js +24 -23
- package/dist/testing/cross_backend/testing_server_bun.d.ts.map +1 -1
- package/dist/testing/cross_backend/testing_server_bun.js +3 -3
- package/dist/testing/cross_backend/testing_server_core.d.ts.map +1 -1
- package/dist/testing/cross_backend/testing_server_core.js +1 -1
- package/dist/testing/cross_backend/testing_server_deno.d.ts.map +1 -1
- package/dist/testing/cross_backend/testing_server_deno.js +1 -1
- package/dist/testing/cross_backend/testing_server_node.d.ts.map +1 -1
- package/dist/testing/cross_backend/testing_server_node.js +3 -3
- package/dist/testing/cross_backend/ts_spine_backend_config.d.ts.map +1 -1
- package/dist/testing/cross_backend/ts_spine_backend_config.js +13 -13
- package/dist/testing/cross_backend/ws_round_trip.d.ts.map +1 -1
- package/dist/testing/cross_backend/ws_round_trip.js +2 -2
- package/dist/testing/data_exposure.d.ts.map +1 -1
- package/dist/testing/data_exposure.js +8 -8
- package/dist/testing/db.d.ts.map +1 -1
- package/dist/testing/db.js +3 -3
- package/dist/testing/db_entities.d.ts.map +1 -1
- package/dist/testing/db_entities.js +1 -1
- package/dist/testing/entities.d.ts.map +1 -1
- package/dist/testing/entities.js +5 -5
- package/dist/testing/error_coverage.d.ts.map +1 -1
- package/dist/testing/integration.d.ts.map +1 -1
- package/dist/testing/integration.js +106 -106
- package/dist/testing/integration_helpers.d.ts.map +1 -1
- package/dist/testing/integration_helpers.js +3 -3
- package/dist/testing/middleware.d.ts.map +1 -1
- package/dist/testing/middleware.js +11 -11
- package/dist/testing/mock_fs.js +1 -1
- package/dist/testing/rate_limiting.d.ts.map +1 -1
- package/dist/testing/rate_limiting.js +23 -23
- package/dist/testing/role_grant_helpers.d.ts.map +1 -1
- package/dist/testing/role_grant_helpers.js +3 -3
- package/dist/testing/round_trip.d.ts.map +1 -1
- package/dist/testing/round_trip.js +6 -6
- package/dist/testing/rpc_attack_surface.d.ts.map +1 -1
- package/dist/testing/rpc_attack_surface.js +12 -12
- package/dist/testing/rpc_helpers.d.ts.map +1 -1
- package/dist/testing/rpc_helpers.js +11 -11
- package/dist/testing/rpc_round_trip.d.ts.map +1 -1
- package/dist/testing/rpc_round_trip.js +3 -3
- package/dist/testing/schema_generators.d.ts.map +1 -1
- package/dist/testing/schema_generators.js +3 -3
- package/dist/testing/schema_introspect.d.ts.map +1 -1
- package/dist/testing/schema_introspect.js +12 -12
- package/dist/testing/schema_parity.d.ts.map +1 -1
- package/dist/testing/schema_parity.js +7 -7
- package/dist/testing/schema_ready_fixture.d.ts.map +1 -1
- package/dist/testing/sse_round_trip.d.ts.map +1 -1
- package/dist/testing/sse_round_trip.js +8 -8
- package/dist/testing/standard.d.ts.map +1 -1
- package/dist/testing/standard.js +8 -8
- package/dist/testing/stubs.d.ts +6 -6
- package/dist/testing/stubs.d.ts.map +1 -1
- package/dist/testing/stubs.js +26 -23
- package/dist/testing/surface_invariants.d.ts.map +1 -1
- package/dist/testing/surface_invariants.js +5 -5
- package/dist/testing/testing_rate_limiter.d.ts.map +1 -1
- package/dist/testing/transports/bootstrap.d.ts.map +1 -1
- package/dist/testing/transports/bootstrap.js +4 -4
- package/dist/testing/transports/fetch_transport.d.ts.map +1 -1
- package/dist/testing/transports/sse_frame_reader.d.ts.map +1 -1
- package/dist/testing/transports/sse_transport.js +1 -1
- package/dist/testing/transports/ws_client.d.ts.map +1 -1
- package/dist/testing/transports/ws_client.js +1 -1
- package/dist/testing/transports/ws_transport.js +4 -4
- package/dist/testing/ws_round_trip.d.ts.map +1 -1
- package/dist/testing/ws_round_trip.js +21 -21
- package/dist/ui/AccountSessions.svelte +11 -11
- package/dist/ui/AdminAccounts.svelte +10 -10
- package/dist/ui/AdminAuditLog.svelte +14 -14
- package/dist/ui/AdminInvites.svelte +13 -13
- package/dist/ui/AdminOverview.svelte +22 -22
- package/dist/ui/AdminRoleGrantHistory.svelte +11 -11
- package/dist/ui/AdminSessions.svelte +12 -12
- package/dist/ui/AdminSettings.svelte +1 -1
- package/dist/ui/AdminSurface.svelte +3 -3
- package/dist/ui/AppShell.svelte +8 -8
- package/dist/ui/AppShell.svelte.d.ts.map +1 -1
- package/dist/ui/BootstrapForm.svelte +9 -9
- package/dist/ui/CLAUDE.md +1 -1
- package/dist/ui/ColumnLayout.svelte +2 -2
- package/dist/ui/ColumnLayout.svelte.d.ts.map +1 -1
- package/dist/ui/ConfirmButton.svelte +8 -8
- package/dist/ui/ConfirmButton.svelte.d.ts.map +1 -1
- package/dist/ui/Datatable.svelte +6 -6
- package/dist/ui/Datatable.svelte.d.ts.map +1 -1
- package/dist/ui/LoginForm.svelte +6 -6
- package/dist/ui/LogoutButton.svelte +2 -2
- package/dist/ui/LogoutButton.svelte.d.ts.map +1 -1
- package/dist/ui/MenuLink.svelte +5 -5
- package/dist/ui/MenuLink.svelte.d.ts.map +1 -1
- package/dist/ui/OpenSignupToggle.svelte +2 -2
- package/dist/ui/PopoverButton.svelte +10 -10
- package/dist/ui/PopoverButton.svelte.d.ts.map +1 -1
- package/dist/ui/RoleGrantOfferForm.svelte +8 -11
- package/dist/ui/RoleGrantOfferForm.svelte.d.ts.map +1 -1
- package/dist/ui/RoleGrantOfferHistory.svelte +11 -11
- package/dist/ui/RoleGrantOfferHistory.svelte.d.ts.map +1 -1
- package/dist/ui/RoleGrantOfferInbox.svelte +6 -6
- package/dist/ui/RoleGrantOfferInbox.svelte.d.ts.map +1 -1
- package/dist/ui/SignupForm.svelte +9 -9
- package/dist/ui/SurfaceExplorer.svelte +11 -11
- package/dist/ui/SurfaceExplorer.svelte.d.ts.map +1 -1
- package/dist/ui/account_sessions_state.svelte.d.ts.map +1 -1
- package/dist/ui/admin_accounts_state.svelte.d.ts.map +1 -1
- package/dist/ui/admin_accounts_state.svelte.js +2 -2
- package/dist/ui/admin_invites_state.svelte.d.ts.map +1 -1
- package/dist/ui/admin_rpc_adapters.d.ts.map +1 -1
- package/dist/ui/admin_rpc_adapters.js +5 -5
- package/dist/ui/admin_sessions_state.svelte.d.ts.map +1 -1
- package/dist/ui/app_settings_state.svelte.d.ts.map +1 -1
- package/dist/ui/async_slot.svelte.d.ts.map +1 -1
- package/dist/ui/audit_log_state.svelte.d.ts.map +1 -1
- package/dist/ui/audit_log_state.svelte.js +1 -1
- package/dist/ui/auth_state.svelte.js +4 -4
- package/dist/ui/form_state.svelte.d.ts.map +1 -1
- package/dist/ui/format_scope.d.ts.map +1 -1
- package/dist/ui/keyed_async_slot.svelte.d.ts.map +1 -1
- package/dist/ui/popover.svelte.d.ts.map +1 -1
- package/dist/ui/popover.svelte.js +1 -1
- package/dist/ui/position_helpers.js +1 -1
- package/dist/ui/role_grant_offers_state.svelte.d.ts.map +1 -1
- package/dist/ui/role_grant_offers_state.svelte.js +1 -1
- package/dist/ui/table_state.svelte.d.ts.map +1 -1
- package/dist/ui/ui_fetch.d.ts.map +1 -1
- package/dist/ui/ui_format.js +2 -2
- package/package.json +13 -12
|
@@ -16,8 +16,8 @@ import { test, assert, describe } from 'vitest';
|
|
|
16
16
|
import { z } from 'zod';
|
|
17
17
|
import { zod_unwrap_to_object, zod_extract_fields } from '@fuzdev/fuz_util/zod.ts';
|
|
18
18
|
import { is_null_schema } from '../http/schema_helpers.js';
|
|
19
|
-
import { filter_routes_with_input, filter_routes_with_params, filter_routes_with_query
|
|
20
|
-
import { ValidationError, ERROR_INVALID_REQUEST_BODY, ERROR_INVALID_JSON_BODY, ERROR_INVALID_ROUTE_PARAMS, ERROR_INVALID_QUERY_PARAMS
|
|
19
|
+
import { filter_routes_with_input, filter_routes_with_params, filter_routes_with_query } from '../http/surface_query.js';
|
|
20
|
+
import { ValidationError, ERROR_INVALID_REQUEST_BODY, ERROR_INVALID_JSON_BODY, ERROR_INVALID_ROUTE_PARAMS, ERROR_INVALID_QUERY_PARAMS } from '../http/error_schemas.js';
|
|
21
21
|
import { create_auth_test_apps, select_auth_app } from './auth_apps.js';
|
|
22
22
|
import { detect_format, generate_valid_value, resolve_valid_path } from './schema_generators.js';
|
|
23
23
|
// --- Payload generation ---
|
|
@@ -113,7 +113,7 @@ export const generate_input_test_cases = (input_schema) => {
|
|
|
113
113
|
cases.push({
|
|
114
114
|
label: 'non-object body (array)',
|
|
115
115
|
body: [1, 2, 3],
|
|
116
|
-
expected_error: ERROR_INVALID_JSON_BODY
|
|
116
|
+
expected_error: ERROR_INVALID_JSON_BODY
|
|
117
117
|
});
|
|
118
118
|
// whole-body structural: extra unknown key (enforces strictObject)
|
|
119
119
|
// only emit if the schema rejects unknown keys (i.e. uses z.strictObject)
|
|
@@ -122,7 +122,7 @@ export const generate_input_test_cases = (input_schema) => {
|
|
|
122
122
|
cases.push({
|
|
123
123
|
label: 'extra unknown key',
|
|
124
124
|
body: { ...base, __adversarial_extra: 'should_be_rejected' },
|
|
125
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
125
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
126
126
|
});
|
|
127
127
|
}
|
|
128
128
|
for (const field of fields) {
|
|
@@ -137,7 +137,7 @@ export const generate_input_test_cases = (input_schema) => {
|
|
|
137
137
|
cases.push({
|
|
138
138
|
label: `missing: ${field.name}`,
|
|
139
139
|
body: without,
|
|
140
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
140
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
141
141
|
});
|
|
142
142
|
}
|
|
143
143
|
// one wrong-type value
|
|
@@ -146,7 +146,7 @@ export const generate_input_test_cases = (input_schema) => {
|
|
|
146
146
|
cases.push({
|
|
147
147
|
label: `wrong type: ${field.name} (${wrong.label})`,
|
|
148
148
|
body: { ...base, [field.name]: wrong.value },
|
|
149
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
149
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
150
150
|
});
|
|
151
151
|
}
|
|
152
152
|
// null for required non-nullable fields
|
|
@@ -154,7 +154,7 @@ export const generate_input_test_cases = (input_schema) => {
|
|
|
154
154
|
cases.push({
|
|
155
155
|
label: `null: ${field.name}`,
|
|
156
156
|
body: { ...base, [field.name]: null },
|
|
157
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
157
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
158
158
|
});
|
|
159
159
|
}
|
|
160
160
|
// format violation for constrained string fields
|
|
@@ -165,7 +165,7 @@ export const generate_input_test_cases = (input_schema) => {
|
|
|
165
165
|
cases.push({
|
|
166
166
|
label: `format: ${field.name} (${violation.label})`,
|
|
167
167
|
body: { ...base, [field.name]: violation.value },
|
|
168
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
168
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
169
169
|
});
|
|
170
170
|
}
|
|
171
171
|
}
|
|
@@ -180,14 +180,14 @@ export const generate_input_test_cases = (input_schema) => {
|
|
|
180
180
|
cases.push({
|
|
181
181
|
label: `empty string: ${field.name}`,
|
|
182
182
|
body: { ...base, [field.name]: '' },
|
|
183
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
183
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
184
184
|
});
|
|
185
185
|
}
|
|
186
186
|
if (typeof json.maxLength === 'number') {
|
|
187
187
|
cases.push({
|
|
188
188
|
label: `over maxLength: ${field.name} (${json.maxLength + 1} chars)`,
|
|
189
189
|
body: { ...base, [field.name]: 'x'.repeat(json.maxLength + 1) },
|
|
190
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
190
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
191
191
|
});
|
|
192
192
|
}
|
|
193
193
|
}
|
|
@@ -197,28 +197,28 @@ export const generate_input_test_cases = (input_schema) => {
|
|
|
197
197
|
cases.push({
|
|
198
198
|
label: `below minimum: ${field.name} (${json.minimum - 1})`,
|
|
199
199
|
body: { ...base, [field.name]: json.minimum - 1 },
|
|
200
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
200
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
201
201
|
});
|
|
202
202
|
}
|
|
203
203
|
if (typeof json.maximum === 'number') {
|
|
204
204
|
cases.push({
|
|
205
205
|
label: `above maximum: ${field.name} (${json.maximum + 1})`,
|
|
206
206
|
body: { ...base, [field.name]: json.maximum + 1 },
|
|
207
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
207
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
208
208
|
});
|
|
209
209
|
}
|
|
210
210
|
if (typeof json.exclusiveMinimum === 'number') {
|
|
211
211
|
cases.push({
|
|
212
212
|
label: `at exclusive minimum: ${field.name} (${json.exclusiveMinimum})`,
|
|
213
213
|
body: { ...base, [field.name]: json.exclusiveMinimum },
|
|
214
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
214
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
215
215
|
});
|
|
216
216
|
}
|
|
217
217
|
if (typeof json.exclusiveMaximum === 'number') {
|
|
218
218
|
cases.push({
|
|
219
219
|
label: `at exclusive maximum: ${field.name} (${json.exclusiveMaximum})`,
|
|
220
220
|
body: { ...base, [field.name]: json.exclusiveMaximum },
|
|
221
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
221
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
222
222
|
});
|
|
223
223
|
}
|
|
224
224
|
// 0 and negative for positive-only fields
|
|
@@ -226,12 +226,12 @@ export const generate_input_test_cases = (input_schema) => {
|
|
|
226
226
|
cases.push({
|
|
227
227
|
label: `zero for positive-only: ${field.name}`,
|
|
228
228
|
body: { ...base, [field.name]: 0 },
|
|
229
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
229
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
230
230
|
});
|
|
231
231
|
cases.push({
|
|
232
232
|
label: `negative for positive-only: ${field.name}`,
|
|
233
233
|
body: { ...base, [field.name]: -1 },
|
|
234
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
234
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
235
235
|
});
|
|
236
236
|
}
|
|
237
237
|
}
|
|
@@ -241,7 +241,7 @@ export const generate_input_test_cases = (input_schema) => {
|
|
|
241
241
|
cases.push({
|
|
242
242
|
label: `empty array for minItems > 0: ${field.name}`,
|
|
243
243
|
body: { ...base, [field.name]: [] },
|
|
244
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
244
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
245
245
|
});
|
|
246
246
|
}
|
|
247
247
|
if (typeof json.maxItems === 'number') {
|
|
@@ -249,7 +249,7 @@ export const generate_input_test_cases = (input_schema) => {
|
|
|
249
249
|
cases.push({
|
|
250
250
|
label: `over maxItems: ${field.name} (${json.maxItems + 1} items)`,
|
|
251
251
|
body: { ...base, [field.name]: Array.from({ length: json.maxItems + 1 }, () => null) },
|
|
252
|
-
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
252
|
+
expected_error: ERROR_INVALID_REQUEST_BODY
|
|
253
253
|
});
|
|
254
254
|
}
|
|
255
255
|
}
|
|
@@ -292,7 +292,7 @@ export const generate_params_test_cases = (params_schema) => {
|
|
|
292
292
|
if (violation) {
|
|
293
293
|
cases.push({
|
|
294
294
|
label: `${violation.label}: param ${field.name}`,
|
|
295
|
-
params: { ...base_params, [field.name]: violation.value }
|
|
295
|
+
params: { ...base_params, [field.name]: violation.value }
|
|
296
296
|
});
|
|
297
297
|
}
|
|
298
298
|
}
|
|
@@ -331,7 +331,7 @@ export const generate_query_test_cases = (query_schema) => {
|
|
|
331
331
|
}
|
|
332
332
|
cases.push({
|
|
333
333
|
label: `missing query: ${field.name}`,
|
|
334
|
-
query: without
|
|
334
|
+
query: without
|
|
335
335
|
});
|
|
336
336
|
}
|
|
337
337
|
// format violation for constrained string fields
|
|
@@ -343,7 +343,7 @@ export const generate_query_test_cases = (query_schema) => {
|
|
|
343
343
|
if (violation) {
|
|
344
344
|
cases.push({
|
|
345
345
|
label: `${violation.label}: query ${field.name}`,
|
|
346
|
-
query: { ...base_query, [field.name]: violation.value }
|
|
346
|
+
query: { ...base_query, [field.name]: violation.value }
|
|
347
347
|
});
|
|
348
348
|
}
|
|
349
349
|
}
|
|
@@ -423,7 +423,7 @@ export const describe_adversarial_input = (options) => {
|
|
|
423
423
|
res = await app.request(base_url, {
|
|
424
424
|
method: route.method,
|
|
425
425
|
headers: { 'Content-Type': 'application/json' },
|
|
426
|
-
body: JSON.stringify(tc.body)
|
|
426
|
+
body: JSON.stringify(tc.body)
|
|
427
427
|
});
|
|
428
428
|
}
|
|
429
429
|
assert.strictEqual(res.status, 400, `Expected 400 for ${key} [${tc.label}], got ${res.status}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app_server.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/app_server.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"app_server.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/app_server.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,14 +7,14 @@ import { create_validated_keyring } from '../auth/keyring.js';
|
|
|
7
7
|
import { generate_api_token } from '../auth/api_token.js';
|
|
8
8
|
import { query_create_account_with_actor } from '../auth/account_queries.js';
|
|
9
9
|
import { query_create_role_grant } from '../auth/role_grant_queries.js';
|
|
10
|
-
import { generate_session_token, hash_session_token, AUTH_SESSION_LIFETIME_MS, query_create_session
|
|
10
|
+
import { generate_session_token, hash_session_token, AUTH_SESSION_LIFETIME_MS, query_create_session } from '../auth/session_queries.js';
|
|
11
11
|
import { query_create_api_token } from '../auth/api_token_queries.js';
|
|
12
12
|
import { create_session_cookie_value } from '../auth/session_cookie.js';
|
|
13
13
|
import { run_migrations } from '../db/migrate.js';
|
|
14
14
|
import { auth_migration_ns } from '../auth/migrations.js';
|
|
15
15
|
import { default_audit_factory } from '../server/app_backend.js';
|
|
16
|
-
import { create_app_server
|
|
17
|
-
import { generate_daemon_token, DAEMON_TOKEN_HEADER
|
|
16
|
+
import { create_app_server } from '../server/app_server.js';
|
|
17
|
+
import { generate_daemon_token, DAEMON_TOKEN_HEADER } from '../auth/daemon_token.js';
|
|
18
18
|
import { create_pglite_factory } from './db.js';
|
|
19
19
|
/**
|
|
20
20
|
* Fast password stub for tests that don't exercise login/password flows.
|
|
@@ -25,7 +25,7 @@ import { create_pglite_factory } from './db.js';
|
|
|
25
25
|
export const stub_password_deps = {
|
|
26
26
|
hash_password: async (p) => `stub_hash_${p}`,
|
|
27
27
|
verify_password: async (p, h) => h === `stub_hash_${p}`,
|
|
28
|
-
verify_dummy: async () => false
|
|
28
|
+
verify_dummy: async () => false
|
|
29
29
|
};
|
|
30
30
|
/** 64-hex-char test cookie secret — deterministic, never used in production. */
|
|
31
31
|
export const TEST_COOKIE_SECRET = 'a'.repeat(64);
|
|
@@ -78,13 +78,13 @@ const resolve_fallback_factory = (migration_namespaces) => {
|
|
|
78
78
|
* `role_grant` (one per role), `api_token`, and `auth_session`.
|
|
79
79
|
*/
|
|
80
80
|
export const create_test_account_with_credentials = async (options) => {
|
|
81
|
-
const { db, keyring, session_options, password, username = 'keeper', password_value = DEFAULT_TEST_PASSWORD, roles = [], email
|
|
81
|
+
const { db, keyring, session_options, password, username = 'keeper', password_value = DEFAULT_TEST_PASSWORD, roles = [], email } = options;
|
|
82
82
|
const deps = { db };
|
|
83
83
|
const password_hash = await password.hash_password(password_value);
|
|
84
84
|
const { account, actor } = await query_create_account_with_actor(deps, {
|
|
85
85
|
username,
|
|
86
86
|
password_hash,
|
|
87
|
-
...(email !== undefined && { email })
|
|
87
|
+
...(email !== undefined && { email })
|
|
88
88
|
});
|
|
89
89
|
// Grant roles
|
|
90
90
|
for (const role of roles) {
|
|
@@ -101,13 +101,13 @@ export const create_test_account_with_credentials = async (options) => {
|
|
|
101
101
|
keyring,
|
|
102
102
|
session_options,
|
|
103
103
|
account_id: account.id,
|
|
104
|
-
expires_in_seconds: AUTH_SESSION_LIFETIME_MS / 1000
|
|
104
|
+
expires_in_seconds: AUTH_SESSION_LIFETIME_MS / 1000
|
|
105
105
|
});
|
|
106
106
|
return {
|
|
107
107
|
account: { id: account.id, username: account.username },
|
|
108
108
|
actor: { id: actor.id },
|
|
109
109
|
api_token,
|
|
110
|
-
session_cookie
|
|
110
|
+
session_cookie
|
|
111
111
|
};
|
|
112
112
|
};
|
|
113
113
|
/**
|
|
@@ -158,7 +158,7 @@ const test_log = new Logger('test', { level: 'off' });
|
|
|
158
158
|
const default_test_fs_stubs = {
|
|
159
159
|
stat: async () => null,
|
|
160
160
|
read_text_file: async () => '',
|
|
161
|
-
delete_file: async () => { }
|
|
161
|
+
delete_file: async () => { }
|
|
162
162
|
};
|
|
163
163
|
/**
|
|
164
164
|
* Shared backend-assembly path for `create_test_app_server` and
|
|
@@ -173,7 +173,7 @@ const default_test_fs_stubs = {
|
|
|
173
173
|
* resets it to false before this runs).
|
|
174
174
|
*/
|
|
175
175
|
const _build_test_backend = async (options) => {
|
|
176
|
-
const { db: existing_db, db_type = 'pglite-memory', password = stub_password_deps, audit_factory = default_audit_factory, fs_stubs = default_test_fs_stubs, migration_namespaces
|
|
176
|
+
const { db: existing_db, db_type = 'pglite-memory', password = stub_password_deps, audit_factory = default_audit_factory, fs_stubs = default_test_fs_stubs, migration_namespaces } = options;
|
|
177
177
|
if (existing_db && migration_namespaces && migration_namespaces.length > 0) {
|
|
178
178
|
throw new Error('test app setup: pass either `db` (caller owns migrations) or `migration_namespaces` ' +
|
|
179
179
|
'(harness migrates), not both');
|
|
@@ -198,8 +198,8 @@ const _build_test_backend = async (options) => {
|
|
|
198
198
|
db: existing_db,
|
|
199
199
|
log: test_log,
|
|
200
200
|
audit,
|
|
201
|
-
...fs_stubs
|
|
202
|
-
}
|
|
201
|
+
...fs_stubs
|
|
202
|
+
}
|
|
203
203
|
};
|
|
204
204
|
}
|
|
205
205
|
else {
|
|
@@ -220,14 +220,14 @@ const _build_test_backend = async (options) => {
|
|
|
220
220
|
db,
|
|
221
221
|
log: test_log,
|
|
222
222
|
audit,
|
|
223
|
-
...fs_stubs
|
|
224
|
-
}
|
|
223
|
+
...fs_stubs
|
|
224
|
+
}
|
|
225
225
|
};
|
|
226
226
|
}
|
|
227
227
|
return { backend, keyring: keyring_result.keyring };
|
|
228
228
|
};
|
|
229
229
|
export const create_test_app_server = async (options) => {
|
|
230
|
-
const { session_options, password = stub_password_deps, username = 'keeper', password_value = DEFAULT_TEST_PASSWORD, roles = [ROLE_KEEPER]
|
|
230
|
+
const { session_options, password = stub_password_deps, username = 'keeper', password_value = DEFAULT_TEST_PASSWORD, roles = [ROLE_KEEPER] } = options;
|
|
231
231
|
const { backend, keyring } = await _build_test_backend(options);
|
|
232
232
|
const bootstrapped = await bootstrap_test_keeper({
|
|
233
233
|
db: backend.deps.db,
|
|
@@ -236,13 +236,13 @@ export const create_test_app_server = async (options) => {
|
|
|
236
236
|
password,
|
|
237
237
|
username,
|
|
238
238
|
password_value,
|
|
239
|
-
roles
|
|
239
|
+
roles
|
|
240
240
|
});
|
|
241
241
|
return {
|
|
242
242
|
...backend,
|
|
243
243
|
...bootstrapped,
|
|
244
244
|
keyring,
|
|
245
|
-
cleanup: () => backend.close()
|
|
245
|
+
cleanup: () => backend.close()
|
|
246
246
|
};
|
|
247
247
|
};
|
|
248
248
|
/**
|
|
@@ -267,7 +267,7 @@ export const create_test_app = async (options) => {
|
|
|
267
267
|
current_token: test_daemon_token,
|
|
268
268
|
previous_token: null,
|
|
269
269
|
rotated_at: new Date(),
|
|
270
|
-
keeper_account_id: test_server.account.id
|
|
270
|
+
keeper_account_id: test_server.account.id
|
|
271
271
|
};
|
|
272
272
|
const result = await create_app_server({
|
|
273
273
|
backend: test_server,
|
|
@@ -284,7 +284,7 @@ export const create_test_app = async (options) => {
|
|
|
284
284
|
rpc_endpoints: options.rpc_endpoints,
|
|
285
285
|
bootstrap: options.bootstrap,
|
|
286
286
|
...options.app_options,
|
|
287
|
-
create_route_specs: options.create_route_specs
|
|
287
|
+
create_route_specs: options.create_route_specs
|
|
288
288
|
});
|
|
289
289
|
const { app, surface_spec } = result;
|
|
290
290
|
const { cookie_name } = options.session_options;
|
|
@@ -293,17 +293,17 @@ export const create_test_app = async (options) => {
|
|
|
293
293
|
host: 'localhost',
|
|
294
294
|
origin: 'http://localhost:5173',
|
|
295
295
|
cookie: `${cookie_name}=${test_server.session_cookie}`,
|
|
296
|
-
...extra
|
|
296
|
+
...extra
|
|
297
297
|
});
|
|
298
298
|
const create_bearer_headers = (extra) => ({
|
|
299
299
|
host: 'localhost',
|
|
300
300
|
authorization: `Bearer ${test_server.api_token}`,
|
|
301
|
-
...extra
|
|
301
|
+
...extra
|
|
302
302
|
});
|
|
303
303
|
const create_daemon_token_headers = (extra) => ({
|
|
304
304
|
host: 'localhost',
|
|
305
305
|
[DAEMON_TOKEN_HEADER]: test_daemon_token,
|
|
306
|
-
...extra
|
|
306
|
+
...extra
|
|
307
307
|
});
|
|
308
308
|
let account_counter = 0;
|
|
309
309
|
const create_account = async (account_options) => {
|
|
@@ -316,7 +316,7 @@ export const create_test_app = async (options) => {
|
|
|
316
316
|
username: account_options?.username ?? `test_user_${account_counter}`,
|
|
317
317
|
password_value: account_options?.password_value ?? DEFAULT_TEST_PASSWORD,
|
|
318
318
|
roles: account_options?.roles ?? [],
|
|
319
|
-
...(account_options?.email !== undefined && { email: account_options.email })
|
|
319
|
+
...(account_options?.email !== undefined && { email: account_options.email })
|
|
320
320
|
});
|
|
321
321
|
return {
|
|
322
322
|
...bootstrapped,
|
|
@@ -324,13 +324,13 @@ export const create_test_app = async (options) => {
|
|
|
324
324
|
host: 'localhost',
|
|
325
325
|
origin: 'http://localhost:5173',
|
|
326
326
|
cookie: `${cookie_name}=${bootstrapped.session_cookie}`,
|
|
327
|
-
...extra
|
|
327
|
+
...extra
|
|
328
328
|
}),
|
|
329
329
|
create_bearer_headers: (extra) => ({
|
|
330
330
|
host: 'localhost',
|
|
331
331
|
authorization: `Bearer ${bootstrapped.api_token}`,
|
|
332
|
-
...extra
|
|
333
|
-
})
|
|
332
|
+
...extra
|
|
333
|
+
})
|
|
334
334
|
};
|
|
335
335
|
};
|
|
336
336
|
return {
|
|
@@ -343,7 +343,7 @@ export const create_test_app = async (options) => {
|
|
|
343
343
|
create_bearer_headers,
|
|
344
344
|
create_daemon_token_headers,
|
|
345
345
|
create_account,
|
|
346
|
-
cleanup: () => test_server.cleanup()
|
|
346
|
+
cleanup: () => test_server.cleanup()
|
|
347
347
|
};
|
|
348
348
|
};
|
|
349
349
|
/**
|
|
@@ -384,7 +384,7 @@ export const create_test_app_for_bootstrap = async (options) => {
|
|
|
384
384
|
delete_file: async (path) => {
|
|
385
385
|
if (path === bootstrap.token_path)
|
|
386
386
|
token_file_deleted = true;
|
|
387
|
-
}
|
|
387
|
+
}
|
|
388
388
|
};
|
|
389
389
|
const { backend } = await _build_test_backend({ ...options, fs_stubs });
|
|
390
390
|
// Daemon token state isn't reachable pre-bootstrap (no keeper account)
|
|
@@ -393,7 +393,7 @@ export const create_test_app_for_bootstrap = async (options) => {
|
|
|
393
393
|
current_token: generate_daemon_token(),
|
|
394
394
|
previous_token: null,
|
|
395
395
|
rotated_at: new Date(),
|
|
396
|
-
keeper_account_id: null
|
|
396
|
+
keeper_account_id: null
|
|
397
397
|
};
|
|
398
398
|
const result = await create_app_server({
|
|
399
399
|
backend,
|
|
@@ -410,12 +410,12 @@ export const create_test_app_for_bootstrap = async (options) => {
|
|
|
410
410
|
rpc_endpoints: options.rpc_endpoints,
|
|
411
411
|
bootstrap,
|
|
412
412
|
...options.app_options,
|
|
413
|
-
create_route_specs: options.create_route_specs
|
|
413
|
+
create_route_specs: options.create_route_specs
|
|
414
414
|
});
|
|
415
415
|
const create_request_headers = (extra) => ({
|
|
416
416
|
host: 'localhost',
|
|
417
417
|
origin: 'http://localhost:5173',
|
|
418
|
-
...extra
|
|
418
|
+
...extra
|
|
419
419
|
});
|
|
420
420
|
return {
|
|
421
421
|
app: result.app,
|
|
@@ -424,6 +424,6 @@ export const create_test_app_for_bootstrap = async (options) => {
|
|
|
424
424
|
surface: result.surface_spec.surface,
|
|
425
425
|
route_specs: result.surface_spec.route_specs,
|
|
426
426
|
create_request_headers,
|
|
427
|
-
cleanup: () => backend.close()
|
|
427
|
+
cleanup: () => backend.close()
|
|
428
428
|
};
|
|
429
429
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assertions.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/assertions.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAe7B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"assertions.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/assertions.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAe7B,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,UAAU,MAAM,EAAE,iBAAiB,MAAM,KAAG,MACtB,CAAC;AAE5D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,+BAA+B,GAC3C,SAAS,UAAU,EACnB,eAAe,MAAM,KACnB,IAOF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,4BAA4B,GAAI,eAAe,MAAM,UAAU,KAAG,IAE9E,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kCAAkC,GAC9C,SAAS,UAAU,EACnB,iBAAiB,KAAK,CAAC,MAAM,CAAC,KAC5B,IAWF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GAClC,QAAQ,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACtC,OAAO,eAAe,EACtB,QAAQ,MAAM,KACZ,CAAC,CAAC,OAAO,GAAG,SAGd,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,GACrC,QAAQ,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,EACtC,OAAO,eAAe,EACtB,QAAQ,MAAM,EACd,MAAM,OAAO,KACX,IAIF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,GACxC,SAAS,UAAU,EACnB,aAAa,MAAM,EACnB,qBAAqB,KAAK,CAAC,MAAM,CAAC,KAChC,IAUF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attack_surface.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/attack_surface.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAoB7B,OAAO,EAQN,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,MAAM,yBAAyB,CAAC;AAoBjC,OAAO,
|
|
1
|
+
{"version":3,"file":"attack_surface.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/attack_surface.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAoB7B,OAAO,EAQN,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,MAAM,yBAAyB,CAAC;AAoBjC,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAsCpF,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,IA8H3E,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;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,sCAAsC,GAClD,SAAS,4BAA4B,KACnC,IA2EF,CAAC"}
|
|
@@ -15,15 +15,15 @@ import './assert_dev_env.js';
|
|
|
15
15
|
* @module
|
|
16
16
|
*/
|
|
17
17
|
import { test, assert, describe } from 'vitest';
|
|
18
|
-
import { assert_surface_invariants, assert_rpc_ws_surface_invariants, assert_surface_security_policy, audit_error_schema_tightness, assert_error_schema_tightness, default_error_schema_tightness, fuz_app_stock_route_tightness_allowlist
|
|
18
|
+
import { assert_surface_invariants, assert_rpc_ws_surface_invariants, assert_surface_security_policy, audit_error_schema_tightness, assert_error_schema_tightness, default_error_schema_tightness, fuz_app_stock_route_tightness_allowlist } from './surface_invariants.js';
|
|
19
19
|
import { describe_adversarial_input } from './adversarial_input.js';
|
|
20
20
|
import { describe_adversarial_404 } from './adversarial_404.js';
|
|
21
|
-
import { create_test_app_from_specs, create_test_request_context, create_auth_test_apps, select_auth_app, resolve_test_path
|
|
22
|
-
import { assert_surface_matches_snapshot, assert_surface_deterministic, assert_only_expected_public_routes, assert_full_middleware_stack, assert_error_schema_valid
|
|
21
|
+
import { create_test_app_from_specs, create_test_request_context, create_auth_test_apps, select_auth_app, resolve_test_path } from './auth_apps.js';
|
|
22
|
+
import { assert_surface_matches_snapshot, assert_surface_deterministic, assert_only_expected_public_routes, assert_full_middleware_stack, assert_error_schema_valid } from './assertions.js';
|
|
23
23
|
import { merge_error_schemas } from '../http/schema_helpers.js';
|
|
24
24
|
import { collect_middleware_errors } from '../http/surface.js';
|
|
25
|
-
import { filter_protected_routes, filter_role_routes, filter_keeper_routes
|
|
26
|
-
import { ERROR_AUTHENTICATION_REQUIRED, ERROR_INSUFFICIENT_PERMISSIONS, ERROR_CREDENTIAL_TYPE_REQUIRED
|
|
25
|
+
import { filter_protected_routes, filter_role_routes, filter_keeper_routes } from '../http/surface_query.js';
|
|
26
|
+
import { ERROR_AUTHENTICATION_REQUIRED, ERROR_INSUFFICIENT_PERMISSIONS, ERROR_CREDENTIAL_TYPE_REQUIRED } from '../http/error_schemas.js';
|
|
27
27
|
// --- Adversarial test runner ---
|
|
28
28
|
/**
|
|
29
29
|
* Build a lookup from `"METHOD /path"` to merged error schemas (auto-derived + middleware + explicit).
|
|
@@ -70,7 +70,7 @@ export const describe_adversarial_auth = (options) => {
|
|
|
70
70
|
for (const route of protected_routes) {
|
|
71
71
|
test(`${route.method} ${route.path}`, async () => {
|
|
72
72
|
const res = await apps.public.request(resolve_test_path(route.path), {
|
|
73
|
-
method: route.method
|
|
73
|
+
method: route.method
|
|
74
74
|
});
|
|
75
75
|
assert.strictEqual(res.status, 401, `${route.method} ${route.path}`);
|
|
76
76
|
const body = await res.json();
|
|
@@ -94,7 +94,7 @@ export const describe_adversarial_auth = (options) => {
|
|
|
94
94
|
if (!app)
|
|
95
95
|
throw new Error(`No test app for role '${wrong_role}'`);
|
|
96
96
|
const res = await app.request(resolve_test_path(route.path), {
|
|
97
|
-
method: route.method
|
|
97
|
+
method: route.method
|
|
98
98
|
});
|
|
99
99
|
assert.strictEqual(res.status, 403, `${route.method} ${route.path}`);
|
|
100
100
|
const body = await res.json();
|
|
@@ -109,7 +109,7 @@ export const describe_adversarial_auth = (options) => {
|
|
|
109
109
|
for (const route of role_only_routes) {
|
|
110
110
|
test(`${route.method} ${route.path}`, async () => {
|
|
111
111
|
const res = await apps.authed.request(resolve_test_path(route.path), {
|
|
112
|
-
method: route.method
|
|
112
|
+
method: route.method
|
|
113
113
|
});
|
|
114
114
|
assert.strictEqual(res.status, 403, `${route.method} ${route.path}`);
|
|
115
115
|
const body = await res.json();
|
|
@@ -127,7 +127,7 @@ export const describe_adversarial_auth = (options) => {
|
|
|
127
127
|
for (const route of keeper_routes) {
|
|
128
128
|
test(`${route.method} ${route.path}`, async () => {
|
|
129
129
|
const res = await app_session_keeper.request(resolve_test_path(route.path), {
|
|
130
|
-
method: route.method
|
|
130
|
+
method: route.method
|
|
131
131
|
});
|
|
132
132
|
assert.strictEqual(res.status, 403, `${route.method} ${route.path}`);
|
|
133
133
|
const body = await res.json();
|
|
@@ -186,8 +186,8 @@ export const resolve_standard_error_schema_tightness = (consumer) => {
|
|
|
186
186
|
allowlist: [...fuz_app_stock_route_tightness_allowlist, ...(consumer?.allowlist ?? [])],
|
|
187
187
|
ignore_statuses: [
|
|
188
188
|
...(default_error_schema_tightness.ignore_statuses ?? []),
|
|
189
|
-
...(consumer?.ignore_statuses ?? [])
|
|
190
|
-
]
|
|
189
|
+
...(consumer?.ignore_statuses ?? [])
|
|
190
|
+
]
|
|
191
191
|
};
|
|
192
192
|
};
|
|
193
193
|
/**
|
|
@@ -210,7 +210,7 @@ export const resolve_standard_error_schema_tightness = (consumer) => {
|
|
|
210
210
|
* any project-specific assertions in additional `describe` blocks.
|
|
211
211
|
*/
|
|
212
212
|
export const describe_standard_attack_surface_tests = (options) => {
|
|
213
|
-
const { build, snapshot_path, expected_public_routes, expected_api_middleware, roles, api_path_prefix = '/api/', security_policy
|
|
213
|
+
const { build, snapshot_path, expected_public_routes, expected_api_middleware, roles, api_path_prefix = '/api/', security_policy } = options;
|
|
214
214
|
const error_schema_tightness = resolve_standard_error_schema_tightness(options.error_schema_tightness);
|
|
215
215
|
const built = build();
|
|
216
216
|
const { surface } = built;
|
|
@@ -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;AA4B7B,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"audit_completeness.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/audit_completeness.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AA4B7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAUhE,OAAO,EAKN,KAAK,uBAAuB,EAC5B,MAAM,kBAAkB,CAAC;AA2B1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,0BAA0B,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC5C;;;;;OAKG;IACH,UAAU,EAAE,SAAS,CAAC;IACtB;;;;;;OAMG;IACH,cAAc,EAAE,cAAc,CAAC;IAC/B,uCAAuC;IACvC,YAAY,EAAE,mBAAmB,CAAC;IAClC,yEAAyE;IACzE,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC;;;OAGG;IACH,aAAa,EAAE,uBAAuB,CAAC;CACvC;AAgGD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iCAAiC,GAAI,SAAS,4BAA4B,KAAG,IAymBzF,CAAC"}
|