@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,54 @@
|
|
|
1
|
+
import type { ConfigEntry, ConfigKey, ConfigValue, ConfigDomain } from '@portaidentity/sdk';
|
|
2
|
+
/** Exact public identifiers; display policy and bounds remain server metadata. */
|
|
3
|
+
export declare const ADMIN_CONFIG_KEYS: readonly ConfigKey[];
|
|
4
|
+
/** Fixed categories that never render remote error details. */
|
|
5
|
+
export type AdminConfigFailure = 'validation' | 'unauthorized' | 'unavailable' | 'invalid-response';
|
|
6
|
+
/** Sanitized authoritative read result. */
|
|
7
|
+
export type AdminConfigReadResult = {
|
|
8
|
+
readonly kind: 'success';
|
|
9
|
+
readonly value: readonly ConfigEntry[];
|
|
10
|
+
} | {
|
|
11
|
+
readonly kind: 'session-invalid';
|
|
12
|
+
} | {
|
|
13
|
+
readonly kind: 'failure';
|
|
14
|
+
readonly failure: AdminConfigFailure;
|
|
15
|
+
};
|
|
16
|
+
/** A mutation distinguishes confirmed rejection from an unknown network outcome. */
|
|
17
|
+
export type AdminConfigMutationResult = {
|
|
18
|
+
readonly kind: 'success';
|
|
19
|
+
readonly restartRequired: boolean;
|
|
20
|
+
} | {
|
|
21
|
+
readonly kind: 'session-invalid';
|
|
22
|
+
} | {
|
|
23
|
+
readonly kind: 'outcome-unknown';
|
|
24
|
+
} | {
|
|
25
|
+
readonly kind: 'failure';
|
|
26
|
+
readonly failure: AdminConfigFailure;
|
|
27
|
+
};
|
|
28
|
+
/** Two direct session-bound operations used by the configuration controller. */
|
|
29
|
+
export interface AdminSystemConfigOperations {
|
|
30
|
+
/** Reads the complete validated public catalog. */
|
|
31
|
+
readonly listConfig: () => Promise<AdminConfigReadResult>;
|
|
32
|
+
/** Sends one atomic changed-key batch without retrying. */
|
|
33
|
+
readonly setConfigMany: (values: Readonly<Partial<Record<ConfigKey, ConfigValue>>>) => Promise<AdminConfigMutationResult>;
|
|
34
|
+
}
|
|
35
|
+
/** Narrows one public identifier without permitting arbitrary runtime keys. */
|
|
36
|
+
export declare function isAdminConfigKey(value: unknown): value is ConfigKey;
|
|
37
|
+
/** Validates the native scalar using authoritative metadata, with no coercion. */
|
|
38
|
+
export declare function isAdminConfigValue(entry: ConfigEntry, value: unknown): value is ConfigValue;
|
|
39
|
+
/**
|
|
40
|
+
* Validates a complete response and returns an immutable catalog-ordered projection.
|
|
41
|
+
* @param value - Untrusted SDK response.
|
|
42
|
+
* @returns Safe entries, or undefined when any entry is missing, duplicate or invalid.
|
|
43
|
+
* @example validateAdminConfigEntries(await client.config.list());
|
|
44
|
+
*/
|
|
45
|
+
export declare function validateAdminConfigEntries(value: unknown): readonly ConfigEntry[] | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Creates direct operations over the verified session's existing configuration domain.
|
|
48
|
+
* Invalid mutation readback is an unknown outcome, never a reason to replay the batch.
|
|
49
|
+
* @param domain - Lazy session-bound SDK domain.
|
|
50
|
+
* @returns Sanitized list and batch operations.
|
|
51
|
+
* @example createAdminSystemConfigOperations(() => client.config);
|
|
52
|
+
*/
|
|
53
|
+
export declare function createAdminSystemConfigOperations(domain: () => Pick<ConfigDomain, 'list' | 'setMany'>): AdminSystemConfigOperations;
|
|
54
|
+
//# sourceMappingURL=system-config-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-config-service.d.ts","sourceRoot":"","sources":["../../src/admin/system-config-service.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE5F,kFAAkF;AAClF,eAAO,MAAM,iBAAiB,EAAE,SAAS,SAAS,EAmBhD,CAAC;AAEH,+DAA+D;AAC/D,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,cAAc,GAAG,aAAa,GAAG,kBAAkB,CAAC;AACpG,2CAA2C;AAC3C,MAAM,MAAM,qBAAqB,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAA;CAAE,GACpE;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACpC;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,CAAC;AACvE,oFAAoF;AACpF,MAAM,MAAM,yBAAyB,GACjC;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;CAAE,GAC/D;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACpC;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACpC;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,CAAC;AACvE,gFAAgF;AAChF,MAAM,WAAW,2BAA2B;IAC1C,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC1D,2DAA2D;IAC3D,QAAQ,CAAC,aAAa,EAAE,CACtB,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,KACtD,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACzC;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAEnE;AAYD,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAU3F;AAmDD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,WAAW,EAAE,GAAG,SAAS,CAgB7F;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC,GACnD,2BAA2B,CAkE7B"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/** Validated, non-retrying operational configuration calls for terminal administration. */
|
|
2
|
+
import { PortaAuthenticationError, PortaForbiddenError, PortaValidationError, } from '@portaidentity/sdk';
|
|
3
|
+
/** Exact public identifiers; display policy and bounds remain server metadata. */
|
|
4
|
+
export const ADMIN_CONFIG_KEYS = Object.freeze([
|
|
5
|
+
'access_token_ttl',
|
|
6
|
+
'id_token_ttl',
|
|
7
|
+
'refresh_token_ttl',
|
|
8
|
+
'authorization_code_ttl',
|
|
9
|
+
'session_ttl',
|
|
10
|
+
'magic_link_ttl',
|
|
11
|
+
'password_reset_ttl',
|
|
12
|
+
'invitation_ttl',
|
|
13
|
+
'rate_limit_login_max',
|
|
14
|
+
'rate_limit_login_window',
|
|
15
|
+
'rate_limit_magic_link_max',
|
|
16
|
+
'rate_limit_magic_link_window',
|
|
17
|
+
'rate_limit_password_reset_max',
|
|
18
|
+
'rate_limit_password_reset_window',
|
|
19
|
+
'max_failed_logins',
|
|
20
|
+
'lockout_duration_seconds',
|
|
21
|
+
'audit_retention_days',
|
|
22
|
+
'default_locale',
|
|
23
|
+
]);
|
|
24
|
+
/** Narrows one public identifier without permitting arbitrary runtime keys. */
|
|
25
|
+
export function isAdminConfigKey(value) {
|
|
26
|
+
return typeof value === 'string' && ADMIN_CONFIG_KEYS.some((key) => key === value);
|
|
27
|
+
}
|
|
28
|
+
/** Bounds text and rejects terminal controls before it reaches widgets. */
|
|
29
|
+
function safeText(value, maximum) {
|
|
30
|
+
if (typeof value !== 'string' || !value.length || value.length > maximum)
|
|
31
|
+
return false;
|
|
32
|
+
for (const character of value) {
|
|
33
|
+
const codePoint = character.codePointAt(0) ?? 0;
|
|
34
|
+
if (codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f))
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
/** Validates the native scalar using authoritative metadata, with no coercion. */
|
|
40
|
+
export function isAdminConfigValue(entry, value) {
|
|
41
|
+
return entry.valueType === 'integer'
|
|
42
|
+
? typeof value === 'number' &&
|
|
43
|
+
Number.isSafeInteger(value) &&
|
|
44
|
+
typeof entry.minimum === 'number' &&
|
|
45
|
+
typeof entry.maximum === 'number' &&
|
|
46
|
+
value >= entry.minimum &&
|
|
47
|
+
value <= entry.maximum
|
|
48
|
+
: typeof value === 'string' &&
|
|
49
|
+
entry.allowedValues?.some((allowed) => allowed === value) === true;
|
|
50
|
+
}
|
|
51
|
+
/** Rejects incomplete metadata rather than rendering a partially trusted form. */
|
|
52
|
+
function isEntry(value) {
|
|
53
|
+
if (!value || typeof value !== 'object')
|
|
54
|
+
return false;
|
|
55
|
+
const candidate = value;
|
|
56
|
+
if (!isAdminConfigKey(candidate.key) ||
|
|
57
|
+
!safeText(candidate.label, 80) ||
|
|
58
|
+
!safeText(candidate.description, 512) ||
|
|
59
|
+
typeof candidate.group !== 'string' ||
|
|
60
|
+
!['lifetimes', 'rate-limits', 'lockout', 'general'].includes(candidate.group) ||
|
|
61
|
+
typeof candidate.applicationMode !== 'string' ||
|
|
62
|
+
!['runtime', 'restart-required'].includes(candidate.applicationMode) ||
|
|
63
|
+
!safeText(candidate.updatedAt, 40) ||
|
|
64
|
+
!/^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d(?:\.\d{1,9})?Z$/.test(candidate.updatedAt) ||
|
|
65
|
+
!Number.isFinite(Date.parse(candidate.updatedAt)))
|
|
66
|
+
return false;
|
|
67
|
+
if (candidate.valueType === 'integer') {
|
|
68
|
+
return (candidate.key !== 'default_locale' &&
|
|
69
|
+
typeof candidate.unit === 'string' &&
|
|
70
|
+
['seconds', 'attempts', 'days'].includes(candidate.unit) &&
|
|
71
|
+
typeof candidate.minimum === 'number' &&
|
|
72
|
+
Number.isSafeInteger(candidate.minimum) &&
|
|
73
|
+
typeof candidate.maximum === 'number' &&
|
|
74
|
+
Number.isSafeInteger(candidate.maximum) &&
|
|
75
|
+
candidate.minimum <= candidate.maximum &&
|
|
76
|
+
typeof candidate.value === 'number' &&
|
|
77
|
+
Number.isSafeInteger(candidate.value) &&
|
|
78
|
+
candidate.value >= candidate.minimum &&
|
|
79
|
+
candidate.value <= candidate.maximum &&
|
|
80
|
+
typeof candidate.defaultValue === 'number' &&
|
|
81
|
+
Number.isSafeInteger(candidate.defaultValue) &&
|
|
82
|
+
candidate.defaultValue >= candidate.minimum &&
|
|
83
|
+
candidate.defaultValue <= candidate.maximum);
|
|
84
|
+
}
|
|
85
|
+
return (candidate.key === 'default_locale' &&
|
|
86
|
+
candidate.valueType === 'string' &&
|
|
87
|
+
candidate.unit === 'locale' &&
|
|
88
|
+
Array.isArray(candidate.allowedValues) &&
|
|
89
|
+
candidate.allowedValues.length === 1 &&
|
|
90
|
+
candidate.allowedValues[0] === 'en' &&
|
|
91
|
+
candidate.value === 'en' &&
|
|
92
|
+
candidate.defaultValue === 'en');
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Validates a complete response and returns an immutable catalog-ordered projection.
|
|
96
|
+
* @param value - Untrusted SDK response.
|
|
97
|
+
* @returns Safe entries, or undefined when any entry is missing, duplicate or invalid.
|
|
98
|
+
* @example validateAdminConfigEntries(await client.config.list());
|
|
99
|
+
*/
|
|
100
|
+
export function validateAdminConfigEntries(value) {
|
|
101
|
+
if (!Array.isArray(value) || value.length !== ADMIN_CONFIG_KEYS.length || !value.every(isEntry))
|
|
102
|
+
return undefined;
|
|
103
|
+
const entries = [];
|
|
104
|
+
for (const key of ADMIN_CONFIG_KEYS) {
|
|
105
|
+
const matches = value.filter((entry) => entry.key === key);
|
|
106
|
+
if (matches.length !== 1 || !matches[0])
|
|
107
|
+
return undefined;
|
|
108
|
+
const entry = matches[0];
|
|
109
|
+
entries.push(Object.freeze({
|
|
110
|
+
...entry,
|
|
111
|
+
...(entry.allowedValues ? { allowedValues: Object.freeze([...entry.allowedValues]) } : {}),
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
return Object.freeze(entries);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Creates direct operations over the verified session's existing configuration domain.
|
|
118
|
+
* Invalid mutation readback is an unknown outcome, never a reason to replay the batch.
|
|
119
|
+
* @param domain - Lazy session-bound SDK domain.
|
|
120
|
+
* @returns Sanitized list and batch operations.
|
|
121
|
+
* @example createAdminSystemConfigOperations(() => client.config);
|
|
122
|
+
*/
|
|
123
|
+
export function createAdminSystemConfigOperations(domain) {
|
|
124
|
+
return {
|
|
125
|
+
async listConfig() {
|
|
126
|
+
try {
|
|
127
|
+
const entries = validateAdminConfigEntries(await domain().list());
|
|
128
|
+
return entries
|
|
129
|
+
? { kind: 'success', value: entries }
|
|
130
|
+
: { kind: 'failure', failure: 'invalid-response' };
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
if (error instanceof PortaAuthenticationError)
|
|
134
|
+
return { kind: 'session-invalid' };
|
|
135
|
+
return {
|
|
136
|
+
kind: 'failure',
|
|
137
|
+
failure: error instanceof PortaForbiddenError ? 'unauthorized' : 'unavailable',
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
async setConfigMany(values) {
|
|
142
|
+
const keys = Object.keys(values);
|
|
143
|
+
if (!keys.length ||
|
|
144
|
+
!keys.every(isAdminConfigKey) ||
|
|
145
|
+
Object.values(values).some((value) => !(typeof value === 'string' ||
|
|
146
|
+
(typeof value === 'number' && Number.isSafeInteger(value))))) {
|
|
147
|
+
return { kind: 'failure', failure: 'validation' };
|
|
148
|
+
}
|
|
149
|
+
try {
|
|
150
|
+
const result = await domain().setMany(values);
|
|
151
|
+
if (!result ||
|
|
152
|
+
typeof result !== 'object' ||
|
|
153
|
+
!('data' in result) ||
|
|
154
|
+
!('restartRequired' in result) ||
|
|
155
|
+
typeof result.restartRequired !== 'boolean' ||
|
|
156
|
+
!Array.isArray(result.data) ||
|
|
157
|
+
result.data.length !== keys.length ||
|
|
158
|
+
!result.data.every(isEntry)) {
|
|
159
|
+
return { kind: 'outcome-unknown' };
|
|
160
|
+
}
|
|
161
|
+
const entries = result.data;
|
|
162
|
+
if (keys.some((key) => entries.filter((entry) => entry.key === key && entry.value === values[entry.key])
|
|
163
|
+
.length !== 1)) {
|
|
164
|
+
return { kind: 'outcome-unknown' };
|
|
165
|
+
}
|
|
166
|
+
return { kind: 'success', restartRequired: result.restartRequired };
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
if (error instanceof PortaAuthenticationError)
|
|
170
|
+
return { kind: 'session-invalid' };
|
|
171
|
+
if (error instanceof PortaForbiddenError)
|
|
172
|
+
return { kind: 'failure', failure: 'unauthorized' };
|
|
173
|
+
if (error instanceof PortaValidationError)
|
|
174
|
+
return { kind: 'failure', failure: 'validation' };
|
|
175
|
+
return { kind: 'outcome-unknown' };
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=system-config-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-config-service.js","sourceRoot":"","sources":["../../src/admin/system-config-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/** Immutable native-value drafts and duration presentation for global policy editing. */
|
|
2
|
+
import type { ConfigEntry, ConfigKey, ConfigValue } from '@portaidentity/sdk';
|
|
3
|
+
import type { AdminConfigFailure } from './system-config-service.js';
|
|
4
|
+
/** Closed actions emitted by the direct configuration form. */
|
|
5
|
+
export type AdminSystemConfigIntent = {
|
|
6
|
+
readonly kind: 'set-draft';
|
|
7
|
+
readonly key: ConfigKey;
|
|
8
|
+
readonly text: string;
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: 'save' | 'close';
|
|
11
|
+
};
|
|
12
|
+
/** Current authoritative catalog plus raw edits retained across tabs and transient failures. */
|
|
13
|
+
export interface AdminSystemConfigReadyState {
|
|
14
|
+
/** Ready projection discriminator. */
|
|
15
|
+
readonly kind: 'ready';
|
|
16
|
+
/** Complete validated entries in catalog order. */
|
|
17
|
+
readonly entries: readonly ConfigEntry[];
|
|
18
|
+
/** Raw input overrides; absent keys use the authoritative value. */
|
|
19
|
+
readonly drafts?: Readonly<Partial<Record<ConfigKey, string>>>;
|
|
20
|
+
/** Whether one remote operation or discard confirmation is active. */
|
|
21
|
+
readonly busy?: boolean;
|
|
22
|
+
/** Fixed safe status after save or failure. */
|
|
23
|
+
readonly message?: string;
|
|
24
|
+
/** Confirmed startup-policy update awaiting operator restart. */
|
|
25
|
+
readonly restartRequired?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** Complete states rendered by the configuration workspace. */
|
|
28
|
+
export type AdminSystemConfigWorkspaceState = {
|
|
29
|
+
readonly kind: 'closed' | 'loading';
|
|
30
|
+
} | {
|
|
31
|
+
readonly kind: 'failure';
|
|
32
|
+
readonly failure: AdminConfigFailure;
|
|
33
|
+
} | AdminSystemConfigReadyState;
|
|
34
|
+
/** Derived dirty and valid batch values; invalid raw drafts never enter the payload. */
|
|
35
|
+
export interface AdminSystemConfigDraftProjection {
|
|
36
|
+
/** Changed identifiers, including incomplete or invalid drafts. */
|
|
37
|
+
readonly dirtyKeys: readonly ConfigKey[];
|
|
38
|
+
/** Valid changed native values only. */
|
|
39
|
+
readonly values: Readonly<Partial<Record<ConfigKey, ConfigValue>>>;
|
|
40
|
+
/** Whether every changed draft satisfies its metadata. */
|
|
41
|
+
readonly valid: boolean;
|
|
42
|
+
/** Whether authority, validity, dirty state and operation ownership allow submission. */
|
|
43
|
+
readonly canSave: boolean;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Parses one raw editor value without coercing blanks, fractions or unsafe integers.
|
|
47
|
+
* @param entry - Authoritative metadata for the field.
|
|
48
|
+
* @param text - Raw single-line text, possibly an incomplete edit.
|
|
49
|
+
* @returns Valid native scalar, or undefined.
|
|
50
|
+
* @example parseAdminConfigDraft(entry, '7200');
|
|
51
|
+
*/
|
|
52
|
+
export declare function parseAdminConfigDraft(entry: ConfigEntry, text: string): ConfigValue | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Derives an atomic batch without losing incomplete drafts or treating equivalent numbers as dirty.
|
|
55
|
+
* @param state - Loaded catalog and raw edits.
|
|
56
|
+
* @param canUpdate - Verified update capability, never inferred from form contents.
|
|
57
|
+
* @returns Immutable dirty keys, validated values and Save eligibility.
|
|
58
|
+
* @example projectAdminConfigDrafts(state, capabilities.canUpdateConfig);
|
|
59
|
+
*/
|
|
60
|
+
export declare function projectAdminConfigDrafts(state: AdminSystemConfigReadyState, canUpdate: boolean): AdminSystemConfigDraftProjection;
|
|
61
|
+
/**
|
|
62
|
+
* Replaces one raw draft while preserving all other tabs' edits.
|
|
63
|
+
* @param state - Current loaded projection.
|
|
64
|
+
* @param key - Known loaded field identifier.
|
|
65
|
+
* @param text - Raw editor contents.
|
|
66
|
+
* @returns Immutable replacement; busy or unknown-field actions do not change state.
|
|
67
|
+
* @example setAdminConfigDraft(state, 'magic_link_ttl', '1200');
|
|
68
|
+
*/
|
|
69
|
+
export declare function setAdminConfigDraft(state: AdminSystemConfigReadyState, key: ConfigKey, text: string): AdminSystemConfigReadyState;
|
|
70
|
+
/**
|
|
71
|
+
* Shows the largest exact whole duration unit while leaving storage and editor values in seconds.
|
|
72
|
+
* @param seconds - Native positive integer seconds.
|
|
73
|
+
* @returns Singular or plural whole-unit text.
|
|
74
|
+
* @example formatAdminConfigDuration(900); // '15 minutes'
|
|
75
|
+
*/
|
|
76
|
+
export declare function formatAdminConfigDuration(seconds: number): string;
|
|
77
|
+
//# sourceMappingURL=system-config-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-config-state.d.ts","sourceRoot":"","sources":["../../src/admin/system-config-state.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,+DAA+D;AAC/D,MAAM,MAAM,uBAAuB,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9E;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAExC,gGAAgG;AAChG,MAAM,WAAW,2BAA2B;IAC1C,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IACzC,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/D,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,+DAA+D;AAC/D,MAAM,MAAM,+BAA+B,GACvC;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,GACvC;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE,GAClE,2BAA2B,CAAC;AAEhC,wFAAwF;AACxF,MAAM,WAAW,gCAAgC;IAC/C,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,SAAS,SAAS,EAAE,CAAC;IACzC,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACnE,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,yFAAyF;IACzF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAK/F;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,2BAA2B,EAClC,SAAS,EAAE,OAAO,GACjB,gCAAgC,CAkBlC;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,2BAA2B,EAClC,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,MAAM,GACX,2BAA2B,CAG7B;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYjE"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { isAdminConfigValue } from './system-config-service.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parses one raw editor value without coercing blanks, fractions or unsafe integers.
|
|
4
|
+
* @param entry - Authoritative metadata for the field.
|
|
5
|
+
* @param text - Raw single-line text, possibly an incomplete edit.
|
|
6
|
+
* @returns Valid native scalar, or undefined.
|
|
7
|
+
* @example parseAdminConfigDraft(entry, '7200');
|
|
8
|
+
*/
|
|
9
|
+
export function parseAdminConfigDraft(entry, text) {
|
|
10
|
+
if (entry.valueType === 'string')
|
|
11
|
+
return isAdminConfigValue(entry, text) ? text : undefined;
|
|
12
|
+
if (!/^[+-]?\d+$/.test(text))
|
|
13
|
+
return undefined;
|
|
14
|
+
const value = Number(text);
|
|
15
|
+
return isAdminConfigValue(entry, value) ? value : undefined;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Derives an atomic batch without losing incomplete drafts or treating equivalent numbers as dirty.
|
|
19
|
+
* @param state - Loaded catalog and raw edits.
|
|
20
|
+
* @param canUpdate - Verified update capability, never inferred from form contents.
|
|
21
|
+
* @returns Immutable dirty keys, validated values and Save eligibility.
|
|
22
|
+
* @example projectAdminConfigDrafts(state, capabilities.canUpdateConfig);
|
|
23
|
+
*/
|
|
24
|
+
export function projectAdminConfigDrafts(state, canUpdate) {
|
|
25
|
+
const dirtyKeys = [];
|
|
26
|
+
const values = {};
|
|
27
|
+
let valid = true;
|
|
28
|
+
for (const entry of state.entries) {
|
|
29
|
+
const raw = state.drafts?.[entry.key] ?? String(entry.value);
|
|
30
|
+
const value = parseAdminConfigDraft(entry, raw);
|
|
31
|
+
if (value === entry.value)
|
|
32
|
+
continue;
|
|
33
|
+
dirtyKeys.push(entry.key);
|
|
34
|
+
if (value === undefined)
|
|
35
|
+
valid = false;
|
|
36
|
+
else
|
|
37
|
+
values[entry.key] = value;
|
|
38
|
+
}
|
|
39
|
+
return Object.freeze({
|
|
40
|
+
dirtyKeys: Object.freeze(dirtyKeys),
|
|
41
|
+
values: Object.freeze(values),
|
|
42
|
+
valid,
|
|
43
|
+
canSave: canUpdate && dirtyKeys.length > 0 && valid && !state.busy,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Replaces one raw draft while preserving all other tabs' edits.
|
|
48
|
+
* @param state - Current loaded projection.
|
|
49
|
+
* @param key - Known loaded field identifier.
|
|
50
|
+
* @param text - Raw editor contents.
|
|
51
|
+
* @returns Immutable replacement; busy or unknown-field actions do not change state.
|
|
52
|
+
* @example setAdminConfigDraft(state, 'magic_link_ttl', '1200');
|
|
53
|
+
*/
|
|
54
|
+
export function setAdminConfigDraft(state, key, text) {
|
|
55
|
+
if (state.busy || !state.entries.some((entry) => entry.key === key))
|
|
56
|
+
return state;
|
|
57
|
+
return Object.freeze({ ...state, drafts: Object.freeze({ ...state.drafts, [key]: text }) });
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Shows the largest exact whole duration unit while leaving storage and editor values in seconds.
|
|
61
|
+
* @param seconds - Native positive integer seconds.
|
|
62
|
+
* @returns Singular or plural whole-unit text.
|
|
63
|
+
* @example formatAdminConfigDuration(900); // '15 minutes'
|
|
64
|
+
*/
|
|
65
|
+
export function formatAdminConfigDuration(seconds) {
|
|
66
|
+
for (const [divisor, unit] of [
|
|
67
|
+
[86400, 'day'],
|
|
68
|
+
[3600, 'hour'],
|
|
69
|
+
[60, 'minute'],
|
|
70
|
+
]) {
|
|
71
|
+
if (seconds > 0 && seconds % divisor === 0) {
|
|
72
|
+
const amount = seconds / divisor;
|
|
73
|
+
return `${amount} ${unit}${amount === 1 ? '' : 's'}`;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return `${seconds} second${seconds === 1 ? '' : 's'}`;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=system-config-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-config-state.js","sourceRoot":"","sources":["../../src/admin/system-config-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/** Direct four-tab Layout DSL editor for authoritative operational policy. */
|
|
2
|
+
import { Dialog } from '@jsvision/ui';
|
|
3
|
+
import type { View } from '@jsvision/ui';
|
|
4
|
+
import type { AdminSystemConfigIntent, AdminSystemConfigWorkspaceState } from './system-config-state.js';
|
|
5
|
+
/** Fitting viewport includes page padding, tab/window borders and menu/status chrome. */
|
|
6
|
+
export declare const SYSTEM_CONFIG_MINIMUM_SIZE: Readonly<{
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
}>;
|
|
10
|
+
/** Verified authority needed by this feature only. */
|
|
11
|
+
export interface AdminSystemConfigCapabilities {
|
|
12
|
+
/** Whether catalog values may be read. */
|
|
13
|
+
readonly canReadConfig: boolean;
|
|
14
|
+
/** Whether valid dirty values may be saved. */
|
|
15
|
+
readonly canUpdateConfig: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** Construction boundaries for one focused workspace. */
|
|
18
|
+
export interface AdminSystemConfigWorkspaceOptions {
|
|
19
|
+
/** Verified session capabilities. */
|
|
20
|
+
readonly capabilities: AdminSystemConfigCapabilities;
|
|
21
|
+
/** Sends closed user actions to the owning controller. */
|
|
22
|
+
readonly onIntent: (intent: AdminSystemConfigIntent) => void;
|
|
23
|
+
/** Focuses one mounted control through the application loop. */
|
|
24
|
+
readonly focusView?: (view: View) => void;
|
|
25
|
+
/** Delegates frame closure to the controller's discard handling. */
|
|
26
|
+
readonly onClose?: () => void;
|
|
27
|
+
}
|
|
28
|
+
/** Mounted full-page editor controlled through immutable projections. */
|
|
29
|
+
export interface AdminSystemConfigWorkspace {
|
|
30
|
+
/** Maximized, non-restorable modeless dialog. */
|
|
31
|
+
readonly content: Dialog;
|
|
32
|
+
/** Publishes authoritative entries, drafts and operation state. */
|
|
33
|
+
readonly setState: (state: AdminSystemConfigWorkspaceState) => void;
|
|
34
|
+
/** Focuses a reachable control on the active tab. */
|
|
35
|
+
readonly focusCurrent: () => void;
|
|
36
|
+
/** Releases retained data and bindings. */
|
|
37
|
+
readonly clear: () => void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Creates one direct DSL form with retained raw edits and a persistent footer.
|
|
41
|
+
* Compact geometry removes editable controls but retains immutable drafts and active-tab identity.
|
|
42
|
+
* @param options - Verified capabilities, intent sink and application focus boundary.
|
|
43
|
+
* @returns The modeless window and its state/lifecycle operations.
|
|
44
|
+
* @example createAdminSystemConfigWorkspace({ capabilities, onIntent });
|
|
45
|
+
*/
|
|
46
|
+
export declare function createAdminSystemConfigWorkspace(options: AdminSystemConfigWorkspaceOptions): AdminSystemConfigWorkspace;
|
|
47
|
+
//# sourceMappingURL=system-config-workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-config-workspace.d.ts","sourceRoot":"","sources":["../../src/admin/system-config-workspace.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAKL,MAAM,EAWP,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAe,IAAI,EAAE,MAAM,cAAc,CAAC;AAQtD,OAAO,KAAK,EACV,uBAAuB,EACvB,+BAA+B,EAChC,MAAM,0BAA0B,CAAC;AAQlC,yFAAyF;AACzF,eAAO,MAAM,0BAA0B;;;EAGrC,CAAC;AAEH,sDAAsD;AACtD,MAAM,WAAW,6BAA6B;IAC5C,0CAA0C;IAC1C,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,+CAA+C;IAC/C,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC;AACD,yDAAyD;AACzD,MAAM,WAAW,iCAAiC;IAChD,qCAAqC;IACrC,QAAQ,CAAC,YAAY,EAAE,6BAA6B,CAAC;IACrD,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAC7D,gEAAgE;IAChE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC1C,oEAAoE;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CAC/B;AACD,yEAAyE;AACzE,MAAM,WAAW,0BAA0B;IACzC,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,+BAA+B,KAAK,IAAI,CAAC;IACpE,qDAAqD;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;IAClC,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;CAC5B;AAqDD;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,iCAAiC,GACzC,0BAA0B,CAuM5B"}
|