@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.
Files changed (328) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +125 -105
  3. package/dist/admin/admin-date-time.d.ts +6 -0
  4. package/dist/admin/admin-date-time.d.ts.map +1 -0
  5. package/dist/admin/admin-date-time.js +33 -0
  6. package/dist/admin/admin-date-time.js.map +1 -0
  7. package/dist/admin/application-client-features.d.ts +38 -0
  8. package/dist/admin/application-client-features.d.ts.map +1 -0
  9. package/dist/admin/application-client-features.js +545 -0
  10. package/dist/admin/application-client-features.js.map +1 -0
  11. package/dist/admin/application-controller.d.ts +58 -0
  12. package/dist/admin/application-controller.d.ts.map +1 -0
  13. package/dist/admin/application-controller.js +286 -0
  14. package/dist/admin/application-controller.js.map +1 -0
  15. package/dist/admin/application-dialogs.d.ts +91 -0
  16. package/dist/admin/application-dialogs.d.ts.map +1 -0
  17. package/dist/admin/application-dialogs.js +250 -0
  18. package/dist/admin/application-dialogs.js.map +1 -0
  19. package/dist/admin/application-rbac-controller.d.ts +56 -0
  20. package/dist/admin/application-rbac-controller.d.ts.map +1 -0
  21. package/dist/admin/application-rbac-controller.js +280 -0
  22. package/dist/admin/application-rbac-controller.js.map +1 -0
  23. package/dist/admin/application-rbac-features.d.ts +51 -0
  24. package/dist/admin/application-rbac-features.d.ts.map +1 -0
  25. package/dist/admin/application-rbac-features.js +175 -0
  26. package/dist/admin/application-rbac-features.js.map +1 -0
  27. package/dist/admin/application-rbac-workspace.d.ts +62 -0
  28. package/dist/admin/application-rbac-workspace.d.ts.map +1 -0
  29. package/dist/admin/application-rbac-workspace.js +344 -0
  30. package/dist/admin/application-rbac-workspace.js.map +1 -0
  31. package/dist/admin/application-runtime.d.ts +44 -0
  32. package/dist/admin/application-runtime.d.ts.map +1 -0
  33. package/dist/admin/application-runtime.js +183 -0
  34. package/dist/admin/application-runtime.js.map +1 -0
  35. package/dist/admin/application-service.d.ts +39 -0
  36. package/dist/admin/application-service.d.ts.map +1 -0
  37. package/dist/admin/application-service.js +248 -0
  38. package/dist/admin/application-service.js.map +1 -0
  39. package/dist/admin/application-state.d.ts +109 -0
  40. package/dist/admin/application-state.d.ts.map +1 -0
  41. package/dist/admin/application-state.js +3 -0
  42. package/dist/admin/application-state.js.map +1 -0
  43. package/dist/admin/application-workspace.d.ts +77 -0
  44. package/dist/admin/application-workspace.d.ts.map +1 -0
  45. package/dist/admin/application-workspace.js +302 -0
  46. package/dist/admin/application-workspace.js.map +1 -0
  47. package/dist/admin/application.d.ts +88 -0
  48. package/dist/admin/application.d.ts.map +1 -0
  49. package/dist/admin/application.js +932 -0
  50. package/dist/admin/application.js.map +1 -0
  51. package/dist/admin/client-authentication-dialog.d.ts +77 -0
  52. package/dist/admin/client-authentication-dialog.d.ts.map +1 -0
  53. package/dist/admin/client-authentication-dialog.js +217 -0
  54. package/dist/admin/client-authentication-dialog.js.map +1 -0
  55. package/dist/admin/client-controller.d.ts +58 -0
  56. package/dist/admin/client-controller.d.ts.map +1 -0
  57. package/dist/admin/client-controller.js +462 -0
  58. package/dist/admin/client-controller.js.map +1 -0
  59. package/dist/admin/client-credential-dialogs.d.ts +36 -0
  60. package/dist/admin/client-credential-dialogs.d.ts.map +1 -0
  61. package/dist/admin/client-credential-dialogs.js +145 -0
  62. package/dist/admin/client-credential-dialogs.js.map +1 -0
  63. package/dist/admin/client-dialogs.d.ts +64 -0
  64. package/dist/admin/client-dialogs.d.ts.map +1 -0
  65. package/dist/admin/client-dialogs.js +110 -0
  66. package/dist/admin/client-dialogs.js.map +1 -0
  67. package/dist/admin/client-form-scroller.d.ts +17 -0
  68. package/dist/admin/client-form-scroller.d.ts.map +1 -0
  69. package/dist/admin/client-form-scroller.js +67 -0
  70. package/dist/admin/client-form-scroller.js.map +1 -0
  71. package/dist/admin/client-registration-dialog.d.ts +27 -0
  72. package/dist/admin/client-registration-dialog.d.ts.map +1 -0
  73. package/dist/admin/client-registration-dialog.js +195 -0
  74. package/dist/admin/client-registration-dialog.js.map +1 -0
  75. package/dist/admin/client-service.d.ts +41 -0
  76. package/dist/admin/client-service.d.ts.map +1 -0
  77. package/dist/admin/client-service.js +486 -0
  78. package/dist/admin/client-service.js.map +1 -0
  79. package/dist/admin/client-state.d.ts +159 -0
  80. package/dist/admin/client-state.d.ts.map +1 -0
  81. package/dist/admin/client-state.js +3 -0
  82. package/dist/admin/client-state.js.map +1 -0
  83. package/dist/admin/client-workspace.d.ts +88 -0
  84. package/dist/admin/client-workspace.d.ts.map +1 -0
  85. package/dist/admin/client-workspace.js +491 -0
  86. package/dist/admin/client-workspace.js.map +1 -0
  87. package/dist/admin/delete-confirmation-layout.d.ts +38 -0
  88. package/dist/admin/delete-confirmation-layout.d.ts.map +1 -0
  89. package/dist/admin/delete-confirmation-layout.js +52 -0
  90. package/dist/admin/delete-confirmation-layout.js.map +1 -0
  91. package/dist/admin/index.d.ts +64 -0
  92. package/dist/admin/index.d.ts.map +1 -0
  93. package/dist/admin/index.js +31 -0
  94. package/dist/admin/index.js.map +1 -0
  95. package/dist/admin/organization-controller.d.ts +77 -0
  96. package/dist/admin/organization-controller.d.ts.map +1 -0
  97. package/dist/admin/organization-controller.js +472 -0
  98. package/dist/admin/organization-controller.js.map +1 -0
  99. package/dist/admin/organization-dialogs.d.ts +63 -0
  100. package/dist/admin/organization-dialogs.d.ts.map +1 -0
  101. package/dist/admin/organization-dialogs.js +303 -0
  102. package/dist/admin/organization-dialogs.js.map +1 -0
  103. package/dist/admin/organization-service.d.ts +110 -0
  104. package/dist/admin/organization-service.d.ts.map +1 -0
  105. package/dist/admin/organization-service.js +548 -0
  106. package/dist/admin/organization-service.js.map +1 -0
  107. package/dist/admin/organization-workspace.d.ts +29 -0
  108. package/dist/admin/organization-workspace.d.ts.map +1 -0
  109. package/dist/admin/organization-workspace.js +421 -0
  110. package/dist/admin/organization-workspace.js.map +1 -0
  111. package/dist/admin/portability-controller.d.ts +83 -0
  112. package/dist/admin/portability-controller.d.ts.map +1 -0
  113. package/dist/admin/portability-controller.js +466 -0
  114. package/dist/admin/portability-controller.js.map +1 -0
  115. package/dist/admin/portability-service.d.ts +31 -0
  116. package/dist/admin/portability-service.d.ts.map +1 -0
  117. package/dist/admin/portability-service.js +51 -0
  118. package/dist/admin/portability-service.js.map +1 -0
  119. package/dist/admin/portability-state.d.ts +88 -0
  120. package/dist/admin/portability-state.d.ts.map +1 -0
  121. package/dist/admin/portability-state.js +3 -0
  122. package/dist/admin/portability-state.js.map +1 -0
  123. package/dist/admin/portability-workspace.d.ts +78 -0
  124. package/dist/admin/portability-workspace.d.ts.map +1 -0
  125. package/dist/admin/portability-workspace.js +337 -0
  126. package/dist/admin/portability-workspace.js.map +1 -0
  127. package/dist/admin/presentation.d.ts +46 -0
  128. package/dist/admin/presentation.d.ts.map +1 -0
  129. package/dist/admin/presentation.js +271 -0
  130. package/dist/admin/presentation.js.map +1 -0
  131. package/dist/admin/rbac-dialogs.d.ts +73 -0
  132. package/dist/admin/rbac-dialogs.d.ts.map +1 -0
  133. package/dist/admin/rbac-dialogs.js +345 -0
  134. package/dist/admin/rbac-dialogs.js.map +1 -0
  135. package/dist/admin/rbac-service.d.ts +47 -0
  136. package/dist/admin/rbac-service.d.ts.map +1 -0
  137. package/dist/admin/rbac-service.js +258 -0
  138. package/dist/admin/rbac-service.js.map +1 -0
  139. package/dist/admin/rbac-state.d.ts +129 -0
  140. package/dist/admin/rbac-state.d.ts.map +1 -0
  141. package/dist/admin/rbac-state.js +136 -0
  142. package/dist/admin/rbac-state.js.map +1 -0
  143. package/dist/admin/selectable-read-only-input.d.ts +18 -0
  144. package/dist/admin/selectable-read-only-input.d.ts.map +1 -0
  145. package/dist/admin/selectable-read-only-input.js +24 -0
  146. package/dist/admin/selectable-read-only-input.js.map +1 -0
  147. package/dist/admin/session-service.d.ts +169 -0
  148. package/dist/admin/session-service.d.ts.map +1 -0
  149. package/dist/admin/session-service.js +353 -0
  150. package/dist/admin/session-service.js.map +1 -0
  151. package/dist/admin/state.d.ts +301 -0
  152. package/dist/admin/state.d.ts.map +1 -0
  153. package/dist/admin/state.js +10 -0
  154. package/dist/admin/state.js.map +1 -0
  155. package/dist/admin/system-config-controller.d.ts +58 -0
  156. package/dist/admin/system-config-controller.d.ts.map +1 -0
  157. package/dist/admin/system-config-controller.js +218 -0
  158. package/dist/admin/system-config-controller.js.map +1 -0
  159. package/dist/admin/system-config-service.d.ts +54 -0
  160. package/dist/admin/system-config-service.d.ts.map +1 -0
  161. package/dist/admin/system-config-service.js +180 -0
  162. package/dist/admin/system-config-service.js.map +1 -0
  163. package/dist/admin/system-config-state.d.ts +77 -0
  164. package/dist/admin/system-config-state.d.ts.map +1 -0
  165. package/dist/admin/system-config-state.js +78 -0
  166. package/dist/admin/system-config-state.js.map +1 -0
  167. package/dist/admin/system-config-workspace.d.ts +47 -0
  168. package/dist/admin/system-config-workspace.d.ts.map +1 -0
  169. package/dist/admin/system-config-workspace.js +217 -0
  170. package/dist/admin/system-config-workspace.js.map +1 -0
  171. package/dist/admin/user-controller-types.d.ts +67 -0
  172. package/dist/admin/user-controller-types.d.ts.map +1 -0
  173. package/dist/admin/user-controller-types.js +3 -0
  174. package/dist/admin/user-controller-types.js.map +1 -0
  175. package/dist/admin/user-controller.d.ts +6 -0
  176. package/dist/admin/user-controller.d.ts.map +1 -0
  177. package/dist/admin/user-controller.js +674 -0
  178. package/dist/admin/user-controller.js.map +1 -0
  179. package/dist/admin/user-dialog-fields.d.ts +44 -0
  180. package/dist/admin/user-dialog-fields.d.ts.map +1 -0
  181. package/dist/admin/user-dialog-fields.js +130 -0
  182. package/dist/admin/user-dialog-fields.js.map +1 -0
  183. package/dist/admin/user-dialogs.d.ts +66 -0
  184. package/dist/admin/user-dialogs.d.ts.map +1 -0
  185. package/dist/admin/user-dialogs.js +374 -0
  186. package/dist/admin/user-dialogs.js.map +1 -0
  187. package/dist/admin/user-role-controller.d.ts +82 -0
  188. package/dist/admin/user-role-controller.d.ts.map +1 -0
  189. package/dist/admin/user-role-controller.js +337 -0
  190. package/dist/admin/user-role-controller.js.map +1 -0
  191. package/dist/admin/user-role-dialog.d.ts +94 -0
  192. package/dist/admin/user-role-dialog.d.ts.map +1 -0
  193. package/dist/admin/user-role-dialog.js +265 -0
  194. package/dist/admin/user-role-dialog.js.map +1 -0
  195. package/dist/admin/user-service-types.d.ts +100 -0
  196. package/dist/admin/user-service-types.d.ts.map +1 -0
  197. package/dist/admin/user-service-types.js +3 -0
  198. package/dist/admin/user-service-types.js.map +1 -0
  199. package/dist/admin/user-service.d.ts +14 -0
  200. package/dist/admin/user-service.d.ts.map +1 -0
  201. package/dist/admin/user-service.js +612 -0
  202. package/dist/admin/user-service.js.map +1 -0
  203. package/dist/admin/user-state.d.ts +158 -0
  204. package/dist/admin/user-state.d.ts.map +1 -0
  205. package/dist/admin/user-state.js +3 -0
  206. package/dist/admin/user-state.js.map +1 -0
  207. package/dist/admin/user-workspace.d.ts +65 -0
  208. package/dist/admin/user-workspace.d.ts.map +1 -0
  209. package/dist/admin/user-workspace.js +366 -0
  210. package/dist/admin/user-workspace.js.map +1 -0
  211. package/dist/auth/browser-flow.d.ts +27 -1
  212. package/dist/auth/browser-flow.d.ts.map +1 -1
  213. package/dist/auth/browser-flow.js +55 -33
  214. package/dist/auth/browser-flow.js.map +1 -1
  215. package/dist/auth/callback-server.d.ts.map +1 -1
  216. package/dist/auth/callback-server.js +5 -9
  217. package/dist/auth/callback-server.js.map +1 -1
  218. package/dist/auth/id-token-verifier.d.ts +39 -0
  219. package/dist/auth/id-token-verifier.d.ts.map +1 -0
  220. package/dist/auth/id-token-verifier.js +104 -0
  221. package/dist/auth/id-token-verifier.js.map +1 -0
  222. package/dist/auth/login-coordinator.d.ts +72 -0
  223. package/dist/auth/login-coordinator.d.ts.map +1 -0
  224. package/dist/auth/login-coordinator.js +190 -0
  225. package/dist/auth/login-coordinator.js.map +1 -0
  226. package/dist/auth/metadata.d.ts +2 -1
  227. package/dist/auth/metadata.d.ts.map +1 -1
  228. package/dist/auth/metadata.js +67 -6
  229. package/dist/auth/metadata.js.map +1 -1
  230. package/dist/auth/types.d.ts +14 -0
  231. package/dist/auth/types.d.ts.map +1 -1
  232. package/dist/client-factory.d.ts.map +1 -1
  233. package/dist/client-factory.js +15 -2
  234. package/dist/client-factory.js.map +1 -1
  235. package/dist/commands/admin.d.ts +22 -0
  236. package/dist/commands/admin.d.ts.map +1 -0
  237. package/dist/commands/admin.js +112 -0
  238. package/dist/commands/admin.js.map +1 -0
  239. package/dist/commands/app-claim.d.ts.map +1 -1
  240. package/dist/commands/app-claim.js +11 -4
  241. package/dist/commands/app-claim.js.map +1 -1
  242. package/dist/commands/app-module.d.ts.map +1 -1
  243. package/dist/commands/app-module.js +61 -12
  244. package/dist/commands/app-module.js.map +1 -1
  245. package/dist/commands/app-permission.d.ts.map +1 -1
  246. package/dist/commands/app-permission.js +66 -24
  247. package/dist/commands/app-permission.js.map +1 -1
  248. package/dist/commands/app-role.d.ts.map +1 -1
  249. package/dist/commands/app-role.js +48 -27
  250. package/dist/commands/app-role.js.map +1 -1
  251. package/dist/commands/app.d.ts.map +1 -1
  252. package/dist/commands/app.js +37 -25
  253. package/dist/commands/app.js.map +1 -1
  254. package/dist/commands/bulk.d.ts.map +1 -1
  255. package/dist/commands/bulk.js +9 -2
  256. package/dist/commands/bulk.js.map +1 -1
  257. package/dist/commands/client-secret.d.ts.map +1 -1
  258. package/dist/commands/client-secret.js +12 -6
  259. package/dist/commands/client-secret.js.map +1 -1
  260. package/dist/commands/client.d.ts +3 -2
  261. package/dist/commands/client.d.ts.map +1 -1
  262. package/dist/commands/client.js +102 -43
  263. package/dist/commands/client.js.map +1 -1
  264. package/dist/commands/config.d.ts +4 -0
  265. package/dist/commands/config.d.ts.map +1 -1
  266. package/dist/commands/config.js +68 -7
  267. package/dist/commands/config.js.map +1 -1
  268. package/dist/commands/export.d.ts +6 -0
  269. package/dist/commands/export.d.ts.map +1 -0
  270. package/dist/commands/export.js +182 -0
  271. package/dist/commands/export.js.map +1 -0
  272. package/dist/commands/import.d.ts +6 -0
  273. package/dist/commands/import.d.ts.map +1 -0
  274. package/dist/commands/import.js +142 -0
  275. package/dist/commands/import.js.map +1 -0
  276. package/dist/commands/keys.d.ts.map +1 -1
  277. package/dist/commands/keys.js +11 -4
  278. package/dist/commands/keys.js.map +1 -1
  279. package/dist/commands/login.d.ts.map +1 -1
  280. package/dist/commands/login.js +24 -10
  281. package/dist/commands/login.js.map +1 -1
  282. package/dist/commands/org.d.ts +2 -4
  283. package/dist/commands/org.d.ts.map +1 -1
  284. package/dist/commands/org.js +16 -76
  285. package/dist/commands/org.js.map +1 -1
  286. package/dist/commands/user-role.d.ts.map +1 -1
  287. package/dist/commands/user-role.js +19 -14
  288. package/dist/commands/user-role.js.map +1 -1
  289. package/dist/commands/user.d.ts +3 -2
  290. package/dist/commands/user.d.ts.map +1 -1
  291. package/dist/commands/user.js +47 -71
  292. package/dist/commands/user.js.map +1 -1
  293. package/dist/commands/version.d.ts +1 -1
  294. package/dist/commands/version.js +1 -1
  295. package/dist/credential-lock.d.ts +20 -0
  296. package/dist/credential-lock.d.ts.map +1 -0
  297. package/dist/credential-lock.js +130 -0
  298. package/dist/credential-lock.js.map +1 -0
  299. package/dist/credential-store.d.ts +14 -0
  300. package/dist/credential-store.d.ts.map +1 -1
  301. package/dist/credential-store.js +114 -3
  302. package/dist/credential-store.js.map +1 -1
  303. package/dist/error-handler.d.ts.map +1 -1
  304. package/dist/error-handler.js +2 -0
  305. package/dist/error-handler.js.map +1 -1
  306. package/dist/global-options.d.ts +8 -0
  307. package/dist/global-options.d.ts.map +1 -1
  308. package/dist/global-options.js +19 -8
  309. package/dist/global-options.js.map +1 -1
  310. package/dist/index.js +7 -5
  311. package/dist/index.js.map +1 -1
  312. package/dist/output.d.ts +11 -0
  313. package/dist/output.d.ts.map +1 -1
  314. package/dist/output.js +25 -6
  315. package/dist/output.js.map +1 -1
  316. package/dist/prompt.d.ts +2 -2
  317. package/dist/prompt.d.ts.map +1 -1
  318. package/dist/prompt.js +27 -7
  319. package/dist/prompt.js.map +1 -1
  320. package/package.json +7 -3
  321. package/dist/commands/gui.d.ts +0 -21
  322. package/dist/commands/gui.d.ts.map +0 -1
  323. package/dist/commands/gui.js +0 -67
  324. package/dist/commands/gui.js.map +0 -1
  325. package/dist/commands/provision.d.ts +0 -47
  326. package/dist/commands/provision.d.ts.map +0 -1
  327. package/dist/commands/provision.js +0 -444
  328. package/dist/commands/provision.js.map +0 -1
@@ -0,0 +1,302 @@
1
+ /** Direct JSVision workspace for deployment-global applications and modules. */
2
+ import { at, Button, col, cover, DataGrid, Dialog, fixed, Group, grow, Label, row, Scroller, Show, signal, sortRows, spacer, TabView, Text, } from '@jsvision/ui';
3
+ import { formatAdminDateTime } from './admin-date-time.js';
4
+ import { createAdminApplicationRbacWorkspace } from './application-rbac-workspace.js';
5
+ import { SelectableReadOnlyInput } from './selectable-read-only-input.js';
6
+ /** Fixed safe labels for application-operation failures. */
7
+ const FAILURE_LABELS = {
8
+ validation: 'Validation failed',
9
+ unauthorized: 'Not authorized',
10
+ conflict: 'Conflict',
11
+ unavailable: 'Service unavailable',
12
+ 'invalid-response': 'Invalid server response',
13
+ };
14
+ /** Columns in the complete deployment-global application catalog. */
15
+ const APPLICATION_COLUMNS = [
16
+ { title: 'Name', accessor: (application) => application.name, width: '2fr', minWidth: 16 },
17
+ { title: 'Slug', accessor: (application) => application.slug, width: '1fr', minWidth: 12 },
18
+ { title: 'Status', accessor: (application) => application.status, width: 10 },
19
+ ];
20
+ /** Columns in one application's same-parent module catalog. */
21
+ const MODULE_COLUMNS = [
22
+ { title: 'Name', accessor: (module) => module.name, width: '2fr', minWidth: 14 },
23
+ { title: 'Slug', accessor: (module) => module.slug, width: '1fr', minWidth: 10 },
24
+ { title: 'Status', accessor: (module) => module.status, width: 10 },
25
+ ];
26
+ /** Creates a feature-specific application workspace using only JSVision layout primitives. */
27
+ export function createAdminApplicationWorkspace(options) {
28
+ const content = new Dialog({ title: 'Applications', width: 72, height: 20 });
29
+ content.closable = false;
30
+ content.resizable = false;
31
+ content.zoomable = false;
32
+ let state = { kind: 'closed' };
33
+ let rbacState = { kind: 'closed' };
34
+ let rbacWorkspace;
35
+ let rbacOwnerKey;
36
+ let currentFocus = null;
37
+ let disposed = false;
38
+ let focusedApplicationId = null;
39
+ let detailApplicationId = null;
40
+ const selectedDetailSection = signal(0);
41
+ /** Releases role and permission pages when their Application owner is no longer current. */
42
+ const closeRbacWorkspace = () => {
43
+ rbacWorkspace?.dispose();
44
+ rbacWorkspace = undefined;
45
+ rbacOwnerKey = undefined;
46
+ };
47
+ /** Returns pages bound to the exact selected Application and current module catalog. */
48
+ const applicationRbacWorkspace = (application, modules) => {
49
+ const ownerKey = `${application.id}:${modules.map((module) => `${module.id}:${module.name}`).join('|')}`;
50
+ if (!rbacWorkspace || rbacOwnerKey !== ownerKey) {
51
+ closeRbacWorkspace();
52
+ rbacOwnerKey = ownerKey;
53
+ rbacWorkspace = createAdminApplicationRbacWorkspace({
54
+ application,
55
+ modules,
56
+ capabilities: options.capabilities,
57
+ onIntent: (intent) => options.onRbacIntent?.(intent),
58
+ focusView: options.focusView,
59
+ });
60
+ rbacWorkspace.setState(rbacState);
61
+ }
62
+ return rbacWorkspace;
63
+ };
64
+ /** Builds an action button whose natural size is resolved by its Layout DSL row. */
65
+ const action = (label, intent, disabled = false) => new Button(label, {
66
+ disabled,
67
+ onClick: () => options.onIntent(intent),
68
+ });
69
+ /** Renders the complete application catalog or its explicit empty state. */
70
+ const renderList = (projection, status) => {
71
+ closeRbacWorkspace();
72
+ detailApplicationId = null;
73
+ const createAllowed = options.capabilities.canCreateApplications;
74
+ let body;
75
+ if (projection.applications.length === 0) {
76
+ body = new Text(createAllowed
77
+ ? 'No applications. Use Applications > Create application.'
78
+ : 'No applications');
79
+ currentFocus = null;
80
+ }
81
+ else {
82
+ const rows = signal([...projection.applications]);
83
+ const focused = signal(Math.max(0, projection.applications.findIndex((item) => item.id === focusedApplicationId)));
84
+ const grid = new DataGrid({
85
+ rows,
86
+ columns: APPLICATION_COLUMNS,
87
+ focused,
88
+ zebra: true,
89
+ onSelect: (_index, selected) => {
90
+ focusedApplicationId = selected.id;
91
+ options.onIntent({ kind: 'select', applicationId: selected.id });
92
+ },
93
+ });
94
+ body = grid;
95
+ currentFocus = grid.rows;
96
+ }
97
+ const applicationCount = projection.applications.length;
98
+ const retry = status?.retry
99
+ ? new Button('~R~etry', { onClick: () => options.onIntent({ kind: 'retry' }) })
100
+ : undefined;
101
+ content.add(cover(col({ gap: 1, padding: { top: 0, right: 1, bottom: 0, left: 1 } }, status && fixed(row({ gap: 1 }, grow(new Text(status.label)), retry), 2), grow(body), projection.applications.length > 0 &&
102
+ fixed(new Text(`↑↓ Move · Enter View details · ${applicationCount} ${applicationCount === 1 ? 'application' : 'applications'}`), 1))));
103
+ if (retry)
104
+ currentFocus = retry;
105
+ };
106
+ /** Renders selected application metadata, lifecycle controls, and its module grid. */
107
+ const renderDetail = (projection, status) => {
108
+ const selected = projection.application;
109
+ if (detailApplicationId !== selected.id) {
110
+ detailApplicationId = selected.id;
111
+ selectedDetailSection.set(0);
112
+ }
113
+ const canUpdate = options.capabilities.canUpdateApplications;
114
+ const canDelete = options.capabilities.canDeleteApplications;
115
+ const lifecycle = selected.status === 'inactive'
116
+ ? action('~A~ctivate', { kind: 'activate', applicationId: selected.id }, !canUpdate)
117
+ : action('~D~eactivate', { kind: 'deactivate', applicationId: selected.id }, !canUpdate);
118
+ const applicationActions = row({ gap: 1 }, spacer(), action('~E~dit', { kind: 'edit', applicationId: selected.id }, !canUpdate), lifecycle, action('Delete', { kind: 'delete', applicationId: selected.id }, !canDelete));
119
+ const slug = new SelectableReadOnlyInput(selected.slug);
120
+ const detail = col(fixed(row({ gap: 1 }, grow(new Text(selected.name)), fixed(new Text(selected.status.toUpperCase()), 10)), 1), fixed(row({ gap: 1 }, fixed(new Label('Slug', slug), 8), fixed(slug, 32), spacer()), 1), fixed(new Text(selected.description ?? 'No description'), 1), fixed(row({ gap: 2 }, grow(new Text(`Created: ${formatAdminDateTime(selected.createdAt)}`)), grow(new Text(`Updated: ${formatAdminDateTime(selected.updatedAt)}`))), 1));
121
+ const moduleRows = signal([...projection.modules]);
122
+ const selectedModuleIndex = signal(-1);
123
+ const moduleSort = signal(null);
124
+ /** Resolves the selected display row after the DataGrid applies its current sort. */
125
+ const selectedModule = () => sortRows(moduleRows(), MODULE_COLUMNS, moduleSort())[selectedModuleIndex()];
126
+ const moduleAction = (label, kind) => new Button(label, {
127
+ disabled: () => {
128
+ const module = selectedModule();
129
+ return (!module ||
130
+ (kind === 'delete-module'
131
+ ? !options.capabilities.canDeleteModules
132
+ : !canUpdate ||
133
+ (kind === 'activate-module' && module.status !== 'inactive') ||
134
+ (kind === 'deactivate-module' && module.status !== 'active')));
135
+ },
136
+ onClick: () => {
137
+ const module = selectedModule();
138
+ if (!module ||
139
+ (kind === 'delete-module' ? !options.capabilities.canDeleteModules : !canUpdate))
140
+ return;
141
+ options.onIntent({ kind, applicationId: selected.id, moduleId: module.id });
142
+ },
143
+ });
144
+ const addModule = action('Add ~m~odule', { kind: 'add-module', applicationId: selected.id }, !canUpdate);
145
+ const editModule = moduleAction('~E~dit module', 'edit-module');
146
+ const activateModule = moduleAction('~A~ctivate module', 'activate-module');
147
+ const deactivateModule = moduleAction('Deacti~v~ate module', 'deactivate-module');
148
+ const deleteModule = moduleAction('Delete module', 'delete-module');
149
+ const moduleLifecycle = row();
150
+ moduleLifecycle.addDynamic(() => Show(() => selectedModule()?.status === 'inactive', () => activateModule, () => deactivateModule));
151
+ const lifecycleWidth = Math.max(activateModule.measure().width, deactivateModule.measure().width);
152
+ const moduleCount = projection.modules.length;
153
+ const moduleCountLabel = new Text(`${moduleCount} ${moduleCount === 1 ? 'module' : 'modules'}`);
154
+ const moduleActionsWidth = moduleCountLabel.measure().width +
155
+ addModule.measure().width +
156
+ editModule.measure().width +
157
+ lifecycleWidth +
158
+ deleteModule.measure().width +
159
+ 5;
160
+ const moduleActions = row({ gap: 1 }, moduleCountLabel, spacer(), addModule, editModule, fixed(moduleLifecycle, lifecycleWidth), deleteModule);
161
+ /**
162
+ * Keeps every operation at its natural width while allowing narrow terminals to pan the row.
163
+ * The first content row stays empty so the toolbar remains visually separate from the grid.
164
+ */
165
+ const moduleActionContent = new Group();
166
+ moduleActionContent.setLayout({ size: { kind: 'fixed', cells: moduleActionsWidth } });
167
+ moduleActionContent.add(at(moduleActions, 0, 1, moduleActionsWidth, 2));
168
+ const moduleActionScroller = new Scroller({
169
+ content: moduleActionContent,
170
+ extent: () => ({
171
+ width: Math.max(moduleActionsWidth, moduleActionScroller.bounds.width),
172
+ height: 3,
173
+ }),
174
+ scrollbars: 'none',
175
+ });
176
+ const back = action('~B~ack to applications', { kind: 'back' });
177
+ const modules = new DataGrid({
178
+ rows: moduleRows,
179
+ columns: MODULE_COLUMNS,
180
+ selected: selectedModuleIndex,
181
+ sort: moduleSort,
182
+ zebra: true,
183
+ });
184
+ const applicationNotices = [
185
+ !options.capabilities.canUpdateApplications
186
+ ? 'Edit and lifecycle actions require application update'
187
+ : undefined,
188
+ !options.capabilities.canDeleteApplications
189
+ ? 'Delete requires application delete'
190
+ : undefined,
191
+ ].filter((value) => Boolean(value));
192
+ const moduleNotices = [
193
+ !options.capabilities.canUpdateApplications
194
+ ? 'Module create, edit, and lifecycle actions require application update'
195
+ : undefined,
196
+ !options.capabilities.canDeleteModules ? 'Module Delete requires module delete' : undefined,
197
+ ].filter((value) => Boolean(value));
198
+ const retry = status?.retry
199
+ ? new Button('~R~etry', { onClick: () => options.onIntent({ kind: 'retry' }) })
200
+ : undefined;
201
+ const overviewPage = col({ gap: 0, padding: { top: 0, right: 1, bottom: 0, left: 1 } }, grow(detail), ...applicationNotices.map((notice) => fixed(new Text(notice), 1)), fixed(applicationActions, 2));
202
+ const modulesPage = col({ gap: 0, padding: { top: 0, right: 1, bottom: 0, left: 1 } }, ...moduleNotices.map((notice) => fixed(new Text(notice), 1)), grow(modules), fixed(moduleActionScroller, 3));
203
+ const rbac = applicationRbacWorkspace(selected, projection.modules);
204
+ /** Wraps a detail subview in the Group required by TabView. */
205
+ const tabPage = (child) => {
206
+ const page = new Group();
207
+ page.add(cover(child));
208
+ return page;
209
+ };
210
+ const tabs = signal([
211
+ { title: 'Overview', content: tabPage(overviewPage) },
212
+ { title: 'Modules', content: tabPage(modulesPage) },
213
+ { title: 'Roles', content: rbac.roles },
214
+ { title: 'Permissions', content: rbac.permissions },
215
+ ]);
216
+ const tabView = new TabView({ tabs, active: selectedDetailSection });
217
+ content.add(cover(col({ gap: 0, padding: { top: 0, right: 1, bottom: 0, left: 1 } }, status && fixed(row({ gap: 1 }, grow(new Text(status.label)), retry), 2), grow(tabView), fixed(row({ gap: 1 }, back, spacer()), 2))));
218
+ currentFocus = retry ?? tabView.strip;
219
+ };
220
+ /** Rebuilds feature content so removed states cannot leave terminal artifacts. */
221
+ const render = () => {
222
+ for (const child of [...content.children])
223
+ content.remove(child);
224
+ currentFocus = null;
225
+ if (disposed || state.kind === 'closed')
226
+ return;
227
+ if (state.kind === 'list') {
228
+ renderList({ ...state });
229
+ return;
230
+ }
231
+ if (state.kind === 'detail') {
232
+ renderDetail({ ...state });
233
+ return;
234
+ }
235
+ const label = state.kind === 'loading'
236
+ ? 'Loading applications…'
237
+ : state.kind === 'indeterminate'
238
+ ? 'The operation outcome is unknown; reload is required'
239
+ : FAILURE_LABELS[state.failure];
240
+ if (state.previous) {
241
+ const status = { label, retry: state.kind !== 'loading' };
242
+ if (state.previous.kind === 'list')
243
+ renderList(state.previous, status);
244
+ else
245
+ renderDetail(state.previous, status);
246
+ return;
247
+ }
248
+ const retry = new Button('~R~etry', {
249
+ onClick: () => options.onIntent({ kind: 'retry' }),
250
+ });
251
+ content.add(cover(col({ gap: 1, padding: { top: 0, right: 1, bottom: 0, left: 1 } }, fixed(new Text('Applications'), 1), fixed(new Text(label), 1), state.kind !== 'loading' && row(retry, spacer()), spacer())));
252
+ if (state.kind !== 'loading')
253
+ currentFocus = retry;
254
+ };
255
+ return {
256
+ content,
257
+ setState(next) {
258
+ if (disposed)
259
+ return;
260
+ state = next;
261
+ render();
262
+ },
263
+ setRbacState(next) {
264
+ if (disposed)
265
+ return;
266
+ rbacState = next;
267
+ rbacWorkspace?.setState(next);
268
+ if (selectedDetailSection.peek() === 2)
269
+ rbacWorkspace?.focusCurrent('roles');
270
+ if (selectedDetailSection.peek() === 3)
271
+ rbacWorkspace?.focusCurrent('permissions');
272
+ },
273
+ focusCurrent() {
274
+ if (currentFocus)
275
+ options.focusView?.(currentFocus);
276
+ },
277
+ clear() {
278
+ if (disposed)
279
+ return;
280
+ state = { kind: 'closed' };
281
+ rbacState = { kind: 'closed' };
282
+ closeRbacWorkspace();
283
+ focusedApplicationId = null;
284
+ detailApplicationId = null;
285
+ selectedDetailSection.set(0);
286
+ render();
287
+ },
288
+ dispose() {
289
+ if (disposed)
290
+ return;
291
+ state = { kind: 'closed' };
292
+ rbacState = { kind: 'closed' };
293
+ closeRbacWorkspace();
294
+ focusedApplicationId = null;
295
+ detailApplicationId = null;
296
+ selectedDetailSection.set(0);
297
+ render();
298
+ disposed = true;
299
+ },
300
+ };
301
+ }
302
+ //# sourceMappingURL=application-workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-workspace.js","sourceRoot":"","sources":["../../src/admin/application-workspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /** Lifecycle and command routing for one embedded administration application. */
2
+ import type { Application, ApplicationOptions, Size2D } from '@jsvision/ui';
3
+ import type { LoginInteraction } from '../auth/login-coordinator.js';
4
+ import type { AdminApplicationInteraction } from './application-runtime.js';
5
+ import type { AdminOrganizationOperations, AdminOrganizationWorkspaceOperations } from './organization-service.js';
6
+ import type { AdminUserOperations } from './user-service.js';
7
+ import type { AdminApplicationOperations } from './application-service.js';
8
+ import type { AdminClientOperations } from './client-service.js';
9
+ import type { AdminRbacOperations } from './rbac-service.js';
10
+ import type { AdminPortabilityOperations } from './portability-service.js';
11
+ import type { AdminSystemConfigOperations } from './system-config-service.js';
12
+ import { type AdminConnectionState } from './state.js';
13
+ /** Supported administration process outcomes. */
14
+ export type AdminExitCode = 0 | 1 | 2 | 129 | 130 | 143;
15
+ /** UI-neutral asynchronous session operations consumed by the application. */
16
+ export interface AdminApplicationSession {
17
+ /** Verifies a stored credential against live UserInfo at startup. */
18
+ readonly verify?: (signal: AbortSignal) => Promise<AdminConnectionState | undefined>;
19
+ /** Starts a fresh login and returns only verified application state. */
20
+ readonly authenticate?: (signal: AbortSignal) => Promise<AdminConnectionState | undefined>;
21
+ /** Repeats a transient, safely repeatable session operation. */
22
+ readonly retry?: (signal: AbortSignal) => Promise<AdminConnectionState | undefined>;
23
+ /** Starts a fresh replacement login for an existing verified identity. */
24
+ readonly reauthenticate?: (signal: AbortSignal) => Promise<AdminConnectionState | undefined>;
25
+ /** Organization operations bound lazily to the verified server session. */
26
+ readonly organizations?: AdminOrganizationOperations;
27
+ /** Selected-organization settings and branding operations for the verified session. */
28
+ readonly organizationWorkspace?: AdminOrganizationWorkspaceOperations;
29
+ /** User operations bound lazily to the verified server session. */
30
+ readonly users?: AdminUserOperations;
31
+ /** Global application operations bound lazily to the verified server session. */
32
+ readonly applications?: AdminApplicationOperations;
33
+ /** Selected-organization client operations bound lazily to the verified server session. */
34
+ readonly clients?: AdminClientOperations;
35
+ /** Application and selected-user RBAC operations bound lazily to the verified server session. */
36
+ readonly rbac?: AdminRbacOperations;
37
+ /** Environment portability operations bound lazily to the verified server session. */
38
+ readonly portability?: AdminPortabilityOperations;
39
+ /** Deployment-global operational configuration for the verified session. */
40
+ readonly systemConfig?: AdminSystemConfigOperations;
41
+ }
42
+ /** State and operations prepared after the application has a selected server. */
43
+ export interface PreparedAdminApplicationSession {
44
+ /** State shown while any stored credential is verified. */
45
+ readonly initialState: AdminConnectionState;
46
+ /** Server-bound session operations. */
47
+ readonly session: AdminApplicationSession;
48
+ }
49
+ /** Narrow process signal boundary used by production and lifecycle tests. */
50
+ export interface AdminSignalSource {
51
+ /** Registers one temporary signal listener. */
52
+ once(signal: NodeJS.Signals, listener: () => void): unknown;
53
+ /** Removes a previously registered signal listener. */
54
+ off(signal: NodeJS.Signals, listener: () => void): unknown;
55
+ }
56
+ /** Dependencies and initial values for one administration application. */
57
+ export interface AdminApplicationOptions {
58
+ /** Normalized Porta server, or omission when the application must ask on first use. */
59
+ readonly server?: URL;
60
+ /** Whether TLS certificate validation was explicitly disabled. */
61
+ readonly insecure: boolean;
62
+ /** Explicit warning intent passed by the command preflight. */
63
+ readonly showInsecureWarning?: boolean;
64
+ /** Optional deterministic viewport used by headless tests. */
65
+ readonly viewport?: Size2D;
66
+ /** Initial verified or unauthenticated state. */
67
+ readonly initialState?: AdminConnectionState;
68
+ /** Shared UI-neutral session operations. */
69
+ readonly session?: AdminApplicationSession;
70
+ /** Builds server-bound operations after the UI interaction boundary exists. */
71
+ readonly prepareSession?: (server: URL, interaction: LoginInteraction) => PreparedAdminApplicationSession;
72
+ /** Optional server-selection seam; production uses a JSVision input dialog. */
73
+ readonly selectServer?: (interaction: AdminApplicationInteraction, signal: AbortSignal) => Promise<URL | undefined>;
74
+ /** Injectable factory used to construct the real JSVision application. */
75
+ readonly applicationFactory?: (options: ApplicationOptions) => Application;
76
+ /** Injectable run boundary used by headless tests. */
77
+ readonly applicationRunner?: (application: Application) => Promise<number>;
78
+ /** Injectable idempotent teardown boundary. */
79
+ readonly applicationFinalizer?: (application: Application) => Promise<void> | void;
80
+ /** Injectable process signal boundary. */
81
+ readonly signalSource?: AdminSignalSource;
82
+ /** Platform used to select portable signal behavior. */
83
+ readonly platform?: NodeJS.Platform;
84
+ }
85
+ export type { AdminApplicationInteraction } from './application-runtime.js';
86
+ /** Starts one administration application and always releases its resources. */
87
+ export declare function runAdminApplication(options: AdminApplicationOptions): Promise<AdminExitCode>;
88
+ //# sourceMappingURL=application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/admin/application.ts"],"names":[],"mappings":"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"}