@portaidentity/cli 1.7.3 → 1.9.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/CHANGELOG.md +18 -0
- package/README.md +125 -105
- package/dist/admin/admin-date-time.d.ts +6 -0
- package/dist/admin/admin-date-time.d.ts.map +1 -0
- package/dist/admin/admin-date-time.js +33 -0
- package/dist/admin/admin-date-time.js.map +1 -0
- package/dist/admin/application-client-features.d.ts +38 -0
- package/dist/admin/application-client-features.d.ts.map +1 -0
- package/dist/admin/application-client-features.js +545 -0
- package/dist/admin/application-client-features.js.map +1 -0
- package/dist/admin/application-controller.d.ts +58 -0
- package/dist/admin/application-controller.d.ts.map +1 -0
- package/dist/admin/application-controller.js +286 -0
- package/dist/admin/application-controller.js.map +1 -0
- package/dist/admin/application-dialogs.d.ts +91 -0
- package/dist/admin/application-dialogs.d.ts.map +1 -0
- package/dist/admin/application-dialogs.js +250 -0
- package/dist/admin/application-dialogs.js.map +1 -0
- package/dist/admin/application-rbac-controller.d.ts +56 -0
- package/dist/admin/application-rbac-controller.d.ts.map +1 -0
- package/dist/admin/application-rbac-controller.js +280 -0
- package/dist/admin/application-rbac-controller.js.map +1 -0
- package/dist/admin/application-rbac-features.d.ts +51 -0
- package/dist/admin/application-rbac-features.d.ts.map +1 -0
- package/dist/admin/application-rbac-features.js +175 -0
- package/dist/admin/application-rbac-features.js.map +1 -0
- package/dist/admin/application-rbac-workspace.d.ts +62 -0
- package/dist/admin/application-rbac-workspace.d.ts.map +1 -0
- package/dist/admin/application-rbac-workspace.js +344 -0
- package/dist/admin/application-rbac-workspace.js.map +1 -0
- package/dist/admin/application-runtime.d.ts +44 -0
- package/dist/admin/application-runtime.d.ts.map +1 -0
- package/dist/admin/application-runtime.js +183 -0
- package/dist/admin/application-runtime.js.map +1 -0
- package/dist/admin/application-service.d.ts +39 -0
- package/dist/admin/application-service.d.ts.map +1 -0
- package/dist/admin/application-service.js +248 -0
- package/dist/admin/application-service.js.map +1 -0
- package/dist/admin/application-state.d.ts +109 -0
- package/dist/admin/application-state.d.ts.map +1 -0
- package/dist/admin/application-state.js +3 -0
- package/dist/admin/application-state.js.map +1 -0
- package/dist/admin/application-workspace.d.ts +77 -0
- package/dist/admin/application-workspace.d.ts.map +1 -0
- package/dist/admin/application-workspace.js +302 -0
- package/dist/admin/application-workspace.js.map +1 -0
- package/dist/admin/application.d.ts +88 -0
- package/dist/admin/application.d.ts.map +1 -0
- package/dist/admin/application.js +932 -0
- package/dist/admin/application.js.map +1 -0
- package/dist/admin/client-authentication-dialog.d.ts +77 -0
- package/dist/admin/client-authentication-dialog.d.ts.map +1 -0
- package/dist/admin/client-authentication-dialog.js +217 -0
- package/dist/admin/client-authentication-dialog.js.map +1 -0
- package/dist/admin/client-controller.d.ts +58 -0
- package/dist/admin/client-controller.d.ts.map +1 -0
- package/dist/admin/client-controller.js +462 -0
- package/dist/admin/client-controller.js.map +1 -0
- package/dist/admin/client-credential-dialogs.d.ts +36 -0
- package/dist/admin/client-credential-dialogs.d.ts.map +1 -0
- package/dist/admin/client-credential-dialogs.js +145 -0
- package/dist/admin/client-credential-dialogs.js.map +1 -0
- package/dist/admin/client-dialogs.d.ts +64 -0
- package/dist/admin/client-dialogs.d.ts.map +1 -0
- package/dist/admin/client-dialogs.js +110 -0
- package/dist/admin/client-dialogs.js.map +1 -0
- package/dist/admin/client-form-scroller.d.ts +17 -0
- package/dist/admin/client-form-scroller.d.ts.map +1 -0
- package/dist/admin/client-form-scroller.js +67 -0
- package/dist/admin/client-form-scroller.js.map +1 -0
- package/dist/admin/client-registration-dialog.d.ts +27 -0
- package/dist/admin/client-registration-dialog.d.ts.map +1 -0
- package/dist/admin/client-registration-dialog.js +195 -0
- package/dist/admin/client-registration-dialog.js.map +1 -0
- package/dist/admin/client-service.d.ts +41 -0
- package/dist/admin/client-service.d.ts.map +1 -0
- package/dist/admin/client-service.js +486 -0
- package/dist/admin/client-service.js.map +1 -0
- package/dist/admin/client-state.d.ts +159 -0
- package/dist/admin/client-state.d.ts.map +1 -0
- package/dist/admin/client-state.js +3 -0
- package/dist/admin/client-state.js.map +1 -0
- package/dist/admin/client-workspace.d.ts +88 -0
- package/dist/admin/client-workspace.d.ts.map +1 -0
- package/dist/admin/client-workspace.js +491 -0
- package/dist/admin/client-workspace.js.map +1 -0
- package/dist/admin/delete-confirmation-layout.d.ts +38 -0
- package/dist/admin/delete-confirmation-layout.d.ts.map +1 -0
- package/dist/admin/delete-confirmation-layout.js +52 -0
- package/dist/admin/delete-confirmation-layout.js.map +1 -0
- package/dist/admin/index.d.ts +64 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +31 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/organization-controller.d.ts +77 -0
- package/dist/admin/organization-controller.d.ts.map +1 -0
- package/dist/admin/organization-controller.js +472 -0
- package/dist/admin/organization-controller.js.map +1 -0
- package/dist/admin/organization-dialogs.d.ts +63 -0
- package/dist/admin/organization-dialogs.d.ts.map +1 -0
- package/dist/admin/organization-dialogs.js +303 -0
- package/dist/admin/organization-dialogs.js.map +1 -0
- package/dist/admin/organization-service.d.ts +110 -0
- package/dist/admin/organization-service.d.ts.map +1 -0
- package/dist/admin/organization-service.js +548 -0
- package/dist/admin/organization-service.js.map +1 -0
- package/dist/admin/organization-workspace.d.ts +29 -0
- package/dist/admin/organization-workspace.d.ts.map +1 -0
- package/dist/admin/organization-workspace.js +421 -0
- package/dist/admin/organization-workspace.js.map +1 -0
- package/dist/admin/portability-controller.d.ts +83 -0
- package/dist/admin/portability-controller.d.ts.map +1 -0
- package/dist/admin/portability-controller.js +466 -0
- package/dist/admin/portability-controller.js.map +1 -0
- package/dist/admin/portability-service.d.ts +31 -0
- package/dist/admin/portability-service.d.ts.map +1 -0
- package/dist/admin/portability-service.js +51 -0
- package/dist/admin/portability-service.js.map +1 -0
- package/dist/admin/portability-state.d.ts +88 -0
- package/dist/admin/portability-state.d.ts.map +1 -0
- package/dist/admin/portability-state.js +3 -0
- package/dist/admin/portability-state.js.map +1 -0
- package/dist/admin/portability-workspace.d.ts +78 -0
- package/dist/admin/portability-workspace.d.ts.map +1 -0
- package/dist/admin/portability-workspace.js +337 -0
- package/dist/admin/portability-workspace.js.map +1 -0
- package/dist/admin/presentation.d.ts +46 -0
- package/dist/admin/presentation.d.ts.map +1 -0
- package/dist/admin/presentation.js +271 -0
- package/dist/admin/presentation.js.map +1 -0
- package/dist/admin/rbac-dialogs.d.ts +73 -0
- package/dist/admin/rbac-dialogs.d.ts.map +1 -0
- package/dist/admin/rbac-dialogs.js +345 -0
- package/dist/admin/rbac-dialogs.js.map +1 -0
- package/dist/admin/rbac-service.d.ts +47 -0
- package/dist/admin/rbac-service.d.ts.map +1 -0
- package/dist/admin/rbac-service.js +258 -0
- package/dist/admin/rbac-service.js.map +1 -0
- package/dist/admin/rbac-state.d.ts +129 -0
- package/dist/admin/rbac-state.d.ts.map +1 -0
- package/dist/admin/rbac-state.js +136 -0
- package/dist/admin/rbac-state.js.map +1 -0
- package/dist/admin/selectable-read-only-input.d.ts +18 -0
- package/dist/admin/selectable-read-only-input.d.ts.map +1 -0
- package/dist/admin/selectable-read-only-input.js +24 -0
- package/dist/admin/selectable-read-only-input.js.map +1 -0
- package/dist/admin/session-service.d.ts +169 -0
- package/dist/admin/session-service.d.ts.map +1 -0
- package/dist/admin/session-service.js +353 -0
- package/dist/admin/session-service.js.map +1 -0
- package/dist/admin/state.d.ts +301 -0
- package/dist/admin/state.d.ts.map +1 -0
- package/dist/admin/state.js +10 -0
- package/dist/admin/state.js.map +1 -0
- package/dist/admin/system-config-controller.d.ts +58 -0
- package/dist/admin/system-config-controller.d.ts.map +1 -0
- package/dist/admin/system-config-controller.js +218 -0
- package/dist/admin/system-config-controller.js.map +1 -0
- package/dist/admin/system-config-service.d.ts +54 -0
- package/dist/admin/system-config-service.d.ts.map +1 -0
- package/dist/admin/system-config-service.js +180 -0
- package/dist/admin/system-config-service.js.map +1 -0
- package/dist/admin/system-config-state.d.ts +77 -0
- package/dist/admin/system-config-state.d.ts.map +1 -0
- package/dist/admin/system-config-state.js +78 -0
- package/dist/admin/system-config-state.js.map +1 -0
- package/dist/admin/system-config-workspace.d.ts +47 -0
- package/dist/admin/system-config-workspace.d.ts.map +1 -0
- package/dist/admin/system-config-workspace.js +217 -0
- package/dist/admin/system-config-workspace.js.map +1 -0
- package/dist/admin/user-controller-types.d.ts +67 -0
- package/dist/admin/user-controller-types.d.ts.map +1 -0
- package/dist/admin/user-controller-types.js +3 -0
- package/dist/admin/user-controller-types.js.map +1 -0
- package/dist/admin/user-controller.d.ts +6 -0
- package/dist/admin/user-controller.d.ts.map +1 -0
- package/dist/admin/user-controller.js +674 -0
- package/dist/admin/user-controller.js.map +1 -0
- package/dist/admin/user-dialog-fields.d.ts +44 -0
- package/dist/admin/user-dialog-fields.d.ts.map +1 -0
- package/dist/admin/user-dialog-fields.js +130 -0
- package/dist/admin/user-dialog-fields.js.map +1 -0
- package/dist/admin/user-dialogs.d.ts +66 -0
- package/dist/admin/user-dialogs.d.ts.map +1 -0
- package/dist/admin/user-dialogs.js +374 -0
- package/dist/admin/user-dialogs.js.map +1 -0
- package/dist/admin/user-role-controller.d.ts +82 -0
- package/dist/admin/user-role-controller.d.ts.map +1 -0
- package/dist/admin/user-role-controller.js +337 -0
- package/dist/admin/user-role-controller.js.map +1 -0
- package/dist/admin/user-role-dialog.d.ts +94 -0
- package/dist/admin/user-role-dialog.d.ts.map +1 -0
- package/dist/admin/user-role-dialog.js +265 -0
- package/dist/admin/user-role-dialog.js.map +1 -0
- package/dist/admin/user-service-types.d.ts +100 -0
- package/dist/admin/user-service-types.d.ts.map +1 -0
- package/dist/admin/user-service-types.js +3 -0
- package/dist/admin/user-service-types.js.map +1 -0
- package/dist/admin/user-service.d.ts +14 -0
- package/dist/admin/user-service.d.ts.map +1 -0
- package/dist/admin/user-service.js +612 -0
- package/dist/admin/user-service.js.map +1 -0
- package/dist/admin/user-state.d.ts +158 -0
- package/dist/admin/user-state.d.ts.map +1 -0
- package/dist/admin/user-state.js +3 -0
- package/dist/admin/user-state.js.map +1 -0
- package/dist/admin/user-workspace.d.ts +65 -0
- package/dist/admin/user-workspace.d.ts.map +1 -0
- package/dist/admin/user-workspace.js +366 -0
- package/dist/admin/user-workspace.js.map +1 -0
- package/dist/auth/browser-flow.d.ts +27 -1
- package/dist/auth/browser-flow.d.ts.map +1 -1
- package/dist/auth/browser-flow.js +55 -33
- package/dist/auth/browser-flow.js.map +1 -1
- package/dist/auth/callback-server.d.ts.map +1 -1
- package/dist/auth/callback-server.js +5 -9
- package/dist/auth/callback-server.js.map +1 -1
- package/dist/auth/id-token-verifier.d.ts +39 -0
- package/dist/auth/id-token-verifier.d.ts.map +1 -0
- package/dist/auth/id-token-verifier.js +104 -0
- package/dist/auth/id-token-verifier.js.map +1 -0
- package/dist/auth/login-coordinator.d.ts +72 -0
- package/dist/auth/login-coordinator.d.ts.map +1 -0
- package/dist/auth/login-coordinator.js +190 -0
- package/dist/auth/login-coordinator.js.map +1 -0
- package/dist/auth/metadata.d.ts +2 -1
- package/dist/auth/metadata.d.ts.map +1 -1
- package/dist/auth/metadata.js +67 -6
- package/dist/auth/metadata.js.map +1 -1
- package/dist/auth/types.d.ts +14 -0
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/client-factory.d.ts.map +1 -1
- package/dist/client-factory.js +15 -2
- package/dist/client-factory.js.map +1 -1
- package/dist/commands/admin.d.ts +22 -0
- package/dist/commands/admin.d.ts.map +1 -0
- package/dist/commands/admin.js +112 -0
- package/dist/commands/admin.js.map +1 -0
- package/dist/commands/app-claim.d.ts.map +1 -1
- package/dist/commands/app-claim.js +11 -4
- package/dist/commands/app-claim.js.map +1 -1
- package/dist/commands/app-module.d.ts.map +1 -1
- package/dist/commands/app-module.js +61 -12
- package/dist/commands/app-module.js.map +1 -1
- package/dist/commands/app-permission.d.ts.map +1 -1
- package/dist/commands/app-permission.js +66 -24
- package/dist/commands/app-permission.js.map +1 -1
- package/dist/commands/app-role.d.ts.map +1 -1
- package/dist/commands/app-role.js +48 -27
- package/dist/commands/app-role.js.map +1 -1
- package/dist/commands/app.d.ts.map +1 -1
- package/dist/commands/app.js +37 -25
- package/dist/commands/app.js.map +1 -1
- package/dist/commands/bulk.d.ts.map +1 -1
- package/dist/commands/bulk.js +9 -2
- package/dist/commands/bulk.js.map +1 -1
- package/dist/commands/client-secret.d.ts.map +1 -1
- package/dist/commands/client-secret.js +12 -6
- package/dist/commands/client-secret.js.map +1 -1
- package/dist/commands/client.d.ts +3 -2
- package/dist/commands/client.d.ts.map +1 -1
- package/dist/commands/client.js +102 -43
- package/dist/commands/client.js.map +1 -1
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +68 -7
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/export.d.ts +6 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +182 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/import.d.ts +6 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +142 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/keys.d.ts.map +1 -1
- package/dist/commands/keys.js +11 -4
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +24 -10
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/org.d.ts +2 -4
- package/dist/commands/org.d.ts.map +1 -1
- package/dist/commands/org.js +16 -76
- package/dist/commands/org.js.map +1 -1
- package/dist/commands/user-role.d.ts.map +1 -1
- package/dist/commands/user-role.js +19 -14
- package/dist/commands/user-role.js.map +1 -1
- package/dist/commands/user.d.ts +3 -2
- package/dist/commands/user.d.ts.map +1 -1
- package/dist/commands/user.js +47 -71
- package/dist/commands/user.js.map +1 -1
- package/dist/commands/version.d.ts +1 -1
- package/dist/commands/version.js +1 -1
- package/dist/credential-lock.d.ts +20 -0
- package/dist/credential-lock.d.ts.map +1 -0
- package/dist/credential-lock.js +130 -0
- package/dist/credential-lock.js.map +1 -0
- package/dist/credential-store.d.ts +14 -0
- package/dist/credential-store.d.ts.map +1 -1
- package/dist/credential-store.js +114 -3
- package/dist/credential-store.js.map +1 -1
- package/dist/error-handler.d.ts.map +1 -1
- package/dist/error-handler.js +2 -0
- package/dist/error-handler.js.map +1 -1
- package/dist/global-options.d.ts +8 -0
- package/dist/global-options.d.ts.map +1 -1
- package/dist/global-options.js +19 -8
- package/dist/global-options.js.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/output.d.ts +11 -0
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +25 -6
- package/dist/output.js.map +1 -1
- package/dist/prompt.d.ts +2 -2
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +27 -7
- package/dist/prompt.js.map +1 -1
- package/package.json +7 -3
- package/dist/commands/gui.d.ts +0 -21
- package/dist/commands/gui.d.ts.map +0 -1
- package/dist/commands/gui.js +0 -67
- package/dist/commands/gui.js.map +0 -1
- package/dist/commands/provision.d.ts +0 -47
- package/dist/commands/provision.d.ts.map +0 -1
- package/dist/commands/provision.js +0 -444
- package/dist/commands/provision.js.map +0 -1
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/** Direct four-tab Layout DSL editor for authoritative operational policy. */
|
|
2
|
+
import { Button, col, ComboBox, cover, Dialog, fixed, Group, grow, Input, Label, row, signal, spacer, TabView, Text, } from '@jsvision/ui';
|
|
3
|
+
import { formatAdminConfigDuration, parseAdminConfigDraft, projectAdminConfigDrafts, setAdminConfigDraft, } from './system-config-state.js';
|
|
4
|
+
/** Shared label width fits the longest approved human field caption. */
|
|
5
|
+
const LABEL_WIDTH = 'Password-reset request window'.length;
|
|
6
|
+
/** Single-line integer inputs leave room for the native value and editing signs. */
|
|
7
|
+
const INPUT_WIDTH = 12;
|
|
8
|
+
/** Non-divisible lifetimes need more cells than the shorter whole-day maximum. */
|
|
9
|
+
const HELP_WIDTH = 'seconds · 300–31536000 · 31535999 seconds · Restart required'.length;
|
|
10
|
+
/** Fitting viewport includes page padding, tab/window borders and menu/status chrome. */
|
|
11
|
+
export const SYSTEM_CONFIG_MINIMUM_SIZE = Object.freeze({
|
|
12
|
+
width: LABEL_WIDTH + INPUT_WIDTH + HELP_WIDTH + 2 + 6 + 2,
|
|
13
|
+
height: 8 + 7 + 2 + 3 + 2 + 3 + 2 + 2,
|
|
14
|
+
});
|
|
15
|
+
/** Modeless frame delegates close and reports compact geometry without a resize framework. */
|
|
16
|
+
class ConfigDialog extends Dialog {
|
|
17
|
+
requestClose;
|
|
18
|
+
geometry;
|
|
19
|
+
/** Builds the full-page frame and its existing maximize behavior. */
|
|
20
|
+
constructor(requestClose, geometry) {
|
|
21
|
+
super({
|
|
22
|
+
title: 'System Configuration',
|
|
23
|
+
width: SYSTEM_CONFIG_MINIMUM_SIZE.width,
|
|
24
|
+
height: SYSTEM_CONFIG_MINIMUM_SIZE.height - 2,
|
|
25
|
+
});
|
|
26
|
+
this.requestClose = requestClose;
|
|
27
|
+
this.geometry = geometry;
|
|
28
|
+
this.resizable = false;
|
|
29
|
+
this.movable = false;
|
|
30
|
+
this.onMount(() => {
|
|
31
|
+
this.zoomable = true;
|
|
32
|
+
if (!this.isZoomed())
|
|
33
|
+
this.zoom();
|
|
34
|
+
this.zoomable = false;
|
|
35
|
+
this.onResized();
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/** Delegates frame closure; busy and dirty checks remain controller-owned. */
|
|
39
|
+
close() {
|
|
40
|
+
this.requestClose();
|
|
41
|
+
}
|
|
42
|
+
/** Changes the owned surface before painting, using the existing window resize hook. */
|
|
43
|
+
onResized() {
|
|
44
|
+
const size = this.currentRect();
|
|
45
|
+
this.geometry(size.width >= SYSTEM_CONFIG_MINIMUM_SIZE.width &&
|
|
46
|
+
size.height >= SYSTEM_CONFIG_MINIMUM_SIZE.height - 2);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/** Builds inline native-unit/range help without converting the stored editor value. */
|
|
50
|
+
function help(entry, raw) {
|
|
51
|
+
const parsed = parseAdminConfigDraft(entry, raw);
|
|
52
|
+
const range = entry.valueType === 'integer'
|
|
53
|
+
? `${entry.minimum}–${entry.maximum}`
|
|
54
|
+
: entry.allowedValues?.join(', ');
|
|
55
|
+
const duration = entry.unit === 'seconds' && typeof parsed === 'number'
|
|
56
|
+
? ` · ${formatAdminConfigDuration(parsed)}`
|
|
57
|
+
: '';
|
|
58
|
+
const invalid = parsed === undefined ? ' · Invalid value' : '';
|
|
59
|
+
const restart = entry.applicationMode === 'restart-required' ? ' · Restart required' : '';
|
|
60
|
+
return `${entry.unit} · ${range}${duration}${invalid}${restart}`;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Creates one direct DSL form with retained raw edits and a persistent footer.
|
|
64
|
+
* Compact geometry removes editable controls but retains immutable drafts and active-tab identity.
|
|
65
|
+
* @param options - Verified capabilities, intent sink and application focus boundary.
|
|
66
|
+
* @returns The modeless window and its state/lifecycle operations.
|
|
67
|
+
* @example createAdminSystemConfigWorkspace({ capabilities, onIntent });
|
|
68
|
+
*/
|
|
69
|
+
export function createAdminSystemConfigWorkspace(options) {
|
|
70
|
+
let state = { kind: 'closed' };
|
|
71
|
+
let fits = true;
|
|
72
|
+
let builtEntries;
|
|
73
|
+
let body;
|
|
74
|
+
let pane;
|
|
75
|
+
let save;
|
|
76
|
+
let cancel;
|
|
77
|
+
const statusMessage = signal('');
|
|
78
|
+
const active = signal(0);
|
|
79
|
+
const inputs = new Map();
|
|
80
|
+
/** Updates retained controls without rebuilding or stealing focus on every keystroke. */
|
|
81
|
+
const refresh = () => {
|
|
82
|
+
if (state.kind !== 'ready')
|
|
83
|
+
return;
|
|
84
|
+
const projection = projectAdminConfigDrafts(state, options.capabilities.canReadConfig && options.capabilities.canUpdateConfig);
|
|
85
|
+
for (const entry of state.entries) {
|
|
86
|
+
const control = inputs.get(entry.key);
|
|
87
|
+
if (!control)
|
|
88
|
+
continue;
|
|
89
|
+
const raw = state.drafts?.[entry.key] ?? String(entry.value);
|
|
90
|
+
if (control.value.peek() !== raw)
|
|
91
|
+
control.value.set(raw);
|
|
92
|
+
if (control.selection && control.selection.peek() !== raw)
|
|
93
|
+
control.selection.set(raw);
|
|
94
|
+
control.help.set(help(entry, raw));
|
|
95
|
+
control.input.state.disabled = !!state.busy;
|
|
96
|
+
if (control.input instanceof ComboBox)
|
|
97
|
+
control.input.input.state.disabled = !!state.busy;
|
|
98
|
+
control.input.invalidate();
|
|
99
|
+
}
|
|
100
|
+
if (save) {
|
|
101
|
+
save.state.disabled = !projection.canSave;
|
|
102
|
+
save.invalidate();
|
|
103
|
+
}
|
|
104
|
+
if (cancel) {
|
|
105
|
+
cancel.state.disabled = !!state.busy;
|
|
106
|
+
cancel.invalidate();
|
|
107
|
+
}
|
|
108
|
+
statusMessage.set(state.message ?? '');
|
|
109
|
+
};
|
|
110
|
+
/** Rebuilds only on catalog replacement or a geometry/state-mode transition. */
|
|
111
|
+
const rebuild = () => {
|
|
112
|
+
if (body)
|
|
113
|
+
window.remove(body);
|
|
114
|
+
inputs.clear();
|
|
115
|
+
pane = undefined;
|
|
116
|
+
save = undefined;
|
|
117
|
+
cancel = undefined;
|
|
118
|
+
statusMessage.set('');
|
|
119
|
+
if (!fits) {
|
|
120
|
+
body = col({ padding: 1 }, new Text('Terminal too small.'), new Text(`Resize to at least ${SYSTEM_CONFIG_MINIMUM_SIZE.width}x${SYSTEM_CONFIG_MINIMUM_SIZE.height}.`));
|
|
121
|
+
}
|
|
122
|
+
else if (state.kind === 'ready') {
|
|
123
|
+
const entries = state.entries;
|
|
124
|
+
const tabs = [
|
|
125
|
+
['lifetimes', 'Lifetimes'],
|
|
126
|
+
['rate-limits', 'Rate limits'],
|
|
127
|
+
['lockout', 'Lockout'],
|
|
128
|
+
['general', 'General'],
|
|
129
|
+
].map(([group, title]) => {
|
|
130
|
+
const rows = entries
|
|
131
|
+
.filter((entry) => entry.group === group)
|
|
132
|
+
.map((entry) => {
|
|
133
|
+
const value = signal(state.kind === 'ready'
|
|
134
|
+
? (state.drafts?.[entry.key] ?? String(entry.value))
|
|
135
|
+
: String(entry.value));
|
|
136
|
+
const selection = entry.valueType === 'string' ? signal(value.peek()) : undefined;
|
|
137
|
+
const input = selection
|
|
138
|
+
? new ComboBox({
|
|
139
|
+
items: signal([...(entry.allowedValues ?? [])]),
|
|
140
|
+
value: selection,
|
|
141
|
+
getText: (locale) => locale,
|
|
142
|
+
editable: false,
|
|
143
|
+
})
|
|
144
|
+
: new Input({ value, maxLength: 32 });
|
|
145
|
+
const hint = signal(help(entry, value.peek()));
|
|
146
|
+
inputs.set(entry.key, { input, value, selection, help: hint });
|
|
147
|
+
input.onMount(() => input.bind(() => (selection ? selection() : value()), (text) => {
|
|
148
|
+
if (state.kind !== 'ready' ||
|
|
149
|
+
state.busy ||
|
|
150
|
+
text === null ||
|
|
151
|
+
text === (state.drafts?.[entry.key] ?? String(entry.value)))
|
|
152
|
+
return;
|
|
153
|
+
state = setAdminConfigDraft(state, entry.key, text);
|
|
154
|
+
refresh();
|
|
155
|
+
options.onIntent({ kind: 'set-draft', key: entry.key, text });
|
|
156
|
+
}));
|
|
157
|
+
return fixed(row({ gap: 1 }, fixed(new Label(entry.label, input instanceof ComboBox ? input.input : input), LABEL_WIDTH), fixed(input, INPUT_WIDTH), fixed(new Text(() => hint()), HELP_WIDTH), spacer()), 1);
|
|
158
|
+
});
|
|
159
|
+
const page = new Group();
|
|
160
|
+
page.add(cover(col({ padding: 1, gap: 1 }, ...rows, spacer())));
|
|
161
|
+
return { title: title ?? '', content: page };
|
|
162
|
+
});
|
|
163
|
+
pane = new TabView({ tabs: signal(tabs), active });
|
|
164
|
+
save = new Button('Save', { onClick: () => options.onIntent({ kind: 'save' }) });
|
|
165
|
+
cancel = new Button('Cancel', { onClick: () => options.onIntent({ kind: 'close' }) });
|
|
166
|
+
body = col({ padding: 1 }, grow(pane), fixed(new Text(() => statusMessage()), 1), fixed(row({ gap: 1, padding: { left: 1, right: 1, top: 0, bottom: 0 }, justify: 'end' }, save, cancel), 2));
|
|
167
|
+
builtEntries = entries;
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
body = col({ padding: 1 }, new Text(state.kind === 'loading'
|
|
171
|
+
? 'Loading configuration…'
|
|
172
|
+
: state.kind === 'failure'
|
|
173
|
+
? 'Could not load configuration.'
|
|
174
|
+
: ''));
|
|
175
|
+
builtEntries = undefined;
|
|
176
|
+
}
|
|
177
|
+
window.add(cover(body));
|
|
178
|
+
refresh();
|
|
179
|
+
};
|
|
180
|
+
const window = new ConfigDialog(() => (options.onClose ? options.onClose() : options.onIntent({ kind: 'close' })), (next) => {
|
|
181
|
+
if (fits === next)
|
|
182
|
+
return;
|
|
183
|
+
fits = next;
|
|
184
|
+
rebuild();
|
|
185
|
+
});
|
|
186
|
+
return {
|
|
187
|
+
content: window,
|
|
188
|
+
setState(next) {
|
|
189
|
+
const oldKind = state.kind;
|
|
190
|
+
state = next;
|
|
191
|
+
if (!body ||
|
|
192
|
+
oldKind !== next.kind ||
|
|
193
|
+
(next.kind === 'ready' && next.entries !== builtEntries))
|
|
194
|
+
rebuild();
|
|
195
|
+
else
|
|
196
|
+
refresh();
|
|
197
|
+
},
|
|
198
|
+
focusCurrent() {
|
|
199
|
+
const page = pane?.tabs.peek()[active.peek()]?.content;
|
|
200
|
+
const entry = state.kind === 'ready'
|
|
201
|
+
? state.entries.find((item) => inputs.get(item.key)?.input.parent?.parent === page)
|
|
202
|
+
: undefined;
|
|
203
|
+
const target = entry ? inputs.get(entry.key)?.input : pane?.strip;
|
|
204
|
+
if (target)
|
|
205
|
+
options.focusView?.(target instanceof ComboBox ? target.input : target);
|
|
206
|
+
},
|
|
207
|
+
clear() {
|
|
208
|
+
state = { kind: 'closed' };
|
|
209
|
+
builtEntries = undefined;
|
|
210
|
+
if (body)
|
|
211
|
+
window.remove(body);
|
|
212
|
+
body = undefined;
|
|
213
|
+
inputs.clear();
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=system-config-workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-config-workspace.js","sourceRoot":"","sources":["../../src/admin/system-config-workspace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/** Public contracts for the selected-organization user workflow controller. */
|
|
2
|
+
import type { View } from '@jsvision/ui';
|
|
3
|
+
import type { AdminApplicationOperations } from './application-service.js';
|
|
4
|
+
import type { AdminRbacOperations } from './rbac-service.js';
|
|
5
|
+
import type { AdminConnectionState } from './state.js';
|
|
6
|
+
import type { AdminUserDialogHost, CreateUserDialogResult, EditUserDialogResult, InviteUserDialogResult, DeleteUserDialogResult, SetUserPasswordDialogResult, UserConfirmationAction, UserConfirmationDialogResult } from './user-dialogs.js';
|
|
7
|
+
import type { AdminInviteUserInput, AdminUserOperations } from './user-service.js';
|
|
8
|
+
import type { AdminUserSelection } from './user-state.js';
|
|
9
|
+
import type { AdminUserWorkspace, AdminUserWorkspaceOptions } from './user-workspace.js';
|
|
10
|
+
/** User-dialog functions used by the controller and replaceable in focused workflow tests. */
|
|
11
|
+
export interface AdminUserControllerDialogs {
|
|
12
|
+
/** Collects create-user input. */
|
|
13
|
+
readonly create: (host: AdminUserDialogHost, signal: AbortSignal) => Promise<CreateUserDialogResult>;
|
|
14
|
+
/** Collects invitation input and supports a safe preview callback. */
|
|
15
|
+
readonly invite: (host: AdminUserDialogHost, signal: AbortSignal, preview: (input: AdminInviteUserInput) => ReturnType<AdminUserOperations['previewInvitation']>) => Promise<InviteUserDialogResult>;
|
|
16
|
+
/** Collects touched profile edits. */
|
|
17
|
+
readonly edit: (host: AdminUserDialogHost, signal: AbortSignal, detail: AdminUserSelection['detail']) => Promise<EditUserDialogResult>;
|
|
18
|
+
/** Collects a matching replacement password. */
|
|
19
|
+
readonly setPassword: (host: AdminUserDialogHost, signal: AbortSignal, email: string) => Promise<SetUserPasswordDialogResult>;
|
|
20
|
+
/** Collects one explicit confirmation. */
|
|
21
|
+
readonly confirm: (host: AdminUserDialogHost, signal: AbortSignal, action: UserConfirmationAction, email: string) => Promise<UserConfirmationDialogResult>;
|
|
22
|
+
/** Collects the irreversible user-deletion decision. */
|
|
23
|
+
readonly delete: (host: AdminUserDialogHost, signal: AbortSignal, organization: Extract<AdminConnectionState, {
|
|
24
|
+
readonly kind: 'authenticated';
|
|
25
|
+
}>['organization'], user: AdminUserSelection['detail']) => Promise<DeleteUserDialogResult>;
|
|
26
|
+
}
|
|
27
|
+
/** Dependencies for one direct user controller. */
|
|
28
|
+
export interface AdminUserControllerOptions {
|
|
29
|
+
/** Existing JSVision modal host. */
|
|
30
|
+
readonly host: AdminUserDialogHost;
|
|
31
|
+
/** Reads the latest application-owned connection and capability state. */
|
|
32
|
+
readonly readState: () => AdminConnectionState;
|
|
33
|
+
/** Reads validated user operations for the current verified session. */
|
|
34
|
+
readonly readOperations: () => AdminUserOperations | undefined;
|
|
35
|
+
/** Reads validated role operations when the selected user opens Roles. */
|
|
36
|
+
readonly readRbacOperations?: () => AdminRbacOperations | undefined;
|
|
37
|
+
/** Reads the global application catalog used to label and choose roles. */
|
|
38
|
+
readonly readApplicationOperations?: () => Pick<AdminApplicationOperations, 'listAll'> | undefined;
|
|
39
|
+
/** Mounts or removes only the user workspace inside the existing presentation. */
|
|
40
|
+
readonly mountWorkspace: (content: View | null) => void;
|
|
41
|
+
/** Reports whether authentication, identity, or organization work owns the modal surface. */
|
|
42
|
+
readonly isApplicationBusy: () => boolean;
|
|
43
|
+
/** Publishes user-dialog ownership to the application. */
|
|
44
|
+
readonly setDialogBusy: (busy: boolean) => void;
|
|
45
|
+
/** Enters the existing authentication flow after a final session failure. */
|
|
46
|
+
readonly requestAuthentication: () => void;
|
|
47
|
+
/** Lets the application gate new mutations until a deliberate read reconciles state. */
|
|
48
|
+
readonly setRecoveryRequired?: (required: boolean) => void;
|
|
49
|
+
/** Focused test seam for constructing the direct user workspace. */
|
|
50
|
+
readonly workspaceFactory?: (options: AdminUserWorkspaceOptions) => AdminUserWorkspace;
|
|
51
|
+
/** Focused test seam for typed user dialogs. */
|
|
52
|
+
readonly dialogs?: Partial<AdminUserControllerDialogs>;
|
|
53
|
+
}
|
|
54
|
+
/** Application-owned user workflow boundary. */
|
|
55
|
+
export interface AdminUserController {
|
|
56
|
+
/** Atomically applies the selected organization and explicit verified-session epoch. */
|
|
57
|
+
readonly syncContext: (state: AdminConnectionState, sessionEpoch: number) => void;
|
|
58
|
+
/** Handles a recognized top-level user command. */
|
|
59
|
+
readonly handleCommand: (command: string) => boolean;
|
|
60
|
+
/** Cancels the current user read, preview, dialog, or mutation ownership. */
|
|
61
|
+
readonly cancelActiveOperation: () => void;
|
|
62
|
+
/** Hides or restores same-context state across recoverable terminal geometry. */
|
|
63
|
+
readonly handleRecoverableGeometry: (recoverable: boolean) => void;
|
|
64
|
+
/** Invalidates all work and removes the user workspace. */
|
|
65
|
+
readonly dispose: () => void;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=user-controller-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-controller-types.d.ts","sourceRoot":"","sources":["../../src/admin/user-controller-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-controller-types.js","sourceRoot":"","sources":["../../src/admin/user-controller-types.ts"],"names":[],"mappings":"AAAA,+EAA+E"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Selected-organization workflow controller for user administration. */
|
|
2
|
+
import type { AdminUserController, AdminUserControllerOptions } from './user-controller-types.js';
|
|
3
|
+
export type { AdminUserController, AdminUserControllerDialogs, AdminUserControllerOptions, } from './user-controller-types.js';
|
|
4
|
+
/** Creates the bounded selected-organization user workflow. */
|
|
5
|
+
export declare function createAdminUserController(options: AdminUserControllerOptions): AdminUserController;
|
|
6
|
+
//# sourceMappingURL=user-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-controller.d.ts","sourceRoot":"","sources":["../../src/admin/user-controller.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAyBzE,OAAO,KAAK,EACV,mBAAmB,EAEnB,0BAA0B,EAC3B,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EACV,mBAAmB,EACnB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,4BAA4B,CAAC;AAgDpC,+DAA+D;AAC/D,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,0BAA0B,GAClC,mBAAmB,CAysBrB"}
|