@fuzdev/fuz_app 0.54.0 → 0.56.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 +214 -103
- package/dist/actions/action_bridge.d.ts +8 -5
- package/dist/actions/action_bridge.d.ts.map +1 -1
- package/dist/actions/action_bridge.js +1 -11
- package/dist/actions/action_codegen.d.ts +32 -0
- package/dist/actions/action_codegen.d.ts.map +1 -1
- package/dist/actions/action_codegen.js +35 -15
- package/dist/actions/action_registry.d.ts.map +1 -1
- package/dist/actions/action_registry.js +5 -2
- package/dist/actions/action_rpc.d.ts +141 -22
- package/dist/actions/action_rpc.d.ts.map +1 -1
- package/dist/actions/action_rpc.js +106 -187
- package/dist/actions/action_spec.d.ts +55 -16
- package/dist/actions/action_spec.d.ts.map +1 -1
- package/dist/actions/action_spec.js +16 -11
- package/dist/actions/action_types.d.ts +28 -60
- package/dist/actions/action_types.d.ts.map +1 -1
- package/dist/actions/action_types.js +13 -5
- package/dist/actions/broadcast_api.d.ts +2 -2
- package/dist/actions/broadcast_api.js +2 -2
- package/dist/actions/compile_action_registry.d.ts +50 -0
- package/dist/actions/compile_action_registry.d.ts.map +1 -0
- package/dist/actions/compile_action_registry.js +69 -0
- package/dist/actions/heartbeat.d.ts +8 -4
- package/dist/actions/heartbeat.d.ts.map +1 -1
- package/dist/actions/heartbeat.js +5 -4
- package/dist/actions/perform_action.d.ts +145 -0
- package/dist/actions/perform_action.d.ts.map +1 -0
- package/dist/actions/perform_action.js +258 -0
- package/dist/actions/register_action_ws.d.ts +46 -40
- package/dist/actions/register_action_ws.d.ts.map +1 -1
- package/dist/actions/register_action_ws.js +101 -159
- package/dist/actions/register_ws_endpoint.d.ts +15 -10
- package/dist/actions/register_ws_endpoint.d.ts.map +1 -1
- package/dist/actions/register_ws_endpoint.js +54 -7
- package/dist/actions/transports.d.ts.map +1 -1
- package/dist/actions/transports.js +0 -4
- package/dist/actions/transports_ws_auth_guard.d.ts +1 -1
- package/dist/actions/transports_ws_auth_guard.js +1 -1
- package/dist/actions/transports_ws_backend.d.ts +1 -1
- package/dist/actions/transports_ws_backend.js +1 -1
- package/dist/auth/CLAUDE.md +794 -410
- package/dist/auth/account_action_specs.d.ts +28 -7
- package/dist/auth/account_action_specs.d.ts.map +1 -1
- package/dist/auth/account_action_specs.js +7 -7
- package/dist/auth/account_actions.d.ts +7 -13
- package/dist/auth/account_actions.d.ts.map +1 -1
- package/dist/auth/account_actions.js +26 -35
- package/dist/auth/account_queries.d.ts +52 -16
- package/dist/auth/account_queries.d.ts.map +1 -1
- package/dist/auth/account_queries.js +87 -38
- package/dist/auth/account_routes.d.ts +9 -11
- package/dist/auth/account_routes.d.ts.map +1 -1
- package/dist/auth/account_routes.js +118 -46
- package/dist/auth/account_schema.d.ts +46 -35
- package/dist/auth/account_schema.d.ts.map +1 -1
- package/dist/auth/account_schema.js +21 -28
- package/dist/auth/admin_action_specs.d.ts +100 -32
- package/dist/auth/admin_action_specs.d.ts.map +1 -1
- package/dist/auth/admin_action_specs.js +64 -33
- package/dist/auth/admin_actions.d.ts +13 -19
- package/dist/auth/admin_actions.d.ts.map +1 -1
- package/dist/auth/admin_actions.js +37 -41
- package/dist/auth/audit_emitter.d.ts +160 -0
- package/dist/auth/audit_emitter.d.ts.map +1 -0
- package/dist/auth/audit_emitter.js +83 -0
- package/dist/auth/audit_log_queries.d.ts +17 -48
- package/dist/auth/audit_log_queries.d.ts.map +1 -1
- package/dist/auth/audit_log_queries.js +20 -56
- package/dist/auth/audit_log_routes.d.ts +1 -1
- package/dist/auth/audit_log_routes.d.ts.map +1 -1
- package/dist/auth/audit_log_routes.js +7 -3
- package/dist/auth/audit_log_schema.d.ts +92 -32
- package/dist/auth/audit_log_schema.d.ts.map +1 -1
- package/dist/auth/audit_log_schema.js +75 -46
- package/dist/auth/auth_guard_resolver.d.ts +44 -0
- package/dist/auth/auth_guard_resolver.d.ts.map +1 -0
- package/dist/auth/auth_guard_resolver.js +56 -0
- package/dist/auth/bearer_auth.d.ts +9 -7
- package/dist/auth/bearer_auth.d.ts.map +1 -1
- package/dist/auth/bearer_auth.js +13 -21
- package/dist/auth/bootstrap_account.d.ts +7 -7
- package/dist/auth/bootstrap_account.d.ts.map +1 -1
- package/dist/auth/bootstrap_account.js +7 -7
- package/dist/auth/bootstrap_routes.d.ts.map +1 -1
- package/dist/auth/bootstrap_routes.js +11 -10
- package/dist/auth/cleanup.d.ts +20 -26
- package/dist/auth/cleanup.d.ts.map +1 -1
- package/dist/auth/cleanup.js +33 -42
- package/dist/auth/credential_type_schema.d.ts +115 -0
- package/dist/auth/credential_type_schema.d.ts.map +1 -0
- package/dist/auth/credential_type_schema.js +127 -0
- package/dist/auth/daemon_token_middleware.d.ts +23 -11
- package/dist/auth/daemon_token_middleware.d.ts.map +1 -1
- package/dist/auth/daemon_token_middleware.js +28 -22
- package/dist/auth/ddl.d.ts +2 -2
- package/dist/auth/ddl.d.ts.map +1 -1
- package/dist/auth/ddl.js +6 -6
- package/dist/auth/deps.d.ts +7 -18
- package/dist/auth/deps.d.ts.map +1 -1
- package/dist/auth/grant_path_schema.d.ts +117 -0
- package/dist/auth/grant_path_schema.d.ts.map +1 -0
- package/dist/auth/grant_path_schema.js +137 -0
- package/dist/auth/invite_queries.d.ts +12 -1
- package/dist/auth/invite_queries.d.ts.map +1 -1
- package/dist/auth/invite_queries.js +12 -1
- package/dist/auth/invite_schema.d.ts +1 -1
- package/dist/auth/invite_schema.d.ts.map +1 -1
- package/dist/auth/invite_schema.js +1 -1
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +9 -4
- package/dist/auth/migrations.d.ts +37 -14
- package/dist/auth/migrations.d.ts.map +1 -1
- package/dist/auth/migrations.js +79 -32
- package/dist/auth/request_context.d.ts +331 -61
- package/dist/auth/request_context.d.ts.map +1 -1
- package/dist/auth/request_context.js +378 -95
- package/dist/auth/{permit_offer_action_specs.d.ts → role_grant_offer_action_specs.d.ts} +163 -94
- package/dist/auth/role_grant_offer_action_specs.d.ts.map +1 -0
- package/dist/auth/role_grant_offer_action_specs.js +262 -0
- package/dist/auth/role_grant_offer_actions.d.ts +104 -0
- package/dist/auth/role_grant_offer_actions.d.ts.map +1 -0
- package/dist/auth/role_grant_offer_actions.js +473 -0
- package/dist/auth/{permit_offer_notifications.d.ts → role_grant_offer_notifications.d.ts} +90 -70
- package/dist/auth/role_grant_offer_notifications.d.ts.map +1 -0
- package/dist/auth/role_grant_offer_notifications.js +182 -0
- package/dist/auth/role_grant_offer_queries.d.ts +242 -0
- package/dist/auth/role_grant_offer_queries.d.ts.map +1 -0
- package/dist/auth/role_grant_offer_queries.js +533 -0
- package/dist/auth/role_grant_offer_schema.d.ts +150 -0
- package/dist/auth/role_grant_offer_schema.d.ts.map +1 -0
- package/dist/auth/{permit_offer_schema.js → role_grant_offer_schema.js} +60 -36
- package/dist/auth/role_grant_queries.d.ts +231 -0
- package/dist/auth/role_grant_queries.d.ts.map +1 -0
- package/dist/auth/role_grant_queries.js +320 -0
- package/dist/auth/role_schema.d.ts +150 -40
- package/dist/auth/role_schema.d.ts.map +1 -1
- package/dist/auth/role_schema.js +144 -45
- package/dist/auth/scope_kind_schema.d.ts +96 -0
- package/dist/auth/scope_kind_schema.d.ts.map +1 -0
- package/dist/auth/scope_kind_schema.js +94 -0
- package/dist/auth/self_service_role_action_specs.d.ts +6 -1
- package/dist/auth/self_service_role_action_specs.d.ts.map +1 -1
- package/dist/auth/self_service_role_action_specs.js +3 -1
- package/dist/auth/self_service_role_actions.d.ts +34 -27
- package/dist/auth/self_service_role_actions.d.ts.map +1 -1
- package/dist/auth/self_service_role_actions.js +68 -48
- package/dist/auth/session_cookie.d.ts +43 -6
- package/dist/auth/session_cookie.d.ts.map +1 -1
- package/dist/auth/session_cookie.js +31 -5
- package/dist/auth/session_middleware.d.ts +37 -3
- package/dist/auth/session_middleware.d.ts.map +1 -1
- package/dist/auth/session_middleware.js +33 -7
- package/dist/auth/signup_routes.d.ts.map +1 -1
- package/dist/auth/signup_routes.js +48 -19
- package/dist/auth/standard_action_specs.d.ts +2 -2
- package/dist/auth/standard_action_specs.js +4 -4
- package/dist/auth/standard_rpc_actions.d.ts +23 -19
- package/dist/auth/standard_rpc_actions.d.ts.map +1 -1
- package/dist/auth/standard_rpc_actions.js +12 -12
- package/dist/db/migrate.d.ts +12 -8
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +10 -7
- package/dist/dev/setup.d.ts +2 -2
- package/dist/dev/setup.d.ts.map +1 -1
- package/dist/dev/setup.js +9 -7
- package/dist/env/load.d.ts +1 -1
- package/dist/env/load.js +1 -1
- package/dist/hono_context.d.ts +64 -5
- package/dist/hono_context.d.ts.map +1 -1
- package/dist/hono_context.js +38 -2
- package/dist/http/CLAUDE.md +264 -87
- package/dist/http/auth_shape.d.ts +191 -0
- package/dist/http/auth_shape.d.ts.map +1 -0
- package/dist/http/auth_shape.js +237 -0
- package/dist/http/common_routes.js +3 -3
- package/dist/http/db_routes.d.ts +4 -0
- package/dist/http/db_routes.d.ts.map +1 -1
- package/dist/http/db_routes.js +44 -7
- package/dist/http/error_schemas.d.ts +132 -19
- package/dist/http/error_schemas.d.ts.map +1 -1
- package/dist/http/error_schemas.js +132 -40
- package/dist/http/jsonrpc_errors.d.ts +27 -2
- package/dist/http/jsonrpc_errors.d.ts.map +1 -1
- package/dist/http/jsonrpc_errors.js +26 -2
- package/dist/http/pending_effects.d.ts +71 -18
- package/dist/http/pending_effects.d.ts.map +1 -1
- package/dist/http/pending_effects.js +87 -18
- package/dist/http/proxy.d.ts +52 -5
- package/dist/http/proxy.d.ts.map +1 -1
- package/dist/http/proxy.js +92 -14
- package/dist/http/route_spec.d.ts +113 -41
- package/dist/http/route_spec.d.ts.map +1 -1
- package/dist/http/route_spec.js +130 -52
- package/dist/http/schema_helpers.d.ts +3 -2
- package/dist/http/schema_helpers.d.ts.map +1 -1
- package/dist/http/schema_helpers.js +9 -2
- package/dist/http/surface.d.ts +2 -1
- package/dist/http/surface.d.ts.map +1 -1
- package/dist/http/surface.js +1 -2
- package/dist/http/surface_query.d.ts +39 -35
- package/dist/http/surface_query.d.ts.map +1 -1
- package/dist/http/surface_query.js +79 -36
- package/dist/primitive_schemas.d.ts +39 -0
- package/dist/primitive_schemas.d.ts.map +1 -0
- package/dist/primitive_schemas.js +40 -0
- package/dist/realtime/sse_auth_guard.d.ts +5 -5
- package/dist/realtime/sse_auth_guard.js +9 -9
- package/dist/runtime/mock.d.ts +1 -1
- package/dist/runtime/mock.js +1 -1
- package/dist/server/app_backend.d.ts +14 -11
- package/dist/server/app_backend.d.ts.map +1 -1
- package/dist/server/app_backend.js +12 -8
- package/dist/server/app_server.d.ts +7 -7
- package/dist/server/app_server.d.ts.map +1 -1
- package/dist/server/app_server.js +36 -31
- package/dist/server/validate_nginx.d.ts +1 -1
- package/dist/server/validate_nginx.js +1 -1
- package/dist/testing/CLAUDE.md +73 -55
- package/dist/testing/admin_integration.d.ts +5 -6
- package/dist/testing/admin_integration.d.ts.map +1 -1
- package/dist/testing/admin_integration.js +100 -96
- package/dist/testing/adversarial_headers.js +1 -1
- package/dist/testing/app_server.d.ts +11 -14
- package/dist/testing/app_server.d.ts.map +1 -1
- package/dist/testing/app_server.js +18 -17
- package/dist/testing/assertions.d.ts.map +1 -1
- package/dist/testing/assertions.js +2 -1
- package/dist/testing/attack_surface.d.ts.map +1 -1
- package/dist/testing/attack_surface.js +15 -9
- package/dist/testing/audit_completeness.d.ts +2 -2
- package/dist/testing/audit_completeness.d.ts.map +1 -1
- package/dist/testing/audit_completeness.js +53 -39
- package/dist/testing/auth_apps.d.ts +5 -4
- package/dist/testing/auth_apps.d.ts.map +1 -1
- package/dist/testing/auth_apps.js +28 -22
- package/dist/testing/data_exposure.d.ts.map +1 -1
- package/dist/testing/data_exposure.js +5 -5
- package/dist/testing/db.d.ts +1 -1
- package/dist/testing/db.d.ts.map +1 -1
- package/dist/testing/db.js +4 -4
- package/dist/testing/db_entities.d.ts +22 -0
- package/dist/testing/db_entities.d.ts.map +1 -0
- package/dist/testing/db_entities.js +28 -0
- package/dist/testing/entities.d.ts +10 -8
- package/dist/testing/entities.d.ts.map +1 -1
- package/dist/testing/entities.js +22 -18
- package/dist/testing/integration.d.ts.map +1 -1
- package/dist/testing/integration.js +13 -14
- package/dist/testing/integration_helpers.d.ts +8 -6
- package/dist/testing/integration_helpers.d.ts.map +1 -1
- package/dist/testing/integration_helpers.js +29 -23
- package/dist/testing/middleware.d.ts +15 -11
- package/dist/testing/middleware.d.ts.map +1 -1
- package/dist/testing/middleware.js +75 -32
- package/dist/testing/rpc_attack_surface.d.ts.map +1 -1
- package/dist/testing/rpc_attack_surface.js +40 -24
- package/dist/testing/rpc_helpers.d.ts.map +1 -1
- package/dist/testing/rpc_helpers.js +3 -1
- package/dist/testing/rpc_round_trip.d.ts +1 -1
- package/dist/testing/rpc_round_trip.d.ts.map +1 -1
- package/dist/testing/rpc_round_trip.js +14 -13
- package/dist/testing/sse_round_trip.d.ts +3 -4
- package/dist/testing/sse_round_trip.d.ts.map +1 -1
- package/dist/testing/sse_round_trip.js +7 -11
- package/dist/testing/standard.d.ts +1 -1
- package/dist/testing/stubs.d.ts +25 -0
- package/dist/testing/stubs.d.ts.map +1 -1
- package/dist/testing/stubs.js +43 -2
- package/dist/testing/surface_invariants.d.ts +2 -2
- package/dist/testing/ws_round_trip.d.ts +12 -13
- package/dist/testing/ws_round_trip.d.ts.map +1 -1
- package/dist/testing/ws_round_trip.js +24 -12
- package/dist/ui/AdminAccounts.svelte +23 -20
- package/dist/ui/AdminOverview.svelte +15 -13
- package/dist/ui/AdminOverview.svelte.d.ts.map +1 -1
- package/dist/ui/{AdminPermitHistory.svelte → AdminRoleGrantHistory.svelte} +12 -12
- package/dist/ui/AdminRoleGrantHistory.svelte.d.ts +4 -0
- package/dist/ui/AdminRoleGrantHistory.svelte.d.ts.map +1 -0
- package/dist/ui/BootstrapForm.svelte +1 -1
- package/dist/ui/CLAUDE.md +65 -59
- package/dist/ui/{PermitOfferForm.svelte → RoleGrantOfferForm.svelte} +37 -22
- package/dist/ui/RoleGrantOfferForm.svelte.d.ts +20 -0
- package/dist/ui/RoleGrantOfferForm.svelte.d.ts.map +1 -0
- package/dist/ui/{PermitOfferHistory.svelte → RoleGrantOfferHistory.svelte} +12 -12
- package/dist/ui/{PermitOfferHistory.svelte.d.ts → RoleGrantOfferHistory.svelte.d.ts} +4 -4
- package/dist/ui/RoleGrantOfferHistory.svelte.d.ts.map +1 -0
- package/dist/ui/{PermitOfferInbox.svelte → RoleGrantOfferInbox.svelte} +14 -14
- package/dist/ui/{PermitOfferInbox.svelte.d.ts → RoleGrantOfferInbox.svelte.d.ts} +4 -4
- package/dist/ui/RoleGrantOfferInbox.svelte.d.ts.map +1 -0
- package/dist/ui/SignupForm.svelte +1 -1
- package/dist/ui/SurfaceExplorer.svelte +35 -15
- package/dist/ui/SurfaceExplorer.svelte.d.ts.map +1 -1
- package/dist/ui/account_sessions_state.svelte.d.ts +2 -3
- package/dist/ui/account_sessions_state.svelte.d.ts.map +1 -1
- package/dist/ui/account_sessions_state.svelte.js +2 -3
- package/dist/ui/admin_accounts_state.svelte.d.ts +25 -18
- package/dist/ui/admin_accounts_state.svelte.d.ts.map +1 -1
- package/dist/ui/admin_accounts_state.svelte.js +28 -17
- package/dist/ui/admin_rpc_adapters.d.ts +20 -20
- package/dist/ui/admin_rpc_adapters.d.ts.map +1 -1
- package/dist/ui/admin_rpc_adapters.js +17 -17
- package/dist/ui/admin_sessions_state.svelte.d.ts +2 -2
- package/dist/ui/admin_sessions_state.svelte.js +2 -2
- package/dist/ui/audit_log_state.svelte.d.ts +7 -7
- package/dist/ui/audit_log_state.svelte.d.ts.map +1 -1
- package/dist/ui/audit_log_state.svelte.js +6 -6
- package/dist/ui/auth_state.svelte.d.ts +3 -3
- package/dist/ui/auth_state.svelte.d.ts.map +1 -1
- package/dist/ui/auth_state.svelte.js +6 -6
- package/dist/ui/format_scope.d.ts +2 -2
- package/dist/ui/format_scope.js +2 -2
- package/dist/ui/{permit_offers_state.svelte.d.ts → role_grant_offers_state.svelte.d.ts} +39 -31
- package/dist/ui/role_grant_offers_state.svelte.d.ts.map +1 -0
- package/dist/ui/{permit_offers_state.svelte.js → role_grant_offers_state.svelte.js} +25 -19
- package/dist/ui/ui_format.js +2 -2
- package/package.json +3 -3
- package/dist/auth/permit_offer_action_specs.d.ts.map +0 -1
- package/dist/auth/permit_offer_action_specs.js +0 -227
- package/dist/auth/permit_offer_actions.d.ts +0 -110
- package/dist/auth/permit_offer_actions.d.ts.map +0 -1
- package/dist/auth/permit_offer_actions.js +0 -452
- package/dist/auth/permit_offer_notifications.d.ts.map +0 -1
- package/dist/auth/permit_offer_notifications.js +0 -182
- package/dist/auth/permit_offer_queries.d.ts +0 -183
- package/dist/auth/permit_offer_queries.d.ts.map +0 -1
- package/dist/auth/permit_offer_queries.js +0 -408
- package/dist/auth/permit_offer_schema.d.ts +0 -103
- package/dist/auth/permit_offer_schema.d.ts.map +0 -1
- package/dist/auth/permit_queries.d.ts +0 -210
- package/dist/auth/permit_queries.d.ts.map +0 -1
- package/dist/auth/permit_queries.js +0 -294
- package/dist/auth/require_keeper.d.ts +0 -20
- package/dist/auth/require_keeper.d.ts.map +0 -1
- package/dist/auth/require_keeper.js +0 -35
- package/dist/auth/route_guards.d.ts +0 -21
- package/dist/auth/route_guards.d.ts.map +0 -1
- package/dist/auth/route_guards.js +0 -32
- package/dist/auth/session_lifecycle.d.ts +0 -37
- package/dist/auth/session_lifecycle.d.ts.map +0 -1
- package/dist/auth/session_lifecycle.js +0 -29
- package/dist/ui/AdminPermitHistory.svelte.d.ts +0 -4
- package/dist/ui/AdminPermitHistory.svelte.d.ts.map +0 -1
- package/dist/ui/PermitOfferForm.svelte.d.ts +0 -14
- package/dist/ui/PermitOfferForm.svelte.d.ts.map +0 -1
- package/dist/ui/PermitOfferHistory.svelte.d.ts.map +0 -1
- package/dist/ui/PermitOfferInbox.svelte.d.ts.map +0 -1
- package/dist/ui/permit_offers_state.svelte.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action_codegen.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/action_codegen.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,eAAe,EAAE,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAGxE;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,kCAAmC,CAAC;AAExE,8FAA8F;AAC9F,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAC;AAI5E;;;;;;;;;;GAUG;AACH,eAAO,MAAM,yBAAyB,GAAI,QAAQ,MAAM,KAAG,MAAM,IAAI,oBACrC,CAAC;AAEjC,UAAU,UAAU;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,aAAa;;IACzB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAa;IAE1D;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQrC;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI;IAOrD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI;IA6BtD;;;;OAIG;IACH,KAAK,IAAI,MAAM;IAIf,WAAW,IAAI,OAAO;IAItB,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,0FAA0F;IAC1F,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC;IAIxB;;;;;OAKG;IACH,KAAK,IAAI,IAAI;CAiDb;AAED,2FAA2F;AAC3F,eAAO,MAAM,mBAAmB,GAC/B,MAAM,eAAe,EACrB,UAAU,UAAU,GAAG,SAAS,KAC9B,KAAK,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"action_codegen.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/action_codegen.ts"],"names":[],"mappings":"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"}
|
|
@@ -197,10 +197,11 @@ export const get_executor_phases = (spec, executor) => {
|
|
|
197
197
|
}
|
|
198
198
|
if (can_receive) {
|
|
199
199
|
phases.push('receive_request', 'send_response');
|
|
200
|
-
//
|
|
201
|
-
//
|
|
202
|
-
//
|
|
203
|
-
|
|
200
|
+
// Backend's receive branch needs `send_error` for the failure
|
|
201
|
+
// path on incoming requests; only push when the send branch
|
|
202
|
+
// hasn't already added it (`initiator: 'both'`).
|
|
203
|
+
if (!can_send)
|
|
204
|
+
phases.push('send_error');
|
|
204
205
|
}
|
|
205
206
|
break;
|
|
206
207
|
default:
|
|
@@ -226,8 +227,7 @@ export const get_executor_phases = (spec, executor) => {
|
|
|
226
227
|
default:
|
|
227
228
|
throw new UnreachableError(kind);
|
|
228
229
|
}
|
|
229
|
-
|
|
230
|
-
return Array.from(new Set(phases));
|
|
230
|
+
return phases;
|
|
231
231
|
};
|
|
232
232
|
/** Default `collections_path` — every consumer's gen producers point at the sibling `action_collections.js`. */
|
|
233
233
|
export const DEFAULT_COLLECTIONS_PATH = './action_collections.js';
|
|
@@ -330,6 +330,19 @@ export const to_action_spec_output_identifier = (method) => `${to_action_spec_id
|
|
|
330
330
|
* follows so wrappers no longer pre-register imports a per-spec emit might
|
|
331
331
|
* not actually use.
|
|
332
332
|
*
|
|
333
|
+
* **Optional-input detection.** The emitted parameter is `input?:` (caller
|
|
334
|
+
* may omit the argument) when either (a) the schema accepts `undefined` —
|
|
335
|
+
* `z.optional(z.strictObject(...))` and similar wrappers — or (b) the
|
|
336
|
+
* schema accepts the empty object `{}` — `z.strictObject({acting:
|
|
337
|
+
ActingActor})` and other all-optional-fields strict objects. The second
|
|
338
|
+
* probe mirrors the dispatcher's HTTP convention (`raw_params ?? {}` for
|
|
339
|
+
* non-`z.void()` schemas in `actions/action_rpc.ts` / `http/route_spec.ts`):
|
|
340
|
+
* if a request with no params reaches the handler, this is the value the
|
|
341
|
+
* schema is asked to validate. A schema with required fields fails both
|
|
342
|
+
* probes and stays `input:` (required at the typed surface). Refinements
|
|
343
|
+
* and transforms run as part of `safeParse`, so their accept/reject
|
|
344
|
+
* decisions feed into the optional/required choice naturally.
|
|
345
|
+
*
|
|
333
346
|
* @param options.sync_returns_value - When true (default), sync `local_call`
|
|
334
347
|
* methods return the output value directly; when false they're wrapped in
|
|
335
348
|
* `Result<{value, error}>` like async methods. Set to `false` if your
|
|
@@ -343,8 +356,9 @@ export const generate_actions_api_method_signature = (spec, imports, options) =>
|
|
|
343
356
|
const collections_path = options?.collections_path ?? DEFAULT_COLLECTIONS_PATH;
|
|
344
357
|
const innermost_type_name = zod_get_base_type(spec.input);
|
|
345
358
|
const has_input = innermost_type_name !== 'null' && innermost_type_name !== 'void';
|
|
359
|
+
const input_optional = has_input && (spec.input.safeParse(undefined).success || spec.input.safeParse({}).success);
|
|
346
360
|
const input_param = has_input
|
|
347
|
-
? `input${
|
|
361
|
+
? `input${input_optional ? '?' : ''}: ActionInputs['${spec.method}']`
|
|
348
362
|
: 'input?: void';
|
|
349
363
|
if (has_input)
|
|
350
364
|
imports.add_type(collections_path, 'ActionInputs');
|
|
@@ -380,7 +394,7 @@ export const generate_actions_api_method_signature = (spec, imports, options) =>
|
|
|
380
394
|
// `qualify_spec?: (spec) => string` to emit a per-spec qualified identifier
|
|
381
395
|
// (e.g. `admin_specs.account_list_action_spec`) for consumers stitching local
|
|
382
396
|
// specs together with multiple upstream sources (`all_admin_action_specs` /
|
|
383
|
-
// `
|
|
397
|
+
// `all_role_grant_offer_action_specs` / `all_account_action_specs` /
|
|
384
398
|
// `all_self_service_role_action_specs` from fuz_app). When `qualify_spec` is
|
|
385
399
|
// set, the helper does NOT add a `* as specs` import — the consumer manages
|
|
386
400
|
// the multiple `* as ns` imports itself — and `specs_module` is ignored.
|
|
@@ -423,15 +437,21 @@ export const ACTION_METHOD_ENUM_KINDS_ALL = new Set([
|
|
|
423
437
|
*/
|
|
424
438
|
const filter_protocol_actions = (specs, include_protocol_actions) => include_protocol_actions ? specs : specs.filter((s) => !is_protocol_action_method(s.method));
|
|
425
439
|
/**
|
|
426
|
-
* Resolve
|
|
440
|
+
* Resolve a per-spec identifier qualifier with the standard default-vs-callback
|
|
441
|
+
* dance. When `qualify_spec` is set, returns the caller's callback verbatim
|
|
442
|
+
* and registers no imports — the caller owns its namespace setup (the
|
|
443
|
+
* multi-source case where specs come from several modules). Otherwise,
|
|
444
|
+
* registers `* as specs from specs_module` (defaulting to
|
|
445
|
+
* `'./action_specs.js'`) on `imports` and returns
|
|
446
|
+
* `(spec) => 'specs.' + to_action_spec_identifier(spec.method)`.
|
|
447
|
+
*
|
|
448
|
+
* Used internally by every multi-source-aware helper in this module
|
|
427
449
|
* (`generate_action_specs_record`, `generate_action_inputs_outputs`,
|
|
428
|
-
* `generate_backend_actions_api`)
|
|
429
|
-
*
|
|
430
|
-
*
|
|
431
|
-
* import (defaulting to `'./action_specs.js'`) and returns the matching
|
|
432
|
-
* `specs.${method}_action_spec` qualifier.
|
|
450
|
+
* `generate_backend_actions_api`); exported so consumers writing their own
|
|
451
|
+
* codegen helpers can reuse the same defaulting + import-registration
|
|
452
|
+
* behavior instead of reimplementing it.
|
|
433
453
|
*/
|
|
434
|
-
const resolve_spec_qualifier = (imports, options) => {
|
|
454
|
+
export const resolve_spec_qualifier = (imports, options) => {
|
|
435
455
|
if (options?.qualify_spec)
|
|
436
456
|
return options.qualify_spec;
|
|
437
457
|
const specs_module = options?.specs_module ?? DEFAULT_SPECS_MODULE;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action_registry.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/action_registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EACX,eAAe,EACf,yBAAyB,EACzB,4BAA4B,EAC5B,mBAAmB,EACnB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"action_registry.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/action_registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EACX,eAAe,EACf,yBAAyB,EACzB,4BAA4B,EAC5B,mBAAmB,EACnB,MAAM,kBAAkB,CAAC;AAQ1B,qBAAa,cAAc;;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;gBAE3B,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC;IAKzC,IAAI,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAEjD;IAED,IAAI,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,CAE3B;IAID,IAAI,sBAAsB,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAE7D;IAED,IAAI,yBAAyB,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAEnE;IAED,IAAI,gBAAgB,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAEjD;IAED,IAAI,wBAAwB,IAAI,KAAK,CAAC,MAAM,CAAC,CAE5C;IAED,IAAI,2BAA2B,IAAI,KAAK,CAAC,MAAM,CAAC,CAE/C;IAED,IAAI,kBAAkB,IAAI,KAAK,CAAC,MAAM,CAAC,CAEtC;IAOD,IAAI,0BAA0B,IAAI,KAAK,CAAC,eAAe,CAAC,CAEvD;IAED,IAAI,yBAAyB,IAAI,KAAK,CAAC,eAAe,CAAC,CAEtD;IAED,IAAI,4BAA4B,IAAI,KAAK,CAAC,MAAM,CAAC,CAEhD;IAED,IAAI,2BAA2B,IAAI,KAAK,CAAC,MAAM,CAAC,CAE/C;IAOD,IAAI,sBAAsB,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAE7D;IAED,IAAI,qBAAqB,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAE5D;IAED,IAAI,wBAAwB,IAAI,KAAK,CAAC,MAAM,CAAC,CAE5C;IAED,IAAI,uBAAuB,IAAI,KAAK,CAAC,MAAM,CAAC,CAE3C;IASD,IAAI,eAAe,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAKzD;IAED,IAAI,iBAAiB,IAAI,KAAK,CAAC,MAAM,CAAC,CAErC;IAED,IAAI,uBAAuB,IAAI,KAAK,CAAC,eAAe,CAAC,CAKpD;IAED,IAAI,yBAAyB,IAAI,KAAK,CAAC,MAAM,CAAC,CAE7C;IAID,IAAI,yBAAyB,IAAI,KAAK,CAAC,eAAe,CAAC,CAEtD;IAED,IAAI,yBAAyB,IAAI,KAAK,CAAC,eAAe,CAAC,CAEtD;IAED,IAAI,2BAA2B,IAAI,KAAK,CAAC,MAAM,CAAC,CAE/C;IAED,IAAI,2BAA2B,IAAI,KAAK,CAAC,MAAM,CAAC,CAE/C;IAID,IAAI,YAAY,IAAI,KAAK,CAAC,eAAe,CAAC,CAEzC;IAED,IAAI,mBAAmB,IAAI,KAAK,CAAC,eAAe,CAAC,CAOhD;IAED,IAAI,cAAc,IAAI,KAAK,CAAC,MAAM,CAAC,CAElC;IAED,IAAI,qBAAqB,IAAI,KAAK,CAAC,MAAM,CAAC,CAEzC;CAaD"}
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
*
|
|
27
27
|
* @module
|
|
28
28
|
*/
|
|
29
|
+
import { is_public_auth } from '../http/auth_shape.js';
|
|
29
30
|
// The auth (`public_*`, `authenticated_*`) and initiator-direction
|
|
30
31
|
// (`backend_to_frontend_*`, `frontend_to_backend_*`) getters are pre-built
|
|
31
32
|
// API surface unused by codegen today; kept low-cost for future filtering
|
|
@@ -128,10 +129,12 @@ export class ActionRegistry {
|
|
|
128
129
|
}
|
|
129
130
|
// --- Auth (pre-built, unused by codegen today) ---
|
|
130
131
|
get public_specs() {
|
|
131
|
-
return this.specs.filter((spec) => spec.auth
|
|
132
|
+
return this.specs.filter((spec) => spec.auth !== null && is_public_auth(spec.auth));
|
|
132
133
|
}
|
|
133
134
|
get authenticated_specs() {
|
|
134
|
-
return this.specs.filter((spec) => spec.auth === '
|
|
135
|
+
return this.specs.filter((spec) => spec.auth?.account === 'required' &&
|
|
136
|
+
!spec.auth.roles?.length &&
|
|
137
|
+
!spec.auth.credential_types?.length);
|
|
135
138
|
}
|
|
136
139
|
get public_methods() {
|
|
137
140
|
return this.public_specs.map((spec) => spec.method);
|
|
@@ -13,37 +13,63 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { z } from 'zod';
|
|
15
15
|
import type { Logger } from '@fuzdev/fuz_util/log.js';
|
|
16
|
+
import type { Uuid } from '@fuzdev/fuz_util/id.js';
|
|
16
17
|
import type { RequestResponseActionSpec } from './action_spec.js';
|
|
17
18
|
import { type RouteSpec } from '../http/route_spec.js';
|
|
18
|
-
import { type RequestContext } from '../auth/request_context.js';
|
|
19
|
+
import { type RequestActorContext, type RequestContext } from '../auth/request_context.js';
|
|
19
20
|
import type { Db } from '../db/db.js';
|
|
20
21
|
import { type JsonrpcRequestId } from '../http/jsonrpc.js';
|
|
21
22
|
import type { RateLimiter } from '../rate_limiter.js';
|
|
22
23
|
/**
|
|
23
|
-
* Per-request context provided to
|
|
24
|
+
* Per-request context provided to action handlers across every transport
|
|
25
|
+
* (HTTP RPC, WebSocket, REST bridge). Built once per dispatched action by
|
|
26
|
+
* `perform_action` and threaded into the handler.
|
|
24
27
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
+
* `auth` is `RequestContext | null` — handlers for authenticated actions
|
|
29
|
+
* can narrow via the dispatcher's authorization-phase guarantee.
|
|
30
|
+
*
|
|
31
|
+
* Single handler context shape across every transport. Consumers inject
|
|
32
|
+
* domain deps via factory closures the same way HTTP RPC factories do.
|
|
28
33
|
*/
|
|
29
34
|
export interface ActionContext {
|
|
30
35
|
/** The authenticated identity, or `null` for public routes. */
|
|
31
36
|
auth: RequestContext | null;
|
|
32
37
|
/** The JSON-RPC request ID from the envelope. */
|
|
33
38
|
request_id: JsonrpcRequestId;
|
|
34
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* Stable per-socket connection id on WebSocket transport; `undefined`
|
|
41
|
+
* on HTTP RPC. Consumers key per-connection domain state on this
|
|
42
|
+
* directly; HTTP handlers ignore it.
|
|
43
|
+
*/
|
|
44
|
+
connection_id?: Uuid;
|
|
45
|
+
/**
|
|
46
|
+
* Transaction-scoped when `spec.side_effects` is true (the dispatcher
|
|
47
|
+
* wraps in `db.transaction`); pool-level otherwise. Handlers that
|
|
48
|
+
* need rollback-resilient writes call `deps.audit.emit(ctx, input)`,
|
|
49
|
+
* which captures the pool inside its closure.
|
|
50
|
+
*/
|
|
35
51
|
db: Db;
|
|
36
|
-
/**
|
|
37
|
-
|
|
38
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Eager fire-and-forget queue — push the in-flight `Promise<void>` for
|
|
54
|
+
* pool writes already running (audit emits, session touch, api-token
|
|
55
|
+
* usage tracking). Drained via `flush_pending_effects` after the
|
|
56
|
+
* handler returns.
|
|
57
|
+
*/
|
|
39
58
|
pending_effects: Array<Promise<void>>;
|
|
59
|
+
/**
|
|
60
|
+
* Deferred post-commit thunks — do not push directly; reach for
|
|
61
|
+
* `emit_after_commit(ctx, fn)` from `pending_effects.ts`. The flush
|
|
62
|
+
* site invokes each thunk after the handler (and any wrapping
|
|
63
|
+
* `db.transaction`) returns.
|
|
64
|
+
*/
|
|
65
|
+
post_commit_effects: Array<() => void | Promise<void>>;
|
|
40
66
|
/**
|
|
41
67
|
* Resolved client IP from the trusted-proxy middleware — `'unknown'` if the
|
|
42
68
|
* middleware wasn't in the stack (e.g. WS dispatch) or couldn't resolve.
|
|
43
|
-
* Thread into `
|
|
69
|
+
* Thread into `deps.audit.emit` as `ip: ctx.client_ip` for every
|
|
44
70
|
* user-initiated action so RPC audit rows match the REST convention. Pass
|
|
45
71
|
* `null` only for rows written outside a request (e.g. the
|
|
46
|
-
* `
|
|
72
|
+
* `role_grant_offer_expire` cleanup sweep in `auth/cleanup.ts`).
|
|
47
73
|
*/
|
|
48
74
|
client_ip: string;
|
|
49
75
|
/** Logger instance. */
|
|
@@ -60,8 +86,9 @@ export interface ActionContext {
|
|
|
60
86
|
notify: (method: string, params: unknown) => void;
|
|
61
87
|
/**
|
|
62
88
|
* AbortSignal that fires when the originating request is cancelled
|
|
63
|
-
* (client disconnect on HTTP, socket close
|
|
64
|
-
* handlers should check this
|
|
89
|
+
* (client disconnect on HTTP, socket close or per-request cancel
|
|
90
|
+
* notification on WebSocket). Streaming handlers should check this
|
|
91
|
+
* for early termination.
|
|
65
92
|
*/
|
|
66
93
|
signal: AbortSignal;
|
|
67
94
|
}
|
|
@@ -72,6 +99,43 @@ export interface ActionContext {
|
|
|
72
99
|
* Returns the output value (serialized to JSON by the wrapper).
|
|
73
100
|
*/
|
|
74
101
|
export type ActionHandler<TInput = any, TOutput = any> = (input: TInput, ctx: ActionContext) => TOutput | Promise<TOutput>;
|
|
102
|
+
/**
|
|
103
|
+
* `ActionContext` narrowed to a non-null `RequestContext`.
|
|
104
|
+
*
|
|
105
|
+
* Used by handlers whose spec declares `auth.account === 'required'`
|
|
106
|
+
* (with `auth.actor === 'none'`) — the dispatcher's pre-validation 401
|
|
107
|
+
* gate guarantees `request_context` is populated before the handler
|
|
108
|
+
* runs, but the actor slot stays null because no `acting` resolution
|
|
109
|
+
* happened. Selected automatically by `rpc_action`'s conditional return
|
|
110
|
+
* type for the account-grain tier.
|
|
111
|
+
*/
|
|
112
|
+
export interface ActionAuthContext extends Omit<ActionContext, 'auth'> {
|
|
113
|
+
auth: RequestContext;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Handler signature for an account-grain RPC action — `auth.account === 'required'`
|
|
117
|
+
* and `auth.actor === 'none'`. Mirrors `ActionHandler` but tightens the
|
|
118
|
+
* `ctx.auth` slot to the non-null `RequestContext` (with `actor: null`).
|
|
119
|
+
*/
|
|
120
|
+
export type AuthActionHandler<TInput = any, TOutput = any> = (input: TInput, ctx: ActionAuthContext) => TOutput | Promise<TOutput>;
|
|
121
|
+
/**
|
|
122
|
+
* `ActionContext` narrowed to a resolved acting actor.
|
|
123
|
+
*
|
|
124
|
+
* Used by handlers whose spec declares `auth.actor === 'required'` —
|
|
125
|
+
* the dispatcher's authorization phase resolves an actor (per
|
|
126
|
+
* registry-time invariant 2 the input declares `acting?: ActingActor`),
|
|
127
|
+
* so `ctx.auth.actor` is non-null. Selected automatically by
|
|
128
|
+
* `rpc_action`'s conditional return type for the actor-implying tier.
|
|
129
|
+
*/
|
|
130
|
+
export interface ActionActorContext extends Omit<ActionContext, 'auth'> {
|
|
131
|
+
auth: RequestActorContext;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Handler signature for an actor-implying RPC action — `auth.actor === 'required'`.
|
|
135
|
+
* Mirrors `ActionHandler` but tightens the `ctx.auth` slot to the
|
|
136
|
+
* non-null `RequestActorContext` (with non-null `actor`).
|
|
137
|
+
*/
|
|
138
|
+
export type ActorActionHandler<TInput = any, TOutput = any> = (input: TInput, ctx: ActionActorContext) => TOutput | Promise<TOutput>;
|
|
75
139
|
/**
|
|
76
140
|
* An RPC action — combines an action spec with its handler.
|
|
77
141
|
*
|
|
@@ -83,7 +147,24 @@ export interface RpcAction {
|
|
|
83
147
|
handler: ActionHandler;
|
|
84
148
|
}
|
|
85
149
|
/**
|
|
86
|
-
*
|
|
150
|
+
* Conditional handler shape for `rpc_action` — picks the narrowest
|
|
151
|
+
* `ctx.auth` type the dispatcher's runtime guarantee allows:
|
|
152
|
+
*
|
|
153
|
+
* - `auth.actor === 'required'` → `ActorActionHandler` (`ctx.auth: RequestActorContext`).
|
|
154
|
+
* - `auth.account === 'required' && auth.actor === 'none'` → `AuthActionHandler` (`ctx.auth: RequestContext`).
|
|
155
|
+
* - else (public, optional axes) → `ActionHandler` (`ctx.auth: RequestContext | null`).
|
|
156
|
+
*
|
|
157
|
+
* The bracketed form `[T] extends ['required']` defeats distributive
|
|
158
|
+
* conditionals so a degraded `AuthAxisState` union (when the spec was
|
|
159
|
+
* typed without preserving its literal) falls through to the loosest
|
|
160
|
+
* tier instead of collapsing to the narrowest.
|
|
161
|
+
*/
|
|
162
|
+
export type HandlerForSpec<TSpec extends RequestResponseActionSpec> = [
|
|
163
|
+
TSpec['auth']['actor']
|
|
164
|
+
] extends ['required'] ? ActorActionHandler<z.infer<TSpec['input']>, z.infer<TSpec['output']>> : [TSpec['auth']['account']] extends ['required'] ? AuthActionHandler<z.infer<TSpec['input']>, z.infer<TSpec['output']>> : ActionHandler<z.infer<TSpec['input']>, z.infer<TSpec['output']>>;
|
|
165
|
+
/**
|
|
166
|
+
* Pair a spec with a handler while preserving per-method input/output types
|
|
167
|
+
* and selecting the narrowest `ctx.auth` shape the spec literal admits.
|
|
87
168
|
*
|
|
88
169
|
* Constructing `{spec, handler}` literals widens `handler` to
|
|
89
170
|
* `ActionHandler<any, any>`, so spec/handler drift (renamed Zod schema,
|
|
@@ -92,15 +173,42 @@ export interface RpcAction {
|
|
|
92
173
|
* `(input: z.infer<spec.input>, ctx) => z.infer<spec.output>` via the
|
|
93
174
|
* generic spec parameter — drift surfaces at the call site.
|
|
94
175
|
*
|
|
176
|
+
* The `ctx.auth` narrowing follows the spec's `auth.account` /
|
|
177
|
+
* `auth.actor` literals (see `HandlerForSpec`): an actor-implying spec
|
|
178
|
+
* gets `ctx.auth: RequestActorContext`; an account-grain spec gets
|
|
179
|
+
* `ctx.auth: RequestContext`; everything else stays `ctx.auth:
|
|
180
|
+
* RequestContext | null`. Handlers can rely on the dispatcher's
|
|
181
|
+
* runtime guarantee without a manual narrowing call.
|
|
182
|
+
*
|
|
95
183
|
* Fits fuz_app's factory-closure pattern (handlers close over
|
|
96
184
|
* `grantable_roles`, `app_settings` ref, `notification_sender`, etc.).
|
|
97
185
|
* zzz uses a different shape — a codegen-keyed `Record<Method, Handler>`
|
|
98
186
|
* map typed via generated `ActionInputs`/`ActionOutputs` — which works when
|
|
99
187
|
* handlers are pure (no closure state) and specs are codegen-enumerated.
|
|
100
|
-
* fuz_app's admin +
|
|
188
|
+
* fuz_app's admin + role-grant-offer actions have neither, so per-pair typing
|
|
101
189
|
* at the registration site is the right fit.
|
|
190
|
+
*
|
|
191
|
+
* Spec-literal preservation is load-bearing: declare specs with
|
|
192
|
+
* `satisfies RequestResponseActionSpec` (canonical) so `auth.actor`
|
|
193
|
+
* keeps its `'required'` / `'none'` literal type. A spec typed
|
|
194
|
+
* directly as `RequestResponseActionSpec` widens the axes to
|
|
195
|
+
* `AuthAxisState` and the handler defaults to the loosest tier — sound,
|
|
196
|
+
* but loses the ergonomic narrowing.
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```ts
|
|
200
|
+
* // actor-implying spec → ctx.auth: RequestActorContext
|
|
201
|
+
* rpc_action(role_grant_revoke_action_spec, async (input, ctx) => {
|
|
202
|
+
* const revoker_id = ctx.auth.actor.id; // no narrowing needed
|
|
203
|
+
* });
|
|
204
|
+
*
|
|
205
|
+
* // account-grain spec → ctx.auth: RequestContext (actor: null)
|
|
206
|
+
* rpc_action(account_verify_action_spec, (_input, ctx) => {
|
|
207
|
+
* return to_session_account(ctx.auth.account); // no narrowing needed
|
|
208
|
+
* });
|
|
209
|
+
* ```
|
|
102
210
|
*/
|
|
103
|
-
export declare const rpc_action: <TSpec extends RequestResponseActionSpec>(spec: TSpec, handler:
|
|
211
|
+
export declare const rpc_action: <TSpec extends RequestResponseActionSpec>(spec: TSpec, handler: HandlerForSpec<TSpec>) => RpcAction;
|
|
104
212
|
/** Options for `create_rpc_endpoint`. */
|
|
105
213
|
export interface CreateRpcEndpointOptions {
|
|
106
214
|
/** Mount path for the endpoint (e.g., `/api/rpc`). */
|
|
@@ -118,10 +226,12 @@ export interface CreateRpcEndpointOptions {
|
|
|
118
226
|
*/
|
|
119
227
|
action_ip_rate_limiter?: RateLimiter | null;
|
|
120
228
|
/**
|
|
121
|
-
* Per-
|
|
229
|
+
* Per-account rate limiter consulted for actions whose spec declares
|
|
122
230
|
* `rate_limit: 'account'` or `'both'`. Keyed on
|
|
123
|
-
* `request_context.
|
|
124
|
-
*
|
|
231
|
+
* `request_context.account.id` (account-grain — billed to the
|
|
232
|
+
* authenticated account regardless of which actor was resolved).
|
|
233
|
+
* `null` disables the account check. Same limiter is shared with the
|
|
234
|
+
* WebSocket action dispatcher.
|
|
125
235
|
*/
|
|
126
236
|
action_account_rate_limiter?: RateLimiter | null;
|
|
127
237
|
}
|
|
@@ -134,9 +244,18 @@ export interface CreateRpcEndpointOptions {
|
|
|
134
244
|
* 1. **Parse envelope** — POST: JSON body as `JsonrpcRequest`. GET: `method`
|
|
135
245
|
* and `params` from query string.
|
|
136
246
|
* 2. **Lookup method** — find the `RpcAction` by method name.
|
|
137
|
-
* 3. **
|
|
138
|
-
*
|
|
139
|
-
*
|
|
247
|
+
* 3. **Pre-validation auth** — short-circuit `unauthenticated` when no
|
|
248
|
+
* account is on the request, before input validation runs.
|
|
249
|
+
* 4. **Authorization phase** — resolve the acting actor (when the action's
|
|
250
|
+
* auth requires role_grants or its input declares `acting?: ActingActor`)
|
|
251
|
+
* and build the request context. Runs before input validation so
|
|
252
|
+
* role-grant-grain auth checks return 403 before 400 invalid_params;
|
|
253
|
+
* `acting` is read from raw params via a string typeguard.
|
|
254
|
+
* 5. **Post-authorization auth** — enforce role / keeper requirements
|
|
255
|
+
* against the request context.
|
|
256
|
+
* 6. **Validate params** — parse input against the action's `input` schema.
|
|
257
|
+
* 7. **Rate limit** — per-action IP / account throttling.
|
|
258
|
+
* 8. **Dispatch** — acquire DB handle (transaction for mutations, pool for reads),
|
|
140
259
|
* construct `ActionContext`, call handler, return JSON-RPC response.
|
|
141
260
|
*
|
|
142
261
|
* GET is restricted to `side_effects: false` actions (cacheable reads).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action_rpc.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/action_rpc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"action_rpc.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/action_rpc.ts"],"names":[],"mappings":"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"}
|