@rockcarver/frodo-cli 2.0.0-8 → 2.0.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 (444) hide show
  1. package/.vscode/launch.json +1 -0
  2. package/CHANGELOG.md +1180 -715
  3. package/README.md +2 -2
  4. package/dist/app.cjs +187758 -0
  5. package/dist/app.cjs.map +1 -0
  6. package/dist/app.d.cts +2 -0
  7. package/dist/chunk-MPPKDFVI.cjs +56 -0
  8. package/dist/chunk-MPPKDFVI.cjs.map +1 -0
  9. package/dist/launch.cjs +27 -0
  10. package/dist/launch.cjs.map +1 -0
  11. package/dist/launch.d.cts +1 -0
  12. package/dist/loader.cjs +836 -0
  13. package/dist/loader.cjs.map +1 -0
  14. package/dist/loader.d.cts +3 -0
  15. package/global-jest-setup.js +5 -0
  16. package/package.json +68 -57
  17. package/tsup.config.ts +40 -0
  18. package/esm/app.js +0 -61
  19. package/esm/app.js.map +0 -1
  20. package/esm/cli/FrodoCommand.js +0 -147
  21. package/esm/cli/FrodoCommand.js.map +0 -1
  22. package/esm/cli/_template/something-delete.js +0 -22
  23. package/esm/cli/_template/something-delete.js.map +0 -1
  24. package/esm/cli/_template/something-describe.js +0 -22
  25. package/esm/cli/_template/something-describe.js.map +0 -1
  26. package/esm/cli/_template/something-else-delete.js +0 -22
  27. package/esm/cli/_template/something-else-delete.js.map +0 -1
  28. package/esm/cli/_template/something-else-describe.js +0 -22
  29. package/esm/cli/_template/something-else-describe.js.map +0 -1
  30. package/esm/cli/_template/something-else-export.js +0 -22
  31. package/esm/cli/_template/something-else-export.js.map +0 -1
  32. package/esm/cli/_template/something-else-import.js +0 -22
  33. package/esm/cli/_template/something-else-import.js.map +0 -1
  34. package/esm/cli/_template/something-else-list.js +0 -22
  35. package/esm/cli/_template/something-else-list.js.map +0 -1
  36. package/esm/cli/_template/something-else.js +0 -10
  37. package/esm/cli/_template/something-else.js.map +0 -1
  38. package/esm/cli/_template/something-export.js +0 -22
  39. package/esm/cli/_template/something-export.js.map +0 -1
  40. package/esm/cli/_template/something-import.js +0 -22
  41. package/esm/cli/_template/something-import.js.map +0 -1
  42. package/esm/cli/_template/something-list.js +0 -22
  43. package/esm/cli/_template/something-list.js.map +0 -1
  44. package/esm/cli/_template/something-other-delete.js +0 -22
  45. package/esm/cli/_template/something-other-delete.js.map +0 -1
  46. package/esm/cli/_template/something-other-describe.js +0 -22
  47. package/esm/cli/_template/something-other-describe.js.map +0 -1
  48. package/esm/cli/_template/something-other-export.js +0 -22
  49. package/esm/cli/_template/something-other-export.js.map +0 -1
  50. package/esm/cli/_template/something-other-import.js +0 -22
  51. package/esm/cli/_template/something-other-import.js.map +0 -1
  52. package/esm/cli/_template/something-other-list.js +0 -22
  53. package/esm/cli/_template/something-other-list.js.map +0 -1
  54. package/esm/cli/_template/something-other.js +0 -10
  55. package/esm/cli/_template/something-other.js.map +0 -1
  56. package/esm/cli/_template/something.js +0 -16
  57. package/esm/cli/_template/something.js.map +0 -1
  58. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +0 -27
  59. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +0 -1
  60. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +0 -86
  61. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +0 -1
  62. package/esm/cli/admin/admin-federation-export.js +0 -45
  63. package/esm/cli/admin/admin-federation-export.js.map +0 -1
  64. package/esm/cli/admin/admin-federation-import.js +0 -49
  65. package/esm/cli/admin/admin-federation-import.js.map +0 -1
  66. package/esm/cli/admin/admin-federation-list.js +0 -29
  67. package/esm/cli/admin/admin-federation-list.js.map +0 -1
  68. package/esm/cli/admin/admin-federation.js +0 -13
  69. package/esm/cli/admin/admin-federation.js.map +0 -1
  70. package/esm/cli/admin/admin-get-access-token.js +0 -28
  71. package/esm/cli/admin/admin-get-access-token.js.map +0 -1
  72. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +0 -28
  73. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +0 -1
  74. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +0 -28
  75. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +0 -1
  76. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +0 -30
  77. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +0 -1
  78. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +0 -30
  79. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +0 -1
  80. package/esm/cli/admin/admin-list-static-user-mappings.js +0 -31
  81. package/esm/cli/admin/admin-list-static-user-mappings.js.map +0 -1
  82. package/esm/cli/admin/admin-remove-static-user-mapping.js +0 -27
  83. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +0 -1
  84. package/esm/cli/admin/admin-repair-org-model.js +0 -28
  85. package/esm/cli/admin/admin-repair-org-model.js.map +0 -1
  86. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +0 -28
  87. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +0 -1
  88. package/esm/cli/admin/admin-show-generic-extension-attributes.js +0 -28
  89. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +0 -1
  90. package/esm/cli/admin/admin.js +0 -22
  91. package/esm/cli/admin/admin.js.map +0 -1
  92. package/esm/cli/agent/agent-delete.js +0 -52
  93. package/esm/cli/agent/agent-delete.js.map +0 -1
  94. package/esm/cli/agent/agent-describe.js +0 -22
  95. package/esm/cli/agent/agent-describe.js.map +0 -1
  96. package/esm/cli/agent/agent-export.js +0 -42
  97. package/esm/cli/agent/agent-export.js.map +0 -1
  98. package/esm/cli/agent/agent-gateway-delete.js +0 -52
  99. package/esm/cli/agent/agent-gateway-delete.js.map +0 -1
  100. package/esm/cli/agent/agent-gateway-describe.js +0 -22
  101. package/esm/cli/agent/agent-gateway-describe.js.map +0 -1
  102. package/esm/cli/agent/agent-gateway-export.js +0 -42
  103. package/esm/cli/agent/agent-gateway-export.js.map +0 -1
  104. package/esm/cli/agent/agent-gateway-import.js +0 -47
  105. package/esm/cli/agent/agent-gateway-import.js.map +0 -1
  106. package/esm/cli/agent/agent-gateway-list.js +0 -23
  107. package/esm/cli/agent/agent-gateway-list.js.map +0 -1
  108. package/esm/cli/agent/agent-gateway.js +0 -10
  109. package/esm/cli/agent/agent-gateway.js.map +0 -1
  110. package/esm/cli/agent/agent-import.js +0 -47
  111. package/esm/cli/agent/agent-import.js.map +0 -1
  112. package/esm/cli/agent/agent-java-delete.js +0 -52
  113. package/esm/cli/agent/agent-java-delete.js.map +0 -1
  114. package/esm/cli/agent/agent-java-describe.js +0 -22
  115. package/esm/cli/agent/agent-java-describe.js.map +0 -1
  116. package/esm/cli/agent/agent-java-export.js +0 -42
  117. package/esm/cli/agent/agent-java-export.js.map +0 -1
  118. package/esm/cli/agent/agent-java-import.js +0 -47
  119. package/esm/cli/agent/agent-java-import.js.map +0 -1
  120. package/esm/cli/agent/agent-java-list.js +0 -23
  121. package/esm/cli/agent/agent-java-list.js.map +0 -1
  122. package/esm/cli/agent/agent-java.js +0 -10
  123. package/esm/cli/agent/agent-java.js.map +0 -1
  124. package/esm/cli/agent/agent-list.js +0 -23
  125. package/esm/cli/agent/agent-list.js.map +0 -1
  126. package/esm/cli/agent/agent-web-delete.js +0 -52
  127. package/esm/cli/agent/agent-web-delete.js.map +0 -1
  128. package/esm/cli/agent/agent-web-describe.js +0 -22
  129. package/esm/cli/agent/agent-web-describe.js.map +0 -1
  130. package/esm/cli/agent/agent-web-export.js +0 -42
  131. package/esm/cli/agent/agent-web-export.js.map +0 -1
  132. package/esm/cli/agent/agent-web-import.js +0 -47
  133. package/esm/cli/agent/agent-web-import.js.map +0 -1
  134. package/esm/cli/agent/agent-web-list.js +0 -23
  135. package/esm/cli/agent/agent-web-list.js.map +0 -1
  136. package/esm/cli/agent/agent-web.js +0 -10
  137. package/esm/cli/agent/agent-web.js.map +0 -1
  138. package/esm/cli/agent/agent.js +0 -17
  139. package/esm/cli/agent/agent.js.map +0 -1
  140. package/esm/cli/app/app-delete.js +0 -22
  141. package/esm/cli/app/app-delete.js.map +0 -1
  142. package/esm/cli/app/app-describe.js +0 -22
  143. package/esm/cli/app/app-describe.js.map +0 -1
  144. package/esm/cli/app/app-export.js +0 -52
  145. package/esm/cli/app/app-export.js.map +0 -1
  146. package/esm/cli/app/app-import.js +0 -57
  147. package/esm/cli/app/app-import.js.map +0 -1
  148. package/esm/cli/app/app-list.js +0 -25
  149. package/esm/cli/app/app-list.js.map +0 -1
  150. package/esm/cli/app/app.js +0 -21
  151. package/esm/cli/app/app.js.map +0 -1
  152. package/esm/cli/authz/authz-policy-delete.js +0 -43
  153. package/esm/cli/authz/authz-policy-delete.js.map +0 -1
  154. package/esm/cli/authz/authz-policy-describe.js +0 -30
  155. package/esm/cli/authz/authz-policy-describe.js.map +0 -1
  156. package/esm/cli/authz/authz-policy-export.js +0 -75
  157. package/esm/cli/authz/authz-policy-export.js.map +0 -1
  158. package/esm/cli/authz/authz-policy-import.js +0 -65
  159. package/esm/cli/authz/authz-policy-import.js.map +0 -1
  160. package/esm/cli/authz/authz-policy-list.js +0 -37
  161. package/esm/cli/authz/authz-policy-list.js.map +0 -1
  162. package/esm/cli/authz/authz-policy.js +0 -10
  163. package/esm/cli/authz/authz-policy.js.map +0 -1
  164. package/esm/cli/authz/authz-set-delete.js +0 -37
  165. package/esm/cli/authz/authz-set-delete.js.map +0 -1
  166. package/esm/cli/authz/authz-set-describe.js +0 -30
  167. package/esm/cli/authz/authz-set-describe.js.map +0 -1
  168. package/esm/cli/authz/authz-set-export.js +0 -55
  169. package/esm/cli/authz/authz-set-export.js.map +0 -1
  170. package/esm/cli/authz/authz-set-import.js +0 -61
  171. package/esm/cli/authz/authz-set-import.js.map +0 -1
  172. package/esm/cli/authz/authz-set-list.js +0 -25
  173. package/esm/cli/authz/authz-set-list.js.map +0 -1
  174. package/esm/cli/authz/authz-set.js +0 -10
  175. package/esm/cli/authz/authz-set.js.map +0 -1
  176. package/esm/cli/authz/authz-type-delete.js +0 -43
  177. package/esm/cli/authz/authz-type-delete.js.map +0 -1
  178. package/esm/cli/authz/authz-type-describe.js +0 -34
  179. package/esm/cli/authz/authz-type-describe.js.map +0 -1
  180. package/esm/cli/authz/authz-type-export.js +0 -49
  181. package/esm/cli/authz/authz-type-export.js.map +0 -1
  182. package/esm/cli/authz/authz-type-import.js +0 -55
  183. package/esm/cli/authz/authz-type-import.js.map +0 -1
  184. package/esm/cli/authz/authz-type-list.js +0 -26
  185. package/esm/cli/authz/authz-type-list.js.map +0 -1
  186. package/esm/cli/authz/authz-type.js +0 -10
  187. package/esm/cli/authz/authz-type.js.map +0 -1
  188. package/esm/cli/authz/authz.js +0 -12
  189. package/esm/cli/authz/authz.js.map +0 -1
  190. package/esm/cli/conn/conn-delete.js +0 -14
  191. package/esm/cli/conn/conn-delete.js.map +0 -1
  192. package/esm/cli/conn/conn-describe.js +0 -15
  193. package/esm/cli/conn/conn-describe.js.map +0 -1
  194. package/esm/cli/conn/conn-list.js +0 -15
  195. package/esm/cli/conn/conn-list.js.map +0 -1
  196. package/esm/cli/conn/conn-save.js +0 -107
  197. package/esm/cli/conn/conn-save.js.map +0 -1
  198. package/esm/cli/conn/conn.js +0 -15
  199. package/esm/cli/conn/conn.js.map +0 -1
  200. package/esm/cli/email/email-template-export.js +0 -40
  201. package/esm/cli/email/email-template-export.js.map +0 -1
  202. package/esm/cli/email/email-template-import.js +0 -45
  203. package/esm/cli/email/email-template-import.js.map +0 -1
  204. package/esm/cli/email/email-template-list.js +0 -25
  205. package/esm/cli/email/email-template-list.js.map +0 -1
  206. package/esm/cli/email/email-template.js +0 -8
  207. package/esm/cli/email/email-template.js.map +0 -1
  208. package/esm/cli/email/email.js +0 -11
  209. package/esm/cli/email/email.js.map +0 -1
  210. package/esm/cli/esv/esv-apply.js +0 -62
  211. package/esm/cli/esv/esv-apply.js.map +0 -1
  212. package/esm/cli/esv/esv-secret-create.js +0 -25
  213. package/esm/cli/esv/esv-secret-create.js.map +0 -1
  214. package/esm/cli/esv/esv-secret-delete.js +0 -35
  215. package/esm/cli/esv/esv-secret-delete.js.map +0 -1
  216. package/esm/cli/esv/esv-secret-describe.js +0 -25
  217. package/esm/cli/esv/esv-secret-describe.js.map +0 -1
  218. package/esm/cli/esv/esv-secret-export.js +0 -22
  219. package/esm/cli/esv/esv-secret-export.js.map +0 -1
  220. package/esm/cli/esv/esv-secret-import.js +0 -22
  221. package/esm/cli/esv/esv-secret-import.js.map +0 -1
  222. package/esm/cli/esv/esv-secret-list.js +0 -25
  223. package/esm/cli/esv/esv-secret-list.js.map +0 -1
  224. package/esm/cli/esv/esv-secret-set.js +0 -25
  225. package/esm/cli/esv/esv-secret-set.js.map +0 -1
  226. package/esm/cli/esv/esv-secret-version-activate.js +0 -30
  227. package/esm/cli/esv/esv-secret-version-activate.js.map +0 -1
  228. package/esm/cli/esv/esv-secret-version-create.js +0 -25
  229. package/esm/cli/esv/esv-secret-version-create.js.map +0 -1
  230. package/esm/cli/esv/esv-secret-version-deactivate.js +0 -30
  231. package/esm/cli/esv/esv-secret-version-deactivate.js.map +0 -1
  232. package/esm/cli/esv/esv-secret-version-delete.js +0 -35
  233. package/esm/cli/esv/esv-secret-version-delete.js.map +0 -1
  234. package/esm/cli/esv/esv-secret-version-list.js +0 -25
  235. package/esm/cli/esv/esv-secret-version-list.js.map +0 -1
  236. package/esm/cli/esv/esv-secret-version.js +0 -10
  237. package/esm/cli/esv/esv-secret-version.js.map +0 -1
  238. package/esm/cli/esv/esv-secret.js +0 -16
  239. package/esm/cli/esv/esv-secret.js.map +0 -1
  240. package/esm/cli/esv/esv-variable-create.js +0 -24
  241. package/esm/cli/esv/esv-variable-create.js.map +0 -1
  242. package/esm/cli/esv/esv-variable-delete.js +0 -35
  243. package/esm/cli/esv/esv-variable-delete.js.map +0 -1
  244. package/esm/cli/esv/esv-variable-describe.js +0 -25
  245. package/esm/cli/esv/esv-variable-describe.js.map +0 -1
  246. package/esm/cli/esv/esv-variable-export.js +0 -22
  247. package/esm/cli/esv/esv-variable-export.js.map +0 -1
  248. package/esm/cli/esv/esv-variable-import.js +0 -22
  249. package/esm/cli/esv/esv-variable-import.js.map +0 -1
  250. package/esm/cli/esv/esv-variable-list.js +0 -25
  251. package/esm/cli/esv/esv-variable-list.js.map +0 -1
  252. package/esm/cli/esv/esv-variable-set.js +0 -31
  253. package/esm/cli/esv/esv-variable-set.js.map +0 -1
  254. package/esm/cli/esv/esv-variable.js +0 -15
  255. package/esm/cli/esv/esv-variable.js.map +0 -1
  256. package/esm/cli/esv/esv.js +0 -12
  257. package/esm/cli/esv/esv.js.map +0 -1
  258. package/esm/cli/idm/idm-count.js +0 -25
  259. package/esm/cli/idm/idm-count.js.map +0 -1
  260. package/esm/cli/idm/idm-export.js +0 -42
  261. package/esm/cli/idm/idm-export.js.map +0 -1
  262. package/esm/cli/idm/idm-import.js +0 -45
  263. package/esm/cli/idm/idm-import.js.map +0 -1
  264. package/esm/cli/idm/idm-list.js +0 -29
  265. package/esm/cli/idm/idm-list.js.map +0 -1
  266. package/esm/cli/idm/idm.js +0 -13
  267. package/esm/cli/idm/idm.js.map +0 -1
  268. package/esm/cli/idp/idp-export.js +0 -42
  269. package/esm/cli/idp/idp-export.js.map +0 -1
  270. package/esm/cli/idp/idp-import.js +0 -45
  271. package/esm/cli/idp/idp-import.js.map +0 -1
  272. package/esm/cli/idp/idp-list.js +0 -28
  273. package/esm/cli/idp/idp-list.js.map +0 -1
  274. package/esm/cli/idp/idp.js +0 -12
  275. package/esm/cli/idp/idp.js.map +0 -1
  276. package/esm/cli/info/info.js +0 -54
  277. package/esm/cli/info/info.js.map +0 -1
  278. package/esm/cli/journey/journey-delete.js +0 -34
  279. package/esm/cli/journey/journey-delete.js.map +0 -1
  280. package/esm/cli/journey/journey-describe.js +0 -125
  281. package/esm/cli/journey/journey-describe.js.map +0 -1
  282. package/esm/cli/journey/journey-disable.js +0 -43
  283. package/esm/cli/journey/journey-disable.js.map +0 -1
  284. package/esm/cli/journey/journey-enable.js +0 -43
  285. package/esm/cli/journey/journey-enable.js.map +0 -1
  286. package/esm/cli/journey/journey-export.js +0 -50
  287. package/esm/cli/journey/journey-export.js.map +0 -1
  288. package/esm/cli/journey/journey-import.js +0 -57
  289. package/esm/cli/journey/journey-import.js.map +0 -1
  290. package/esm/cli/journey/journey-list.js +0 -25
  291. package/esm/cli/journey/journey-list.js.map +0 -1
  292. package/esm/cli/journey/journey-prune.js +0 -38
  293. package/esm/cli/journey/journey-prune.js.map +0 -1
  294. package/esm/cli/journey/journey.js +0 -17
  295. package/esm/cli/journey/journey.js.map +0 -1
  296. package/esm/cli/log/log-fetch.js +0 -101
  297. package/esm/cli/log/log-fetch.js.map +0 -1
  298. package/esm/cli/log/log-key-delete.js +0 -35
  299. package/esm/cli/log/log-key-delete.js.map +0 -1
  300. package/esm/cli/log/log-key-describe.js +0 -22
  301. package/esm/cli/log/log-key-describe.js.map +0 -1
  302. package/esm/cli/log/log-key-list.js +0 -26
  303. package/esm/cli/log/log-key-list.js.map +0 -1
  304. package/esm/cli/log/log-key.js +0 -8
  305. package/esm/cli/log/log-key.js.map +0 -1
  306. package/esm/cli/log/log-list.js +0 -59
  307. package/esm/cli/log/log-list.js.map +0 -1
  308. package/esm/cli/log/log-tail.js +0 -56
  309. package/esm/cli/log/log-tail.js.map +0 -1
  310. package/esm/cli/log/log.js +0 -17
  311. package/esm/cli/log/log.js.map +0 -1
  312. package/esm/cli/realm/realm-add-custom-domain.js +0 -25
  313. package/esm/cli/realm/realm-add-custom-domain.js.map +0 -1
  314. package/esm/cli/realm/realm-describe.js +0 -24
  315. package/esm/cli/realm/realm-describe.js.map +0 -1
  316. package/esm/cli/realm/realm-list.js +0 -25
  317. package/esm/cli/realm/realm-list.js.map +0 -1
  318. package/esm/cli/realm/realm-remove-custom-domain.js +0 -27
  319. package/esm/cli/realm/realm-remove-custom-domain.js.map +0 -1
  320. package/esm/cli/realm/realm.js +0 -18
  321. package/esm/cli/realm/realm.js.map +0 -1
  322. package/esm/cli/saml/saml-cot-export.js +0 -43
  323. package/esm/cli/saml/saml-cot-export.js.map +0 -1
  324. package/esm/cli/saml/saml-cot-import.js +0 -49
  325. package/esm/cli/saml/saml-cot-import.js.map +0 -1
  326. package/esm/cli/saml/saml-cot-list.js +0 -26
  327. package/esm/cli/saml/saml-cot-list.js.map +0 -1
  328. package/esm/cli/saml/saml-cot.js +0 -8
  329. package/esm/cli/saml/saml-cot.js.map +0 -1
  330. package/esm/cli/saml/saml-delete.js +0 -38
  331. package/esm/cli/saml/saml-delete.js.map +0 -1
  332. package/esm/cli/saml/saml-describe.js +0 -25
  333. package/esm/cli/saml/saml-describe.js.map +0 -1
  334. package/esm/cli/saml/saml-export.js +0 -40
  335. package/esm/cli/saml/saml-export.js.map +0 -1
  336. package/esm/cli/saml/saml-import.js +0 -45
  337. package/esm/cli/saml/saml-import.js.map +0 -1
  338. package/esm/cli/saml/saml-list.js +0 -25
  339. package/esm/cli/saml/saml-list.js.map +0 -1
  340. package/esm/cli/saml/saml-metadata-export.js +0 -35
  341. package/esm/cli/saml/saml-metadata-export.js.map +0 -1
  342. package/esm/cli/saml/saml-metadata.js +0 -6
  343. package/esm/cli/saml/saml-metadata.js.map +0 -1
  344. package/esm/cli/saml/saml.js +0 -16
  345. package/esm/cli/saml/saml.js.map +0 -1
  346. package/esm/cli/script/script-delete.js +0 -22
  347. package/esm/cli/script/script-delete.js.map +0 -1
  348. package/esm/cli/script/script-describe.js +0 -22
  349. package/esm/cli/script/script-describe.js.map +0 -1
  350. package/esm/cli/script/script-export.js +0 -62
  351. package/esm/cli/script/script-export.js.map +0 -1
  352. package/esm/cli/script/script-import.js +0 -35
  353. package/esm/cli/script/script-import.js.map +0 -1
  354. package/esm/cli/script/script-list.js +0 -26
  355. package/esm/cli/script/script-list.js.map +0 -1
  356. package/esm/cli/script/script.js +0 -18
  357. package/esm/cli/script/script.js.map +0 -1
  358. package/esm/cli/service/service-delete.js +0 -22
  359. package/esm/cli/service/service-delete.js.map +0 -1
  360. package/esm/cli/service/service-export.js +0 -40
  361. package/esm/cli/service/service-export.js.map +0 -1
  362. package/esm/cli/service/service-import.js +0 -47
  363. package/esm/cli/service/service-import.js.map +0 -1
  364. package/esm/cli/service/service-list.js +0 -20
  365. package/esm/cli/service/service-list.js.map +0 -1
  366. package/esm/cli/service/service.js +0 -13
  367. package/esm/cli/service/service.js.map +0 -1
  368. package/esm/cli/theme/theme-delete.e2e.test_.js.map +0 -1
  369. package/esm/cli/theme/theme-delete.js +0 -40
  370. package/esm/cli/theme/theme-delete.js.map +0 -1
  371. package/esm/cli/theme/theme-export.js +0 -45
  372. package/esm/cli/theme/theme-export.js.map +0 -1
  373. package/esm/cli/theme/theme-import.js +0 -50
  374. package/esm/cli/theme/theme-import.js.map +0 -1
  375. package/esm/cli/theme/theme-list.e2e.test_.js.map +0 -1
  376. package/esm/cli/theme/theme-list.js +0 -25
  377. package/esm/cli/theme/theme-list.js.map +0 -1
  378. package/esm/cli/theme/theme.js +0 -13
  379. package/esm/cli/theme/theme.js.map +0 -1
  380. package/esm/help/SampleData.js +0 -7
  381. package/esm/help/SampleData.js.map +0 -1
  382. package/esm/launch.js +0 -15
  383. package/esm/launch.js.map +0 -1
  384. package/esm/loader.js +0 -40
  385. package/esm/loader.js.map +0 -1
  386. package/esm/ops/AdminFederationOps.js +0 -216
  387. package/esm/ops/AdminFederationOps.js.map +0 -1
  388. package/esm/ops/AgentOps.js +0 -691
  389. package/esm/ops/AgentOps.js.map +0 -1
  390. package/esm/ops/CirclesOfTrustOps.js +0 -260
  391. package/esm/ops/CirclesOfTrustOps.js.map +0 -1
  392. package/esm/ops/ConnectionProfileOps.js +0 -125
  393. package/esm/ops/ConnectionProfileOps.js.map +0 -1
  394. package/esm/ops/EmailTemplateOps.js +0 -361
  395. package/esm/ops/EmailTemplateOps.js.map +0 -1
  396. package/esm/ops/IdmOps.js +0 -360
  397. package/esm/ops/IdmOps.js.map +0 -1
  398. package/esm/ops/IdpOps.js +0 -212
  399. package/esm/ops/IdpOps.js.map +0 -1
  400. package/esm/ops/JourneyOps.js +0 -669
  401. package/esm/ops/JourneyOps.js.map +0 -1
  402. package/esm/ops/LogOps.js +0 -149
  403. package/esm/ops/LogOps.js.map +0 -1
  404. package/esm/ops/NodeOps.js +0 -89
  405. package/esm/ops/NodeOps.js.map +0 -1
  406. package/esm/ops/OAuth2ClientOps.js +0 -271
  407. package/esm/ops/OAuth2ClientOps.js.map +0 -1
  408. package/esm/ops/OrganizationOps.js +0 -34
  409. package/esm/ops/OrganizationOps.js.map +0 -1
  410. package/esm/ops/PolicyOps.js +0 -493
  411. package/esm/ops/PolicyOps.js.map +0 -1
  412. package/esm/ops/PolicySetOps.js +0 -379
  413. package/esm/ops/PolicySetOps.js.map +0 -1
  414. package/esm/ops/RealmOps.js +0 -116
  415. package/esm/ops/RealmOps.js.map +0 -1
  416. package/esm/ops/ResourceTypeOps.js +0 -452
  417. package/esm/ops/ResourceTypeOps.js.map +0 -1
  418. package/esm/ops/Saml2Ops.js +0 -293
  419. package/esm/ops/Saml2Ops.js.map +0 -1
  420. package/esm/ops/Saml2Ops.test_.js.map +0 -1
  421. package/esm/ops/ScriptOps.js +0 -383
  422. package/esm/ops/ScriptOps.js.map +0 -1
  423. package/esm/ops/SecretsOps.js +0 -237
  424. package/esm/ops/SecretsOps.js.map +0 -1
  425. package/esm/ops/ServiceOps.js +0 -213
  426. package/esm/ops/ServiceOps.js.map +0 -1
  427. package/esm/ops/ThemeOps.js +0 -361
  428. package/esm/ops/ThemeOps.js.map +0 -1
  429. package/esm/ops/VariablesOps.js +0 -144
  430. package/esm/ops/VariablesOps.js.map +0 -1
  431. package/esm/ops/utils/OpsUtils.js +0 -9
  432. package/esm/ops/utils/OpsUtils.js.map +0 -1
  433. package/esm/ops/utils/Wordwrap.js +0 -5
  434. package/esm/ops/utils/Wordwrap.js.map +0 -1
  435. package/esm/storage/StaticStorage.js +0 -12
  436. package/esm/storage/StaticStorage.js.map +0 -1
  437. package/esm/utils/Config.js +0 -43
  438. package/esm/utils/Config.js.map +0 -1
  439. package/esm/utils/Console.js +0 -537
  440. package/esm/utils/Console.js.map +0 -1
  441. package/esm/utils/ExportImportUtils.js +0 -93
  442. package/esm/utils/ExportImportUtils.js.map +0 -1
  443. package/esm/utils/Version.js +0 -139
  444. package/esm/utils/Version.js.map +0 -1
@@ -1,493 +0,0 @@
1
- import { frodo, state } from '@rockcarver/frodo-lib';
2
- import fs from 'fs';
3
- import { createObjectTable, createProgressBar, debugMessage, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
4
- import { getTypedFilename, saveJsonToFile, titleCase } from '../utils/ExportImportUtils';
5
- const {
6
- getRealmName
7
- } = frodo.helper.utils;
8
- const {
9
- getPolicies,
10
- getPoliciesByPolicySet,
11
- getPolicy,
12
- exportPolicy,
13
- exportPolicies,
14
- exportPoliciesByPolicySet,
15
- importPolicy,
16
- importFirstPolicy,
17
- importPolicies
18
- } = frodo.authz.policy;
19
-
20
- /**
21
- * List policies
22
- * @param {boolean} long list with details
23
- * @returns {Promise<boolean>} true if successful, false otherwise
24
- */
25
- export async function listPolicies(long = false) {
26
- let outcome = false;
27
- try {
28
- const policies = await getPolicies();
29
- policies.sort((a, b) => a._id.localeCompare(b._id));
30
- for (const policy of policies) {
31
- if (!long) {
32
- printMessage(`${policy._id}`, 'data');
33
- }
34
- }
35
- outcome = true;
36
- } catch (err) {
37
- printMessage(`listPolicies ERROR: ${err.message}`, 'error');
38
- printMessage(err, 'error');
39
- }
40
- return outcome;
41
- }
42
-
43
- /**
44
- * List policies by policy set
45
- * @param {string} policySetId policy set id/name
46
- * @param {boolean} long list with details
47
- * @returns {Promise<boolean>} true if successful, false otherwise
48
- */
49
- export async function listPoliciesByPolicySet(policySetId, long = false) {
50
- let outcome = false;
51
- try {
52
- const policies = await getPoliciesByPolicySet(policySetId);
53
- policies.sort((a, b) => a._id.localeCompare(b._id));
54
- for (const policy of policies) {
55
- if (!long) {
56
- printMessage(`${policy._id}`, 'data');
57
- }
58
- }
59
- outcome = true;
60
- } catch (err) {
61
- printMessage(`listPolicies ERROR: ${err.message}`, 'error');
62
- printMessage(err, 'error');
63
- }
64
- return outcome;
65
- }
66
-
67
- /**
68
- * Describe policy
69
- * @param {string} policyId policy id/name
70
- * @param {Object} json JSON output
71
- * @returns {Promise<boolean>} true if successful, false otherwise
72
- */
73
- export async function describePolicy(policyId, json = false) {
74
- let outcome = false;
75
- const policySet = await getPolicy(policyId);
76
- outcome = true;
77
- if (json) {
78
- printMessage(policySet, 'data');
79
- } else {
80
- const table = createObjectTable(policySet);
81
- printMessage(table.toString(), 'data');
82
- }
83
- return outcome;
84
- }
85
-
86
- /**
87
- * Delete policy
88
- * @param {string} policyId policy id/name
89
- * @returns {Promise<boolean>} true if successful, false otherwise
90
- */
91
- export async function deletePolicy(policyId) {
92
- debugMessage(`cli.PolicyOps.deletePolicy: begin`);
93
- showSpinner(`Deleting ${policyId}...`);
94
- let outcome = false;
95
- const errors = [];
96
- try {
97
- debugMessage(`Deleting policy ${policyId}`);
98
- await deletePolicy(policyId);
99
- } catch (error) {
100
- printMessage(`Error deleting policy ${policyId}: ${error}`, 'error');
101
- }
102
- if (errors.length) {
103
- const errorMessages = errors.map(error => error.message).join('\n');
104
- failSpinner(`Error deleting ${policyId}: ${errorMessages}`);
105
- } else {
106
- succeedSpinner(`Deleted ${policyId}.`);
107
- outcome = true;
108
- }
109
- debugMessage(`cli.PolicyOps.deletePolicy: end [outcome=${outcome}]`);
110
- return outcome;
111
- }
112
-
113
- /**
114
- * Delete all policies
115
- * @returns {Promise<boolean>} true if successful, false otherwise
116
- */
117
- export async function deletePolicies() {
118
- debugMessage(`cli.PolicyOps.deletePolicies: begin`);
119
- let outcome = false;
120
- const errors = [];
121
- let policies = [];
122
- try {
123
- showSpinner(`Retrieving all policies...`);
124
- try {
125
- policies = await getPolicies();
126
- succeedSpinner(`Found ${policies.length} policies.`);
127
- } catch (error) {
128
- error.message = `Error retrieving all policies: ${error.message}`;
129
- failSpinner(error.message);
130
- throw error;
131
- }
132
- if (policies.length) createProgressBar(policies.length, `Deleting ${policies.length} policies...`);
133
- for (const policy of policies) {
134
- const policyId = policy._id;
135
- try {
136
- debugMessage(`Deleting policy ${policyId}`);
137
- await deletePolicy(policyId);
138
- updateProgressBar(`Deleted ${policyId}`);
139
- } catch (error) {
140
- error.message = `Error deleting policy ${policyId}: ${error}`;
141
- updateProgressBar(error.message);
142
- errors.push(error);
143
- }
144
- }
145
- } catch (error) {
146
- error.message = `Error deleting policies: ${error}`;
147
- errors.push(error);
148
- } finally {
149
- if (errors.length) {
150
- const errorMessages = errors.map(error => error.message).join('\n');
151
- if (policies.length) stopProgressBar(`Error deleting all policies: ${errorMessages}`);
152
- } else {
153
- if (policies.length) stopProgressBar(`Deleted ${policies.length} policies.`);
154
- outcome = true;
155
- }
156
- }
157
- debugMessage(`cli.PolicyOps.deletePolicies: end [outcome=${outcome}]`);
158
- return outcome;
159
- }
160
-
161
- /**
162
- * Delete all policies in policy set
163
- * @param {string} policySetId policy set id/name
164
- * @returns {Promise<boolean>} true if successful, false otherwise
165
- */
166
- export async function deletePoliciesByPolicySet(policySetId) {
167
- debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: begin`);
168
- let outcome = false;
169
- const errors = [];
170
- let policies = [];
171
- try {
172
- showSpinner(`Retrieving all policies from policy set ${policySetId}...`);
173
- try {
174
- policies = await getPoliciesByPolicySet(policySetId);
175
- succeedSpinner(`Found ${policies.length} policies in policy set ${policySetId}.`);
176
- } catch (error) {
177
- error.message = `Error retrieving all policies from policy set ${policySetId}: ${error.message}`;
178
- failSpinner(error.message);
179
- throw error;
180
- }
181
- if (policies.length) createProgressBar(policies.length, `Deleting ${policies.length} policies from policy set ${policySetId}...`);
182
- for (const policy of policies) {
183
- const policyId = policy._id;
184
- try {
185
- debugMessage(`Deleting policy ${policyId}`);
186
- await deletePolicy(policyId);
187
- updateProgressBar(`Deleted ${policyId}`);
188
- } catch (error) {
189
- error.message = `Error deleting policy ${policyId} from policy set ${policySetId}: ${error}`;
190
- updateProgressBar(error.message);
191
- errors.push(error);
192
- }
193
- }
194
- } catch (error) {
195
- error.message = `Error deleting policies from policy set ${policySetId}: ${error}`;
196
- errors.push(error);
197
- } finally {
198
- if (errors.length) {
199
- const errorMessages = errors.map(error => error.message).join('\n');
200
- if (policies.length) stopProgressBar(`Error deleting all policies from policy set ${policySetId}: ${errorMessages}`);
201
- } else {
202
- if (policies.length) stopProgressBar(`Deleted ${policies.length} policies.`);
203
- outcome = true;
204
- }
205
- }
206
- debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: end [outcome=${outcome}]`);
207
- return outcome;
208
- }
209
-
210
- /**
211
- * Export policy to file
212
- * @param {string} policyId policy id/name
213
- * @param {string} file file name
214
- * @param {ApplicationExportOptions} options export options
215
- * @returns {Promise<boolean>} true if successful, false otherwise
216
- */
217
- export async function exportPolicyToFile(policyId, file, options = {
218
- deps: true,
219
- prereqs: false,
220
- useStringArrays: true
221
- }) {
222
- let outcome = false;
223
- debugMessage(`cli.PolicyOps.exportPolicyToFile: begin`);
224
- showSpinner(`Exporting ${policyId}...`);
225
- try {
226
- let fileName = getTypedFilename(policyId, 'policy.authz');
227
- if (file) {
228
- fileName = file;
229
- }
230
- const exportData = await exportPolicy(policyId, options);
231
- saveJsonToFile(exportData, fileName);
232
- succeedSpinner(`Exported ${policyId} to ${fileName}.`);
233
- outcome = true;
234
- } catch (error) {
235
- failSpinner(`Error exporting ${policyId}: ${error.message}`);
236
- }
237
- debugMessage(`cli.PolicyOps.exportPolicyToFile: end`);
238
- return outcome;
239
- }
240
-
241
- /**
242
- * Export policies to file
243
- * @param {string} file file name
244
- * @param {PolicyExportOptions} options export options
245
- * @returns {Promise<boolean>} true if successful, false otherwise
246
- */
247
- export async function exportPoliciesToFile(file, options = {
248
- deps: true,
249
- prereqs: false,
250
- useStringArrays: true
251
- }) {
252
- let outcome = false;
253
- debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);
254
- showSpinner(`Exporting all policy sets...`);
255
- try {
256
- let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm()))}Policies`, 'policy.authz');
257
- if (file) {
258
- fileName = file;
259
- }
260
- const exportData = await exportPolicies(options);
261
- saveJsonToFile(exportData, fileName);
262
- succeedSpinner(`Exported all policy sets to ${fileName}.`);
263
- outcome = true;
264
- } catch (error) {
265
- failSpinner(`Error exporting policy sets: ${error.message}`);
266
- }
267
- debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);
268
- return outcome;
269
- }
270
-
271
- /**
272
- * Export policies to file
273
- * @param {string} policySetId policy set id/name
274
- * @param {string} file file name
275
- * @param {PolicyExportOptions} options export options
276
- * @returns {Promise<boolean>} true if successful, false otherwise
277
- */
278
- export async function exportPoliciesByPolicySetToFile(policySetId, file, options = {
279
- deps: true,
280
- prereqs: false,
281
- useStringArrays: true
282
- }) {
283
- let outcome = false;
284
- debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);
285
- showSpinner(`Exporting all policy sets...`);
286
- try {
287
- let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm())) + titleCase(policySetId)}Policies`, 'policy.authz');
288
- if (file) {
289
- fileName = file;
290
- }
291
- const exportData = await exportPoliciesByPolicySet(policySetId, options);
292
- saveJsonToFile(exportData, fileName);
293
- succeedSpinner(`Exported all policy sets to ${fileName}.`);
294
- outcome = true;
295
- } catch (error) {
296
- failSpinner(`Error exporting policy sets: ${error.message}`);
297
- }
298
- debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);
299
- return outcome;
300
- }
301
-
302
- /**
303
- * Export all policies to separate files
304
- * @param {PolicyExportOptions} options export options
305
- * @returns {Promise<boolean>} true if successful, false otherwise
306
- */
307
- export async function exportPoliciesToFiles(options = {
308
- deps: true,
309
- prereqs: false,
310
- useStringArrays: true
311
- }) {
312
- debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);
313
- const errors = [];
314
- try {
315
- const policies = await getPolicies();
316
- createProgressBar(policies.length, 'Exporting policy sets...');
317
- for (const policy of policies) {
318
- const file = getTypedFilename(policy._id, 'policy.authz');
319
- try {
320
- const exportData = await exportPolicy(policy._id, options);
321
- saveJsonToFile(exportData, file);
322
- updateProgressBar(`Exported ${policy._id}.`);
323
- } catch (error) {
324
- errors.push(error);
325
- updateProgressBar(`Error exporting ${policy._id}.`);
326
- }
327
- }
328
- stopProgressBar(`Export complete.`);
329
- } catch (error) {
330
- errors.push(error);
331
- stopProgressBar(`Error exporting policy sets to files`);
332
- }
333
- debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);
334
- return 0 === errors.length;
335
- }
336
-
337
- /**
338
- * Export all policies to separate files
339
- * @param {PolicyExportOptions} options export options
340
- * @returns {Promise<boolean>} true if successful, false otherwise
341
- */
342
- export async function exportPoliciesByPolicySetToFiles(policySetId, options = {
343
- deps: true,
344
- prereqs: false,
345
- useStringArrays: true
346
- }) {
347
- debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);
348
- const errors = [];
349
- try {
350
- const policies = await getPoliciesByPolicySet(policySetId);
351
- createProgressBar(policies.length, `Exporting policies in policy set ${policySetId}...`);
352
- for (const policy of policies) {
353
- const file = getTypedFilename(policy._id, 'policy.authz');
354
- try {
355
- const exportData = await exportPolicy(policy._id, options);
356
- saveJsonToFile(exportData, file);
357
- updateProgressBar(`Exported ${policy._id}.`);
358
- } catch (error) {
359
- errors.push(error);
360
- updateProgressBar(`Error exporting ${policy._id}.`);
361
- }
362
- }
363
- stopProgressBar(`Export complete.`);
364
- } catch (error) {
365
- errors.push(error);
366
- stopProgressBar(`Error exporting policy sets to files`);
367
- }
368
- debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);
369
- return 0 === errors.length;
370
- }
371
-
372
- /**
373
- * Import policy from file
374
- * @param {string} policyId policy id/name
375
- * @param {string} file file name
376
- * @param {PolicyImportOptions} options import options
377
- * @returns {Promise<boolean>} true if successful, false otherwise
378
- */
379
- export async function importPolicyFromFile(policyId, file, options = {
380
- deps: true,
381
- prereqs: false
382
- }) {
383
- let outcome = false;
384
- debugMessage(`cli.PolicyOps.importPolicyFromFile: begin`);
385
- showSpinner(`Importing ${policyId}...`);
386
- try {
387
- const data = fs.readFileSync(file, 'utf8');
388
- const fileData = JSON.parse(data);
389
- await importPolicy(policyId, fileData, options);
390
- outcome = true;
391
- succeedSpinner(`Imported ${policyId}.`);
392
- } catch (error) {
393
- failSpinner(`Error importing ${policyId}.`);
394
- printMessage(error, 'error');
395
- }
396
- debugMessage(`cli.PolicyOps.importPolicyFromFile: end`);
397
- return outcome;
398
- }
399
-
400
- /**
401
- * Import first policy from file
402
- * @param {string} file file name
403
- * @param {PolicyImportOptions} options import options
404
- * @returns {Promise<boolean>} true if successful, false otherwise
405
- */
406
- export async function importFirstPolicyFromFile(file, options = {
407
- deps: true,
408
- prereqs: false
409
- }) {
410
- let outcome = false;
411
- debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: begin`);
412
- showSpinner(`Importing ${file}...`);
413
- try {
414
- const data = fs.readFileSync(file, 'utf8');
415
- const fileData = JSON.parse(data);
416
- await importFirstPolicy(fileData, options);
417
- outcome = true;
418
- succeedSpinner(`Imported ${file}.`);
419
- } catch (error) {
420
- failSpinner(`Error importing ${file}.`);
421
- printMessage(error, 'error');
422
- }
423
- debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: end`);
424
- return outcome;
425
- }
426
-
427
- /**
428
- * Import policies from file
429
- * @param {string} file file name
430
- * @param {PolicyImportOptions} options import options
431
- * @returns {Promise<boolean>} true if successful, false otherwise
432
- */
433
- export async function importPoliciesFromFile(file, options = {
434
- deps: true,
435
- prereqs: false
436
- }) {
437
- let outcome = false;
438
- debugMessage(`cli.PolicyOps.importPoliciesFromFile: begin`);
439
- showSpinner(`Importing ${file}...`);
440
- try {
441
- const data = fs.readFileSync(file, 'utf8');
442
- const fileData = JSON.parse(data);
443
- await importPolicies(fileData, options);
444
- outcome = true;
445
- succeedSpinner(`Imported ${file}${options.policySetName ? ' into policy set ' + options.policySetName : '.'}`);
446
- } catch (error) {
447
- failSpinner(`Error importing ${file}${options.policySetName ? ' into policy set ' + options.policySetName : '.'}`);
448
- printMessage(error, 'error');
449
- }
450
- debugMessage(`cli.PolicyOps.importPoliciesFromFile: end`);
451
- return outcome;
452
- }
453
-
454
- /**
455
- * Import policies from files
456
- * @param {PolicyImportOptions} options import options
457
- * @returns {Promise<boolean>} true if successful, false otherwise
458
- */
459
- export async function importPoliciesFromFiles(options = {
460
- deps: true,
461
- prereqs: false
462
- }) {
463
- const errors = [];
464
- try {
465
- debugMessage(`cli.PolicyOps.importPoliciesFromFiles: begin`);
466
- const names = fs.readdirSync('.');
467
- const files = names.filter(name => name.toLowerCase().endsWith('.policy.authz.json'));
468
- createProgressBar(files.length, 'Importing policies...');
469
- let total = 0;
470
- for (const file of files) {
471
- try {
472
- const data = fs.readFileSync(file, 'utf8');
473
- const fileData = JSON.parse(data);
474
- const count = Object.keys(fileData.policyset).length;
475
- total += count;
476
- await importPolicies(fileData, options);
477
- updateProgressBar(`Imported ${count} policies from ${file}`);
478
- } catch (error) {
479
- errors.push(error);
480
- updateProgressBar(`Error importing policies from ${file}`);
481
- printMessage(error, 'error');
482
- }
483
- }
484
- stopProgressBar(`Finished importing ${total} policies from ${files.length} files.`);
485
- } catch (error) {
486
- errors.push(error);
487
- stopProgressBar(`Error importing policies from files.`);
488
- printMessage(error, 'error');
489
- }
490
- debugMessage(`cli.PolicyOps.importPoliciesFromFiles: end`);
491
- return 0 === errors.length;
492
- }
493
- //# sourceMappingURL=PolicyOps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PolicyOps.js","names":["frodo","state","fs","createObjectTable","createProgressBar","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","titleCase","getRealmName","helper","utils","getPolicies","getPoliciesByPolicySet","getPolicy","exportPolicy","exportPolicies","exportPoliciesByPolicySet","importPolicy","importFirstPolicy","importPolicies","authz","policy","listPolicies","long","outcome","policies","sort","a","b","_id","localeCompare","err","message","listPoliciesByPolicySet","policySetId","describePolicy","policyId","json","policySet","table","toString","deletePolicy","errors","error","length","errorMessages","map","join","deletePolicies","push","deletePoliciesByPolicySet","exportPolicyToFile","file","options","deps","prereqs","useStringArrays","fileName","exportData","exportPoliciesToFile","getRealm","exportPoliciesByPolicySetToFile","exportPoliciesToFiles","exportPoliciesByPolicySetToFiles","importPolicyFromFile","data","readFileSync","fileData","JSON","parse","importFirstPolicyFromFile","importPoliciesFromFile","policySetName","importPoliciesFromFiles","names","readdirSync","files","filter","name","toLowerCase","endsWith","total","count","Object","keys","policyset"],"sources":["../../src/ops/PolicyOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport type { PolicySkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport {\n createObjectTable,\n createProgressBar,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport type {\n PolicyExportOptions,\n PolicyImportOptions,\n PolicyExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/PolicyOps';\n\nconst { getRealmName } = frodo.helper.utils;\nconst {\n getPolicies,\n getPoliciesByPolicySet,\n getPolicy,\n exportPolicy,\n exportPolicies,\n exportPoliciesByPolicySet,\n importPolicy,\n importFirstPolicy,\n importPolicies,\n} = frodo.authz.policy;\n\n/**\n * List policies\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPolicies(long = false): Promise<boolean> {\n let outcome = false;\n try {\n const policies = await getPolicies();\n policies.sort((a, b) => a._id.localeCompare(b._id));\n for (const policy of policies) {\n if (!long) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listPolicies ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * List policies by policy set\n * @param {string} policySetId policy set id/name\n * @param {boolean} long list with details\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listPoliciesByPolicySet(\n policySetId: string,\n long = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const policies = await getPoliciesByPolicySet(policySetId);\n policies.sort((a, b) => a._id.localeCompare(b._id));\n for (const policy of policies) {\n if (!long) {\n printMessage(`${policy._id}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listPolicies ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * Describe policy\n * @param {string} policyId policy id/name\n * @param {Object} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describePolicy(\n policyId: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n const policySet = await getPolicy(policyId);\n outcome = true;\n if (json) {\n printMessage(policySet, 'data');\n } else {\n const table = createObjectTable(policySet);\n printMessage(table.toString(), 'data');\n }\n return outcome;\n}\n\n/**\n * Delete policy\n * @param {string} policyId policy id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicy(policyId: string): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicy: begin`);\n showSpinner(`Deleting ${policyId}...`);\n let outcome = false;\n const errors = [];\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await deletePolicy(policyId);\n } catch (error) {\n printMessage(`Error deleting policy ${policyId}: ${error}`, 'error');\n }\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n failSpinner(`Error deleting ${policyId}: ${errorMessages}`);\n } else {\n succeedSpinner(`Deleted ${policyId}.`);\n outcome = true;\n }\n debugMessage(`cli.PolicyOps.deletePolicy: end [outcome=${outcome}]`);\n return outcome;\n}\n\n/**\n * Delete all policies\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePolicies(): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePolicies: begin`);\n let outcome = false;\n const errors = [];\n let policies: PolicySkeleton[] = [];\n try {\n showSpinner(`Retrieving all policies...`);\n try {\n policies = await getPolicies();\n succeedSpinner(`Found ${policies.length} policies.`);\n } catch (error) {\n error.message = `Error retrieving all policies: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (policies.length)\n createProgressBar(\n policies.length,\n `Deleting ${policies.length} policies...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await deletePolicy(policyId);\n updateProgressBar(`Deleted ${policyId}`);\n } catch (error) {\n error.message = `Error deleting policy ${policyId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting policies: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (policies.length)\n stopProgressBar(`Error deleting all policies: ${errorMessages}`);\n } else {\n if (policies.length)\n stopProgressBar(`Deleted ${policies.length} policies.`);\n outcome = true;\n }\n }\n debugMessage(`cli.PolicyOps.deletePolicies: end [outcome=${outcome}]`);\n return outcome;\n}\n\n/**\n * Delete all policies in policy set\n * @param {string} policySetId policy set id/name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deletePoliciesByPolicySet(\n policySetId: string\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.deletePoliciesByPolicySet: begin`);\n let outcome = false;\n const errors = [];\n let policies: PolicySkeleton[] = [];\n try {\n showSpinner(`Retrieving all policies from policy set ${policySetId}...`);\n try {\n policies = await getPoliciesByPolicySet(policySetId);\n succeedSpinner(\n `Found ${policies.length} policies in policy set ${policySetId}.`\n );\n } catch (error) {\n error.message = `Error retrieving all policies from policy set ${policySetId}: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (policies.length)\n createProgressBar(\n policies.length,\n `Deleting ${policies.length} policies from policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const policyId = policy._id;\n try {\n debugMessage(`Deleting policy ${policyId}`);\n await deletePolicy(policyId);\n updateProgressBar(`Deleted ${policyId}`);\n } catch (error) {\n error.message = `Error deleting policy ${policyId} from policy set ${policySetId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting policies from policy set ${policySetId}: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (policies.length)\n stopProgressBar(\n `Error deleting all policies from policy set ${policySetId}: ${errorMessages}`\n );\n } else {\n if (policies.length)\n stopProgressBar(`Deleted ${policies.length} policies.`);\n outcome = true;\n }\n }\n debugMessage(\n `cli.PolicyOps.deletePoliciesByPolicySet: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export policy to file\n * @param {string} policyId policy id/name\n * @param {string} file file name\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPolicyToFile(\n policyId: string,\n file: string,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPolicyToFile: begin`);\n showSpinner(`Exporting ${policyId}...`);\n try {\n let fileName = getTypedFilename(policyId, 'policy.authz');\n if (file) {\n fileName = file;\n }\n const exportData = await exportPolicy(policyId, options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${policyId} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${policyId}: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPolicyToFile: end`);\n return outcome;\n}\n\n/**\n * Export policies to file\n * @param {string} file file name\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFile(\n file: string,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policy sets...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await exportPolicies(options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all policy sets to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting policy sets: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return outcome;\n}\n\n/**\n * Export policies to file\n * @param {string} policySetId policy set id/name\n * @param {string} file file name\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFile(\n policySetId: string,\n file: string,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);\n showSpinner(`Exporting all policy sets...`);\n try {\n let fileName = getTypedFilename(\n `all${\n titleCase(getRealmName(state.getRealm())) + titleCase(policySetId)\n }Policies`,\n 'policy.authz'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await exportPoliciesByPolicySet(policySetId, options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all policy sets to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting policy sets: ${error.message}`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFile: end`);\n return outcome;\n}\n\n/**\n * Export all policies to separate files\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesToFiles(\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n try {\n const policies: PolicySkeleton[] = await getPolicies();\n createProgressBar(policies.length, 'Exporting policy sets...');\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface = await exportPolicy(\n policy._id,\n options\n );\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${policy._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting policy sets to files`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Export all policies to separate files\n * @param {PolicyExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportPoliciesByPolicySetToFiles(\n policySetId: string,\n options: PolicyExportOptions = {\n deps: true,\n prereqs: false,\n useStringArrays: true,\n }\n): Promise<boolean> {\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);\n const errors = [];\n try {\n const policies: PolicySkeleton[] = await getPoliciesByPolicySet(\n policySetId\n );\n createProgressBar(\n policies.length,\n `Exporting policies in policy set ${policySetId}...`\n );\n for (const policy of policies) {\n const file = getTypedFilename(policy._id, 'policy.authz');\n try {\n const exportData: PolicyExportInterface = await exportPolicy(\n policy._id,\n options\n );\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${policy._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${policy._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting policy sets to files`);\n }\n debugMessage(`cli.PolicyOps.exportPoliciesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import policy from file\n * @param {string} policyId policy id/name\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPolicyFromFile(\n policyId: string,\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.importPolicyFromFile: begin`);\n showSpinner(`Importing ${policyId}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importPolicy(policyId, fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${policyId}.`);\n } catch (error) {\n failSpinner(`Error importing ${policyId}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPolicyFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first policy from file\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstPolicyFromFile(\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importFirstPolicy(fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicySetOps.importFirstPolicyFromFile: end`);\n return outcome;\n}\n\n/**\n * Import policies from file\n * @param {string} file file name\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPoliciesFromFile(\n file: string,\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.PolicyOps.importPoliciesFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importPolicies(fileData, options);\n outcome = true;\n succeedSpinner(\n `Imported ${file}${\n options.policySetName\n ? ' into policy set ' + options.policySetName\n : '.'\n }`\n );\n } catch (error) {\n failSpinner(\n `Error importing ${file}${\n options.policySetName\n ? ' into policy set ' + options.policySetName\n : '.'\n }`\n );\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPoliciesFromFile: end`);\n return outcome;\n}\n\n/**\n * Import policies from files\n * @param {PolicyImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importPoliciesFromFiles(\n options: PolicyImportOptions = { deps: true, prereqs: false }\n): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.PolicyOps.importPoliciesFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.policy.authz.json')\n );\n createProgressBar(files.length, 'Importing policies...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: PolicyExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.policyset).length;\n total += count;\n await importPolicies(fileData, options);\n updateProgressBar(`Imported ${count} policies from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing policies from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} policies from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing policies from files.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.PolicyOps.importPoliciesFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}