@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,484 @@
1
+ /** Validated SDK boundary for selected-organization OIDC client administration. */
2
+ import { PortaAuthenticationError, PortaConflictError, PortaForbiddenError, PortaValidationError, } from '@portaidentity/sdk';
3
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
4
+ /** Returns true when text contains a terminal control character. */
5
+ function containsTerminalControl(value) {
6
+ for (const character of value) {
7
+ const codePoint = character.codePointAt(0) ?? 0;
8
+ if (codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f))
9
+ return true;
10
+ }
11
+ return false;
12
+ }
13
+ /** Validates bounded text retained by the terminal. */
14
+ function isText(value, maximum, minimum = 0) {
15
+ return (typeof value === 'string' &&
16
+ value.length >= minimum &&
17
+ value.length <= maximum &&
18
+ !containsTerminalControl(value));
19
+ }
20
+ /** Validates a display timestamp. */
21
+ function isTimestamp(value) {
22
+ if (!isText(value, 40, 20) ||
23
+ !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?Z$/.test(value)) {
24
+ return false;
25
+ }
26
+ const parsed = new Date(value);
27
+ return Number.isFinite(parsed.getTime()) && parsed.toISOString().slice(0, 19) === value.slice(0, 19);
28
+ }
29
+ /** Validates an optional display timestamp. */
30
+ function isNullableTimestamp(value) {
31
+ return value === null || isTimestamp(value);
32
+ }
33
+ /** Validates an optional bounded, control-free HTTP entity tag. */
34
+ function isEtag(value) {
35
+ return value === null || (typeof value === 'string' && /^W\/"[0-9a-f]{16}"$/.test(value));
36
+ }
37
+ /** Returns true for a non-array object that can be inspected by field name. */
38
+ function isObjectValue(value) {
39
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
40
+ }
41
+ /** Returns an object-shaped untrusted value. */
42
+ function objectValue(value) {
43
+ return isObjectValue(value) ? value : undefined;
44
+ }
45
+ /** Validates one bounded string collection. */
46
+ function stringCollection(value, maximumItems, maximumLength, minimumItems = 0) {
47
+ if (!Array.isArray(value) || value.length < minimumItems || value.length > maximumItems) {
48
+ return undefined;
49
+ }
50
+ const result = [];
51
+ for (const entry of value) {
52
+ if (!isText(entry, maximumLength, 1))
53
+ return undefined;
54
+ result.push(entry);
55
+ }
56
+ return Object.freeze(result);
57
+ }
58
+ /** Validates one closed login-method collection. */
59
+ function loginMethods(value, nullable) {
60
+ if (nullable && value === null)
61
+ return null;
62
+ if (!Array.isArray(value) || value.length < 1 || value.length > 2)
63
+ return undefined;
64
+ const methods = [];
65
+ for (const method of value) {
66
+ if (method !== 'password' && method !== 'magic_link')
67
+ return undefined;
68
+ methods.push(method);
69
+ }
70
+ return Object.freeze(methods);
71
+ }
72
+ /** Validates the closed OAuth grant-type collection. */
73
+ function grantTypes(value) {
74
+ if (!Array.isArray(value) || value.length < 1 || value.length > 3)
75
+ return undefined;
76
+ const grants = [];
77
+ for (const grant of value) {
78
+ if (grant !== 'authorization_code' &&
79
+ grant !== 'client_credentials' &&
80
+ grant !== 'refresh_token') {
81
+ return undefined;
82
+ }
83
+ grants.push(grant);
84
+ }
85
+ return Object.freeze(grants);
86
+ }
87
+ /** Validates the closed OIDC response-type collection. */
88
+ function responseTypes(value) {
89
+ if (!Array.isArray(value) || value.length !== 1 || value[0] !== 'code')
90
+ return undefined;
91
+ return Object.freeze(['code']);
92
+ }
93
+ /** Validates a safe absolute redirect URI without fragments or wildcards. */
94
+ function isRedirectUri(value) {
95
+ if (!isText(value, 2_048, 1) || value.includes('*'))
96
+ return false;
97
+ try {
98
+ const parsed = new URL(value);
99
+ return parsed.protocol.length > 1 && parsed.hash === '';
100
+ }
101
+ catch {
102
+ return false;
103
+ }
104
+ }
105
+ /** Validates an exact HTTP or HTTPS browser origin. */
106
+ function isAllowedOrigin(value) {
107
+ if (!isText(value, 2_048, 1) || value.includes('*'))
108
+ return false;
109
+ try {
110
+ const parsed = new URL(value);
111
+ return ((parsed.protocol === 'https:' || parsed.protocol === 'http:') &&
112
+ parsed.username === '' &&
113
+ parsed.password === '' &&
114
+ parsed.pathname === '/' &&
115
+ parsed.search === '' &&
116
+ parsed.hash === '' &&
117
+ parsed.origin === value);
118
+ }
119
+ catch {
120
+ return false;
121
+ }
122
+ }
123
+ /** Validates the public/confidential protocol relationships used by Porta. */
124
+ function hasCompatibleProtocol(clientType, grants, authenticationMethod, requirePkce) {
125
+ if (clientType === 'public') {
126
+ return (authenticationMethod === 'none' &&
127
+ requirePkce &&
128
+ !grants.includes('client_credentials'));
129
+ }
130
+ return authenticationMethod !== 'none';
131
+ }
132
+ /** Projects one complete organization-owned client or rejects it. */
133
+ function clientValue(value, organizationId) {
134
+ const candidate = objectValue(value);
135
+ const redirects = candidate ? stringCollection(candidate.redirectUris, 10, 2_048, 1) : undefined;
136
+ const logoutRedirects = candidate
137
+ ? stringCollection(candidate.postLogoutRedirectUris, 10, 2_048)
138
+ : undefined;
139
+ const grants = candidate ? grantTypes(candidate.grantTypes) : undefined;
140
+ const responses = candidate ? responseTypes(candidate.responseTypes) : undefined;
141
+ const origins = candidate ? stringCollection(candidate.allowedOrigins, 10, 2_048) : undefined;
142
+ const override = candidate ? loginMethods(candidate.loginMethods, true) : undefined;
143
+ const effective = candidate ? loginMethods(candidate.effectiveLoginMethods, false) : undefined;
144
+ if (!candidate ||
145
+ typeof candidate.id !== 'string' ||
146
+ !UUID.test(candidate.id) ||
147
+ candidate.organizationId !== organizationId ||
148
+ typeof candidate.applicationId !== 'string' ||
149
+ !UUID.test(candidate.applicationId) ||
150
+ !isText(candidate.clientId, 255, 1) ||
151
+ !isText(candidate.clientName, 255, 1) ||
152
+ !(candidate.clientType === 'public' || candidate.clientType === 'confidential') ||
153
+ !(candidate.applicationType === 'web' ||
154
+ candidate.applicationType === 'native' ||
155
+ candidate.applicationType === 'spa') ||
156
+ !redirects ||
157
+ !redirects.every(isRedirectUri) ||
158
+ !logoutRedirects ||
159
+ !logoutRedirects.every(isRedirectUri) ||
160
+ !grants ||
161
+ !responses ||
162
+ !isText(candidate.scope, 2_048, 1) ||
163
+ !(candidate.tokenEndpointAuthMethod === 'client_secret_basic' ||
164
+ candidate.tokenEndpointAuthMethod === 'client_secret_post' ||
165
+ candidate.tokenEndpointAuthMethod === 'none') ||
166
+ !origins ||
167
+ !origins.every(isAllowedOrigin) ||
168
+ typeof candidate.requirePkce !== 'boolean' ||
169
+ !hasCompatibleProtocol(candidate.clientType, grants, candidate.tokenEndpointAuthMethod, candidate.requirePkce) ||
170
+ override === undefined ||
171
+ !effective ||
172
+ !(candidate.status === 'active' || candidate.status === 'inactive') ||
173
+ !isTimestamp(candidate.createdAt) ||
174
+ !isTimestamp(candidate.updatedAt)) {
175
+ return undefined;
176
+ }
177
+ return Object.freeze({
178
+ id: candidate.id,
179
+ organizationId,
180
+ applicationId: candidate.applicationId,
181
+ clientId: candidate.clientId,
182
+ clientName: candidate.clientName,
183
+ clientType: candidate.clientType,
184
+ applicationType: candidate.applicationType,
185
+ redirectUris: redirects,
186
+ postLogoutRedirectUris: logoutRedirects,
187
+ grantTypes: grants,
188
+ responseTypes: responses,
189
+ scope: candidate.scope,
190
+ tokenEndpointAuthMethod: candidate.tokenEndpointAuthMethod,
191
+ allowedOrigins: origins,
192
+ requirePkce: candidate.requirePkce,
193
+ loginMethods: override,
194
+ effectiveLoginMethods: effective,
195
+ status: candidate.status,
196
+ createdAt: candidate.createdAt,
197
+ updatedAt: candidate.updatedAt,
198
+ });
199
+ }
200
+ /** Projects secret metadata and rejects plaintext-bearing values. */
201
+ function secretValue(value, clientId) {
202
+ const candidate = objectValue(value);
203
+ if (!candidate ||
204
+ 'plaintext' in candidate ||
205
+ typeof candidate.id !== 'string' ||
206
+ !UUID.test(candidate.id) ||
207
+ candidate.clientId !== clientId ||
208
+ !(candidate.label === null || isText(candidate.label, 255)) ||
209
+ !(candidate.status === 'active' || candidate.status === 'revoked') ||
210
+ !isNullableTimestamp(candidate.lastUsedAt) ||
211
+ !isNullableTimestamp(candidate.expiresAt) ||
212
+ !isTimestamp(candidate.createdAt)) {
213
+ return undefined;
214
+ }
215
+ return Object.freeze({
216
+ id: candidate.id,
217
+ clientId,
218
+ label: candidate.label,
219
+ status: candidate.status,
220
+ lastUsedAt: candidate.lastUsedAt,
221
+ expiresAt: candidate.expiresAt,
222
+ createdAt: candidate.createdAt,
223
+ });
224
+ }
225
+ /** Projects one one-time generated secret for a synchronous continuation. */
226
+ function generatedSecretValue(value, clientId) {
227
+ const candidate = objectValue(value);
228
+ if (!candidate ||
229
+ typeof candidate.id !== 'string' ||
230
+ !UUID.test(candidate.id) ||
231
+ candidate.clientId !== clientId ||
232
+ !(candidate.label === null || isText(candidate.label, 255)) ||
233
+ !isText(candidate.plaintext, 4_096, 1) ||
234
+ !isNullableTimestamp(candidate.expiresAt) ||
235
+ !isTimestamp(candidate.createdAt)) {
236
+ return undefined;
237
+ }
238
+ return Object.freeze({
239
+ id: candidate.id,
240
+ clientId,
241
+ label: candidate.label,
242
+ plaintext: candidate.plaintext,
243
+ expiresAt: candidate.expiresAt,
244
+ createdAt: candidate.createdAt,
245
+ });
246
+ }
247
+ /** Projects a complete collection without returning partial values. */
248
+ function collection(value, project) {
249
+ if (!Array.isArray(value))
250
+ return undefined;
251
+ const ids = new Set();
252
+ const projected = [];
253
+ for (const entry of value) {
254
+ const item = project(entry);
255
+ const candidate = objectValue(item);
256
+ if (!item || !candidate || typeof candidate.id !== 'string' || ids.has(candidate.id)) {
257
+ return undefined;
258
+ }
259
+ ids.add(candidate.id);
260
+ projected.push(item);
261
+ }
262
+ return Object.freeze(projected);
263
+ }
264
+ /** Maps a read error to a fixed safe result. */
265
+ function readError(error) {
266
+ if (error instanceof PortaAuthenticationError)
267
+ return { kind: 'session-invalid' };
268
+ if (error instanceof PortaValidationError)
269
+ return { kind: 'failure', failure: 'validation' };
270
+ if (error instanceof PortaForbiddenError)
271
+ return { kind: 'failure', failure: 'unauthorized' };
272
+ if (error instanceof PortaConflictError)
273
+ return { kind: 'failure', failure: 'conflict' };
274
+ return { kind: 'failure', failure: 'unavailable' };
275
+ }
276
+ /** Maps a mutation error to a fixed safe result. */
277
+ function mutationError(error) {
278
+ if (error instanceof DOMException && error.name === 'AbortError')
279
+ return { kind: 'cancelled' };
280
+ if (error instanceof PortaAuthenticationError)
281
+ return { kind: 'session-invalid' };
282
+ if (error instanceof PortaValidationError)
283
+ return { kind: 'failure', failure: 'validation' };
284
+ if (error instanceof PortaForbiddenError)
285
+ return { kind: 'failure', failure: 'unauthorized' };
286
+ if (error instanceof PortaConflictError)
287
+ return { kind: 'failure', failure: 'conflict' };
288
+ return { kind: 'outcome-unknown' };
289
+ }
290
+ /** Verifies that an existing client belongs to the active organization before further work. */
291
+ async function readOwnedClient(remote, organizationId, clientId) {
292
+ try {
293
+ const response = await remote.get(clientId);
294
+ const value = clientValue(response.data, organizationId);
295
+ if (value?.id !== clientId)
296
+ return { kind: 'failure', failure: 'invalid-response' };
297
+ return value
298
+ ? { kind: 'success', value }
299
+ : { kind: 'failure', failure: 'invalid-response' };
300
+ }
301
+ catch (error) {
302
+ return readError(error);
303
+ }
304
+ }
305
+ /** Converts a pre-dispatch ownership result to a mutation result. */
306
+ function ownershipMutationFailure(result) {
307
+ return result.kind === 'session-invalid'
308
+ ? result
309
+ : { kind: 'failure', failure: result.failure };
310
+ }
311
+ /** Invokes one void mutation exactly once. */
312
+ async function voidMutation(invoke) {
313
+ try {
314
+ await invoke();
315
+ return { kind: 'success' };
316
+ }
317
+ catch (error) {
318
+ return mutationError(error);
319
+ }
320
+ }
321
+ /** Creates the feature-local client SDK adapter. */
322
+ export function createAdminClientOperations(domain) {
323
+ return {
324
+ async listAll(organizationId) {
325
+ if (!UUID.test(organizationId))
326
+ return { kind: 'failure', failure: 'validation' };
327
+ try {
328
+ const value = collection(await domain().listAll({ organizationId }), (entry) => clientValue(entry, organizationId));
329
+ return value
330
+ ? { kind: 'success', value }
331
+ : { kind: 'failure', failure: 'invalid-response' };
332
+ }
333
+ catch (error) {
334
+ return readError(error);
335
+ }
336
+ },
337
+ async get(organizationId, clientId) {
338
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
339
+ return { kind: 'failure', failure: 'validation' };
340
+ }
341
+ try {
342
+ const response = await domain().get(clientId);
343
+ const value = clientValue(response.data, organizationId);
344
+ if (!value || value.id !== clientId || !isEtag(response.etag)) {
345
+ return { kind: 'failure', failure: 'invalid-response' };
346
+ }
347
+ return { kind: 'success', value: { client: value, etag: response.etag } };
348
+ }
349
+ catch (error) {
350
+ return readError(error);
351
+ }
352
+ },
353
+ async create(organizationId, input) {
354
+ if (!UUID.test(organizationId))
355
+ return { kind: 'failure', failure: 'validation' };
356
+ try {
357
+ const response = await domain().create({ ...input, organizationId });
358
+ const created = clientValue(response.client, organizationId);
359
+ const generated = response.secret
360
+ ? generatedSecretValue(response.secret, response.client.id)
361
+ : undefined;
362
+ if (!created ||
363
+ (created.clientType === 'confidential' && !generated) ||
364
+ (created.clientType === 'public' && generated)) {
365
+ return { kind: 'outcome-unknown' };
366
+ }
367
+ return {
368
+ kind: 'success',
369
+ value: generated ? { client: created, secret: generated } : { client: created },
370
+ };
371
+ }
372
+ catch (error) {
373
+ return mutationError(error);
374
+ }
375
+ },
376
+ async update(organizationId, clientId, input, etag, signal) {
377
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
378
+ return { kind: 'failure', failure: 'validation' };
379
+ }
380
+ try {
381
+ const remote = domain();
382
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
383
+ if (ownership.kind !== 'success')
384
+ return ownershipMutationFailure(ownership);
385
+ if (signal?.aborted)
386
+ return { kind: 'cancelled' };
387
+ const value = clientValue(await remote.update(clientId, input, etag), organizationId);
388
+ return value
389
+ ? { kind: 'success', value }
390
+ : { kind: 'outcome-unknown' };
391
+ }
392
+ catch (error) {
393
+ return mutationError(error);
394
+ }
395
+ },
396
+ async activate(organizationId, clientId, signal) {
397
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
398
+ return { kind: 'failure', failure: 'validation' };
399
+ }
400
+ const remote = domain();
401
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
402
+ if (ownership.kind === 'success' && signal?.aborted)
403
+ return { kind: 'cancelled' };
404
+ return ownership.kind === 'success'
405
+ ? voidMutation(() => remote.activate(clientId))
406
+ : ownershipMutationFailure(ownership);
407
+ },
408
+ async deactivate(organizationId, clientId, signal) {
409
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
410
+ return { kind: 'failure', failure: 'validation' };
411
+ }
412
+ const remote = domain();
413
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
414
+ if (ownership.kind === 'success' && signal?.aborted)
415
+ return { kind: 'cancelled' };
416
+ return ownership.kind === 'success'
417
+ ? voidMutation(() => remote.deactivate(clientId))
418
+ : ownershipMutationFailure(ownership);
419
+ },
420
+ async delete(organizationId, clientId, signal) {
421
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
422
+ return { kind: 'failure', failure: 'validation' };
423
+ }
424
+ const remote = domain();
425
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
426
+ if (ownership.kind === 'success' && signal?.aborted)
427
+ return { kind: 'cancelled' };
428
+ return ownership.kind === 'success'
429
+ ? voidMutation(() => remote.delete(clientId))
430
+ : ownershipMutationFailure(ownership);
431
+ },
432
+ async listSecrets(organizationId, clientId) {
433
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
434
+ return { kind: 'failure', failure: 'validation' };
435
+ }
436
+ try {
437
+ const remote = domain();
438
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
439
+ if (ownership.kind !== 'success')
440
+ return ownership;
441
+ const value = collection(await remote.listSecrets(clientId), (entry) => secretValue(entry, clientId));
442
+ return value
443
+ ? { kind: 'success', value }
444
+ : { kind: 'failure', failure: 'invalid-response' };
445
+ }
446
+ catch (error) {
447
+ return readError(error);
448
+ }
449
+ },
450
+ async generateSecret(organizationId, clientId, input, signal) {
451
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
452
+ return { kind: 'failure', failure: 'validation' };
453
+ }
454
+ try {
455
+ const remote = domain();
456
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
457
+ if (ownership.kind !== 'success')
458
+ return ownershipMutationFailure(ownership);
459
+ if (signal?.aborted)
460
+ return { kind: 'cancelled' };
461
+ const value = generatedSecretValue(await remote.generateSecret(clientId, input), clientId);
462
+ return value
463
+ ? { kind: 'success', value }
464
+ : { kind: 'outcome-unknown' };
465
+ }
466
+ catch (error) {
467
+ return mutationError(error);
468
+ }
469
+ },
470
+ async revokeSecret(organizationId, clientId, secretId, signal) {
471
+ if (!UUID.test(organizationId) || !UUID.test(clientId) || !UUID.test(secretId)) {
472
+ return { kind: 'failure', failure: 'validation' };
473
+ }
474
+ const remote = domain();
475
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
476
+ if (ownership.kind === 'success' && signal?.aborted)
477
+ return { kind: 'cancelled' };
478
+ return ownership.kind === 'success'
479
+ ? voidMutation(() => remote.revokeSecret(clientId, secretId))
480
+ : ownershipMutationFailure(ownership);
481
+ },
482
+ };
483
+ }
484
+ //# sourceMappingURL=client-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-service.js","sourceRoot":"","sources":["../../src/admin/client-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ /** Immutable selected-organization OIDC client values retained by the terminal application. */
2
+ /** Supported OIDC client lifecycle values. */
3
+ export type AdminClientStatus = 'active' | 'inactive';
4
+ /** Allowlisted OIDC client projection safe for terminal presentation. */
5
+ export interface AdminClient {
6
+ /** Stable internal client UUID used by Admin routes. */
7
+ readonly id: string;
8
+ /** Internal UUID of the owning organization. */
9
+ readonly organizationId: string;
10
+ /** Internal UUID of the global application definition. */
11
+ readonly applicationId: string;
12
+ /** Generated OIDC client identifier. */
13
+ readonly clientId: string;
14
+ /** Administrative display name. */
15
+ readonly clientName: string;
16
+ /** Whether the client holds secrets. */
17
+ readonly clientType: 'public' | 'confidential';
18
+ /** Deployment model used for protocol defaults. */
19
+ readonly applicationType: 'web' | 'native' | 'spa';
20
+ /** Registered authorization redirect URIs. */
21
+ readonly redirectUris: readonly string[];
22
+ /** Registered post-logout redirect URIs. */
23
+ readonly postLogoutRedirectUris: readonly string[];
24
+ /** Enabled OAuth grant types. */
25
+ readonly grantTypes: readonly ('authorization_code' | 'client_credentials' | 'refresh_token')[];
26
+ /** Enabled OIDC response types. */
27
+ readonly responseTypes: readonly 'code'[];
28
+ /** Space-delimited scope allowlist. */
29
+ readonly scope: string;
30
+ /** Token endpoint authentication method. */
31
+ readonly tokenEndpointAuthMethod: 'client_secret_basic' | 'client_secret_post' | 'none';
32
+ /** Exact browser origins permitted by the server. */
33
+ readonly allowedOrigins: readonly string[];
34
+ /** Whether authorization-code requests require PKCE. */
35
+ readonly requirePkce: boolean;
36
+ /** Per-client login-method override, or null to inherit. */
37
+ readonly loginMethods: readonly ('password' | 'magic_link')[] | null;
38
+ /** Effective login methods after organization inheritance. */
39
+ readonly effectiveLoginMethods: readonly ('password' | 'magic_link')[];
40
+ /** Current lifecycle state. */
41
+ readonly status: AdminClientStatus;
42
+ /** Creation timestamp. */
43
+ readonly createdAt: string;
44
+ /** Most recent update timestamp. */
45
+ readonly updatedAt: string;
46
+ }
47
+ /** Allowlisted client-secret metadata that never contains plaintext. */
48
+ export interface AdminClientSecret {
49
+ /** Stable internal secret UUID. */
50
+ readonly id: string;
51
+ /** Internal UUID of the owning client. */
52
+ readonly clientId: string;
53
+ /** Optional administrative label. */
54
+ readonly label: string | null;
55
+ /** Stored lifecycle state. */
56
+ readonly status: 'active' | 'revoked';
57
+ /** Most recent successful-use timestamp. */
58
+ readonly lastUsedAt: string | null;
59
+ /** Optional expiry timestamp. */
60
+ readonly expiresAt: string | null;
61
+ /** Creation timestamp. */
62
+ readonly createdAt: string;
63
+ }
64
+ /** One-time secret returned only through a synchronous controller continuation. */
65
+ export interface AdminGeneratedClientSecret {
66
+ /** Stable internal secret UUID. */
67
+ readonly id: string;
68
+ /** Internal UUID of the owning client. */
69
+ readonly clientId: string;
70
+ /** Optional administrative label. */
71
+ readonly label: string | null;
72
+ /** One-time plaintext that must never enter application state. */
73
+ readonly plaintext: string;
74
+ /** Optional expiry timestamp. */
75
+ readonly expiresAt: string | null;
76
+ /** Creation timestamp. */
77
+ readonly createdAt: string;
78
+ }
79
+ /** Transient secret presentation value enriched with safe client display identity. */
80
+ export interface AdminClientSecretPresentation extends AdminGeneratedClientSecret {
81
+ /** Administrative client name returned by the same authoritative workflow. */
82
+ readonly clientName: string;
83
+ /** Generated OIDC client identifier shown to the operator. */
84
+ readonly oidcClientId: string;
85
+ }
86
+ /** Fixed client failure categories safe to display. */
87
+ export type AdminClientFailureKind = 'validation' | 'unauthorized' | 'conflict' | 'unavailable' | 'invalid-response';
88
+ /** Sanitized client read result. */
89
+ export type AdminClientReadResult<T> = {
90
+ readonly kind: 'success';
91
+ readonly value: T;
92
+ } | {
93
+ readonly kind: 'session-invalid';
94
+ } | {
95
+ readonly kind: 'failure';
96
+ readonly failure: AdminClientFailureKind;
97
+ };
98
+ /** Sanitized client mutation result. */
99
+ export type AdminClientMutationResult<T = void> = ({
100
+ readonly kind: 'success';
101
+ } & (T extends void ? object : {
102
+ readonly value: T;
103
+ })) | {
104
+ readonly kind: 'session-invalid';
105
+ } | {
106
+ readonly kind: 'cancelled';
107
+ } | {
108
+ readonly kind: 'outcome-unknown';
109
+ } | {
110
+ readonly kind: 'failure';
111
+ readonly failure: AdminClientFailureKind;
112
+ };
113
+ /** Validated complete catalog for one selected organization. */
114
+ export interface AdminClientListProjection {
115
+ /** Internal UUID of the selected organization. */
116
+ readonly organizationId: string;
117
+ /** Complete validated organization-owned client catalog. */
118
+ readonly clients: readonly AdminClient[];
119
+ }
120
+ /** Validated selected-client detail retained with its catalog. */
121
+ export interface AdminClientDetailProjection extends AdminClientListProjection {
122
+ /** Selected organization-owned client. */
123
+ readonly client: AdminClient;
124
+ /** Resolved global application name when application read is available. */
125
+ readonly applicationName?: string;
126
+ /** Update precondition returned with the selected client. */
127
+ readonly etag?: string | null;
128
+ /** Metadata-only secrets already loaded for the selected client. */
129
+ readonly secrets: readonly AdminClientSecret[];
130
+ }
131
+ /** Safe client projection that may remain visible while an operation is pending or fails. */
132
+ export type AdminClientProjection = ({
133
+ readonly kind: 'list';
134
+ } & AdminClientListProjection) | ({
135
+ readonly kind: 'detail';
136
+ } & AdminClientDetailProjection) | ({
137
+ readonly kind: 'secrets';
138
+ readonly legacyOnly?: boolean;
139
+ } & AdminClientDetailProjection);
140
+ /** Complete selected-organization client controller state. */
141
+ export type AdminClientViewState = {
142
+ readonly kind: 'closed';
143
+ } | {
144
+ readonly kind: 'loading';
145
+ readonly organizationId: string;
146
+ readonly previous?: AdminClientProjection | readonly AdminClient[];
147
+ } | AdminClientProjection | {
148
+ readonly kind: 'indeterminate';
149
+ readonly organizationId: string;
150
+ readonly previous?: AdminClientProjection | readonly AdminClient[];
151
+ } | {
152
+ readonly kind: 'failure';
153
+ readonly organizationId: string;
154
+ readonly failure: AdminClientFailureKind;
155
+ readonly previous?: AdminClientProjection | readonly AdminClient[];
156
+ };
157
+ //# sourceMappingURL=client-state.d.ts.map