@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,169 @@
1
+ /** Server-bound session verification for the embedded Porta admin UI. */
2
+ import type { StoredCredentials } from '../credential-store.js';
3
+ import type { CliAuthOperationOptions, VerifiedIdentity } from '../auth/types.js';
4
+ import type { LoginInteraction } from '../auth/login-coordinator.js';
5
+ import type { AdminApplicationSession } from './application.js';
6
+ import { createAdminOrganizationOperations } from './organization-service.js';
7
+ import type { AdminOrganizationWorkspaceDomains } from './organization-service.js';
8
+ import { createAdminUserOperations } from './user-service.js';
9
+ import { createAdminApplicationOperations } from './application-service.js';
10
+ import { createAdminClientOperations } from './client-service.js';
11
+ import type { AdminRbacDomains } from './rbac-service.js';
12
+ import { createAdminPortabilityOperations } from './portability-service.js';
13
+ import { createAdminSystemConfigOperations } from './system-config-service.js';
14
+ import type { AdminCapabilities, AdminConnectionState } from './state.js';
15
+ /** Lazy SDK organization-domain input retained until verified UI work requests it. */
16
+ type AdminOrganizationDomainFactory = Parameters<typeof createAdminOrganizationOperations>[0];
17
+ /** Lazy SDK user-domain input retained until verified UI work requests it. */
18
+ type AdminUserDomainFactory = Parameters<typeof createAdminUserOperations>[0];
19
+ /** Lazy SDK application-domain input retained until verified UI work requests it. */
20
+ type AdminApplicationDomainFactory = Parameters<typeof createAdminApplicationOperations>[0];
21
+ /** Lazy SDK client-domain input retained until verified UI work requests it. */
22
+ type AdminClientDomainFactory = Parameters<typeof createAdminClientOperations>[0];
23
+ /** Lazy SDK RBAC domains retained until verified UI work requests them. */
24
+ type AdminRbacDomainFactory = () => AdminRbacDomains;
25
+ /** Lazy SDK export-domain input retained until verified UI work requests it. */
26
+ type AdminExportsDomainFactory = Parameters<typeof createAdminPortabilityOperations>[0];
27
+ /** Lazy SDK import-domain input retained until verified UI work requests it. */
28
+ type AdminImportsDomainFactory = Parameters<typeof createAdminPortabilityOperations>[1];
29
+ /** Lazy SDK configuration domain retained until verified UI work requests it. */
30
+ type AdminConfigDomainFactory = Parameters<typeof createAdminSystemConfigOperations>[0];
31
+ /** Actions offered after authentication is unavailable. */
32
+ declare const UNAUTHENTICATED_ACTIONS: readonly ['authenticate', 'retry', 'quit'];
33
+ /** Inputs for a direct UserInfo verification request. */
34
+ export interface VerifiedUserInfoRequest {
35
+ /** User-selected Porta server origin. */
36
+ readonly selectedServer: URL;
37
+ /** Validated organization slug used to construct the UserInfo path. */
38
+ readonly orgSlug: string;
39
+ /** Bearer token issued for the selected server. */
40
+ readonly accessToken: string;
41
+ /** Immutable subject established by validated login. */
42
+ readonly originalSubject: string;
43
+ /** Optional injected fetch boundary. */
44
+ readonly fetch?: typeof globalThis.fetch;
45
+ }
46
+ /** Inputs for verifying a stored CLI session. */
47
+ export interface StoredSessionRequest {
48
+ /** User-selected Porta server origin. */
49
+ readonly selectedServer: URL;
50
+ /** Untrusted credential snapshot loaded from local storage. */
51
+ readonly credentials: StoredCredentials;
52
+ /** Optional SDK bearer-client construction boundary. */
53
+ readonly createBearerClient?: (accessToken: string) => unknown;
54
+ /** Optional token provider used when the stored token is expired. */
55
+ readonly getAccessToken?: () => Promise<string>;
56
+ /** Optional injected fetch boundary. */
57
+ readonly fetch?: typeof globalThis.fetch;
58
+ }
59
+ /** Authenticated live session state. */
60
+ export interface AuthenticatedSession {
61
+ /** Authenticated discriminator. */
62
+ readonly status: 'authenticated';
63
+ /** Subject-matched, allowlisted live identity. */
64
+ readonly identity: VerifiedIdentity;
65
+ /** Organization actions derived from the same live UserInfo response. */
66
+ readonly capabilities: AdminCapabilities;
67
+ }
68
+ /** Allowlisted identity and organization capabilities from one live UserInfo response. */
69
+ export interface VerifiedAdminProfile {
70
+ /** Subject-matched identity fields safe for display and credential persistence. */
71
+ readonly identity: VerifiedIdentity;
72
+ /** Ephemeral organization actions used only by the running application. */
73
+ readonly capabilities: AdminCapabilities;
74
+ }
75
+ /** Observable result of stored-session verification. */
76
+ export type SessionVerificationResult = AuthenticatedSession | {
77
+ readonly status: 'unauthenticated';
78
+ readonly actions?: typeof UNAUTHENTICATED_ACTIONS;
79
+ } | {
80
+ readonly status: 'unavailable';
81
+ } | {
82
+ readonly status: 'configuration-failure';
83
+ };
84
+ /** Initial state and operations supplied to one administration application. */
85
+ export interface PreparedAdminSession {
86
+ /** State rendered while the first live verification begins. */
87
+ readonly initialState: AdminConnectionState;
88
+ /** Shared verification and login operations. */
89
+ readonly session: AdminApplicationSession;
90
+ }
91
+ /**
92
+ * Creates live verification, authentication, and authorized Admin API operations.
93
+ *
94
+ * @param serverInput - Normalized or normalizable Porta server origin.
95
+ * @param interaction - Browser-login interaction boundary.
96
+ * @param organizationDomain - Optional organization switcher operations.
97
+ * @param userDomain - Optional selected-organization user operations.
98
+ * @param applicationDomain - Optional deployment-global application operations.
99
+ * @param clientDomain - Optional selected-organization OIDC client operations.
100
+ * @param rbacDomain - Optional application and user role/permission operations.
101
+ * @param organizationWorkspaceDomains - Optional organization settings, branding, and 2FA domains.
102
+ * @param exportsDomain - Optional portability manifest export operations.
103
+ * @param importsDomain - Optional portability preview and apply operations.
104
+ * @param configDomain - Optional deployment-global configuration operations.
105
+ * @returns Initial verification state and lazy server-bound operations.
106
+ */
107
+ export declare function prepareAdminSession(serverInput: URL, interaction: LoginInteraction, organizationDomain?: AdminOrganizationDomainFactory, userDomain?: AdminUserDomainFactory, applicationDomain?: AdminApplicationDomainFactory, clientDomain?: AdminClientDomainFactory, rbacDomain?: AdminRbacDomainFactory, organizationWorkspaceDomains?: AdminOrganizationWorkspaceDomains, exportsDomain?: AdminExportsDomainFactory, importsDomain?: AdminImportsDomainFactory, configDomain?: AdminConfigDomainFactory): PreparedAdminSession;
108
+ /**
109
+ * Derives organization actions from untrusted live authorization claims.
110
+ *
111
+ * Roles and permissions are validated independently. A malformed claim cannot cancel a valid
112
+ * capability from the other claim, and no raw claim value is retained.
113
+ *
114
+ * @param roles - Untrusted UserInfo role claim.
115
+ * @param permissions - Untrusted UserInfo permission claim.
116
+ * @returns Fixed organization and user capability booleans.
117
+ * @example
118
+ * ```ts
119
+ * const capabilities = validateAdminCapabilities([], ['admin:org:read']);
120
+ * ```
121
+ */
122
+ export declare function validateAdminCapabilities(roles: unknown, permissions: unknown): AdminCapabilities;
123
+ /**
124
+ * Fetches and validates live UserInfo with caller-owned cancellation.
125
+ *
126
+ * @param request - Server-bound UserInfo request details.
127
+ * @param options - Caller-owned cancellation signal.
128
+ * @returns The subject-matched identity and ephemeral organization capabilities.
129
+ * @throws A fixed authentication error when the response is unavailable or invalid.
130
+ * @example
131
+ * ```ts
132
+ * const profile = await fetchVerifiedUserInfo(request, { signal });
133
+ * ```
134
+ */
135
+ export declare function fetchVerifiedUserInfo(request: VerifiedUserInfoRequest, options: CliAuthOperationOptions): Promise<VerifiedAdminProfile>;
136
+ /** Verifies exact server binding and a live subject-matched UserInfo response. */
137
+ export declare function verifyStoredSession(request: StoredSessionRequest, options: CliAuthOperationOptions): Promise<SessionVerificationResult>;
138
+ /** Inputs for an explicit cross-origin credential replacement decision. */
139
+ export interface CredentialReplacementRequest {
140
+ /** Current serialized profile and normalized server. */
141
+ readonly current: {
142
+ readonly server: URL;
143
+ readonly serialized: string;
144
+ };
145
+ /** Fully validated replacement candidate. */
146
+ readonly replacement: {
147
+ readonly server: URL;
148
+ readonly serialized: string;
149
+ readonly validated?: boolean;
150
+ };
151
+ /** UI confirmation boundary. */
152
+ readonly confirm: (currentServer: URL, nextServer: URL) => Promise<boolean>;
153
+ /** Atomic persistence boundary. */
154
+ readonly persist: (serialized: string) => Promise<void> | void;
155
+ }
156
+ /** Preserves the current bytes unless a validated replacement is approved. */
157
+ export declare function confirmCredentialReplacement(request: CredentialReplacementRequest): Promise<{
158
+ readonly status: 'cancelled';
159
+ readonly preserved: string;
160
+ } | {
161
+ readonly status: 'replaced';
162
+ }>;
163
+ /** Classifies an administration response without discarding live identity. */
164
+ export declare function classifyAdminResponse(session: AuthenticatedSession, response: Response): AuthenticatedSession | {
165
+ readonly status: 'unauthorized';
166
+ readonly identity: VerifiedIdentity;
167
+ };
168
+ export {};
169
+ //# sourceMappingURL=session-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-service.d.ts","sourceRoot":"","sources":["../../src/admin/session-service.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAQhE,OAAO,KAAK,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAElF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EACL,iCAAiC,EAElC,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAElE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,gCAAgC,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE1E,sFAAsF;AACtF,KAAK,8BAA8B,GAAG,UAAU,CAAC,OAAO,iCAAiC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9F,8EAA8E;AAC9E,KAAK,sBAAsB,GAAG,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9E,qFAAqF;AACrF,KAAK,6BAA6B,GAAG,UAAU,CAAC,OAAO,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5F,gFAAgF;AAChF,KAAK,wBAAwB,GAAG,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC;AAElF,2EAA2E;AAC3E,KAAK,sBAAsB,GAAG,MAAM,gBAAgB,CAAC;AAErD,gFAAgF;AAChF,KAAK,yBAAyB,GAAG,UAAU,CAAC,OAAO,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExF,gFAAgF;AAChF,KAAK,yBAAyB,GAAG,UAAU,CAAC,OAAO,gCAAgC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExF,iFAAiF;AACjF,KAAK,wBAAwB,GAAG,UAAU,CAAC,OAAO,iCAAiC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExF,2DAA2D;AAC3D,QAAA,MAAM,uBAAuB,YAAI,cAAc,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAqB3E,yDAAyD;AACzD,MAAM,WAAW,uBAAuB;IACtC,yCAAyC;IACzC,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC;IAC7B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,wDAAwD;IACxD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,wCAAwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CAC1C;AAED,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IACxC,wDAAwD;IACxD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;IAC/D,qEAAqE;IACrE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,wCAAwC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CAC1C;AAED,wCAAwC;AACxC,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,yEAAyE;IACzE,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;CAC1C;AAED,0FAA0F;AAC1F,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;CAC1C;AAED,wDAAwD;AACxD,MAAM,MAAM,yBAAyB,GACjC,oBAAoB,GACpB;IAAE,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,uBAAuB,CAAA;CAAE,GACzF;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAClC;IAAE,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAEjD,+EAA+E;AAC/E,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;CAC3C;AAmBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,GAAG,EAChB,WAAW,EAAE,gBAAgB,EAC7B,kBAAkB,CAAC,EAAE,8BAA8B,EACnD,UAAU,CAAC,EAAE,sBAAsB,EACnC,iBAAiB,CAAC,EAAE,6BAA6B,EACjD,YAAY,CAAC,EAAE,wBAAwB,EACvC,UAAU,CAAC,EAAE,sBAAsB,EACnC,4BAA4B,CAAC,EAAE,iCAAiC,EAChE,aAAa,CAAC,EAAE,yBAAyB,EACzC,aAAa,CAAC,EAAE,yBAAyB,EACzC,YAAY,CAAC,EAAE,wBAAwB,GACtC,oBAAoB,CAsGtB;AAmBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,iBAAiB,CAqDjG;AA2BD;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,uBAAuB,EAChC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CAsB/B;AAED,kFAAkF;AAClF,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,yBAAyB,CAAC,CAgDpC;AAED,2EAA2E;AAC3E,MAAM,WAAW,4BAA4B;IAC3C,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE;QACpB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;QACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;KAC9B,CAAC;IACF,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5E,mCAAmC;IACnC,QAAQ,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAChE;AAED,8EAA8E;AAC9E,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,4BAA4B,GACpC,OAAO,CACR;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAC/F,CASA;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,QAAQ,GACjB,oBAAoB,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;CAAE,CAEjG"}
@@ -0,0 +1,353 @@
1
+ /** Server-bound session verification for the embedded Porta admin UI. */
2
+ import { createCliCredentialPersistence, getCredentialsPath, loadCredentials, saveCredentialsDurably, } from '../credential-store.js';
3
+ import { createCliAuth } from '@portaidentity/sdk/node';
4
+ import { authenticateCliSession } from '../auth/login-coordinator.js';
5
+ import { normalizeServerOrigin } from '../global-options.js';
6
+ import { createAdminOrganizationOperations, createAdminOrganizationWorkspaceOperations, } from './organization-service.js';
7
+ import { createAdminUserOperations } from './user-service.js';
8
+ import { createAdminApplicationOperations } from './application-service.js';
9
+ import { createAdminClientOperations } from './client-service.js';
10
+ import { createAdminRbacOperations } from './rbac-service.js';
11
+ import { createAdminPortabilityOperations } from './portability-service.js';
12
+ import { createAdminSystemConfigOperations } from './system-config-service.js';
13
+ /** Actions offered after authentication is unavailable. */
14
+ const UNAUTHENTICATED_ACTIONS = ['authenticate', 'retry', 'quit'];
15
+ /** Detects ASCII and C1 controls that can alter terminal presentation. */
16
+ function containsTerminalControl(value) {
17
+ for (const character of value) {
18
+ const codePoint = character.codePointAt(0) ?? 0;
19
+ if (codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f))
20
+ return true;
21
+ }
22
+ return false;
23
+ }
24
+ /** Returns a bounded display claim that cannot inject terminal controls. */
25
+ function safeDisplayClaim(value) {
26
+ return typeof value === 'string' &&
27
+ value.length > 0 &&
28
+ value.length <= 256 &&
29
+ !containsTerminalControl(value)
30
+ ? value
31
+ : undefined;
32
+ }
33
+ /** Maps a live verification result to the application state model. */
34
+ function toApplicationState(server, result) {
35
+ if (result.status === 'authenticated') {
36
+ return {
37
+ kind: 'authenticated',
38
+ server,
39
+ identity: result.identity,
40
+ capabilities: result.capabilities,
41
+ };
42
+ }
43
+ return {
44
+ kind: 'unauthenticated',
45
+ server,
46
+ reason: result.status === 'unauthenticated' ? 'unauthenticated' : result.status,
47
+ };
48
+ }
49
+ /**
50
+ * Creates live verification, authentication, and authorized Admin API operations.
51
+ *
52
+ * @param serverInput - Normalized or normalizable Porta server origin.
53
+ * @param interaction - Browser-login interaction boundary.
54
+ * @param organizationDomain - Optional organization switcher operations.
55
+ * @param userDomain - Optional selected-organization user operations.
56
+ * @param applicationDomain - Optional deployment-global application operations.
57
+ * @param clientDomain - Optional selected-organization OIDC client operations.
58
+ * @param rbacDomain - Optional application and user role/permission operations.
59
+ * @param organizationWorkspaceDomains - Optional organization settings, branding, and 2FA domains.
60
+ * @param exportsDomain - Optional portability manifest export operations.
61
+ * @param importsDomain - Optional portability preview and apply operations.
62
+ * @param configDomain - Optional deployment-global configuration operations.
63
+ * @returns Initial verification state and lazy server-bound operations.
64
+ */
65
+ export function prepareAdminSession(serverInput, interaction, organizationDomain, userDomain, applicationDomain, clientDomain, rbacDomain, organizationWorkspaceDomains, exportsDomain, importsDomain, configDomain) {
66
+ const server = normalizeServerOrigin(serverInput);
67
+ /** Verifies the latest credential snapshot against live UserInfo. */
68
+ const verify = async (signal) => {
69
+ const credentials = loadCredentials();
70
+ if (!credentials)
71
+ return { kind: 'unauthenticated', server };
72
+ const auth = createCliAuth({
73
+ credentialsPath: getCredentialsPath(),
74
+ credentialPersistence: createCliCredentialPersistence({
75
+ credentialsPath: getCredentialsPath(),
76
+ lockTimeoutMs: 5_000,
77
+ signal,
78
+ }),
79
+ signal,
80
+ });
81
+ const state = toApplicationState(server, await verifyStoredSession({
82
+ selectedServer: server,
83
+ credentials,
84
+ getAccessToken: () => auth.getToken(),
85
+ }, { signal }));
86
+ return state;
87
+ };
88
+ /** Runs the shared login coordinator and retains cancellation as a distinct result. */
89
+ const login = async (signal) => {
90
+ const current = loadCredentials();
91
+ return authenticateCliSession({
92
+ server,
93
+ currentServer: current ? normalizeServerOrigin(current.server) : undefined,
94
+ persistCredentials: (credentials) => saveCredentialsDurably(credentials, signal),
95
+ }, interaction, { signal });
96
+ };
97
+ /** Authenticates when no prior verified identity needs to be preserved. */
98
+ const authenticate = async (signal) => {
99
+ const result = await login(signal);
100
+ if (result.status !== 'authenticated')
101
+ return { kind: 'unauthenticated', server };
102
+ const state = {
103
+ kind: 'authenticated',
104
+ server,
105
+ identity: result.identity,
106
+ capabilities: result.capabilities,
107
+ };
108
+ return state;
109
+ };
110
+ /** Reauthenticates without discarding the live identity when the user declines or cancels. */
111
+ const reauthenticate = async (signal) => {
112
+ const result = await login(signal);
113
+ return result.status === 'authenticated'
114
+ ? {
115
+ kind: 'authenticated',
116
+ server,
117
+ identity: result.identity,
118
+ capabilities: result.capabilities,
119
+ }
120
+ : undefined;
121
+ };
122
+ const hasCredentials = loadCredentials() !== null;
123
+ return {
124
+ initialState: hasCredentials
125
+ ? { kind: 'verifying', server, canCancel: true }
126
+ : { kind: 'unauthenticated', server },
127
+ session: {
128
+ verify,
129
+ authenticate,
130
+ retry: verify,
131
+ reauthenticate,
132
+ ...(organizationDomain
133
+ ? { organizations: createAdminOrganizationOperations(organizationDomain) }
134
+ : {}),
135
+ ...(userDomain ? { users: createAdminUserOperations(userDomain) } : {}),
136
+ ...(applicationDomain
137
+ ? { applications: createAdminApplicationOperations(applicationDomain) }
138
+ : {}),
139
+ ...(clientDomain ? { clients: createAdminClientOperations(clientDomain) } : {}),
140
+ ...(rbacDomain ? { rbac: createAdminRbacOperations(rbacDomain) } : {}),
141
+ ...(organizationWorkspaceDomains
142
+ ? {
143
+ organizationWorkspace: createAdminOrganizationWorkspaceOperations(organizationWorkspaceDomains),
144
+ }
145
+ : {}),
146
+ ...(exportsDomain && importsDomain
147
+ ? { portability: createAdminPortabilityOperations(exportsDomain, importsDomain) }
148
+ : {}),
149
+ ...(configDomain ? { systemConfig: createAdminSystemConfigOperations(configDomain) } : {}),
150
+ },
151
+ };
152
+ }
153
+ /** Returns true when every authorization entry is a bounded, control-free slug. */
154
+ function isValidAuthorizationArray(value, maximumLength) {
155
+ return (Array.isArray(value) &&
156
+ value.every((entry) => typeof entry === 'string' &&
157
+ entry.length > 0 &&
158
+ entry.length <= maximumLength &&
159
+ !containsTerminalControl(entry)));
160
+ }
161
+ /**
162
+ * Derives organization actions from untrusted live authorization claims.
163
+ *
164
+ * Roles and permissions are validated independently. A malformed claim cannot cancel a valid
165
+ * capability from the other claim, and no raw claim value is retained.
166
+ *
167
+ * @param roles - Untrusted UserInfo role claim.
168
+ * @param permissions - Untrusted UserInfo permission claim.
169
+ * @returns Fixed organization and user capability booleans.
170
+ * @example
171
+ * ```ts
172
+ * const capabilities = validateAdminCapabilities([], ['admin:org:read']);
173
+ * ```
174
+ */
175
+ export function validateAdminCapabilities(roles, permissions) {
176
+ const validRoles = isValidAuthorizationArray(roles, 100) ? roles : [];
177
+ const validPermissions = isValidAuthorizationArray(permissions, 150) ? permissions : [];
178
+ const isLegacyAdministrator = validRoles.includes('porta-admin');
179
+ return {
180
+ canReadConfig: isLegacyAdministrator || validPermissions.includes('admin:config:read'),
181
+ canUpdateConfig: isLegacyAdministrator || validPermissions.includes('admin:config:update'),
182
+ canExportData: validPermissions.includes('admin:export:read'),
183
+ canImportData: validPermissions.includes('admin:import:write'),
184
+ canReadClaims: isLegacyAdministrator || validPermissions.includes('admin:claim:read'),
185
+ canCreateClaims: isLegacyAdministrator || validPermissions.includes('admin:claim:create'),
186
+ canUpdateClaims: isLegacyAdministrator || validPermissions.includes('admin:claim:update'),
187
+ isSuperAdmin: validRoles.includes('porta-super-admin'),
188
+ canReadOrganizations: isLegacyAdministrator || validPermissions.includes('admin:org:read'),
189
+ canCreateOrganizations: isLegacyAdministrator || validPermissions.includes('admin:org:create'),
190
+ canUpdateOrganizations: isLegacyAdministrator || validPermissions.includes('admin:org:update'),
191
+ canSuspendOrganizations: isLegacyAdministrator || validPermissions.includes('admin:org:suspend'),
192
+ canReadUsers: isLegacyAdministrator || validPermissions.includes('admin:user:read'),
193
+ canCreateUsers: isLegacyAdministrator || validPermissions.includes('admin:user:create'),
194
+ canInviteUsers: isLegacyAdministrator || validPermissions.includes('admin:user:invite'),
195
+ canUpdateUsers: isLegacyAdministrator || validPermissions.includes('admin:user:update'),
196
+ canManageUserLifecycle: isLegacyAdministrator || validPermissions.includes('admin:user:lifecycle'),
197
+ canDeleteOrganizations: isLegacyAdministrator || validPermissions.includes('admin:org:delete'),
198
+ canDeleteUsers: isLegacyAdministrator || validPermissions.includes('admin:user:delete'),
199
+ canReadApplications: isLegacyAdministrator || validPermissions.includes('admin:app:read'),
200
+ canCreateApplications: isLegacyAdministrator || validPermissions.includes('admin:app:create'),
201
+ canUpdateApplications: isLegacyAdministrator || validPermissions.includes('admin:app:update'),
202
+ canDeleteApplications: isLegacyAdministrator || validPermissions.includes('admin:app:delete'),
203
+ canDeleteModules: isLegacyAdministrator || validPermissions.includes('admin:module:delete'),
204
+ canReadRoles: isLegacyAdministrator || validPermissions.includes('admin:role:read'),
205
+ canCreateRoles: isLegacyAdministrator || validPermissions.includes('admin:role:create'),
206
+ canUpdateRoles: isLegacyAdministrator || validPermissions.includes('admin:role:update'),
207
+ canDeleteRoles: isLegacyAdministrator || validPermissions.includes('admin:role:delete'),
208
+ canReadPermissions: isLegacyAdministrator || validPermissions.includes('admin:permission:read'),
209
+ canCreatePermissions: isLegacyAdministrator || validPermissions.includes('admin:permission:create'),
210
+ canUpdatePermissions: isLegacyAdministrator || validPermissions.includes('admin:permission:update'),
211
+ canDeletePermissions: isLegacyAdministrator || validPermissions.includes('admin:permission:delete'),
212
+ canAssignRoles: isLegacyAdministrator || validPermissions.includes('admin:role:assign'),
213
+ canReadClients: isLegacyAdministrator || validPermissions.includes('admin:client:read'),
214
+ canCreateClients: isLegacyAdministrator ||
215
+ (validPermissions.includes('admin:client:create') &&
216
+ validPermissions.includes('admin:app:read')),
217
+ canUpdateClients: isLegacyAdministrator || validPermissions.includes('admin:client:update'),
218
+ canDeleteClients: isLegacyAdministrator || validPermissions.includes('admin:client:delete'),
219
+ canRevokeClientSecrets: isLegacyAdministrator || validPermissions.includes('admin:client:revoke'),
220
+ };
221
+ }
222
+ /**
223
+ * Returns a safe profile from a subject-matched UserInfo response.
224
+ *
225
+ * @param value - Untrusted decoded UserInfo response.
226
+ * @param originalSubject - Subject established by the verified login.
227
+ * @returns Allowlisted identity fields and fixed capability booleans.
228
+ * @throws A fixed authentication error when the subject is missing or does not match.
229
+ */
230
+ function validateUserInfo(value, originalSubject) {
231
+ if (!value || typeof value !== 'object')
232
+ throw new Error('Authentication failed');
233
+ const candidate = value;
234
+ const subject = safeDisplayClaim(candidate.sub);
235
+ if (subject !== originalSubject) {
236
+ throw new Error('Authentication failed');
237
+ }
238
+ return {
239
+ identity: {
240
+ sub: subject,
241
+ email: safeDisplayClaim(candidate.email),
242
+ name: safeDisplayClaim(candidate.name),
243
+ },
244
+ capabilities: validateAdminCapabilities(candidate.roles, candidate.permissions),
245
+ };
246
+ }
247
+ /**
248
+ * Fetches and validates live UserInfo with caller-owned cancellation.
249
+ *
250
+ * @param request - Server-bound UserInfo request details.
251
+ * @param options - Caller-owned cancellation signal.
252
+ * @returns The subject-matched identity and ephemeral organization capabilities.
253
+ * @throws A fixed authentication error when the response is unavailable or invalid.
254
+ * @example
255
+ * ```ts
256
+ * const profile = await fetchVerifiedUserInfo(request, { signal });
257
+ * ```
258
+ */
259
+ export async function fetchVerifiedUserInfo(request, options) {
260
+ const selected = normalizeServerOrigin(request.selectedServer);
261
+ if (!/^[a-z0-9][a-z0-9-]{1,98}[a-z0-9]$/.test(request.orgSlug)) {
262
+ throw new Error('Authentication failed');
263
+ }
264
+ const fetcher = request.fetch ?? globalThis.fetch;
265
+ let response;
266
+ try {
267
+ response = await fetcher(`${selected.origin}/${encodeURIComponent(request.orgSlug)}/me`, {
268
+ headers: { Authorization: `Bearer ${request.accessToken}` },
269
+ signal: options.signal,
270
+ });
271
+ }
272
+ catch (error) {
273
+ if (error instanceof DOMException && error.name === 'AbortError')
274
+ throw error;
275
+ throw new Error('Authentication failed', { cause: error });
276
+ }
277
+ if (!response.ok)
278
+ throw new Error('Authentication failed');
279
+ try {
280
+ return validateUserInfo(await response.json(), request.originalSubject);
281
+ }
282
+ catch {
283
+ throw new Error('Authentication failed');
284
+ }
285
+ }
286
+ /** Verifies exact server binding and a live subject-matched UserInfo response. */
287
+ export async function verifyStoredSession(request, options) {
288
+ let selected;
289
+ let credentialServer;
290
+ try {
291
+ selected = normalizeServerOrigin(request.selectedServer);
292
+ credentialServer = normalizeServerOrigin(request.credentials.server);
293
+ if (!request.credentials.orgSlug ||
294
+ !request.credentials.accessToken ||
295
+ !request.credentials.userInfo?.sub) {
296
+ return { status: 'configuration-failure' };
297
+ }
298
+ }
299
+ catch {
300
+ return { status: 'configuration-failure' };
301
+ }
302
+ if (selected.origin !== credentialServer.origin)
303
+ return { status: 'unauthenticated' };
304
+ let accessToken = request.credentials.accessToken;
305
+ if (Date.parse(request.credentials.expiresAt) <= Date.now() && request.getAccessToken) {
306
+ try {
307
+ accessToken = await request.getAccessToken();
308
+ }
309
+ catch {
310
+ return { status: 'unauthenticated', actions: UNAUTHENTICATED_ACTIONS };
311
+ }
312
+ }
313
+ request.createBearerClient?.(accessToken);
314
+ const fetcher = request.fetch ?? globalThis.fetch;
315
+ let response;
316
+ try {
317
+ response = await fetcher(`${selected.origin}/${encodeURIComponent(request.credentials.orgSlug)}/me`, { headers: { Authorization: `Bearer ${accessToken}` }, signal: options.signal });
318
+ }
319
+ catch (error) {
320
+ if (error instanceof DOMException && error.name === 'AbortError')
321
+ throw error;
322
+ return { status: 'unavailable' };
323
+ }
324
+ if (response.status === 401) {
325
+ return { status: 'unauthenticated', actions: UNAUTHENTICATED_ACTIONS };
326
+ }
327
+ if (!response.ok)
328
+ return { status: 'unavailable' };
329
+ try {
330
+ const profile = validateUserInfo(await response.json(), request.credentials.userInfo.sub);
331
+ return { status: 'authenticated', ...profile };
332
+ }
333
+ catch {
334
+ return { status: 'unauthenticated' };
335
+ }
336
+ }
337
+ /** Preserves the current bytes unless a validated replacement is approved. */
338
+ export async function confirmCredentialReplacement(request) {
339
+ const current = normalizeServerOrigin(request.current.server);
340
+ const replacement = normalizeServerOrigin(request.replacement.server);
341
+ if (!(await request.confirm(current, replacement))) {
342
+ return { status: 'cancelled', preserved: request.current.serialized };
343
+ }
344
+ if (request.replacement.validated !== true)
345
+ throw new Error('Authentication failed');
346
+ await request.persist(request.replacement.serialized);
347
+ return { status: 'replaced' };
348
+ }
349
+ /** Classifies an administration response without discarding live identity. */
350
+ export function classifyAdminResponse(session, response) {
351
+ return response.status === 403 ? { status: 'unauthorized', identity: session.identity } : session;
352
+ }
353
+ //# sourceMappingURL=session-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-service.js","sourceRoot":"","sources":["../../src/admin/session-service.ts"],"names":[],"mappings":"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"}