@rockcarver/frodo-cli 2.0.0-3 → 2.0.0-31

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