@fuzdev/fuz_app 0.67.1 → 0.69.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/perform_action.d.ts.map +1 -1
- package/dist/actions/perform_action.js +10 -3
- package/dist/auth/CLAUDE.md +99 -5
- package/dist/auth/account_queries.d.ts +87 -4
- package/dist/auth/account_queries.d.ts.map +1 -1
- package/dist/auth/account_queries.js +107 -17
- package/dist/auth/account_schema.d.ts +19 -0
- package/dist/auth/account_schema.d.ts.map +1 -1
- package/dist/auth/account_schema.js +8 -0
- package/dist/auth/admin_action_specs.d.ts +170 -3
- package/dist/auth/admin_action_specs.d.ts.map +1 -1
- package/dist/auth/admin_action_specs.js +148 -4
- package/dist/auth/admin_actions.d.ts +4 -14
- package/dist/auth/admin_actions.d.ts.map +1 -1
- package/dist/auth/admin_actions.js +246 -40
- package/dist/auth/audit_log_ddl.d.ts +10 -1
- package/dist/auth/audit_log_ddl.d.ts.map +1 -1
- package/dist/auth/audit_log_ddl.js +13 -4
- package/dist/auth/audit_log_schema.d.ts +34 -1
- package/dist/auth/audit_log_schema.d.ts.map +1 -1
- package/dist/auth/audit_log_schema.js +73 -0
- package/dist/auth/auth_ddl.d.ts +2 -2
- package/dist/auth/auth_ddl.d.ts.map +1 -1
- package/dist/auth/auth_ddl.js +10 -2
- package/dist/auth/cell_action_specs.d.ts +1295 -0
- package/dist/auth/cell_action_specs.d.ts.map +1 -0
- package/dist/auth/cell_action_specs.js +397 -0
- package/dist/auth/cell_actions.d.ts +63 -0
- package/dist/auth/cell_actions.d.ts.map +1 -0
- package/dist/auth/cell_actions.js +546 -0
- package/dist/auth/cell_audit_action_specs.d.ts +131 -0
- package/dist/auth/cell_audit_action_specs.d.ts.map +1 -0
- package/dist/auth/cell_audit_action_specs.js +70 -0
- package/dist/auth/cell_audit_actions.d.ts +18 -0
- package/dist/auth/cell_audit_actions.d.ts.map +1 -0
- package/dist/auth/cell_audit_actions.js +59 -0
- package/dist/auth/cell_audit_events.d.ts +28 -0
- package/dist/auth/cell_audit_events.d.ts.map +1 -0
- package/dist/auth/cell_audit_events.js +42 -0
- package/dist/auth/cell_audit_metadata.d.ts +48 -0
- package/dist/auth/cell_audit_metadata.d.ts.map +1 -0
- package/dist/auth/cell_audit_metadata.js +46 -0
- package/dist/auth/cell_authorize.d.ts +88 -0
- package/dist/auth/cell_authorize.d.ts.map +1 -0
- package/dist/auth/cell_authorize.js +172 -0
- package/dist/auth/cell_data_schema.d.ts +44 -0
- package/dist/auth/cell_data_schema.d.ts.map +1 -0
- package/dist/auth/cell_data_schema.js +42 -0
- package/dist/auth/cell_field_action_specs.d.ts +244 -0
- package/dist/auth/cell_field_action_specs.d.ts.map +1 -0
- package/dist/auth/cell_field_action_specs.js +136 -0
- package/dist/auth/cell_field_actions.d.ts +34 -0
- package/dist/auth/cell_field_actions.d.ts.map +1 -0
- package/dist/auth/cell_field_actions.js +153 -0
- package/dist/auth/cell_field_audit_metadata.d.ts +30 -0
- package/dist/auth/cell_field_audit_metadata.d.ts.map +1 -0
- package/dist/auth/cell_field_audit_metadata.js +28 -0
- package/dist/auth/cell_grant_action_specs.d.ts +333 -0
- package/dist/auth/cell_grant_action_specs.d.ts.map +1 -0
- package/dist/auth/cell_grant_action_specs.js +148 -0
- package/dist/auth/cell_grant_actions.d.ts +50 -0
- package/dist/auth/cell_grant_actions.d.ts.map +1 -0
- package/dist/auth/cell_grant_actions.js +208 -0
- package/dist/auth/cell_grant_audit_metadata.d.ts +75 -0
- package/dist/auth/cell_grant_audit_metadata.d.ts.map +1 -0
- package/dist/auth/cell_grant_audit_metadata.js +54 -0
- package/dist/auth/cell_item_action_specs.d.ts +331 -0
- package/dist/auth/cell_item_action_specs.d.ts.map +1 -0
- package/dist/auth/cell_item_action_specs.js +182 -0
- package/dist/auth/cell_item_actions.d.ts +37 -0
- package/dist/auth/cell_item_actions.d.ts.map +1 -0
- package/dist/auth/cell_item_actions.js +204 -0
- package/dist/auth/cell_item_audit_metadata.d.ts +35 -0
- package/dist/auth/cell_item_audit_metadata.d.ts.map +1 -0
- package/dist/auth/cell_item_audit_metadata.js +32 -0
- package/dist/auth/cell_relation_visibility.d.ts +32 -0
- package/dist/auth/cell_relation_visibility.d.ts.map +1 -0
- package/dist/auth/cell_relation_visibility.js +57 -0
- package/dist/auth/deps.d.ts +9 -0
- package/dist/auth/deps.d.ts.map +1 -1
- package/dist/auth/role_grant_queries.d.ts +30 -0
- package/dist/auth/role_grant_queries.d.ts.map +1 -1
- package/dist/auth/role_grant_queries.js +54 -0
- package/dist/auth/signup_routes.d.ts +0 -3
- package/dist/auth/signup_routes.d.ts.map +1 -1
- package/dist/auth/signup_routes.js +9 -3
- package/dist/auth/standard_rpc_actions.d.ts +5 -5
- package/dist/auth/standard_rpc_actions.js +4 -4
- package/dist/db/CLAUDE.md +118 -0
- package/dist/db/cell_audit_queries.d.ts +26 -0
- package/dist/db/cell_audit_queries.d.ts.map +1 -0
- package/dist/db/cell_audit_queries.js +53 -0
- package/dist/db/cell_ddl.d.ts +151 -0
- package/dist/db/cell_ddl.d.ts.map +1 -0
- package/dist/db/cell_ddl.js +247 -0
- package/dist/db/cell_field_queries.d.ts +105 -0
- package/dist/db/cell_field_queries.d.ts.map +1 -0
- package/dist/db/cell_field_queries.js +113 -0
- package/dist/db/cell_grant_queries.d.ts +132 -0
- package/dist/db/cell_grant_queries.d.ts.map +1 -0
- package/dist/db/cell_grant_queries.js +145 -0
- package/dist/db/cell_history_ddl.d.ts +38 -0
- package/dist/db/cell_history_ddl.d.ts.map +1 -0
- package/dist/db/cell_history_ddl.js +61 -0
- package/dist/db/cell_item_queries.d.ts +107 -0
- package/dist/db/cell_item_queries.d.ts.map +1 -0
- package/dist/db/cell_item_queries.js +119 -0
- package/dist/db/cell_queries.d.ts +327 -0
- package/dist/db/cell_queries.d.ts.map +1 -0
- package/dist/db/cell_queries.js +431 -0
- package/dist/db/fact_ddl.d.ts +38 -0
- package/dist/db/fact_ddl.d.ts.map +1 -0
- package/dist/db/fact_ddl.js +71 -0
- package/dist/db/fact_queries.d.ts +140 -0
- package/dist/db/fact_queries.d.ts.map +1 -0
- package/dist/db/fact_queries.js +161 -0
- package/dist/db/fact_store.d.ts +112 -0
- package/dist/db/fact_store.d.ts.map +1 -0
- package/dist/db/fact_store.js +225 -0
- package/dist/server/app_server.d.ts +1 -7
- package/dist/server/app_server.d.ts.map +1 -1
- package/dist/server/app_server.js +1 -5
- package/dist/server/env.d.ts +2 -0
- package/dist/server/env.d.ts.map +1 -1
- package/dist/server/env.js +6 -0
- package/dist/server/fact_write.d.ts +32 -0
- package/dist/server/fact_write.d.ts.map +1 -0
- package/dist/server/fact_write.js +56 -0
- package/dist/server/file_fact_fetcher.d.ts +42 -0
- package/dist/server/file_fact_fetcher.d.ts.map +1 -0
- package/dist/server/file_fact_fetcher.js +60 -0
- package/dist/server/file_fact_url.d.ts +53 -0
- package/dist/server/file_fact_url.d.ts.map +1 -0
- package/dist/server/file_fact_url.js +52 -0
- package/dist/server/serve_fact_route.d.ts +78 -0
- package/dist/server/serve_fact_route.d.ts.map +1 -0
- package/dist/server/serve_fact_route.js +205 -0
- package/dist/testing/CLAUDE.md +142 -6
- package/dist/testing/app_server.d.ts +46 -0
- package/dist/testing/app_server.d.ts.map +1 -1
- package/dist/testing/app_server.js +67 -8
- package/dist/testing/audit_completeness.d.ts.map +1 -1
- package/dist/testing/audit_completeness.js +67 -1
- package/dist/testing/cross_backend/account_lifecycle.d.ts +10 -0
- package/dist/testing/cross_backend/account_lifecycle.d.ts.map +1 -0
- package/dist/testing/cross_backend/account_lifecycle.js +144 -0
- package/dist/testing/cross_backend/actor_lookup.d.ts +10 -0
- package/dist/testing/cross_backend/actor_lookup.d.ts.map +1 -0
- package/dist/testing/cross_backend/actor_lookup.js +83 -0
- package/dist/testing/cross_backend/actor_search.d.ts +6 -0
- package/dist/testing/cross_backend/actor_search.d.ts.map +1 -0
- package/dist/testing/cross_backend/actor_search.js +92 -0
- package/dist/testing/cross_backend/app_settings.d.ts +6 -0
- package/dist/testing/cross_backend/app_settings.d.ts.map +1 -0
- package/dist/testing/cross_backend/app_settings.js +95 -0
- package/dist/testing/cross_backend/backend_config.d.ts +1 -1
- package/dist/testing/cross_backend/capabilities.d.ts +29 -7
- package/dist/testing/cross_backend/capabilities.d.ts.map +1 -1
- package/dist/testing/cross_backend/capabilities.js +3 -1
- package/dist/testing/cross_backend/cell_cross_helpers.d.ts +39 -0
- package/dist/testing/cross_backend/cell_cross_helpers.d.ts.map +1 -0
- package/dist/testing/cross_backend/cell_cross_helpers.js +45 -0
- package/dist/testing/cross_backend/cell_crud.d.ts +4 -0
- package/dist/testing/cross_backend/cell_crud.d.ts.map +1 -0
- package/dist/testing/cross_backend/cell_crud.js +168 -0
- package/dist/testing/cross_backend/cell_grant_role.d.ts +8 -0
- package/dist/testing/cross_backend/cell_grant_role.d.ts.map +1 -0
- package/dist/testing/cross_backend/cell_grant_role.js +102 -0
- package/dist/testing/cross_backend/cell_relations.d.ts +4 -0
- package/dist/testing/cross_backend/cell_relations.d.ts.map +1 -0
- package/dist/testing/cross_backend/cell_relations.js +229 -0
- package/dist/testing/cross_backend/conformance_case.d.ts +144 -0
- package/dist/testing/cross_backend/conformance_case.d.ts.map +1 -0
- package/dist/testing/cross_backend/conformance_case.js +132 -0
- package/dist/testing/cross_backend/conformance_table.d.ts +46 -0
- package/dist/testing/cross_backend/conformance_table.d.ts.map +1 -0
- package/dist/testing/cross_backend/conformance_table.js +199 -0
- package/dist/testing/cross_backend/default_backend_configs.d.ts.map +1 -1
- package/dist/testing/cross_backend/default_backend_configs.js +6 -2
- package/dist/testing/cross_backend/default_spine_surface.d.ts +17 -9
- package/dist/testing/cross_backend/default_spine_surface.d.ts.map +1 -1
- package/dist/testing/cross_backend/default_spine_surface.js +20 -12
- package/dist/testing/cross_backend/origin.d.ts +10 -0
- package/dist/testing/cross_backend/origin.d.ts.map +1 -0
- package/dist/testing/cross_backend/origin.js +73 -0
- package/dist/testing/cross_backend/setup.d.ts +22 -40
- package/dist/testing/cross_backend/setup.d.ts.map +1 -1
- package/dist/testing/cross_backend/setup.js +39 -5
- package/dist/testing/cross_backend/testing_reset_actions.d.ts +90 -2
- package/dist/testing/cross_backend/testing_reset_actions.d.ts.map +1 -1
- package/dist/testing/cross_backend/testing_reset_actions.js +91 -3
- package/dist/testing/cross_backend/xfail.d.ts +15 -0
- package/dist/testing/cross_backend/xfail.d.ts.map +1 -0
- package/dist/testing/cross_backend/xfail.js +37 -0
- package/dist/testing/entities.d.ts.map +1 -1
- package/dist/testing/entities.js +4 -0
- package/dist/testing/integration.d.ts +2 -3
- package/dist/testing/integration.d.ts.map +1 -1
- package/dist/testing/integration.js +20 -85
- package/dist/testing/rate_limiting.d.ts +1 -1
- package/dist/testing/rpc_helpers.d.ts +3 -3
- package/dist/testing/sse_round_trip.d.ts +1 -1
- package/dist/testing/stubs.d.ts.map +1 -1
- package/dist/testing/stubs.js +0 -1
- package/dist/testing/ws_round_trip.d.ts.map +1 -1
- package/dist/testing/ws_round_trip.js +4 -0
- package/dist/ui/AdminAccounts.svelte +84 -35
- package/dist/ui/AdminAccounts.svelte.d.ts.map +1 -1
- package/dist/ui/AdminSessions.svelte +21 -23
- package/dist/ui/AdminSessions.svelte.d.ts.map +1 -1
- package/dist/ui/CLAUDE.md +17 -26
- package/dist/ui/OpenSignupToggle.svelte +2 -5
- package/dist/ui/OpenSignupToggle.svelte.d.ts.map +1 -1
- package/dist/ui/account_sessions_state.svelte.d.ts +9 -10
- package/dist/ui/account_sessions_state.svelte.d.ts.map +1 -1
- package/dist/ui/account_sessions_state.svelte.js +7 -17
- package/dist/ui/admin_accounts_state.svelte.d.ts +41 -20
- package/dist/ui/admin_accounts_state.svelte.d.ts.map +1 -1
- package/dist/ui/admin_accounts_state.svelte.js +52 -22
- package/dist/ui/admin_invites_state.svelte.d.ts +8 -11
- package/dist/ui/admin_invites_state.svelte.d.ts.map +1 -1
- package/dist/ui/admin_invites_state.svelte.js +7 -16
- package/dist/ui/admin_rpc_adapters.d.ts +6 -2
- package/dist/ui/admin_rpc_adapters.d.ts.map +1 -1
- package/dist/ui/admin_rpc_adapters.js +5 -1
- package/dist/ui/admin_sessions_state.svelte.d.ts +6 -10
- package/dist/ui/admin_sessions_state.svelte.d.ts.map +1 -1
- package/dist/ui/admin_sessions_state.svelte.js +4 -14
- package/dist/ui/app_settings_state.svelte.d.ts +8 -12
- package/dist/ui/app_settings_state.svelte.d.ts.map +1 -1
- package/dist/ui/app_settings_state.svelte.js +6 -16
- package/dist/ui/audit_log_state.svelte.d.ts +9 -8
- package/dist/ui/audit_log_state.svelte.d.ts.map +1 -1
- package/dist/ui/audit_log_state.svelte.js +8 -20
- package/package.json +2 -2
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Single checkbox bound to `AppSettings.open_signup`. Consumes
|
|
4
4
|
* `app_settings_rpc_context`; the toggle calls `app_settings_update` RPC
|
|
5
|
-
* via `AppSettingsState.update_open_signup`.
|
|
6
|
-
* `has_rpc` is `false` (renders an "rpc adapter not wired" notice).
|
|
5
|
+
* via `AppSettingsState.update_open_signup`.
|
|
7
6
|
*
|
|
8
7
|
* @module
|
|
9
8
|
*/
|
|
@@ -17,9 +16,7 @@
|
|
|
17
16
|
</script>
|
|
18
17
|
|
|
19
18
|
<div class="open-signup-toggle">
|
|
20
|
-
{#if
|
|
21
|
-
<p class="text_50">rpc adapter not wired</p>
|
|
22
|
-
{:else if app_settings.list.loading}
|
|
19
|
+
{#if app_settings.list.loading}
|
|
23
20
|
<p class="text_50">loading settings...</p>
|
|
24
21
|
{:else if app_settings.settings}
|
|
25
22
|
<label class="row">
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenSignupToggle.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/OpenSignupToggle.svelte"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OpenSignupToggle.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/OpenSignupToggle.svelte"],"names":[],"mappings":"AA8CA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,gBAAgB;;kBAA+E,CAAC;AACpF,KAAK,gBAAgB,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAChE,eAAe,gBAAgB,CAAC"}
|
|
@@ -43,19 +43,20 @@ export interface AccountSessionsRpc {
|
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
45
|
* Svelte context carrying the reactive `AccountSessionsRpc` accessor. Mirrors
|
|
46
|
-
* the admin-side RPC contexts.
|
|
47
|
-
*
|
|
46
|
+
* the admin-side RPC contexts. `get()` throws when no provisioner ran above
|
|
47
|
+
* the component — the adapter is required.
|
|
48
48
|
*/
|
|
49
49
|
export declare const account_sessions_rpc_context: {
|
|
50
|
-
get: () => () => AccountSessionsRpc
|
|
51
|
-
|
|
50
|
+
get: (error_message?: string) => () => AccountSessionsRpc;
|
|
51
|
+
get_maybe: () => (() => AccountSessionsRpc) | undefined;
|
|
52
|
+
set: (value: () => AccountSessionsRpc) => () => AccountSessionsRpc;
|
|
52
53
|
};
|
|
53
54
|
export interface AccountSessionsStateOptions {
|
|
54
55
|
/**
|
|
55
|
-
* Reactive accessor for the RPC adapter
|
|
56
|
-
*
|
|
56
|
+
* Reactive accessor for the RPC adapter. Matches the `get_rpc` pattern on
|
|
57
|
+
* the admin state classes.
|
|
57
58
|
*/
|
|
58
|
-
get_rpc
|
|
59
|
+
get_rpc: () => AccountSessionsRpc;
|
|
59
60
|
}
|
|
60
61
|
export declare class AccountSessionsState {
|
|
61
62
|
#private;
|
|
@@ -64,9 +65,7 @@ export declare class AccountSessionsState {
|
|
|
64
65
|
readonly revoke_all: AsyncSlot<void, string>;
|
|
65
66
|
sessions: Array<AuthSessionJson>;
|
|
66
67
|
readonly active_count: number;
|
|
67
|
-
constructor(options
|
|
68
|
-
/** True when an RPC adapter is wired. `fetch` / `submit_revoke` / `submit_revoke_all` no-op without it. */
|
|
69
|
-
get has_rpc(): boolean;
|
|
68
|
+
constructor(options: AccountSessionsStateOptions);
|
|
70
69
|
fetch(): Promise<void>;
|
|
71
70
|
submit_revoke(id: string): Promise<void>;
|
|
72
71
|
submit_revoke_all(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account_sessions_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/account_sessions_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,OAAO,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;KAAC,CAAC,CAAC;IACxD,MAAM,EAAE,CAAC,MAAM,EAAE;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,KAAK,OAAO,CAAC;QAAC,EAAE,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAC,CAAC,CAAC;IAChF,UAAU,EAAE,MAAM,OAAO,CAAC;QAAC,EAAE,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;CACrD;AAED;;;;GAIG;AACH,eAAO,MAAM,4BAA4B;
|
|
1
|
+
{"version":3,"file":"account_sessions_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/account_sessions_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,OAAO,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC,eAAe,CAAC,CAAA;KAAC,CAAC,CAAC;IACxD,MAAM,EAAE,CAAC,MAAM,EAAE;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,KAAK,OAAO,CAAC;QAAC,EAAE,EAAE,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAC,CAAC,CAAC;IAChF,UAAU,EAAE,MAAM,OAAO,CAAC;QAAC,EAAE,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;CACrD;AAED;;;;GAIG;AACH,eAAO,MAAM,4BAA4B;2CAAwB,kBAAkB;4BAAlB,kBAAkB;uBAAlB,kBAAkB,WAAlB,kBAAkB;CAAG,CAAC;AAEvF,MAAM,WAAW,2BAA2B;IAC3C;;;OAGG;IACH,OAAO,EAAE,MAAM,kBAAkB,CAAC;CAClC;AAED,qBAAa,oBAAoB;;IAGhC,QAAQ,CAAC,IAAI,0BAAyB;IACtC,QAAQ,CAAC,MAAM,uCAAsC;IACrD,QAAQ,CAAC,UAAU,0BAAyB;IAE5C,QAAQ,EAAE,KAAK,CAAC,eAAe,CAAC,CAAkB;IAElD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAkC;gBAEnD,OAAO,EAAE,2BAA2B;IAI1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxC,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;CAUxC"}
|
|
@@ -16,10 +16,10 @@ import { AsyncSlot } from './async_slot.svelte.js';
|
|
|
16
16
|
import { KeyedAsyncSlot } from './keyed_async_slot.svelte.js';
|
|
17
17
|
/**
|
|
18
18
|
* Svelte context carrying the reactive `AccountSessionsRpc` accessor. Mirrors
|
|
19
|
-
* the admin-side RPC contexts.
|
|
20
|
-
*
|
|
19
|
+
* the admin-side RPC contexts. `get()` throws when no provisioner ran above
|
|
20
|
+
* the component — the adapter is required.
|
|
21
21
|
*/
|
|
22
|
-
export const account_sessions_rpc_context = create_context(
|
|
22
|
+
export const account_sessions_rpc_context = create_context();
|
|
23
23
|
export class AccountSessionsState {
|
|
24
24
|
#get_rpc;
|
|
25
25
|
list = new AsyncSlot();
|
|
@@ -28,34 +28,24 @@ export class AccountSessionsState {
|
|
|
28
28
|
sessions = $state.raw([]);
|
|
29
29
|
active_count = $derived(this.sessions.length);
|
|
30
30
|
constructor(options) {
|
|
31
|
-
this.#get_rpc = options
|
|
32
|
-
}
|
|
33
|
-
/** True when an RPC adapter is wired. `fetch` / `submit_revoke` / `submit_revoke_all` no-op without it. */
|
|
34
|
-
get has_rpc() {
|
|
35
|
-
return this.#get_rpc() !== null;
|
|
36
|
-
}
|
|
37
|
-
#require_rpc() {
|
|
38
|
-
const rpc = this.#get_rpc();
|
|
39
|
-
if (!rpc)
|
|
40
|
-
throw new Error('rpc adapter not wired');
|
|
41
|
-
return rpc;
|
|
31
|
+
this.#get_rpc = options.get_rpc;
|
|
42
32
|
}
|
|
43
33
|
async fetch() {
|
|
44
34
|
await this.list.run(async () => {
|
|
45
|
-
const { sessions } = await this.#
|
|
35
|
+
const { sessions } = await this.#get_rpc().list();
|
|
46
36
|
this.sessions = sessions;
|
|
47
37
|
});
|
|
48
38
|
}
|
|
49
39
|
async submit_revoke(id) {
|
|
50
40
|
await this.revoke.run(id, async () => {
|
|
51
|
-
await this.#
|
|
41
|
+
await this.#get_rpc().revoke({ session_id: id });
|
|
52
42
|
});
|
|
53
43
|
if (this.revoke.succeeded(id))
|
|
54
44
|
await this.fetch();
|
|
55
45
|
}
|
|
56
46
|
async submit_revoke_all() {
|
|
57
47
|
await this.revoke_all.run(async () => {
|
|
58
|
-
await this.#
|
|
48
|
+
await this.#get_rpc().revoke_all();
|
|
59
49
|
});
|
|
60
50
|
if (this.revoke_all.succeeded) {
|
|
61
51
|
// Current session is now revoked — next API call will 401.
|
|
@@ -18,7 +18,7 @@ import { KeyedAsyncSlot } from './keyed_async_slot.svelte.js';
|
|
|
18
18
|
import type { AdminAccountEntryJson } from '../auth/account_schema.js';
|
|
19
19
|
import type { RoleName } from '../auth/role_schema.js';
|
|
20
20
|
import type { RoleGrantOfferJson } from '../auth/role_grant_offer_schema.js';
|
|
21
|
-
import type { AdminAccountListOutput, AdminSessionListOutput, AdminSessionRevokeAllInput, AdminSessionRevokeAllOutput, AdminTokenRevokeAllInput, AdminTokenRevokeAllOutput } from '../auth/admin_action_specs.js';
|
|
21
|
+
import type { AdminAccountListOutput, AccountDeleteOutput, AccountUndeleteOutput, AdminSessionListOutput, AdminSessionRevokeAllInput, AdminSessionRevokeAllOutput, AdminTokenRevokeAllInput, AdminTokenRevokeAllOutput } from '../auth/admin_action_specs.js';
|
|
22
22
|
import type { RoleGrantOfferCreateInput, RoleGrantOfferCreateOutput, RoleGrantOfferOkOutput, RoleGrantRevokeInput, RoleGrantRevokeOutput } from '../auth/role_grant_offer_action_specs.js';
|
|
23
23
|
/**
|
|
24
24
|
* Narrow RPC surface consumed by `AdminAccountsState`. Consumers adapt their
|
|
@@ -30,9 +30,7 @@ import type { RoleGrantOfferCreateInput, RoleGrantOfferCreateOutput, RoleGrantOf
|
|
|
30
30
|
* Every operation flows through RPC: the listing reuses `admin_account_list`,
|
|
31
31
|
* grant reuses `role_grant_offer_create`, revoke and retract have dedicated
|
|
32
32
|
* actions, and the session / token revoke-all mutations reuse
|
|
33
|
-
* `admin_session_revoke_all` and `admin_token_revoke_all`.
|
|
34
|
-
* adapter the state class cannot fetch, grant, revoke, retract, or
|
|
35
|
-
* revoke-all sessions/tokens.
|
|
33
|
+
* `admin_session_revoke_all` and `admin_token_revoke_all`.
|
|
36
34
|
*
|
|
37
35
|
* Method signatures track the underlying action specs — `Uuid`-branded ids
|
|
38
36
|
* propagate from the wire through the state class to the components. The
|
|
@@ -40,7 +38,9 @@ import type { RoleGrantOfferCreateInput, RoleGrantOfferCreateOutput, RoleGrantOf
|
|
|
40
38
|
* to bridge to the typed throwing Proxy.
|
|
41
39
|
*/
|
|
42
40
|
export interface AdminAccountsRpc {
|
|
43
|
-
list_accounts: () => Promise<AdminAccountListOutput>;
|
|
41
|
+
list_accounts: (include_deleted?: boolean) => Promise<AdminAccountListOutput>;
|
|
42
|
+
delete_account: (account_id: Uuid) => Promise<AccountDeleteOutput>;
|
|
43
|
+
undelete_account: (account_id: Uuid) => Promise<AccountUndeleteOutput>;
|
|
44
44
|
list_sessions: () => Promise<AdminSessionListOutput>;
|
|
45
45
|
create_role_grant: (params: RoleGrantOfferCreateInput) => Promise<RoleGrantOfferCreateOutput>;
|
|
46
46
|
revoke_role_grant: (params: RoleGrantRevokeInput) => Promise<RoleGrantRevokeOutput>;
|
|
@@ -54,22 +54,22 @@ export interface AdminAccountsRpc {
|
|
|
54
54
|
* consumers read with `const get_rpc = admin_accounts_rpc_context.get();`
|
|
55
55
|
* and either pass the accessor straight to `AdminAccountsState`/
|
|
56
56
|
* `AdminSessionsState` or wrap it with `const rpc = $derived(get_rpc());`
|
|
57
|
-
* for direct RPC calls.
|
|
58
|
-
*
|
|
59
|
-
* not wired" path.
|
|
57
|
+
* for direct RPC calls. `get()` throws when no provisioner ran above the
|
|
58
|
+
* component — the adapter is required, not optional.
|
|
60
59
|
*/
|
|
61
60
|
export declare const admin_accounts_rpc_context: {
|
|
62
|
-
get: () => () => AdminAccountsRpc
|
|
63
|
-
|
|
61
|
+
get: (error_message?: string) => () => AdminAccountsRpc;
|
|
62
|
+
get_maybe: () => (() => AdminAccountsRpc) | undefined;
|
|
63
|
+
set: (value: () => AdminAccountsRpc) => () => AdminAccountsRpc;
|
|
64
64
|
};
|
|
65
65
|
export interface AdminAccountsStateOptions {
|
|
66
66
|
/**
|
|
67
|
-
* Reactive accessor for the RPC adapter
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
67
|
+
* Reactive accessor for the RPC adapter. Matches
|
|
68
|
+
* `RoleGrantOffersStateOptions.account_id` / `actor_id` pattern — lets the
|
|
69
|
+
* component pass a `$props()`-sourced rpc without tripping Svelte's
|
|
70
|
+
* `state_referenced_locally` warning.
|
|
71
71
|
*/
|
|
72
|
-
get_rpc
|
|
72
|
+
get_rpc: () => AdminAccountsRpc;
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
75
|
* Compose the `grant` keyed-slot key for an offer. Account-grain offers
|
|
@@ -101,16 +101,37 @@ export declare class AdminAccountsState {
|
|
|
101
101
|
}, string>;
|
|
102
102
|
readonly revoke: KeyedAsyncSlot<string & import("zod").$brand<"Uuid">, void, string>;
|
|
103
103
|
readonly retract: KeyedAsyncSlot<string & import("zod").$brand<"Uuid">, void, string>;
|
|
104
|
+
readonly soft_delete: KeyedAsyncSlot<string & import("zod").$brand<"Uuid">, void, string>;
|
|
105
|
+
readonly undelete: KeyedAsyncSlot<string & import("zod").$brand<"Uuid">, void, string>;
|
|
104
106
|
accounts: Array<AdminAccountEntryJson>;
|
|
105
107
|
grantable_roles: Array<RoleName>;
|
|
106
|
-
readonly account_count: number;
|
|
107
|
-
constructor(options?: AdminAccountsStateOptions);
|
|
108
108
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
109
|
+
* When `true`, `fetch()` includes soft-deleted (tombstoned) accounts so
|
|
110
|
+
* the admin can reactivate them. Toggled via `set_show_deleted`.
|
|
111
111
|
*/
|
|
112
|
-
|
|
112
|
+
show_deleted: boolean;
|
|
113
|
+
readonly account_count: number;
|
|
114
|
+
constructor(options: AdminAccountsStateOptions);
|
|
113
115
|
fetch(): Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* Toggle whether soft-deleted accounts appear in the listing, then
|
|
118
|
+
* re-fetch. Tombstoned rows are surfaced so an admin can reactivate them
|
|
119
|
+
* via `submit_undelete`.
|
|
120
|
+
*/
|
|
121
|
+
set_show_deleted(value: boolean): Promise<void>;
|
|
122
|
+
/**
|
|
123
|
+
* Soft-delete an account (reversible tombstone) via `account_delete`.
|
|
124
|
+
* Keyed by `account_id` so per-row spinners/errors stay independent.
|
|
125
|
+
* Refreshes the listing on success so the row drops out (active view) or
|
|
126
|
+
* flips to its tombstoned state (`show_deleted` view).
|
|
127
|
+
*/
|
|
128
|
+
submit_delete(account_id: Uuid): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Reactivate a soft-deleted account via `account_undelete` (admin-only).
|
|
131
|
+
* Keyed by `account_id`; refreshes the listing on success so the row
|
|
132
|
+
* returns to active state.
|
|
133
|
+
*/
|
|
134
|
+
submit_undelete(account_id: Uuid): Promise<void>;
|
|
114
135
|
/**
|
|
115
136
|
* Offer the role to the recipient via the `role_grant_offer_create` RPC.
|
|
116
137
|
* Server returns the pending offer; the recipient must accept before
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin_accounts_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_accounts_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EACX,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACX,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,MAAM,0CAA0C,CAAC;AAElD
|
|
1
|
+
{"version":3,"file":"admin_accounts_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_accounts_state.svelte.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,11 +21,10 @@ import { KeyedAsyncSlot } from './keyed_async_slot.svelte.js';
|
|
|
21
21
|
* consumers read with `const get_rpc = admin_accounts_rpc_context.get();`
|
|
22
22
|
* and either pass the accessor straight to `AdminAccountsState`/
|
|
23
23
|
* `AdminSessionsState` or wrap it with `const rpc = $derived(get_rpc());`
|
|
24
|
-
* for direct RPC calls.
|
|
25
|
-
*
|
|
26
|
-
* not wired" path.
|
|
24
|
+
* for direct RPC calls. `get()` throws when no provisioner ran above the
|
|
25
|
+
* component — the adapter is required, not optional.
|
|
27
26
|
*/
|
|
28
|
-
export const admin_accounts_rpc_context = create_context(
|
|
27
|
+
export const admin_accounts_rpc_context = create_context();
|
|
29
28
|
/**
|
|
30
29
|
* Compose the `grant` keyed-slot key for an offer. Account-grain offers
|
|
31
30
|
* key on `${account_id}:${role}`; actor-targeted offers add the actor
|
|
@@ -39,32 +38,63 @@ export class AdminAccountsState {
|
|
|
39
38
|
grant = new KeyedAsyncSlot();
|
|
40
39
|
revoke = new KeyedAsyncSlot();
|
|
41
40
|
retract = new KeyedAsyncSlot();
|
|
41
|
+
// Per-row account lifecycle slots, keyed by `account_id`.
|
|
42
|
+
soft_delete = new KeyedAsyncSlot();
|
|
43
|
+
undelete = new KeyedAsyncSlot();
|
|
42
44
|
accounts = $state.raw([]);
|
|
43
45
|
grantable_roles = $state.raw([]);
|
|
44
|
-
account_count = $derived(this.accounts.length);
|
|
45
|
-
constructor(options) {
|
|
46
|
-
this.#get_rpc = options?.get_rpc ?? (() => null);
|
|
47
|
-
}
|
|
48
46
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
47
|
+
* When `true`, `fetch()` includes soft-deleted (tombstoned) accounts so
|
|
48
|
+
* the admin can reactivate them. Toggled via `set_show_deleted`.
|
|
51
49
|
*/
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const rpc = this.#get_rpc();
|
|
57
|
-
if (!rpc)
|
|
58
|
-
throw new Error('rpc adapter not wired');
|
|
59
|
-
return rpc;
|
|
50
|
+
show_deleted = $state(false);
|
|
51
|
+
account_count = $derived(this.accounts.length);
|
|
52
|
+
constructor(options) {
|
|
53
|
+
this.#get_rpc = options.get_rpc;
|
|
60
54
|
}
|
|
61
55
|
async fetch() {
|
|
62
56
|
await this.list.run(async () => {
|
|
63
|
-
const { accounts, grantable_roles } = await this.#
|
|
57
|
+
const { accounts, grantable_roles } = await this.#get_rpc().list_accounts(this.show_deleted);
|
|
64
58
|
this.accounts = accounts;
|
|
65
59
|
this.grantable_roles = grantable_roles;
|
|
66
60
|
});
|
|
67
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Toggle whether soft-deleted accounts appear in the listing, then
|
|
64
|
+
* re-fetch. Tombstoned rows are surfaced so an admin can reactivate them
|
|
65
|
+
* via `submit_undelete`.
|
|
66
|
+
*/
|
|
67
|
+
async set_show_deleted(value) {
|
|
68
|
+
if (this.show_deleted === value)
|
|
69
|
+
return;
|
|
70
|
+
this.show_deleted = value;
|
|
71
|
+
await this.fetch();
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Soft-delete an account (reversible tombstone) via `account_delete`.
|
|
75
|
+
* Keyed by `account_id` so per-row spinners/errors stay independent.
|
|
76
|
+
* Refreshes the listing on success so the row drops out (active view) or
|
|
77
|
+
* flips to its tombstoned state (`show_deleted` view).
|
|
78
|
+
*/
|
|
79
|
+
async submit_delete(account_id) {
|
|
80
|
+
await this.soft_delete.run(account_id, async () => {
|
|
81
|
+
await this.#get_rpc().delete_account(account_id);
|
|
82
|
+
});
|
|
83
|
+
if (this.soft_delete.succeeded(account_id))
|
|
84
|
+
await this.fetch();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Reactivate a soft-deleted account via `account_undelete` (admin-only).
|
|
88
|
+
* Keyed by `account_id`; refreshes the listing on success so the row
|
|
89
|
+
* returns to active state.
|
|
90
|
+
*/
|
|
91
|
+
async submit_undelete(account_id) {
|
|
92
|
+
await this.undelete.run(account_id, async () => {
|
|
93
|
+
await this.#get_rpc().undelete_account(account_id);
|
|
94
|
+
});
|
|
95
|
+
if (this.undelete.succeeded(account_id))
|
|
96
|
+
await this.fetch();
|
|
97
|
+
}
|
|
68
98
|
/**
|
|
69
99
|
* Offer the role to the recipient via the `role_grant_offer_create` RPC.
|
|
70
100
|
* Server returns the pending offer; the recipient must accept before
|
|
@@ -85,7 +115,7 @@ export class AdminAccountsState {
|
|
|
85
115
|
async submit_grant(account_id, role, to_actor_id) {
|
|
86
116
|
const key = grant_key(account_id, role, to_actor_id);
|
|
87
117
|
const offer = await this.grant.run(key, async () => {
|
|
88
|
-
const result = await this.#
|
|
118
|
+
const result = await this.#get_rpc().create_role_grant({
|
|
89
119
|
to_account_id: account_id,
|
|
90
120
|
role,
|
|
91
121
|
...(to_actor_id ? { to_actor_id } : {}),
|
|
@@ -107,7 +137,7 @@ export class AdminAccountsState {
|
|
|
107
137
|
*/
|
|
108
138
|
async submit_revoke(actor_id, role_grant_id, reason) {
|
|
109
139
|
await this.revoke.run(role_grant_id, async () => {
|
|
110
|
-
await this.#
|
|
140
|
+
await this.#get_rpc().revoke_role_grant({
|
|
111
141
|
actor_id,
|
|
112
142
|
role_grant_id,
|
|
113
143
|
reason: reason ?? null,
|
|
@@ -126,7 +156,7 @@ export class AdminAccountsState {
|
|
|
126
156
|
*/
|
|
127
157
|
async submit_retract(offer_id) {
|
|
128
158
|
await this.retract.run(offer_id, async () => {
|
|
129
|
-
await this.#
|
|
159
|
+
await this.#get_rpc().retract_offer(offer_id);
|
|
130
160
|
});
|
|
131
161
|
if (this.retract.succeeded(offer_id))
|
|
132
162
|
await this.fetch();
|
|
@@ -32,18 +32,17 @@ export interface AdminInvitesRpc {
|
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* Svelte context carrying the reactive `AdminInvitesRpc` accessor. Mirrors
|
|
35
|
-
* `admin_accounts_rpc_context`.
|
|
35
|
+
* `admin_accounts_rpc_context`. `get()` throws when no provisioner ran above
|
|
36
|
+
* the component — the adapter is required.
|
|
36
37
|
*/
|
|
37
38
|
export declare const admin_invites_rpc_context: {
|
|
38
|
-
get: () => () => AdminInvitesRpc
|
|
39
|
-
|
|
39
|
+
get: (error_message?: string) => () => AdminInvitesRpc;
|
|
40
|
+
get_maybe: () => (() => AdminInvitesRpc) | undefined;
|
|
41
|
+
set: (value: () => AdminInvitesRpc) => () => AdminInvitesRpc;
|
|
40
42
|
};
|
|
41
43
|
export interface AdminInvitesStateOptions {
|
|
42
|
-
/**
|
|
43
|
-
|
|
44
|
-
* (the state reports a descriptive error when mutations/fetches fire).
|
|
45
|
-
*/
|
|
46
|
-
get_rpc?: () => AdminInvitesRpc | null;
|
|
44
|
+
/** Reactive accessor for the RPC adapter. */
|
|
45
|
+
get_rpc: () => AdminInvitesRpc;
|
|
47
46
|
}
|
|
48
47
|
export declare class AdminInvitesState {
|
|
49
48
|
#private;
|
|
@@ -53,9 +52,7 @@ export declare class AdminInvitesState {
|
|
|
53
52
|
invites: Array<InviteWithUsernamesJson>;
|
|
54
53
|
readonly invite_count: number;
|
|
55
54
|
readonly unclaimed_count: number;
|
|
56
|
-
constructor(options
|
|
57
|
-
/** True when an RPC adapter is wired. All ops require it. */
|
|
58
|
-
get has_rpc(): boolean;
|
|
55
|
+
constructor(options: AdminInvitesStateOptions);
|
|
59
56
|
fetch(): Promise<void>;
|
|
60
57
|
submit_create(email?: string, username?: string): Promise<boolean>;
|
|
61
58
|
submit_delete(id: Uuid): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin_invites_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_invites_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,MAAM,+BAA+B,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnE,MAAM,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACnE;AAED
|
|
1
|
+
{"version":3,"file":"admin_invites_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_invites_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,OAAO,KAAK,EAAC,uBAAuB,EAAC,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,MAAM,+BAA+B,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnE,MAAM,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACnE;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;2CAAwB,eAAe;4BAAf,eAAe;uBAAf,eAAe,WAAf,eAAe;CAAG,CAAC;AAEjF,MAAM,WAAW,wBAAwB;IACxC,6CAA6C;IAC7C,OAAO,EAAE,MAAM,eAAe,CAAC;CAC/B;AAED,qBAAa,iBAAiB;;IAG7B,QAAQ,CAAC,IAAI,0BAAyB;IACtC,QAAQ,CAAC,MAAM,0BAAyB;IACxC,QAAQ,CAAC,MAAM,sEAAoC;IAEnD,OAAO,EAAE,KAAK,CAAC,uBAAuB,CAAC,CAAkB;IAEzD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAiC;IAC9D,QAAQ,CAAC,eAAe,EAAE,MAAM,CAA8D;gBAElF,OAAO,EAAE,wBAAwB;IAIvC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASlE,aAAa,CAAC,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAM5C"}
|
|
@@ -18,9 +18,10 @@ import { AsyncSlot } from './async_slot.svelte.js';
|
|
|
18
18
|
import { KeyedAsyncSlot } from './keyed_async_slot.svelte.js';
|
|
19
19
|
/**
|
|
20
20
|
* Svelte context carrying the reactive `AdminInvitesRpc` accessor. Mirrors
|
|
21
|
-
* `admin_accounts_rpc_context`.
|
|
21
|
+
* `admin_accounts_rpc_context`. `get()` throws when no provisioner ran above
|
|
22
|
+
* the component — the adapter is required.
|
|
22
23
|
*/
|
|
23
|
-
export const admin_invites_rpc_context = create_context(
|
|
24
|
+
export const admin_invites_rpc_context = create_context();
|
|
24
25
|
export class AdminInvitesState {
|
|
25
26
|
#get_rpc;
|
|
26
27
|
list = new AsyncSlot();
|
|
@@ -30,27 +31,17 @@ export class AdminInvitesState {
|
|
|
30
31
|
invite_count = $derived(this.invites.length);
|
|
31
32
|
unclaimed_count = $derived(this.invites.filter((i) => !i.claimed_at).length);
|
|
32
33
|
constructor(options) {
|
|
33
|
-
this.#get_rpc = options
|
|
34
|
-
}
|
|
35
|
-
/** True when an RPC adapter is wired. All ops require it. */
|
|
36
|
-
get has_rpc() {
|
|
37
|
-
return this.#get_rpc() !== null;
|
|
38
|
-
}
|
|
39
|
-
#require_rpc() {
|
|
40
|
-
const rpc = this.#get_rpc();
|
|
41
|
-
if (!rpc)
|
|
42
|
-
throw new Error('rpc adapter not wired');
|
|
43
|
-
return rpc;
|
|
34
|
+
this.#get_rpc = options.get_rpc;
|
|
44
35
|
}
|
|
45
36
|
async fetch() {
|
|
46
37
|
await this.list.run(async () => {
|
|
47
|
-
const { invites } = await this.#
|
|
38
|
+
const { invites } = await this.#get_rpc().list();
|
|
48
39
|
this.invites = invites;
|
|
49
40
|
});
|
|
50
41
|
}
|
|
51
42
|
async submit_create(email, username) {
|
|
52
43
|
await this.create.run(async () => {
|
|
53
|
-
await this.#
|
|
44
|
+
await this.#get_rpc().create({ email: email ?? null, username: username ?? null });
|
|
54
45
|
});
|
|
55
46
|
if (!this.create.succeeded)
|
|
56
47
|
return false;
|
|
@@ -59,7 +50,7 @@ export class AdminInvitesState {
|
|
|
59
50
|
}
|
|
60
51
|
async submit_delete(id) {
|
|
61
52
|
await this.remove.run(id, async () => {
|
|
62
|
-
await this.#
|
|
53
|
+
await this.#get_rpc().delete({ invite_id: id });
|
|
63
54
|
});
|
|
64
55
|
if (this.remove.succeeded(id))
|
|
65
56
|
await this.fetch();
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
*
|
|
33
33
|
* @module
|
|
34
34
|
*/
|
|
35
|
-
import type { AdminAccountListOutput, AdminSessionListOutput, AdminSessionRevokeAllInput, AdminSessionRevokeAllOutput, AdminTokenRevokeAllInput, AdminTokenRevokeAllOutput, AuditLogListInput, AuditLogListOutput, AuditLogRoleGrantHistoryInput, AuditLogRoleGrantHistoryOutput, InviteCreateInput, InviteCreateOutput, InviteDeleteInput, InviteDeleteOutput, InviteListOutput, AppSettingsGetOutput, AppSettingsUpdateInput, AppSettingsUpdateOutput } from '../auth/admin_action_specs.js';
|
|
35
|
+
import type { AdminAccountListInput, AdminAccountListOutput, AccountDeleteInput, AccountDeleteOutput, AccountUndeleteInput, AccountUndeleteOutput, AdminSessionListOutput, AdminSessionRevokeAllInput, AdminSessionRevokeAllOutput, AdminTokenRevokeAllInput, AdminTokenRevokeAllOutput, AuditLogListInput, AuditLogListOutput, AuditLogRoleGrantHistoryInput, AuditLogRoleGrantHistoryOutput, InviteCreateInput, InviteCreateOutput, InviteDeleteInput, InviteDeleteOutput, InviteListOutput, AppSettingsGetOutput, AppSettingsUpdateInput, AppSettingsUpdateOutput } from '../auth/admin_action_specs.js';
|
|
36
36
|
import type { RoleGrantOfferCreateInput, RoleGrantOfferCreateOutput, RoleGrantOfferRetractInput, RoleGrantOfferOkOutput, RoleGrantRevokeInput, RoleGrantRevokeOutput } from '../auth/role_grant_offer_action_specs.js';
|
|
37
37
|
import { type AdminAccountsRpc } from './admin_accounts_state.svelte.js';
|
|
38
38
|
import { type AdminInvitesRpc } from './admin_invites_state.svelte.js';
|
|
@@ -51,7 +51,9 @@ import { type FormatScope } from './format_scope.js';
|
|
|
51
51
|
* assignable as long as these methods are present at these signatures.
|
|
52
52
|
*/
|
|
53
53
|
export interface AdminRpcApi {
|
|
54
|
-
admin_account_list: () => Promise<AdminAccountListOutput>;
|
|
54
|
+
admin_account_list: (input?: AdminAccountListInput) => Promise<AdminAccountListOutput>;
|
|
55
|
+
account_delete: (input: AccountDeleteInput) => Promise<AccountDeleteOutput>;
|
|
56
|
+
account_undelete: (input: AccountUndeleteInput) => Promise<AccountUndeleteOutput>;
|
|
55
57
|
admin_session_list: () => Promise<AdminSessionListOutput>;
|
|
56
58
|
admin_session_revoke_all: (input: AdminSessionRevokeAllInput) => Promise<AdminSessionRevokeAllOutput>;
|
|
57
59
|
admin_token_revoke_all: (input: AdminTokenRevokeAllInput) => Promise<AdminTokenRevokeAllOutput>;
|
|
@@ -81,6 +83,8 @@ export interface AdminRpcAdapters {
|
|
|
81
83
|
* | Narrow RPC method | Action spec method |
|
|
82
84
|
* | ----------------------------------- | ---------------------------- |
|
|
83
85
|
* | `admin_accounts.list_accounts` | `admin_account_list` |
|
|
86
|
+
* | `admin_accounts.delete_account` | `account_delete` (soft) |
|
|
87
|
+
* | `admin_accounts.undelete_account` | `account_undelete` |
|
|
84
88
|
* | `admin_accounts.list_sessions` | `admin_session_list` |
|
|
85
89
|
* | `admin_accounts.create_role_grant` | `role_grant_offer_create` |
|
|
86
90
|
* | `admin_accounts.revoke_role_grant` | `role_grant_revoke` |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin_rpc_adapters.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_rpc_adapters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EACX,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,6BAA6B,EAC7B,8BAA8B,EAC9B,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACX,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAA6B,KAAK,gBAAgB,EAAC,MAAM,kCAAkC,CAAC;AACnG,OAAO,EAA4B,KAAK,eAAe,EAAC,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAwB,KAAK,WAAW,EAAC,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAA2B,KAAK,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAC7F,OAAO,EAAuB,KAAK,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,MAAM,WAAW,WAAW;IAC3B,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"admin_rpc_adapters.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_rpc_adapters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EACX,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,6BAA6B,EAC7B,8BAA8B,EAC9B,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACX,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAA6B,KAAK,gBAAgB,EAAC,MAAM,kCAAkC,CAAC;AACnG,OAAO,EAA4B,KAAK,eAAe,EAAC,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAwB,KAAK,WAAW,EAAC,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAA2B,KAAK,cAAc,EAAC,MAAM,gCAAgC,CAAC;AAC7F,OAAO,EAAuB,KAAK,WAAW,EAAC,MAAM,mBAAmB,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,MAAM,WAAW,WAAW;IAC3B,kBAAkB,EAAE,CAAC,KAAK,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACvF,cAAc,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5E,gBAAgB,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAClF,kBAAkB,EAAE,MAAM,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC1D,wBAAwB,EAAE,CACzB,KAAK,EAAE,0BAA0B,KAC7B,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC1C,sBAAsB,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAChG,cAAc,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1E,4BAA4B,EAAE,CAC7B,KAAK,EAAE,6BAA6B,KAChC,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,WAAW,EAAE,MAAM,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7C,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzE,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzE,gBAAgB,EAAE,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACtD,mBAAmB,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IACzF,uBAAuB,EAAE,CACxB,KAAK,EAAE,yBAAyB,KAC5B,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACzC,wBAAwB,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjG,iBAAiB,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACnF;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAChC,cAAc,EAAE,gBAAgB,CAAC;IACjC,aAAa,EAAE,eAAe,CAAC;IAC/B,SAAS,EAAE,WAAW,CAAC;IACvB,YAAY,EAAE,cAAc,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,yBAAyB,GAAI,KAAK,WAAW,KAAG,gBAyB3D,CAAC;AAEH,wEAAwE;AACxE,MAAM,WAAW,8BAA8B;IAC9C;;;OAGG;IACH,YAAY,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,0BAA0B,GACtC,UAAU,gBAAgB,EAC1B,UAAU,8BAA8B,KACtC,IASF,CAAC"}
|
|
@@ -45,6 +45,8 @@ import { format_scope_context } from './format_scope.js';
|
|
|
45
45
|
* | Narrow RPC method | Action spec method |
|
|
46
46
|
* | ----------------------------------- | ---------------------------- |
|
|
47
47
|
* | `admin_accounts.list_accounts` | `admin_account_list` |
|
|
48
|
+
* | `admin_accounts.delete_account` | `account_delete` (soft) |
|
|
49
|
+
* | `admin_accounts.undelete_account` | `account_undelete` |
|
|
48
50
|
* | `admin_accounts.list_sessions` | `admin_session_list` |
|
|
49
51
|
* | `admin_accounts.create_role_grant` | `role_grant_offer_create` |
|
|
50
52
|
* | `admin_accounts.revoke_role_grant` | `role_grant_revoke` |
|
|
@@ -65,7 +67,9 @@ import { format_scope_context } from './format_scope.js';
|
|
|
65
67
|
*/
|
|
66
68
|
export const create_admin_rpc_adapters = (api) => ({
|
|
67
69
|
admin_accounts: {
|
|
68
|
-
list_accounts: () => api.admin_account_list(),
|
|
70
|
+
list_accounts: (include_deleted) => api.admin_account_list({ include_deleted }),
|
|
71
|
+
delete_account: (account_id) => api.account_delete({ account_id }),
|
|
72
|
+
undelete_account: (account_id) => api.account_undelete({ account_id }),
|
|
69
73
|
list_sessions: () => api.admin_session_list(),
|
|
70
74
|
create_role_grant: (params) => api.role_grant_offer_create(params),
|
|
71
75
|
revoke_role_grant: (params) => api.role_grant_revoke(params),
|
|
@@ -23,17 +23,15 @@ import type { AdminSessionJson } from '../auth/audit_log_schema.js';
|
|
|
23
23
|
* Options for `AdminSessionsState`.
|
|
24
24
|
*
|
|
25
25
|
* The RPC adapter drives every operation (listing + the two revoke-all
|
|
26
|
-
* mutations).
|
|
27
|
-
* `'rpc adapter not wired'` on `error`.
|
|
26
|
+
* mutations).
|
|
28
27
|
*/
|
|
29
28
|
export interface AdminSessionsStateOptions {
|
|
30
29
|
/**
|
|
31
|
-
* Reactive accessor for the RPC adapter
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* `state_referenced_locally` warning.
|
|
30
|
+
* Reactive accessor for the RPC adapter. Mirrors
|
|
31
|
+
* `AdminAccountsStateOptions.get_rpc` so a single adapter instance backs
|
|
32
|
+
* both states without tripping Svelte's `state_referenced_locally` warning.
|
|
35
33
|
*/
|
|
36
|
-
get_rpc
|
|
34
|
+
get_rpc: () => AdminAccountsRpc;
|
|
37
35
|
}
|
|
38
36
|
export declare class AdminSessionsState {
|
|
39
37
|
#private;
|
|
@@ -42,9 +40,7 @@ export declare class AdminSessionsState {
|
|
|
42
40
|
readonly revoke_tokens: KeyedAsyncSlot<string & import("zod").$brand<"Uuid">, void, string>;
|
|
43
41
|
sessions: Array<AdminSessionJson>;
|
|
44
42
|
readonly active_count: number;
|
|
45
|
-
constructor(options
|
|
46
|
-
/** True when an RPC adapter is wired. `fetch` and the revoke controls no-op without it. */
|
|
47
|
-
get has_rpc(): boolean;
|
|
43
|
+
constructor(options: AdminSessionsStateOptions);
|
|
48
44
|
fetch(): Promise<void>;
|
|
49
45
|
submit_revoke_sessions(account_id: Uuid): Promise<void>;
|
|
50
46
|
submit_revoke_tokens(account_id: Uuid): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin_sessions_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_sessions_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAElE
|
|
1
|
+
{"version":3,"file":"admin_sessions_state.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/admin_sessions_state.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAC5D,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAElE;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACzC;;;;OAIG;IACH,OAAO,EAAE,MAAM,gBAAgB,CAAC;CAChC;AAED,qBAAa,kBAAkB;;IAG9B,QAAQ,CAAC,IAAI,0BAAyB;IACtC,QAAQ,CAAC,eAAe,sEAAoC;IAC5D,QAAQ,CAAC,aAAa,sEAAoC;IAE1D,QAAQ,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAkB;IAEnD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAkC;gBAEnD,OAAO,EAAE,yBAAyB;IAIxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,sBAAsB,CAAC,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,oBAAoB,CAAC,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAM3D"}
|
|
@@ -24,34 +24,24 @@ export class AdminSessionsState {
|
|
|
24
24
|
sessions = $state.raw([]);
|
|
25
25
|
active_count = $derived(this.sessions.length);
|
|
26
26
|
constructor(options) {
|
|
27
|
-
this.#get_rpc = options
|
|
28
|
-
}
|
|
29
|
-
/** True when an RPC adapter is wired. `fetch` and the revoke controls no-op without it. */
|
|
30
|
-
get has_rpc() {
|
|
31
|
-
return this.#get_rpc() !== null;
|
|
32
|
-
}
|
|
33
|
-
#require_rpc() {
|
|
34
|
-
const rpc = this.#get_rpc();
|
|
35
|
-
if (!rpc)
|
|
36
|
-
throw new Error('rpc adapter not wired');
|
|
37
|
-
return rpc;
|
|
27
|
+
this.#get_rpc = options.get_rpc;
|
|
38
28
|
}
|
|
39
29
|
async fetch() {
|
|
40
30
|
await this.list.run(async () => {
|
|
41
|
-
const { sessions } = await this.#
|
|
31
|
+
const { sessions } = await this.#get_rpc().list_sessions();
|
|
42
32
|
this.sessions = sessions;
|
|
43
33
|
});
|
|
44
34
|
}
|
|
45
35
|
async submit_revoke_sessions(account_id) {
|
|
46
36
|
await this.revoke_sessions.run(account_id, async () => {
|
|
47
|
-
await this.#
|
|
37
|
+
await this.#get_rpc().session_revoke_all({ account_id });
|
|
48
38
|
});
|
|
49
39
|
if (this.revoke_sessions.succeeded(account_id))
|
|
50
40
|
await this.fetch();
|
|
51
41
|
}
|
|
52
42
|
async submit_revoke_tokens(account_id) {
|
|
53
43
|
await this.revoke_tokens.run(account_id, async () => {
|
|
54
|
-
await this.#
|
|
44
|
+
await this.#get_rpc().token_revoke_all({ account_id });
|
|
55
45
|
});
|
|
56
46
|
if (this.revoke_tokens.succeeded(account_id))
|
|
57
47
|
await this.fetch();
|