@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
package/dist/output.js CHANGED
@@ -13,6 +13,25 @@
13
13
  */
14
14
  import Table from 'cli-table3';
15
15
  import chalk from 'chalk';
16
+ /**
17
+ * Replace terminal control characters before rendering untrusted text.
18
+ *
19
+ * JSON output remains untouched because `JSON.stringify` escapes controls for machine consumers.
20
+ * Human output uses this boundary to prevent stored names or labels from emitting terminal escape
21
+ * sequences, changing the screen, or writing to the clipboard.
22
+ *
23
+ * @param value - Text that may originate from the server or command input
24
+ * @returns Printable text with C0, DEL, and C1 controls replaced
25
+ */
26
+ export function sanitizeTerminalText(value) {
27
+ return Array.from(value, (character) => {
28
+ const codePoint = character.codePointAt(0);
29
+ return codePoint !== undefined &&
30
+ (codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f))
31
+ ? '\ufffd'
32
+ : character;
33
+ }).join('');
34
+ }
16
35
  /**
17
36
  * Formats data as a table and prints to stdout.
18
37
  *
@@ -27,9 +46,9 @@ import chalk from 'chalk';
27
46
  */
28
47
  export function printTable(headers, rows) {
29
48
  const table = new Table({
30
- head: headers.map((h) => chalk.bold(h)),
49
+ head: headers.map((header) => chalk.bold(sanitizeTerminalText(header))),
31
50
  });
32
- rows.forEach((row) => table.push(row));
51
+ rows.forEach((row) => table.push(row.map(sanitizeTerminalText)));
33
52
  console.log(table.toString());
34
53
  }
35
54
  /**
@@ -49,7 +68,7 @@ export function printJson(data) {
49
68
  * @param message - The success message
50
69
  */
51
70
  export function success(message) {
52
- console.log(chalk.green(`✓ ${message}`));
71
+ console.log(chalk.green(`✓ ${sanitizeTerminalText(message)}`));
53
72
  }
54
73
  /**
55
74
  * Prints a warning message in yellow to stderr.
@@ -57,7 +76,7 @@ export function success(message) {
57
76
  * @param message - The warning message
58
77
  */
59
78
  export function warn(message) {
60
- console.error(chalk.yellow(`⚠ ${message}`));
79
+ console.error(chalk.yellow(`⚠ ${sanitizeTerminalText(message)}`));
61
80
  }
62
81
  /**
63
82
  * Prints an error message in red to stderr.
@@ -65,7 +84,7 @@ export function warn(message) {
65
84
  * @param message - The error message
66
85
  */
67
86
  export function error(message) {
68
- console.error(chalk.red(`✗ ${message}`));
87
+ console.error(chalk.red(`✗ ${sanitizeTerminalText(message)}`));
69
88
  }
70
89
  /**
71
90
  * Prints an info message in blue.
@@ -73,7 +92,7 @@ export function error(message) {
73
92
  * @param message - The info message
74
93
  */
75
94
  export function info(message) {
76
- console.log(chalk.blue(`ℹ ${message}`));
95
+ console.log(chalk.blue(`ℹ ${sanitizeTerminalText(message)}`));
77
96
  }
78
97
  /**
79
98
  * Formats a date string or Date object for display.
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CAAC,OAAiB,EAAE,IAAgB;IAC5D,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACxC,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AAChC,CAAC;AAGD;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CAAC,IAAsC;IAC/D,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,CAAC,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,OAAO,CAAC,CAAC,cAAc,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE;IAC/C,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM;QAAE,OAAO,GAAG,CAAC;IACrC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
package/dist/prompt.d.ts CHANGED
@@ -17,7 +17,7 @@
17
17
  * @param message - The confirmation question
18
18
  * @returns true if the user answers 'y' or 'yes'
19
19
  */
20
- export declare function confirm(message: string): Promise<boolean>;
20
+ export declare function confirm(message: string, signal?: AbortSignal): Promise<boolean>;
21
21
  /**
22
22
  * Asks the user for type-to-confirm input.
23
23
  *
@@ -35,7 +35,7 @@ export declare function confirmTyped(message: string, expected: string): Promise
35
35
  * @param prompt - The prompt message to display
36
36
  * @returns The user's input string
37
37
  */
38
- export declare function question(prompt: string): Promise<string>;
38
+ export declare function question(prompt: string, signal?: AbortSignal): Promise<string>;
39
39
  /**
40
40
  * Prompts the user for password input (hidden).
41
41
  *
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG/D;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtF;AAMD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY9D;AAED;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyB9D"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAGrF;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtF;AAMD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BpF;AAED;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B9D"}
package/dist/prompt.js CHANGED
@@ -9,6 +9,7 @@
9
9
  * @module prompt
10
10
  */
11
11
  import { createInterface } from 'node:readline';
12
+ import { sanitizeTerminalText } from './output.js';
12
13
  // ---------------------------------------------------------------------------
13
14
  // Confirmation Prompt
14
15
  // ---------------------------------------------------------------------------
@@ -21,8 +22,8 @@ import { createInterface } from 'node:readline';
21
22
  * @param message - The confirmation question
22
23
  * @returns true if the user answers 'y' or 'yes'
23
24
  */
24
- export async function confirm(message) {
25
- const answer = await question(`${message} [y/N] `);
25
+ export async function confirm(message, signal) {
26
+ const answer = await question(`${message} [y/N] `, signal);
26
27
  return answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes';
27
28
  }
28
29
  /**
@@ -48,13 +49,31 @@ export async function confirmTyped(message, expected) {
48
49
  * @param prompt - The prompt message to display
49
50
  * @returns The user's input string
50
51
  */
51
- export async function question(prompt) {
52
+ export async function question(prompt, signal) {
53
+ const safePrompt = sanitizeTerminalText(prompt);
52
54
  const rl = createInterface({
53
55
  input: process.stdin,
54
56
  output: process.stderr, // Prompt on stderr so stdout stays clean for piping
55
57
  });
56
- return new Promise((resolve) => {
57
- rl.question(prompt, (answer) => {
58
+ return new Promise((resolve, reject) => {
59
+ let settled = false;
60
+ const abort = () => {
61
+ if (settled)
62
+ return;
63
+ settled = true;
64
+ rl.close();
65
+ reject(new DOMException('The operation was aborted', 'AbortError'));
66
+ };
67
+ if (signal?.aborted) {
68
+ abort();
69
+ return;
70
+ }
71
+ signal?.addEventListener('abort', abort, { once: true });
72
+ rl.question(safePrompt, (answer) => {
73
+ if (settled)
74
+ return;
75
+ settled = true;
76
+ signal?.removeEventListener('abort', abort);
58
77
  rl.close();
59
78
  resolve(answer.trim());
60
79
  });
@@ -71,6 +90,7 @@ export async function question(prompt) {
71
90
  * @returns The entered password string
72
91
  */
73
92
  export async function password(prompt) {
93
+ const safePrompt = sanitizeTerminalText(prompt);
74
94
  const rl = createInterface({
75
95
  input: process.stdin,
76
96
  output: process.stderr,
@@ -78,7 +98,7 @@ export async function password(prompt) {
78
98
  // Suppress echoing of password characters
79
99
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
100
  rl._writeToOutput = function _writeToOutput(str) {
81
- if (str.includes(prompt)) {
101
+ if (str.includes(safePrompt)) {
82
102
  // Show the prompt itself
83
103
  process.stderr.write(str);
84
104
  }
@@ -88,7 +108,7 @@ export async function password(prompt) {
88
108
  }
89
109
  };
90
110
  return new Promise((resolve) => {
91
- rl.question(prompt, (answer) => {
111
+ rl.question(safePrompt, (answer) => {
92
112
  process.stderr.write('\n'); // New line after hidden input
93
113
  rl.close();
94
114
  resolve(answer);
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAe;IAC3C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;AACxE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,QAAgB;IAClE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IAC9C,OAAO,MAAM,KAAK,QAAQ,CAAC;AAC7B,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc;IAC3C,MAAM,EAAE,GAAG,eAAe,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,oDAAoD;KAC7E,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACrC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAC7B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc;IAC3C,MAAM,EAAE,GAAG,eAAe,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,0CAA0C;IAC1C,8DAA8D;IAC7D,EAAU,CAAC,cAAc,GAAG,SAAS,cAAc,CAAC,GAAW;QAC9D,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,yBAAyB;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,0CAA0C;YAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACrC,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,8BAA8B;YAC1D,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@portaidentity/cli",
3
- "version": "1.7.3",
3
+ "version": "1.9.0",
4
4
  "description": "Standalone CLI for the Porta Identity Platform",
5
5
  "type": "module",
6
6
  "bin": {
@@ -15,6 +15,7 @@
15
15
  "scripts": {
16
16
  "build": "../../node_modules/@typescript/native/bin/tsc",
17
17
  "test": "vitest run",
18
+ "test:coverage": "vitest run --coverage",
18
19
  "test:watch": "vitest",
19
20
  "lint": "eslint 'src/**/*.ts' 'tests/**/*.ts'",
20
21
  "typecheck": "../../node_modules/@typescript/native/bin/tsc --noEmit",
@@ -22,12 +23,15 @@
22
23
  "clean": "rm -rf dist"
23
24
  },
24
25
  "dependencies": {
25
- "@portaidentity/sdk": "1.7.3",
26
+ "@jsvision/core": "1.7.1",
27
+ "@jsvision/files": "1.7.1",
28
+ "@jsvision/ui": "1.7.1",
29
+ "@portaidentity/sdk": "1.9.0",
26
30
  "chalk": "^6.0.0",
27
31
  "cli-table3": "^0.6.5",
32
+ "fs-ext-extra-prebuilt": "2.2.13",
28
33
  "jose": "^6.2.8",
29
34
  "open": "^11.0.0",
30
- "yaml": "^2.9.0",
31
35
  "yargs": "^18.1.0"
32
36
  },
33
37
  "devDependencies": {
@@ -1,21 +0,0 @@
1
- /**
2
- * `porta gui` command — Launch the standalone Admin GUI.
3
- *
4
- * Dynamically imports `@portaidentity/admin-gui` and calls `startServer()`.
5
- * If the package is not installed, prints install instructions.
6
- *
7
- * The admin-gui package is NOT a dependency of the CLI — it is discovered
8
- * at runtime via dynamic import. This avoids bloating the CLI with
9
- * React + FluentUI dependencies.
10
- *
11
- * @module commands/gui
12
- */
13
- import type { CommandModule } from 'yargs';
14
- import type { GlobalOptions } from '../global-options.js';
15
- interface GuiOptions extends GlobalOptions {
16
- port?: number;
17
- 'no-open'?: boolean;
18
- }
19
- export declare const guiCommand: CommandModule<GlobalOptions, GuiOptions>;
20
- export {};
21
- //# sourceMappingURL=gui.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gui.d.ts","sourceRoot":"","sources":["../../src/commands/gui.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,UAAU,UAAW,SAAQ,aAAa;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC,aAAa,EAAE,UAAU,CAqD/D,CAAC"}
@@ -1,67 +0,0 @@
1
- /**
2
- * `porta gui` command — Launch the standalone Admin GUI.
3
- *
4
- * Dynamically imports `@portaidentity/admin-gui` and calls `startServer()`.
5
- * If the package is not installed, prints install instructions.
6
- *
7
- * The admin-gui package is NOT a dependency of the CLI — it is discovered
8
- * at runtime via dynamic import. This avoids bloating the CLI with
9
- * React + FluentUI dependencies.
10
- *
11
- * @module commands/gui
12
- */
13
- import { error, warn } from '../output.js';
14
- export const guiCommand = {
15
- command: 'gui',
16
- describe: 'Launch the Porta Admin GUI in your browser',
17
- builder: (yargs) => yargs
18
- .option('port', {
19
- type: 'number',
20
- describe: 'BFF listen port',
21
- default: 4002,
22
- })
23
- .option('no-open', {
24
- type: 'boolean',
25
- describe: 'Do not open browser on startup',
26
- default: false,
27
- }),
28
- handler: async (argv) => {
29
- try {
30
- // Dynamic import — admin-gui is an optional peer, not a CLI dependency.
31
- // Use a variable so TypeScript won't resolve the module at compile time
32
- // (the package may not be installed or built during CLI typecheck).
33
- const guiModule = '@portaidentity/admin-gui';
34
- const adminGui = (await import(/* webpackIgnore: true */ guiModule));
35
- await adminGui.startServer({
36
- server: argv.server,
37
- port: argv.port,
38
- open: !argv['no-open'],
39
- insecure: argv.insecure,
40
- });
41
- }
42
- catch (err) {
43
- // Check if it's a module-not-found error
44
- if (isModuleNotFound(err)) {
45
- warn('The Porta Admin GUI package is not installed.\n');
46
- console.log(' Install it with:\n');
47
- console.log(' npm install -g @portaidentity/admin-gui\n');
48
- console.log(' Or run it directly with:\n');
49
- console.log(' npx @portaidentity/admin-gui --server <porta-server-url>\n');
50
- process.exit(1);
51
- }
52
- // Other error — rethrow
53
- error(err instanceof Error ? err.message : String(err));
54
- process.exit(1);
55
- }
56
- },
57
- };
58
- /**
59
- * Check if an error is a module-not-found error for @portaidentity/admin-gui.
60
- */
61
- function isModuleNotFound(err) {
62
- if (!(err instanceof Error))
63
- return false;
64
- const code = err.code;
65
- return code === 'ERR_MODULE_NOT_FOUND' && err.message.includes('@portaidentity/admin-gui');
66
- }
67
- //# sourceMappingURL=gui.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gui.js","sourceRoot":"","sources":["../../src/commands/gui.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAO3C,MAAM,CAAC,MAAM,UAAU,GAA6C;IAClE,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,4CAA4C;IACtD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,MAAM,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,iBAAiB;QAC3B,OAAO,EAAE,IAAI;KACd,CAAC;SACD,MAAM,CAAC,SAAS,EAAE;QACjB,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,gCAAgC;QAC1C,OAAO,EAAE,KAAK;KACf,CAAC;IAEN,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,IAAI,CAAC;YACH,wEAAwE;YACxE,wEAAwE;YACxE,oEAAoE;YACpE,MAAM,SAAS,GAAG,0BAA0B,CAAC;YAC7C,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAOlE,CAAC;YAEF,MAAM,QAAQ,CAAC,WAAW,CAAC;gBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;gBACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,yCAAyC;YACzC,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,iDAAiD,CAAC,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;gBAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,wBAAwB;YACxB,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;IACjD,OAAO,IAAI,KAAK,sBAAsB,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;AAC7F,CAAC"}
@@ -1,47 +0,0 @@
1
- /**
2
- * Provision command — declarative tenant infrastructure from YAML/JSON.
3
- *
4
- * Reads a YAML (or JSON) provisioning file with a nested structure
5
- * (organizations → applications → clients/roles/permissions/claims),
6
- * transforms it into the flat import manifest format, and sends it
7
- * to the import API via the SDK. All entities are created in a single
8
- * transaction.
9
- *
10
- * Supports three modes:
11
- * merge (default): skip existing entities, create new
12
- * overwrite: update existing entities, create new
13
- * dry-run: preview what would change without applying
14
- *
15
- * Usage:
16
- * porta provision --file infrastructure.yaml
17
- * porta provision --file infrastructure.yaml --dry-run
18
- * porta provision --file infrastructure.yaml --mode overwrite
19
- * porta provision --file infrastructure.yaml --json
20
- *
21
- * @module commands/provision
22
- */
23
- import type { CommandModule } from 'yargs';
24
- import type { GlobalOptions } from '../global-options.js';
25
- /**
26
- * Parse a duration string into a future Date.
27
- *
28
- * Supports: Nd (days), Nm (months), Ny (years), Nh (hours).
29
- * Examples: "90d" (90 days), "6m" (6 months), "1y" (1 year), "24h" (24 hours).
30
- */
31
- export declare function parseDuration(duration: string): Date;
32
- /**
33
- * Read and parse a provisioning file from disk or stdin.
34
- *
35
- * Detects format by file extension (.yaml/.yml for YAML, .json for JSON).
36
- * When reading from `/dev/stdin` (no extension), defaults to YAML parsing
37
- * which also handles valid JSON since YAML is a superset of JSON.
38
- */
39
- export declare function parseProvisioningFile(filePath: string): unknown;
40
- interface ProvisionOptions extends GlobalOptions {
41
- file: string;
42
- mode: 'merge' | 'overwrite';
43
- 'dry-run'?: boolean;
44
- }
45
- export declare const provisionCommand: CommandModule<GlobalOptions, ProvisionOptions>;
46
- export {};
47
- //# sourceMappingURL=provision.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provision.d.ts","sourceRoot":"","sources":["../../src/commands/provision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AA4B1D;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CA2BpD;AAMD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAkB/D;AA+gBD,UAAU,gBAAiB,SAAQ,aAAa;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,aAAa,EAAE,gBAAgB,CAyF3E,CAAC"}