@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
package/CHANGELOG.md CHANGED
@@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.8.0] - 2026-09-23
9
+
10
+ ### Changed
11
+ - Version bump to 1.8.0
12
+
8
13
  ## [1.7.3] - 2026-08-26
9
14
 
10
15
  ### Changed
package/README.md CHANGED
@@ -4,9 +4,9 @@ The official command-line interface for the [Porta Identity Platform](https://gi
4
4
 
5
5
  ## Features
6
6
 
7
- - **26 command modules** — Full admin coverage: orgs, apps, clients, users, roles, permissions, claims, secrets, sessions, audit, and more
7
+ - **28 command modules** — Full admin coverage: orgs, apps, clients, users, roles, permissions, claims, secrets, sessions, audit, and more
8
8
  - **OIDC authentication** — Secure login via Authorization Code + PKCE (opens your browser, no passwords stored)
9
- - **Declarative provisioning** — Set up entire environments from a single YAML/JSON file
9
+ - **Selective portability** — Export and import strict JSON manifests with preview-first application
10
10
  - **Built on `@portaidentity/sdk`** — Type-safe API calls with automatic error handling
11
11
  - **JSON output mode** — Machine-readable output for scripting and CI/CD (`--json`)
12
12
  - **Shell completions** — Tab completion for Bash, Zsh, and Fish
@@ -60,36 +60,36 @@ Every command supports these flags:
60
60
 
61
61
  ### Authentication
62
62
 
63
- | Command | Description |
64
- | -------------- | -------------------------------------------------------- |
65
- | `porta login` | Authenticate via OIDC (Auth Code + PKCE) — opens browser |
66
- | `porta logout` | Clear stored credentials |
67
- | `porta whoami` | Display current identity (no network call) |
63
+ | Command | Description |
64
+ | -------------- | --------------------------------------------------------------- |
65
+ | `porta login` | Authenticate via OIDC (Auth Code + PKCE) — opens browser |
66
+ | `porta logout` | Clear stored credentials |
67
+ | `porta whoami` | Display current identity (no network call) |
68
+ | `porta admin` | Open the interactive organization and user administration shell |
68
69
 
69
70
  ### Organizations
70
71
 
71
- | Command | Description |
72
- | -------------------------- | --------------------------------------------------------- |
73
- | `porta org list` | List all organizations |
74
- | `porta org create` | Create a new organization |
75
- | `porta org show <id>` | Show organization details |
76
- | `porta org update <id>` | Update organization properties |
77
- | `porta org activate <id>` | Activate an organization |
78
- | `porta org suspend <id>` | Suspend an organization |
79
- | `porta org archive <id>` | Archive an organization |
80
- | `porta org destroy <slug>` | Permanently delete an organization and all child entities |
72
+ | Command | Description |
73
+ | ------------------------- | ----------------------------------------------------- |
74
+ | `porta org list` | List all organizations |
75
+ | `porta org create` | Create a new organization |
76
+ | `porta org show <id>` | Show organization details |
77
+ | `porta org update <id>` | Update organization properties |
78
+ | `porta org activate <id>` | Activate an organization |
79
+ | `porta org suspend <id>` | Suspend an organization |
80
+ | `porta org delete <id>` | Permanently delete an organization and its owned data |
81
81
 
82
82
  ### Applications
83
83
 
84
- | Command | Description |
85
- | ------------------------- | ----------------------------- |
86
- | `porta app list` | List applications |
87
- | `porta app create` | Create a new application |
88
- | `porta app show <id>` | Show application details |
89
- | `porta app update <id>` | Update application properties |
90
- | `porta app activate <id>` | Activate an application |
91
- | `porta app suspend <id>` | Suspend an application |
92
- | `porta app archive <id>` | Archive an application |
84
+ | Command | Description |
85
+ | ------------------------- | ---------------------------------------------------- |
86
+ | `porta app list` | List applications |
87
+ | `porta app create` | Create a new application |
88
+ | `porta app show <id>` | Show application details |
89
+ | `porta app update <id>` | Update application properties |
90
+ | `porta app activate <id>` | Activate an application |
91
+ | `porta app suspend <id>` | Suspend an application |
92
+ | `porta app delete <id>` | Permanently delete an application and its owned data |
93
93
 
94
94
  **Nested: Roles** (`porta app role ...`)
95
95
 
@@ -99,51 +99,57 @@ Every command supports these flags:
99
99
  | `porta app role list <app-id>` | List roles |
100
100
  | `porta app role show <app-id> <role-id>` | Show role details |
101
101
  | `porta app role update <app-id> <role-id>` | Update a role |
102
- | `porta app role archive <app-id> <role-id>` | Archive a role |
102
+ | `porta app role delete <app-id> <role-id>` | Permanently delete a role |
103
103
  | `porta app role assign-perm <app-id> <role-id> <perm-id>` | Assign permission to role |
104
104
  | `porta app role remove-perm <app-id> <role-id> <perm-id>` | Remove permission from role |
105
105
 
106
106
  **Nested: Permissions** (`porta app permission ...`)
107
107
 
108
- | Command | Description |
109
- | ------------------------------------------------- | ----------------------- |
110
- | `porta app permission create <app-id>` | Create a permission |
111
- | `porta app permission list <app-id>` | List permissions |
112
- | `porta app permission show <app-id> <perm-id>` | Show permission details |
113
- | `porta app permission archive <app-id> <perm-id>` | Archive a permission |
108
+ | Command | Description |
109
+ | ------------------------------------------------ | ------------------------------- |
110
+ | `porta app permission create <app-id>` | Create a permission |
111
+ | `porta app permission list <app-id>` | List permissions |
112
+ | `porta app permission show <app-id> <perm-id>` | Show permission details |
113
+ | `porta app permission delete <app-id> <perm-id>` | Permanently delete a permission |
114
114
 
115
115
  **Nested: Claims** (`porta app claim ...`)
116
116
 
117
- | Command | Description |
118
- | --------------------------------------------- | -------------------------- |
119
- | `porta app claim create <app-id>` | Create a claim definition |
120
- | `porta app claim list <app-id>` | List claim definitions |
121
- | `porta app claim show <app-id> <claim-id>` | Show claim details |
122
- | `porta app claim update <app-id> <claim-id>` | Update a claim definition |
123
- | `porta app claim archive <app-id> <claim-id>` | Archive a claim definition |
117
+ | Command | Description |
118
+ | -------------------------------------------- | ------------------------------------- |
119
+ | `porta app claim create <app-id>` | Create a claim definition |
120
+ | `porta app claim list <app-id>` | List claim definitions |
121
+ | `porta app claim show <app-id> <claim-id>` | Show claim details |
122
+ | `porta app claim update <app-id> <claim-id>` | Update a claim definition |
123
+ | `porta app claim delete <app-id> <claim-id>` | Permanently delete a claim definition |
124
124
 
125
125
  **Nested: Modules** (`porta app module ...`)
126
126
 
127
- | Command | Description |
128
- | ----------------------------------- | ------------------------ |
129
- | `porta app module list <app-id>` | List application modules |
130
- | `porta app module enable <app-id>` | Enable a module |
131
- | `porta app module disable <app-id>` | Disable a module |
127
+ | Command | Description |
128
+ | ---------------------------------------------- | ----------------------------------------------- |
129
+ | `porta app module list <app-id>` | List application modules |
130
+ | `porta app module enable <app-id>` | Enable a module |
131
+ | `porta app module disable <app-id>` | Disable a module |
132
+ | `porta app module delete <app-id> <module-id>` | Permanently delete a module and its permissions |
132
133
 
133
134
  ### Clients
134
135
 
135
- | Command | Description |
136
- | ---------------------------- | ------------------------ |
137
- | `porta client list` | List clients |
138
- | `porta client create` | Create a new client |
139
- | `porta client show <id>` | Show client details |
140
- | `porta client update <id>` | Update client properties |
141
- | `porta client activate <id>` | Activate a client |
142
- | `porta client suspend <id>` | Suspend a client |
143
- | `porta client archive <id>` | Archive a client |
136
+ | Command | Description |
137
+ | ------------------------------ | ------------------------------- |
138
+ | `porta client list` | List clients |
139
+ | `porta client create` | Create a new client |
140
+ | `porta client show <id>` | Show client details |
141
+ | `porta client update <id>` | Update client properties |
142
+ | `porta client activate <id>` | Activate a client |
143
+ | `porta client deactivate <id>` | Temporarily deactivate a client |
144
+ | `porta client delete <id>` | Permanently delete a client |
144
145
 
145
146
  **Nested: Secrets** (`porta client secret ...`)
146
147
 
148
+ The interactive `porta admin` client workspace uses focused Overview, Authentication, Protocol,
149
+ Login experience, Credentials, and Lifecycle sections. Multi-field editors fill the Admin surface;
150
+ secret generation supports 3, 6, 12, and 24 month presets, a custom calendar date, or Never. Secret
151
+ plaintext is shown once and is never retained in the workspace.
152
+
147
153
  | Command | Description |
148
154
  | ---------------------------------------------------- | ---------------------------- |
149
155
  | `porta client secret create <client-id>` | Generate a new client secret |
@@ -152,16 +158,16 @@ Every command supports these flags:
152
158
 
153
159
  ### Users
154
160
 
155
- | Command | Description |
156
- | ---------------------------------------- | ----------------------------- |
157
- | `porta user list <org-id>` | List users in an organization |
158
- | `porta user create <org-id>` | Create a new user |
159
- | `porta user show <org-id> <user-id>` | Show user details |
160
- | `porta user update <org-id> <user-id>` | Update user properties |
161
- | `porta user invite <org-id>` | Send a user invitation |
162
- | `porta user activate <org-id> <user-id>` | Activate a user |
163
- | `porta user suspend <org-id> <user-id>` | Suspend a user |
164
- | `porta user archive <org-id> <user-id>` | Archive a user |
161
+ | Command | Description |
162
+ | ------------------------------------------ | ----------------------------- |
163
+ | `porta user list <org-id>` | List users in an organization |
164
+ | `porta user create <org-id>` | Create a new user |
165
+ | `porta user show <org-id> <user-id>` | Show user details |
166
+ | `porta user update <org-id> <user-id>` | Update user properties |
167
+ | `porta user invite <org-id>` | Send a user invitation |
168
+ | `porta user deactivate <org-id> <user-id>` | Deactivate a user |
169
+ | `porta user activate <org-id> <user-id>` | Activate a user |
170
+ | `porta user delete <org-id> <user-id>` | Permanently delete a user |
165
171
 
166
172
  **Nested: Roles** (`porta user role ...`)
167
173
 
@@ -196,15 +202,18 @@ Every command supports these flags:
196
202
  | `porta health` | Check server connectivity (no auth required) |
197
203
  | `porta bulk <action>` | Bulk status operations on orgs/users |
198
204
  | `porta exports download --entity-type <type>` | Export bounded allowlisted data as CSV or JSON |
205
+ | `porta export manifest ...` | Export a selective portability manifest |
206
+ | `porta import manifest <path> --mode <mode>` | Preview and import a portability manifest |
199
207
 
200
- ### Provisioning
208
+ ### Environment Portability
201
209
 
202
- | Command | Description |
203
- | ------------------------------- | ---------------------------------------------- |
204
- | `porta provision --file <path>` | Apply a declarative YAML/JSON environment file |
210
+ | Command | Description |
211
+ | -------------------------------------------- | ------------------------------------------------ |
212
+ | `porta export manifest` | Export selected categories to a strict JSON file |
213
+ | `porta import manifest <path> --mode <mode>` | Preview, confirm, and apply a strict JSON file |
205
214
 
206
- Supports `--mode merge|overwrite`, `--dry-run`, and `--json` flags. Provisioning files cannot
207
- contain passwords or other authentication material.
215
+ Import modes are `keep-existing` and `update-existing`. Both flows support `--json`; `--yes`
216
+ skips only the relevant file-replacement or apply confirmation.
208
217
 
209
218
  ### Utilities
210
219
 
@@ -233,46 +242,57 @@ porta login --server https://porta.example.com
233
242
  porta login --server https://porta.example.com --no-browser
234
243
  ```
235
244
 
236
- ## Declarative Provisioning
237
-
238
- Set up entire environments from a single YAML file:
239
-
240
- ```yaml
241
- # provision.yaml
242
- organizations:
243
- - name: Acme Corp
244
- slug: acme
245
- status: active
246
- applications:
247
- - name: Web Portal
248
- slug: web-portal
249
- clients:
250
- - name: web-app
251
- grant_types: [authorization_code]
252
- redirect_uris: [https://app.acme.com/callback]
253
- roles:
254
- - name: Admin
255
- permissions: [read, write, delete]
256
- - name: Viewer
257
- permissions: [read]
258
- users:
259
- - email: admin@acme.com
260
- given_name: Admin
261
- family_name: User
262
- roles: [Admin]
263
- ```
245
+ ## Interactive Administration Shell
246
+
247
+ `porta admin` opens the terminal administration shell for a Porta server.
264
248
 
265
249
  ```bash
266
- # Preview changes without applying
267
- porta provision --file provision.yaml --dry-run
250
+ porta admin --server https://identity.example.com
251
+ ```
252
+
253
+ The command requires interactive stdin and stdout. It rejects `--json` and `--force`. Login uses
254
+ the same OIDC Authorization Code with PKCE flow as `porta login`: the CLI opens a browser when
255
+ available and offers the manual authorization URL/callback flow when it cannot.
256
+
257
+ After verification, the organization chooser opens automatically without selecting an organization
258
+ for you. Use the Organizations menu to switch context or create an organization from its name,
259
+ optional slug, and optional default locale. Creation selects the returned organization immediately.
260
+ The selected context is held only for the running shell and does not change authentication or grant
261
+ permissions.
268
262
 
269
- # Apply with merge mode (default)
270
- porta provision --file provision.yaml
263
+ When no verified session is available, the admin UI immediately opens an **Authentication
264
+ required** dialog. Choose **Authenticate** (focused by default, so Enter works) to start the existing
265
+ browser/manual OIDC flow, or choose **Quit**. The dialog returns after cancellation or a failed
266
+ attempt, so the shell never leaves you on an unusable disabled screen.
271
267
 
272
- # Full overwrite mode
273
- porta provision --file provision.yaml --mode overwrite
268
+ Press `F10` to open the hamburger menu containing `Who am I…`, `Reauthenticate`, and `Quit`.
269
+ `Who am I…` shows the server-bound verified identity. After selecting an organization, the Users
270
+ menu supports browse, search, status filters, create, invite, detail, history, profile, credentials,
271
+ and lifecycle actions according to the verified permissions. Use `Ctrl-R` to reauthenticate;
272
+ replacing credentials for a different server requires explicit confirmation.
273
+
274
+ Use `--insecure` only for deliberate local testing. The shell displays a persistent warning because
275
+ that flag disables TLS certificate validation.
276
+
277
+ ## Environment Portability
278
+
279
+ Export selected data to a strict JSON manifest:
280
+
281
+ ```console
282
+ porta export manifest \
283
+ --organization acme \
284
+ --category organizations \
285
+ --category applications_authorization \
286
+ --all-applications \
287
+ --output acme-porta.json
288
+
289
+ porta import manifest acme-porta.json --mode keep-existing
274
290
  ```
275
291
 
292
+ Import always previews and validates before confirmation and apply. Existing client secrets,
293
+ passwords, signing keys, sessions, recovery material, and control-plane records are never carried
294
+ by the manifest. Newly created confidential clients return a generated secret once after commit.
295
+
276
296
  ## JSON Output
277
297
 
278
298
  All commands support `--json` for machine-readable output, making it easy to integrate with scripts and CI pipelines:
@@ -305,7 +325,7 @@ porta completion > ~/.config/fish/completions/porta.fish
305
325
 
306
326
  - [CLI Overview](https://blendsdk.github.io/porta-identity/cli/overview) — Architecture, installation, and authentication
307
327
  - [CLI Commands Reference](https://blendsdk.github.io/porta-identity/cli/organizations) — Detailed command documentation
308
- - [Provisioning Guide](https://blendsdk.github.io/porta-identity/cli/provisioning) — Declarative environment setup
328
+ - [Environment Portability](https://blendsdk.github.io/porta-identity/cli/provisioning) — Selective manifest export and import
309
329
  - [Bootstrap Guide](https://blendsdk.github.io/porta-identity/cli/bootstrap) — Initial server setup with `porta init`
310
330
 
311
331
  ## Related Packages
@@ -0,0 +1,6 @@
1
+ /** Shared human-readable formatting for timestamps on administrative surfaces. */
2
+ /** Formats one timestamp in a concise, stable UTC representation. */
3
+ export declare function formatAdminDateTime(value: string): string;
4
+ /** Formats an optional timestamp or returns its context-specific empty label. */
5
+ export declare function formatOptionalAdminDateTime(value: string | null, fallback: string): string;
6
+ //# sourceMappingURL=admin-date-time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-date-time.d.ts","sourceRoot":"","sources":["../../src/admin/admin-date-time.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAiBlF,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUzD;AAED,iFAAiF;AACjF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1F"}
@@ -0,0 +1,33 @@
1
+ /** Shared human-readable formatting for timestamps on administrative surfaces. */
2
+ const MONTHS = [
3
+ 'Jan',
4
+ 'Feb',
5
+ 'Mar',
6
+ 'Apr',
7
+ 'May',
8
+ 'Jun',
9
+ 'Jul',
10
+ 'Aug',
11
+ 'Sep',
12
+ 'Oct',
13
+ 'Nov',
14
+ 'Dec',
15
+ ];
16
+ /** Formats one timestamp in a concise, stable UTC representation. */
17
+ export function formatAdminDateTime(value) {
18
+ const timestamp = Date.parse(value);
19
+ if (!Number.isFinite(timestamp))
20
+ return 'Unknown';
21
+ const date = new Date(timestamp);
22
+ const day = String(date.getUTCDate()).padStart(2, '0');
23
+ const month = MONTHS[date.getUTCMonth()] ?? 'Unknown';
24
+ const year = date.getUTCFullYear();
25
+ const hours = String(date.getUTCHours()).padStart(2, '0');
26
+ const minutes = String(date.getUTCMinutes()).padStart(2, '0');
27
+ return `${day} ${month} ${year}, ${hours}:${minutes} UTC`;
28
+ }
29
+ /** Formats an optional timestamp or returns its context-specific empty label. */
30
+ export function formatOptionalAdminDateTime(value, fallback) {
31
+ return value === null ? fallback : formatAdminDateTime(value);
32
+ }
33
+ //# sourceMappingURL=admin-date-time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-date-time.js","sourceRoot":"","sources":["../../src/admin/admin-date-time.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAElF,MAAM,MAAM,GAAG;IACb,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACG,CAAC;AAEX,qEAAqE;AACrE,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,SAAS,CAAC;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO,GAAG,GAAG,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,OAAO,MAAM,CAAC;AAC5D,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,2BAA2B,CAAC,KAAoB,EAAE,QAAgB;IAChF,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -0,0 +1,38 @@
1
+ /** Shell composition for the global application and selected-organization client workspaces. */
2
+ import type { View } from '@jsvision/ui';
3
+ import type { AdminDialogSurface } from './application-runtime.js';
4
+ import type { AdminApplicationSession } from './application.js';
5
+ import type { AdminConnectionState } from './state.js';
6
+ /** Dependencies supplied by the existing administration shell. */
7
+ export interface AdminApplicationClientFeaturesOptions {
8
+ /** Shared modal surface owned by the administration application. */
9
+ readonly dialogs: AdminDialogSurface;
10
+ /** Reads the current verified shell state. */
11
+ readonly readState: () => AdminConnectionState;
12
+ /** Reads the current server-bound operation set. */
13
+ readonly readSession: () => AdminApplicationSession | undefined;
14
+ /** Replaces the single main workspace. */
15
+ readonly mountWorkspace: (workspace: View | null) => void;
16
+ /** Focuses one known focusable workspace child. */
17
+ readonly focusView: (view: View) => void;
18
+ /** Reports whether a feature dialog currently owns terminal input. */
19
+ readonly setDialogBusy: (busy: boolean) => void;
20
+ /** Re-enters authentication after a final session failure. */
21
+ readonly requestAuthentication: () => void;
22
+ }
23
+ /** Feature lifecycle used by the shell without exposing controller internals. */
24
+ export interface AdminApplicationClientFeatures {
25
+ /** Applies authentication and selected-organization changes. */
26
+ readonly syncContext: (state: AdminConnectionState, sessionEpoch: number) => void;
27
+ /** Routes one explicit application or client shell command. */
28
+ readonly handleCommand: (command: string) => void;
29
+ /** Cancels the current dialog or feature operation. */
30
+ readonly cancelActiveOperation: () => void;
31
+ /** Clears unsafe ownership when the terminal enters resize recovery. */
32
+ readonly handleRecoverableGeometry: (recoverable: boolean) => void;
33
+ /** Releases both feature owners exactly once. */
34
+ readonly dispose: () => void;
35
+ }
36
+ /** Creates the small feature-specific composition used by the existing shell. */
37
+ export declare function createAdminApplicationClientFeatures(options: AdminApplicationClientFeaturesOptions): AdminApplicationClientFeatures;
38
+ //# sourceMappingURL=application-client-features.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application-client-features.d.ts","sourceRoot":"","sources":["../../src/admin/application-client-features.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAEhG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAwCzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,kEAAkE;AAClE,MAAM,WAAW,qCAAqC;IACpD,oEAAoE;IACpE,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,oBAAoB,CAAC;IAC/C,oDAAoD;IACpD,QAAQ,CAAC,WAAW,EAAE,MAAM,uBAAuB,GAAG,SAAS,CAAC;IAChE,0CAA0C;IAC1C,QAAQ,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1D,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACzC,sEAAsE;IACtE,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,8DAA8D;IAC9D,QAAQ,CAAC,qBAAqB,EAAE,MAAM,IAAI,CAAC;CAC5C;AAED,iFAAiF;AACjF,MAAM,WAAW,8BAA8B;IAC7C,gEAAgE;IAChE,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAClF,+DAA+D;IAC/D,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,uDAAuD;IACvD,QAAQ,CAAC,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAC3C,wEAAwE;IACxE,QAAQ,CAAC,yBAAyB,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IACnE,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,iFAAiF;AACjF,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,qCAAqC,GAC7C,8BAA8B,CAqlBhC"}