@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.
Files changed (328) hide show
  1. package/CHANGELOG.md +5 -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 +484 -0
  78. package/dist/admin/client-service.js.map +1 -0
  79. package/dist/admin/client-state.d.ts +157 -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 +484 -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 +87 -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,345 @@
1
+ /** Focused dialogs for Application-owned roles, permissions, and direct mappings. */
2
+ import { Button, CheckGroup, col, ComboBox, Commands, cover, Dialog, fixed, grow, Input, Label, Memo, row, signal, spacer, Text, } from '@jsvision/ui';
3
+ import { runAbortableAdminDialog } from './application-runtime.js';
4
+ import { isCanonicalPermission } from './application-rbac-workspace.js';
5
+ import { deleteActionLabel, deleteConfirmationLayout } from './delete-confirmation-layout.js';
6
+ import { isAdminPermissionSlug } from './rbac-state.js';
7
+ import { SelectableReadOnlyInput } from './selectable-read-only-input.js';
8
+ import { textValidator } from './user-dialog-fields.js';
9
+ const ENTITY_DIALOG_HEIGHT = 20;
10
+ /** Dialog that includes a multiline memo in its modal validity gate. */
11
+ class RbacEntityDialog extends Dialog {
12
+ description;
13
+ descriptionMemo;
14
+ /** Creates one ordinary focused entity dialog. */
15
+ constructor(title, width, height, description, descriptionMemo) {
16
+ super({ title, width, height, centered: true });
17
+ this.description = description;
18
+ this.descriptionMemo = descriptionMemo;
19
+ }
20
+ /** Rejects unsafe or oversized description text for every submit path. */
21
+ valid(command) {
22
+ if (command !== Commands.cancel && !validDescription(this.description.peek())) {
23
+ this.firstInvalid = this.descriptionMemo;
24
+ return false;
25
+ }
26
+ return super.valid(command);
27
+ }
28
+ }
29
+ /** Returns a preferred dialog size capped to the current terminal. */
30
+ function dialogSize(host, preferredWidth, preferredHeight) {
31
+ return {
32
+ width: Math.max(1, Math.min(preferredWidth, host.desktop.bounds.width)),
33
+ height: Math.max(1, Math.min(preferredHeight, host.desktop.bounds.height)),
34
+ };
35
+ }
36
+ /** Runs one abortable modal and always removes its window from the desktop. */
37
+ async function runDialog(host, dialog, operationSignal) {
38
+ host.desktop.addWindow(dialog);
39
+ try {
40
+ return await runAbortableAdminDialog(host.loop, operationSignal, async () => (await host.loop.execView(dialog)) ?? Commands.cancel);
41
+ }
42
+ catch (error) {
43
+ if (error instanceof DOMException && error.name === 'AbortError')
44
+ return Commands.cancel;
45
+ throw error;
46
+ }
47
+ finally {
48
+ host.desktop.removeWindow(dialog);
49
+ }
50
+ }
51
+ /** Accepts bounded multiline text while rejecting terminal control characters. */
52
+ function validDescription(value) {
53
+ if (value.length > 1_000)
54
+ return false;
55
+ return ![...value].some((character) => {
56
+ const codePoint = character.codePointAt(0) ?? 0;
57
+ if (codePoint === 0x0a || codePoint === 0x0d)
58
+ return false;
59
+ return codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f);
60
+ });
61
+ }
62
+ /** Creates the server-compatible role slug validator. */
63
+ function roleSlugValidator() {
64
+ return {
65
+ isValidInput: (value) => value.length <= 100,
66
+ isValid: (value) => {
67
+ const normalized = value.trim();
68
+ return normalized.length === 0 || isSafeClaimValue(normalized, 100);
69
+ },
70
+ };
71
+ }
72
+ /** Creates the server-compatible permission slug validator. */
73
+ function permissionSlugValidator() {
74
+ return {
75
+ isValidInput: (value) => value.length <= 150,
76
+ isValid: (value) => isAdminPermissionSlug(value.trim()),
77
+ };
78
+ }
79
+ /** Checks a trimmed claim value using the terminal-safe response validator. */
80
+ function isSafeClaimValue(value, maximum) {
81
+ if (value.length === 0 || value.length > maximum)
82
+ return false;
83
+ return ![...value].some((character) => {
84
+ const codePoint = character.codePointAt(0) ?? 0;
85
+ return codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f);
86
+ });
87
+ }
88
+ /** Creates one fixed-height labeled input row. */
89
+ function inputRow(label, input) {
90
+ return fixed(row({ gap: 1 }, fixed(new Label(label, input), 14), grow(input)), 1);
91
+ }
92
+ /** Creates the editable fields shared by role and permission forms. */
93
+ function entityForm(options) {
94
+ const name = signal(options.name ?? '');
95
+ const slug = options.slugKind ? signal(options.slug ?? '') : undefined;
96
+ const description = signal(options.description ?? '');
97
+ const slugValidator = options.slugKind === 'permission' ? permissionSlugValidator() : roleSlugValidator();
98
+ const slugInput = slug
99
+ ? new Input({
100
+ value: slug,
101
+ maxLength: options.slugKind === 'permission' ? 150 : 100,
102
+ ...(options.slugKind === 'permission' ? { placeholder: 'Exact claim value' } : {}),
103
+ validator: slugValidator,
104
+ })
105
+ : undefined;
106
+ return {
107
+ name,
108
+ ...(slug ? { slug } : {}),
109
+ slugRequired: options.slugRequired ?? false,
110
+ description,
111
+ nameInput: new Input({ value: name, maxLength: 255, validator: textValidator(1, 255, false) }),
112
+ ...(slugInput ? { slugInput } : {}),
113
+ descriptionMemo: new Memo({ value: description }),
114
+ };
115
+ }
116
+ /** Builds one direct entity form without nested surfaces or scrolling. */
117
+ function entityLayout(form, readOnlyLines, submitLabel, canSubmit, additionalRows = [], compact = false) {
118
+ return col({ gap: compact ? 0 : 1, padding: 1 }, inputRow('Name *', form.nameInput), form.slugInput && inputRow(form.slugRequired ? 'Slug *' : 'Slug', form.slugInput), ...additionalRows, ...readOnlyLines.map((line) => fixed(new Text(line), 1)), fixed(new Text('Description'), 1), grow(form.descriptionMemo, 1, { min: compact ? 1 : 4 }), fixed(row({ gap: 1 }, spacer(), new Button(submitLabel, {
119
+ command: Commands.ok,
120
+ default: true,
121
+ disabled: () => !canSubmit(),
122
+ }), new Button('Cancel', { command: Commands.cancel })), 2));
123
+ }
124
+ /** Returns whether the common entity values satisfy their local field contracts. */
125
+ function entityIsValid(form, slugKind) {
126
+ const nameValid = textValidator(1, 255, false).isValid(form.name());
127
+ const slug = form.slug?.() ?? '';
128
+ const slugValid = slugKind === 'none' ||
129
+ (slugKind === 'optional-role'
130
+ ? roleSlugValidator().isValid(slug)
131
+ : slugKind === 'required-role'
132
+ ? slug.trim().length > 0 && roleSlugValidator().isValid(slug)
133
+ : permissionSlugValidator().isValid(slug));
134
+ return nameValid && slugValid && validDescription(form.description());
135
+ }
136
+ /** Opens the focused role creation form. */
137
+ export async function showCreateRoleDialog(host, operationSignal, application) {
138
+ const { width, height } = dialogSize(host, 68, ENTITY_DIALOG_HEIGHT);
139
+ const form = entityForm({ slugKind: 'role' });
140
+ const dialog = new RbacEntityDialog('Add role', width, height, form.description, form.descriptionMemo);
141
+ dialog.add(cover(entityLayout(form, [`Application: ${application.name}`], '~C~reate', () => entityIsValid(form, 'optional-role'), [], height < ENTITY_DIALOG_HEIGHT)));
142
+ if ((await runDialog(host, dialog, operationSignal)) !== Commands.ok)
143
+ return { kind: 'cancel' };
144
+ const input = { name: form.name.peek() };
145
+ if (form.slug?.peek().trim())
146
+ input.slug = form.slug.peek().trim();
147
+ if (form.description.peek())
148
+ input.description = form.description.peek();
149
+ return { kind: 'create-role', input };
150
+ }
151
+ /** Opens the role editor with all mutable role metadata. */
152
+ export async function showEditRoleDialog(host, operationSignal, application, role) {
153
+ if (role.applicationId !== application.id)
154
+ return { kind: 'cancel' };
155
+ const { width, height } = dialogSize(host, 68, ENTITY_DIALOG_HEIGHT);
156
+ const form = entityForm({ ...role, slugKind: 'role', slugRequired: true });
157
+ const dialog = new RbacEntityDialog('Edit role', width, height, form.description, form.descriptionMemo);
158
+ dialog.add(cover(entityLayout(form, [`Application: ${application.name}`], '~S~ave', () => entityIsValid(form, 'required-role'), [], height < ENTITY_DIALOG_HEIGHT)));
159
+ if ((await runDialog(host, dialog, operationSignal)) !== Commands.ok)
160
+ return { kind: 'cancel' };
161
+ const input = {};
162
+ if (form.name.peek() !== role.name)
163
+ input.name = form.name.peek();
164
+ if (form.slug?.peek().trim() !== role.slug)
165
+ input.slug = form.slug?.peek().trim();
166
+ if (form.description.peek() !== (role.description ?? ''))
167
+ input.description = form.description.peek() || null;
168
+ return { kind: 'update-role', roleId: role.id, input };
169
+ }
170
+ /** Shows the permanent role cascade before dispatch. */
171
+ export async function showDeleteRoleDialog(host, operationSignal, application, role) {
172
+ if (role.applicationId !== application.id)
173
+ return { kind: 'cancel' };
174
+ const { width, height } = dialogSize(host, 72, 13);
175
+ const keep = new Button('Keep', { command: Commands.cancel, default: true });
176
+ const remove = new Button(deleteActionLabel(role.name, width), { command: Commands.yes });
177
+ const dialog = new Dialog({ title: 'Delete role', width, height, centered: true });
178
+ const confirmation = deleteConfirmationLayout({
179
+ dialogWidth: width,
180
+ details: `Application: ${application.name}\nRole: ${role.name}`,
181
+ warning: 'Deleting this role also deletes its permission and user assignments.',
182
+ keep,
183
+ remove,
184
+ });
185
+ dialog.add(cover(confirmation.content));
186
+ const outcome = runDialog(host, dialog, operationSignal);
187
+ host.loop.focusView(keep);
188
+ return (await outcome) === Commands.yes
189
+ ? { kind: 'delete-role', roleId: role.id }
190
+ : { kind: 'cancel' };
191
+ }
192
+ /** Creates valid scope choices owned by the selected Application. */
193
+ function permissionScopeChoices(application, modules) {
194
+ return [
195
+ { label: application.name, moduleId: null },
196
+ ...modules
197
+ .filter((module) => module.applicationId === application.id)
198
+ .map((module) => ({ label: module.name, moduleId: module.id })),
199
+ ];
200
+ }
201
+ /** Opens the focused permission creation form. */
202
+ export async function showCreatePermissionDialog(host, operationSignal, application, modules) {
203
+ const { width, height } = dialogSize(host, 68, ENTITY_DIALOG_HEIGHT);
204
+ const form = entityForm({ slugKind: 'permission', slugRequired: true });
205
+ const choices = permissionScopeChoices(application, modules);
206
+ const scope = signal(choices[0] ?? null);
207
+ const selector = new ComboBox({
208
+ items: signal(choices),
209
+ getText: (choice) => choice.label,
210
+ value: scope,
211
+ editable: false,
212
+ });
213
+ const dialog = new RbacEntityDialog('Add permission', width, height, form.description, form.descriptionMemo);
214
+ const content = entityLayout(form, [`Application: ${application.name}`], '~C~reate', () => entityIsValid(form, 'permission'), [fixed(row({ gap: 1 }, fixed(new Label('Scope', selector), 14), grow(selector)), 1)], height < ENTITY_DIALOG_HEIGHT);
215
+ dialog.add(cover(content));
216
+ if ((await runDialog(host, dialog, operationSignal)) !== Commands.ok)
217
+ return { kind: 'cancel' };
218
+ const input = {
219
+ name: form.name.peek(),
220
+ slug: form.slug?.peek().trim() ?? '',
221
+ };
222
+ if (form.description.peek())
223
+ input.description = form.description.peek();
224
+ const moduleId = scope.peek()?.moduleId;
225
+ if (moduleId)
226
+ input.moduleId = moduleId;
227
+ return { kind: 'create-permission', input };
228
+ }
229
+ /** Opens the permission editor while keeping identity and scope read-only. */
230
+ export async function showEditPermissionDialog(host, operationSignal, application, permission, modules) {
231
+ if (permission.applicationId !== application.id)
232
+ return { kind: 'cancel' };
233
+ const { width, height } = dialogSize(host, 68, ENTITY_DIALOG_HEIGHT);
234
+ const form = entityForm(permission);
235
+ const scope = permission.moduleId
236
+ ? (modules.find((module) => module.id === permission.moduleId)?.name ?? permission.moduleId)
237
+ : application.name;
238
+ const dialog = new RbacEntityDialog('Edit permission', width, height, form.description, form.descriptionMemo);
239
+ dialog.add(cover(entityLayout(form, [
240
+ `Application: ${application.name}`,
241
+ `Scope: ${scope} (read only)`,
242
+ ], '~S~ave', () => entityIsValid(form, 'none'), [inputRow('Slug', new SelectableReadOnlyInput(permission.slug))], height < ENTITY_DIALOG_HEIGHT)));
243
+ const outcome = runDialog(host, dialog, operationSignal);
244
+ host.loop.focusView(form.nameInput);
245
+ if ((await outcome) !== Commands.ok)
246
+ return { kind: 'cancel' };
247
+ const input = {
248
+ ...(form.name.peek() !== permission.name ? { name: form.name.peek() } : {}),
249
+ description: form.description.peek() || null,
250
+ };
251
+ return { kind: 'update-permission', permissionId: permission.id, input };
252
+ }
253
+ /** Shows the permanent permission cascade before dispatch. */
254
+ export async function showDeletePermissionDialog(host, operationSignal, application, permission) {
255
+ if (permission.applicationId !== application.id)
256
+ return { kind: 'cancel' };
257
+ const { width, height } = dialogSize(host, 72, 13);
258
+ const keep = new Button('Keep', { command: Commands.cancel, default: true });
259
+ const remove = new Button(deleteActionLabel(permission.name, width), { command: Commands.yes });
260
+ const dialog = new Dialog({ title: 'Delete permission', width, height, centered: true });
261
+ const confirmation = deleteConfirmationLayout({
262
+ dialogWidth: width,
263
+ details: `Application: ${application.name}\nPermission: ${permission.name}`,
264
+ warning: 'Deleting this permission also deletes its role assignments.',
265
+ keep,
266
+ remove,
267
+ });
268
+ dialog.add(cover(confirmation.content));
269
+ const outcome = runDialog(host, dialog, operationSignal);
270
+ host.loop.focusView(keep);
271
+ return (await outcome) === Commands.yes
272
+ ? { kind: 'delete-permission', permissionId: permission.id }
273
+ : { kind: 'cancel' };
274
+ }
275
+ /** Opens assignable permissions in two checkbox columns and returns their saved differences. */
276
+ export async function showManageRolePermissionsDialog(host, operationSignal, application, role, assigned, available, canManage) {
277
+ if (role.applicationId !== application.id ||
278
+ [...assigned, ...available].some((permission) => permission.applicationId !== application.id)) {
279
+ return { kind: 'cancel' };
280
+ }
281
+ const assignedIds = new Set(assigned.map((permission) => permission.id));
282
+ const allPermissions = [...assigned, ...available];
283
+ const editablePermissions = allPermissions
284
+ .filter((permission) => !isCanonicalPermission(application, permission))
285
+ .sort((left, right) => left.name === right.name
286
+ ? left.slug.localeCompare(right.slug)
287
+ : left.name.localeCompare(right.name));
288
+ const protectedCount = allPermissions.length - editablePermissions.length;
289
+ const splitAt = Math.ceil(editablePermissions.length / 2);
290
+ const permissionColumns = [
291
+ editablePermissions.slice(0, splitAt),
292
+ editablePermissions.slice(splitAt),
293
+ ];
294
+ const initialValues = permissionColumns.map((permissions) => permissions.map((permission) => assignedIds.has(permission.id)));
295
+ const checkedColumns = [signal([...initialValues[0]]), signal([...initialValues[1]])];
296
+ const checkGroups = permissionColumns.map((permissions, index) => new CheckGroup({
297
+ labels: permissions.map((permission) => `${permission.name} — ${permission.slug}`),
298
+ value: checkedColumns[index],
299
+ }));
300
+ const isDirty = () => checkedColumns.some((values, columnIndex) => values().some((value, rowIndex) => value !== initialValues[columnIndex]?.[rowIndex]));
301
+ const checkboxRows = Math.max(1, permissionColumns[0].length, permissionColumns[1].length);
302
+ const { width, height } = dialogSize(host, 78, Math.max(14, checkboxRows + 10));
303
+ const save = new Button('Save', {
304
+ command: Commands.ok,
305
+ default: true,
306
+ disabled: () => !canManage || !isDirty(),
307
+ });
308
+ const cancel = new Button('Cancel', { command: Commands.cancel });
309
+ const permissionChoices = editablePermissions.length === 0
310
+ ? new Text('No assignable permissions.')
311
+ : row({ gap: 2 }, grow(checkGroups[0]), grow(checkGroups[1]));
312
+ const dialog = new Dialog({ title: 'Manage role permissions', width, height, centered: true });
313
+ dialog.resizable = true;
314
+ dialog.minWidth = Math.min(52, width);
315
+ dialog.minHeight = Math.min(12, height);
316
+ dialog.add(cover(col({ gap: 1, padding: 1 }, fixed(new Text(`Application: ${application.name}\nRole: ${role.name}\nChecked permissions are assigned to this role.`), 3), ...(protectedCount > 0
317
+ ? [
318
+ fixed(new Text(`${protectedCount} protected built-in permission${protectedCount === 1 ? ' is' : 's are'} not editable here.`), 1),
319
+ ]
320
+ : []), grow(permissionChoices), fixed(row({ gap: 1 }, spacer(), save, cancel), 2))));
321
+ const outcome = runDialog(host, dialog, operationSignal);
322
+ host.loop.focusView(editablePermissions.length > 0 ? checkGroups[0] : cancel);
323
+ const command = await outcome;
324
+ if (command !== Commands.ok || !isDirty())
325
+ return { kind: 'cancel' };
326
+ const assignPermissionIds = [];
327
+ const removePermissionIds = [];
328
+ permissionColumns.forEach((permissions, columnIndex) => {
329
+ permissions.forEach((permission, rowIndex) => {
330
+ const wasAssigned = initialValues[columnIndex]?.[rowIndex] ?? false;
331
+ const isAssigned = checkedColumns[columnIndex]?.peek()[rowIndex] ?? false;
332
+ if (!wasAssigned && isAssigned)
333
+ assignPermissionIds.push(permission.id);
334
+ if (wasAssigned && !isAssigned)
335
+ removePermissionIds.push(permission.id);
336
+ });
337
+ });
338
+ return {
339
+ kind: 'update-role-permissions',
340
+ roleId: role.id,
341
+ assignPermissionIds,
342
+ removePermissionIds,
343
+ };
344
+ }
345
+ //# sourceMappingURL=rbac-dialogs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbac-dialogs.js","sourceRoot":"","sources":["../../src/admin/rbac-dialogs.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAQrF,OAAO,EACL,MAAM,EACN,UAAU,EACV,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,MAAM,EACN,KAAK,EACL,IAAI,EACJ,KAAK,EACL,KAAK,EACL,IAAI,EACJ,GAAG,EACH,MAAM,EACN,MAAM,EACN,IAAI,GACL,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,oBAAoB,GAAG,EAAE,CAAC;AA8DhC,wEAAwE;AACxE,MAAM,gBAAiB,SAAQ,MAAM;IAMhB,WAAW;IACX,eAAe;IANlC,kDAAkD;IAClD,YACE,KAAa,EACb,KAAa,EACb,MAAc,EACG,WAA2B,EAC3B,eAAqB;QAEtC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;2BAH/B,WAAW;+BACX,eAAe;IAGlC,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,OAAe;QACnB,IAAI,OAAO,KAAK,QAAQ,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC9E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,sEAAsE;AACtE,SAAS,UAAU,CACjB,IAAgC,EAChC,cAAsB,EACtB,eAAuB;IAEvB,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC3E,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,KAAK,UAAU,SAAS,CACtB,IAAgC,EAChC,MAAc,EACd,eAA4B;IAE5B,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC;QACH,OAAO,MAAM,uBAAuB,CAClC,IAAI,CAAC,IAAI,EACT,eAAe,EACf,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAS,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAC1E,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;YAAE,OAAO,QAAQ,CAAC,MAAM,CAAC;QACzF,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,SAAS,gBAAgB,CAAC,KAAa;IACrC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK;QAAE,OAAO,KAAK,CAAC;IACvC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;QACpC,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC3D,OAAO,SAAS,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,yDAAyD;AACzD,SAAS,iBAAiB;IACxB,OAAO;QACL,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG;QAC5C,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACjB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACtE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,SAAS,uBAAuB;IAC9B,OAAO;QACL,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG;QAC5C,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,SAAS,gBAAgB,CAAC,KAAa,EAAE,OAAe;IACtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO;QAAE,OAAO,KAAK,CAAC;IAC/D,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;QACpC,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,SAAS,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kDAAkD;AAClD,SAAS,QAAQ,CAAC,KAAa,EAAE,KAAY;IAC3C,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,uEAAuE;AACvE,SAAS,UAAU,CAAC,OAMnB;IACC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,aAAa,GACjB,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;IACtF,MAAM,SAAS,GAAG,IAAI;QACpB,CAAC,CAAC,IAAI,KAAK,CAAC;YACR,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;YACxD,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,SAAS,EAAE,aAAa;SACzB,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IACd,OAAO;QACL,IAAI;QACJ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK;QAC3C,WAAW;QACX,SAAS,EAAE,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;QAC9F,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,eAAe,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,SAAS,YAAY,CACnB,IAAoB,EACpB,aAAgC,EAChC,WAAmB,EACnB,SAAwB,EACxB,cAAc,GAAoB,EAAE,EACpC,OAAO,GAAG,KAAK;IAEf,OAAO,GAAG,CACR,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EACpC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAClC,IAAI,CAAC,SAAS,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EACjF,GAAG,cAAc,EACjB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EACxD,KAAK,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,EACjC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACvD,KAAK,CACH,GAAG,CACD,EAAE,GAAG,EAAE,CAAC,EAAE,EACV,MAAM,EAAE,EACR,IAAI,MAAM,CAAC,WAAW,EAAE;QACtB,OAAO,EAAE,QAAQ,CAAC,EAAE;QACpB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE;KAC7B,CAAC,EACF,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CACnD,EACD,CAAC,CACF,CACF,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,SAAS,aAAa,CACpB,IAAoB,EACpB,QAAmE;IAEnE,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC;IACjC,MAAM,SAAS,GACb,QAAQ,KAAK,MAAM;QACnB,CAAC,QAAQ,KAAK,eAAe;YAC3B,CAAC,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;YACnC,CAAC,CAAC,QAAQ,KAAK,eAAe;gBAC5B,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC7D,CAAC,CAAC,uBAAuB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,OAAO,SAAS,IAAI,SAAS,IAAI,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,4CAA4C;AAC5C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAgC,EAChC,eAA4B,EAC5B,WAA6B;IAE7B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,gBAAgB,CACjC,UAAU,EACV,KAAK,EACL,MAAM,EACN,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,eAAe,CACrB,CAAC;IACF,MAAM,CAAC,GAAG,CACR,KAAK,CACH,YAAY,CACV,IAAI,EACJ,CAAC,gBAAgB,WAAW,CAAC,IAAI,EAAE,CAAC,EACpC,UAAU,EACV,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,EAC1C,EAAE,EACF,MAAM,GAAG,oBAAoB,CAC9B,CACF,CACF,CAAC;IACF,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,KAAK,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAChG,MAAM,KAAK,GAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;IAC1D,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IACnE,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACzE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AACxC,CAAC;AAED,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAgC,EAChC,eAA4B,EAC5B,WAA6B,EAC7B,IAAe;IAEf,IAAI,IAAI,CAAC,aAAa,KAAK,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACrE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,MAAM,MAAM,GAAG,IAAI,gBAAgB,CACjC,WAAW,EACX,KAAK,EACL,MAAM,EACN,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,eAAe,CACrB,CAAC;IACF,MAAM,CAAC,GAAG,CACR,KAAK,CACH,YAAY,CACV,IAAI,EACJ,CAAC,gBAAgB,WAAW,CAAC,IAAI,EAAE,CAAC,EACpC,QAAQ,EACR,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,EAC1C,EAAE,EACF,MAAM,GAAG,oBAAoB,CAC9B,CACF,CACF,CAAC;IACF,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,KAAK,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAChG,MAAM,KAAK,GAAoB,EAAE,CAAC;IAClC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAClE,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI;QAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IAClF,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;QACtD,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;IACtD,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;AACzD,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAgC,EAChC,eAA4B,EAC5B,WAA6B,EAC7B,IAAe;IAEf,IAAI,IAAI,CAAC,aAAa,KAAK,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACrE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACnF,MAAM,YAAY,GAAG,wBAAwB,CAAC;QAC5C,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,gBAAgB,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI,EAAE;QAC/D,OAAO,EAAE,sEAAsE;QAC/E,IAAI;QACJ,MAAM;KACP,CAAC,CAAC;IACH,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,CAAC,MAAM,OAAO,CAAC,KAAK,QAAQ,CAAC,GAAG;QACrC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;QAC1C,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACzB,CAAC;AAUD,qEAAqE;AACrE,SAAS,sBAAsB,CAC7B,WAA6B,EAC7B,OAA0C;IAE1C,OAAO;QACL,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;QAC3C,GAAG,OAAO;aACP,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,KAAK,WAAW,CAAC,EAAE,CAAC;aAC3D,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,kDAAkD;AAClD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAgC,EAChC,eAA4B,EAC5B,WAA6B,EAC7B,OAA0C;IAE1C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,sBAAsB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,MAAM,CAA+B,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAwB;QACnD,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;QACtB,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK;QACjC,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,gBAAgB,CACjC,gBAAgB,EAChB,KAAK,EACL,MAAM,EACN,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,eAAe,CACrB,CAAC;IACF,MAAM,OAAO,GAAG,YAAY,CAC1B,IAAI,EACJ,CAAC,gBAAgB,WAAW,CAAC,IAAI,EAAE,CAAC,EACpC,UAAU,EACV,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,EACvC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACpF,MAAM,GAAG,oBAAoB,CAC9B,CAAC;IACF,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,KAAK,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAChG,MAAM,KAAK,GAA0B;QACnC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE;KACrC,CAAC;IACF,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QAAE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACzE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC;IACxC,IAAI,QAAQ;QAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACxC,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;AAC9C,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAgC,EAChC,eAA4B,EAC5B,WAA6B,EAC7B,UAA2B,EAC3B,OAA0C;IAE1C,IAAI,UAAU,CAAC,aAAa,KAAK,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC3E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACpC,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ;QAC/B,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC;QAC5F,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;IACrB,MAAM,MAAM,GAAG,IAAI,gBAAgB,CACjC,iBAAiB,EACjB,KAAK,EACL,MAAM,EACN,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,eAAe,CACrB,CAAC;IACF,MAAM,CAAC,GAAG,CACR,KAAK,CACH,YAAY,CACV,IAAI,EACJ;QACE,gBAAgB,WAAW,CAAC,IAAI,EAAE;QAClC,UAAU,KAAK,cAAc;KAC9B,EACD,QAAQ,EACR,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,EACjC,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAChE,MAAM,GAAG,oBAAoB,CAC9B,CACF,CACF,CAAC;IACF,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC/D,MAAM,KAAK,GAA0B;QACnC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,IAAI;KAC7C,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;AAC3E,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,IAAgC,EAChC,eAA4B,EAC5B,WAA6B,EAC7B,UAA2B;IAE3B,IAAI,UAAU,CAAC,aAAa,KAAK,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC3E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;IAChG,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACzF,MAAM,YAAY,GAAG,wBAAwB,CAAC;QAC5C,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,gBAAgB,WAAW,CAAC,IAAI,iBAAiB,UAAU,CAAC,IAAI,EAAE;QAC3E,OAAO,EAAE,6DAA6D;QACtE,IAAI;QACJ,MAAM;KACP,CAAC,CAAC;IACH,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,CAAC,MAAM,OAAO,CAAC,KAAK,QAAQ,CAAC,GAAG;QACrC,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE;QAC5D,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACzB,CAAC;AAED,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,IAAgC,EAChC,eAA4B,EAC5B,WAA6B,EAC7B,IAAe,EACf,QAAoC,EACpC,SAAqC,EACrC,SAAkB;IAElB,IACE,IAAI,CAAC,aAAa,KAAK,WAAW,CAAC,EAAE;QACrC,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,aAAa,KAAK,WAAW,CAAC,EAAE,CAAC,EAC7F,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,MAAM,cAAc,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC;IACnD,MAAM,mBAAmB,GAAG,cAAc;SACvC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;SACvE,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACpB,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;QACtB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;QACrC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CACxC,CAAC;IACJ,MAAM,cAAc,GAAG,cAAc,CAAC,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC;IAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG;QACxB,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;QACrC,mBAAmB,CAAC,KAAK,CAAC,OAAO,CAAC;KAC1B,CAAC;IACX,MAAM,aAAa,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAC1D,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAChE,CAAC;IACF,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAU,CAAC;IAC/F,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CACvC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,CACrB,IAAI,UAAU,CAAC;QACb,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,IAAI,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QAClF,KAAK,EAAE,cAAc,CAAC,KAAK,CAAE;KAC9B,CAAC,CACL,CAAC;IACF,MAAM,OAAO,GAAG,GAAY,EAAE,CAC5B,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAC1C,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,KAAK,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CACrF,CAAC;IACJ,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC3F,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE;QAC9B,OAAO,EAAE,QAAQ,CAAC,EAAE;QACpB,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE;KACzC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAClE,MAAM,iBAAiB,GACrB,mBAAmB,CAAC,MAAM,KAAK,CAAC;QAC9B,CAAC,CAAC,IAAI,IAAI,CAAC,4BAA4B,CAAC;QACxC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/F,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACtC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,CACR,KAAK,CACH,GAAG,CACD,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EACtB,KAAK,CACH,IAAI,IAAI,CACN,gBAAgB,WAAW,CAAC,IAAI,WAAW,IAAI,CAAC,IAAI,kDAAkD,CACvG,EACD,CAAC,CACF,EACD,GAAG,CAAC,cAAc,GAAG,CAAC;QACpB,CAAC,CAAC;YACE,KAAK,CACH,IAAI,IAAI,CACN,GAAG,cAAc,iCAAiC,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,qBAAqB,CAC9G,EACD,CAAC,CACF;SACF;QACH,CAAC,CAAC,EAAE,CAAC,EACP,IAAI,CAAC,iBAAiB,CAAC,EACvB,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAClD,CACF,CACF,CAAC;IACF,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;IAC9B,IAAI,OAAO,KAAK,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACrE,MAAM,mBAAmB,GAAa,EAAE,CAAC;IACzC,MAAM,mBAAmB,GAAa,EAAE,CAAC;IACzC,iBAAiB,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,EAAE;QACrD,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE;YAC3C,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;YACpE,MAAM,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;YAC1E,IAAI,CAAC,WAAW,IAAI,UAAU;gBAAE,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACxE,IAAI,WAAW,IAAI,CAAC,UAAU;gBAAE,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,mBAAmB;QACnB,mBAAmB;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,47 @@
1
+ /** Validated SDK boundary for application roles, permissions, mappings, and user assignments. */
2
+ import type { CreatePermissionInput, CreateRoleInput, PermissionsDomain, RolesDomain, UpdatePermissionInput, UpdateRoleInput, UserRolesDomain } from '@portaidentity/sdk';
3
+ import type { AdminPermission, AdminRbacMutationResult, AdminRbacReadResult, AdminRbacReductionResult, AdminRole } from './rbac-state.js';
4
+ export type * from './rbac-state.js';
5
+ /** Feature-local SDK domains obtained from one authenticated Porta client. */
6
+ export interface AdminRbacDomains {
7
+ /** Application role operations. */
8
+ readonly roles: Pick<RolesDomain, 'list' | 'create' | 'update' | 'delete' | 'listPermissions' | 'assignPermissions' | 'removePermissions'>;
9
+ /** Application permission operations. */
10
+ readonly permissions: Pick<PermissionsDomain, 'list' | 'create' | 'update' | 'delete'>;
11
+ /** Selected-user role assignment operations. */
12
+ readonly userRoles: Pick<UserRolesDomain, 'list' | 'assign' | 'remove'>;
13
+ }
14
+ /** Direct validated operations consumed by the Application and User RBAC controllers. */
15
+ export interface AdminRbacOperations {
16
+ /** Lists every role owned by one application. */
17
+ readonly listRoles: (applicationId: string, signal?: AbortSignal) => Promise<AdminRbacReadResult<readonly AdminRole[]>>;
18
+ /** Lists every permission owned by one application. */
19
+ readonly listPermissions: (applicationId: string, signal?: AbortSignal) => Promise<AdminRbacReadResult<readonly AdminPermission[]>>;
20
+ /** Lists permissions directly assigned to one role. */
21
+ readonly listRolePermissions: (applicationId: string, roleId: string, signal?: AbortSignal) => Promise<AdminRbacReadResult<readonly AdminPermission[]>>;
22
+ /** Creates one role beneath its application. */
23
+ readonly createRole: (applicationId: string, input: CreateRoleInput, signal?: AbortSignal) => Promise<AdminRbacMutationResult<AdminRole>>;
24
+ /** Updates mutable role values and reports a definite authentication effect. */
25
+ readonly updateRole: (applicationId: string, roleId: string, input: UpdateRoleInput, signal?: AbortSignal) => Promise<AdminRbacReductionResult<AdminRole>>;
26
+ /** Permanently deletes one role and reports a definite authentication effect. */
27
+ readonly deleteRole: (applicationId: string, roleId: string, signal?: AbortSignal) => Promise<AdminRbacReductionResult>;
28
+ /** Creates one permission beneath its application. */
29
+ readonly createPermission: (applicationId: string, input: CreatePermissionInput, signal?: AbortSignal) => Promise<AdminRbacMutationResult<AdminPermission>>;
30
+ /** Updates mutable permission metadata. */
31
+ readonly updatePermission: (applicationId: string, permissionId: string, input: UpdatePermissionInput, signal?: AbortSignal) => Promise<AdminRbacMutationResult<AdminPermission>>;
32
+ /** Permanently deletes one permission and reports a definite authentication effect. */
33
+ readonly deletePermission: (applicationId: string, permissionId: string, signal?: AbortSignal) => Promise<AdminRbacReductionResult>;
34
+ /** Assigns the supplied permissions to one role. */
35
+ readonly assignPermissions: (applicationId: string, roleId: string, permissionIds: readonly string[], signal?: AbortSignal) => Promise<AdminRbacMutationResult>;
36
+ /** Removes the supplied permissions and reports a definite authentication effect. */
37
+ readonly removePermissions: (applicationId: string, roleId: string, permissionIds: readonly string[], signal?: AbortSignal) => Promise<AdminRbacReductionResult>;
38
+ /** Lists complete roles assigned to one selected user. */
39
+ readonly listUserRoles: (organizationId: string, userId: string, signal?: AbortSignal) => Promise<AdminRbacReadResult<readonly AdminRole[]>>;
40
+ /** Assigns one or more role IDs to one selected user. */
41
+ readonly assignUserRoles: (organizationId: string, userId: string, roleIds: readonly string[], signal?: AbortSignal) => Promise<AdminRbacMutationResult>;
42
+ /** Removes role IDs from one selected user and reports a definite authentication effect. */
43
+ readonly removeUserRoles: (organizationId: string, userId: string, roleIds: readonly string[], signal?: AbortSignal) => Promise<AdminRbacReductionResult>;
44
+ }
45
+ /** Creates the small RBAC adapter over one lazy authenticated SDK domain bundle. */
46
+ export declare function createAdminRbacOperations(domain: () => AdminRbacDomains): AdminRbacOperations;
47
+ //# sourceMappingURL=rbac-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbac-service.d.ts","sourceRoot":"","sources":["../../src/admin/rbac-service.ts"],"names":[],"mappings":"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"}