@portaidentity/cli 1.7.3 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +125 -105
  3. package/dist/admin/admin-date-time.d.ts +6 -0
  4. package/dist/admin/admin-date-time.d.ts.map +1 -0
  5. package/dist/admin/admin-date-time.js +33 -0
  6. package/dist/admin/admin-date-time.js.map +1 -0
  7. package/dist/admin/application-client-features.d.ts +38 -0
  8. package/dist/admin/application-client-features.d.ts.map +1 -0
  9. package/dist/admin/application-client-features.js +545 -0
  10. package/dist/admin/application-client-features.js.map +1 -0
  11. package/dist/admin/application-controller.d.ts +58 -0
  12. package/dist/admin/application-controller.d.ts.map +1 -0
  13. package/dist/admin/application-controller.js +286 -0
  14. package/dist/admin/application-controller.js.map +1 -0
  15. package/dist/admin/application-dialogs.d.ts +91 -0
  16. package/dist/admin/application-dialogs.d.ts.map +1 -0
  17. package/dist/admin/application-dialogs.js +250 -0
  18. package/dist/admin/application-dialogs.js.map +1 -0
  19. package/dist/admin/application-rbac-controller.d.ts +56 -0
  20. package/dist/admin/application-rbac-controller.d.ts.map +1 -0
  21. package/dist/admin/application-rbac-controller.js +280 -0
  22. package/dist/admin/application-rbac-controller.js.map +1 -0
  23. package/dist/admin/application-rbac-features.d.ts +51 -0
  24. package/dist/admin/application-rbac-features.d.ts.map +1 -0
  25. package/dist/admin/application-rbac-features.js +175 -0
  26. package/dist/admin/application-rbac-features.js.map +1 -0
  27. package/dist/admin/application-rbac-workspace.d.ts +62 -0
  28. package/dist/admin/application-rbac-workspace.d.ts.map +1 -0
  29. package/dist/admin/application-rbac-workspace.js +344 -0
  30. package/dist/admin/application-rbac-workspace.js.map +1 -0
  31. package/dist/admin/application-runtime.d.ts +44 -0
  32. package/dist/admin/application-runtime.d.ts.map +1 -0
  33. package/dist/admin/application-runtime.js +183 -0
  34. package/dist/admin/application-runtime.js.map +1 -0
  35. package/dist/admin/application-service.d.ts +39 -0
  36. package/dist/admin/application-service.d.ts.map +1 -0
  37. package/dist/admin/application-service.js +248 -0
  38. package/dist/admin/application-service.js.map +1 -0
  39. package/dist/admin/application-state.d.ts +109 -0
  40. package/dist/admin/application-state.d.ts.map +1 -0
  41. package/dist/admin/application-state.js +3 -0
  42. package/dist/admin/application-state.js.map +1 -0
  43. package/dist/admin/application-workspace.d.ts +77 -0
  44. package/dist/admin/application-workspace.d.ts.map +1 -0
  45. package/dist/admin/application-workspace.js +302 -0
  46. package/dist/admin/application-workspace.js.map +1 -0
  47. package/dist/admin/application.d.ts +88 -0
  48. package/dist/admin/application.d.ts.map +1 -0
  49. package/dist/admin/application.js +932 -0
  50. package/dist/admin/application.js.map +1 -0
  51. package/dist/admin/client-authentication-dialog.d.ts +77 -0
  52. package/dist/admin/client-authentication-dialog.d.ts.map +1 -0
  53. package/dist/admin/client-authentication-dialog.js +217 -0
  54. package/dist/admin/client-authentication-dialog.js.map +1 -0
  55. package/dist/admin/client-controller.d.ts +58 -0
  56. package/dist/admin/client-controller.d.ts.map +1 -0
  57. package/dist/admin/client-controller.js +462 -0
  58. package/dist/admin/client-controller.js.map +1 -0
  59. package/dist/admin/client-credential-dialogs.d.ts +36 -0
  60. package/dist/admin/client-credential-dialogs.d.ts.map +1 -0
  61. package/dist/admin/client-credential-dialogs.js +145 -0
  62. package/dist/admin/client-credential-dialogs.js.map +1 -0
  63. package/dist/admin/client-dialogs.d.ts +64 -0
  64. package/dist/admin/client-dialogs.d.ts.map +1 -0
  65. package/dist/admin/client-dialogs.js +110 -0
  66. package/dist/admin/client-dialogs.js.map +1 -0
  67. package/dist/admin/client-form-scroller.d.ts +17 -0
  68. package/dist/admin/client-form-scroller.d.ts.map +1 -0
  69. package/dist/admin/client-form-scroller.js +67 -0
  70. package/dist/admin/client-form-scroller.js.map +1 -0
  71. package/dist/admin/client-registration-dialog.d.ts +27 -0
  72. package/dist/admin/client-registration-dialog.d.ts.map +1 -0
  73. package/dist/admin/client-registration-dialog.js +195 -0
  74. package/dist/admin/client-registration-dialog.js.map +1 -0
  75. package/dist/admin/client-service.d.ts +41 -0
  76. package/dist/admin/client-service.d.ts.map +1 -0
  77. package/dist/admin/client-service.js +486 -0
  78. package/dist/admin/client-service.js.map +1 -0
  79. package/dist/admin/client-state.d.ts +159 -0
  80. package/dist/admin/client-state.d.ts.map +1 -0
  81. package/dist/admin/client-state.js +3 -0
  82. package/dist/admin/client-state.js.map +1 -0
  83. package/dist/admin/client-workspace.d.ts +88 -0
  84. package/dist/admin/client-workspace.d.ts.map +1 -0
  85. package/dist/admin/client-workspace.js +491 -0
  86. package/dist/admin/client-workspace.js.map +1 -0
  87. package/dist/admin/delete-confirmation-layout.d.ts +38 -0
  88. package/dist/admin/delete-confirmation-layout.d.ts.map +1 -0
  89. package/dist/admin/delete-confirmation-layout.js +52 -0
  90. package/dist/admin/delete-confirmation-layout.js.map +1 -0
  91. package/dist/admin/index.d.ts +64 -0
  92. package/dist/admin/index.d.ts.map +1 -0
  93. package/dist/admin/index.js +31 -0
  94. package/dist/admin/index.js.map +1 -0
  95. package/dist/admin/organization-controller.d.ts +77 -0
  96. package/dist/admin/organization-controller.d.ts.map +1 -0
  97. package/dist/admin/organization-controller.js +472 -0
  98. package/dist/admin/organization-controller.js.map +1 -0
  99. package/dist/admin/organization-dialogs.d.ts +63 -0
  100. package/dist/admin/organization-dialogs.d.ts.map +1 -0
  101. package/dist/admin/organization-dialogs.js +303 -0
  102. package/dist/admin/organization-dialogs.js.map +1 -0
  103. package/dist/admin/organization-service.d.ts +110 -0
  104. package/dist/admin/organization-service.d.ts.map +1 -0
  105. package/dist/admin/organization-service.js +548 -0
  106. package/dist/admin/organization-service.js.map +1 -0
  107. package/dist/admin/organization-workspace.d.ts +29 -0
  108. package/dist/admin/organization-workspace.d.ts.map +1 -0
  109. package/dist/admin/organization-workspace.js +421 -0
  110. package/dist/admin/organization-workspace.js.map +1 -0
  111. package/dist/admin/portability-controller.d.ts +83 -0
  112. package/dist/admin/portability-controller.d.ts.map +1 -0
  113. package/dist/admin/portability-controller.js +466 -0
  114. package/dist/admin/portability-controller.js.map +1 -0
  115. package/dist/admin/portability-service.d.ts +31 -0
  116. package/dist/admin/portability-service.d.ts.map +1 -0
  117. package/dist/admin/portability-service.js +51 -0
  118. package/dist/admin/portability-service.js.map +1 -0
  119. package/dist/admin/portability-state.d.ts +88 -0
  120. package/dist/admin/portability-state.d.ts.map +1 -0
  121. package/dist/admin/portability-state.js +3 -0
  122. package/dist/admin/portability-state.js.map +1 -0
  123. package/dist/admin/portability-workspace.d.ts +78 -0
  124. package/dist/admin/portability-workspace.d.ts.map +1 -0
  125. package/dist/admin/portability-workspace.js +337 -0
  126. package/dist/admin/portability-workspace.js.map +1 -0
  127. package/dist/admin/presentation.d.ts +46 -0
  128. package/dist/admin/presentation.d.ts.map +1 -0
  129. package/dist/admin/presentation.js +271 -0
  130. package/dist/admin/presentation.js.map +1 -0
  131. package/dist/admin/rbac-dialogs.d.ts +73 -0
  132. package/dist/admin/rbac-dialogs.d.ts.map +1 -0
  133. package/dist/admin/rbac-dialogs.js +345 -0
  134. package/dist/admin/rbac-dialogs.js.map +1 -0
  135. package/dist/admin/rbac-service.d.ts +47 -0
  136. package/dist/admin/rbac-service.d.ts.map +1 -0
  137. package/dist/admin/rbac-service.js +258 -0
  138. package/dist/admin/rbac-service.js.map +1 -0
  139. package/dist/admin/rbac-state.d.ts +129 -0
  140. package/dist/admin/rbac-state.d.ts.map +1 -0
  141. package/dist/admin/rbac-state.js +136 -0
  142. package/dist/admin/rbac-state.js.map +1 -0
  143. package/dist/admin/selectable-read-only-input.d.ts +18 -0
  144. package/dist/admin/selectable-read-only-input.d.ts.map +1 -0
  145. package/dist/admin/selectable-read-only-input.js +24 -0
  146. package/dist/admin/selectable-read-only-input.js.map +1 -0
  147. package/dist/admin/session-service.d.ts +169 -0
  148. package/dist/admin/session-service.d.ts.map +1 -0
  149. package/dist/admin/session-service.js +353 -0
  150. package/dist/admin/session-service.js.map +1 -0
  151. package/dist/admin/state.d.ts +301 -0
  152. package/dist/admin/state.d.ts.map +1 -0
  153. package/dist/admin/state.js +10 -0
  154. package/dist/admin/state.js.map +1 -0
  155. package/dist/admin/system-config-controller.d.ts +58 -0
  156. package/dist/admin/system-config-controller.d.ts.map +1 -0
  157. package/dist/admin/system-config-controller.js +218 -0
  158. package/dist/admin/system-config-controller.js.map +1 -0
  159. package/dist/admin/system-config-service.d.ts +54 -0
  160. package/dist/admin/system-config-service.d.ts.map +1 -0
  161. package/dist/admin/system-config-service.js +180 -0
  162. package/dist/admin/system-config-service.js.map +1 -0
  163. package/dist/admin/system-config-state.d.ts +77 -0
  164. package/dist/admin/system-config-state.d.ts.map +1 -0
  165. package/dist/admin/system-config-state.js +78 -0
  166. package/dist/admin/system-config-state.js.map +1 -0
  167. package/dist/admin/system-config-workspace.d.ts +47 -0
  168. package/dist/admin/system-config-workspace.d.ts.map +1 -0
  169. package/dist/admin/system-config-workspace.js +217 -0
  170. package/dist/admin/system-config-workspace.js.map +1 -0
  171. package/dist/admin/user-controller-types.d.ts +67 -0
  172. package/dist/admin/user-controller-types.d.ts.map +1 -0
  173. package/dist/admin/user-controller-types.js +3 -0
  174. package/dist/admin/user-controller-types.js.map +1 -0
  175. package/dist/admin/user-controller.d.ts +6 -0
  176. package/dist/admin/user-controller.d.ts.map +1 -0
  177. package/dist/admin/user-controller.js +674 -0
  178. package/dist/admin/user-controller.js.map +1 -0
  179. package/dist/admin/user-dialog-fields.d.ts +44 -0
  180. package/dist/admin/user-dialog-fields.d.ts.map +1 -0
  181. package/dist/admin/user-dialog-fields.js +130 -0
  182. package/dist/admin/user-dialog-fields.js.map +1 -0
  183. package/dist/admin/user-dialogs.d.ts +66 -0
  184. package/dist/admin/user-dialogs.d.ts.map +1 -0
  185. package/dist/admin/user-dialogs.js +374 -0
  186. package/dist/admin/user-dialogs.js.map +1 -0
  187. package/dist/admin/user-role-controller.d.ts +82 -0
  188. package/dist/admin/user-role-controller.d.ts.map +1 -0
  189. package/dist/admin/user-role-controller.js +337 -0
  190. package/dist/admin/user-role-controller.js.map +1 -0
  191. package/dist/admin/user-role-dialog.d.ts +94 -0
  192. package/dist/admin/user-role-dialog.d.ts.map +1 -0
  193. package/dist/admin/user-role-dialog.js +265 -0
  194. package/dist/admin/user-role-dialog.js.map +1 -0
  195. package/dist/admin/user-service-types.d.ts +100 -0
  196. package/dist/admin/user-service-types.d.ts.map +1 -0
  197. package/dist/admin/user-service-types.js +3 -0
  198. package/dist/admin/user-service-types.js.map +1 -0
  199. package/dist/admin/user-service.d.ts +14 -0
  200. package/dist/admin/user-service.d.ts.map +1 -0
  201. package/dist/admin/user-service.js +612 -0
  202. package/dist/admin/user-service.js.map +1 -0
  203. package/dist/admin/user-state.d.ts +158 -0
  204. package/dist/admin/user-state.d.ts.map +1 -0
  205. package/dist/admin/user-state.js +3 -0
  206. package/dist/admin/user-state.js.map +1 -0
  207. package/dist/admin/user-workspace.d.ts +65 -0
  208. package/dist/admin/user-workspace.d.ts.map +1 -0
  209. package/dist/admin/user-workspace.js +366 -0
  210. package/dist/admin/user-workspace.js.map +1 -0
  211. package/dist/auth/browser-flow.d.ts +27 -1
  212. package/dist/auth/browser-flow.d.ts.map +1 -1
  213. package/dist/auth/browser-flow.js +55 -33
  214. package/dist/auth/browser-flow.js.map +1 -1
  215. package/dist/auth/callback-server.d.ts.map +1 -1
  216. package/dist/auth/callback-server.js +5 -9
  217. package/dist/auth/callback-server.js.map +1 -1
  218. package/dist/auth/id-token-verifier.d.ts +39 -0
  219. package/dist/auth/id-token-verifier.d.ts.map +1 -0
  220. package/dist/auth/id-token-verifier.js +104 -0
  221. package/dist/auth/id-token-verifier.js.map +1 -0
  222. package/dist/auth/login-coordinator.d.ts +72 -0
  223. package/dist/auth/login-coordinator.d.ts.map +1 -0
  224. package/dist/auth/login-coordinator.js +190 -0
  225. package/dist/auth/login-coordinator.js.map +1 -0
  226. package/dist/auth/metadata.d.ts +2 -1
  227. package/dist/auth/metadata.d.ts.map +1 -1
  228. package/dist/auth/metadata.js +67 -6
  229. package/dist/auth/metadata.js.map +1 -1
  230. package/dist/auth/types.d.ts +14 -0
  231. package/dist/auth/types.d.ts.map +1 -1
  232. package/dist/client-factory.d.ts.map +1 -1
  233. package/dist/client-factory.js +15 -2
  234. package/dist/client-factory.js.map +1 -1
  235. package/dist/commands/admin.d.ts +22 -0
  236. package/dist/commands/admin.d.ts.map +1 -0
  237. package/dist/commands/admin.js +112 -0
  238. package/dist/commands/admin.js.map +1 -0
  239. package/dist/commands/app-claim.d.ts.map +1 -1
  240. package/dist/commands/app-claim.js +11 -4
  241. package/dist/commands/app-claim.js.map +1 -1
  242. package/dist/commands/app-module.d.ts.map +1 -1
  243. package/dist/commands/app-module.js +61 -12
  244. package/dist/commands/app-module.js.map +1 -1
  245. package/dist/commands/app-permission.d.ts.map +1 -1
  246. package/dist/commands/app-permission.js +66 -24
  247. package/dist/commands/app-permission.js.map +1 -1
  248. package/dist/commands/app-role.d.ts.map +1 -1
  249. package/dist/commands/app-role.js +48 -27
  250. package/dist/commands/app-role.js.map +1 -1
  251. package/dist/commands/app.d.ts.map +1 -1
  252. package/dist/commands/app.js +37 -25
  253. package/dist/commands/app.js.map +1 -1
  254. package/dist/commands/bulk.d.ts.map +1 -1
  255. package/dist/commands/bulk.js +9 -2
  256. package/dist/commands/bulk.js.map +1 -1
  257. package/dist/commands/client-secret.d.ts.map +1 -1
  258. package/dist/commands/client-secret.js +12 -6
  259. package/dist/commands/client-secret.js.map +1 -1
  260. package/dist/commands/client.d.ts +3 -2
  261. package/dist/commands/client.d.ts.map +1 -1
  262. package/dist/commands/client.js +102 -43
  263. package/dist/commands/client.js.map +1 -1
  264. package/dist/commands/config.d.ts +4 -0
  265. package/dist/commands/config.d.ts.map +1 -1
  266. package/dist/commands/config.js +68 -7
  267. package/dist/commands/config.js.map +1 -1
  268. package/dist/commands/export.d.ts +6 -0
  269. package/dist/commands/export.d.ts.map +1 -0
  270. package/dist/commands/export.js +182 -0
  271. package/dist/commands/export.js.map +1 -0
  272. package/dist/commands/import.d.ts +6 -0
  273. package/dist/commands/import.d.ts.map +1 -0
  274. package/dist/commands/import.js +142 -0
  275. package/dist/commands/import.js.map +1 -0
  276. package/dist/commands/keys.d.ts.map +1 -1
  277. package/dist/commands/keys.js +11 -4
  278. package/dist/commands/keys.js.map +1 -1
  279. package/dist/commands/login.d.ts.map +1 -1
  280. package/dist/commands/login.js +24 -10
  281. package/dist/commands/login.js.map +1 -1
  282. package/dist/commands/org.d.ts +2 -4
  283. package/dist/commands/org.d.ts.map +1 -1
  284. package/dist/commands/org.js +16 -76
  285. package/dist/commands/org.js.map +1 -1
  286. package/dist/commands/user-role.d.ts.map +1 -1
  287. package/dist/commands/user-role.js +19 -14
  288. package/dist/commands/user-role.js.map +1 -1
  289. package/dist/commands/user.d.ts +3 -2
  290. package/dist/commands/user.d.ts.map +1 -1
  291. package/dist/commands/user.js +47 -71
  292. package/dist/commands/user.js.map +1 -1
  293. package/dist/commands/version.d.ts +1 -1
  294. package/dist/commands/version.js +1 -1
  295. package/dist/credential-lock.d.ts +20 -0
  296. package/dist/credential-lock.d.ts.map +1 -0
  297. package/dist/credential-lock.js +130 -0
  298. package/dist/credential-lock.js.map +1 -0
  299. package/dist/credential-store.d.ts +14 -0
  300. package/dist/credential-store.d.ts.map +1 -1
  301. package/dist/credential-store.js +114 -3
  302. package/dist/credential-store.js.map +1 -1
  303. package/dist/error-handler.d.ts.map +1 -1
  304. package/dist/error-handler.js +2 -0
  305. package/dist/error-handler.js.map +1 -1
  306. package/dist/global-options.d.ts +8 -0
  307. package/dist/global-options.d.ts.map +1 -1
  308. package/dist/global-options.js +19 -8
  309. package/dist/global-options.js.map +1 -1
  310. package/dist/index.js +7 -5
  311. package/dist/index.js.map +1 -1
  312. package/dist/output.d.ts +11 -0
  313. package/dist/output.d.ts.map +1 -1
  314. package/dist/output.js +25 -6
  315. package/dist/output.js.map +1 -1
  316. package/dist/prompt.d.ts +2 -2
  317. package/dist/prompt.d.ts.map +1 -1
  318. package/dist/prompt.js +27 -7
  319. package/dist/prompt.js.map +1 -1
  320. package/package.json +7 -3
  321. package/dist/commands/gui.d.ts +0 -21
  322. package/dist/commands/gui.d.ts.map +0 -1
  323. package/dist/commands/gui.js +0 -67
  324. package/dist/commands/gui.js.map +0 -1
  325. package/dist/commands/provision.d.ts +0 -47
  326. package/dist/commands/provision.d.ts.map +0 -1
  327. package/dist/commands/provision.js +0 -444
  328. package/dist/commands/provision.js.map +0 -1
@@ -0,0 +1,486 @@
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
+ typeof candidate.requireConsent !== 'boolean' ||
170
+ !hasCompatibleProtocol(candidate.clientType, grants, candidate.tokenEndpointAuthMethod, candidate.requirePkce) ||
171
+ override === undefined ||
172
+ !effective ||
173
+ !(candidate.status === 'active' || candidate.status === 'inactive') ||
174
+ !isTimestamp(candidate.createdAt) ||
175
+ !isTimestamp(candidate.updatedAt)) {
176
+ return undefined;
177
+ }
178
+ return Object.freeze({
179
+ id: candidate.id,
180
+ organizationId,
181
+ applicationId: candidate.applicationId,
182
+ clientId: candidate.clientId,
183
+ clientName: candidate.clientName,
184
+ clientType: candidate.clientType,
185
+ applicationType: candidate.applicationType,
186
+ redirectUris: redirects,
187
+ postLogoutRedirectUris: logoutRedirects,
188
+ grantTypes: grants,
189
+ responseTypes: responses,
190
+ scope: candidate.scope,
191
+ tokenEndpointAuthMethod: candidate.tokenEndpointAuthMethod,
192
+ allowedOrigins: origins,
193
+ requirePkce: candidate.requirePkce,
194
+ requireConsent: candidate.requireConsent,
195
+ loginMethods: override,
196
+ effectiveLoginMethods: effective,
197
+ status: candidate.status,
198
+ createdAt: candidate.createdAt,
199
+ updatedAt: candidate.updatedAt,
200
+ });
201
+ }
202
+ /** Projects secret metadata and rejects plaintext-bearing values. */
203
+ function secretValue(value, clientId) {
204
+ const candidate = objectValue(value);
205
+ if (!candidate ||
206
+ 'plaintext' in candidate ||
207
+ typeof candidate.id !== 'string' ||
208
+ !UUID.test(candidate.id) ||
209
+ candidate.clientId !== clientId ||
210
+ !(candidate.label === null || isText(candidate.label, 255)) ||
211
+ !(candidate.status === 'active' || candidate.status === 'revoked') ||
212
+ !isNullableTimestamp(candidate.lastUsedAt) ||
213
+ !isNullableTimestamp(candidate.expiresAt) ||
214
+ !isTimestamp(candidate.createdAt)) {
215
+ return undefined;
216
+ }
217
+ return Object.freeze({
218
+ id: candidate.id,
219
+ clientId,
220
+ label: candidate.label,
221
+ status: candidate.status,
222
+ lastUsedAt: candidate.lastUsedAt,
223
+ expiresAt: candidate.expiresAt,
224
+ createdAt: candidate.createdAt,
225
+ });
226
+ }
227
+ /** Projects one one-time generated secret for a synchronous continuation. */
228
+ function generatedSecretValue(value, clientId) {
229
+ const candidate = objectValue(value);
230
+ if (!candidate ||
231
+ typeof candidate.id !== 'string' ||
232
+ !UUID.test(candidate.id) ||
233
+ candidate.clientId !== clientId ||
234
+ !(candidate.label === null || isText(candidate.label, 255)) ||
235
+ !isText(candidate.plaintext, 4_096, 1) ||
236
+ !isNullableTimestamp(candidate.expiresAt) ||
237
+ !isTimestamp(candidate.createdAt)) {
238
+ return undefined;
239
+ }
240
+ return Object.freeze({
241
+ id: candidate.id,
242
+ clientId,
243
+ label: candidate.label,
244
+ plaintext: candidate.plaintext,
245
+ expiresAt: candidate.expiresAt,
246
+ createdAt: candidate.createdAt,
247
+ });
248
+ }
249
+ /** Projects a complete collection without returning partial values. */
250
+ function collection(value, project) {
251
+ if (!Array.isArray(value))
252
+ return undefined;
253
+ const ids = new Set();
254
+ const projected = [];
255
+ for (const entry of value) {
256
+ const item = project(entry);
257
+ const candidate = objectValue(item);
258
+ if (!item || !candidate || typeof candidate.id !== 'string' || ids.has(candidate.id)) {
259
+ return undefined;
260
+ }
261
+ ids.add(candidate.id);
262
+ projected.push(item);
263
+ }
264
+ return Object.freeze(projected);
265
+ }
266
+ /** Maps a read error to a fixed safe result. */
267
+ function readError(error) {
268
+ if (error instanceof PortaAuthenticationError)
269
+ return { kind: 'session-invalid' };
270
+ if (error instanceof PortaValidationError)
271
+ return { kind: 'failure', failure: 'validation' };
272
+ if (error instanceof PortaForbiddenError)
273
+ return { kind: 'failure', failure: 'unauthorized' };
274
+ if (error instanceof PortaConflictError)
275
+ return { kind: 'failure', failure: 'conflict' };
276
+ return { kind: 'failure', failure: 'unavailable' };
277
+ }
278
+ /** Maps a mutation error to a fixed safe result. */
279
+ function mutationError(error) {
280
+ if (error instanceof DOMException && error.name === 'AbortError')
281
+ return { kind: 'cancelled' };
282
+ if (error instanceof PortaAuthenticationError)
283
+ return { kind: 'session-invalid' };
284
+ if (error instanceof PortaValidationError)
285
+ return { kind: 'failure', failure: 'validation' };
286
+ if (error instanceof PortaForbiddenError)
287
+ return { kind: 'failure', failure: 'unauthorized' };
288
+ if (error instanceof PortaConflictError)
289
+ return { kind: 'failure', failure: 'conflict' };
290
+ return { kind: 'outcome-unknown' };
291
+ }
292
+ /** Verifies that an existing client belongs to the active organization before further work. */
293
+ async function readOwnedClient(remote, organizationId, clientId) {
294
+ try {
295
+ const response = await remote.get(clientId);
296
+ const value = clientValue(response.data, organizationId);
297
+ if (value?.id !== clientId)
298
+ return { kind: 'failure', failure: 'invalid-response' };
299
+ return value
300
+ ? { kind: 'success', value }
301
+ : { kind: 'failure', failure: 'invalid-response' };
302
+ }
303
+ catch (error) {
304
+ return readError(error);
305
+ }
306
+ }
307
+ /** Converts a pre-dispatch ownership result to a mutation result. */
308
+ function ownershipMutationFailure(result) {
309
+ return result.kind === 'session-invalid'
310
+ ? result
311
+ : { kind: 'failure', failure: result.failure };
312
+ }
313
+ /** Invokes one void mutation exactly once. */
314
+ async function voidMutation(invoke) {
315
+ try {
316
+ await invoke();
317
+ return { kind: 'success' };
318
+ }
319
+ catch (error) {
320
+ return mutationError(error);
321
+ }
322
+ }
323
+ /** Creates the feature-local client SDK adapter. */
324
+ export function createAdminClientOperations(domain) {
325
+ return {
326
+ async listAll(organizationId) {
327
+ if (!UUID.test(organizationId))
328
+ return { kind: 'failure', failure: 'validation' };
329
+ try {
330
+ const value = collection(await domain().listAll({ organizationId }), (entry) => clientValue(entry, organizationId));
331
+ return value
332
+ ? { kind: 'success', value }
333
+ : { kind: 'failure', failure: 'invalid-response' };
334
+ }
335
+ catch (error) {
336
+ return readError(error);
337
+ }
338
+ },
339
+ async get(organizationId, clientId) {
340
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
341
+ return { kind: 'failure', failure: 'validation' };
342
+ }
343
+ try {
344
+ const response = await domain().get(clientId);
345
+ const value = clientValue(response.data, organizationId);
346
+ if (!value || value.id !== clientId || !isEtag(response.etag)) {
347
+ return { kind: 'failure', failure: 'invalid-response' };
348
+ }
349
+ return { kind: 'success', value: { client: value, etag: response.etag } };
350
+ }
351
+ catch (error) {
352
+ return readError(error);
353
+ }
354
+ },
355
+ async create(organizationId, input) {
356
+ if (!UUID.test(organizationId))
357
+ return { kind: 'failure', failure: 'validation' };
358
+ try {
359
+ const response = await domain().create({ ...input, organizationId });
360
+ const created = clientValue(response.client, organizationId);
361
+ const generated = response.secret
362
+ ? generatedSecretValue(response.secret, response.client.id)
363
+ : undefined;
364
+ if (!created ||
365
+ (created.clientType === 'confidential' && !generated) ||
366
+ (created.clientType === 'public' && generated)) {
367
+ return { kind: 'outcome-unknown' };
368
+ }
369
+ return {
370
+ kind: 'success',
371
+ value: generated ? { client: created, secret: generated } : { client: created },
372
+ };
373
+ }
374
+ catch (error) {
375
+ return mutationError(error);
376
+ }
377
+ },
378
+ async update(organizationId, clientId, input, etag, signal) {
379
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
380
+ return { kind: 'failure', failure: 'validation' };
381
+ }
382
+ try {
383
+ const remote = domain();
384
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
385
+ if (ownership.kind !== 'success')
386
+ return ownershipMutationFailure(ownership);
387
+ if (signal?.aborted)
388
+ return { kind: 'cancelled' };
389
+ const value = clientValue(await remote.update(clientId, input, etag), organizationId);
390
+ return value
391
+ ? { kind: 'success', value }
392
+ : { kind: 'outcome-unknown' };
393
+ }
394
+ catch (error) {
395
+ return mutationError(error);
396
+ }
397
+ },
398
+ async activate(organizationId, clientId, signal) {
399
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
400
+ return { kind: 'failure', failure: 'validation' };
401
+ }
402
+ const remote = domain();
403
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
404
+ if (ownership.kind === 'success' && signal?.aborted)
405
+ return { kind: 'cancelled' };
406
+ return ownership.kind === 'success'
407
+ ? voidMutation(() => remote.activate(clientId))
408
+ : ownershipMutationFailure(ownership);
409
+ },
410
+ async deactivate(organizationId, clientId, signal) {
411
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
412
+ return { kind: 'failure', failure: 'validation' };
413
+ }
414
+ const remote = domain();
415
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
416
+ if (ownership.kind === 'success' && signal?.aborted)
417
+ return { kind: 'cancelled' };
418
+ return ownership.kind === 'success'
419
+ ? voidMutation(() => remote.deactivate(clientId))
420
+ : ownershipMutationFailure(ownership);
421
+ },
422
+ async delete(organizationId, clientId, signal) {
423
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
424
+ return { kind: 'failure', failure: 'validation' };
425
+ }
426
+ const remote = domain();
427
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
428
+ if (ownership.kind === 'success' && signal?.aborted)
429
+ return { kind: 'cancelled' };
430
+ return ownership.kind === 'success'
431
+ ? voidMutation(() => remote.delete(clientId))
432
+ : ownershipMutationFailure(ownership);
433
+ },
434
+ async listSecrets(organizationId, clientId) {
435
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
436
+ return { kind: 'failure', failure: 'validation' };
437
+ }
438
+ try {
439
+ const remote = domain();
440
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
441
+ if (ownership.kind !== 'success')
442
+ return ownership;
443
+ const value = collection(await remote.listSecrets(clientId), (entry) => secretValue(entry, clientId));
444
+ return value
445
+ ? { kind: 'success', value }
446
+ : { kind: 'failure', failure: 'invalid-response' };
447
+ }
448
+ catch (error) {
449
+ return readError(error);
450
+ }
451
+ },
452
+ async generateSecret(organizationId, clientId, input, signal) {
453
+ if (!UUID.test(organizationId) || !UUID.test(clientId)) {
454
+ return { kind: 'failure', failure: 'validation' };
455
+ }
456
+ try {
457
+ const remote = domain();
458
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
459
+ if (ownership.kind !== 'success')
460
+ return ownershipMutationFailure(ownership);
461
+ if (signal?.aborted)
462
+ return { kind: 'cancelled' };
463
+ const value = generatedSecretValue(await remote.generateSecret(clientId, input), clientId);
464
+ return value
465
+ ? { kind: 'success', value }
466
+ : { kind: 'outcome-unknown' };
467
+ }
468
+ catch (error) {
469
+ return mutationError(error);
470
+ }
471
+ },
472
+ async revokeSecret(organizationId, clientId, secretId, signal) {
473
+ if (!UUID.test(organizationId) || !UUID.test(clientId) || !UUID.test(secretId)) {
474
+ return { kind: 'failure', failure: 'validation' };
475
+ }
476
+ const remote = domain();
477
+ const ownership = await readOwnedClient(remote, organizationId, clientId);
478
+ if (ownership.kind === 'success' && signal?.aborted)
479
+ return { kind: 'cancelled' };
480
+ return ownership.kind === 'success'
481
+ ? voidMutation(() => remote.revokeSecret(clientId, secretId))
482
+ : ownershipMutationFailure(ownership);
483
+ },
484
+ };
485
+ }
486
+ //# 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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"}