@portaidentity/cli 1.7.3 → 1.8.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 +5 -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 +484 -0
- package/dist/admin/client-service.js.map +1 -0
- package/dist/admin/client-state.d.ts +157 -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 +484 -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 +87 -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,301 @@
|
|
|
1
|
+
/** Immutable state displayed by the embedded administration shell. */
|
|
2
|
+
import type { VerifiedIdentity } from '../auth/types.js';
|
|
3
|
+
/** Organization actions granted by a freshly verified administration session. */
|
|
4
|
+
export interface AdminCapabilities {
|
|
5
|
+
/** Whether deployment-global operational policy may be inspected. */
|
|
6
|
+
readonly canReadConfig: boolean;
|
|
7
|
+
/** Whether deployment-global operational policy may be updated. */
|
|
8
|
+
readonly canUpdateConfig: boolean;
|
|
9
|
+
/** Whether portability manifests may be exported. */
|
|
10
|
+
readonly canExportData: boolean;
|
|
11
|
+
/** Whether portability manifests may be previewed and imported. */
|
|
12
|
+
readonly canImportData: boolean;
|
|
13
|
+
/** Whether claim definitions and user claim values may be inspected. */
|
|
14
|
+
readonly canReadClaims: boolean;
|
|
15
|
+
/** Whether claim definitions and user claim values may be created. */
|
|
16
|
+
readonly canCreateClaims: boolean;
|
|
17
|
+
/** Whether claim definitions and user claim values may be updated. */
|
|
18
|
+
readonly canUpdateClaims: boolean;
|
|
19
|
+
/** Whether the live identity has the exact control-plane super-admin role. */
|
|
20
|
+
readonly isSuperAdmin: boolean;
|
|
21
|
+
/** Whether organization listing and switching may be offered. */
|
|
22
|
+
readonly canReadOrganizations: boolean;
|
|
23
|
+
/** Whether organization creation may be offered. */
|
|
24
|
+
readonly canCreateOrganizations: boolean;
|
|
25
|
+
/** Whether organization settings and branding may be updated. */
|
|
26
|
+
readonly canUpdateOrganizations: boolean;
|
|
27
|
+
/** Whether organization lifecycle transitions may be performed. */
|
|
28
|
+
readonly canSuspendOrganizations: boolean;
|
|
29
|
+
/** Whether users in the selected organization may be listed and inspected. */
|
|
30
|
+
readonly canReadUsers: boolean;
|
|
31
|
+
/** Whether a user may be created in the selected organization. */
|
|
32
|
+
readonly canCreateUsers: boolean;
|
|
33
|
+
/** Whether an invitation may be sent in the selected organization. */
|
|
34
|
+
readonly canInviteUsers: boolean;
|
|
35
|
+
/** Whether user profiles and credentials may be updated. */
|
|
36
|
+
readonly canUpdateUsers: boolean;
|
|
37
|
+
/** Whether user lifecycle transitions may be performed. */
|
|
38
|
+
readonly canManageUserLifecycle: boolean;
|
|
39
|
+
/** Whether an organization may be permanently deleted. */
|
|
40
|
+
readonly canDeleteOrganizations: boolean;
|
|
41
|
+
/** Whether a user may be permanently deleted. */
|
|
42
|
+
readonly canDeleteUsers: boolean;
|
|
43
|
+
/** Whether global applications and modules may be inspected. */
|
|
44
|
+
readonly canReadApplications: boolean;
|
|
45
|
+
/** Whether a global application may be created. */
|
|
46
|
+
readonly canCreateApplications: boolean;
|
|
47
|
+
/** Whether applications, modules, and application lifecycle may be updated. */
|
|
48
|
+
readonly canUpdateApplications: boolean;
|
|
49
|
+
/** Whether a global application may be permanently deleted. */
|
|
50
|
+
readonly canDeleteApplications: boolean;
|
|
51
|
+
/** Whether an application module may be permanently deleted. */
|
|
52
|
+
readonly canDeleteModules: boolean;
|
|
53
|
+
/** Whether application roles may be listed and inspected. */
|
|
54
|
+
readonly canReadRoles: boolean;
|
|
55
|
+
/** Whether an application role may be created. */
|
|
56
|
+
readonly canCreateRoles: boolean;
|
|
57
|
+
/** Whether role metadata and direct permission mappings may be updated. */
|
|
58
|
+
readonly canUpdateRoles: boolean;
|
|
59
|
+
/** Whether an application role may be permanently deleted. */
|
|
60
|
+
readonly canDeleteRoles: boolean;
|
|
61
|
+
/** Whether application permissions may be listed and inspected. */
|
|
62
|
+
readonly canReadPermissions: boolean;
|
|
63
|
+
/** Whether an application permission may be created. */
|
|
64
|
+
readonly canCreatePermissions: boolean;
|
|
65
|
+
/** Whether mutable permission metadata may be updated. */
|
|
66
|
+
readonly canUpdatePermissions: boolean;
|
|
67
|
+
/** Whether an application permission may be permanently deleted. */
|
|
68
|
+
readonly canDeletePermissions: boolean;
|
|
69
|
+
/** Whether application roles may be assigned to or removed from users. */
|
|
70
|
+
readonly canAssignRoles: boolean;
|
|
71
|
+
/** Whether organization clients and secret metadata may be inspected. */
|
|
72
|
+
readonly canReadClients: boolean;
|
|
73
|
+
/** Whether a client may be created when application read is also granted. */
|
|
74
|
+
readonly canCreateClients: boolean;
|
|
75
|
+
/** Whether client configuration, lifecycle, and secrets may be updated. */
|
|
76
|
+
readonly canUpdateClients: boolean;
|
|
77
|
+
/** Whether clients may be permanently deleted. */
|
|
78
|
+
readonly canDeleteClients: boolean;
|
|
79
|
+
/** Whether nested client secrets may be permanently deleted. */
|
|
80
|
+
readonly canRevokeClientSecrets: boolean;
|
|
81
|
+
}
|
|
82
|
+
/** Login methods that an organization may offer as client-inheritable defaults. */
|
|
83
|
+
export type AdminOrganizationLoginMethod = 'password' | 'magic_link';
|
|
84
|
+
/** Organization-wide second-factor policies supported after password authentication. */
|
|
85
|
+
export type AdminOrganizationTwoFactorPolicy = 'optional' | 'required_email' | 'required_totp' | 'required_any';
|
|
86
|
+
/** Branding image slots managed by the organization workspace. */
|
|
87
|
+
export type AdminOrganizationAssetType = 'logo' | 'favicon';
|
|
88
|
+
/** Validated media types accepted for stored organization branding images. */
|
|
89
|
+
export type AdminOrganizationAssetContentType = 'image/png' | 'image/jpeg' | 'image/webp' | 'image/x-icon' | 'image/vnd.microsoft.icon' | 'image/svg+xml';
|
|
90
|
+
/** Complete organization settings retained by the focused management workspace. */
|
|
91
|
+
export interface AdminOrganizationSettings extends AdminOrganizationContext {
|
|
92
|
+
/** Whether this is the protected control-plane organization. */
|
|
93
|
+
readonly isSuperAdmin: boolean;
|
|
94
|
+
/** Existing locale value, including a valid value not offered by this Admin UI. */
|
|
95
|
+
readonly defaultLocale: string;
|
|
96
|
+
/** Non-empty login methods inherited by eligible OIDC clients. */
|
|
97
|
+
readonly defaultLoginMethods: readonly AdminOrganizationLoginMethod[];
|
|
98
|
+
/** Second-factor policy applied only after password authentication. */
|
|
99
|
+
readonly twoFactorPolicy: AdminOrganizationTwoFactorPolicy;
|
|
100
|
+
/** Optional company name shown by authentication templates. */
|
|
101
|
+
readonly brandingCompanyName: string | null;
|
|
102
|
+
/** Optional six-digit hexadecimal brand color. */
|
|
103
|
+
readonly brandingPrimaryColor: string | null;
|
|
104
|
+
/** Optional external logo used when no uploaded logo exists. */
|
|
105
|
+
readonly brandingLogoUrl: string | null;
|
|
106
|
+
/** Optional external favicon used when no uploaded favicon exists. */
|
|
107
|
+
readonly brandingFaviconUrl: string | null;
|
|
108
|
+
/** Creation timestamp displayed through the shared UTC formatter. */
|
|
109
|
+
readonly createdAt: string;
|
|
110
|
+
/** Most recent update timestamp displayed through the shared UTC formatter. */
|
|
111
|
+
readonly updatedAt: string;
|
|
112
|
+
}
|
|
113
|
+
/** Validated metadata for one stored organization branding image. */
|
|
114
|
+
export interface AdminOrganizationAsset {
|
|
115
|
+
/** Branding slot occupied by this image. */
|
|
116
|
+
readonly assetType: AdminOrganizationAssetType;
|
|
117
|
+
/** Media type confirmed by server validation. */
|
|
118
|
+
readonly contentType: AdminOrganizationAssetContentType;
|
|
119
|
+
/** Number of decoded bytes stored by the server. */
|
|
120
|
+
readonly size: number;
|
|
121
|
+
/** Most recent replacement timestamp. */
|
|
122
|
+
readonly updatedAt: string;
|
|
123
|
+
}
|
|
124
|
+
/** Editable Overview fields sent without an ETag precondition. */
|
|
125
|
+
export interface AdminOrganizationOverviewInput {
|
|
126
|
+
/** Changed organization name. */
|
|
127
|
+
readonly name?: string;
|
|
128
|
+
/** Changed default locale. */
|
|
129
|
+
readonly defaultLocale?: string;
|
|
130
|
+
}
|
|
131
|
+
/** Tabs whose operation controls have independent pending ownership. */
|
|
132
|
+
export type AdminOrganizationWorkspaceTab = 'overview' | 'authentication' | 'branding';
|
|
133
|
+
/** Closed set of user actions emitted by the organization workspace. */
|
|
134
|
+
export type AdminOrganizationIntent = {
|
|
135
|
+
readonly kind: 'save-overview';
|
|
136
|
+
readonly input: AdminOrganizationOverviewInput;
|
|
137
|
+
} | {
|
|
138
|
+
readonly kind: 'activate' | 'suspend';
|
|
139
|
+
} | {
|
|
140
|
+
readonly kind: 'save-authentication';
|
|
141
|
+
readonly loginMethods: readonly AdminOrganizationLoginMethod[];
|
|
142
|
+
readonly twoFactorPolicy: AdminOrganizationTwoFactorPolicy;
|
|
143
|
+
} | {
|
|
144
|
+
readonly kind: 'save-branding';
|
|
145
|
+
readonly input: {
|
|
146
|
+
readonly companyName?: string | null;
|
|
147
|
+
readonly primaryColor?: string | null;
|
|
148
|
+
readonly logoUrl?: string | null;
|
|
149
|
+
readonly faviconUrl?: string | null;
|
|
150
|
+
};
|
|
151
|
+
} | {
|
|
152
|
+
readonly kind: 'upload-asset' | 'remove-asset';
|
|
153
|
+
readonly assetType: AdminOrganizationAssetType;
|
|
154
|
+
};
|
|
155
|
+
/** Fixed workspace failure categories that are safe to render. */
|
|
156
|
+
export type AdminOrganizationWorkspaceFailureKind = AdminOrganizationFailureKind | 'file-type' | 'file-size' | 'file-read';
|
|
157
|
+
/** Sanitized read result returned by organization workspace operations. */
|
|
158
|
+
export type AdminOrganizationWorkspaceReadResult<T> = {
|
|
159
|
+
readonly kind: 'success';
|
|
160
|
+
readonly value: T;
|
|
161
|
+
} | {
|
|
162
|
+
readonly kind: 'session-invalid';
|
|
163
|
+
} | {
|
|
164
|
+
readonly kind: 'failure';
|
|
165
|
+
readonly failure: AdminOrganizationWorkspaceFailureKind;
|
|
166
|
+
};
|
|
167
|
+
/** Sanitized mutation result that distinguishes an unknown network outcome. */
|
|
168
|
+
export type AdminOrganizationWorkspaceMutationResult = {
|
|
169
|
+
readonly kind: 'success';
|
|
170
|
+
} | {
|
|
171
|
+
readonly kind: 'session-invalid';
|
|
172
|
+
} | {
|
|
173
|
+
readonly kind: 'cancelled';
|
|
174
|
+
} | {
|
|
175
|
+
readonly kind: 'outcome-unknown';
|
|
176
|
+
} | {
|
|
177
|
+
readonly kind: 'failure';
|
|
178
|
+
readonly failure: AdminOrganizationWorkspaceFailureKind;
|
|
179
|
+
};
|
|
180
|
+
/** Authoritative organization data retained beneath transient workspace states. */
|
|
181
|
+
export interface AdminOrganizationWorkspaceProjection {
|
|
182
|
+
/** Complete validated organization settings. */
|
|
183
|
+
readonly organization: AdminOrganizationSettings;
|
|
184
|
+
/** Complete validated logo and favicon metadata collection. */
|
|
185
|
+
readonly assets: readonly AdminOrganizationAsset[];
|
|
186
|
+
}
|
|
187
|
+
/** Complete state rendered by the selected-organization management workspace. */
|
|
188
|
+
export type AdminOrganizationWorkspaceState = {
|
|
189
|
+
readonly kind: 'closed';
|
|
190
|
+
} | {
|
|
191
|
+
readonly kind: 'loading';
|
|
192
|
+
readonly previous?: AdminOrganizationWorkspaceProjection;
|
|
193
|
+
} | ({
|
|
194
|
+
readonly kind: 'ready';
|
|
195
|
+
readonly pendingTabs?: readonly AdminOrganizationWorkspaceTab[];
|
|
196
|
+
/** Tab whose last completed mutation succeeded after authoritative reload. */
|
|
197
|
+
readonly savedTab?: AdminOrganizationWorkspaceTab;
|
|
198
|
+
/** Tab that owns the current fixed failure feedback. */
|
|
199
|
+
readonly feedbackTab?: AdminOrganizationWorkspaceTab;
|
|
200
|
+
readonly failure?: AdminOrganizationWorkspaceFailureKind;
|
|
201
|
+
readonly reloadedAfterFailure?: boolean;
|
|
202
|
+
} & AdminOrganizationWorkspaceProjection) | ({
|
|
203
|
+
readonly kind: 'failure';
|
|
204
|
+
readonly failure: AdminOrganizationWorkspaceFailureKind;
|
|
205
|
+
} & Partial<AdminOrganizationWorkspaceProjection>);
|
|
206
|
+
/** The bounded organization projection retained by the terminal application. */
|
|
207
|
+
export interface AdminOrganizationContext {
|
|
208
|
+
/** Stable organization UUID. */
|
|
209
|
+
readonly id: string;
|
|
210
|
+
/** Control-free organization display name. */
|
|
211
|
+
readonly name: string;
|
|
212
|
+
/** Canonical organization slug. */
|
|
213
|
+
readonly slug: string;
|
|
214
|
+
/** Current organization lifecycle state. */
|
|
215
|
+
readonly status: 'active' | 'suspended';
|
|
216
|
+
/** Whether this is the undeletable control-plane organization. */
|
|
217
|
+
readonly isSuperAdmin?: boolean;
|
|
218
|
+
}
|
|
219
|
+
/** Fixed organization failure categories safe to expose in the terminal. */
|
|
220
|
+
export type AdminOrganizationFailureKind = 'validation' | 'unauthorized' | 'conflict' | 'unavailable' | 'invalid-response';
|
|
221
|
+
/** Sanitized result returned by organization list and create operations. */
|
|
222
|
+
export type AdminOrganizationResult<T> = {
|
|
223
|
+
/** Successful-result discriminator. */
|
|
224
|
+
readonly kind: 'success';
|
|
225
|
+
/** Sanitized operation value. */
|
|
226
|
+
readonly value: T;
|
|
227
|
+
} | {
|
|
228
|
+
/** Indicates that the verified session must be re-established. */
|
|
229
|
+
readonly kind: 'session-invalid';
|
|
230
|
+
} | {
|
|
231
|
+
/** Fixed-failure discriminator. */
|
|
232
|
+
readonly kind: 'failure';
|
|
233
|
+
/** Safe category suitable for terminal presentation. */
|
|
234
|
+
readonly failure: AdminOrganizationFailureKind;
|
|
235
|
+
};
|
|
236
|
+
/** Sanitized outcome of refreshing a previously selected organization. */
|
|
237
|
+
export type AdminOrganizationReconciliation = {
|
|
238
|
+
/** Valid-match discriminator. */
|
|
239
|
+
readonly kind: 'match';
|
|
240
|
+
/** Refreshed organization projection. */
|
|
241
|
+
readonly organization: AdminOrganizationContext;
|
|
242
|
+
} | {
|
|
243
|
+
/** Indicates that the selected UUID is no longer present. */
|
|
244
|
+
readonly kind: 'absent';
|
|
245
|
+
} | {
|
|
246
|
+
/** Indicates that the selected row exists but is malformed. */
|
|
247
|
+
readonly kind: 'matching-invalid';
|
|
248
|
+
} | {
|
|
249
|
+
/** Indicates that the verified session must be re-established. */
|
|
250
|
+
readonly kind: 'session-invalid';
|
|
251
|
+
} | {
|
|
252
|
+
/** Fixed-failure discriminator. */
|
|
253
|
+
readonly kind: 'failure';
|
|
254
|
+
/** Safe category suitable for terminal presentation. */
|
|
255
|
+
readonly failure: AdminOrganizationFailureKind;
|
|
256
|
+
};
|
|
257
|
+
/** Failure categories safe to expose inside a terminal frame. */
|
|
258
|
+
export type AdminFailureKind = 'unavailable' | 'unauthenticated' | 'unauthorized' | 'configuration-failure' | 'storage-failure';
|
|
259
|
+
/** A bounded failure value that never carries remote or internal detail. */
|
|
260
|
+
export interface AdminPublicFailure {
|
|
261
|
+
/** Safe category used to choose a fixed user-facing message. */
|
|
262
|
+
readonly kind: AdminFailureKind;
|
|
263
|
+
}
|
|
264
|
+
/** Complete connection state for one administration application. */
|
|
265
|
+
export type AdminConnectionState = {
|
|
266
|
+
readonly kind: 'selecting-server';
|
|
267
|
+
} | {
|
|
268
|
+
readonly kind: 'unauthenticated';
|
|
269
|
+
readonly server: URL;
|
|
270
|
+
readonly reason?: AdminFailureKind;
|
|
271
|
+
} | {
|
|
272
|
+
readonly kind: 'authenticating';
|
|
273
|
+
readonly server: URL;
|
|
274
|
+
readonly canCancel: true;
|
|
275
|
+
} | {
|
|
276
|
+
readonly kind: 'verifying';
|
|
277
|
+
readonly server: URL;
|
|
278
|
+
readonly canCancel: true;
|
|
279
|
+
} | {
|
|
280
|
+
readonly kind: 'authenticated';
|
|
281
|
+
readonly server: URL;
|
|
282
|
+
readonly identity: VerifiedIdentity;
|
|
283
|
+
/** Organization actions derived from the current live UserInfo response. */
|
|
284
|
+
readonly capabilities: AdminCapabilities;
|
|
285
|
+
/** Organization currently selected for administration, when one has been chosen. */
|
|
286
|
+
readonly organization?: AdminOrganizationContext;
|
|
287
|
+
/** Most recent fixed organization-operation failure, when presentation is required. */
|
|
288
|
+
readonly organizationFailure?: AdminOrganizationFailureKind;
|
|
289
|
+
} | {
|
|
290
|
+
readonly kind: 'unauthorized';
|
|
291
|
+
readonly server: URL;
|
|
292
|
+
readonly identity: VerifiedIdentity;
|
|
293
|
+
} | {
|
|
294
|
+
readonly kind: 'fatal';
|
|
295
|
+
readonly failure: AdminPublicFailure;
|
|
296
|
+
};
|
|
297
|
+
/** Returns true only when Retry can safely repeat a transient operation. */
|
|
298
|
+
export declare function canRetryAdminState(state: AdminConnectionState): boolean;
|
|
299
|
+
/** Returns the normalized server carried by a connection state, if present. */
|
|
300
|
+
export declare function adminStateServer(state: AdminConnectionState): URL | undefined;
|
|
301
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/admin/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Immutable state displayed by the embedded administration shell. */
|
|
2
|
+
/** Returns true only when Retry can safely repeat a transient operation. */
|
|
3
|
+
export function canRetryAdminState(state) {
|
|
4
|
+
return state.kind === 'unauthenticated' && state.reason === 'unavailable';
|
|
5
|
+
}
|
|
6
|
+
/** Returns the normalized server carried by a connection state, if present. */
|
|
7
|
+
export function adminStateServer(state) {
|
|
8
|
+
return 'server' in state ? state.server : undefined;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/admin/state.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAgUtE,4EAA4E;AAC5E,MAAM,UAAU,kBAAkB,CAAC,KAA2B;IAC5D,OAAO,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,MAAM,KAAK,aAAa,CAAC;AAC5E,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,KAA2B;IAC1D,OAAO,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { EventLoop, ModalDialogHost, View } from '@jsvision/ui';
|
|
2
|
+
import type { AdminConnectionState } from './state.js';
|
|
3
|
+
import type { AdminSystemConfigOperations } from './system-config-service.js';
|
|
4
|
+
import type { AdminSystemConfigIntent } from './system-config-state.js';
|
|
5
|
+
/** Stable top-level configuration command shared with presentation. */
|
|
6
|
+
export declare const SYSTEM_CONFIG_COMMAND = "system-config";
|
|
7
|
+
/** Existing application host with direct focus restoration. */
|
|
8
|
+
export interface AdminSystemConfigControllerHost extends ModalDialogHost {
|
|
9
|
+
/** Focus operations supplied by the existing terminal event loop. */
|
|
10
|
+
readonly loop: ModalDialogHost['loop'] & Pick<EventLoop, 'focusView' | 'getFocused'>;
|
|
11
|
+
}
|
|
12
|
+
/** Focused dependencies; no shared form framework or mutation retries. */
|
|
13
|
+
export interface AdminSystemConfigControllerOptions {
|
|
14
|
+
/** Existing modal and focus host. */
|
|
15
|
+
readonly host: AdminSystemConfigControllerHost;
|
|
16
|
+
/** Reads the currently verified session. */
|
|
17
|
+
readonly readState: () => AdminConnectionState;
|
|
18
|
+
/** Reads session-bound configuration operations. */
|
|
19
|
+
readonly readOperations: () => AdminSystemConfigOperations | undefined;
|
|
20
|
+
/** Mounts or removes only this feature's window. */
|
|
21
|
+
readonly mountWorkspace: (content: View | null) => void;
|
|
22
|
+
/** Re-enters authentication after the server rejects the current session. */
|
|
23
|
+
readonly requestAuthentication?: () => void;
|
|
24
|
+
/** Refreshes command availability when the window opens. */
|
|
25
|
+
readonly onWorkspaceOpened?: () => void;
|
|
26
|
+
/** Refreshes command availability when the window closes. */
|
|
27
|
+
readonly onWorkspaceClosed?: () => void;
|
|
28
|
+
/** Existing confirmation boundary, injectable for deterministic external interaction. */
|
|
29
|
+
readonly dialogs?: {
|
|
30
|
+
readonly confirmDiscard: () => Promise<boolean>;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** Application-owned configuration lifecycle. */
|
|
34
|
+
export interface AdminSystemConfigController {
|
|
35
|
+
/** Applies the verified-session ownership epoch. */
|
|
36
|
+
readonly syncContext: (state: AdminConnectionState, epoch: number) => void;
|
|
37
|
+
/** Opens the workspace for the stable command. */
|
|
38
|
+
readonly handleCommand: (command: string) => boolean;
|
|
39
|
+
/** Handles one closed draft/save/close intent. */
|
|
40
|
+
readonly handleIntent: (intent: AdminSystemConfigIntent) => void;
|
|
41
|
+
/** Reports whether this controller owns a window. */
|
|
42
|
+
readonly isOpen: () => boolean;
|
|
43
|
+
/** Requests ordinary clean/dirty closure. */
|
|
44
|
+
readonly close: () => void;
|
|
45
|
+
/** Releases local ownership after logout, shutdown or session replacement. */
|
|
46
|
+
readonly cancelActiveOperation: () => void;
|
|
47
|
+
/** Permanently releases this controller and any mounted window. */
|
|
48
|
+
readonly dispose: () => void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Creates a direct controller that ignores late results after session ownership is released.
|
|
52
|
+
* Releasing a local result does not claim that a server mutation was cancelled.
|
|
53
|
+
* @param options - Existing host, verified session, operations and workspace mounting boundary.
|
|
54
|
+
* @returns Reusable configuration controller.
|
|
55
|
+
* @example createAdminSystemConfigController({ host, readState, readOperations, mountWorkspace });
|
|
56
|
+
*/
|
|
57
|
+
export declare function createAdminSystemConfigController(options: AdminSystemConfigControllerOptions): AdminSystemConfigController;
|
|
58
|
+
//# sourceMappingURL=system-config-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-config-controller.d.ts","sourceRoot":"","sources":["../../src/admin/system-config-controller.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,KAAK,EACV,uBAAuB,EAExB,MAAM,0BAA0B,CAAC;AAIlC,uEAAuE;AACvE,eAAO,MAAM,qBAAqB,kBAAkB,CAAC;AAErD,+DAA+D;AAC/D,MAAM,WAAW,+BAAgC,SAAQ,eAAe;IACtE,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,YAAY,CAAC,CAAC;CACtF;AACD,0EAA0E;AAC1E,MAAM,WAAW,kCAAkC;IACjD,qCAAqC;IACrC,QAAQ,CAAC,IAAI,EAAE,+BAA+B,CAAC;IAC/C,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,oBAAoB,CAAC;IAC/C,oDAAoD;IACpD,QAAQ,CAAC,cAAc,EAAE,MAAM,2BAA2B,GAAG,SAAS,CAAC;IACvE,oDAAoD;IACpD,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IACxD,6EAA6E;IAC7E,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5C,4DAA4D;IAC5D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IACxC,6DAA6D;IAC7D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IACxC,yFAAyF;IACzF,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;CACxE;AACD,iDAAiD;AACjD,MAAM,WAAW,2BAA2B;IAC1C,oDAAoD;IACpD,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,kDAAkD;IAClD,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD,kDAAkD;IAClD,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACjE,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC;IAC/B,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAC3C,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,kCAAkC,GAC1C,2BAA2B,CA2L7B"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/** Direct operation ownership for the terminal configuration workspace. */
|
|
2
|
+
import { confirm } from '@jsvision/ui';
|
|
3
|
+
import { projectAdminConfigDrafts, setAdminConfigDraft } from './system-config-state.js';
|
|
4
|
+
import { createAdminSystemConfigWorkspace } from './system-config-workspace.js';
|
|
5
|
+
/** Stable top-level configuration command shared with presentation. */
|
|
6
|
+
export const SYSTEM_CONFIG_COMMAND = 'system-config';
|
|
7
|
+
/**
|
|
8
|
+
* Creates a direct controller that ignores late results after session ownership is released.
|
|
9
|
+
* Releasing a local result does not claim that a server mutation was cancelled.
|
|
10
|
+
* @param options - Existing host, verified session, operations and workspace mounting boundary.
|
|
11
|
+
* @returns Reusable configuration controller.
|
|
12
|
+
* @example createAdminSystemConfigController({ host, readState, readOperations, mountWorkspace });
|
|
13
|
+
*/
|
|
14
|
+
export function createAdminSystemConfigController(options) {
|
|
15
|
+
let workspace;
|
|
16
|
+
let state = { kind: 'closed' };
|
|
17
|
+
let context;
|
|
18
|
+
let generation = 0;
|
|
19
|
+
let disposed = false;
|
|
20
|
+
let previousFocus = null;
|
|
21
|
+
/** Publishes one immutable projection without changing editor identity. */
|
|
22
|
+
const publish = (next) => {
|
|
23
|
+
state = next;
|
|
24
|
+
workspace?.setState(next);
|
|
25
|
+
};
|
|
26
|
+
/** Releases ownership so delayed remote results cannot remount protected content. */
|
|
27
|
+
const release = () => {
|
|
28
|
+
generation++;
|
|
29
|
+
if (!workspace)
|
|
30
|
+
return;
|
|
31
|
+
workspace.clear();
|
|
32
|
+
workspace = undefined;
|
|
33
|
+
state = { kind: 'closed' };
|
|
34
|
+
options.mountWorkspace(null);
|
|
35
|
+
if (previousFocus?.mounted)
|
|
36
|
+
options.host.loop.focusView(previousFocus);
|
|
37
|
+
previousFocus = null;
|
|
38
|
+
options.onWorkspaceClosed?.();
|
|
39
|
+
};
|
|
40
|
+
/** Only a live readable session may operate this global feature. */
|
|
41
|
+
const authority = () => {
|
|
42
|
+
const current = options.readState();
|
|
43
|
+
return current.kind === 'authenticated' &&
|
|
44
|
+
'canReadConfig' in current.capabilities &&
|
|
45
|
+
current.capabilities.canReadConfig === true
|
|
46
|
+
? current
|
|
47
|
+
: undefined;
|
|
48
|
+
};
|
|
49
|
+
/** Converts an unexpected external throw to fixed safe feedback, never exception text. */
|
|
50
|
+
const load = async (owner) => {
|
|
51
|
+
try {
|
|
52
|
+
const result = await options.readOperations()?.listConfig();
|
|
53
|
+
if (disposed || owner !== generation || !workspace)
|
|
54
|
+
return;
|
|
55
|
+
if (result?.kind === 'session-invalid') {
|
|
56
|
+
release();
|
|
57
|
+
options.requestAuthentication?.();
|
|
58
|
+
}
|
|
59
|
+
else if (result?.kind === 'success') {
|
|
60
|
+
publish({ kind: 'ready', entries: result.value });
|
|
61
|
+
workspace?.focusCurrent();
|
|
62
|
+
}
|
|
63
|
+
else
|
|
64
|
+
publish({
|
|
65
|
+
kind: 'failure',
|
|
66
|
+
failure: result?.kind === 'failure' ? result.failure : 'unavailable',
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
if (!disposed && owner === generation && workspace)
|
|
71
|
+
publish({ kind: 'failure', failure: 'unavailable' });
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
/** Saves one batch and reloads once, preserving drafts whenever the outcome is uncertain. */
|
|
75
|
+
const save = async () => {
|
|
76
|
+
const current = authority();
|
|
77
|
+
const operations = options.readOperations();
|
|
78
|
+
if (!current || !operations || state.kind !== 'ready')
|
|
79
|
+
return;
|
|
80
|
+
const projection = projectAdminConfigDrafts(state, 'canUpdateConfig' in current.capabilities && current.capabilities.canUpdateConfig === true);
|
|
81
|
+
if (!projection.canSave)
|
|
82
|
+
return;
|
|
83
|
+
const original = state;
|
|
84
|
+
const owner = generation;
|
|
85
|
+
publish({ ...original, busy: true });
|
|
86
|
+
try {
|
|
87
|
+
const result = await operations.setConfigMany(projection.values);
|
|
88
|
+
if (disposed || owner !== generation || !workspace)
|
|
89
|
+
return;
|
|
90
|
+
if (result.kind === 'session-invalid') {
|
|
91
|
+
release();
|
|
92
|
+
options.requestAuthentication?.();
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (result.kind === 'failure') {
|
|
96
|
+
publish({ ...original, busy: false, message: 'Could not save configuration.' });
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const reloaded = await operations.listConfig();
|
|
100
|
+
if (disposed || owner !== generation || !workspace)
|
|
101
|
+
return;
|
|
102
|
+
if (reloaded.kind === 'session-invalid') {
|
|
103
|
+
release();
|
|
104
|
+
options.requestAuthentication?.();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (result.kind === 'success' && reloaded.kind === 'success') {
|
|
108
|
+
publish({
|
|
109
|
+
kind: 'ready',
|
|
110
|
+
entries: reloaded.value,
|
|
111
|
+
restartRequired: result.restartRequired,
|
|
112
|
+
message: result.restartRequired
|
|
113
|
+
? 'Saved. Restart every Porta server instance to apply these changes.'
|
|
114
|
+
: 'Configuration saved.',
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
publish({
|
|
119
|
+
...original,
|
|
120
|
+
...(reloaded.kind === 'success' ? { entries: reloaded.value } : {}),
|
|
121
|
+
busy: false,
|
|
122
|
+
message: 'Could not confirm the saved configuration. Review the displayed values.',
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
if (!disposed && owner === generation && workspace)
|
|
128
|
+
publish({ ...original, busy: false, message: 'Could not save configuration.' });
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
/** Dirty closure asks once; busy operations block duplicate close requests. */
|
|
132
|
+
const requestClose = async () => {
|
|
133
|
+
if (!workspace || (state.kind === 'ready' && state.busy))
|
|
134
|
+
return;
|
|
135
|
+
if (state.kind !== 'ready' || !projectAdminConfigDrafts(state, false).dirtyKeys.length) {
|
|
136
|
+
release();
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const original = state;
|
|
140
|
+
const owner = generation;
|
|
141
|
+
publish({ ...original, busy: true });
|
|
142
|
+
try {
|
|
143
|
+
const discard = await (options.dialogs?.confirmDiscard() ??
|
|
144
|
+
confirm(options.host, 'Discard unsaved changes?'));
|
|
145
|
+
if (disposed || owner !== generation || !workspace)
|
|
146
|
+
return;
|
|
147
|
+
if (discard)
|
|
148
|
+
release();
|
|
149
|
+
else {
|
|
150
|
+
publish(original);
|
|
151
|
+
workspace.focusCurrent();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
if (!disposed && owner === generation && workspace)
|
|
156
|
+
publish(original);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
const handleIntent = (intent) => {
|
|
160
|
+
if (disposed || !workspace)
|
|
161
|
+
return;
|
|
162
|
+
if (intent.kind === 'close')
|
|
163
|
+
void requestClose();
|
|
164
|
+
else if (intent.kind === 'save')
|
|
165
|
+
void save();
|
|
166
|
+
else if (intent.kind === 'set-draft' && state.kind === 'ready')
|
|
167
|
+
publish(setAdminConfigDraft(state, intent.key, intent.text));
|
|
168
|
+
};
|
|
169
|
+
return {
|
|
170
|
+
syncContext(current, epoch) {
|
|
171
|
+
const next = current.kind === 'authenticated' &&
|
|
172
|
+
'canReadConfig' in current.capabilities &&
|
|
173
|
+
current.capabilities.canReadConfig === true
|
|
174
|
+
? `${epoch}:${current.identity.sub}`
|
|
175
|
+
: undefined;
|
|
176
|
+
if (next !== context) {
|
|
177
|
+
release();
|
|
178
|
+
context = next;
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
handleCommand(command) {
|
|
182
|
+
if (command !== SYSTEM_CONFIG_COMMAND || disposed)
|
|
183
|
+
return false;
|
|
184
|
+
const current = authority();
|
|
185
|
+
if (!current || !options.readOperations())
|
|
186
|
+
return true;
|
|
187
|
+
if (workspace) {
|
|
188
|
+
workspace.focusCurrent();
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
previousFocus = options.host.loop.getFocused();
|
|
192
|
+
workspace = createAdminSystemConfigWorkspace({
|
|
193
|
+
capabilities: {
|
|
194
|
+
canReadConfig: true,
|
|
195
|
+
canUpdateConfig: 'canUpdateConfig' in current.capabilities &&
|
|
196
|
+
current.capabilities.canUpdateConfig === true,
|
|
197
|
+
},
|
|
198
|
+
onIntent: handleIntent,
|
|
199
|
+
focusView: (view) => options.host.loop.focusView(view),
|
|
200
|
+
onClose: () => void requestClose(),
|
|
201
|
+
});
|
|
202
|
+
options.onWorkspaceOpened?.();
|
|
203
|
+
publish({ kind: 'loading' });
|
|
204
|
+
options.mountWorkspace(workspace.content);
|
|
205
|
+
void load(generation);
|
|
206
|
+
return true;
|
|
207
|
+
},
|
|
208
|
+
handleIntent,
|
|
209
|
+
isOpen: () => !!workspace,
|
|
210
|
+
close: () => void requestClose(),
|
|
211
|
+
cancelActiveOperation: release,
|
|
212
|
+
dispose() {
|
|
213
|
+
disposed = true;
|
|
214
|
+
release();
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=system-config-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-config-controller.js","sourceRoot":"","sources":["../../src/admin/system-config-controller.ts"],"names":[],"mappings":"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"}
|