@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
|
@@ -15,46 +15,46 @@ import { z } from 'zod';
|
|
|
15
15
|
import { ActorSummaryJson, RoleGrantSummaryJson, SessionAccountJson } from './account_schema.js';
|
|
16
16
|
import { UsernameProvided } from '../primitive_schemas.js';
|
|
17
17
|
import { Password, PasswordProvided } from './password.js';
|
|
18
|
-
import { ERROR_AUTHENTICATION_REQUIRED, ERROR_INVALID_CREDENTIALS, ERROR_INVALID_JSON_BODY, ERROR_INVALID_REQUEST_BODY
|
|
18
|
+
import { ERROR_AUTHENTICATION_REQUIRED, ERROR_INVALID_CREDENTIALS, ERROR_INVALID_JSON_BODY, ERROR_INVALID_REQUEST_BODY } from '../http/error_schemas.js';
|
|
19
19
|
/** Input for `GET /api/account/status`. No parameters — caller is the subject. */
|
|
20
20
|
export const AccountStatusInput = z.null();
|
|
21
21
|
/** Output for `GET /api/account/status`. */
|
|
22
22
|
export const AccountStatusOutput = z.strictObject({
|
|
23
23
|
account: SessionAccountJson,
|
|
24
24
|
actor: ActorSummaryJson.nullable(),
|
|
25
|
-
role_grants: z.array(RoleGrantSummaryJson)
|
|
25
|
+
role_grants: z.array(RoleGrantSummaryJson)
|
|
26
26
|
});
|
|
27
27
|
/** Error body for `GET /api/account/status` on the unauthenticated path. */
|
|
28
28
|
export const AccountStatusUnauthenticatedError = z.looseObject({
|
|
29
29
|
error: z.literal(ERROR_AUTHENTICATION_REQUIRED),
|
|
30
|
-
bootstrap_available: z.boolean().optional()
|
|
30
|
+
bootstrap_available: z.boolean().optional()
|
|
31
31
|
});
|
|
32
32
|
/** Input for `POST /login`. Accepts a username or email in the `username` field. */
|
|
33
33
|
export const LoginInput = z.strictObject({
|
|
34
34
|
username: UsernameProvided,
|
|
35
|
-
password: PasswordProvided
|
|
35
|
+
password: PasswordProvided
|
|
36
36
|
});
|
|
37
37
|
/** Output for `POST /login`. Session cookie is the operative side effect. */
|
|
38
38
|
export const LoginOutput = z.strictObject({
|
|
39
|
-
ok: z.literal(true)
|
|
39
|
+
ok: z.literal(true)
|
|
40
40
|
});
|
|
41
41
|
/** Input for `POST /logout`. Session identity flows through the cookie. */
|
|
42
42
|
export const LogoutInput = z.null();
|
|
43
43
|
/** Output for `POST /logout`. Includes the revoked account's username for UI redraw. */
|
|
44
44
|
export const LogoutOutput = z.strictObject({
|
|
45
45
|
ok: z.literal(true),
|
|
46
|
-
username: z.string()
|
|
46
|
+
username: z.string()
|
|
47
47
|
});
|
|
48
48
|
/** Input for `POST /password`. `current_password` is minimally validated; `new_password` enforces the full policy. */
|
|
49
49
|
export const PasswordChangeInput = z.strictObject({
|
|
50
50
|
current_password: PasswordProvided,
|
|
51
|
-
new_password: Password
|
|
51
|
+
new_password: Password
|
|
52
52
|
});
|
|
53
53
|
/** Output for `POST /password`. Counts are returned so the UI can summarize the revoke-all cascade. */
|
|
54
54
|
export const PasswordChangeOutput = z.strictObject({
|
|
55
55
|
ok: z.literal(true),
|
|
56
56
|
sessions_revoked: z.number(),
|
|
57
|
-
tokens_revoked: z.number()
|
|
57
|
+
tokens_revoked: z.number()
|
|
58
58
|
});
|
|
59
59
|
/** Default maximum sessions per account. */
|
|
60
60
|
export const DEFAULT_MAX_SESSIONS = 5;
|
|
@@ -80,8 +80,8 @@ export const account_status_route_shape = {
|
|
|
80
80
|
input: AccountStatusInput,
|
|
81
81
|
output: AccountStatusOutput,
|
|
82
82
|
errors: {
|
|
83
|
-
401: AccountStatusUnauthenticatedError
|
|
84
|
-
}
|
|
83
|
+
401: AccountStatusUnauthenticatedError
|
|
84
|
+
}
|
|
85
85
|
};
|
|
86
86
|
/**
|
|
87
87
|
* The four account route shapes (`/verify`, `/login`, `/logout`, `/password`)
|
|
@@ -100,7 +100,7 @@ export const create_account_route_shapes = (options) => [
|
|
|
100
100
|
auth: { account: 'required', actor: 'none' },
|
|
101
101
|
description: 'Session-validity probe for nginx auth_request (empty body, 200 or 401)',
|
|
102
102
|
input: z.null(),
|
|
103
|
-
output: z.null()
|
|
103
|
+
output: z.null()
|
|
104
104
|
},
|
|
105
105
|
{
|
|
106
106
|
method: 'POST',
|
|
@@ -112,10 +112,10 @@ export const create_account_route_shapes = (options) => [
|
|
|
112
112
|
rate_limit: 'both',
|
|
113
113
|
errors: {
|
|
114
114
|
400: z.looseObject({
|
|
115
|
-
error: z.enum([ERROR_INVALID_JSON_BODY, ERROR_INVALID_REQUEST_BODY])
|
|
115
|
+
error: z.enum([ERROR_INVALID_JSON_BODY, ERROR_INVALID_REQUEST_BODY])
|
|
116
116
|
}),
|
|
117
|
-
401: z.looseObject({ error: z.literal(ERROR_INVALID_CREDENTIALS) })
|
|
118
|
-
}
|
|
117
|
+
401: z.looseObject({ error: z.literal(ERROR_INVALID_CREDENTIALS) })
|
|
118
|
+
}
|
|
119
119
|
},
|
|
120
120
|
{
|
|
121
121
|
method: 'POST',
|
|
@@ -127,7 +127,7 @@ export const create_account_route_shapes = (options) => [
|
|
|
127
127
|
auth: { account: 'required', actor: 'none', credential_types: ['session'] },
|
|
128
128
|
description: 'Revoke current session and clear cookie',
|
|
129
129
|
input: LogoutInput,
|
|
130
|
-
output: LogoutOutput
|
|
130
|
+
output: LogoutOutput
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
133
|
method: 'POST',
|
|
@@ -140,8 +140,8 @@ export const create_account_route_shapes = (options) => [
|
|
|
140
140
|
rate_limit: options.login_account_rate_limited ? 'both' : 'ip',
|
|
141
141
|
errors: {
|
|
142
142
|
400: z.looseObject({
|
|
143
|
-
error: z.enum([ERROR_INVALID_JSON_BODY, ERROR_INVALID_REQUEST_BODY])
|
|
144
|
-
})
|
|
145
|
-
}
|
|
146
|
-
}
|
|
143
|
+
error: z.enum([ERROR_INVALID_JSON_BODY, ERROR_INVALID_REQUEST_BODY])
|
|
144
|
+
})
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
147
|
];
|
|
@@ -103,8 +103,8 @@ export interface AccountRouteOptions extends AuthSessionRouteOptions {
|
|
|
103
103
|
* eagerly close affected WebSocket sockets for the account BEFORE
|
|
104
104
|
* emitting the corresponding audit event. Mirrors the self-service
|
|
105
105
|
* action surface (see `AccountActionOptions.connection_closer`). When
|
|
106
|
-
* absent, only the listener-based close (`transports_ws_auth_guard`
|
|
107
|
-
* `audit.
|
|
106
|
+
* absent, only the listener-based close (`transports_ws_auth_guard`
|
|
107
|
+
* registered via `audit.add_listener`) runs.
|
|
108
108
|
*/
|
|
109
109
|
connection_closer?: ConnectionCloser | null;
|
|
110
110
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account_routes.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/account_routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"account_routes.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/account_routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA4B1D,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAExE,OAAO,EAAgC,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGxE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gCAAgC,GAAI,UAAU,oBAAoB,KAAG,SA4EhF,CAAC;AAEH,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACpC,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,gBAAgB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1C;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,KAAK,CAAC;AAQ/C;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACvC,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,kFAAkF;IAClF,eAAe,EAAE,WAAW,GAAG,IAAI,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,uBAAuB;IACnE,4FAA4F;IAC5F,0BAA0B,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/C,2FAA2F;IAC3F,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC5C;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;CAC1C;AAID;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,0BAA0B,GACtC,MAAM,gBAAgB,EACtB,SAAS,mBAAmB,KAC1B,KAAK,CAAC,SAAS,CAwRjB,CAAC"}
|
|
@@ -23,11 +23,11 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import { clear_session_cookie, create_session_and_set_cookie } from './session_middleware.js';
|
|
25
25
|
import { RoleGrantSummaryJson, to_session_account } from './account_schema.js';
|
|
26
|
-
import { account_status_route_shape, create_account_route_shapes, DEFAULT_MAX_SESSIONS
|
|
27
|
-
import { hash_session_token, query_session_revoke_all_for_account, query_session_revoke_by_hash_unscoped
|
|
28
|
-
import { query_account_by_username_or_email, query_update_account_password
|
|
26
|
+
import { account_status_route_shape, create_account_route_shapes, DEFAULT_MAX_SESSIONS } from './account_route_schema.js';
|
|
27
|
+
import { hash_session_token, query_session_revoke_all_for_account, query_session_revoke_by_hash_unscoped } from './session_queries.js';
|
|
28
|
+
import { query_account_by_username_or_email, query_update_account_password } from './account_queries.js';
|
|
29
29
|
import { query_revoke_all_api_tokens_for_account } from './api_token_queries.js';
|
|
30
|
-
import { build_account_context, build_request_context, get_request_context, require_request_context, resolve_acting_actor
|
|
30
|
+
import { build_account_context, build_request_context, get_request_context, require_request_context, resolve_acting_actor } from './request_context.js';
|
|
31
31
|
import { ACCOUNT_ID_KEY, CREDENTIAL_TYPE_KEY } from '../hono_context.js';
|
|
32
32
|
import { get_route_input } from '../http/route_spec.js';
|
|
33
33
|
import { get_client_ip } from '../http/client_ip.js';
|
|
@@ -54,7 +54,7 @@ export const create_account_status_route_spec = (options) => ({
|
|
|
54
54
|
if (!account_id) {
|
|
55
55
|
return c.json({
|
|
56
56
|
error: ERROR_AUTHENTICATION_REQUIRED,
|
|
57
|
-
...(options?.bootstrap_status?.available ? { bootstrap_available: true } : {})
|
|
57
|
+
...(options?.bootstrap_status?.available ? { bootstrap_available: true } : {})
|
|
58
58
|
}, 401);
|
|
59
59
|
}
|
|
60
60
|
// Honor a pre-populated request context. The dispatcher's authorization
|
|
@@ -70,12 +70,12 @@ export const create_account_status_route_spec = (options) => ({
|
|
|
70
70
|
scope_id: p.scope_id,
|
|
71
71
|
created_at: p.created_at,
|
|
72
72
|
expires_at: p.expires_at,
|
|
73
|
-
granted_by: p.granted_by
|
|
73
|
+
granted_by: p.granted_by
|
|
74
74
|
}));
|
|
75
75
|
return c.json({
|
|
76
76
|
account: to_session_account(existing.account),
|
|
77
77
|
actor: existing.actor ? { id: existing.actor.id, name: existing.actor.name } : null,
|
|
78
|
-
role_grants
|
|
78
|
+
role_grants
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
81
|
// Resolve actor + role_grants when the caller is unambiguous (single-actor
|
|
@@ -94,12 +94,12 @@ export const create_account_status_route_spec = (options) => ({
|
|
|
94
94
|
scope_id: p.scope_id,
|
|
95
95
|
created_at: p.created_at,
|
|
96
96
|
expires_at: p.expires_at,
|
|
97
|
-
granted_by: p.granted_by
|
|
97
|
+
granted_by: p.granted_by
|
|
98
98
|
}));
|
|
99
99
|
return c.json({
|
|
100
100
|
account: to_session_account(ctx.account),
|
|
101
101
|
actor: { id: ctx.actor.id, name: ctx.actor.name },
|
|
102
|
-
role_grants
|
|
102
|
+
role_grants
|
|
103
103
|
});
|
|
104
104
|
}
|
|
105
105
|
}
|
|
@@ -107,15 +107,15 @@ export const create_account_status_route_spec = (options) => ({
|
|
|
107
107
|
if (!account_ctx) {
|
|
108
108
|
return c.json({
|
|
109
109
|
error: ERROR_AUTHENTICATION_REQUIRED,
|
|
110
|
-
...(options?.bootstrap_status?.available ? { bootstrap_available: true } : {})
|
|
110
|
+
...(options?.bootstrap_status?.available ? { bootstrap_available: true } : {})
|
|
111
111
|
}, 401);
|
|
112
112
|
}
|
|
113
113
|
return c.json({
|
|
114
114
|
account: to_session_account(account_ctx.account),
|
|
115
115
|
actor: null,
|
|
116
|
-
role_grants: []
|
|
116
|
+
role_grants: []
|
|
117
117
|
});
|
|
118
|
-
}
|
|
118
|
+
}
|
|
119
119
|
});
|
|
120
120
|
/**
|
|
121
121
|
* Default minimum wall-clock time (ms) for a login failure (401) response.
|
|
@@ -160,9 +160,9 @@ const login_fail_delay = (floor_ms, jitter_ms) => {
|
|
|
160
160
|
*/
|
|
161
161
|
export const create_account_route_specs = (deps, options) => {
|
|
162
162
|
const { keyring, password } = deps;
|
|
163
|
-
const { session_options, ip_rate_limiter, login_account_rate_limiter, max_sessions = DEFAULT_MAX_SESSIONS, login_fail_floor_ms = DEFAULT_LOGIN_FAIL_FLOOR_MS, login_fail_jitter_ms = DEFAULT_LOGIN_FAIL_JITTER_MS, connection_closer = null, bootstrap_status
|
|
163
|
+
const { session_options, ip_rate_limiter, login_account_rate_limiter, max_sessions = DEFAULT_MAX_SESSIONS, login_fail_floor_ms = DEFAULT_LOGIN_FAIL_FLOOR_MS, login_fail_jitter_ms = DEFAULT_LOGIN_FAIL_JITTER_MS, connection_closer = null, bootstrap_status } = options;
|
|
164
164
|
const [verify_shape, login_shape, logout_shape, password_shape] = create_account_route_shapes({
|
|
165
|
-
login_account_rate_limited: login_account_rate_limiter !== null
|
|
165
|
+
login_account_rate_limited: login_account_rate_limiter !== null
|
|
166
166
|
});
|
|
167
167
|
return [
|
|
168
168
|
// `/status` is bundled into the account family (relative path, prefixed
|
|
@@ -175,7 +175,7 @@ export const create_account_route_specs = (deps, options) => {
|
|
|
175
175
|
handler: (c) => {
|
|
176
176
|
require_request_context(c);
|
|
177
177
|
return c.body(null, 200);
|
|
178
|
-
}
|
|
178
|
+
}
|
|
179
179
|
},
|
|
180
180
|
{
|
|
181
181
|
...login_shape,
|
|
@@ -222,7 +222,7 @@ export const create_account_route_specs = (deps, options) => {
|
|
|
222
222
|
event_type: 'login',
|
|
223
223
|
outcome: 'failure',
|
|
224
224
|
ip: get_client_ip(c),
|
|
225
|
-
metadata: { username }
|
|
225
|
+
metadata: { username }
|
|
226
226
|
});
|
|
227
227
|
await delay;
|
|
228
228
|
return c.json({ error: ERROR_INVALID_CREDENTIALS }, 401);
|
|
@@ -238,7 +238,7 @@ export const create_account_route_specs = (deps, options) => {
|
|
|
238
238
|
outcome: 'failure',
|
|
239
239
|
account_id: account.id,
|
|
240
240
|
ip: get_client_ip(c),
|
|
241
|
-
metadata: { username }
|
|
241
|
+
metadata: { username }
|
|
242
242
|
});
|
|
243
243
|
await delay;
|
|
244
244
|
return c.json({ error: ERROR_INVALID_CREDENTIALS }, 401);
|
|
@@ -254,15 +254,15 @@ export const create_account_route_specs = (deps, options) => {
|
|
|
254
254
|
c,
|
|
255
255
|
account_id: account.id,
|
|
256
256
|
session_options,
|
|
257
|
-
max_sessions
|
|
257
|
+
max_sessions
|
|
258
258
|
});
|
|
259
259
|
deps.audit.emit(route, {
|
|
260
260
|
event_type: 'login',
|
|
261
261
|
account_id: account.id,
|
|
262
|
-
ip: get_client_ip(c)
|
|
262
|
+
ip: get_client_ip(c)
|
|
263
263
|
});
|
|
264
264
|
return c.json({ ok: true });
|
|
265
|
-
}
|
|
265
|
+
}
|
|
266
266
|
},
|
|
267
267
|
{
|
|
268
268
|
...logout_shape,
|
|
@@ -296,10 +296,10 @@ export const create_account_route_specs = (deps, options) => {
|
|
|
296
296
|
deps.audit.emit(route, {
|
|
297
297
|
event_type: 'logout',
|
|
298
298
|
account_id: ctx.account.id,
|
|
299
|
-
ip: get_client_ip(c)
|
|
299
|
+
ip: get_client_ip(c)
|
|
300
300
|
});
|
|
301
301
|
return c.json({ ok: true, username: ctx.account.username });
|
|
302
|
-
}
|
|
302
|
+
}
|
|
303
303
|
},
|
|
304
304
|
{
|
|
305
305
|
...password_shape,
|
|
@@ -334,7 +334,7 @@ export const create_account_route_specs = (deps, options) => {
|
|
|
334
334
|
outcome: 'failure',
|
|
335
335
|
account_id: ctx.account.id,
|
|
336
336
|
ip: get_client_ip(c),
|
|
337
|
-
metadata: { credential_type }
|
|
337
|
+
metadata: { credential_type }
|
|
338
338
|
});
|
|
339
339
|
return c.json({ error: ERROR_INVALID_CREDENTIALS }, 401);
|
|
340
340
|
}
|
|
@@ -379,7 +379,7 @@ export const create_account_route_specs = (deps, options) => {
|
|
|
379
379
|
outcome: 'failure',
|
|
380
380
|
account_id: ctx.account.id,
|
|
381
381
|
ip: get_client_ip(c),
|
|
382
|
-
metadata: { reason: 'concurrent_change', credential_type }
|
|
382
|
+
metadata: { reason: 'concurrent_change', credential_type }
|
|
383
383
|
});
|
|
384
384
|
return c.json({ error: ERROR_INVALID_CREDENTIALS }, 401);
|
|
385
385
|
}
|
|
@@ -411,10 +411,10 @@ export const create_account_route_specs = (deps, options) => {
|
|
|
411
411
|
event_type: 'password_change',
|
|
412
412
|
account_id: ctx.account.id,
|
|
413
413
|
ip: get_client_ip(c),
|
|
414
|
-
metadata: { sessions_revoked, tokens_revoked, credential_type }
|
|
414
|
+
metadata: { sessions_revoked, tokens_revoked, credential_type }
|
|
415
415
|
});
|
|
416
416
|
return c.json({ ok: true, sessions_revoked, tokens_revoked });
|
|
417
|
-
}
|
|
418
|
-
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
419
|
];
|
|
420
420
|
};
|
|
@@ -101,9 +101,20 @@ export declare const is_role_grant_active: (p: {
|
|
|
101
101
|
revoked_at?: string | null;
|
|
102
102
|
expires_at: string | null;
|
|
103
103
|
}, now?: Date) => boolean;
|
|
104
|
+
/**
|
|
105
|
+
* A session's storage key — the blake3 hash of its raw token, branded so a
|
|
106
|
+
* bare `string` can't stand in for one. `Blake3Hash` (`hash_schemas.ts`) is
|
|
107
|
+
* the shape; this is the meaning. Mint only via `hash_session_token`, or
|
|
108
|
+
* `SessionId.parse` at an external boundary.
|
|
109
|
+
*
|
|
110
|
+
* The raw token itself is never typed — it stays a `string` that exists only
|
|
111
|
+
* long enough to be hashed.
|
|
112
|
+
*/
|
|
113
|
+
export declare const SessionId: z.core.$ZodBranded<z.ZodString, "SessionId", "out">;
|
|
114
|
+
export type SessionId = z.infer<typeof SessionId>;
|
|
104
115
|
/** Server-side auth session, keyed by blake3 hash of session token. */
|
|
105
116
|
export interface AuthSession {
|
|
106
|
-
id:
|
|
117
|
+
id: SessionId;
|
|
107
118
|
account_id: Uuid;
|
|
108
119
|
created_at: string;
|
|
109
120
|
expires_at: string;
|
|
@@ -131,7 +142,7 @@ export declare const SessionAccountJson: z.ZodObject<{
|
|
|
131
142
|
export type SessionAccountJson = z.infer<typeof SessionAccountJson>;
|
|
132
143
|
/** Zod schema for `AuthSession` — id is the blake3 hash, safe for client. */
|
|
133
144
|
export declare const AuthSessionJson: z.ZodObject<{
|
|
134
|
-
id: z.ZodString
|
|
145
|
+
id: z.core.$ZodBranded<z.ZodString, "SessionId", "out">;
|
|
135
146
|
account_id: z.core.$ZodBranded<z.ZodUUID, "Uuid", "out">;
|
|
136
147
|
created_at: z.ZodString;
|
|
137
148
|
expires_at: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account_schema.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/account_schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"account_schema.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/account_schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import { z } from 'zod';
|
|
20
20
|
import { Uuid } from '@fuzdev/fuz_util/id.ts';
|
|
21
|
+
import { Blake3Hash } from '@fuzdev/fuz_util/hash_schemas.ts';
|
|
21
22
|
import { Username, Email } from '../primitive_schemas.js';
|
|
22
23
|
/**
|
|
23
24
|
* Maximum length of the optional free-form `revoked_reason` attached to a
|
|
@@ -27,6 +28,16 @@ import { Username, Email } from '../primitive_schemas.js';
|
|
|
27
28
|
*/
|
|
28
29
|
export const ROLE_GRANT_REVOKED_REASON_LENGTH_MAX = 500;
|
|
29
30
|
export const is_role_grant_active = (p, now = new Date()) => !p.revoked_at && (!p.expires_at || new Date(p.expires_at) > now);
|
|
31
|
+
/**
|
|
32
|
+
* A session's storage key — the blake3 hash of its raw token, branded so a
|
|
33
|
+
* bare `string` can't stand in for one. `Blake3Hash` (`hash_schemas.ts`) is
|
|
34
|
+
* the shape; this is the meaning. Mint only via `hash_session_token`, or
|
|
35
|
+
* `SessionId.parse` at an external boundary.
|
|
36
|
+
*
|
|
37
|
+
* The raw token itself is never typed — it stays a `string` that exists only
|
|
38
|
+
* long enough to be hashed.
|
|
39
|
+
*/
|
|
40
|
+
export const SessionId = Blake3Hash.brand('SessionId');
|
|
30
41
|
// Client-safe Zod schemas — for route output validation and ActionSpec outputs.
|
|
31
42
|
/** Zod schema for `SessionAccount` — account without sensitive fields. */
|
|
32
43
|
export const SessionAccountJson = z.strictObject({
|
|
@@ -34,15 +45,15 @@ export const SessionAccountJson = z.strictObject({
|
|
|
34
45
|
username: Username,
|
|
35
46
|
email: Email.nullable(),
|
|
36
47
|
email_verified: z.boolean(),
|
|
37
|
-
created_at: z.string()
|
|
48
|
+
created_at: z.string()
|
|
38
49
|
});
|
|
39
50
|
/** Zod schema for `AuthSession` — id is the blake3 hash, safe for client. */
|
|
40
51
|
export const AuthSessionJson = z.strictObject({
|
|
41
|
-
id:
|
|
52
|
+
id: SessionId,
|
|
42
53
|
account_id: Uuid,
|
|
43
54
|
created_at: z.string(),
|
|
44
55
|
expires_at: z.string(),
|
|
45
|
-
last_seen_at: z.string()
|
|
56
|
+
last_seen_at: z.string()
|
|
46
57
|
});
|
|
47
58
|
/** Zod schema for client-safe API token listing (excludes `token_hash`). */
|
|
48
59
|
export const ClientApiTokenJson = z.strictObject({
|
|
@@ -52,7 +63,7 @@ export const ClientApiTokenJson = z.strictObject({
|
|
|
52
63
|
expires_at: z.string().nullable(),
|
|
53
64
|
last_used_at: z.string().nullable(),
|
|
54
65
|
last_used_ip: z.string().nullable(),
|
|
55
|
-
created_at: z.string()
|
|
66
|
+
created_at: z.string()
|
|
56
67
|
});
|
|
57
68
|
/** Zod schema for the role_grant summary returned in admin account listings. */
|
|
58
69
|
export const RoleGrantSummaryJson = z.strictObject({
|
|
@@ -62,12 +73,12 @@ export const RoleGrantSummaryJson = z.strictObject({
|
|
|
62
73
|
scope_id: Uuid.nullable(),
|
|
63
74
|
created_at: z.string(),
|
|
64
75
|
expires_at: z.string().nullable(),
|
|
65
|
-
granted_by: Uuid.nullable()
|
|
76
|
+
granted_by: Uuid.nullable()
|
|
66
77
|
});
|
|
67
78
|
/** Zod schema for the actor summary returned in admin account listings. */
|
|
68
79
|
export const ActorSummaryJson = z.strictObject({
|
|
69
80
|
id: Uuid,
|
|
70
|
-
name: z.string()
|
|
81
|
+
name: z.string()
|
|
71
82
|
});
|
|
72
83
|
/** Zod schema for admin-facing account data — extends `SessionAccountJson` with audit fields. */
|
|
73
84
|
export const AdminAccountJson = SessionAccountJson.extend({
|
|
@@ -79,7 +90,7 @@ export const AdminAccountJson = SessionAccountJson.extend({
|
|
|
79
90
|
* is requested with `include_deleted`) and offer reactivation via
|
|
80
91
|
* `account_undelete`. Active listings always carry `null` here.
|
|
81
92
|
*/
|
|
82
|
-
deleted_at: z.string().nullable()
|
|
93
|
+
deleted_at: z.string().nullable()
|
|
83
94
|
});
|
|
84
95
|
/**
|
|
85
96
|
* Zod schema for a pending role_grant offer surfaced in admin account listings.
|
|
@@ -102,14 +113,14 @@ export const PendingOfferSummaryJson = z.strictObject({
|
|
|
102
113
|
from_actor_id: Uuid,
|
|
103
114
|
from_username: z.string(),
|
|
104
115
|
created_at: z.string(),
|
|
105
|
-
expires_at: z.string()
|
|
116
|
+
expires_at: z.string()
|
|
106
117
|
});
|
|
107
118
|
/** Zod schema for an admin account listing entry (account + actor + role_grants + pending offers). */
|
|
108
119
|
export const AdminAccountEntryJson = z.strictObject({
|
|
109
120
|
account: AdminAccountJson,
|
|
110
121
|
actor: ActorSummaryJson.nullable(),
|
|
111
122
|
role_grants: z.array(RoleGrantSummaryJson),
|
|
112
|
-
pending_offers: z.array(PendingOfferSummaryJson)
|
|
123
|
+
pending_offers: z.array(PendingOfferSummaryJson)
|
|
113
124
|
});
|
|
114
125
|
/**
|
|
115
126
|
* Convert an `Account` to a `SessionAccount` by stripping sensitive fields.
|
|
@@ -122,7 +133,7 @@ export const to_session_account = (account) => ({
|
|
|
122
133
|
username: account.username,
|
|
123
134
|
email: account.email,
|
|
124
135
|
email_verified: account.email_verified,
|
|
125
|
-
created_at: account.created_at
|
|
136
|
+
created_at: account.created_at
|
|
126
137
|
});
|
|
127
138
|
/**
|
|
128
139
|
* Convert an `Account` to an `AdminAccountJson` for admin listings.
|
|
@@ -134,5 +145,5 @@ export const to_admin_account = (account) => ({
|
|
|
134
145
|
...to_session_account(account),
|
|
135
146
|
updated_at: account.updated_at,
|
|
136
147
|
updated_by: account.updated_by,
|
|
137
|
-
deleted_at: account.deleted_at
|
|
148
|
+
deleted_at: account.deleted_at
|
|
138
149
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actor_lookup_action_specs.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/actor_lookup_action_specs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"actor_lookup_action_specs.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/actor_lookup_action_specs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;GAGG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,iEAAiE;AACjE,eAAO,MAAM,oBAAoB;;;;kBAI/B,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE,eAAO,MAAM,gBAAgB;;kBAU3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE,eAAO,MAAM,iBAAiB;;;;;;kBAE5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;CAaA,CAAC;AAEtC;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;EAAsC,CAAC"}
|
|
@@ -58,7 +58,7 @@ export const ACTOR_LOOKUP_IDS_MAX = 50;
|
|
|
58
58
|
export const ActorLookupEntryJson = z.strictObject({
|
|
59
59
|
id: Uuid,
|
|
60
60
|
username: z.string(),
|
|
61
|
-
display_name: z.string().optional()
|
|
61
|
+
display_name: z.string().optional()
|
|
62
62
|
});
|
|
63
63
|
export const ActorLookupInput = z.strictObject({
|
|
64
64
|
ids: z
|
|
@@ -66,11 +66,11 @@ export const ActorLookupInput = z.strictObject({
|
|
|
66
66
|
.min(1)
|
|
67
67
|
.max(ACTOR_LOOKUP_IDS_MAX)
|
|
68
68
|
.meta({
|
|
69
|
-
description: `Actor ids to resolve. Capped at ${ACTOR_LOOKUP_IDS_MAX}; unknown ids are silently absent from the response
|
|
70
|
-
})
|
|
69
|
+
description: `Actor ids to resolve. Capped at ${ACTOR_LOOKUP_IDS_MAX}; unknown ids are silently absent from the response.`
|
|
70
|
+
})
|
|
71
71
|
});
|
|
72
72
|
export const ActorLookupOutput = z.strictObject({
|
|
73
|
-
actors: z.array(ActorLookupEntryJson)
|
|
73
|
+
actors: z.array(ActorLookupEntryJson)
|
|
74
74
|
});
|
|
75
75
|
export const actor_lookup_action_spec = {
|
|
76
76
|
method: 'actor_lookup',
|
|
@@ -82,7 +82,7 @@ export const actor_lookup_action_spec = {
|
|
|
82
82
|
output: ActorLookupOutput,
|
|
83
83
|
async: true,
|
|
84
84
|
rate_limit: 'account',
|
|
85
|
-
description: `Batched id → (username, display_name) resolver, keyed by actor id. Powers the labels arc for surfaces that stamp an actor id (e.g. cell owners, grant grantors). Authenticated + per-account rate-limited to bound batched username enumeration. Cap ${ACTOR_LOOKUP_IDS_MAX}; unknown ids absent from response
|
|
85
|
+
description: `Batched id → (username, display_name) resolver, keyed by actor id. Powers the labels arc for surfaces that stamp an actor id (e.g. cell owners, grant grantors). Authenticated + per-account rate-limited to bound batched username enumeration. Cap ${ACTOR_LOOKUP_IDS_MAX}; unknown ids absent from response.`
|
|
86
86
|
};
|
|
87
87
|
/**
|
|
88
88
|
* All actor_lookup action specs — independent opt-in registry. Consumers
|
|
@@ -11,9 +11,11 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @module
|
|
13
13
|
*/
|
|
14
|
+
import type { Logger } from '@fuzdev/fuz_util/log.ts';
|
|
14
15
|
import { type RpcAction } from '../actions/action_rpc.js';
|
|
15
|
-
import type { RouteFactoryDeps } from './deps.js';
|
|
16
16
|
/** Dependencies for `create_actor_lookup_actions`. */
|
|
17
|
-
export
|
|
17
|
+
export interface ActorLookupActionDeps {
|
|
18
|
+
log: Logger;
|
|
19
|
+
}
|
|
18
20
|
export declare const create_actor_lookup_actions: (_deps: ActorLookupActionDeps) => Array<RpcAction>;
|
|
19
21
|
//# sourceMappingURL=actor_lookup_actions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actor_lookup_actions.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/actor_lookup_actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"actor_lookup_actions.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/actor_lookup_actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAkC,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAU1F,sDAAsD;AACtD,MAAM,WAAW,qBAAqB;IACrC,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,eAAO,MAAM,2BAA2B,GAAI,OAAO,qBAAqB,KAAG,KAAK,CAAC,SAAS,CAkBzF,CAAC"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { rpc_action } from '../actions/action_rpc.js';
|
|
15
15
|
import { query_actors_by_ids } from './actor_lookup_queries.js';
|
|
16
|
-
import { actor_lookup_action_spec
|
|
16
|
+
import { actor_lookup_action_spec } from './actor_lookup_action_specs.js';
|
|
17
17
|
export const create_actor_lookup_actions = (_deps) => {
|
|
18
18
|
const handler = async (input, ctx) => {
|
|
19
19
|
const rows = await query_actors_by_ids(ctx, input.ids);
|
|
@@ -23,9 +23,9 @@ export const create_actor_lookup_actions = (_deps) => {
|
|
|
23
23
|
return {
|
|
24
24
|
id: row.id,
|
|
25
25
|
username: row.username,
|
|
26
|
-
...(display_name ? { display_name } : {})
|
|
26
|
+
...(display_name ? { display_name } : {})
|
|
27
27
|
};
|
|
28
|
-
})
|
|
28
|
+
})
|
|
29
29
|
};
|
|
30
30
|
};
|
|
31
31
|
return [rpc_action(actor_lookup_action_spec, handler)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actor_lookup_queries.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/actor_lookup_queries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"actor_lookup_queries.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/actor_lookup_queries.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAErD,iFAAiF;AACjF,MAAM,WAAW,cAAc;IAC9B,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC/B,MAAM,SAAS,EACf,KAAK,aAAa,CAAC,IAAI,CAAC,KACtB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAS/B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actor_search_action_specs.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/actor_search_action_specs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"actor_search_action_specs.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/actor_search_action_specs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,gDAAgD;AAChD,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD;;;;GAIG;AACH,eAAO,MAAM,iCAAiC,EAAG,6BAAsC,CAAC;AAExF,eAAO,MAAM,gBAAgB;;;;kBAyB3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEhE,eAAO,MAAM,iBAAiB;;;;;;kBAE5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;CAcA,CAAC;AAEtC;;;;GAIG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;EAAsC,CAAC"}
|
|
@@ -100,10 +100,10 @@ export const ActorSearchInput = z.strictObject({
|
|
|
100
100
|
.min(1)
|
|
101
101
|
.max(ACTOR_SEARCH_QUERY_LENGTH_MAX)
|
|
102
102
|
.meta({
|
|
103
|
-
description: `Case-insensitive prefix match against \`actor.name\`. Length 1–${ACTOR_SEARCH_QUERY_LENGTH_MAX}
|
|
103
|
+
description: `Case-insensitive prefix match against \`actor.name\`. Length 1–${ACTOR_SEARCH_QUERY_LENGTH_MAX}.`
|
|
104
104
|
}),
|
|
105
105
|
scope_ids: z.array(Uuid).optional().meta({
|
|
106
|
-
description: 'Restrict results to actors holding a role_grant on any of these scopes. Required (non-empty) for non-admin callers; admin callers may omit or pass empty for unbounded search. Caller is responsible for pre-filtering against their own authority — the SQL filter does not enforce it.'
|
|
106
|
+
description: 'Restrict results to actors holding a role_grant on any of these scopes. Required (non-empty) for non-admin callers; admin callers may omit or pass empty for unbounded search. Caller is responsible for pre-filtering against their own authority — the SQL filter does not enforce it.'
|
|
107
107
|
}),
|
|
108
108
|
limit: z
|
|
109
109
|
.number()
|
|
@@ -112,11 +112,11 @@ export const ActorSearchInput = z.strictObject({
|
|
|
112
112
|
.max(ACTOR_SEARCH_LIMIT_MAX)
|
|
113
113
|
.optional()
|
|
114
114
|
.meta({
|
|
115
|
-
description: `Maximum rows to return. Defaults to ${ACTOR_SEARCH_LIMIT_DEFAULT}, hard cap ${ACTOR_SEARCH_LIMIT_MAX}
|
|
116
|
-
})
|
|
115
|
+
description: `Maximum rows to return. Defaults to ${ACTOR_SEARCH_LIMIT_DEFAULT}, hard cap ${ACTOR_SEARCH_LIMIT_MAX}.`
|
|
116
|
+
})
|
|
117
117
|
});
|
|
118
118
|
export const ActorSearchOutput = z.strictObject({
|
|
119
|
-
actors: z.array(ActorLookupEntryJson)
|
|
119
|
+
actors: z.array(ActorLookupEntryJson)
|
|
120
120
|
});
|
|
121
121
|
export const actor_search_action_spec = {
|
|
122
122
|
method: 'actor_search',
|
|
@@ -129,7 +129,7 @@ export const actor_search_action_spec = {
|
|
|
129
129
|
async: true,
|
|
130
130
|
rate_limit: 'account',
|
|
131
131
|
error_reasons: [ERROR_ACTOR_SEARCH_SCOPE_REQUIRED],
|
|
132
|
-
description: `Case-insensitive prefix search over actor.name, returning {id, username, display_name?} rows. Authenticated + per-account rate-limited; non-admin callers must pass at least one scope_id. Default limit ${ACTOR_SEARCH_LIMIT_DEFAULT}, hard cap ${ACTOR_SEARCH_LIMIT_MAX}
|
|
132
|
+
description: `Case-insensitive prefix search over actor.name, returning {id, username, display_name?} rows. Authenticated + per-account rate-limited; non-admin callers must pass at least one scope_id. Default limit ${ACTOR_SEARCH_LIMIT_DEFAULT}, hard cap ${ACTOR_SEARCH_LIMIT_MAX}.`
|
|
133
133
|
};
|
|
134
134
|
/**
|
|
135
135
|
* All actor_search action specs — independent opt-in registry. Like
|
|
@@ -23,9 +23,11 @@
|
|
|
23
23
|
*
|
|
24
24
|
* @module
|
|
25
25
|
*/
|
|
26
|
+
import type { Logger } from '@fuzdev/fuz_util/log.ts';
|
|
26
27
|
import { type RpcAction } from '../actions/action_rpc.js';
|
|
27
|
-
import type { RouteFactoryDeps } from './deps.js';
|
|
28
28
|
/** Dependencies for `create_actor_search_actions`. */
|
|
29
|
-
export
|
|
29
|
+
export interface ActorSearchActionDeps {
|
|
30
|
+
log: Logger;
|
|
31
|
+
}
|
|
30
32
|
export declare const create_actor_search_actions: (_deps: ActorSearchActionDeps) => Array<RpcAction>;
|
|
31
33
|
//# sourceMappingURL=actor_search_actions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actor_search_actions.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/actor_search_actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;
|
|
1
|
+
{"version":3,"file":"actor_search_actions.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/auth/actor_search_actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAc9F,sDAAsD;AACtD,MAAM,WAAW,qBAAqB;IACrC,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,eAAO,MAAM,2BAA2B,GAAI,OAAO,qBAAqB,KAAG,KAAK,CAAC,SAAS,CAiCzF,CAAC"}
|