@fuzdev/fuz_app 0.50.0 → 0.52.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 +16 -3
- package/dist/actions/action_bridge.d.ts +3 -1
- package/dist/actions/action_bridge.d.ts.map +1 -1
- package/dist/actions/action_bridge.js +3 -1
- package/dist/actions/action_codegen.d.ts +44 -13
- package/dist/actions/action_codegen.d.ts.map +1 -1
- package/dist/actions/action_codegen.js +58 -20
- package/dist/actions/action_event.d.ts +44 -1
- package/dist/actions/action_event.d.ts.map +1 -1
- package/dist/actions/action_event.js +44 -1
- package/dist/actions/action_event_helpers.d.ts +26 -0
- package/dist/actions/action_event_helpers.d.ts.map +1 -1
- package/dist/actions/action_event_helpers.js +26 -1
- package/dist/actions/action_peer.d.ts +17 -0
- package/dist/actions/action_peer.d.ts.map +1 -1
- package/dist/actions/action_peer.js +8 -0
- package/dist/actions/action_registry.d.ts +2 -2
- package/dist/actions/action_registry.js +2 -2
- package/dist/actions/action_rpc.d.ts +4 -0
- package/dist/actions/action_rpc.d.ts.map +1 -1
- package/dist/actions/action_rpc.js +4 -0
- package/dist/actions/action_spec.d.ts +23 -3
- package/dist/actions/action_spec.d.ts.map +1 -1
- package/dist/actions/action_spec.js +17 -3
- package/dist/actions/action_types.d.ts +2 -2
- package/dist/actions/action_types.js +2 -2
- package/dist/actions/cancel.d.ts +2 -2
- package/dist/actions/cancel.js +2 -2
- package/dist/actions/heartbeat.d.ts +2 -2
- package/dist/actions/heartbeat.js +2 -2
- package/dist/actions/protocol.d.ts +1 -1
- package/dist/actions/protocol.js +1 -1
- package/dist/actions/register_action_ws.d.ts +4 -1
- package/dist/actions/register_action_ws.d.ts.map +1 -1
- package/dist/actions/register_action_ws.js +4 -1
- package/dist/actions/register_ws_endpoint.d.ts +3 -0
- package/dist/actions/register_ws_endpoint.d.ts.map +1 -1
- package/dist/actions/register_ws_endpoint.js +3 -0
- package/dist/actions/request_tracker.svelte.d.ts +14 -1
- package/dist/actions/request_tracker.svelte.d.ts.map +1 -1
- package/dist/actions/request_tracker.svelte.js +14 -1
- package/dist/actions/socket.svelte.d.ts +35 -15
- package/dist/actions/socket.svelte.d.ts.map +1 -1
- package/dist/actions/socket.svelte.js +33 -13
- package/dist/actions/transports.d.ts +12 -3
- package/dist/actions/transports.d.ts.map +1 -1
- package/dist/actions/transports.js +16 -7
- package/dist/actions/transports_http.d.ts +7 -0
- package/dist/actions/transports_http.d.ts.map +1 -1
- package/dist/actions/transports_http.js +7 -0
- package/dist/actions/transports_ws.d.ts +13 -0
- package/dist/actions/transports_ws.d.ts.map +1 -1
- package/dist/actions/transports_ws.js +13 -0
- package/dist/actions/transports_ws_auth_guard.d.ts +6 -2
- package/dist/actions/transports_ws_auth_guard.d.ts.map +1 -1
- package/dist/actions/transports_ws_auth_guard.js +6 -2
- package/dist/actions/transports_ws_backend.d.ts +14 -1
- package/dist/actions/transports_ws_backend.d.ts.map +1 -1
- package/dist/actions/transports_ws_backend.js +14 -1
- package/dist/auth/CLAUDE.md +40 -4
- package/dist/auth/account_queries.d.ts +10 -0
- package/dist/auth/account_queries.d.ts.map +1 -1
- package/dist/auth/account_queries.js +10 -0
- package/dist/auth/account_routes.d.ts +3 -3
- package/dist/auth/account_routes.js +3 -3
- package/dist/auth/account_schema.d.ts +1 -1
- package/dist/auth/account_schema.js +1 -1
- package/dist/auth/admin_actions.d.ts +1 -0
- package/dist/auth/admin_actions.d.ts.map +1 -1
- package/dist/auth/admin_actions.js +1 -0
- package/dist/auth/api_token.d.ts +1 -1
- package/dist/auth/api_token.js +1 -1
- package/dist/auth/api_token_queries.d.ts +7 -0
- package/dist/auth/api_token_queries.d.ts.map +1 -1
- package/dist/auth/api_token_queries.js +7 -0
- package/dist/auth/app_settings_queries.d.ts +4 -0
- package/dist/auth/app_settings_queries.d.ts.map +1 -1
- package/dist/auth/app_settings_queries.js +4 -0
- package/dist/auth/audit_log_queries.d.ts +6 -0
- package/dist/auth/audit_log_queries.d.ts.map +1 -1
- package/dist/auth/audit_log_queries.js +6 -0
- package/dist/auth/audit_log_routes.d.ts +1 -1
- package/dist/auth/audit_log_routes.js +1 -1
- package/dist/auth/audit_log_schema.d.ts +3 -1
- package/dist/auth/audit_log_schema.d.ts.map +1 -1
- package/dist/auth/audit_log_schema.js +134 -55
- package/dist/auth/bearer_auth.d.ts +2 -0
- package/dist/auth/bearer_auth.d.ts.map +1 -1
- package/dist/auth/bearer_auth.js +2 -0
- package/dist/auth/bootstrap_account.d.ts +3 -0
- package/dist/auth/bootstrap_account.d.ts.map +1 -1
- package/dist/auth/bootstrap_account.js +3 -0
- package/dist/auth/cleanup.d.ts +6 -0
- package/dist/auth/cleanup.d.ts.map +1 -1
- package/dist/auth/cleanup.js +6 -0
- package/dist/auth/daemon_token.d.ts +1 -1
- package/dist/auth/daemon_token.js +1 -1
- package/dist/auth/daemon_token_middleware.d.ts +5 -1
- package/dist/auth/daemon_token_middleware.d.ts.map +1 -1
- package/dist/auth/daemon_token_middleware.js +5 -1
- package/dist/auth/ddl.d.ts +1 -1
- package/dist/auth/ddl.js +1 -1
- package/dist/auth/invite_queries.d.ts +4 -0
- package/dist/auth/invite_queries.d.ts.map +1 -1
- package/dist/auth/invite_queries.js +4 -0
- package/dist/auth/password.d.ts +1 -1
- package/dist/auth/password.js +1 -1
- package/dist/auth/permit_offer_action_specs.d.ts +5 -0
- package/dist/auth/permit_offer_action_specs.d.ts.map +1 -1
- package/dist/auth/permit_offer_action_specs.js +10 -0
- package/dist/auth/permit_offer_queries.d.ts +19 -0
- package/dist/auth/permit_offer_queries.d.ts.map +1 -1
- package/dist/auth/permit_offer_queries.js +19 -0
- package/dist/auth/permit_queries.d.ts +8 -0
- package/dist/auth/permit_queries.d.ts.map +1 -1
- package/dist/auth/permit_queries.js +8 -0
- package/dist/auth/request_context.d.ts +1 -0
- package/dist/auth/request_context.d.ts.map +1 -1
- package/dist/auth/request_context.js +1 -0
- package/dist/auth/role_schema.d.ts +2 -0
- package/dist/auth/role_schema.d.ts.map +1 -1
- package/dist/auth/role_schema.js +2 -0
- package/dist/auth/route_guards.d.ts +1 -1
- package/dist/auth/route_guards.js +1 -1
- package/dist/auth/self_service_role_action_specs.d.ts +1 -1
- package/dist/auth/self_service_role_action_specs.js +1 -1
- package/dist/auth/self_service_role_actions.d.ts +2 -1
- package/dist/auth/self_service_role_actions.d.ts.map +1 -1
- package/dist/auth/self_service_role_actions.js +2 -1
- package/dist/auth/session_lifecycle.d.ts +3 -0
- package/dist/auth/session_lifecycle.d.ts.map +1 -1
- package/dist/auth/session_lifecycle.js +3 -0
- package/dist/auth/session_middleware.d.ts +5 -0
- package/dist/auth/session_middleware.d.ts.map +1 -1
- package/dist/auth/session_middleware.js +5 -0
- package/dist/auth/session_queries.d.ts +10 -1
- package/dist/auth/session_queries.d.ts.map +1 -1
- package/dist/auth/session_queries.js +10 -1
- package/dist/auth/signup_routes.d.ts +1 -1
- package/dist/auth/signup_routes.js +1 -1
- package/dist/cli/config.d.ts +2 -0
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +2 -0
- package/dist/cli/daemon.d.ts +6 -1
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +6 -1
- package/dist/cli/util.d.ts +1 -1
- package/dist/cli/util.js +1 -1
- package/dist/db/assert_row.d.ts +2 -1
- package/dist/db/assert_row.d.ts.map +1 -1
- package/dist/db/assert_row.js +2 -1
- package/dist/db/create_db.d.ts +5 -2
- package/dist/db/create_db.d.ts.map +1 -1
- package/dist/db/create_db.js +5 -2
- package/dist/db/db.d.ts +22 -7
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js +21 -6
- package/dist/db/db_pg.d.ts +2 -1
- package/dist/db/db_pg.d.ts.map +1 -1
- package/dist/db/db_pg.js +5 -3
- package/dist/db/db_pglite.d.ts +3 -2
- package/dist/db/db_pglite.d.ts.map +1 -1
- package/dist/db/db_pglite.js +3 -2
- package/dist/db/migrate.d.ts +8 -4
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +6 -2
- package/dist/db/sql_identifier.d.ts +2 -1
- package/dist/db/sql_identifier.d.ts.map +1 -1
- package/dist/db/sql_identifier.js +2 -1
- package/dist/db/status.d.ts +4 -1
- package/dist/db/status.d.ts.map +1 -1
- package/dist/db/status.js +5 -2
- package/dist/dev/setup.d.ts +18 -2
- package/dist/dev/setup.d.ts.map +1 -1
- package/dist/dev/setup.js +18 -2
- package/dist/env/dotenv.d.ts +2 -1
- package/dist/env/dotenv.d.ts.map +1 -1
- package/dist/env/dotenv.js +2 -1
- package/dist/env/load.d.ts +1 -1
- package/dist/env/load.js +1 -1
- package/dist/env/resolve.d.ts +1 -1
- package/dist/env/resolve.js +1 -1
- package/dist/env/update_env_variable.d.ts +2 -0
- package/dist/env/update_env_variable.d.ts.map +1 -1
- package/dist/env/update_env_variable.js +2 -0
- package/dist/hono_context.d.ts +1 -1
- package/dist/hono_context.js +1 -1
- package/dist/http/jsonrpc_errors.d.ts +2 -2
- package/dist/http/jsonrpc_errors.js +2 -2
- package/dist/http/jsonrpc_helpers.d.ts +2 -2
- package/dist/http/jsonrpc_helpers.js +2 -2
- package/dist/http/middleware_spec.d.ts +1 -1
- package/dist/http/middleware_spec.js +1 -1
- package/dist/http/origin.d.ts +1 -1
- package/dist/http/origin.js +1 -1
- package/dist/http/pending_effects.d.ts +4 -0
- package/dist/http/pending_effects.d.ts.map +1 -1
- package/dist/http/pending_effects.js +4 -0
- package/dist/http/proxy.d.ts +3 -0
- package/dist/http/proxy.d.ts.map +1 -1
- package/dist/http/proxy.js +3 -0
- package/dist/http/route_spec.d.ts +1 -0
- package/dist/http/route_spec.d.ts.map +1 -1
- package/dist/http/route_spec.js +7 -0
- package/dist/http/schema_helpers.d.ts +1 -1
- package/dist/http/schema_helpers.js +1 -1
- package/dist/http/surface.d.ts +1 -1
- package/dist/http/surface.js +1 -1
- package/dist/rate_limiter.d.ts +14 -1
- package/dist/rate_limiter.d.ts.map +1 -1
- package/dist/rate_limiter.js +14 -1
- package/dist/realtime/sse.d.ts +7 -1
- package/dist/realtime/sse.d.ts.map +1 -1
- package/dist/realtime/sse.js +3 -1
- package/dist/realtime/sse_auth_guard.d.ts +21 -21
- package/dist/realtime/sse_auth_guard.d.ts.map +1 -1
- package/dist/realtime/sse_auth_guard.js +24 -24
- package/dist/realtime/subscriber_registry.d.ts +4 -2
- package/dist/realtime/subscriber_registry.d.ts.map +1 -1
- package/dist/realtime/subscriber_registry.js +4 -2
- package/dist/runtime/deno.d.ts +1 -1
- package/dist/runtime/deno.js +1 -1
- package/dist/runtime/fs.d.ts +5 -0
- package/dist/runtime/fs.d.ts.map +1 -1
- package/dist/runtime/fs.js +5 -0
- package/dist/runtime/mock.d.ts +6 -0
- package/dist/runtime/mock.d.ts.map +1 -1
- package/dist/runtime/mock.js +6 -0
- package/dist/runtime/node.d.ts +1 -1
- package/dist/runtime/node.js +1 -1
- package/dist/server/app_backend.d.ts +1 -0
- package/dist/server/app_backend.d.ts.map +1 -1
- package/dist/server/app_backend.js +1 -0
- package/dist/server/app_server.d.ts +4 -0
- package/dist/server/app_server.d.ts.map +1 -1
- package/dist/server/app_server.js +4 -0
- package/dist/server/validate_nginx.d.ts +3 -0
- package/dist/server/validate_nginx.d.ts.map +1 -1
- package/dist/testing/admin_integration.d.ts +5 -0
- package/dist/testing/admin_integration.d.ts.map +1 -1
- package/dist/testing/admin_integration.js +5 -0
- package/dist/testing/adversarial_headers.d.ts +5 -3
- package/dist/testing/adversarial_headers.d.ts.map +1 -1
- package/dist/testing/adversarial_headers.js +5 -3
- package/dist/testing/adversarial_input.d.ts +4 -0
- package/dist/testing/adversarial_input.d.ts.map +1 -1
- package/dist/testing/adversarial_input.js +4 -0
- package/dist/testing/app_server.d.ts +3 -0
- package/dist/testing/app_server.d.ts.map +1 -1
- package/dist/testing/app_server.js +11 -0
- package/dist/testing/assertions.d.ts +23 -7
- package/dist/testing/assertions.d.ts.map +1 -1
- package/dist/testing/assertions.js +23 -7
- package/dist/testing/audit_completeness.d.ts +4 -0
- package/dist/testing/audit_completeness.d.ts.map +1 -1
- package/dist/testing/audit_completeness.js +4 -0
- package/dist/testing/auth_apps.d.ts +3 -0
- package/dist/testing/auth_apps.d.ts.map +1 -1
- package/dist/testing/auth_apps.js +3 -0
- package/dist/testing/db.d.ts +9 -1
- package/dist/testing/db.d.ts.map +1 -1
- package/dist/testing/db.js +9 -1
- package/dist/testing/error_coverage.d.ts +9 -0
- package/dist/testing/error_coverage.d.ts.map +1 -1
- package/dist/testing/error_coverage.js +9 -0
- package/dist/testing/integration.d.ts +4 -0
- package/dist/testing/integration.d.ts.map +1 -1
- package/dist/testing/integration.js +4 -0
- package/dist/testing/integration_helpers.d.ts +10 -4
- package/dist/testing/integration_helpers.d.ts.map +1 -1
- package/dist/testing/integration_helpers.js +10 -4
- package/dist/testing/middleware.d.ts +5 -0
- package/dist/testing/middleware.d.ts.map +1 -1
- package/dist/testing/middleware.js +5 -0
- package/dist/testing/rate_limiting.d.ts +3 -0
- package/dist/testing/rate_limiting.d.ts.map +1 -1
- package/dist/testing/rate_limiting.js +3 -0
- package/dist/testing/rpc_attack_surface.js +1 -1
- package/dist/testing/rpc_helpers.d.ts +21 -8
- package/dist/testing/rpc_helpers.d.ts.map +1 -1
- package/dist/testing/rpc_helpers.js +22 -9
- package/dist/testing/schema_generators.d.ts +7 -2
- package/dist/testing/schema_generators.d.ts.map +1 -1
- package/dist/testing/schema_generators.js +7 -2
- package/dist/testing/sse_round_trip.d.ts +3 -0
- package/dist/testing/sse_round_trip.d.ts.map +1 -1
- package/dist/testing/sse_round_trip.js +3 -0
- package/dist/testing/stubs.d.ts +7 -0
- package/dist/testing/stubs.d.ts.map +1 -1
- package/dist/testing/stubs.js +7 -0
- package/dist/testing/surface_invariants.d.ts +14 -0
- package/dist/testing/surface_invariants.d.ts.map +1 -1
- package/dist/testing/surface_invariants.js +14 -0
- package/dist/testing/ws_round_trip.d.ts +13 -1
- package/dist/testing/ws_round_trip.d.ts.map +1 -1
- package/dist/testing/ws_round_trip.js +1 -1
- package/dist/ui/AccountSessions.svelte +9 -0
- package/dist/ui/AccountSessions.svelte.d.ts.map +1 -1
- package/dist/ui/AdminAccounts.svelte +10 -0
- package/dist/ui/AdminAccounts.svelte.d.ts.map +1 -1
- package/dist/ui/AdminAuditLog.svelte +10 -0
- package/dist/ui/AdminAuditLog.svelte.d.ts.map +1 -1
- package/dist/ui/AdminInvites.svelte +9 -0
- package/dist/ui/AdminInvites.svelte.d.ts.map +1 -1
- package/dist/ui/AdminOverview.svelte +10 -0
- package/dist/ui/AdminOverview.svelte.d.ts.map +1 -1
- package/dist/ui/AdminPermitHistory.svelte +9 -0
- package/dist/ui/AdminPermitHistory.svelte.d.ts.map +1 -1
- package/dist/ui/AdminSessions.svelte +10 -0
- package/dist/ui/AdminSessions.svelte.d.ts.map +1 -1
- package/dist/ui/AdminSettings.svelte +9 -0
- package/dist/ui/AdminSettings.svelte.d.ts.map +1 -1
- package/dist/ui/AdminSurface.svelte +9 -0
- package/dist/ui/AdminSurface.svelte.d.ts.map +1 -1
- package/dist/ui/AppShell.svelte +24 -0
- package/dist/ui/AppShell.svelte.d.ts +23 -0
- package/dist/ui/AppShell.svelte.d.ts.map +1 -1
- package/dist/ui/BootstrapForm.svelte +17 -0
- package/dist/ui/BootstrapForm.svelte.d.ts +4 -0
- package/dist/ui/BootstrapForm.svelte.d.ts.map +1 -1
- package/dist/ui/ColumnLayout.svelte +11 -0
- package/dist/ui/ColumnLayout.svelte.d.ts +10 -0
- package/dist/ui/ColumnLayout.svelte.d.ts.map +1 -1
- package/dist/ui/Datatable.svelte +18 -0
- package/dist/ui/Datatable.svelte.d.ts +17 -0
- package/dist/ui/Datatable.svelte.d.ts.map +1 -1
- package/dist/ui/LoginForm.svelte +18 -0
- package/dist/ui/LoginForm.svelte.d.ts +9 -0
- package/dist/ui/LoginForm.svelte.d.ts.map +1 -1
- package/dist/ui/LogoutButton.svelte +9 -0
- package/dist/ui/LogoutButton.svelte.d.ts +8 -0
- package/dist/ui/LogoutButton.svelte.d.ts.map +1 -1
- package/dist/ui/MenuLink.svelte +10 -0
- package/dist/ui/MenuLink.svelte.d.ts +9 -0
- package/dist/ui/MenuLink.svelte.d.ts.map +1 -1
- package/dist/ui/OpenSignupToggle.svelte +9 -0
- package/dist/ui/OpenSignupToggle.svelte.d.ts.map +1 -1
- package/dist/ui/SignupForm.svelte +16 -0
- package/dist/ui/SignupForm.svelte.d.ts +4 -0
- package/dist/ui/SignupForm.svelte.d.ts.map +1 -1
- package/dist/ui/SurfaceExplorer.svelte +9 -0
- package/dist/ui/SurfaceExplorer.svelte.d.ts.map +1 -1
- package/dist/ui/account_sessions_state.svelte.d.ts +2 -2
- package/dist/ui/account_sessions_state.svelte.js +1 -1
- package/dist/ui/admin_rpc_adapters.d.ts +1 -1
- package/dist/ui/admin_rpc_adapters.js +1 -1
- package/dist/ui/audit_log_state.svelte.d.ts +6 -1
- package/dist/ui/audit_log_state.svelte.d.ts.map +1 -1
- package/dist/ui/audit_log_state.svelte.js +6 -1
- package/dist/ui/auth_state.svelte.d.ts +16 -4
- package/dist/ui/auth_state.svelte.d.ts.map +1 -1
- package/dist/ui/auth_state.svelte.js +16 -4
- package/dist/ui/form_state.svelte.d.ts +9 -0
- package/dist/ui/form_state.svelte.d.ts.map +1 -1
- package/dist/ui/form_state.svelte.js +9 -0
- package/dist/ui/loadable.svelte.d.ts +6 -1
- package/dist/ui/loadable.svelte.d.ts.map +1 -1
- package/dist/ui/loadable.svelte.js +6 -1
- package/dist/ui/permit_offers_state.svelte.d.ts +2 -0
- package/dist/ui/permit_offers_state.svelte.d.ts.map +1 -1
- package/dist/ui/permit_offers_state.svelte.js +2 -0
- package/dist/ui/popover.svelte.d.ts +17 -4
- package/dist/ui/popover.svelte.d.ts.map +1 -1
- package/dist/ui/popover.svelte.js +17 -4
- package/dist/ui/position_helpers.d.ts +1 -0
- package/dist/ui/position_helpers.d.ts.map +1 -1
- package/dist/ui/position_helpers.js +1 -0
- package/dist/ui/sidebar_state.svelte.d.ts +22 -9
- package/dist/ui/sidebar_state.svelte.d.ts.map +1 -1
- package/dist/ui/sidebar_state.svelte.js +17 -2
- package/dist/ui/table_state.svelte.d.ts +14 -0
- package/dist/ui/table_state.svelte.d.ts.map +1 -1
- package/dist/ui/table_state.svelte.js +14 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request_tracker.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/request_tracker.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAkB,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAEN,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,MAAM,oBAAoB,CAAC;AAG5B,2DAA2D;AAC3D,KAAK,QAAQ,GAAG,MAAM,GAAG;IAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAAC,CAAC;AAMxD;;GAEG;AACH,qBAAa,kBAAkB;IAC9B,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAiB;IACpC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAgB;gBAGlD,EAAE,EAAE,gBAAgB,EACpB,QAAQ,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAC1C,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS;CAQpC;AAED;;;GAGG;AACH,qBAAa,cAAc;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAmB;IAC7F,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;gBAExB,kBAAkB,SAAU;IAIxC
|
|
1
|
+
{"version":3,"file":"request_tracker.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/request_tracker.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAkB,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAC3F,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAEN,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,MAAM,oBAAoB,CAAC;AAG5B,2DAA2D;AAC3D,KAAK,QAAQ,GAAG,MAAM,GAAG;IAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAA;CAAC,CAAC;AAMxD;;GAEG;AACH,qBAAa,kBAAkB;IAC9B,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAiB;IACpC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS,CAAgB;gBAGlD,EAAE,EAAE,gBAAgB,EACpB,QAAQ,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAC1C,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,SAAS;CAQpC;AAED;;;GAGG;AACH,qBAAa,cAAc;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAmB;IAC7F,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;gBAExB,kBAAkB,SAAU;IAIxC;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,EAAE,gBAAgB,GAAG,QAAQ,CAAC,sBAAsB,CAAC;IA6BrE;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,EAAE,gBAAgB,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAkB7E;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,GAAG,IAAI;IAuB/E;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAiBlC;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,EAAE,gBAAgB,GAAG,IAAI;IAe1C;;;;;OAKG;IACH,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;CAiB1C"}
|
|
@@ -43,6 +43,9 @@ export class RequestTracker {
|
|
|
43
43
|
* Track a new request with the given id.
|
|
44
44
|
* @param id - the request id
|
|
45
45
|
* @returns a deferred promise that will be resolved when the response is received
|
|
46
|
+
* @mutates this - inserts a `RequestTrackerItem` into `pending_requests`
|
|
47
|
+
* and arms a timeout that auto-rejects after `request_timeout_ms`;
|
|
48
|
+
* clears any prior timeout for the same id
|
|
46
49
|
*/
|
|
47
50
|
track_request(id) {
|
|
48
51
|
const deferred = create_deferred();
|
|
@@ -69,6 +72,8 @@ export class RequestTracker {
|
|
|
69
72
|
* Resolve a pending request with the given response data.
|
|
70
73
|
* @param id - the request id
|
|
71
74
|
* @param response - the response data
|
|
75
|
+
* @mutates this - clears the timeout, marks status `'success'`,
|
|
76
|
+
* resolves the deferred, and removes the entry from `pending_requests`
|
|
72
77
|
*/
|
|
73
78
|
resolve_request(id, response) {
|
|
74
79
|
const request = this.pending_requests.get(id);
|
|
@@ -89,6 +94,9 @@ export class RequestTracker {
|
|
|
89
94
|
* Rejects a pending request with the given error.
|
|
90
95
|
* @param id - the request id
|
|
91
96
|
* @param error_message - the complete `JsonrpcErrorResponse` object
|
|
97
|
+
* @mutates this - clears the timeout, marks status `'failure'`,
|
|
98
|
+
* rejects the deferred with a `ThrownJsonrpcError`, and removes the
|
|
99
|
+
* entry from `pending_requests`
|
|
92
100
|
*/
|
|
93
101
|
reject_request(id, error_message) {
|
|
94
102
|
const request = this.pending_requests.get(id);
|
|
@@ -127,8 +135,11 @@ export class RequestTracker {
|
|
|
127
135
|
// ignore other messages
|
|
128
136
|
}
|
|
129
137
|
/**
|
|
130
|
-
* Cancel a pending request
|
|
138
|
+
* Cancel a pending request without rejecting its deferred — just
|
|
139
|
+
* cleanup. The caller's promise stays unsettled; pair with an external
|
|
140
|
+
* resolution if needed.
|
|
131
141
|
* @param id - the request id
|
|
142
|
+
* @mutates this - clears the timeout and removes the entry from `pending_requests`
|
|
132
143
|
*/
|
|
133
144
|
cancel_request(id) {
|
|
134
145
|
const request = this.pending_requests.get(id);
|
|
@@ -145,6 +156,8 @@ export class RequestTracker {
|
|
|
145
156
|
/**
|
|
146
157
|
* Cancel all pending requests.
|
|
147
158
|
* @param reason - optional reason to include in rejection
|
|
159
|
+
* @mutates this - clears every timeout, marks each status `'failure'`,
|
|
160
|
+
* rejects each deferred with `internal_error`, and empties `pending_requests`
|
|
148
161
|
*/
|
|
149
162
|
cancel_all_requests(reason) {
|
|
150
163
|
for (const [id, request] of this.pending_requests.entries()) {
|
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
* server revokes auth), exposes reactive status for UI indicators, and ships
|
|
9
9
|
* three correctness primitives default-on:
|
|
10
10
|
*
|
|
11
|
-
* -
|
|
11
|
+
* - `FrontendWebsocketClient.request` — promise-based JSON-RPC with
|
|
12
12
|
* auto-assigned ids and a pending-id map. Intercepts responses on the
|
|
13
13
|
* message path so request/response correlation is transport-level rather
|
|
14
14
|
* than re-invented per consumer.
|
|
15
15
|
* - **Durable queue** — `request()` calls made while disconnected buffer up
|
|
16
16
|
* to `DEFAULT_QUEUE_MAX_SIZE` requests and flush on reopen. Overflow
|
|
17
|
-
* rejects with `queue_overflow`. Raw
|
|
17
|
+
* rejects with `queue_overflow`. Raw `FrontendWebsocketClient.send`
|
|
18
18
|
* is drop-on-disconnect (fire-and-forget notifications want that).
|
|
19
19
|
* - **Activity-aware heartbeat** — idles fire a shared `heartbeat` request;
|
|
20
20
|
* receive-silence past `DEFAULT_HEARTBEAT_RECEIVE_TIMEOUT` closes
|
|
@@ -98,9 +98,9 @@ export interface FrontendWebsocketClientOptions {
|
|
|
98
98
|
*/
|
|
99
99
|
heartbeat?: boolean | FrontendWebsocketHeartbeatOptions | null;
|
|
100
100
|
/**
|
|
101
|
-
* Durable queue for
|
|
101
|
+
* Durable queue for `FrontendWebsocketClient.request`. `true` or omit
|
|
102
102
|
* for defaults; `false` disables buffering (requests while disconnected
|
|
103
|
-
* reject immediately). Raw
|
|
103
|
+
* reject immediately). Raw `FrontendWebsocketClient.send` is never
|
|
104
104
|
* queued — use `request()` for RPC semantics.
|
|
105
105
|
*/
|
|
106
106
|
queue?: boolean | FrontendWebsocketQueueOptions;
|
|
@@ -162,6 +162,10 @@ export declare class FrontendWebsocketClient implements WebsocketConnection, Dis
|
|
|
162
162
|
* timer and transitions status to `closed` (since the lie of
|
|
163
163
|
* `'reconnecting'` would be visible to UI indicators). Turning it back on
|
|
164
164
|
* does not synthesize a reconnect — wait for the next close.
|
|
165
|
+
*
|
|
166
|
+
* @mutates this - replaces the reconnect policy fields; may also reset
|
|
167
|
+
* `status`, `reconnect_count`, and `current_reconnect_delay` when an
|
|
168
|
+
* in-flight reconnect timer is cancelled or rescheduled
|
|
165
169
|
*/
|
|
166
170
|
set_reconnect(reconnect?: boolean | FrontendWebsocketReconnectOptions | null): void;
|
|
167
171
|
/**
|
|
@@ -175,6 +179,9 @@ export declare class FrontendWebsocketClient implements WebsocketConnection, Dis
|
|
|
175
179
|
* When connected, the live timer is restarted immediately so the new
|
|
176
180
|
* `interval` / `receive_timeout` take effect without a reconnect; when
|
|
177
181
|
* disconnected, just stashes the policy for the next open.
|
|
182
|
+
*
|
|
183
|
+
* @mutates this - replaces the heartbeat policy fields; restarts the
|
|
184
|
+
* live heartbeat timer when connected
|
|
178
185
|
*/
|
|
179
186
|
set_heartbeat(heartbeat?: boolean | FrontendWebsocketHeartbeatOptions | null): void;
|
|
180
187
|
/**
|
|
@@ -189,6 +196,9 @@ export declare class FrontendWebsocketClient implements WebsocketConnection, Dis
|
|
|
189
196
|
* clears heartbeat) or the policy change of `set_reconnect(false)`
|
|
190
197
|
* (which disables future reconnects). The queue stays intact so that
|
|
191
198
|
* calling `connect` later flushes buffered work.
|
|
199
|
+
*
|
|
200
|
+
* @mutates this - clears the pending reconnect timer, sets `status` to
|
|
201
|
+
* `closed`, resets `reconnect_count` and `current_reconnect_delay`
|
|
192
202
|
*/
|
|
193
203
|
cancel_reconnect(): void;
|
|
194
204
|
get url(): string;
|
|
@@ -202,12 +212,21 @@ export declare class FrontendWebsocketClient implements WebsocketConnection, Dis
|
|
|
202
212
|
* Open the WebSocket. No-op on SSR, or if the session has been revoked.
|
|
203
213
|
* Cancels any pending reconnect and tears down any existing connection first;
|
|
204
214
|
* an open prior socket is closed with a normal-closure code.
|
|
215
|
+
*
|
|
216
|
+
* @mutates this - replaces `ws`, sets `status` to `connecting` (or
|
|
217
|
+
* `closed` on construction failure), and on construction failure may
|
|
218
|
+
* schedule a reconnect (mutating `reconnect_count` /
|
|
219
|
+
* `current_reconnect_delay`)
|
|
205
220
|
*/
|
|
206
221
|
connect(): void;
|
|
207
222
|
/**
|
|
208
223
|
* Close the WebSocket, cancel any pending reconnect, and reset the reconnect
|
|
209
224
|
* backoff counters. Puts the client in `closed` status; call `connect()` to
|
|
210
225
|
* reopen. Safe to call more than once.
|
|
226
|
+
*
|
|
227
|
+
* @mutates this - clears `ws`, heartbeat, and reconnect timers; sets
|
|
228
|
+
* `status` to `closed`; rejects every pending and queued request with
|
|
229
|
+
* `service_unavailable`
|
|
211
230
|
*/
|
|
212
231
|
disconnect(code?: number): void;
|
|
213
232
|
/** Explicit-resource-management hook — supports `using client = new FrontendWebsocketClient(url)`. */
|
|
@@ -238,17 +257,18 @@ export declare class FrontendWebsocketClient implements WebsocketConnection, Dis
|
|
|
238
257
|
* for queued-but-never-sent (server doesn't know about it) and
|
|
239
258
|
* response-beat-cancel races.
|
|
240
259
|
*
|
|
241
|
-
*
|
|
242
|
-
* `
|
|
243
|
-
*
|
|
244
|
-
*
|
|
245
|
-
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
260
|
+
* @mutates this - inserts the new pending entry into `#pending` (or
|
|
261
|
+
* buffers into `#queue` when disconnected) and may bump
|
|
262
|
+
* `#next_request_id`, `#last_send_time`, `last_send_error`
|
|
263
|
+
* @throws ThrownJsonrpcError on the returned promise — never thrown
|
|
264
|
+
* synchronously. Rejection codes:
|
|
265
|
+
* - `unauthenticated` — session revoked (entry check or close code)
|
|
266
|
+
* - `request_cancelled` — caller's `AbortSignal` fired
|
|
267
|
+
* - `queue_overflow` — durable queue full
|
|
268
|
+
* - `service_unavailable` — socket not connected / closed / torn down
|
|
269
|
+
* mid-flight
|
|
270
|
+
* - `internal_error` — `ws.send` threw (serialization, buffer full)
|
|
271
|
+
* - server's wire code verbatim — JSON-RPC error frame from peer
|
|
252
272
|
*/
|
|
253
273
|
request<R = unknown>(method: string, params?: unknown, options?: {
|
|
254
274
|
signal?: AbortSignal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/socket.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAyC,KAAK,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAKjG,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,oBAAoB,CAAC;AAE5D,qDAAqD;AACrD,eAAO,MAAM,kBAAkB,OAAO,CAAC;AACvC,kCAAkC;AAClC,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAC5C,8DAA8D;AAC9D,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AACjD,qEAAqE;AACrE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,qDAAqD;AACrD,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,wFAAwF;AACxF,eAAO,MAAM,iCAAiC,QAAS,CAAC;AACxD,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,QAAQ,CAAC;AAE9F,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AACjE,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAExD,MAAM,WAAW,iCAAiC;IACjD,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iCAAiC;IACjD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,6BAA6B;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,8BAA8B;IAC9C;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,iCAAiC,GAAG,IAAI,CAAC;IAC/D;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,iCAAiC,GAAG,IAAI,CAAC;IAC/D;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,6BAA6B,CAAC;IAChD,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAiBD;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,YAAW,mBAAmB,EAAE,UAAU;;IA0B9E,EAAE,EAAE,SAAS,GAAG,IAAI,CAAoB;IACxC,MAAM,EAAE,YAAY,CAAyB;IAE7C,eAAe,EAAE,MAAM,CAAiB;IACxC,uBAAuB,EAAE,MAAM,CAAiB;IAChD,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAoB;IACpD,yEAAyE;IACzE,eAAe,EAAE,MAAM,GAAG,IAAI,CAAoB;IAClD,kFAAkF;IAClF,eAAe,EAAE,MAAM,GAAG,IAAI,CAAoB;IAClD,qEAAqE;IACrE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAoB;IACpD;;;;;;;;OAQG;IACH,eAAe,EAAE,KAAK,GAAG,IAAI,CAAoB;IASjD,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAyC;gBAExD,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,8BAAmC;IAwBrE
|
|
1
|
+
{"version":3,"file":"socket.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/socket.svelte.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
* server revokes auth), exposes reactive status for UI indicators, and ships
|
|
9
9
|
* three correctness primitives default-on:
|
|
10
10
|
*
|
|
11
|
-
* -
|
|
11
|
+
* - `FrontendWebsocketClient.request` — promise-based JSON-RPC with
|
|
12
12
|
* auto-assigned ids and a pending-id map. Intercepts responses on the
|
|
13
13
|
* message path so request/response correlation is transport-level rather
|
|
14
14
|
* than re-invented per consumer.
|
|
15
15
|
* - **Durable queue** — `request()` calls made while disconnected buffer up
|
|
16
16
|
* to `DEFAULT_QUEUE_MAX_SIZE` requests and flush on reopen. Overflow
|
|
17
|
-
* rejects with `queue_overflow`. Raw
|
|
17
|
+
* rejects with `queue_overflow`. Raw `FrontendWebsocketClient.send`
|
|
18
18
|
* is drop-on-disconnect (fire-and-forget notifications want that).
|
|
19
19
|
* - **Activity-aware heartbeat** — idles fire a shared `heartbeat` request;
|
|
20
20
|
* receive-silence past `DEFAULT_HEARTBEAT_RECEIVE_TIMEOUT` closes
|
|
@@ -140,6 +140,10 @@ export class FrontendWebsocketClient {
|
|
|
140
140
|
* timer and transitions status to `closed` (since the lie of
|
|
141
141
|
* `'reconnecting'` would be visible to UI indicators). Turning it back on
|
|
142
142
|
* does not synthesize a reconnect — wait for the next close.
|
|
143
|
+
*
|
|
144
|
+
* @mutates this - replaces the reconnect policy fields; may also reset
|
|
145
|
+
* `status`, `reconnect_count`, and `current_reconnect_delay` when an
|
|
146
|
+
* in-flight reconnect timer is cancelled or rescheduled
|
|
143
147
|
*/
|
|
144
148
|
set_reconnect(reconnect = null) {
|
|
145
149
|
const next_auto = reconnect !== false;
|
|
@@ -187,6 +191,9 @@ export class FrontendWebsocketClient {
|
|
|
187
191
|
* When connected, the live timer is restarted immediately so the new
|
|
188
192
|
* `interval` / `receive_timeout` take effect without a reconnect; when
|
|
189
193
|
* disconnected, just stashes the policy for the next open.
|
|
194
|
+
*
|
|
195
|
+
* @mutates this - replaces the heartbeat policy fields; restarts the
|
|
196
|
+
* live heartbeat timer when connected
|
|
190
197
|
*/
|
|
191
198
|
set_heartbeat(heartbeat = null) {
|
|
192
199
|
this.#heartbeat_enabled = heartbeat !== false;
|
|
@@ -212,6 +219,9 @@ export class FrontendWebsocketClient {
|
|
|
212
219
|
* clears heartbeat) or the policy change of `set_reconnect(false)`
|
|
213
220
|
* (which disables future reconnects). The queue stays intact so that
|
|
214
221
|
* calling `connect` later flushes buffered work.
|
|
222
|
+
*
|
|
223
|
+
* @mutates this - clears the pending reconnect timer, sets `status` to
|
|
224
|
+
* `closed`, resets `reconnect_count` and `current_reconnect_delay`
|
|
215
225
|
*/
|
|
216
226
|
cancel_reconnect() {
|
|
217
227
|
if (this.#reconnect_timeout === null)
|
|
@@ -235,6 +245,11 @@ export class FrontendWebsocketClient {
|
|
|
235
245
|
* Open the WebSocket. No-op on SSR, or if the session has been revoked.
|
|
236
246
|
* Cancels any pending reconnect and tears down any existing connection first;
|
|
237
247
|
* an open prior socket is closed with a normal-closure code.
|
|
248
|
+
*
|
|
249
|
+
* @mutates this - replaces `ws`, sets `status` to `connecting` (or
|
|
250
|
+
* `closed` on construction failure), and on construction failure may
|
|
251
|
+
* schedule a reconnect (mutating `reconnect_count` /
|
|
252
|
+
* `current_reconnect_delay`)
|
|
238
253
|
*/
|
|
239
254
|
connect() {
|
|
240
255
|
if (!BROWSER)
|
|
@@ -267,6 +282,10 @@ export class FrontendWebsocketClient {
|
|
|
267
282
|
* Close the WebSocket, cancel any pending reconnect, and reset the reconnect
|
|
268
283
|
* backoff counters. Puts the client in `closed` status; call `connect()` to
|
|
269
284
|
* reopen. Safe to call more than once.
|
|
285
|
+
*
|
|
286
|
+
* @mutates this - clears `ws`, heartbeat, and reconnect timers; sets
|
|
287
|
+
* `status` to `closed`; rejects every pending and queued request with
|
|
288
|
+
* `service_unavailable`
|
|
270
289
|
*/
|
|
271
290
|
disconnect(code = DEFAULT_CLOSE_CODE) {
|
|
272
291
|
this.#cancel_reconnect();
|
|
@@ -320,17 +339,18 @@ export class FrontendWebsocketClient {
|
|
|
320
339
|
* for queued-but-never-sent (server doesn't know about it) and
|
|
321
340
|
* response-beat-cancel races.
|
|
322
341
|
*
|
|
323
|
-
*
|
|
324
|
-
* `
|
|
325
|
-
*
|
|
326
|
-
*
|
|
327
|
-
*
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
*
|
|
331
|
-
*
|
|
332
|
-
*
|
|
333
|
-
*
|
|
342
|
+
* @mutates this - inserts the new pending entry into `#pending` (or
|
|
343
|
+
* buffers into `#queue` when disconnected) and may bump
|
|
344
|
+
* `#next_request_id`, `#last_send_time`, `last_send_error`
|
|
345
|
+
* @throws ThrownJsonrpcError on the returned promise — never thrown
|
|
346
|
+
* synchronously. Rejection codes:
|
|
347
|
+
* - `unauthenticated` — session revoked (entry check or close code)
|
|
348
|
+
* - `request_cancelled` — caller's `AbortSignal` fired
|
|
349
|
+
* - `queue_overflow` — durable queue full
|
|
350
|
+
* - `service_unavailable` — socket not connected / closed / torn down
|
|
351
|
+
* mid-flight
|
|
352
|
+
* - `internal_error` — `ws.send` threw (serialization, buffer full)
|
|
353
|
+
* - server's wire code verbatim — JSON-RPC error frame from peer
|
|
334
354
|
*/
|
|
335
355
|
request(method, params = {}, options = {}) {
|
|
336
356
|
return new Promise((resolve, reject) => {
|
|
@@ -60,15 +60,24 @@ export declare class Transports {
|
|
|
60
60
|
*/
|
|
61
61
|
allow_fallback: boolean;
|
|
62
62
|
/**
|
|
63
|
-
* Registers a transport.
|
|
63
|
+
* Registers a transport. The first transport registered also becomes the current.
|
|
64
|
+
*
|
|
65
|
+
* @mutates this - inserts into `#transport_by_name`; sets `#current_transport`
|
|
66
|
+
* if no current is set
|
|
64
67
|
*/
|
|
65
68
|
register_transport(transport: Transport): void;
|
|
69
|
+
/**
|
|
70
|
+
* Switch the current transport selection by name.
|
|
71
|
+
*
|
|
72
|
+
* @mutates this - sets `#current_transport`
|
|
73
|
+
* @throws Error if no transport with `transport_name` has been registered
|
|
74
|
+
*/
|
|
66
75
|
set_current_transport(transport_name: TransportName): void;
|
|
67
76
|
/**
|
|
68
77
|
* Gets either the current transport or the first ready transport
|
|
69
|
-
* depending on `allow_fallback
|
|
78
|
+
* depending on `allow_fallback`.
|
|
70
79
|
* @param transport_name - optional transport to use instead of the current
|
|
71
|
-
* @
|
|
80
|
+
* @returns the resolved transport, or `null` when none is ready
|
|
72
81
|
*/
|
|
73
82
|
get_transport(transport_name?: TransportName): Transport | null;
|
|
74
83
|
is_ready(): boolean | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/transports.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,KAAK,EACX,gCAAgC,EAChC,gCAAgC,EAChC,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,mDAAmD;AACnD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,sEAAsE;AACtE,eAAO,MAAM,iCAAiC,OAAO,CAAC;AACtD,yEAAyE;AACzE,eAAO,MAAM,iCAAiC,OAAO,CAAC;AAKtD,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACpC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACzB,cAAc,EAAE,aAAa,CAAC;IAE9B,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC/F,IAAI,CACH,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;IACxC,IAAI,CACH,OAAO,EAAE,gCAAgC,EACzC,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gCAAgC,GAAG,IAAI,CAAC,CAAC;IACpD,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,qBAAa,UAAU;;IAItB;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAQ;IAE/B
|
|
1
|
+
{"version":3,"file":"transports.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/transports.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,KAAK,EACX,gCAAgC,EAChC,gCAAgC,EAChC,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,mDAAmD;AACnD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,sEAAsE;AACtE,eAAO,MAAM,iCAAiC,OAAO,CAAC;AACtD,yEAAyE;AACzE,eAAO,MAAM,iCAAiC,OAAO,CAAC;AAKtD,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACpC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACzB,cAAc,EAAE,aAAa,CAAC;IAE9B,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC/F,IAAI,CACH,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;IACxC,IAAI,CACH,OAAO,EAAE,gCAAgC,EACzC,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gCAAgC,GAAG,IAAI,CAAC,CAAC;IACpD,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,qBAAa,UAAU;;IAItB;;;OAGG;IACH,cAAc,EAAE,OAAO,CAAQ;IAE/B;;;;;OAKG;IACH,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAS9C;;;;;OAKG;IACH,qBAAqB,CAAC,cAAc,EAAE,aAAa,GAAG,IAAI;IAM1D;;;;;OAKG;IACH,aAAa,CAAC,cAAc,CAAC,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI;IAO/D,QAAQ,IAAI,OAAO,GAAG,IAAI;IAM1B,qBAAqB,IAAI,SAAS,GAAG,IAAI;IAIzC,0BAA0B,IAAI,aAAa,GAAG,IAAI;IAIlD,qBAAqB,CAAC,cAAc,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI;CAqDtE"}
|
|
@@ -25,7 +25,10 @@ export class Transports {
|
|
|
25
25
|
*/
|
|
26
26
|
allow_fallback = true; // TODO allow registering transports with a priority level so this can be customized
|
|
27
27
|
/**
|
|
28
|
-
* Registers a transport.
|
|
28
|
+
* Registers a transport. The first transport registered also becomes the current.
|
|
29
|
+
*
|
|
30
|
+
* @mutates this - inserts into `#transport_by_name`; sets `#current_transport`
|
|
31
|
+
* if no current is set
|
|
29
32
|
*/
|
|
30
33
|
register_transport(transport) {
|
|
31
34
|
this.#transport_by_name.set(transport.transport_name, transport); // TODO maybe ensure unregistering of any previous transport?
|
|
@@ -34,6 +37,12 @@ export class Transports {
|
|
|
34
37
|
this.#current_transport = transport;
|
|
35
38
|
}
|
|
36
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Switch the current transport selection by name.
|
|
42
|
+
*
|
|
43
|
+
* @mutates this - sets `#current_transport`
|
|
44
|
+
* @throws Error if no transport with `transport_name` has been registered
|
|
45
|
+
*/
|
|
37
46
|
set_current_transport(transport_name) {
|
|
38
47
|
const transport = this.#transport_by_name.get(transport_name);
|
|
39
48
|
if (!transport)
|
|
@@ -42,9 +51,9 @@ export class Transports {
|
|
|
42
51
|
}
|
|
43
52
|
/**
|
|
44
53
|
* Gets either the current transport or the first ready transport
|
|
45
|
-
* depending on `allow_fallback
|
|
54
|
+
* depending on `allow_fallback`.
|
|
46
55
|
* @param transport_name - optional transport to use instead of the current
|
|
47
|
-
* @
|
|
56
|
+
* @returns the resolved transport, or `null` when none is ready
|
|
48
57
|
*/
|
|
49
58
|
get_transport(transport_name) {
|
|
50
59
|
return this.allow_fallback
|
|
@@ -68,9 +77,9 @@ export class Transports {
|
|
|
68
77
|
return this.#transport_by_name.get(transport_name) ?? null;
|
|
69
78
|
}
|
|
70
79
|
/**
|
|
71
|
-
* Gets the specified transport, defaulting to the current
|
|
80
|
+
* Gets the specified transport, defaulting to the current.
|
|
72
81
|
* @param transport_name - optional transport type to use instead of the current
|
|
73
|
-
* @
|
|
82
|
+
* @returns the resolved transport when ready, else `null`
|
|
74
83
|
*/
|
|
75
84
|
#get_exact(transport_name) {
|
|
76
85
|
const transport = transport_name
|
|
@@ -82,9 +91,9 @@ export class Transports {
|
|
|
82
91
|
return null;
|
|
83
92
|
}
|
|
84
93
|
/**
|
|
85
|
-
* Gets the appropriate transport
|
|
94
|
+
* Gets the appropriate transport.
|
|
86
95
|
* @param transport_name - optional transport type or array of types to use instead of the current
|
|
87
|
-
* @
|
|
96
|
+
* @returns the first ready transport (specified → current → any), or `null`
|
|
88
97
|
*/
|
|
89
98
|
#get_first_ready(transport_name) {
|
|
90
99
|
// First try the specified transport(s) if provided
|
|
@@ -5,6 +5,13 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import type { JsonrpcNotification, JsonrpcRequest, JsonrpcResponseOrError, JsonrpcErrorResponse } from '../http/jsonrpc.js';
|
|
7
7
|
import type { Transport, TransportSendOptions } from './transports.js';
|
|
8
|
+
/**
|
|
9
|
+
* Thin `fetch` adapter for the JSON-RPC endpoint. POST by default; GET when
|
|
10
|
+
* the optional `has_side_effects(method)` callback returns `false` for the
|
|
11
|
+
* method (matches `create_rpc_endpoint`'s GET convention). On non-OK HTTP
|
|
12
|
+
* responses, synthesizes a JSON-RPC error envelope via
|
|
13
|
+
* `http_status_to_jsonrpc_error_code`. Always reports ready.
|
|
14
|
+
*/
|
|
8
15
|
export declare class FrontendHttpTransport implements Transport {
|
|
9
16
|
#private;
|
|
10
17
|
readonly transport_name: "frontend_http_rpc";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports_http.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/transports_http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,OAAO,KAAK,EAGX,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAC,SAAS,EAAE,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAErE,qBAAa,qBAAsB,YAAW,SAAS;;IACtD,QAAQ,CAAC,cAAc,EAAG,mBAAmB,CAAU;gBAOtD,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO;IAOzC,IAAI,CACT,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,sBAAsB,CAAC;IAC5B,IAAI,CACT,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAyEvC,QAAQ,IAAI,OAAO;CAGnB"}
|
|
1
|
+
{"version":3,"file":"transports_http.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/transports_http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,OAAO,KAAK,EAGX,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAC,SAAS,EAAE,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAErE;;;;;;GAMG;AACH,qBAAa,qBAAsB,YAAW,SAAS;;IACtD,QAAQ,CAAC,cAAc,EAAG,mBAAmB,CAAU;gBAOtD,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO;IAOzC,IAAI,CACT,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,sBAAsB,CAAC;IAC5B,IAAI,CACT,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAyEvC,QAAQ,IAAI,OAAO;CAGnB"}
|
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
import { DEV } from 'esm-env';
|
|
7
7
|
import { ThrownJsonrpcError, jsonrpc_error_messages, http_status_to_jsonrpc_error_code, UNKNOWN_ERROR_MESSAGE, } from '../http/jsonrpc_errors.js';
|
|
8
8
|
import { create_jsonrpc_error_response, to_jsonrpc_message_id, is_jsonrpc_error_response, } from '../http/jsonrpc_helpers.js';
|
|
9
|
+
/**
|
|
10
|
+
* Thin `fetch` adapter for the JSON-RPC endpoint. POST by default; GET when
|
|
11
|
+
* the optional `has_side_effects(method)` callback returns `false` for the
|
|
12
|
+
* method (matches `create_rpc_endpoint`'s GET convention). On non-OK HTTP
|
|
13
|
+
* responses, synthesizes a JSON-RPC error envelope via
|
|
14
|
+
* `http_status_to_jsonrpc_error_code`. Always reports ready.
|
|
15
|
+
*/
|
|
9
16
|
export class FrontendHttpTransport {
|
|
10
17
|
transport_name = 'frontend_http_rpc';
|
|
11
18
|
#url;
|
|
@@ -41,6 +41,12 @@ export interface WebsocketRpcConnection extends WebsocketConnection {
|
|
|
41
41
|
id?: JsonrpcRequestId;
|
|
42
42
|
}) => Promise<unknown>;
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Thin adapter over `WebsocketRpcConnection` (canonical implementation:
|
|
46
|
+
* `FrontendWebsocketClient`). Routes inbound server-pushed requests and
|
|
47
|
+
* notifications into the supplied `receive` callback; responses are owned
|
|
48
|
+
* by the connection's own `request()` pending map and are ignored here.
|
|
49
|
+
*/
|
|
44
50
|
export declare class FrontendWebsocketTransport implements Transport {
|
|
45
51
|
#private;
|
|
46
52
|
readonly transport_name: "frontend_websocket_rpc";
|
|
@@ -48,6 +54,13 @@ export declare class FrontendWebsocketTransport implements Transport {
|
|
|
48
54
|
send(message: JsonrpcRequest, options?: TransportSendOptions): Promise<JsonrpcResponseOrError>;
|
|
49
55
|
send(message: JsonrpcNotification, options?: TransportSendOptions): Promise<JsonrpcErrorResponse | null>;
|
|
50
56
|
is_ready(): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Detach the inbound message and error handlers registered on the
|
|
59
|
+
* connection. Idempotent — subsequent calls no-op. Does not close the
|
|
60
|
+
* underlying connection (that lifecycle is owned by the caller).
|
|
61
|
+
*
|
|
62
|
+
* @mutates this - clears the two stored unsubscribe references after invoking them
|
|
63
|
+
*/
|
|
51
64
|
dispose(): void;
|
|
52
65
|
}
|
|
53
66
|
//# sourceMappingURL=transports_ws.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports_ws.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/transports_ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAWH,OAAO,KAAK,EAGX,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAC,SAAS,EAAE,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAIrE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAC5E,iBAAiB,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;CACnE;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IAClE,OAAO,EAAE,CACR,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE;QAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,gBAAgB,CAAA;KAAC,KACpE,OAAO,CAAC,OAAO,CAAC,CAAC;CACtB;AAED,qBAAa,0BAA2B,YAAW,SAAS;;IAC3D,QAAQ,CAAC,cAAc,EAAG,wBAAwB,CAAU;gBAOhD,UAAU,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC;IAyBtF,IAAI,CACT,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,sBAAsB,CAAC;IAC5B,IAAI,CACT,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IA4DvC,QAAQ,IAAI,OAAO;IAInB,OAAO,IAAI,IAAI;CAUf"}
|
|
1
|
+
{"version":3,"file":"transports_ws.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/transports_ws.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAWH,OAAO,KAAK,EAGX,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,oBAAoB,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAC,SAAS,EAAE,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAIrE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAC5E,iBAAiB,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;CACnE;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IAClE,OAAO,EAAE,CACR,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE;QAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,gBAAgB,CAAA;KAAC,KACpE,OAAO,CAAC,OAAO,CAAC,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,0BAA2B,YAAW,SAAS;;IAC3D,QAAQ,CAAC,cAAc,EAAG,wBAAwB,CAAU;gBAOhD,UAAU,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC;IAyBtF,IAAI,CACT,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,sBAAsB,CAAC;IAC5B,IAAI,CACT,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IA4DvC,QAAQ,IAAI,OAAO;IAInB;;;;;;OAMG;IACH,OAAO,IAAI,IAAI;CAUf"}
|
|
@@ -13,6 +13,12 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { ThrownJsonrpcError, jsonrpc_error_messages } from '../http/jsonrpc_errors.js';
|
|
15
15
|
import { is_jsonrpc_notification, is_jsonrpc_request, to_jsonrpc_message_id, to_jsonrpc_result, create_jsonrpc_response, create_jsonrpc_error_response, } from '../http/jsonrpc_helpers.js';
|
|
16
|
+
/**
|
|
17
|
+
* Thin adapter over `WebsocketRpcConnection` (canonical implementation:
|
|
18
|
+
* `FrontendWebsocketClient`). Routes inbound server-pushed requests and
|
|
19
|
+
* notifications into the supplied `receive` callback; responses are owned
|
|
20
|
+
* by the connection's own `request()` pending map and are ignored here.
|
|
21
|
+
*/
|
|
16
22
|
export class FrontendWebsocketTransport {
|
|
17
23
|
transport_name = 'frontend_websocket_rpc';
|
|
18
24
|
#connection;
|
|
@@ -86,6 +92,13 @@ export class FrontendWebsocketTransport {
|
|
|
86
92
|
is_ready() {
|
|
87
93
|
return this.#connection.connected;
|
|
88
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* Detach the inbound message and error handlers registered on the
|
|
97
|
+
* connection. Idempotent — subsequent calls no-op. Does not close the
|
|
98
|
+
* underlying connection (that lifecycle is owned by the caller).
|
|
99
|
+
*
|
|
100
|
+
* @mutates this - clears the two stored unsubscribe references after invoking them
|
|
101
|
+
*/
|
|
89
102
|
dispose() {
|
|
90
103
|
if (this.#remove_message_handler) {
|
|
91
104
|
this.#remove_message_handler();
|
|
@@ -47,7 +47,9 @@ export declare const WS_DISCONNECT_EVENT_TYPES: ReadonlySet<string>;
|
|
|
47
47
|
*
|
|
48
48
|
* @param transport - the backend WebSocket transport to guard
|
|
49
49
|
* @param log - logger for disconnect events (info level on non-zero closures)
|
|
50
|
-
* @returns an `on_audit_event` callback suitable for `CreateAppBackendOptions
|
|
50
|
+
* @returns an `on_audit_event` callback suitable for `CreateAppBackendOptions`.
|
|
51
|
+
* The returned callback mutates `transport` (closing matching sockets via
|
|
52
|
+
* `close_sockets_for_session` / `_token` / `_account`) on every relevant event.
|
|
51
53
|
*/
|
|
52
54
|
export declare const create_ws_auth_guard: (transport: BackendWebsocketTransport, log: Logger) => AuditEventHandler;
|
|
53
55
|
/**
|
|
@@ -78,7 +80,9 @@ export declare const create_ws_auth_guard: (transport: BackendWebsocketTransport
|
|
|
78
80
|
*
|
|
79
81
|
* @param transport - the backend WebSocket transport to guard
|
|
80
82
|
* @param log - logger for disconnect events (info level on non-zero closures)
|
|
81
|
-
* @returns an `on_audit_event` callback wireable alongside `create_ws_auth_guard
|
|
83
|
+
* @returns an `on_audit_event` callback wireable alongside `create_ws_auth_guard`.
|
|
84
|
+
* The returned callback mutates `transport` via `close_sockets_for_account`
|
|
85
|
+
* on every successful `logout` event with a non-empty `account_id`.
|
|
82
86
|
*/
|
|
83
87
|
export declare const create_ws_logout_closer: (transport: BackendWebsocketTransport, log: Logger) => AuditEventHandler;
|
|
84
88
|
//# sourceMappingURL=transports_ws_auth_guard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports_ws_auth_guard.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/transports_ws_auth_guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAEpD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,4BAA4B,CAAC;AAE1E;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAE/D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,MAAM,CAMxD,CAAC;AAEH
|
|
1
|
+
{"version":3,"file":"transports_ws_auth_guard.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/transports_ws_auth_guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAEpD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAC,yBAAyB,EAAC,MAAM,4BAA4B,CAAC;AAE1E;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAE/D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,EAAE,WAAW,CAAC,MAAM,CAMxD,CAAC;AAEH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB,GAChC,WAAW,yBAAyB,EACpC,KAAK,MAAM,KACT,iBA6CF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,uBAAuB,GACnC,WAAW,yBAAyB,EACpC,KAAK,MAAM,KACT,iBAaF,CAAC"}
|
|
@@ -40,7 +40,9 @@ export const WS_DISCONNECT_EVENT_TYPES = new Set([
|
|
|
40
40
|
*
|
|
41
41
|
* @param transport - the backend WebSocket transport to guard
|
|
42
42
|
* @param log - logger for disconnect events (info level on non-zero closures)
|
|
43
|
-
* @returns an `on_audit_event` callback suitable for `CreateAppBackendOptions
|
|
43
|
+
* @returns an `on_audit_event` callback suitable for `CreateAppBackendOptions`.
|
|
44
|
+
* The returned callback mutates `transport` (closing matching sockets via
|
|
45
|
+
* `close_sockets_for_session` / `_token` / `_account`) on every relevant event.
|
|
44
46
|
*/
|
|
45
47
|
export const create_ws_auth_guard = (transport, log) => {
|
|
46
48
|
return (event) => {
|
|
@@ -112,7 +114,9 @@ export const create_ws_auth_guard = (transport, log) => {
|
|
|
112
114
|
*
|
|
113
115
|
* @param transport - the backend WebSocket transport to guard
|
|
114
116
|
* @param log - logger for disconnect events (info level on non-zero closures)
|
|
115
|
-
* @returns an `on_audit_event` callback wireable alongside `create_ws_auth_guard
|
|
117
|
+
* @returns an `on_audit_event` callback wireable alongside `create_ws_auth_guard`.
|
|
118
|
+
* The returned callback mutates `transport` via `close_sockets_for_account`
|
|
119
|
+
* on every successful `logout` event with a non-empty `account_id`.
|
|
116
120
|
*/
|
|
117
121
|
export const create_ws_logout_closer = (transport, log) => {
|
|
118
122
|
return (event) => {
|
|
@@ -44,28 +44,39 @@ export declare class BackendWebsocketTransport implements FilterableBroadcastTra
|
|
|
44
44
|
/**
|
|
45
45
|
* Add a new WebSocket connection with auth info.
|
|
46
46
|
* Session connections pass a token hash for targeted revocation.
|
|
47
|
-
* Bearer token connections (api_token) pass the `api_token.id` so the
|
|
47
|
+
* Bearer token connections (`api_token`) pass the `api_token.id` so the
|
|
48
48
|
* socket can be closed when that specific token is revoked without
|
|
49
49
|
* tearing down the account's other sockets. Daemon-token connections
|
|
50
50
|
* pass `null` for both — they're only reachable via
|
|
51
51
|
* `close_sockets_for_account`.
|
|
52
|
+
*
|
|
53
|
+
* @returns the freshly assigned `connection_id` (branded `Uuid`)
|
|
54
|
+
* @mutates this - inserts into `#connections`, `#connection_ids`, and
|
|
55
|
+
* `#connection_identities`
|
|
52
56
|
*/
|
|
53
57
|
add_connection(ws: WSContext, token_hash: string | null, account_id: Uuid, api_token_id?: string | null): Uuid;
|
|
54
58
|
/**
|
|
55
59
|
* Remove a WebSocket connection and its auth tracking data.
|
|
56
60
|
* Idempotent — safe to call after revocation has already cleaned up.
|
|
61
|
+
*
|
|
62
|
+
* @mutates this - deletes the connection's entries from `#connections`,
|
|
63
|
+
* `#connection_ids`, and `#connection_identities`
|
|
57
64
|
*/
|
|
58
65
|
remove_connection(ws: WSContext): void;
|
|
59
66
|
/**
|
|
60
67
|
* Close all sockets associated with a specific session token hash.
|
|
61
68
|
*
|
|
62
69
|
* @returns the number of sockets closed
|
|
70
|
+
* @mutates this - removes matching connections from internal maps and
|
|
71
|
+
* closes their underlying `WSContext` with `WS_CLOSE_SESSION_REVOKED`
|
|
63
72
|
*/
|
|
64
73
|
close_sockets_for_session(token_hash: string): number;
|
|
65
74
|
/**
|
|
66
75
|
* Close all sockets associated with a specific account.
|
|
67
76
|
*
|
|
68
77
|
* @returns the number of sockets closed
|
|
78
|
+
* @mutates this - removes matching connections from internal maps and
|
|
79
|
+
* closes their underlying `WSContext` with `WS_CLOSE_SESSION_REVOKED`
|
|
69
80
|
*/
|
|
70
81
|
close_sockets_for_account(account_id: Uuid): number;
|
|
71
82
|
/**
|
|
@@ -76,6 +87,8 @@ export declare class BackendWebsocketTransport implements FilterableBroadcastTra
|
|
|
76
87
|
* tokens' sockets.
|
|
77
88
|
*
|
|
78
89
|
* @returns the number of sockets closed
|
|
90
|
+
* @mutates this - removes matching connections from internal maps and
|
|
91
|
+
* closes their underlying `WSContext` with `WS_CLOSE_SESSION_REVOKED`
|
|
79
92
|
*/
|
|
80
93
|
close_sockets_for_token(api_token_id: string): number;
|
|
81
94
|
send(message: JsonrpcRequest, options?: TransportSendOptions): Promise<JsonrpcResponseOrError>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transports_ws_backend.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/transports_ws_backend.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AACvC,OAAO,EAAc,KAAK,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAEX,gCAAgC,EAChC,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EAA2B,KAAK,SAAS,EAAE,KAAK,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAIpG;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IAClC,sEAAsE;IACtE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,4CAA4C;IAC5C,UAAU,EAAE,IAAI,CAAC;IACjB,sEAAsE;IACtE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,4BAA6B,SAAQ,SAAS;IAC9D,kBAAkB,EAAE,CACnB,OAAO,EAAE,gCAAgC,EACzC,SAAS,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,OAAO,KAChD,MAAM,CAAC;CACZ;AAED,qDAAqD;AACrD,eAAO,MAAM,iCAAiC,GAC7C,WAAW,SAAS,KAClB,SAAS,IAAI,4BAEqE,CAAC;AAEtF,qBAAa,yBAA0B,YAAW,4BAA4B;;IAC7E,QAAQ,CAAC,cAAc,EAAG,uBAAuB,CAAU;IAY3D
|
|
1
|
+
{"version":3,"file":"transports_ws_backend.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/actions/transports_ws_backend.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AACvC,OAAO,EAAc,KAAK,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAEX,gCAAgC,EAChC,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EAA2B,KAAK,SAAS,EAAE,KAAK,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAIpG;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IAClC,sEAAsE;IACtE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,4CAA4C;IAC5C,UAAU,EAAE,IAAI,CAAC;IACjB,sEAAsE;IACtE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,4BAA6B,SAAQ,SAAS;IAC9D,kBAAkB,EAAE,CACnB,OAAO,EAAE,gCAAgC,EACzC,SAAS,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,OAAO,KAChD,MAAM,CAAC;CACZ;AAED,qDAAqD;AACrD,eAAO,MAAM,iCAAiC,GAC7C,WAAW,SAAS,KAClB,SAAS,IAAI,4BAEqE,CAAC;AAEtF,qBAAa,yBAA0B,YAAW,4BAA4B;;IAC7E,QAAQ,CAAC,cAAc,EAAG,uBAAuB,CAAU;IAY3D;;;;;;;;;;;;OAYG;IACH,cAAc,CACb,EAAE,EAAE,SAAS,EACb,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,UAAU,EAAE,IAAI,EAChB,YAAY,GAAE,MAAM,GAAG,IAAW,GAChC,IAAI;IAQP;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;IA0BtC;;;;;;OAMG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAIrD;;;;;;OAMG;IACH,yBAAyB,CAAC,UAAU,EAAE,IAAI,GAAG,MAAM;IAInD;;;;;;;;;;OAUG;IACH,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAsB/C,IAAI,CACT,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,sBAAsB,CAAC;IAC5B,IAAI,CACT,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE,oBAAoB,GAC5B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IA6CvC;;;;;;;;;OASG;IACH,kBAAkB,CACjB,OAAO,EAAE,gCAAgC,EACzC,SAAS,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,OAAO,GAClD,MAAM;IAoBT;;;;;;;;;;;;;OAaG;IACH,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,gCAAgC,GAAG,MAAM;IAIpF,QAAQ,IAAI,OAAO;IAInB;;;;;;;OAOG;IACH,oBAAoB,IAAI,MAAM;CAG9B"}
|