@fuzdev/fuz_app 0.30.0 → 0.32.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 +630 -0
- package/dist/actions/action_rpc.d.ts +29 -0
- package/dist/actions/action_rpc.d.ts.map +1 -1
- package/dist/actions/action_rpc.js +42 -6
- package/dist/actions/action_types.d.ts +2 -2
- package/dist/actions/cancel.d.ts +12 -13
- package/dist/actions/cancel.d.ts.map +1 -1
- package/dist/actions/cancel.js +10 -13
- package/dist/actions/heartbeat.d.ts +8 -13
- package/dist/actions/heartbeat.d.ts.map +1 -1
- package/dist/actions/heartbeat.js +5 -8
- package/dist/actions/register_action_ws.d.ts +3 -3
- package/dist/actions/register_action_ws.js +2 -2
- package/dist/actions/register_ws_endpoint.d.ts +4 -4
- package/dist/actions/register_ws_endpoint.d.ts.map +1 -1
- package/dist/actions/register_ws_endpoint.js +3 -3
- package/dist/actions/rpc_client.d.ts +29 -0
- package/dist/actions/rpc_client.d.ts.map +1 -1
- package/dist/actions/rpc_client.js +31 -0
- package/dist/actions/socket.svelte.d.ts +16 -16
- package/dist/actions/socket.svelte.d.ts.map +1 -1
- package/dist/actions/socket.svelte.js +15 -15
- package/dist/actions/transports_ws_auth_guard.d.ts.map +1 -1
- package/dist/auth/CLAUDE.md +945 -0
- package/dist/auth/account_action_specs.d.ts +216 -0
- package/dist/auth/account_action_specs.d.ts.map +1 -0
- package/dist/auth/account_action_specs.js +159 -0
- package/dist/auth/account_actions.d.ts +51 -0
- package/dist/auth/account_actions.d.ts.map +1 -0
- package/dist/auth/account_actions.js +119 -0
- package/dist/auth/account_queries.d.ts +6 -2
- package/dist/auth/account_queries.d.ts.map +1 -1
- package/dist/auth/account_queries.js +40 -4
- package/dist/auth/account_routes.d.ts +94 -16
- package/dist/auth/account_routes.d.ts.map +1 -1
- package/dist/auth/account_routes.js +108 -180
- package/dist/auth/account_schema.d.ts +85 -30
- package/dist/auth/account_schema.d.ts.map +1 -1
- package/dist/auth/account_schema.js +40 -8
- package/dist/auth/admin_action_specs.d.ts +674 -0
- package/dist/auth/admin_action_specs.d.ts.map +1 -0
- package/dist/auth/admin_action_specs.js +287 -0
- package/dist/auth/admin_actions.d.ts +69 -0
- package/dist/auth/admin_actions.d.ts.map +1 -0
- package/dist/auth/admin_actions.js +256 -0
- package/dist/auth/admin_rpc_actions.d.ts +49 -0
- package/dist/auth/admin_rpc_actions.d.ts.map +1 -0
- package/dist/auth/admin_rpc_actions.js +32 -0
- package/dist/auth/api_token.d.ts +10 -0
- package/dist/auth/api_token.d.ts.map +1 -1
- package/dist/auth/api_token.js +9 -0
- package/dist/auth/api_token_queries.d.ts +3 -3
- package/dist/auth/api_token_queries.js +3 -3
- package/dist/auth/app_settings_schema.d.ts +4 -3
- package/dist/auth/app_settings_schema.d.ts.map +1 -1
- package/dist/auth/app_settings_schema.js +2 -1
- package/dist/auth/audit_log_routes.d.ts +14 -6
- package/dist/auth/audit_log_routes.d.ts.map +1 -1
- package/dist/auth/audit_log_routes.js +22 -79
- package/dist/auth/audit_log_schema.d.ts +100 -29
- package/dist/auth/audit_log_schema.d.ts.map +1 -1
- package/dist/auth/audit_log_schema.js +83 -11
- package/dist/auth/bootstrap_routes.d.ts +14 -0
- package/dist/auth/bootstrap_routes.d.ts.map +1 -1
- package/dist/auth/bootstrap_routes.js +10 -3
- package/dist/auth/cleanup.d.ts +63 -0
- package/dist/auth/cleanup.d.ts.map +1 -0
- package/dist/auth/cleanup.js +80 -0
- package/dist/auth/invite_schema.d.ts +11 -10
- package/dist/auth/invite_schema.d.ts.map +1 -1
- package/dist/auth/invite_schema.js +4 -3
- package/dist/auth/migrations.d.ts +6 -0
- package/dist/auth/migrations.d.ts.map +1 -1
- package/dist/auth/migrations.js +28 -0
- package/dist/auth/permit_offer_action_specs.d.ts +364 -0
- package/dist/auth/permit_offer_action_specs.d.ts.map +1 -0
- package/dist/auth/permit_offer_action_specs.js +216 -0
- package/dist/auth/permit_offer_actions.d.ts +96 -0
- package/dist/auth/permit_offer_actions.d.ts.map +1 -0
- package/dist/auth/permit_offer_actions.js +428 -0
- package/dist/auth/permit_offer_notifications.d.ts +361 -0
- package/dist/auth/permit_offer_notifications.d.ts.map +1 -0
- package/dist/auth/permit_offer_notifications.js +179 -0
- package/dist/auth/permit_offer_queries.d.ts +165 -0
- package/dist/auth/permit_offer_queries.d.ts.map +1 -0
- package/dist/auth/permit_offer_queries.js +390 -0
- package/dist/auth/permit_offer_schema.d.ts +103 -0
- package/dist/auth/permit_offer_schema.d.ts.map +1 -0
- package/dist/auth/permit_offer_schema.js +142 -0
- package/dist/auth/permit_queries.d.ts +77 -14
- package/dist/auth/permit_queries.d.ts.map +1 -1
- package/dist/auth/permit_queries.js +119 -24
- package/dist/auth/session_queries.d.ts +4 -2
- package/dist/auth/session_queries.d.ts.map +1 -1
- package/dist/auth/session_queries.js +4 -2
- package/dist/auth/signup_routes.d.ts +13 -0
- package/dist/auth/signup_routes.d.ts.map +1 -1
- package/dist/auth/signup_routes.js +14 -7
- package/dist/http/CLAUDE.md +584 -0
- package/dist/http/pending_effects.d.ts +29 -0
- package/dist/http/pending_effects.d.ts.map +1 -0
- package/dist/http/pending_effects.js +31 -0
- package/dist/http/route_spec.d.ts.map +1 -1
- package/dist/http/route_spec.js +4 -3
- package/dist/rate_limiter.d.ts +30 -0
- package/dist/rate_limiter.d.ts.map +1 -1
- package/dist/rate_limiter.js +25 -2
- package/dist/realtime/sse_auth_guard.d.ts +2 -0
- package/dist/realtime/sse_auth_guard.d.ts.map +1 -1
- package/dist/realtime/sse_auth_guard.js +5 -3
- package/dist/server/app_server.d.ts +13 -2
- package/dist/server/app_server.d.ts.map +1 -1
- package/dist/server/app_server.js +12 -1
- package/dist/testing/CLAUDE.md +668 -1
- package/dist/testing/admin_integration.d.ts +10 -7
- package/dist/testing/admin_integration.d.ts.map +1 -1
- package/dist/testing/admin_integration.js +382 -482
- package/dist/testing/app_server.d.ts +7 -6
- package/dist/testing/app_server.d.ts.map +1 -1
- package/dist/testing/attack_surface.d.ts +9 -3
- package/dist/testing/attack_surface.d.ts.map +1 -1
- package/dist/testing/attack_surface.js +4 -4
- package/dist/testing/audit_completeness.d.ts +11 -0
- package/dist/testing/audit_completeness.d.ts.map +1 -1
- package/dist/testing/audit_completeness.js +169 -134
- package/dist/testing/auth_apps.d.ts.map +1 -1
- package/dist/testing/auth_apps.js +4 -33
- package/dist/testing/db.d.ts +1 -1
- package/dist/testing/db.d.ts.map +1 -1
- package/dist/testing/db.js +2 -0
- package/dist/testing/entities.d.ts +35 -13
- package/dist/testing/entities.d.ts.map +1 -1
- package/dist/testing/entities.js +17 -0
- package/dist/testing/integration.d.ts +10 -0
- package/dist/testing/integration.d.ts.map +1 -1
- package/dist/testing/integration.js +352 -340
- package/dist/testing/integration_helpers.d.ts +16 -5
- package/dist/testing/integration_helpers.d.ts.map +1 -1
- package/dist/testing/integration_helpers.js +24 -4
- package/dist/testing/rate_limiting.d.ts +7 -0
- package/dist/testing/rate_limiting.d.ts.map +1 -1
- package/dist/testing/rate_limiting.js +41 -10
- package/dist/testing/rpc_helpers.d.ts +153 -1
- package/dist/testing/rpc_helpers.d.ts.map +1 -1
- package/dist/testing/rpc_helpers.js +184 -8
- package/dist/testing/sse_round_trip.d.ts +8 -0
- package/dist/testing/sse_round_trip.d.ts.map +1 -1
- package/dist/testing/sse_round_trip.js +10 -3
- package/dist/testing/standard.d.ts +9 -1
- package/dist/testing/standard.d.ts.map +1 -1
- package/dist/testing/standard.js +6 -2
- package/dist/testing/stubs.d.ts +10 -2
- package/dist/testing/stubs.d.ts.map +1 -1
- package/dist/testing/stubs.js +17 -2
- package/dist/testing/surface_invariants.d.ts +7 -3
- package/dist/testing/surface_invariants.d.ts.map +1 -1
- package/dist/testing/surface_invariants.js +5 -4
- package/dist/testing/ws_round_trip.d.ts.map +1 -1
- package/dist/testing/ws_round_trip.js +9 -38
- package/dist/ui/AccountSessions.svelte +8 -4
- package/dist/ui/AccountSessions.svelte.d.ts.map +1 -1
- package/dist/ui/AdminAccounts.svelte +61 -33
- package/dist/ui/AdminAccounts.svelte.d.ts.map +1 -1
- package/dist/ui/AdminAuditLog.svelte +3 -2
- package/dist/ui/AdminAuditLog.svelte.d.ts.map +1 -1
- package/dist/ui/AdminInvites.svelte +3 -2
- package/dist/ui/AdminInvites.svelte.d.ts.map +1 -1
- package/dist/ui/AdminOverview.svelte +14 -9
- package/dist/ui/AdminOverview.svelte.d.ts.map +1 -1
- package/dist/ui/AdminPermitHistory.svelte +3 -2
- package/dist/ui/AdminPermitHistory.svelte.d.ts.map +1 -1
- package/dist/ui/AdminSessions.svelte +29 -25
- package/dist/ui/AdminSessions.svelte.d.ts.map +1 -1
- package/dist/ui/CLAUDE.md +363 -0
- package/dist/ui/OpenSignupToggle.svelte +6 -3
- package/dist/ui/OpenSignupToggle.svelte.d.ts.map +1 -1
- package/dist/ui/PermitOfferForm.svelte +141 -0
- package/dist/ui/PermitOfferForm.svelte.d.ts +14 -0
- package/dist/ui/PermitOfferForm.svelte.d.ts.map +1 -0
- package/dist/ui/PermitOfferHistory.svelte +109 -0
- package/dist/ui/PermitOfferHistory.svelte.d.ts +11 -0
- package/dist/ui/PermitOfferHistory.svelte.d.ts.map +1 -0
- package/dist/ui/PermitOfferInbox.svelte +121 -0
- package/dist/ui/PermitOfferInbox.svelte.d.ts +12 -0
- package/dist/ui/PermitOfferInbox.svelte.d.ts.map +1 -0
- package/dist/ui/account_sessions_state.svelte.d.ts +53 -3
- package/dist/ui/account_sessions_state.svelte.d.ts.map +1 -1
- package/dist/ui/account_sessions_state.svelte.js +39 -16
- package/dist/ui/admin_accounts_state.svelte.d.ts +118 -2
- package/dist/ui/admin_accounts_state.svelte.d.ts.map +1 -1
- package/dist/ui/admin_accounts_state.svelte.js +99 -23
- package/dist/ui/admin_invites_state.svelte.d.ts +47 -1
- package/dist/ui/admin_invites_state.svelte.d.ts.map +1 -1
- package/dist/ui/admin_invites_state.svelte.js +38 -26
- package/dist/ui/admin_rpc_adapters.d.ts +94 -0
- package/dist/ui/admin_rpc_adapters.d.ts.map +1 -0
- package/dist/ui/admin_rpc_adapters.js +100 -0
- package/dist/ui/admin_sessions_state.svelte.d.ts +26 -0
- package/dist/ui/admin_sessions_state.svelte.d.ts.map +1 -1
- package/dist/ui/admin_sessions_state.svelte.js +35 -21
- package/dist/ui/app_settings_state.svelte.d.ts +39 -0
- package/dist/ui/app_settings_state.svelte.d.ts.map +1 -1
- package/dist/ui/app_settings_state.svelte.js +34 -18
- package/dist/ui/audit_log_state.svelte.d.ts +40 -3
- package/dist/ui/audit_log_state.svelte.d.ts.map +1 -1
- package/dist/ui/audit_log_state.svelte.js +36 -42
- package/dist/ui/auth_state.svelte.d.ts +4 -3
- package/dist/ui/auth_state.svelte.d.ts.map +1 -1
- package/dist/ui/auth_state.svelte.js +4 -1
- package/dist/ui/permit_offers_state.svelte.d.ts +125 -0
- package/dist/ui/permit_offers_state.svelte.d.ts.map +1 -0
- package/dist/ui/permit_offers_state.svelte.js +197 -0
- package/package.json +3 -3
- package/dist/auth/admin_routes.d.ts +0 -29
- package/dist/auth/admin_routes.d.ts.map +0 -1
- package/dist/auth/admin_routes.js +0 -226
- package/dist/auth/app_settings_routes.d.ts +0 -27
- package/dist/auth/app_settings_routes.d.ts.map +0 -1
- package/dist/auth/app_settings_routes.js +0 -66
- package/dist/auth/invite_routes.d.ts +0 -18
- package/dist/auth/invite_routes.d.ts.map +0 -1
- package/dist/auth/invite_routes.js +0 -129
|
@@ -19,8 +19,10 @@ import { ROLE_ADMIN } from '../auth/role_schema.js';
|
|
|
19
19
|
import { create_test_app } from './app_server.js';
|
|
20
20
|
import { create_pglite_factory } from './db.js';
|
|
21
21
|
import { find_route_spec, pick_auth_headers } from './integration_helpers.js';
|
|
22
|
+
import { rpc_call, require_rpc_endpoint_path } from './rpc_helpers.js';
|
|
22
23
|
import { run_migrations } from '../db/migrate.js';
|
|
23
24
|
import { AUTH_MIGRATION_NS } from '../auth/migrations.js';
|
|
25
|
+
import { account_session_revoke_all_action_spec } from '../auth/account_action_specs.js';
|
|
24
26
|
/**
|
|
25
27
|
* Read one complete SSE frame (up to `\n\n`) from a stream reader.
|
|
26
28
|
*
|
|
@@ -127,6 +129,9 @@ const parse_and_validate_sse_payload = (frame, event_specs, route_path) => {
|
|
|
127
129
|
* @param options - SSE test configuration
|
|
128
130
|
*/
|
|
129
131
|
export const describe_sse_route_tests = (options) => {
|
|
132
|
+
// Hard-fail early so consumers see a clear setup error instead of a
|
|
133
|
+
// confusing test failure when `rpc_endpoints` is missing.
|
|
134
|
+
const rpc_path = require_rpc_endpoint_path(options.rpc_endpoints);
|
|
130
135
|
const init_schema = async (db) => {
|
|
131
136
|
await run_migrations(db, [AUTH_MIGRATION_NS]);
|
|
132
137
|
};
|
|
@@ -187,11 +192,13 @@ export const describe_sse_route_tests = (options) => {
|
|
|
187
192
|
parse_and_validate_sse_payload(data_frame, route_config.event_specs, route_config.path);
|
|
188
193
|
// 3. Close-on-revoke.
|
|
189
194
|
if (route_config.assert_closes_on_revoke !== false) {
|
|
190
|
-
const revoke_res = await
|
|
191
|
-
|
|
195
|
+
const revoke_res = await rpc_call({
|
|
196
|
+
app: test_app.app,
|
|
197
|
+
path: rpc_path,
|
|
198
|
+
method: account_session_revoke_all_action_spec.method,
|
|
192
199
|
headers: account.create_session_headers(),
|
|
193
200
|
});
|
|
194
|
-
assert.ok(revoke_res.ok, `
|
|
201
|
+
assert.ok(revoke_res.ok, `account_session_revoke_all RPC failed (status=${revoke_res.status}): ${revoke_res.ok ? '' : JSON.stringify(revoke_res.error)}`);
|
|
195
202
|
const closed = await sse.wait_for_close(2000);
|
|
196
203
|
assert.ok(closed, `${route_config.path}: stream did not close within 2s after session_revoke_all`);
|
|
197
204
|
}
|
|
@@ -13,6 +13,7 @@ import type { AppServerContext, AppServerOptions } from '../server/app_server.js
|
|
|
13
13
|
import type { RouteSpec } from '../http/route_spec.js';
|
|
14
14
|
import type { RoleSchemaResult } from '../auth/role_schema.js';
|
|
15
15
|
import type { DbFactory } from './db.js';
|
|
16
|
+
import type { RpcEndpointSpec } from '../http/surface.js';
|
|
16
17
|
/**
|
|
17
18
|
* Configuration for `describe_standard_tests`.
|
|
18
19
|
*/
|
|
@@ -32,6 +33,13 @@ export interface StandardTestOptions {
|
|
|
32
33
|
* When provided, admin integration tests are included.
|
|
33
34
|
*/
|
|
34
35
|
roles?: RoleSchemaResult;
|
|
36
|
+
/**
|
|
37
|
+
* RPC endpoint specs — required. The standard integration tests drive
|
|
38
|
+
* `account_verify`, `account_session_*`, `account_token_*` through the
|
|
39
|
+
* RPC surface (and admin tests, when wired, drive permit grant/revoke
|
|
40
|
+
* through it too).
|
|
41
|
+
*/
|
|
42
|
+
rpc_endpoints: Array<RpcEndpointSpec>;
|
|
35
43
|
/**
|
|
36
44
|
* Path prefix where admin routes are mounted.
|
|
37
45
|
* Default `'/api/admin'`.
|
|
@@ -43,7 +51,7 @@ export interface StandardTestOptions {
|
|
|
43
51
|
*
|
|
44
52
|
* Admin tests are only included when `roles` is provided.
|
|
45
53
|
*
|
|
46
|
-
* @param options - session config, route factory, and optional role schema
|
|
54
|
+
* @param options - session config, route factory, RPC endpoints, and optional role schema
|
|
47
55
|
*/
|
|
48
56
|
export declare const describe_standard_tests: (options: StandardTestOptions) => void;
|
|
49
57
|
//# sourceMappingURL=standard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standard.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/standard.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAE7B;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAChF,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"standard.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/standard.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAE7B;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAChF,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAGvC,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,4CAA4C;IAC5C,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,wDAAwD;IACxD,kBAAkB,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAChE,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CACpB,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,iBAAiB,GAAG,oBAAoB,CAAC,CAC5E,CAAC;IACF;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB;;;;;OAKG;IACH,aAAa,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IACtC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAAI,SAAS,mBAAmB,KAAG,IAStE,CAAC"}
|
package/dist/testing/standard.js
CHANGED
|
@@ -6,11 +6,15 @@ import { describe_standard_admin_integration_tests } from './admin_integration.j
|
|
|
6
6
|
*
|
|
7
7
|
* Admin tests are only included when `roles` is provided.
|
|
8
8
|
*
|
|
9
|
-
* @param options - session config, route factory, and optional role schema
|
|
9
|
+
* @param options - session config, route factory, RPC endpoints, and optional role schema
|
|
10
10
|
*/
|
|
11
11
|
export const describe_standard_tests = (options) => {
|
|
12
12
|
describe_standard_integration_tests(options);
|
|
13
13
|
if (options.roles) {
|
|
14
|
-
describe_standard_admin_integration_tests({
|
|
14
|
+
describe_standard_admin_integration_tests({
|
|
15
|
+
...options,
|
|
16
|
+
roles: options.roles,
|
|
17
|
+
rpc_endpoints: options.rpc_endpoints,
|
|
18
|
+
});
|
|
15
19
|
}
|
|
16
20
|
};
|
package/dist/testing/stubs.d.ts
CHANGED
|
@@ -76,8 +76,16 @@ export interface CreateTestAppSurfaceSpecOptions {
|
|
|
76
76
|
env_schema?: z.ZodObject;
|
|
77
77
|
/** SSE event specs for surface generation. */
|
|
78
78
|
event_specs?: Array<EventSpec>;
|
|
79
|
-
/**
|
|
80
|
-
|
|
79
|
+
/**
|
|
80
|
+
* RPC endpoint specs for surface generation.
|
|
81
|
+
*
|
|
82
|
+
* Accepts either an array (eager) or a factory
|
|
83
|
+
* `(ctx: AppServerContext) => Array<RpcEndpointSpec>` — symmetric with
|
|
84
|
+
* `create_app_server`'s `rpc_endpoints` option, so consumers can pass
|
|
85
|
+
* the same factory to both entry points. The factory runs once against
|
|
86
|
+
* the stub `AppServerContext` this helper already builds.
|
|
87
|
+
*/
|
|
88
|
+
rpc_endpoints?: Array<RpcEndpointSpec> | ((ctx: AppServerContext) => Array<RpcEndpointSpec>);
|
|
81
89
|
/** Transform middleware array (e.g., tx's `extend_middleware_for_tx_binary`). */
|
|
82
90
|
transform_middleware?: (specs: Array<MiddlewareSpec>) => Array<MiddlewareSpec>;
|
|
83
91
|
/** Bootstrap route prefix (default: `'/api/account'`). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stubs.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/stubs.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAa7B,OAAO,KAAK,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAE3B,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAE/D,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAC,EAAE,EAAC,MAAM,aAAa,CAAC;AAC/B,OAAO,EAAqB,KAAK,SAAS,EAAC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"stubs.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/stubs.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAa7B,OAAO,KAAK,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAE3B,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAE/D,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAC,EAAE,EAAC,MAAM,aAAa,CAAC;AAC/B,OAAO,EAAqB,KAAK,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAGzE,OAAO,EAEN,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAKlD;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,GAAG,GAAG,EAAE,OAAO,MAAM,KAAG,CAqBtD,CAAC;AAET;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,GAAG,GAAG,EAAE,QAAQ,MAAM,EAAE,YAAY,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,CAOxF,CAAC;AAET,iEAAiE;AACjE,eAAO,MAAM,IAAI,EAAE,GAAkC,CAAC;AAEtD;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,QAAO,EAI/B,CAAC;AAEJ,gDAAgD;AAChD,eAAO,MAAM,YAAY,QAAO,QAAgC,CAAC;AAEjE,2CAA2C;AAC3C,eAAO,MAAM,OAAO,GAAU,IAAI,GAAG,EAAE,MAAM,GAAG,KAAG,OAAO,CAAC,IAAI,CAAW,CAAC;AAI3E,2EAA2E;AAC3E,eAAO,MAAM,aAAa,EAAE,OAS3B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAAO,OAStC,CAAC;AAEH,2FAA2F;AAC3F,eAAO,MAAM,0BAA0B,GAAI,UAAU;IACpD,iDAAiD;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAC/B,KAAG,KAAK,CAAC,cAAc,CAqBvB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,8BAA8B,GAC1C,iBAAiB,cAAc,CAAC,MAAM,CAAC,KACrC,gBAmBF,CAAC;AAEF,kDAAkD;AAClD,MAAM,WAAW,+BAA+B;IAC/C,6DAA6D;IAC7D,eAAe,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,qFAAqF;IACrF,kBAAkB,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAChE,oEAAoE;IACpE,UAAU,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC;IACzB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,gBAAgB,KAAK,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAC7F,iFAAiF;IACjF,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/E,0DAA0D;IAC1D,sBAAsB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,4BAA4B,GACxC,SAAS,+BAA+B,KACtC,cA2CF,CAAC"}
|
package/dist/testing/stubs.js
CHANGED
|
@@ -12,6 +12,7 @@ import { ApiError, RateLimitError } from '../http/error_schemas.js';
|
|
|
12
12
|
import { Db } from '../db/db.js';
|
|
13
13
|
import { prefix_route_specs } from '../http/route_spec.js';
|
|
14
14
|
import { create_bootstrap_route_specs } from '../auth/bootstrap_routes.js';
|
|
15
|
+
import { create_rpc_endpoint } from '../actions/action_rpc.js';
|
|
15
16
|
import { create_app_surface_spec, } from '../http/surface.js';
|
|
16
17
|
import { BaseServerEnv } from '../server/env.js';
|
|
17
18
|
/* eslint-disable @typescript-eslint/require-await */
|
|
@@ -178,7 +179,21 @@ export const create_test_app_surface_spec = (options) => {
|
|
|
178
179
|
ip_rate_limiter: null,
|
|
179
180
|
});
|
|
180
181
|
const prefix = options.bootstrap_route_prefix ?? '/api/account';
|
|
181
|
-
|
|
182
|
+
// Auto-mount rpc endpoints (mirrors create_app_server) so consumer
|
|
183
|
+
// `create_route_specs` does not need to call `create_rpc_endpoint`.
|
|
184
|
+
const resolved_rpc_endpoints = typeof options.rpc_endpoints === 'function'
|
|
185
|
+
? options.rpc_endpoints(ctx)
|
|
186
|
+
: options.rpc_endpoints;
|
|
187
|
+
const rpc_route_specs = resolved_rpc_endpoints?.flatMap((endpoint) => create_rpc_endpoint({
|
|
188
|
+
path: endpoint.path,
|
|
189
|
+
actions: endpoint.actions,
|
|
190
|
+
log: ctx.deps.log,
|
|
191
|
+
})) ?? [];
|
|
192
|
+
const route_specs = [
|
|
193
|
+
...consumer_routes,
|
|
194
|
+
...rpc_route_specs,
|
|
195
|
+
...prefix_route_specs(prefix, bootstrap_routes),
|
|
196
|
+
];
|
|
182
197
|
let middleware_specs = create_stub_api_middleware();
|
|
183
198
|
if (options.transform_middleware) {
|
|
184
199
|
middleware_specs = options.transform_middleware(middleware_specs);
|
|
@@ -188,6 +203,6 @@ export const create_test_app_surface_spec = (options) => {
|
|
|
188
203
|
route_specs,
|
|
189
204
|
env_schema: options.env_schema ?? BaseServerEnv,
|
|
190
205
|
event_specs: options.event_specs,
|
|
191
|
-
rpc_endpoints:
|
|
206
|
+
rpc_endpoints: resolved_rpc_endpoints,
|
|
192
207
|
});
|
|
193
208
|
};
|
|
@@ -97,7 +97,9 @@ export declare const audit_error_schema_tightness: (surface: AppSurface) => Arra
|
|
|
97
97
|
export interface SurfaceSecurityPolicyOptions {
|
|
98
98
|
/**
|
|
99
99
|
* Path patterns for routes that should be rate-limited.
|
|
100
|
-
* Default: common sensitive patterns (login, password, bootstrap
|
|
100
|
+
* Default: common sensitive REST patterns (login, password, bootstrap).
|
|
101
|
+
* `account_token_create` became RPC-only in the 2026-04-23 migration;
|
|
102
|
+
* per-method RPC rate limiting is a separate invariant if consumers want it.
|
|
101
103
|
*/
|
|
102
104
|
sensitive_route_patterns?: Array<string | RegExp>;
|
|
103
105
|
/**
|
|
@@ -157,12 +159,14 @@ export interface ErrorSchemaTightnessOptions {
|
|
|
157
159
|
allowlist?: Array<string>;
|
|
158
160
|
}
|
|
159
161
|
/**
|
|
160
|
-
*
|
|
162
|
+
* Baseline error schema tightness applied by
|
|
163
|
+
* `describe_standard_attack_surface_tests` when no config is passed.
|
|
161
164
|
*
|
|
162
165
|
* Uses `min_specificity: 'enum'` (the assertion default) with `ignore_statuses`
|
|
163
166
|
* for middleware-derived status codes that are commonly generic (auth middleware
|
|
164
167
|
* produces multiple error codes at 401/403, and 429 comes from rate limiters).
|
|
165
|
-
* Consumers can
|
|
168
|
+
* Consumers can pass a narrower config with project-specific `allowlist`
|
|
169
|
+
* entries, or pass `null` to skip the assertion entirely.
|
|
166
170
|
*/
|
|
167
171
|
export declare const DEFAULT_ERROR_SCHEMA_TIGHTNESS: ErrorSchemaTightnessOptions;
|
|
168
172
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface_invariants.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/surface_invariants.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,CAAC;AAuB7B,OAAO,KAAK,EAAC,UAAU,EAAuB,MAAM,oBAAoB,CAAC;AAczE;;GAEG;AACH,eAAO,MAAM,mCAAmC,GAAI,SAAS,UAAU,KAAG,IAQzE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,8BAA8B,GAAI,SAAS,UAAU,KAAG,IASpE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,+BAA+B,GAAI,SAAS,UAAU,KAAG,IAQrE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gCAAgC,GAAI,SAAS,UAAU,KAAG,IAQtE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,+BAA+B,GAAI,SAAS,UAAU,KAAG,IAQrE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,GAAI,SAAS,UAAU,KAAG,IAIjE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,GAAI,SAAS,UAAU,KAAG,IAOhE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mCAAmC,GAAI,SAAS,UAAU,KAAG,IAezE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uCAAuC,GAAI,SAAS,UAAU,KAAG,IAgB7E,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oCAAoC,GAAI,SAAS,UAAU,KAAG,IAuC1E,CAAC;AA0CF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,sCAAsC,GAAI,SAAS,UAAU,KAAG,IAU5E,CAAC;AAIF,4DAA4D;AAC5D,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAEpE,iEAAiE;AACjE,MAAM,WAAW,qBAAqB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,sBAAsB,CAAC;IACpC,qDAAqD;IACrD,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CAClC;AA+BD;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B,GAAI,SAAS,UAAU,KAAG,KAAK,CAAC,qBAAqB,CAgB7F,CAAC;AAIF;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAC5C
|
|
1
|
+
{"version":3,"file":"surface_invariants.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/surface_invariants.ts"],"names":[],"mappings":"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"}
|
|
@@ -299,12 +299,11 @@ export const audit_error_schema_tightness = (surface) => {
|
|
|
299
299
|
}
|
|
300
300
|
return entries;
|
|
301
301
|
};
|
|
302
|
-
/** Default patterns for sensitive routes that should be rate-limited. */
|
|
302
|
+
/** Default patterns for sensitive REST routes that should be rate-limited. */
|
|
303
303
|
const DEFAULT_SENSITIVE_PATTERNS = [
|
|
304
304
|
/\/login$/,
|
|
305
305
|
/\/password$/,
|
|
306
306
|
/\/bootstrap$/,
|
|
307
|
-
/\/tokens\/create$/,
|
|
308
307
|
];
|
|
309
308
|
/**
|
|
310
309
|
* Sensitive routes must declare rate limiting (`rate_limit_key` is non-null)
|
|
@@ -381,12 +380,14 @@ const SPECIFICITY_ORDER = {
|
|
|
381
380
|
generic: 0,
|
|
382
381
|
};
|
|
383
382
|
/**
|
|
384
|
-
*
|
|
383
|
+
* Baseline error schema tightness applied by
|
|
384
|
+
* `describe_standard_attack_surface_tests` when no config is passed.
|
|
385
385
|
*
|
|
386
386
|
* Uses `min_specificity: 'enum'` (the assertion default) with `ignore_statuses`
|
|
387
387
|
* for middleware-derived status codes that are commonly generic (auth middleware
|
|
388
388
|
* produces multiple error codes at 401/403, and 429 comes from rate limiters).
|
|
389
|
-
* Consumers can
|
|
389
|
+
* Consumers can pass a narrower config with project-specific `allowlist`
|
|
390
|
+
* entries, or pass `null` to skip the assertion entirely.
|
|
390
391
|
*/
|
|
391
392
|
export const DEFAULT_ERROR_SCHEMA_TIGHTNESS = {
|
|
392
393
|
ignore_statuses: [401, 403, 429],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws_round_trip.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/ws_round_trip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAC,OAAO,EAAO,MAAM,MAAM,CAAC;AACxC,OAAO,EACN,SAAS,EAET,KAAK,gBAAgB,EAErB,KAAK,QAAQ,EACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAE/C,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,4BAA4B,CAAC;AAEvD,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,kCAAkC,CAAC;AAE7E,OAAO,EAEN,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAC,yBAAyB,EAAC,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAsB,KAAK,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAA6C,KAAK,cAAc,EAAC,MAAM,oBAAoB,CAAC;AACnG,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AAOnD,OAAO,EAAc,KAAK,IAAI,EAAC,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ws_round_trip.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/testing/ws_round_trip.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,6 +48,7 @@ import { AUTH_API_TOKEN_ID_KEY, CREDENTIAL_TYPE_KEY } from '../hono_context.js';
|
|
|
48
48
|
import { JSONRPC_VERSION } from '../http/jsonrpc.js';
|
|
49
49
|
import { create_jsonrpc_request, is_jsonrpc_error_response, is_jsonrpc_notification, is_jsonrpc_response, } from '../http/jsonrpc_helpers.js';
|
|
50
50
|
import { create_uuid } from '../uuid.js';
|
|
51
|
+
import { create_test_account, create_test_actor, create_test_permit } from './entities.js';
|
|
51
52
|
/**
|
|
52
53
|
* Build a real `WSContext` backed by in-memory `send`/`close` capture.
|
|
53
54
|
* Parsing of outgoing frames is left to the caller — `sends` holds the
|
|
@@ -188,11 +189,14 @@ const build_multi_role_request_context = (account_id, roles) => {
|
|
|
188
189
|
id: create_uuid(),
|
|
189
190
|
actor_id,
|
|
190
191
|
role,
|
|
192
|
+
scope_id: null,
|
|
191
193
|
created_at: now,
|
|
192
194
|
expires_at: null,
|
|
193
195
|
revoked_at: null,
|
|
194
196
|
revoked_by: null,
|
|
197
|
+
revoked_reason: null,
|
|
195
198
|
granted_by: null,
|
|
199
|
+
source_offer_id: null,
|
|
196
200
|
})),
|
|
197
201
|
};
|
|
198
202
|
};
|
|
@@ -201,44 +205,11 @@ const build_multi_role_request_context = (account_id, roles) => {
|
|
|
201
205
|
* ids (`acc_1` / `act_1`) mirror `create_test_request_context` in
|
|
202
206
|
* `auth_apps.ts`.
|
|
203
207
|
*/
|
|
204
|
-
const build_simple_request_context = (role) => {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
username: 'testuser',
|
|
210
|
-
password_hash: 'hash',
|
|
211
|
-
created_at: now,
|
|
212
|
-
updated_at: now,
|
|
213
|
-
created_by: null,
|
|
214
|
-
updated_by: null,
|
|
215
|
-
email: null,
|
|
216
|
-
email_verified: false,
|
|
217
|
-
},
|
|
218
|
-
actor: {
|
|
219
|
-
id: 'act_1',
|
|
220
|
-
account_id: 'acc_1',
|
|
221
|
-
name: 'testuser',
|
|
222
|
-
created_at: now,
|
|
223
|
-
updated_at: null,
|
|
224
|
-
updated_by: null,
|
|
225
|
-
},
|
|
226
|
-
permits: role
|
|
227
|
-
? [
|
|
228
|
-
{
|
|
229
|
-
id: 'perm_1',
|
|
230
|
-
actor_id: 'act_1',
|
|
231
|
-
role,
|
|
232
|
-
created_at: now,
|
|
233
|
-
expires_at: null,
|
|
234
|
-
revoked_at: null,
|
|
235
|
-
revoked_by: null,
|
|
236
|
-
granted_by: null,
|
|
237
|
-
},
|
|
238
|
-
]
|
|
239
|
-
: [],
|
|
240
|
-
};
|
|
241
|
-
};
|
|
208
|
+
const build_simple_request_context = (role) => ({
|
|
209
|
+
account: create_test_account({ id: 'acc_1', username: 'testuser' }),
|
|
210
|
+
actor: create_test_actor({ id: 'act_1', account_id: 'acc_1', name: 'testuser' }),
|
|
211
|
+
permits: role ? [create_test_permit({ id: 'perm_1', actor_id: 'act_1', role })] : [],
|
|
212
|
+
});
|
|
242
213
|
/**
|
|
243
214
|
* Create a WebSocket test harness for the given specs + handlers.
|
|
244
215
|
*
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import {auth_state_context} from './auth_state.svelte.js';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
AccountSessionsState,
|
|
5
|
+
account_sessions_rpc_context,
|
|
6
|
+
} from './account_sessions_state.svelte.js';
|
|
4
7
|
import {format_relative_time, format_datetime_local, truncate_uuid} from './ui_format.js';
|
|
5
8
|
import Datatable from './Datatable.svelte';
|
|
6
9
|
import type {DatatableColumn} from './datatable.js';
|
|
7
|
-
import type {
|
|
10
|
+
import type {AuthSessionJson} from '../auth/account_schema.js';
|
|
8
11
|
|
|
9
12
|
const auth_state = auth_state_context.get();
|
|
10
|
-
const
|
|
13
|
+
const get_rpc = account_sessions_rpc_context.get();
|
|
14
|
+
const account_sessions = new AccountSessionsState({get_rpc});
|
|
11
15
|
|
|
12
16
|
void account_sessions.fetch();
|
|
13
17
|
|
|
@@ -18,7 +22,7 @@
|
|
|
18
22
|
}
|
|
19
23
|
};
|
|
20
24
|
|
|
21
|
-
const columns: Array<DatatableColumn<
|
|
25
|
+
const columns: Array<DatatableColumn<AuthSessionJson>> = [
|
|
22
26
|
{key: 'id', label: 'session', width: 140},
|
|
23
27
|
{key: 'created_at', label: 'created', width: 120},
|
|
24
28
|
{key: 'last_seen_at', label: 'last seen', width: 120},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountSessions.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AccountSessions.svelte"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AccountSessions.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AccountSessions.svelte"],"names":[],"mappings":"AA4FA,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,eAAe;;kBAA+E,CAAC;AACnF,KAAK,eAAe,GAAG,YAAY,CAAC,OAAO,eAAe,CAAC,CAAC;AAC9D,eAAe,eAAe,CAAC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {AdminAccountsState} from './admin_accounts_state.svelte.js';
|
|
2
|
+
import {AdminAccountsState, admin_accounts_rpc_context} from './admin_accounts_state.svelte.js';
|
|
3
3
|
import ConfirmButton from './ConfirmButton.svelte';
|
|
4
4
|
import Datatable from './Datatable.svelte';
|
|
5
5
|
import type {DatatableColumn} from './datatable.js';
|
|
6
6
|
import type {AdminAccountEntryJson} from '../auth/account_schema.js';
|
|
7
7
|
import {format_relative_time, format_datetime_local} from './ui_format.js';
|
|
8
8
|
|
|
9
|
-
const
|
|
9
|
+
const get_rpc = admin_accounts_rpc_context.get();
|
|
10
|
+
const admin_accounts = new AdminAccountsState({get_rpc});
|
|
10
11
|
|
|
11
12
|
void admin_accounts.fetch();
|
|
12
13
|
|
|
@@ -63,43 +64,70 @@
|
|
|
63
64
|
expires {format_relative_time(permit.expires_at)}
|
|
64
65
|
</span>
|
|
65
66
|
{/if}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
{#if admin_accounts.has_rpc && row.actor}
|
|
68
|
+
{@const actor_id = row.actor.id}
|
|
69
|
+
<ConfirmButton
|
|
70
|
+
onconfirm={() => admin_accounts.revoke_permit(actor_id, permit.id)}
|
|
71
|
+
title="revoke {permit.role}"
|
|
72
|
+
class="sm"
|
|
73
|
+
disabled={admin_accounts.revoking_ids.has(permit.id)}
|
|
74
|
+
>
|
|
75
|
+
{#snippet children(_popover, _confirm)}
|
|
76
|
+
{admin_accounts.revoking_ids.has(permit.id) ? 'revoking…' : 'revoke'}
|
|
77
|
+
{/snippet}
|
|
78
|
+
</ConfirmButton>
|
|
79
|
+
{/if}
|
|
80
|
+
</div>
|
|
81
|
+
{/each}
|
|
82
|
+
{#each row.pending_offers as offer (offer.id)}
|
|
83
|
+
<div class="row">
|
|
84
|
+
<span
|
|
85
|
+
class="chip"
|
|
86
|
+
title="awaiting acceptance — expires {format_relative_time(offer.expires_at)}"
|
|
71
87
|
>
|
|
72
|
-
{
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
88
|
+
{offer.role} (pending from @{offer.from_username})
|
|
89
|
+
</span>
|
|
90
|
+
{#if admin_accounts.has_rpc}
|
|
91
|
+
<ConfirmButton
|
|
92
|
+
onconfirm={() => admin_accounts.retract_offer(offer.id)}
|
|
93
|
+
title="retract offer"
|
|
94
|
+
class="sm"
|
|
95
|
+
disabled={admin_accounts.retracting_ids.has(offer.id)}
|
|
96
|
+
>
|
|
97
|
+
{#snippet children(_popover, _confirm)}
|
|
98
|
+
{admin_accounts.retracting_ids.has(offer.id) ? 'retracting…' : 'retract'}
|
|
99
|
+
{/snippet}
|
|
100
|
+
</ConfirmButton>
|
|
101
|
+
{/if}
|
|
76
102
|
</div>
|
|
77
103
|
{/each}
|
|
78
|
-
{#if row.permits.length === 0}
|
|
104
|
+
{#if row.permits.length === 0 && row.pending_offers.length === 0}
|
|
79
105
|
<span class="text_50">none</span>
|
|
80
106
|
{/if}
|
|
81
107
|
{:else if column.key === 'actor'}
|
|
82
|
-
{#
|
|
83
|
-
{#
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
{
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
<
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
108
|
+
{#if admin_accounts.has_rpc}
|
|
109
|
+
{#each admin_accounts.grantable_roles as role (role)}
|
|
110
|
+
{#if !row.permits.some((p) => p.role === role) && !row.pending_offers.some((o) => o.role === role)}
|
|
111
|
+
<ConfirmButton
|
|
112
|
+
onconfirm={() => admin_accounts.grant_permit(row.account.id, role)}
|
|
113
|
+
title="offer {role}"
|
|
114
|
+
class="sm"
|
|
115
|
+
disabled={admin_accounts.granting_keys.has(`${row.account.id}:${role}`)}
|
|
116
|
+
>
|
|
117
|
+
{#snippet children(_popover, _confirm)}
|
|
118
|
+
{admin_accounts.granting_keys.has(`${row.account.id}:${role}`)
|
|
119
|
+
? 'offering…'
|
|
120
|
+
: `+ ${role}`}
|
|
121
|
+
{/snippet}
|
|
122
|
+
{#snippet popover_content(_popover, do_confirm)}
|
|
123
|
+
<button type="button" class="color_b bg_100" onclick={() => do_confirm()}>
|
|
124
|
+
<span class="py_sm">offer '{role}' to @{row.account.username}</span>
|
|
125
|
+
</button>
|
|
126
|
+
{/snippet}
|
|
127
|
+
</ConfirmButton>
|
|
128
|
+
{/if}
|
|
129
|
+
{/each}
|
|
130
|
+
{/if}
|
|
103
131
|
{/if}
|
|
104
132
|
{/snippet}
|
|
105
133
|
</Datatable>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminAccounts.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminAccounts.svelte"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdminAccounts.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminAccounts.svelte"],"names":[],"mappings":"AAgIA,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,aAAa;;kBAA+E,CAAC;AACjF,KAAK,aAAa,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAC1D,eAAe,aAAa,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import {onDestroy} from 'svelte';
|
|
3
3
|
|
|
4
|
-
import {AuditLogState} from './audit_log_state.svelte.js';
|
|
4
|
+
import {AuditLogState, audit_log_rpc_context} from './audit_log_state.svelte.js';
|
|
5
5
|
import {
|
|
6
6
|
AUDIT_EVENT_TYPES,
|
|
7
7
|
type AuditLogEventWithUsernamesJson,
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
import Datatable from './Datatable.svelte';
|
|
16
16
|
import type {DatatableColumn} from './datatable.js';
|
|
17
17
|
|
|
18
|
-
const
|
|
18
|
+
const get_rpc = audit_log_rpc_context.get();
|
|
19
|
+
const audit_log = new AuditLogState({get_rpc});
|
|
19
20
|
|
|
20
21
|
let filter_event_type: string = $state.raw('');
|
|
21
22
|
let streaming = $state.raw(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminAuditLog.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminAuditLog.svelte"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdminAuditLog.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminAuditLog.svelte"],"names":[],"mappings":"AAqJA,QAAA,MAAM,aAAa,2DAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import PendingButton from '@fuzdev/fuz_ui/PendingButton.svelte';
|
|
3
3
|
|
|
4
|
-
import {AdminInvitesState} from './admin_invites_state.svelte.js';
|
|
4
|
+
import {AdminInvitesState, admin_invites_rpc_context} from './admin_invites_state.svelte.js';
|
|
5
5
|
import ConfirmButton from './ConfirmButton.svelte';
|
|
6
6
|
import Datatable from './Datatable.svelte';
|
|
7
7
|
import type {DatatableColumn} from './datatable.js';
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
import {format_relative_time, format_datetime_local, truncate_uuid} from './ui_format.js';
|
|
10
10
|
import OpenSignupToggle from './OpenSignupToggle.svelte';
|
|
11
11
|
|
|
12
|
-
const
|
|
12
|
+
const get_rpc = admin_invites_rpc_context.get();
|
|
13
|
+
const admin_invites = new AdminInvitesState({get_rpc});
|
|
13
14
|
|
|
14
15
|
let invite_email = $state.raw('');
|
|
15
16
|
let invite_username = $state.raw('');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminInvites.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminInvites.svelte"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdminInvites.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminInvites.svelte"],"names":[],"mappings":"AA2IA,QAAA,MAAM,YAAY,2DAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
|
|
@@ -3,21 +3,26 @@
|
|
|
3
3
|
import {resolve} from '$app/paths';
|
|
4
4
|
|
|
5
5
|
import {auth_state_context} from './auth_state.svelte.js';
|
|
6
|
-
import {AdminAccountsState} from './admin_accounts_state.svelte.js';
|
|
6
|
+
import {AdminAccountsState, admin_accounts_rpc_context} from './admin_accounts_state.svelte.js';
|
|
7
7
|
import {AdminSessionsState} from './admin_sessions_state.svelte.js';
|
|
8
|
-
import {AdminInvitesState} from './admin_invites_state.svelte.js';
|
|
9
|
-
import {AuditLogState} from './audit_log_state.svelte.js';
|
|
10
|
-
import {AppSettingsState} from './app_settings_state.svelte.js';
|
|
8
|
+
import {AdminInvitesState, admin_invites_rpc_context} from './admin_invites_state.svelte.js';
|
|
9
|
+
import {AuditLogState, audit_log_rpc_context} from './audit_log_state.svelte.js';
|
|
10
|
+
import {AppSettingsState, app_settings_rpc_context} from './app_settings_state.svelte.js';
|
|
11
11
|
import {format_relative_time, format_datetime_local} from './ui_format.js';
|
|
12
12
|
import ConfirmButton from './ConfirmButton.svelte';
|
|
13
13
|
|
|
14
14
|
const auth_state = auth_state_context.get();
|
|
15
15
|
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
|
|
16
|
+
const get_accounts_rpc = admin_accounts_rpc_context.get();
|
|
17
|
+
const get_invites_rpc = admin_invites_rpc_context.get();
|
|
18
|
+
const get_audit_log_rpc = audit_log_rpc_context.get();
|
|
19
|
+
const get_app_settings_rpc = app_settings_rpc_context.get();
|
|
20
|
+
|
|
21
|
+
const accounts = new AdminAccountsState({get_rpc: get_accounts_rpc});
|
|
22
|
+
const sessions = new AdminSessionsState({get_rpc: get_accounts_rpc});
|
|
23
|
+
const invites = new AdminInvitesState({get_rpc: get_invites_rpc});
|
|
24
|
+
const audit_log = new AuditLogState({get_rpc: get_audit_log_rpc});
|
|
25
|
+
const app_settings = new AppSettingsState({get_rpc: get_app_settings_rpc});
|
|
21
26
|
|
|
22
27
|
// accounts - dynamic role breakdown
|
|
23
28
|
const role_counts = $derived.by(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminOverview.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminOverview.svelte"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdminOverview.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminOverview.svelte"],"names":[],"mappings":"AA+TA,QAAA,MAAM,aAAa,2DAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {AuditLogState} from './audit_log_state.svelte.js';
|
|
2
|
+
import {AuditLogState, audit_log_rpc_context} from './audit_log_state.svelte.js';
|
|
3
3
|
import {format_relative_time, format_datetime_local, truncate_uuid} from './ui_format.js';
|
|
4
4
|
import Datatable from './Datatable.svelte';
|
|
5
5
|
import type {DatatableColumn} from './datatable.js';
|
|
6
6
|
import type {PermitHistoryEventJson} from '../auth/audit_log_schema.js';
|
|
7
7
|
|
|
8
|
-
const
|
|
8
|
+
const get_rpc = audit_log_rpc_context.get();
|
|
9
|
+
const audit_log = new AuditLogState({get_rpc});
|
|
9
10
|
|
|
10
11
|
void audit_log.fetch_permit_history();
|
|
11
12
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminPermitHistory.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminPermitHistory.svelte"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdminPermitHistory.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminPermitHistory.svelte"],"names":[],"mappings":"AAoEA,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,kBAAkB;;kBAA+E,CAAC;AACtF,KAAK,kBAAkB,GAAG,YAAY,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACpE,eAAe,kBAAkB,CAAC"}
|