@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,545 @@
|
|
|
1
|
+
/** Shell composition for the global application and selected-organization client workspaces. */
|
|
2
|
+
import { showApplicationLifecycleDialog, showCreateApplicationDialog, showCreateModuleDialog, showDeleteApplicationDialog, showDeleteModuleDialog, showEditApplicationDialog, showEditModuleDialog, showModuleDeactivationDialog, } from './application-dialogs.js';
|
|
3
|
+
import { createAdminApplicationController } from './application-controller.js';
|
|
4
|
+
import { createAdminApplicationRbacFeatures } from './application-rbac-features.js';
|
|
5
|
+
import { createAdminApplicationWorkspace } from './application-workspace.js';
|
|
6
|
+
import { buildAuthenticationUrlUpdate, showAuthenticationUrlDialog, showDeleteAuthenticationUrlDialog, showClientLifecycleDialog, showDeleteClientDialog, showEditClientNameDialog, showGenerateClientSecretDialog, showClientRegistrationDialog, showOneTimeClientSecretDialog, showRevokeClientSecretDialog, } from './client-dialogs.js';
|
|
7
|
+
import { createAdminClientController } from './client-controller.js';
|
|
8
|
+
import { createAdminClientWorkspace } from './client-workspace.js';
|
|
9
|
+
import { ADMIN_COMMANDS } from './presentation.js';
|
|
10
|
+
/** Creates the small feature-specific composition used by the existing shell. */
|
|
11
|
+
export function createAdminApplicationClientFeatures(options) {
|
|
12
|
+
let applicationState = { kind: 'closed' };
|
|
13
|
+
let clientState = { kind: 'closed' };
|
|
14
|
+
let applicationWorkspace;
|
|
15
|
+
let clientWorkspace;
|
|
16
|
+
let activeWorkspace;
|
|
17
|
+
let dialogController;
|
|
18
|
+
let dialogGeneration = 0;
|
|
19
|
+
let workflowGeneration = 0;
|
|
20
|
+
let clientCreationOwner;
|
|
21
|
+
let synchronizedSessionEpoch = -1;
|
|
22
|
+
let synchronizedOrganizationId;
|
|
23
|
+
let hasSynchronizedContext = false;
|
|
24
|
+
let disposed = false;
|
|
25
|
+
/** Returns the complete currently validated global application catalog. */
|
|
26
|
+
const applications = () => 'applications' in applicationState ? applicationState.applications : [];
|
|
27
|
+
/** Returns the selected application detail only when it is currently retained. */
|
|
28
|
+
const selectedApplication = () => applicationState.kind === 'detail' ? applicationState.application : undefined;
|
|
29
|
+
/** Returns the selected client detail or secret projection. */
|
|
30
|
+
const selectedClient = () => clientState.kind === 'detail' || clientState.kind === 'secrets'
|
|
31
|
+
? clientState.client
|
|
32
|
+
: undefined;
|
|
33
|
+
/** Returns one selected client's metadata-only secret. */
|
|
34
|
+
const selectedSecret = (secretId) => clientState.kind === 'secrets'
|
|
35
|
+
? clientState.secrets.find((secret) => secret.id === secretId)
|
|
36
|
+
: undefined;
|
|
37
|
+
/** Publishes application state and repaints only when that workspace is active. */
|
|
38
|
+
const publishApplicationState = (state) => {
|
|
39
|
+
applicationState = state;
|
|
40
|
+
applicationWorkspace?.setState(state);
|
|
41
|
+
applicationRbacFeatures?.syncApplication();
|
|
42
|
+
if (activeWorkspace === 'applications')
|
|
43
|
+
applicationWorkspace?.focusCurrent();
|
|
44
|
+
};
|
|
45
|
+
/** Publishes client state and repaints only when that workspace is active. */
|
|
46
|
+
const publishClientState = (state) => {
|
|
47
|
+
clientState = state;
|
|
48
|
+
clientWorkspace?.setState(state);
|
|
49
|
+
if (activeWorkspace === 'clients')
|
|
50
|
+
clientWorkspace?.focusCurrent();
|
|
51
|
+
};
|
|
52
|
+
const applicationController = createAdminApplicationController({
|
|
53
|
+
readState: options.readState,
|
|
54
|
+
readOperations: () => options.readSession()?.applications,
|
|
55
|
+
publishState: publishApplicationState,
|
|
56
|
+
requestAuthentication: options.requestAuthentication,
|
|
57
|
+
});
|
|
58
|
+
const clientController = createAdminClientController({
|
|
59
|
+
readState: options.readState,
|
|
60
|
+
readOperations: () => options.readSession()?.clients,
|
|
61
|
+
publishState: publishClientState,
|
|
62
|
+
resolveApplicationName: (applicationId) => applications().find((application) => application.id === applicationId)?.name,
|
|
63
|
+
presentSecret: async (secret, signal) => {
|
|
64
|
+
options.setDialogBusy(true);
|
|
65
|
+
try {
|
|
66
|
+
await showOneTimeClientSecretDialog(options.dialogs.host, signal, {
|
|
67
|
+
clientName: secret.clientName,
|
|
68
|
+
clientId: secret.oidcClientId,
|
|
69
|
+
label: secret.label,
|
|
70
|
+
plaintext: secret.plaintext,
|
|
71
|
+
expiresAt: secret.expiresAt,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
options.setDialogBusy(false);
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
requestAuthentication: options.requestAuthentication,
|
|
79
|
+
});
|
|
80
|
+
/** Cancels the single feature-owned dialog/operation boundary synchronously. */
|
|
81
|
+
const cancelOwnedWork = () => {
|
|
82
|
+
const ownedDialog = dialogController !== undefined;
|
|
83
|
+
workflowGeneration += 1;
|
|
84
|
+
dialogGeneration += 1;
|
|
85
|
+
clientCreationOwner = undefined;
|
|
86
|
+
dialogController?.abort();
|
|
87
|
+
dialogController = undefined;
|
|
88
|
+
options.dialogs.removeAll();
|
|
89
|
+
if (ownedDialog)
|
|
90
|
+
options.setDialogBusy(false);
|
|
91
|
+
applicationController.cancelActiveOperation();
|
|
92
|
+
applicationRbacFeatures?.cancelActiveOperation();
|
|
93
|
+
clientController.cancelActiveOperation();
|
|
94
|
+
};
|
|
95
|
+
/** Replaces the application workspace using current capabilities. */
|
|
96
|
+
const mountApplications = () => {
|
|
97
|
+
const state = options.readState();
|
|
98
|
+
if (state.kind !== 'authenticated')
|
|
99
|
+
return;
|
|
100
|
+
clientWorkspace?.clear();
|
|
101
|
+
applicationWorkspace?.dispose();
|
|
102
|
+
applicationWorkspace = createAdminApplicationWorkspace({
|
|
103
|
+
capabilities: state.capabilities,
|
|
104
|
+
onIntent: handleApplicationIntent,
|
|
105
|
+
onRbacIntent: (intent) => applicationRbacFeatures?.handleIntent(intent),
|
|
106
|
+
focusView: options.focusView,
|
|
107
|
+
});
|
|
108
|
+
applicationWorkspace.setState(applicationState);
|
|
109
|
+
if (applicationRbacFeatures)
|
|
110
|
+
applicationWorkspace.setRbacState(applicationRbacFeatures.state());
|
|
111
|
+
activeWorkspace = 'applications';
|
|
112
|
+
options.mountWorkspace(applicationWorkspace.content);
|
|
113
|
+
};
|
|
114
|
+
/** Replaces the client workspace for the exact current organization. */
|
|
115
|
+
const mountClients = () => {
|
|
116
|
+
const state = options.readState();
|
|
117
|
+
if (state.kind !== 'authenticated' || !state.organization)
|
|
118
|
+
return false;
|
|
119
|
+
applicationWorkspace?.clear();
|
|
120
|
+
clientWorkspace?.dispose();
|
|
121
|
+
clientWorkspace = createAdminClientWorkspace({
|
|
122
|
+
organization: state.organization,
|
|
123
|
+
applications: applications(),
|
|
124
|
+
capabilities: state.capabilities,
|
|
125
|
+
onIntent: handleClientIntent,
|
|
126
|
+
focusView: options.focusView,
|
|
127
|
+
});
|
|
128
|
+
clientWorkspace.setState(clientState);
|
|
129
|
+
activeWorkspace = 'clients';
|
|
130
|
+
options.mountWorkspace(clientWorkspace.content);
|
|
131
|
+
return true;
|
|
132
|
+
};
|
|
133
|
+
/** Runs one shell-owned form while allowing resize, reauthentication, and Quit to abort it. */
|
|
134
|
+
const runDialog = async (work) => {
|
|
135
|
+
if (disposed || dialogController)
|
|
136
|
+
return undefined;
|
|
137
|
+
const controller = new AbortController();
|
|
138
|
+
const generation = ++dialogGeneration;
|
|
139
|
+
dialogController = controller;
|
|
140
|
+
options.setDialogBusy(true);
|
|
141
|
+
try {
|
|
142
|
+
const result = await work(controller.signal);
|
|
143
|
+
return !disposed && dialogController === controller && generation === dialogGeneration
|
|
144
|
+
? result
|
|
145
|
+
: undefined;
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return undefined;
|
|
149
|
+
}
|
|
150
|
+
finally {
|
|
151
|
+
if (dialogController === controller) {
|
|
152
|
+
dialogController = undefined;
|
|
153
|
+
options.setDialogBusy(false);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
const applicationRbacFeatures = createAdminApplicationRbacFeatures({
|
|
158
|
+
dialogs: options.dialogs,
|
|
159
|
+
readSelection: () => applicationState.kind === 'detail'
|
|
160
|
+
? { application: applicationState.application, modules: applicationState.modules }
|
|
161
|
+
: undefined,
|
|
162
|
+
readSession: options.readSession,
|
|
163
|
+
readSessionEpoch: () => synchronizedSessionEpoch,
|
|
164
|
+
readCapabilities: () => {
|
|
165
|
+
const state = options.readState();
|
|
166
|
+
return state.kind === 'authenticated' ? state.capabilities : undefined;
|
|
167
|
+
},
|
|
168
|
+
runDialog,
|
|
169
|
+
publishState: (state) => applicationWorkspace?.setRbacState(state),
|
|
170
|
+
requestAuthentication: options.requestAuthentication,
|
|
171
|
+
});
|
|
172
|
+
/** Wraps a controller-owned confirmation with shell dialog-busy reporting. */
|
|
173
|
+
const confirm = async (work) => {
|
|
174
|
+
options.setDialogBusy(true);
|
|
175
|
+
try {
|
|
176
|
+
return await work(new AbortController().signal);
|
|
177
|
+
}
|
|
178
|
+
finally {
|
|
179
|
+
options.setDialogBusy(false);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
/** Handles the complete closed application intent set. */
|
|
183
|
+
function handleApplicationIntent(intent) {
|
|
184
|
+
if (disposed)
|
|
185
|
+
return;
|
|
186
|
+
if (intent.kind === 'select')
|
|
187
|
+
void applicationController.select(intent.applicationId);
|
|
188
|
+
else if (intent.kind === 'retry')
|
|
189
|
+
void applicationController.reload();
|
|
190
|
+
else if (intent.kind === 'back')
|
|
191
|
+
void applicationController.load();
|
|
192
|
+
else if (intent.kind === 'create')
|
|
193
|
+
void createApplication();
|
|
194
|
+
else if (intent.kind === 'edit')
|
|
195
|
+
void editApplication(intent.applicationId);
|
|
196
|
+
else if (intent.kind === 'activate')
|
|
197
|
+
void applicationController.activate(intent.applicationId, async () => true);
|
|
198
|
+
else if (intent.kind === 'deactivate')
|
|
199
|
+
void changeApplicationLifecycle(intent.applicationId);
|
|
200
|
+
else if (intent.kind === 'delete')
|
|
201
|
+
void deleteApplication(intent.applicationId);
|
|
202
|
+
else if (intent.kind === 'add-module')
|
|
203
|
+
void addModule(intent.applicationId);
|
|
204
|
+
else if (intent.kind === 'edit-module')
|
|
205
|
+
void editModule(intent.applicationId, intent.moduleId);
|
|
206
|
+
else if (intent.kind === 'activate-module')
|
|
207
|
+
void applicationController.activateModule(intent.applicationId, intent.moduleId);
|
|
208
|
+
else if (intent.kind === 'deactivate-module')
|
|
209
|
+
void deactivateModule(intent.applicationId, intent.moduleId);
|
|
210
|
+
else
|
|
211
|
+
void deleteModule(intent.applicationId, intent.moduleId);
|
|
212
|
+
}
|
|
213
|
+
/** Handles the complete closed client intent set. */
|
|
214
|
+
function handleClientIntent(intent) {
|
|
215
|
+
if (disposed)
|
|
216
|
+
return;
|
|
217
|
+
if (intent.kind === 'select')
|
|
218
|
+
void clientController.select(intent.clientId);
|
|
219
|
+
else if (intent.kind === 'retry')
|
|
220
|
+
void clientController.reload();
|
|
221
|
+
else if (intent.kind === 'back')
|
|
222
|
+
void clientController.load();
|
|
223
|
+
else if (intent.kind === 'create')
|
|
224
|
+
void createClient();
|
|
225
|
+
else if (intent.kind === 'edit-name')
|
|
226
|
+
void editClientName(intent.clientId);
|
|
227
|
+
else if (intent.kind === 'add-authentication-url')
|
|
228
|
+
void addClientAuthenticationUrl(intent.clientId);
|
|
229
|
+
else if (intent.kind === 'edit-authentication-url')
|
|
230
|
+
void editClientAuthenticationUrl(intent.clientId, intent.row);
|
|
231
|
+
else if (intent.kind === 'delete-authentication-url')
|
|
232
|
+
void deleteClientAuthenticationUrl(intent.clientId, intent.row);
|
|
233
|
+
else if (intent.kind === 'save-protocol' || intent.kind === 'save-login') {
|
|
234
|
+
const etag = clientState.kind === 'detail' || clientState.kind === 'secrets'
|
|
235
|
+
? (clientState.etag ?? undefined)
|
|
236
|
+
: undefined;
|
|
237
|
+
void clientController.update(intent.clientId, intent.input, etag);
|
|
238
|
+
}
|
|
239
|
+
else if (intent.kind === 'activate')
|
|
240
|
+
void clientController.activate(intent.clientId, async () => true);
|
|
241
|
+
else if (intent.kind === 'deactivate')
|
|
242
|
+
void changeClientLifecycle(intent.clientId);
|
|
243
|
+
else if (intent.kind === 'delete')
|
|
244
|
+
void deleteClient(intent.clientId);
|
|
245
|
+
else if (intent.kind === 'secrets')
|
|
246
|
+
void clientController.loadSecrets(intent.clientId);
|
|
247
|
+
else if (intent.kind === 'generate-secret')
|
|
248
|
+
void generateSecret(intent.clientId);
|
|
249
|
+
else
|
|
250
|
+
void revokeSecret(intent.clientId, intent.secretId);
|
|
251
|
+
}
|
|
252
|
+
/** Opens and submits the application create form. */
|
|
253
|
+
async function createApplication() {
|
|
254
|
+
const result = await runDialog((signal) => showCreateApplicationDialog(options.dialogs.host, signal));
|
|
255
|
+
if (result?.kind === 'create')
|
|
256
|
+
await applicationController.create(result.input);
|
|
257
|
+
}
|
|
258
|
+
/** Opens and submits the application edit form for the retained row. */
|
|
259
|
+
async function editApplication(applicationId) {
|
|
260
|
+
const application = selectedApplication();
|
|
261
|
+
if (!application || application.id !== applicationId)
|
|
262
|
+
return;
|
|
263
|
+
const etag = applicationState.kind === 'detail' ? (applicationState.etag ?? undefined) : undefined;
|
|
264
|
+
const result = await runDialog((signal) => showEditApplicationDialog(options.dialogs.host, signal, application, etag));
|
|
265
|
+
if (result?.kind === 'update')
|
|
266
|
+
await applicationController.update(result.applicationId, result.input, result.etag);
|
|
267
|
+
}
|
|
268
|
+
/** Confirms an application transition with the exact retained target. */
|
|
269
|
+
async function changeApplicationLifecycle(applicationId) {
|
|
270
|
+
const application = selectedApplication();
|
|
271
|
+
if (!application || application.id !== applicationId)
|
|
272
|
+
return;
|
|
273
|
+
const confirmation = (signal) => confirm(async () => {
|
|
274
|
+
const result = await showApplicationLifecycleDialog(options.dialogs.host, signal, 'deactivate', application);
|
|
275
|
+
return result.kind === 'deactivate';
|
|
276
|
+
});
|
|
277
|
+
await applicationController.deactivate(applicationId, confirmation);
|
|
278
|
+
}
|
|
279
|
+
/** Confirms permanent application deletion with the exact retained target. */
|
|
280
|
+
async function deleteApplication(applicationId) {
|
|
281
|
+
const application = selectedApplication();
|
|
282
|
+
if (!application || application.id !== applicationId)
|
|
283
|
+
return;
|
|
284
|
+
await applicationController.delete(applicationId, (signal) => confirm(async () => (await showDeleteApplicationDialog(options.dialogs.host, signal, application)).kind ===
|
|
285
|
+
'delete'));
|
|
286
|
+
}
|
|
287
|
+
/** Opens and submits a new module form under the retained application. */
|
|
288
|
+
async function addModule(applicationId) {
|
|
289
|
+
if (selectedApplication()?.id !== applicationId)
|
|
290
|
+
return;
|
|
291
|
+
const result = await runDialog((signal) => showCreateModuleDialog(options.dialogs.host, signal, applicationId));
|
|
292
|
+
if (result?.kind === 'create-module')
|
|
293
|
+
await applicationController.addModule(applicationId, result.input);
|
|
294
|
+
}
|
|
295
|
+
/** Returns one exact retained same-parent module. */
|
|
296
|
+
const module = (applicationId, moduleId) => applicationState.kind === 'detail' && applicationState.application.id === applicationId
|
|
297
|
+
? applicationState.modules.find((item) => item.id === moduleId)
|
|
298
|
+
: undefined;
|
|
299
|
+
/** Opens and submits one retained module edit form. */
|
|
300
|
+
async function editModule(applicationId, moduleId) {
|
|
301
|
+
const target = module(applicationId, moduleId);
|
|
302
|
+
if (!target)
|
|
303
|
+
return;
|
|
304
|
+
const result = await runDialog((signal) => showEditModuleDialog(options.dialogs.host, signal, target));
|
|
305
|
+
if (result?.kind === 'update-module')
|
|
306
|
+
await applicationController.updateModule(applicationId, moduleId, result.input);
|
|
307
|
+
}
|
|
308
|
+
/** Confirms one retained same-parent module deactivation. */
|
|
309
|
+
async function deactivateModule(applicationId, moduleId) {
|
|
310
|
+
const application = selectedApplication();
|
|
311
|
+
const target = module(applicationId, moduleId);
|
|
312
|
+
if (!application || !target)
|
|
313
|
+
return;
|
|
314
|
+
await applicationController.deactivateModule(applicationId, moduleId, (signal) => confirm(async () => (await showModuleDeactivationDialog(options.dialogs.host, signal, application, target))
|
|
315
|
+
.kind === 'deactivate-module'));
|
|
316
|
+
}
|
|
317
|
+
/** Confirms permanent module deletion with the retained same-parent target. */
|
|
318
|
+
async function deleteModule(applicationId, moduleId) {
|
|
319
|
+
const application = selectedApplication();
|
|
320
|
+
const target = module(applicationId, moduleId);
|
|
321
|
+
if (!application || !target)
|
|
322
|
+
return;
|
|
323
|
+
await applicationController.deleteModule(applicationId, moduleId, (signal) => confirm(async () => (await showDeleteModuleDialog(options.dialogs.host, signal, application, target)).kind ===
|
|
324
|
+
'delete'));
|
|
325
|
+
}
|
|
326
|
+
/** Opens and submits the selected-organization client create form. */
|
|
327
|
+
async function createClient() {
|
|
328
|
+
if (clientCreationOwner !== undefined)
|
|
329
|
+
return;
|
|
330
|
+
const state = options.readState();
|
|
331
|
+
if (state.kind !== 'authenticated' || !state.organization)
|
|
332
|
+
return;
|
|
333
|
+
const organization = state.organization;
|
|
334
|
+
const generation = ++workflowGeneration;
|
|
335
|
+
clientCreationOwner = generation;
|
|
336
|
+
try {
|
|
337
|
+
if (applications().length === 0 && state.capabilities.canReadApplications) {
|
|
338
|
+
await applicationController.load();
|
|
339
|
+
}
|
|
340
|
+
const current = options.readState();
|
|
341
|
+
const activeApplications = applications().filter((application) => application.status === 'active');
|
|
342
|
+
if (disposed ||
|
|
343
|
+
generation !== workflowGeneration ||
|
|
344
|
+
activeWorkspace !== 'clients' ||
|
|
345
|
+
current.kind !== 'authenticated' ||
|
|
346
|
+
current.organization?.id !== organization.id ||
|
|
347
|
+
activeApplications.length === 0) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
const result = await runDialog((signal) => showClientRegistrationDialog(options.dialogs.host, signal, {
|
|
351
|
+
organization,
|
|
352
|
+
applications: activeApplications,
|
|
353
|
+
}));
|
|
354
|
+
if (result?.kind === 'create')
|
|
355
|
+
await clientController.create(result.input);
|
|
356
|
+
}
|
|
357
|
+
finally {
|
|
358
|
+
if (clientCreationOwner === generation)
|
|
359
|
+
clientCreationOwner = undefined;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
/** Opens and submits the focused name editor for the exact retained client. */
|
|
363
|
+
async function editClientName(clientId) {
|
|
364
|
+
const client = selectedClient();
|
|
365
|
+
const state = options.readState();
|
|
366
|
+
if (!client || client.id !== clientId || state.kind !== 'authenticated' || !state.organization)
|
|
367
|
+
return;
|
|
368
|
+
const organization = state.organization;
|
|
369
|
+
const result = await runDialog((signal) => showEditClientNameDialog(options.dialogs.host, signal, organization, client));
|
|
370
|
+
if (result?.kind !== 'update')
|
|
371
|
+
return;
|
|
372
|
+
const etag = clientState.kind === 'detail' || clientState.kind === 'secrets'
|
|
373
|
+
? (clientState.etag ?? undefined)
|
|
374
|
+
: undefined;
|
|
375
|
+
await clientController.update(result.clientId, result.input, etag);
|
|
376
|
+
}
|
|
377
|
+
/** Returns the current ETag retained beside the selected client detail. */
|
|
378
|
+
function selectedClientEtag() {
|
|
379
|
+
return clientState.kind === 'detail' || clientState.kind === 'secrets'
|
|
380
|
+
? (clientState.etag ?? undefined)
|
|
381
|
+
: undefined;
|
|
382
|
+
}
|
|
383
|
+
/** Opens and submits one new authentication URL for the retained client. */
|
|
384
|
+
async function addClientAuthenticationUrl(clientId) {
|
|
385
|
+
const client = selectedClient();
|
|
386
|
+
if (!client || client.id !== clientId)
|
|
387
|
+
return;
|
|
388
|
+
const result = await runDialog((signal) => showAuthenticationUrlDialog(options.dialogs.host, signal, client, null));
|
|
389
|
+
if (result?.kind !== 'save')
|
|
390
|
+
return;
|
|
391
|
+
const input = buildAuthenticationUrlUpdate(client, { kind: 'add', next: result.row });
|
|
392
|
+
if (input)
|
|
393
|
+
await clientController.update(client.id, input, selectedClientEtag());
|
|
394
|
+
}
|
|
395
|
+
/** Opens and submits one exact retained authentication URL edit. */
|
|
396
|
+
async function editClientAuthenticationUrl(clientId, row) {
|
|
397
|
+
const client = selectedClient();
|
|
398
|
+
if (!client || client.id !== clientId)
|
|
399
|
+
return;
|
|
400
|
+
const result = await runDialog((signal) => showAuthenticationUrlDialog(options.dialogs.host, signal, client, row));
|
|
401
|
+
if (result?.kind !== 'save')
|
|
402
|
+
return;
|
|
403
|
+
const input = buildAuthenticationUrlUpdate(client, {
|
|
404
|
+
kind: 'edit',
|
|
405
|
+
previous: row,
|
|
406
|
+
next: result.row,
|
|
407
|
+
});
|
|
408
|
+
if (input)
|
|
409
|
+
await clientController.update(client.id, input, selectedClientEtag());
|
|
410
|
+
}
|
|
411
|
+
/** Confirms and removes one exact retained authentication URL. */
|
|
412
|
+
async function deleteClientAuthenticationUrl(clientId, row) {
|
|
413
|
+
const client = selectedClient();
|
|
414
|
+
if (!client || client.id !== clientId)
|
|
415
|
+
return;
|
|
416
|
+
const result = await runDialog((signal) => showDeleteAuthenticationUrlDialog(options.dialogs.host, signal, client, row));
|
|
417
|
+
if (result?.kind !== 'delete')
|
|
418
|
+
return;
|
|
419
|
+
const input = buildAuthenticationUrlUpdate(client, { kind: 'delete', previous: row });
|
|
420
|
+
if (input)
|
|
421
|
+
await clientController.update(client.id, input, selectedClientEtag());
|
|
422
|
+
}
|
|
423
|
+
/** Confirms a client transition with its selected organization and retained row. */
|
|
424
|
+
async function changeClientLifecycle(clientId) {
|
|
425
|
+
const client = selectedClient();
|
|
426
|
+
const state = options.readState();
|
|
427
|
+
if (!client || client.id !== clientId || state.kind !== 'authenticated' || !state.organization)
|
|
428
|
+
return;
|
|
429
|
+
const organization = state.organization;
|
|
430
|
+
const confirmation = (signal) => confirm(async () => (await showClientLifecycleDialog(options.dialogs.host, signal, 'deactivate', organization, client)).kind === 'deactivate');
|
|
431
|
+
await clientController.deactivate(clientId, confirmation);
|
|
432
|
+
}
|
|
433
|
+
/** Confirms permanent client deletion within the selected organization. */
|
|
434
|
+
async function deleteClient(clientId) {
|
|
435
|
+
const client = selectedClient();
|
|
436
|
+
const state = options.readState();
|
|
437
|
+
if (!client || client.id !== clientId || state.kind !== 'authenticated' || !state.organization)
|
|
438
|
+
return;
|
|
439
|
+
const organization = state.organization;
|
|
440
|
+
await clientController.delete(clientId, (signal) => confirm(async () => (await showDeleteClientDialog(options.dialogs.host, signal, organization, client))
|
|
441
|
+
.kind === 'delete'));
|
|
442
|
+
}
|
|
443
|
+
/** Opens the bounded modern-secret generation form. */
|
|
444
|
+
async function generateSecret(clientId) {
|
|
445
|
+
const client = selectedClient();
|
|
446
|
+
if (!client || client.id !== clientId)
|
|
447
|
+
return;
|
|
448
|
+
const result = await runDialog((signal) => showGenerateClientSecretDialog(options.dialogs.host, signal, client));
|
|
449
|
+
if (result?.kind === 'generate')
|
|
450
|
+
await clientController.generateSecret(result.clientId, result.input);
|
|
451
|
+
}
|
|
452
|
+
/** Confirms permanent deletion for one retained same-parent secret. */
|
|
453
|
+
async function revokeSecret(clientId, secretId) {
|
|
454
|
+
const client = selectedClient();
|
|
455
|
+
const secret = selectedSecret(secretId);
|
|
456
|
+
const state = options.readState();
|
|
457
|
+
if (!client ||
|
|
458
|
+
client.id !== clientId ||
|
|
459
|
+
!secret ||
|
|
460
|
+
state.kind !== 'authenticated' ||
|
|
461
|
+
!state.organization)
|
|
462
|
+
return;
|
|
463
|
+
const organization = state.organization;
|
|
464
|
+
await clientController.revokeSecret(clientId, secretId, (signal) => confirm(async () => (await showRevokeClientSecretDialog(options.dialogs.host, signal, organization, client, secret)).kind === 'revoke-secret'));
|
|
465
|
+
}
|
|
466
|
+
return {
|
|
467
|
+
syncContext(state, sessionEpoch) {
|
|
468
|
+
if (disposed)
|
|
469
|
+
return;
|
|
470
|
+
applicationController.syncContext(state, sessionEpoch);
|
|
471
|
+
clientController.syncContext(state, sessionEpoch);
|
|
472
|
+
const nextOrganization = state.kind === 'authenticated' ? state.organization?.id : undefined;
|
|
473
|
+
const authenticationChanged = state.kind !== 'authenticated' ||
|
|
474
|
+
(hasSynchronizedContext && synchronizedSessionEpoch !== sessionEpoch);
|
|
475
|
+
const organizationChanged = hasSynchronizedContext && synchronizedOrganizationId !== nextOrganization;
|
|
476
|
+
if (authenticationChanged || organizationChanged)
|
|
477
|
+
cancelOwnedWork();
|
|
478
|
+
synchronizedSessionEpoch = state.kind === 'authenticated' ? sessionEpoch : -1;
|
|
479
|
+
synchronizedOrganizationId = nextOrganization;
|
|
480
|
+
hasSynchronizedContext = true;
|
|
481
|
+
applicationRbacFeatures?.syncApplication();
|
|
482
|
+
if (organizationChanged) {
|
|
483
|
+
workflowGeneration += 1;
|
|
484
|
+
clientWorkspace?.clear();
|
|
485
|
+
if (activeWorkspace === 'clients') {
|
|
486
|
+
activeWorkspace = undefined;
|
|
487
|
+
options.mountWorkspace(null);
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
if (state.kind !== 'authenticated') {
|
|
491
|
+
applicationWorkspace?.clear();
|
|
492
|
+
clientWorkspace?.clear();
|
|
493
|
+
activeWorkspace = undefined;
|
|
494
|
+
options.mountWorkspace(null);
|
|
495
|
+
}
|
|
496
|
+
},
|
|
497
|
+
handleCommand(command) {
|
|
498
|
+
if (disposed)
|
|
499
|
+
return;
|
|
500
|
+
if (command === ADMIN_COMMANDS.browseApplications) {
|
|
501
|
+
mountApplications();
|
|
502
|
+
void applicationController.load();
|
|
503
|
+
}
|
|
504
|
+
else if (command === ADMIN_COMMANDS.createApplication) {
|
|
505
|
+
mountApplications();
|
|
506
|
+
void createApplication();
|
|
507
|
+
}
|
|
508
|
+
else if (command === ADMIN_COMMANDS.browseClients) {
|
|
509
|
+
if (mountClients())
|
|
510
|
+
void clientController.load();
|
|
511
|
+
}
|
|
512
|
+
else if (command === ADMIN_COMMANDS.createClient) {
|
|
513
|
+
if (mountClients())
|
|
514
|
+
void createClient();
|
|
515
|
+
}
|
|
516
|
+
},
|
|
517
|
+
cancelActiveOperation() {
|
|
518
|
+
cancelOwnedWork();
|
|
519
|
+
},
|
|
520
|
+
handleRecoverableGeometry(recoverable) {
|
|
521
|
+
applicationController.handleRecoverableGeometry(recoverable);
|
|
522
|
+
applicationRbacFeatures?.handleRecoverableGeometry(recoverable);
|
|
523
|
+
clientController.handleRecoverableGeometry(recoverable);
|
|
524
|
+
if (!recoverable)
|
|
525
|
+
this.cancelActiveOperation();
|
|
526
|
+
},
|
|
527
|
+
dispose() {
|
|
528
|
+
if (disposed)
|
|
529
|
+
return;
|
|
530
|
+
workflowGeneration += 1;
|
|
531
|
+
dialogGeneration += 1;
|
|
532
|
+
dialogController?.abort();
|
|
533
|
+
dialogController = undefined;
|
|
534
|
+
options.setDialogBusy(false);
|
|
535
|
+
applicationController.dispose();
|
|
536
|
+
applicationRbacFeatures?.dispose();
|
|
537
|
+
clientController.dispose();
|
|
538
|
+
applicationWorkspace?.dispose();
|
|
539
|
+
clientWorkspace?.dispose();
|
|
540
|
+
options.mountWorkspace(null);
|
|
541
|
+
disposed = true;
|
|
542
|
+
},
|
|
543
|
+
};
|
|
544
|
+
}
|
|
545
|
+
//# sourceMappingURL=application-client-features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-client-features.js","sourceRoot":"","sources":["../../src/admin/application-client-features.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** Operation ownership for the deployment-global application workflow. */
|
|
2
|
+
import type { CreateApplicationInput, CreateModuleInput, UpdateApplicationInput, UpdateModuleInput } from '@portaidentity/sdk';
|
|
3
|
+
import type { AdminConnectionState } from './state.js';
|
|
4
|
+
import type { AdminApplicationOperations } from './application-service.js';
|
|
5
|
+
import type { AdminApplicationViewState } from './application-state.js';
|
|
6
|
+
/** Dependencies for one direct global application controller. */
|
|
7
|
+
export interface AdminApplicationControllerOptions {
|
|
8
|
+
/** Reads the latest application-owned connection and capability state. */
|
|
9
|
+
readonly readState: () => AdminConnectionState;
|
|
10
|
+
/** Reads validated operations for the current verified session. */
|
|
11
|
+
readonly readOperations: () => Partial<AdminApplicationOperations> | undefined;
|
|
12
|
+
/** Publishes immutable feature state to the workspace boundary. */
|
|
13
|
+
readonly publishState: (state: AdminApplicationViewState) => void;
|
|
14
|
+
/** Enters the existing authentication flow after final session invalidation. */
|
|
15
|
+
readonly requestAuthentication: () => void;
|
|
16
|
+
/** Gates later mutations until deliberate reload reconciles an unknown outcome. */
|
|
17
|
+
readonly setRecoveryRequired?: (required: boolean) => void;
|
|
18
|
+
}
|
|
19
|
+
/** Application-owned global workflow boundary. */
|
|
20
|
+
export interface AdminApplicationController {
|
|
21
|
+
/** Applies the latest connection and explicit verified-session epoch. */
|
|
22
|
+
readonly syncContext: (state: AdminConnectionState, sessionEpoch: number) => void;
|
|
23
|
+
/** Deliberately loads and reconciles the complete global catalog. */
|
|
24
|
+
readonly load: () => Promise<void>;
|
|
25
|
+
/** Loads one application and its complete same-parent module collection. */
|
|
26
|
+
readonly select: (applicationId: string) => Promise<void>;
|
|
27
|
+
/** Reconciles the retained list or selected detail through its authoritative read path. */
|
|
28
|
+
readonly reload: () => Promise<void>;
|
|
29
|
+
/** Creates one application and reloads the authoritative catalog. */
|
|
30
|
+
readonly create: (input: CreateApplicationInput) => Promise<void>;
|
|
31
|
+
/** Updates mutable fields and reloads authoritative detail. */
|
|
32
|
+
readonly update: (applicationId: string, input: UpdateApplicationInput, etag?: string) => Promise<void>;
|
|
33
|
+
/** Confirms and activates one application at most once. */
|
|
34
|
+
readonly activate: (applicationId: string, confirm: (signal: AbortSignal) => Promise<boolean>) => Promise<void>;
|
|
35
|
+
/** Confirms and deactivates one application at most once. */
|
|
36
|
+
readonly deactivate: (applicationId: string, confirm: (signal: AbortSignal) => Promise<boolean>) => Promise<void>;
|
|
37
|
+
/** Confirms and permanently deletes one application at most once. */
|
|
38
|
+
readonly delete: (applicationId: string, confirm: (signal: AbortSignal) => Promise<boolean>) => Promise<void>;
|
|
39
|
+
/** Adds a module and reloads authoritative same-parent detail. */
|
|
40
|
+
readonly addModule: (applicationId: string, input: CreateModuleInput) => Promise<void>;
|
|
41
|
+
/** Updates a module and reloads authoritative same-parent detail. */
|
|
42
|
+
readonly updateModule: (applicationId: string, moduleId: string, input: UpdateModuleInput) => Promise<void>;
|
|
43
|
+
/** Activates a module and reloads authoritative same-parent detail. */
|
|
44
|
+
readonly activateModule: (applicationId: string, moduleId: string) => Promise<void>;
|
|
45
|
+
/** Confirms module deactivation and reloads authoritative same-parent detail. */
|
|
46
|
+
readonly deactivateModule: (applicationId: string, moduleId: string, confirm: (signal: AbortSignal) => Promise<boolean>) => Promise<void>;
|
|
47
|
+
/** Confirms module deletion and reloads authoritative same-parent detail. */
|
|
48
|
+
readonly deleteModule: (applicationId: string, moduleId: string, confirm: (signal: AbortSignal) => Promise<boolean>) => Promise<void>;
|
|
49
|
+
/** Cancels the current read, confirmation, or mutation. */
|
|
50
|
+
readonly cancelActiveOperation: () => void;
|
|
51
|
+
/** Cancels ownership when the terminal enters resize-only recovery. */
|
|
52
|
+
readonly handleRecoverableGeometry: (recoverable: boolean) => void;
|
|
53
|
+
/** Invalidates all work and closes the feature state. */
|
|
54
|
+
readonly dispose: () => void;
|
|
55
|
+
}
|
|
56
|
+
/** Creates the small global application workflow controller. */
|
|
57
|
+
export declare function createAdminApplicationController(options: AdminApplicationControllerOptions): AdminApplicationController;
|
|
58
|
+
//# sourceMappingURL=application-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application-controller.d.ts","sourceRoot":"","sources":["../../src/admin/application-controller.ts"],"names":[],"mappings":"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"}
|