@rockcarver/frodo-cli 0.24.5 → 2.0.0-2

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 (337) hide show
  1. package/.vscode/launch.json +15 -0
  2. package/CHANGELOG.md +9 -1
  3. package/esm/app.js +2 -5
  4. package/esm/app.js.map +1 -1
  5. package/esm/cli/FrodoCommand.js +10 -10
  6. package/esm/cli/FrodoCommand.js.map +1 -1
  7. package/esm/cli/_template/something-delete.js +2 -5
  8. package/esm/cli/_template/something-delete.js.map +1 -1
  9. package/esm/cli/_template/something-describe.js +2 -5
  10. package/esm/cli/_template/something-describe.js.map +1 -1
  11. package/esm/cli/_template/something-else-delete.js +2 -5
  12. package/esm/cli/_template/something-else-delete.js.map +1 -1
  13. package/esm/cli/_template/something-else-describe.js +2 -5
  14. package/esm/cli/_template/something-else-describe.js.map +1 -1
  15. package/esm/cli/_template/something-else-export.js +2 -5
  16. package/esm/cli/_template/something-else-export.js.map +1 -1
  17. package/esm/cli/_template/something-else-import.js +2 -5
  18. package/esm/cli/_template/something-else-import.js.map +1 -1
  19. package/esm/cli/_template/something-else-list.js +2 -5
  20. package/esm/cli/_template/something-else-list.js.map +1 -1
  21. package/esm/cli/_template/something-export.js +2 -5
  22. package/esm/cli/_template/something-export.js.map +1 -1
  23. package/esm/cli/_template/something-import.js +2 -5
  24. package/esm/cli/_template/something-import.js.map +1 -1
  25. package/esm/cli/_template/something-list.js +2 -5
  26. package/esm/cli/_template/something-list.js.map +1 -1
  27. package/esm/cli/_template/something-other-delete.js +2 -5
  28. package/esm/cli/_template/something-other-delete.js.map +1 -1
  29. package/esm/cli/_template/something-other-describe.js +2 -5
  30. package/esm/cli/_template/something-other-describe.js.map +1 -1
  31. package/esm/cli/_template/something-other-export.js +2 -5
  32. package/esm/cli/_template/something-other-export.js.map +1 -1
  33. package/esm/cli/_template/something-other-import.js +2 -5
  34. package/esm/cli/_template/something-other-import.js.map +1 -1
  35. package/esm/cli/_template/something-other-list.js +2 -5
  36. package/esm/cli/_template/something-other-list.js.map +1 -1
  37. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +3 -9
  38. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
  39. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +4 -11
  40. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  41. package/esm/cli/admin/admin-get-access-token.js +3 -9
  42. package/esm/cli/admin/admin-get-access-token.js.map +1 -1
  43. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +3 -9
  44. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  45. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +3 -9
  46. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
  47. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +3 -9
  48. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
  49. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +3 -9
  50. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
  51. package/esm/cli/admin/admin-list-static-user-mappings.js +3 -9
  52. package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
  53. package/esm/cli/admin/admin-remove-static-user-mapping.js +3 -9
  54. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  55. package/esm/cli/admin/admin-repair-org-model.js +3 -9
  56. package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
  57. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +3 -9
  58. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  59. package/esm/cli/admin/admin-show-generic-extension-attributes.js +3 -9
  60. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
  61. package/esm/cli/agent/agent-delete.js +4 -11
  62. package/esm/cli/agent/agent-delete.js.map +1 -1
  63. package/esm/cli/agent/agent-describe.js +2 -5
  64. package/esm/cli/agent/agent-describe.js.map +1 -1
  65. package/esm/cli/agent/agent-export.js +2 -5
  66. package/esm/cli/agent/agent-export.js.map +1 -1
  67. package/esm/cli/agent/agent-gateway-delete.js +4 -11
  68. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  69. package/esm/cli/agent/agent-gateway-describe.js +2 -5
  70. package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
  71. package/esm/cli/agent/agent-gateway-export.js +2 -5
  72. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  73. package/esm/cli/agent/agent-gateway-import.js +2 -5
  74. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  75. package/esm/cli/agent/agent-gateway-list.js +2 -5
  76. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  77. package/esm/cli/agent/agent-import.js +2 -5
  78. package/esm/cli/agent/agent-import.js.map +1 -1
  79. package/esm/cli/agent/agent-java-delete.js +4 -11
  80. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  81. package/esm/cli/agent/agent-java-describe.js +2 -5
  82. package/esm/cli/agent/agent-java-describe.js.map +1 -1
  83. package/esm/cli/agent/agent-java-export.js +2 -5
  84. package/esm/cli/agent/agent-java-export.js.map +1 -1
  85. package/esm/cli/agent/agent-java-import.js +2 -5
  86. package/esm/cli/agent/agent-java-import.js.map +1 -1
  87. package/esm/cli/agent/agent-java-list.js +2 -5
  88. package/esm/cli/agent/agent-java-list.js.map +1 -1
  89. package/esm/cli/agent/agent-list.js +2 -5
  90. package/esm/cli/agent/agent-list.js.map +1 -1
  91. package/esm/cli/agent/agent-web-delete.js +4 -11
  92. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  93. package/esm/cli/agent/agent-web-describe.js +2 -5
  94. package/esm/cli/agent/agent-web-describe.js.map +1 -1
  95. package/esm/cli/agent/agent-web-export.js +2 -5
  96. package/esm/cli/agent/agent-web-export.js.map +1 -1
  97. package/esm/cli/agent/agent-web-import.js +2 -5
  98. package/esm/cli/agent/agent-web-import.js.map +1 -1
  99. package/esm/cli/agent/agent-web-list.js +2 -5
  100. package/esm/cli/agent/agent-web-list.js.map +1 -1
  101. package/esm/cli/app/app-delete.js +2 -5
  102. package/esm/cli/app/app-delete.js.map +1 -1
  103. package/esm/cli/app/app-describe.js +2 -5
  104. package/esm/cli/app/app-describe.js.map +1 -1
  105. package/esm/cli/app/app-export.js +4 -7
  106. package/esm/cli/app/app-export.js.map +1 -1
  107. package/esm/cli/app/app-import.js +5 -8
  108. package/esm/cli/app/app-import.js.map +1 -1
  109. package/esm/cli/app/app-list.js +3 -6
  110. package/esm/cli/app/app-list.js.map +1 -1
  111. package/esm/cli/authz/authz-policy-delete.js +4 -7
  112. package/esm/cli/authz/authz-policy-delete.js.map +1 -1
  113. package/esm/cli/authz/authz-policy-describe.js +2 -5
  114. package/esm/cli/authz/authz-policy-describe.js.map +1 -1
  115. package/esm/cli/authz/authz-policy-export.js +6 -9
  116. package/esm/cli/authz/authz-policy-export.js.map +1 -1
  117. package/esm/cli/authz/authz-policy-import.js +5 -8
  118. package/esm/cli/authz/authz-policy-import.js.map +1 -1
  119. package/esm/cli/authz/authz-policy-list.js +3 -6
  120. package/esm/cli/authz/authz-policy-list.js.map +1 -1
  121. package/esm/cli/authz/authz-set-delete.js +3 -6
  122. package/esm/cli/authz/authz-set-delete.js.map +1 -1
  123. package/esm/cli/authz/authz-set-describe.js +2 -5
  124. package/esm/cli/authz/authz-set-describe.js.map +1 -1
  125. package/esm/cli/authz/authz-set-export.js +4 -7
  126. package/esm/cli/authz/authz-set-export.js.map +1 -1
  127. package/esm/cli/authz/authz-set-import.js +5 -8
  128. package/esm/cli/authz/authz-set-import.js.map +1 -1
  129. package/esm/cli/authz/authz-set-list.js +2 -5
  130. package/esm/cli/authz/authz-set-list.js.map +1 -1
  131. package/esm/cli/authz/authz-type-delete.js +4 -7
  132. package/esm/cli/authz/authz-type-delete.js.map +1 -1
  133. package/esm/cli/authz/authz-type-describe.js +3 -6
  134. package/esm/cli/authz/authz-type-describe.js.map +1 -1
  135. package/esm/cli/authz/authz-type-export.js +5 -8
  136. package/esm/cli/authz/authz-type-export.js.map +1 -1
  137. package/esm/cli/authz/authz-type-import.js +6 -9
  138. package/esm/cli/authz/authz-type-import.js.map +1 -1
  139. package/esm/cli/authz/authz-type-list.js +2 -5
  140. package/esm/cli/authz/authz-type-list.js.map +1 -1
  141. package/esm/cli/conn/conn-delete.js +2 -5
  142. package/esm/cli/conn/conn-delete.js.map +1 -1
  143. package/esm/cli/conn/conn-describe.js +1 -4
  144. package/esm/cli/conn/conn-describe.js.map +1 -1
  145. package/esm/cli/conn/conn-list.js +1 -4
  146. package/esm/cli/conn/conn-list.js.map +1 -1
  147. package/esm/cli/conn/conn-save.js +6 -16
  148. package/esm/cli/conn/conn-save.js.map +1 -1
  149. package/esm/cli/email/email-template-export.js +4 -7
  150. package/esm/cli/email/email-template-export.js.map +1 -1
  151. package/esm/cli/email/email-template-import.js +5 -8
  152. package/esm/cli/email/email-template-import.js.map +1 -1
  153. package/esm/cli/email/email-template-list.js +2 -5
  154. package/esm/cli/email/email-template-list.js.map +1 -1
  155. package/esm/cli/esv/esv-apply.js +6 -16
  156. package/esm/cli/esv/esv-apply.js.map +1 -1
  157. package/esm/cli/esv/esv-secret-create.js +3 -8
  158. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  159. package/esm/cli/esv/esv-secret-delete.js +6 -12
  160. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  161. package/esm/cli/esv/esv-secret-describe.js +3 -8
  162. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  163. package/esm/cli/esv/esv-secret-export.js +2 -5
  164. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  165. package/esm/cli/esv/esv-secret-import.js +2 -5
  166. package/esm/cli/esv/esv-secret-import.js.map +1 -1
  167. package/esm/cli/esv/esv-secret-list.js +3 -8
  168. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  169. package/esm/cli/esv/esv-secret-set.js +4 -9
  170. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  171. package/esm/cli/esv/esv-secret-version-activate.js +3 -8
  172. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  173. package/esm/cli/esv/esv-secret-version-create.js +4 -9
  174. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  175. package/esm/cli/esv/esv-secret-version-deactivate.js +3 -8
  176. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  177. package/esm/cli/esv/esv-secret-version-delete.js +5 -10
  178. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  179. package/esm/cli/esv/esv-secret-version-list.js +4 -9
  180. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  181. package/esm/cli/esv/esv-variable-create.js +3 -8
  182. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  183. package/esm/cli/esv/esv-variable-delete.js +6 -12
  184. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  185. package/esm/cli/esv/esv-variable-describe.js +3 -8
  186. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  187. package/esm/cli/esv/esv-variable-export.js +2 -5
  188. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  189. package/esm/cli/esv/esv-variable-import.js +2 -5
  190. package/esm/cli/esv/esv-variable-import.js.map +1 -1
  191. package/esm/cli/esv/esv-variable-list.js +3 -8
  192. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  193. package/esm/cli/esv/esv-variable-set.js +5 -11
  194. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  195. package/esm/cli/idm/idm-count.js +2 -5
  196. package/esm/cli/idm/idm-count.js.map +1 -1
  197. package/esm/cli/idm/idm-export.js +4 -7
  198. package/esm/cli/idm/idm-export.js.map +1 -1
  199. package/esm/cli/idm/idm-import.js +5 -8
  200. package/esm/cli/idm/idm-import.js.map +1 -1
  201. package/esm/cli/idm/idm-list.js +2 -5
  202. package/esm/cli/idm/idm-list.js.map +1 -1
  203. package/esm/cli/idp/idp-export.js +2 -5
  204. package/esm/cli/idp/idp-export.js.map +1 -1
  205. package/esm/cli/idp/idp-import.js +5 -8
  206. package/esm/cli/idp/idp-import.js.map +1 -1
  207. package/esm/cli/idp/idp-list.js +2 -5
  208. package/esm/cli/idp/idp-list.js.map +1 -1
  209. package/esm/cli/info/info.js +3 -9
  210. package/esm/cli/info/info.js.map +1 -1
  211. package/esm/cli/journey/journey-delete.js +5 -12
  212. package/esm/cli/journey/journey-delete.js.map +1 -1
  213. package/esm/cli/journey/journey-describe.js +7 -15
  214. package/esm/cli/journey/journey-describe.js.map +1 -1
  215. package/esm/cli/journey/journey-disable.js +3 -9
  216. package/esm/cli/journey/journey-disable.js.map +1 -1
  217. package/esm/cli/journey/journey-enable.js +3 -9
  218. package/esm/cli/journey/journey-enable.js.map +1 -1
  219. package/esm/cli/journey/journey-export.js +4 -7
  220. package/esm/cli/journey/journey-export.js.map +1 -1
  221. package/esm/cli/journey/journey-import.js +5 -8
  222. package/esm/cli/journey/journey-import.js.map +1 -1
  223. package/esm/cli/journey/journey-list.js +2 -5
  224. package/esm/cli/journey/journey-list.js.map +1 -1
  225. package/esm/cli/journey/journey-prune.js +4 -11
  226. package/esm/cli/journey/journey-prune.js.map +1 -1
  227. package/esm/cli/logging/logs-fetch.js +7 -17
  228. package/esm/cli/logging/logs-fetch.js.map +1 -1
  229. package/esm/cli/logging/logs-list.js +5 -15
  230. package/esm/cli/logging/logs-list.js.map +1 -1
  231. package/esm/cli/logging/logs-tail.js +7 -17
  232. package/esm/cli/logging/logs-tail.js.map +1 -1
  233. package/esm/cli/realm/realm-add-custom-domain.js +3 -8
  234. package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
  235. package/esm/cli/realm/realm-describe.js +4 -12
  236. package/esm/cli/realm/realm-describe.js.map +1 -1
  237. package/esm/cli/realm/realm-list.js +3 -8
  238. package/esm/cli/realm/realm-list.js.map +1 -1
  239. package/esm/cli/realm/realm-remove-custom-domain.js +3 -9
  240. package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
  241. package/esm/cli/saml/saml-cot-export.js +11 -15
  242. package/esm/cli/saml/saml-cot-export.js.map +1 -1
  243. package/esm/cli/saml/saml-cot-import.js +15 -19
  244. package/esm/cli/saml/saml-cot-import.js.map +1 -1
  245. package/esm/cli/saml/saml-cot-list.js +5 -9
  246. package/esm/cli/saml/saml-cot-list.js.map +1 -1
  247. package/esm/cli/saml/saml-delete.js +5 -12
  248. package/esm/cli/saml/saml-delete.js.map +1 -1
  249. package/esm/cli/saml/saml-describe.js +2 -5
  250. package/esm/cli/saml/saml-describe.js.map +1 -1
  251. package/esm/cli/saml/saml-export.js +12 -30
  252. package/esm/cli/saml/saml-export.js.map +1 -1
  253. package/esm/cli/saml/saml-import.js +15 -36
  254. package/esm/cli/saml/saml-import.js.map +1 -1
  255. package/esm/cli/saml/saml-list.js +6 -14
  256. package/esm/cli/saml/saml-list.js.map +1 -1
  257. package/esm/cli/saml/saml-metadata-export.js +3 -6
  258. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  259. package/esm/cli/script/script-delete.js +2 -5
  260. package/esm/cli/script/script-delete.js.map +1 -1
  261. package/esm/cli/script/script-describe.js +2 -5
  262. package/esm/cli/script/script-describe.js.map +1 -1
  263. package/esm/cli/script/script-export.js +2 -5
  264. package/esm/cli/script/script-export.js.map +1 -1
  265. package/esm/cli/script/script-import.js +4 -6
  266. package/esm/cli/script/script-import.js.map +1 -1
  267. package/esm/cli/script/script-list.js +4 -6
  268. package/esm/cli/script/script-list.js.map +1 -1
  269. package/esm/cli/service/service-delete.js +3 -6
  270. package/esm/cli/service/service-delete.js.map +1 -1
  271. package/esm/cli/service/service-export.js +4 -7
  272. package/esm/cli/service/service-export.js.map +1 -1
  273. package/esm/cli/service/service-import.js +5 -8
  274. package/esm/cli/service/service-import.js.map +1 -1
  275. package/esm/cli/service/service-list.js +2 -5
  276. package/esm/cli/service/service-list.js.map +1 -1
  277. package/esm/cli/theme/theme-delete.js +4 -7
  278. package/esm/cli/theme/theme-delete.js.map +1 -1
  279. package/esm/cli/theme/theme-export.js +5 -8
  280. package/esm/cli/theme/theme-export.js.map +1 -1
  281. package/esm/cli/theme/theme-import.js +6 -9
  282. package/esm/cli/theme/theme-import.js.map +1 -1
  283. package/esm/cli/theme/theme-list.js +2 -5
  284. package/esm/cli/theme/theme-list.js.map +1 -1
  285. package/esm/launch.js +4 -3
  286. package/esm/launch.js.map +1 -1
  287. package/esm/ops/AgentOps.js +49 -82
  288. package/esm/ops/AgentOps.js.map +1 -1
  289. package/esm/ops/CirclesOfTrustOps.js +217 -2
  290. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  291. package/esm/ops/ConnectionProfileOps.js +97 -8
  292. package/esm/ops/ConnectionProfileOps.js.map +1 -1
  293. package/esm/ops/EmailTemplateOps.js +16 -25
  294. package/esm/ops/EmailTemplateOps.js.map +1 -1
  295. package/esm/ops/IdmOps.js +25 -39
  296. package/esm/ops/IdmOps.js.map +1 -1
  297. package/esm/ops/IdpOps.js +10 -18
  298. package/esm/ops/IdpOps.js.map +1 -1
  299. package/esm/ops/JourneyOps.js +49 -65
  300. package/esm/ops/JourneyOps.js.map +1 -1
  301. package/esm/ops/LogOps.js +9 -17
  302. package/esm/ops/LogOps.js.map +1 -1
  303. package/esm/ops/NodeOps.js +11 -11
  304. package/esm/ops/NodeOps.js.map +1 -1
  305. package/esm/ops/OAuth2ClientOps.js +13 -29
  306. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  307. package/esm/ops/OrganizationOps.js +28 -0
  308. package/esm/ops/OrganizationOps.js.map +1 -0
  309. package/esm/ops/PolicyOps.js +22 -38
  310. package/esm/ops/PolicyOps.js.map +1 -1
  311. package/esm/ops/PolicySetOps.js +19 -37
  312. package/esm/ops/PolicySetOps.js.map +1 -1
  313. package/esm/ops/RealmOps.js +109 -0
  314. package/esm/ops/RealmOps.js.map +1 -0
  315. package/esm/ops/ResourceTypeOps.js +19 -37
  316. package/esm/ops/ResourceTypeOps.js.map +1 -1
  317. package/esm/ops/Saml2Ops.js +30 -251
  318. package/esm/ops/Saml2Ops.js.map +1 -1
  319. package/esm/ops/ScriptOps.js +14 -21
  320. package/esm/ops/ScriptOps.js.map +1 -1
  321. package/esm/ops/SecretsOps.js +223 -0
  322. package/esm/ops/SecretsOps.js.map +1 -0
  323. package/esm/ops/ServiceOps.js +20 -41
  324. package/esm/ops/ServiceOps.js.map +1 -1
  325. package/esm/ops/ThemeOps.js +20 -35
  326. package/esm/ops/ThemeOps.js.map +1 -1
  327. package/esm/ops/VariablesOps.js +133 -0
  328. package/esm/ops/VariablesOps.js.map +1 -0
  329. package/esm/utils/Config.js +3 -6
  330. package/esm/utils/Config.js.map +1 -1
  331. package/esm/utils/Console.js +2 -5
  332. package/esm/utils/Console.js.map +1 -1
  333. package/esm/utils/ExportImportUtils.js +4 -6
  334. package/esm/utils/ExportImportUtils.js.map +1 -1
  335. package/esm/utils/Version.js +3 -3
  336. package/esm/utils/Version.js.map +1 -1
  337. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"OAuth2ClientOps.js","names":["fs","OAuth2Client","ExportImportUtils","Utils","state","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","saveJsonToFile","getTypedFilename","titleCase","getOAuth2Clients","exportOAuth2Client","exportOAuth2Clients","importOAuth2Client","importFirstOAuth2Client","importOAuth2Clients","getRealmName","listOAuth2Clients","long","clients","sort","a","b","_id","localeCompare","table","grantTypesMap","authorization_code","client_credentials","refresh_token","password","implicit","forEach","client","push","coreOAuth2ClientConfig","status","brightRed","clientType","advancedOAuth2ClientConfig","grantTypes","map","type","join","scopes","redirectionUris","toString","error","exportOAuth2ClientToFile","clientId","file","options","useStringArrays","deps","outcome","fileName","exportData","message","exportOAuth2ClientsToFile","getRealm","exportOAuth2ClientsToFiles","errors","length","importOAuth2ClientFromFile","data","readFileSync","fileData","JSON","parse","importFirstOAuth2ClientFromFile","importOAuth2ClientsFromFile","applicationData","importOAuth2ClientsFromFiles","names","readdirSync","files","filter","name","toLowerCase","endsWith","total","count","Object","keys","application"],"sources":["ops/OAuth2ClientOps.ts"],"sourcesContent":["import fs from 'fs';\nimport {\n OAuth2Client,\n ExportImportUtils,\n Utils,\n state,\n} from '@rockcarver/frodo-lib';\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport { saveJsonToFile } from '../utils/ExportImportUtils';\nimport {\n OAuth2ClientExportInterface,\n OAuth2ClientExportOptions,\n OAuth2ClientImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/OAuth2ClientOps';\n\nconst { getTypedFilename, titleCase } = ExportImportUtils;\nconst {\n getOAuth2Clients,\n exportOAuth2Client,\n exportOAuth2Clients,\n importOAuth2Client,\n importFirstOAuth2Client,\n importOAuth2Clients,\n} = OAuth2Client;\nconst { getRealmName } = Utils;\n\n/**\n * List OAuth2 clients\n */\nexport async function listOAuth2Clients(long = false) {\n try {\n const clients = await getOAuth2Clients();\n clients.sort((a, b) => a._id.localeCompare(b._id));\n if (long) {\n const table = createTable([\n 'Client Id',\n 'Status',\n 'Client Type',\n 'Grant Types',\n 'Scopes',\n 'Redirect URIs',\n // 'Description',\n ]);\n const grantTypesMap = {\n authorization_code: 'Authz Code',\n client_credentials: 'Client Creds',\n refresh_token: 'Refresh Token',\n password: 'ROPC',\n 'urn:ietf:params:oauth:grant-type:uma-ticket': 'UMA',\n implicit: 'Implicit',\n 'urn:ietf:params:oauth:grant-type:device_code': 'Device Code',\n 'urn:ietf:params:oauth:grant-type:saml2-bearer': 'SAML2 Bearer',\n 'urn:openid:params:grant-type:ciba': 'CIBA',\n 'urn:ietf:params:oauth:grant-type:token-exchange': 'Token Exchange',\n 'urn:ietf:params:oauth:grant-type:jwt-bearer': 'JWT Bearer',\n };\n clients.forEach((client) => {\n table.push([\n client._id,\n client.coreOAuth2ClientConfig.status === 'Active'\n ? 'Active'['brightGreen']\n : client.coreOAuth2ClientConfig.status.brightRed,\n client.coreOAuth2ClientConfig.clientType,\n client.advancedOAuth2ClientConfig.grantTypes\n .map((type) => grantTypesMap[type])\n .join('\\n'),\n client.coreOAuth2ClientConfig.scopes.join('\\n'),\n client.coreOAuth2ClientConfig.redirectionUris.join('\\n'),\n // wordwrap(client.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n clients.forEach((client) => {\n printMessage(`${client._id}`, 'data');\n });\n }\n } catch (error) {\n printMessage(`Error listing applications - ${error}`, 'error');\n }\n}\n\n/**\n * Export OAuth2 client to file\n * @param {string} clientId client id\n * @param {string} file file name\n * @param {OAuth2ClientExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportOAuth2ClientToFile(\n clientId: string,\n file: string,\n options: OAuth2ClientExportOptions = { useStringArrays: true, deps: true }\n) {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientToFile: begin`);\n showSpinner(`Exporting ${clientId}...`);\n try {\n let fileName = getTypedFilename(clientId, 'oauth2.app');\n if (file) {\n fileName = file;\n }\n const exportData = await exportOAuth2Client(clientId, options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${clientId} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${clientId}: ${error.message}`);\n }\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientToFile: end`);\n return outcome;\n}\n\n/**\n * Export all OAuth2 clients to file\n * @param {string} file file name\n * @param {OAuth2ClientExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportOAuth2ClientsToFile(\n file: string,\n options: OAuth2ClientExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientsToFile: begin`);\n showSpinner(`Exporting all clients...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}Applications`,\n 'oauth2.app'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await exportOAuth2Clients(options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all clients to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting all clients`);\n printMessage(`${error.message}`, 'error');\n }\n debugMessage(\n `cli.OAuth2ClientOps.exportOAuth2ClientsToFile: end [${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export all OAuth2 clients to separate files\n * @param {OAuth2ClientExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportOAuth2ClientsToFiles(\n options: OAuth2ClientExportOptions = { useStringArrays: true, deps: true }\n) {\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientsToFiles: begin`);\n const errors = [];\n try {\n const clients = await getOAuth2Clients();\n createProgressBar(clients.length, 'Exporting clients...');\n for (const client of clients) {\n const file = getTypedFilename(client._id, 'oauth2.app');\n try {\n const exportData: OAuth2ClientExportInterface =\n await exportOAuth2Client(client._id, options);\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${client._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${client._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting client(s) to file(s)`);\n }\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientsToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import first OAuth2 client from file\n * @param {string} clientId client id\n * @param {string} file file name\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importOAuth2ClientFromFile(\n clientId: string,\n file: string,\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientFromFile: begin`);\n showSpinner(`Importing ${clientId}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importOAuth2Client(clientId, fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${clientId}.`);\n } catch (error) {\n failSpinner(`Error importing ${clientId}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first OAuth2 client from file\n * @param {string} file file name\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstOAuth2ClientFromFile(\n file: string,\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.importFirstOAuth2ClientFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await importFirstOAuth2Client(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.OAuth2ClientOps.importFirstOAuth2ClientFromFile: end`);\n return outcome;\n}\n\n/**\n * Import OAuth2 clients from file\n * @param {string} file file name\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importOAuth2ClientsFromFile(\n file: string,\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const applicationData = JSON.parse(data);\n await importOAuth2Clients(applicationData, options);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFile: end`);\n return outcome;\n}\n\n/**\n * Import OAuth2 clients from files\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importOAuth2ClientsFromFiles(\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.oauth2.app.json')\n );\n createProgressBar(files.length, 'Importing clients...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: OAuth2ClientExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.application).length;\n total += count;\n await importOAuth2Clients(fileData, options);\n updateProgressBar(`Imported ${count} client(s) from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing client(s) from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} client(s) from ${files.length} file(s).`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing client(s) from file(s).`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"OAuth2ClientOps.js","names":["frodo","state","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","saveJsonToFile","listOAuth2Clients","long","clients","oauth2oidc","client","getOAuth2Clients","sort","a","b","_id","localeCompare","table","grantTypesMap","authorization_code","client_credentials","refresh_token","password","implicit","forEach","push","coreOAuth2ClientConfig","status","brightRed","clientType","advancedOAuth2ClientConfig","grantTypes","map","type","join","scopes","redirectionUris","toString","error","exportOAuth2ClientToFile","clientId","file","options","useStringArrays","deps","outcome","fileName","utils","impex","getTypedFilename","exportData","exportOAuth2Client","message","exportOAuth2ClientsToFile","titleCase","helper","getRealmName","getRealm","exportOAuth2Clients","exportOAuth2ClientsToFiles","errors","length","importOAuth2ClientFromFile","data","readFileSync","fileData","JSON","parse","importOAuth2Client","importFirstOAuth2ClientFromFile","importFirstOAuth2Client","importOAuth2ClientsFromFile","applicationData","importOAuth2Clients","importOAuth2ClientsFromFiles","names","readdirSync","files","filter","name","toLowerCase","endsWith","total","count","Object","keys","application"],"sources":["ops/OAuth2ClientOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport { saveJsonToFile } from '../utils/ExportImportUtils';\nimport type {\n OAuth2ClientExportInterface,\n OAuth2ClientExportOptions,\n OAuth2ClientImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/OAuth2ClientOps';\n\n/**\n * List OAuth2 clients\n */\nexport async function listOAuth2Clients(long = false) {\n try {\n const clients = await frodo.oauth2oidc.client.getOAuth2Clients();\n clients.sort((a, b) => a._id.localeCompare(b._id));\n if (long) {\n const table = createTable([\n 'Client Id',\n 'Status',\n 'Client Type',\n 'Grant Types',\n 'Scopes',\n 'Redirect URIs',\n // 'Description',\n ]);\n const grantTypesMap = {\n authorization_code: 'Authz Code',\n client_credentials: 'Client Creds',\n refresh_token: 'Refresh Token',\n password: 'ROPC',\n 'urn:ietf:params:oauth:grant-type:uma-ticket': 'UMA',\n implicit: 'Implicit',\n 'urn:ietf:params:oauth:grant-type:device_code': 'Device Code',\n 'urn:ietf:params:oauth:grant-type:saml2-bearer': 'SAML2 Bearer',\n 'urn:openid:params:grant-type:ciba': 'CIBA',\n 'urn:ietf:params:oauth:grant-type:token-exchange': 'Token Exchange',\n 'urn:ietf:params:oauth:grant-type:jwt-bearer': 'JWT Bearer',\n };\n clients.forEach((client) => {\n table.push([\n client._id,\n client.coreOAuth2ClientConfig.status === 'Active'\n ? 'Active'['brightGreen']\n : client.coreOAuth2ClientConfig.status.brightRed,\n client.coreOAuth2ClientConfig.clientType,\n client.advancedOAuth2ClientConfig.grantTypes\n .map((type) => grantTypesMap[type])\n .join('\\n'),\n client.coreOAuth2ClientConfig.scopes.join('\\n'),\n client.coreOAuth2ClientConfig.redirectionUris.join('\\n'),\n // wordwrap(client.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n clients.forEach((client) => {\n printMessage(`${client._id}`, 'data');\n });\n }\n } catch (error) {\n printMessage(`Error listing applications - ${error}`, 'error');\n }\n}\n\n/**\n * Export OAuth2 client to file\n * @param {string} clientId client id\n * @param {string} file file name\n * @param {OAuth2ClientExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportOAuth2ClientToFile(\n clientId: string,\n file: string,\n options: OAuth2ClientExportOptions = { useStringArrays: true, deps: true }\n) {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientToFile: begin`);\n showSpinner(`Exporting ${clientId}...`);\n try {\n let fileName = frodo.utils.impex.getTypedFilename(clientId, 'oauth2.app');\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.oauth2oidc.client.exportOAuth2Client(\n clientId,\n options\n );\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${clientId} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${clientId}: ${error.message}`);\n }\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientToFile: end`);\n return outcome;\n}\n\n/**\n * Export all OAuth2 clients to file\n * @param {string} file file name\n * @param {OAuth2ClientExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportOAuth2ClientsToFile(\n file: string,\n options: OAuth2ClientExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientsToFile: begin`);\n showSpinner(`Exporting all clients...`);\n try {\n let fileName = frodo.utils.impex.getTypedFilename(\n `all${frodo.utils.impex.titleCase(\n frodo.helper.utils.getRealmName(state.getRealm())\n )}Applications`,\n 'oauth2.app'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.oauth2oidc.client.exportOAuth2Clients(\n options\n );\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all clients to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting all clients`);\n printMessage(`${error.message}`, 'error');\n }\n debugMessage(\n `cli.OAuth2ClientOps.exportOAuth2ClientsToFile: end [${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export all OAuth2 clients to separate files\n * @param {OAuth2ClientExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportOAuth2ClientsToFiles(\n options: OAuth2ClientExportOptions = { useStringArrays: true, deps: true }\n) {\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientsToFiles: begin`);\n const errors = [];\n try {\n const clients = await frodo.oauth2oidc.client.getOAuth2Clients();\n createProgressBar(clients.length, 'Exporting clients...');\n for (const client of clients) {\n const file = frodo.utils.impex.getTypedFilename(client._id, 'oauth2.app');\n try {\n const exportData: OAuth2ClientExportInterface =\n await frodo.oauth2oidc.client.exportOAuth2Client(client._id, options);\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${client._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${client._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting client(s) to file(s)`);\n }\n debugMessage(`cli.OAuth2ClientOps.exportOAuth2ClientsToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import first OAuth2 client from file\n * @param {string} clientId client id\n * @param {string} file file name\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importOAuth2ClientFromFile(\n clientId: string,\n file: string,\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientFromFile: begin`);\n showSpinner(`Importing ${clientId}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.oauth2oidc.client.importOAuth2Client(\n clientId,\n fileData,\n options\n );\n outcome = true;\n succeedSpinner(`Imported ${clientId}.`);\n } catch (error) {\n failSpinner(`Error importing ${clientId}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first OAuth2 client from file\n * @param {string} file file name\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstOAuth2ClientFromFile(\n file: string,\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.importFirstOAuth2ClientFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.oauth2oidc.client.importFirstOAuth2Client(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.OAuth2ClientOps.importFirstOAuth2ClientFromFile: end`);\n return outcome;\n}\n\n/**\n * Import OAuth2 clients from file\n * @param {string} file file name\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importOAuth2ClientsFromFile(\n file: string,\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const applicationData = JSON.parse(data);\n await frodo.oauth2oidc.client.importOAuth2Clients(applicationData, options);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFile: end`);\n return outcome;\n}\n\n/**\n * Import OAuth2 clients from files\n * @param {OAuth2ClientImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importOAuth2ClientsFromFiles(\n options: OAuth2ClientImportOptions = { deps: true }\n): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.oauth2.app.json')\n );\n createProgressBar(files.length, 'Importing clients...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: OAuth2ClientExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.application).length;\n total += count;\n await frodo.oauth2oidc.client.importOAuth2Clients(fileData, options);\n updateProgressBar(`Imported ${count} client(s) from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing client(s) from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} client(s) from ${files.length} file(s).`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing client(s) from file(s).`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.OAuth2ClientOps.importOAuth2ClientsFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { frodo } from '@rockcarver/frodo-lib';
2
+ import { printMessage } from '../utils/Console';
3
+
4
+ // unfinished work
5
+ export async function listOrganizationsTopDown() {
6
+ const orgs = [];
7
+ let result = {
8
+ result: [],
9
+ resultCount: 0,
10
+ pagedResultsCookie: null,
11
+ totalPagedResultsPolicy: 'NONE',
12
+ totalPagedResults: -1,
13
+ remainingPagedResults: -1
14
+ };
15
+ do {
16
+ try {
17
+ // eslint-disable-next-line no-await-in-loop
18
+ result = await frodo.idm.config.queryAllManagedObjectsByType(frodo.idm.organization.getRealmManagedOrganization(), ['name', 'parent/*/name', 'children/*/name'], result.pagedResultsCookie);
19
+ } catch (queryAllManagedObjectsByTypeError) {
20
+ printMessage(queryAllManagedObjectsByTypeError, 'error');
21
+ printMessage(`Error querying ${frodo.idm.organization.getRealmManagedOrganization()} objects: ${queryAllManagedObjectsByTypeError}`, 'error');
22
+ }
23
+ orgs.concat(result.result);
24
+ printMessage('.', 'text', false);
25
+ } while (result.pagedResultsCookie);
26
+ return orgs;
27
+ }
28
+ //# sourceMappingURL=OrganizationOps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrganizationOps.js","names":["frodo","printMessage","listOrganizationsTopDown","orgs","result","resultCount","pagedResultsCookie","totalPagedResultsPolicy","totalPagedResults","remainingPagedResults","idm","config","queryAllManagedObjectsByType","organization","getRealmManagedOrganization","queryAllManagedObjectsByTypeError","concat"],"sources":["ops/OrganizationOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { printMessage } from '../utils/Console';\n\n// unfinished work\nexport async function listOrganizationsTopDown() {\n const orgs = [];\n let result = {\n result: [],\n resultCount: 0,\n pagedResultsCookie: null,\n totalPagedResultsPolicy: 'NONE',\n totalPagedResults: -1,\n remainingPagedResults: -1,\n };\n do {\n try {\n // eslint-disable-next-line no-await-in-loop\n result = await frodo.idm.config.queryAllManagedObjectsByType(\n frodo.idm.organization.getRealmManagedOrganization(),\n ['name', 'parent/*/name', 'children/*/name'],\n result.pagedResultsCookie\n );\n } catch (queryAllManagedObjectsByTypeError) {\n printMessage(queryAllManagedObjectsByTypeError, 'error');\n printMessage(\n `Error querying ${frodo.idm.organization.getRealmManagedOrganization()} objects: ${queryAllManagedObjectsByTypeError}`,\n 'error'\n );\n }\n orgs.concat(result.result);\n printMessage('.', 'text', false);\n } while (result.pagedResultsCookie);\n return orgs;\n}\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,YAAY,QAAQ,kBAAkB;;AAE/C;AACA,OAAO,eAAeC,wBAAwBA,CAAA,EAAG;EAC/C,MAAMC,IAAI,GAAG,EAAE;EACf,IAAIC,MAAM,GAAG;IACXA,MAAM,EAAE,EAAE;IACVC,WAAW,EAAE,CAAC;IACdC,kBAAkB,EAAE,IAAI;IACxBC,uBAAuB,EAAE,MAAM;IAC/BC,iBAAiB,EAAE,CAAC,CAAC;IACrBC,qBAAqB,EAAE,CAAC;EAC1B,CAAC;EACD,GAAG;IACD,IAAI;MACF;MACAL,MAAM,GAAG,MAAMJ,KAAK,CAACU,GAAG,CAACC,MAAM,CAACC,4BAA4B,CAC1DZ,KAAK,CAACU,GAAG,CAACG,YAAY,CAACC,2BAA2B,CAAC,CAAC,EACpD,CAAC,MAAM,EAAE,eAAe,EAAE,iBAAiB,CAAC,EAC5CV,MAAM,CAACE,kBACT,CAAC;IACH,CAAC,CAAC,OAAOS,iCAAiC,EAAE;MAC1Cd,YAAY,CAACc,iCAAiC,EAAE,OAAO,CAAC;MACxDd,YAAY,CACT,kBAAiBD,KAAK,CAACU,GAAG,CAACG,YAAY,CAACC,2BAA2B,CAAC,CAAE,aAAYC,iCAAkC,EAAC,EACtH,OACF,CAAC;IACH;IACAZ,IAAI,CAACa,MAAM,CAACZ,MAAM,CAACA,MAAM,CAAC;IAC1BH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC;EAClC,CAAC,QAAQG,MAAM,CAACE,kBAAkB;EAClC,OAAOH,IAAI;AACb"}
@@ -1,23 +1,7 @@
1
+ import { frodo, state } from '@rockcarver/frodo-lib';
1
2
  import fs from 'fs';
2
- import { Policy, Utils, state } from '@rockcarver/frodo-lib';
3
3
  import { createObjectTable, createProgressBar, debugMessage, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
4
4
  import { getTypedFilename, saveJsonToFile, titleCase } from '../utils/ExportImportUtils';
5
- const {
6
- deletePolicy: _deletePolicy,
7
- getPolicy,
8
- getPolicies,
9
- getPoliciesByPolicySet,
10
- exportPolicy,
11
- exportPolicies,
12
- exportPoliciesByPolicySet,
13
- importPolicy,
14
- importFirstPolicy,
15
- importPolicies
16
- } = Policy;
17
- const {
18
- getRealmName
19
- } = Utils;
20
-
21
5
  /**
22
6
  * List policies
23
7
  * @param {boolean} long list with details
@@ -26,7 +10,7 @@ const {
26
10
  export async function listPolicies(long = false) {
27
11
  let outcome = false;
28
12
  try {
29
- const policies = await getPolicies();
13
+ const policies = await frodo.authz.policy.getPolicies();
30
14
  policies.sort((a, b) => a._id.localeCompare(b._id));
31
15
  for (const policy of policies) {
32
16
  if (!long) {
@@ -50,7 +34,7 @@ export async function listPolicies(long = false) {
50
34
  export async function listPoliciesByPolicySet(policySetId, long = false) {
51
35
  let outcome = false;
52
36
  try {
53
- const policies = await getPoliciesByPolicySet(policySetId);
37
+ const policies = await frodo.authz.policy.getPoliciesByPolicySet(policySetId);
54
38
  policies.sort((a, b) => a._id.localeCompare(b._id));
55
39
  for (const policy of policies) {
56
40
  if (!long) {
@@ -73,7 +57,7 @@ export async function listPoliciesByPolicySet(policySetId, long = false) {
73
57
  */
74
58
  export async function describePolicy(policyId, json = false) {
75
59
  let outcome = false;
76
- const policySet = await getPolicy(policyId);
60
+ const policySet = await frodo.authz.policy.getPolicy(policyId);
77
61
  outcome = true;
78
62
  if (json) {
79
63
  printMessage(policySet, 'data');
@@ -96,7 +80,7 @@ export async function deletePolicy(policyId) {
96
80
  const errors = [];
97
81
  try {
98
82
  debugMessage(`Deleting policy ${policyId}`);
99
- await _deletePolicy(policyId);
83
+ await frodo.authz.policy.deletePolicy(policyId);
100
84
  } catch (error) {
101
85
  printMessage(`Error deleting policy ${policyId}: ${error}`, 'error');
102
86
  }
@@ -123,7 +107,7 @@ export async function deletePolicies() {
123
107
  try {
124
108
  showSpinner(`Retrieving all policies...`);
125
109
  try {
126
- policies = await getPolicies();
110
+ policies = await frodo.authz.policy.getPolicies();
127
111
  succeedSpinner(`Found ${policies.length} policies.`);
128
112
  } catch (error) {
129
113
  error.message = `Error retrieving all policies: ${error.message}`;
@@ -135,7 +119,7 @@ export async function deletePolicies() {
135
119
  const policyId = policy._id;
136
120
  try {
137
121
  debugMessage(`Deleting policy ${policyId}`);
138
- await _deletePolicy(policyId);
122
+ await frodo.authz.policy.deletePolicy(policyId);
139
123
  updateProgressBar(`Deleted ${policyId}`);
140
124
  } catch (error) {
141
125
  error.message = `Error deleting policy ${policyId}: ${error}`;
@@ -172,7 +156,7 @@ export async function deletePoliciesByPolicySet(policySetId) {
172
156
  try {
173
157
  showSpinner(`Retrieving all policies from policy set ${policySetId}...`);
174
158
  try {
175
- policies = await getPoliciesByPolicySet(policySetId);
159
+ policies = await frodo.authz.policy.getPoliciesByPolicySet(policySetId);
176
160
  succeedSpinner(`Found ${policies.length} policies in policy set ${policySetId}.`);
177
161
  } catch (error) {
178
162
  error.message = `Error retrieving all policies from policy set ${policySetId}: ${error.message}`;
@@ -184,7 +168,7 @@ export async function deletePoliciesByPolicySet(policySetId) {
184
168
  const policyId = policy._id;
185
169
  try {
186
170
  debugMessage(`Deleting policy ${policyId}`);
187
- await _deletePolicy(policyId);
171
+ await frodo.authz.policy.deletePolicy(policyId);
188
172
  updateProgressBar(`Deleted ${policyId}`);
189
173
  } catch (error) {
190
174
  error.message = `Error deleting policy ${policyId} from policy set ${policySetId}: ${error}`;
@@ -228,7 +212,7 @@ export async function exportPolicyToFile(policyId, file, options = {
228
212
  if (file) {
229
213
  fileName = file;
230
214
  }
231
- const exportData = await exportPolicy(policyId, options);
215
+ const exportData = await frodo.authz.policy.exportPolicy(policyId, options);
232
216
  saveJsonToFile(exportData, fileName);
233
217
  succeedSpinner(`Exported ${policyId} to ${fileName}.`);
234
218
  outcome = true;
@@ -254,11 +238,11 @@ export async function exportPoliciesToFile(file, options = {
254
238
  debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);
255
239
  showSpinner(`Exporting all policy sets...`);
256
240
  try {
257
- let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm()))}Policies`, 'policy.authz');
241
+ let fileName = getTypedFilename(`all${titleCase(frodo.helper.utils.getRealmName(state.getRealm()))}Policies`, 'policy.authz');
258
242
  if (file) {
259
243
  fileName = file;
260
244
  }
261
- const exportData = await exportPolicies(options);
245
+ const exportData = await frodo.authz.policy.exportPolicies(options);
262
246
  saveJsonToFile(exportData, fileName);
263
247
  succeedSpinner(`Exported all policy sets to ${fileName}.`);
264
248
  outcome = true;
@@ -285,11 +269,11 @@ export async function exportPoliciesByPolicySetToFile(policySetId, file, options
285
269
  debugMessage(`cli.PolicyOps.exportPoliciesToFile: begin`);
286
270
  showSpinner(`Exporting all policy sets...`);
287
271
  try {
288
- let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm())) + titleCase(policySetId)}Policies`, 'policy.authz');
272
+ let fileName = getTypedFilename(`all${titleCase(frodo.helper.utils.getRealmName(state.getRealm())) + titleCase(policySetId)}Policies`, 'policy.authz');
289
273
  if (file) {
290
274
  fileName = file;
291
275
  }
292
- const exportData = await exportPoliciesByPolicySet(policySetId, options);
276
+ const exportData = await frodo.authz.policy.exportPoliciesByPolicySet(policySetId, options);
293
277
  saveJsonToFile(exportData, fileName);
294
278
  succeedSpinner(`Exported all policy sets to ${fileName}.`);
295
279
  outcome = true;
@@ -313,12 +297,12 @@ export async function exportPoliciesToFiles(options = {
313
297
  debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);
314
298
  const errors = [];
315
299
  try {
316
- const policies = await getPolicies();
300
+ const policies = await frodo.authz.policy.getPolicies();
317
301
  createProgressBar(policies.length, 'Exporting policy sets...');
318
302
  for (const policy of policies) {
319
303
  const file = getTypedFilename(policy._id, 'policy.authz');
320
304
  try {
321
- const exportData = await exportPolicy(policy._id, options);
305
+ const exportData = await frodo.authz.policy.exportPolicy(policy._id, options);
322
306
  saveJsonToFile(exportData, file);
323
307
  updateProgressBar(`Exported ${policy._id}.`);
324
308
  } catch (error) {
@@ -348,12 +332,12 @@ export async function exportPoliciesByPolicySetToFiles(policySetId, options = {
348
332
  debugMessage(`cli.PolicyOps.exportPoliciesToFiles: begin`);
349
333
  const errors = [];
350
334
  try {
351
- const policies = await getPoliciesByPolicySet(policySetId);
335
+ const policies = await frodo.authz.policy.getPoliciesByPolicySet(policySetId);
352
336
  createProgressBar(policies.length, `Exporting policies in policy set ${policySetId}...`);
353
337
  for (const policy of policies) {
354
338
  const file = getTypedFilename(policy._id, 'policy.authz');
355
339
  try {
356
- const exportData = await exportPolicy(policy._id, options);
340
+ const exportData = await frodo.authz.policy.exportPolicy(policy._id, options);
357
341
  saveJsonToFile(exportData, file);
358
342
  updateProgressBar(`Exported ${policy._id}.`);
359
343
  } catch (error) {
@@ -387,7 +371,7 @@ export async function importPolicyFromFile(policyId, file, options = {
387
371
  try {
388
372
  const data = fs.readFileSync(file, 'utf8');
389
373
  const fileData = JSON.parse(data);
390
- await importPolicy(policyId, fileData, options);
374
+ await frodo.authz.policy.importPolicy(policyId, fileData, options);
391
375
  outcome = true;
392
376
  succeedSpinner(`Imported ${policyId}.`);
393
377
  } catch (error) {
@@ -414,7 +398,7 @@ export async function importFirstPolicyFromFile(file, options = {
414
398
  try {
415
399
  const data = fs.readFileSync(file, 'utf8');
416
400
  const fileData = JSON.parse(data);
417
- await importFirstPolicy(fileData, options);
401
+ await frodo.authz.policy.importFirstPolicy(fileData, options);
418
402
  outcome = true;
419
403
  succeedSpinner(`Imported ${file}.`);
420
404
  } catch (error) {
@@ -441,7 +425,7 @@ export async function importPoliciesFromFile(file, options = {
441
425
  try {
442
426
  const data = fs.readFileSync(file, 'utf8');
443
427
  const fileData = JSON.parse(data);
444
- await importPolicies(fileData, options);
428
+ await frodo.authz.policy.importPolicies(fileData, options);
445
429
  outcome = true;
446
430
  succeedSpinner(`Imported ${file}${options.policySetName ? ' into policy set ' + options.policySetName : '.'}`);
447
431
  } catch (error) {
@@ -474,7 +458,7 @@ export async function importPoliciesFromFiles(options = {
474
458
  const fileData = JSON.parse(data);
475
459
  const count = Object.keys(fileData.policyset).length;
476
460
  total += count;
477
- await importPolicies(fileData, options);
461
+ await frodo.authz.policy.importPolicies(fileData, options);
478
462
  updateProgressBar(`Imported ${count} policies from ${file}`);
479
463
  } catch (error) {
480
464
  errors.push(error);
@@ -1 +1 @@
1
- {"version":3,"file":"PolicyOps.js","names":["fs","Policy","Utils","state","createObjectTable","createProgressBar","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","titleCase","deletePolicy","_deletePolicy","getPolicy","getPolicies","getPoliciesByPolicySet","exportPolicy","exportPolicies","exportPoliciesByPolicySet","importPolicy","importFirstPolicy","importPolicies","getRealmName","listPolicies","long","outcome","policies","sort","a","b","_id","localeCompare","policy","err","message","listPoliciesByPolicySet","policySetId","describePolicy","policyId","json","policySet","table","toString","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":["ops/PolicyOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { PolicySkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { Policy, Utils, state } from '@rockcarver/frodo-lib';\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 {\n PolicyExportOptions,\n PolicyImportOptions,\n PolicyExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/PolicyOps';\n\nconst {\n deletePolicy: _deletePolicy,\n getPolicy,\n getPolicies,\n getPoliciesByPolicySet,\n exportPolicy,\n exportPolicies,\n exportPoliciesByPolicySet,\n importPolicy,\n importFirstPolicy,\n importPolicies,\n} = Policy;\nconst { getRealmName } = Utils;\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":"AAAA,OAAOA,EAAE,MAAM,IAAI;AAEnB,SAASC,MAAM,EAAEC,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AAC5D,SACEC,iBAAiB,EACjBC,iBAAiB,EACjBC,YAAY,EACZC,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,eAAe,EACfC,cAAc,EACdC,iBAAiB,QACZ,kBAAkB;AACzB,SACEC,gBAAgB,EAChBC,cAAc,EACdC,SAAS,QACJ,4BAA4B;AAOnC,MAAM;EACJC,YAAY,EAAEC,aAAa;EAC3BC,SAAS;EACTC,WAAW;EACXC,sBAAsB;EACtBC,YAAY;EACZC,cAAc;EACdC,yBAAyB;EACzBC,YAAY;EACZC,iBAAiB;EACjBC;AACF,CAAC,GAAGzB,MAAM;AACV,MAAM;EAAE0B;AAAa,CAAC,GAAGzB,KAAK;;AAE9B;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe0B,YAAYA,CAACC,IAAI,GAAG,KAAK,EAAoB;EACjE,IAAIC,OAAO,GAAG,KAAK;EACnB,IAAI;IACF,MAAMC,QAAQ,GAAG,MAAMZ,WAAW,CAAC,CAAC;IACpCY,QAAQ,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,GAAG,CAACC,aAAa,CAACF,CAAC,CAACC,GAAG,CAAC,CAAC;IACnD,KAAK,MAAME,MAAM,IAAIN,QAAQ,EAAE;MAC7B,IAAI,CAACF,IAAI,EAAE;QACTrB,YAAY,CAAE,GAAE6B,MAAM,CAACF,GAAI,EAAC,EAAE,MAAM,CAAC;MACvC;IACF;IACAL,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOQ,GAAG,EAAE;IACZ9B,YAAY,CAAE,uBAAsB8B,GAAG,CAACC,OAAQ,EAAC,EAAE,OAAO,CAAC;IAC3D/B,YAAY,CAAC8B,GAAG,EAAE,OAAO,CAAC;EAC5B;EACA,OAAOR,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeU,uBAAuBA,CAC3CC,WAAmB,EACnBZ,IAAI,GAAG,KAAK,EACM;EAClB,IAAIC,OAAO,GAAG,KAAK;EACnB,IAAI;IACF,MAAMC,QAAQ,GAAG,MAAMX,sBAAsB,CAACqB,WAAW,CAAC;IAC1DV,QAAQ,CAACC,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,CAACE,GAAG,CAACC,aAAa,CAACF,CAAC,CAACC,GAAG,CAAC,CAAC;IACnD,KAAK,MAAME,MAAM,IAAIN,QAAQ,EAAE;MAC7B,IAAI,CAACF,IAAI,EAAE;QACTrB,YAAY,CAAE,GAAE6B,MAAM,CAACF,GAAI,EAAC,EAAE,MAAM,CAAC;MACvC;IACF;IACAL,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOQ,GAAG,EAAE;IACZ9B,YAAY,CAAE,uBAAsB8B,GAAG,CAACC,OAAQ,EAAC,EAAE,OAAO,CAAC;IAC3D/B,YAAY,CAAC8B,GAAG,EAAE,OAAO,CAAC;EAC5B;EACA,OAAOR,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeY,cAAcA,CAClCC,QAAgB,EAChBC,IAAI,GAAG,KAAK,EACM;EAClB,IAAId,OAAO,GAAG,KAAK;EACnB,MAAMe,SAAS,GAAG,MAAM3B,SAAS,CAACyB,QAAQ,CAAC;EAC3Cb,OAAO,GAAG,IAAI;EACd,IAAIc,IAAI,EAAE;IACRpC,YAAY,CAACqC,SAAS,EAAE,MAAM,CAAC;EACjC,CAAC,MAAM;IACL,MAAMC,KAAK,GAAG1C,iBAAiB,CAACyC,SAAS,CAAC;IAC1CrC,YAAY,CAACsC,KAAK,CAACC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;EACxC;EACA,OAAOjB,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAed,YAAYA,CAAC2B,QAAgB,EAAoB;EACrErC,YAAY,CAAE,mCAAkC,CAAC;EACjDG,WAAW,CAAE,YAAWkC,QAAS,KAAI,CAAC;EACtC,IAAIb,OAAO,GAAG,KAAK;EACnB,MAAMkB,MAAM,GAAG,EAAE;EACjB,IAAI;IACF1C,YAAY,CAAE,mBAAkBqC,QAAS,EAAC,CAAC;IAC3C,MAAM1B,aAAa,CAAC0B,QAAQ,CAAC;EAC/B,CAAC,CAAC,OAAOM,KAAK,EAAE;IACdzC,YAAY,CAAE,yBAAwBmC,QAAS,KAAIM,KAAM,EAAC,EAAE,OAAO,CAAC;EACtE;EACA,IAAID,MAAM,CAACE,MAAM,EAAE;IACjB,MAAMC,aAAa,GAAGH,MAAM,CAACI,GAAG,CAAEH,KAAK,IAAKA,KAAK,CAACV,OAAO,CAAC,CAACc,IAAI,CAAC,IAAI,CAAC;IACrE9C,WAAW,CAAE,kBAAiBoC,QAAS,KAAIQ,aAAc,EAAC,CAAC;EAC7D,CAAC,MAAM;IACLxC,cAAc,CAAE,WAAUgC,QAAS,GAAE,CAAC;IACtCb,OAAO,GAAG,IAAI;EAChB;EACAxB,YAAY,CAAE,4CAA2CwB,OAAQ,GAAE,CAAC;EACpE,OAAOA,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAewB,cAAcA,CAAA,EAAqB;EACvDhD,YAAY,CAAE,qCAAoC,CAAC;EACnD,IAAIwB,OAAO,GAAG,KAAK;EACnB,MAAMkB,MAAM,GAAG,EAAE;EACjB,IAAIjB,QAA0B,GAAG,EAAE;EACnC,IAAI;IACFtB,WAAW,CAAE,4BAA2B,CAAC;IACzC,IAAI;MACFsB,QAAQ,GAAG,MAAMZ,WAAW,CAAC,CAAC;MAC9BR,cAAc,CAAE,SAAQoB,QAAQ,CAACmB,MAAO,YAAW,CAAC;IACtD,CAAC,CAAC,OAAOD,KAAK,EAAE;MACdA,KAAK,CAACV,OAAO,GAAI,kCAAiCU,KAAK,CAACV,OAAQ,EAAC;MACjEhC,WAAW,CAAC0C,KAAK,CAACV,OAAO,CAAC;MAC1B,MAAMU,KAAK;IACb;IACA,IAAIlB,QAAQ,CAACmB,MAAM,EACjB7C,iBAAiB,CACf0B,QAAQ,CAACmB,MAAM,EACd,YAAWnB,QAAQ,CAACmB,MAAO,cAC9B,CAAC;IACH,KAAK,MAAMb,MAAM,IAAIN,QAAQ,EAAE;MAC7B,MAAMY,QAAQ,GAAGN,MAAM,CAACF,GAAG;MAC3B,IAAI;QACF7B,YAAY,CAAE,mBAAkBqC,QAAS,EAAC,CAAC;QAC3C,MAAM1B,aAAa,CAAC0B,QAAQ,CAAC;QAC7B/B,iBAAiB,CAAE,WAAU+B,QAAS,EAAC,CAAC;MAC1C,CAAC,CAAC,OAAOM,KAAK,EAAE;QACdA,KAAK,CAACV,OAAO,GAAI,yBAAwBI,QAAS,KAAIM,KAAM,EAAC;QAC7DrC,iBAAiB,CAACqC,KAAK,CAACV,OAAO,CAAC;QAChCS,MAAM,CAACO,IAAI,CAACN,KAAK,CAAC;MACpB;IACF;EACF,CAAC,CAAC,OAAOA,KAAK,EAAE;IACdA,KAAK,CAACV,OAAO,GAAI,4BAA2BU,KAAM,EAAC;IACnDD,MAAM,CAACO,IAAI,CAACN,KAAK,CAAC;EACpB,CAAC,SAAS;IACR,IAAID,MAAM,CAACE,MAAM,EAAE;MACjB,MAAMC,aAAa,GAAGH,MAAM,CAACI,GAAG,CAAEH,KAAK,IAAKA,KAAK,CAACV,OAAO,CAAC,CAACc,IAAI,CAAC,IAAI,CAAC;MACrE,IAAItB,QAAQ,CAACmB,MAAM,EACjBxC,eAAe,CAAE,gCAA+ByC,aAAc,EAAC,CAAC;IACpE,CAAC,MAAM;MACL,IAAIpB,QAAQ,CAACmB,MAAM,EACjBxC,eAAe,CAAE,WAAUqB,QAAQ,CAACmB,MAAO,YAAW,CAAC;MACzDpB,OAAO,GAAG,IAAI;IAChB;EACF;EACAxB,YAAY,CAAE,8CAA6CwB,OAAQ,GAAE,CAAC;EACtE,OAAOA,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe0B,yBAAyBA,CAC7Cf,WAAmB,EACD;EAClBnC,YAAY,CAAE,gDAA+C,CAAC;EAC9D,IAAIwB,OAAO,GAAG,KAAK;EACnB,MAAMkB,MAAM,GAAG,EAAE;EACjB,IAAIjB,QAA0B,GAAG,EAAE;EACnC,IAAI;IACFtB,WAAW,CAAE,2CAA0CgC,WAAY,KAAI,CAAC;IACxE,IAAI;MACFV,QAAQ,GAAG,MAAMX,sBAAsB,CAACqB,WAAW,CAAC;MACpD9B,cAAc,CACX,SAAQoB,QAAQ,CAACmB,MAAO,2BAA0BT,WAAY,GACjE,CAAC;IACH,CAAC,CAAC,OAAOQ,KAAK,EAAE;MACdA,KAAK,CAACV,OAAO,GAAI,iDAAgDE,WAAY,KAAIQ,KAAK,CAACV,OAAQ,EAAC;MAChGhC,WAAW,CAAC0C,KAAK,CAACV,OAAO,CAAC;MAC1B,MAAMU,KAAK;IACb;IACA,IAAIlB,QAAQ,CAACmB,MAAM,EACjB7C,iBAAiB,CACf0B,QAAQ,CAACmB,MAAM,EACd,YAAWnB,QAAQ,CAACmB,MAAO,6BAA4BT,WAAY,KACtE,CAAC;IACH,KAAK,MAAMJ,MAAM,IAAIN,QAAQ,EAAE;MAC7B,MAAMY,QAAQ,GAAGN,MAAM,CAACF,GAAG;MAC3B,IAAI;QACF7B,YAAY,CAAE,mBAAkBqC,QAAS,EAAC,CAAC;QAC3C,MAAM1B,aAAa,CAAC0B,QAAQ,CAAC;QAC7B/B,iBAAiB,CAAE,WAAU+B,QAAS,EAAC,CAAC;MAC1C,CAAC,CAAC,OAAOM,KAAK,EAAE;QACdA,KAAK,CAACV,OAAO,GAAI,yBAAwBI,QAAS,oBAAmBF,WAAY,KAAIQ,KAAM,EAAC;QAC5FrC,iBAAiB,CAACqC,KAAK,CAACV,OAAO,CAAC;QAChCS,MAAM,CAACO,IAAI,CAACN,KAAK,CAAC;MACpB;IACF;EACF,CAAC,CAAC,OAAOA,KAAK,EAAE;IACdA,KAAK,CAACV,OAAO,GAAI,2CAA0CE,WAAY,KAAIQ,KAAM,EAAC;IAClFD,MAAM,CAACO,IAAI,CAACN,KAAK,CAAC;EACpB,CAAC,SAAS;IACR,IAAID,MAAM,CAACE,MAAM,EAAE;MACjB,MAAMC,aAAa,GAAGH,MAAM,CAACI,GAAG,CAAEH,KAAK,IAAKA,KAAK,CAACV,OAAO,CAAC,CAACc,IAAI,CAAC,IAAI,CAAC;MACrE,IAAItB,QAAQ,CAACmB,MAAM,EACjBxC,eAAe,CACZ,+CAA8C+B,WAAY,KAAIU,aAAc,EAC/E,CAAC;IACL,CAAC,MAAM;MACL,IAAIpB,QAAQ,CAACmB,MAAM,EACjBxC,eAAe,CAAE,WAAUqB,QAAQ,CAACmB,MAAO,YAAW,CAAC;MACzDpB,OAAO,GAAG,IAAI;IAChB;EACF;EACAxB,YAAY,CACT,yDAAwDwB,OAAQ,GACnE,CAAC;EACD,OAAOA,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe2B,kBAAkBA,CACtCd,QAAgB,EAChBe,IAAY,EACZC,OAA4B,GAAG;EAC7BC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE,KAAK;EACdC,eAAe,EAAE;AACnB,CAAC,EACiB;EAClB,IAAIhC,OAAO,GAAG,KAAK;EACnBxB,YAAY,CAAE,yCAAwC,CAAC;EACvDG,WAAW,CAAE,aAAYkC,QAAS,KAAI,CAAC;EACvC,IAAI;IACF,IAAIoB,QAAQ,GAAGlD,gBAAgB,CAAC8B,QAAQ,EAAE,cAAc,CAAC;IACzD,IAAIe,IAAI,EAAE;MACRK,QAAQ,GAAGL,IAAI;IACjB;IACA,MAAMM,UAAU,GAAG,MAAM3C,YAAY,CAACsB,QAAQ,EAAEgB,OAAO,CAAC;IACxD7C,cAAc,CAACkD,UAAU,EAAED,QAAQ,CAAC;IACpCpD,cAAc,CAAE,YAAWgC,QAAS,OAAMoB,QAAS,GAAE,CAAC;IACtDjC,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOmB,KAAK,EAAE;IACd1C,WAAW,CAAE,mBAAkBoC,QAAS,KAAIM,KAAK,CAACV,OAAQ,EAAC,CAAC;EAC9D;EACAjC,YAAY,CAAE,uCAAsC,CAAC;EACrD,OAAOwB,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAemC,oBAAoBA,CACxCP,IAAY,EACZC,OAA4B,GAAG;EAC7BC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE,KAAK;EACdC,eAAe,EAAE;AACnB,CAAC,EACiB;EAClB,IAAIhC,OAAO,GAAG,KAAK;EACnBxB,YAAY,CAAE,2CAA0C,CAAC;EACzDG,WAAW,CAAE,8BAA6B,CAAC;EAC3C,IAAI;IACF,IAAIsD,QAAQ,GAAGlD,gBAAgB,CAC5B,MAAKE,SAAS,CAACY,YAAY,CAACxB,KAAK,CAAC+D,QAAQ,CAAC,CAAC,CAAC,CAAE,UAAS,EACzD,cACF,CAAC;IACD,IAAIR,IAAI,EAAE;MACRK,QAAQ,GAAGL,IAAI;IACjB;IACA,MAAMM,UAAU,GAAG,MAAM1C,cAAc,CAACqC,OAAO,CAAC;IAChD7C,cAAc,CAACkD,UAAU,EAAED,QAAQ,CAAC;IACpCpD,cAAc,CAAE,+BAA8BoD,QAAS,GAAE,CAAC;IAC1DjC,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOmB,KAAK,EAAE;IACd1C,WAAW,CAAE,gCAA+B0C,KAAK,CAACV,OAAQ,EAAC,CAAC;EAC9D;EACAjC,YAAY,CAAE,yCAAwC,CAAC;EACvD,OAAOwB,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeqC,+BAA+BA,CACnD1B,WAAmB,EACnBiB,IAAY,EACZC,OAA4B,GAAG;EAC7BC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE,KAAK;EACdC,eAAe,EAAE;AACnB,CAAC,EACiB;EAClB,IAAIhC,OAAO,GAAG,KAAK;EACnBxB,YAAY,CAAE,2CAA0C,CAAC;EACzDG,WAAW,CAAE,8BAA6B,CAAC;EAC3C,IAAI;IACF,IAAIsD,QAAQ,GAAGlD,gBAAgB,CAC5B,MACCE,SAAS,CAACY,YAAY,CAACxB,KAAK,CAAC+D,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAGnD,SAAS,CAAC0B,WAAW,CAClE,UAAS,EACV,cACF,CAAC;IACD,IAAIiB,IAAI,EAAE;MACRK,QAAQ,GAAGL,IAAI;IACjB;IACA,MAAMM,UAAU,GAAG,MAAMzC,yBAAyB,CAACkB,WAAW,EAAEkB,OAAO,CAAC;IACxE7C,cAAc,CAACkD,UAAU,EAAED,QAAQ,CAAC;IACpCpD,cAAc,CAAE,+BAA8BoD,QAAS,GAAE,CAAC;IAC1DjC,OAAO,GAAG,IAAI;EAChB,CAAC,CAAC,OAAOmB,KAAK,EAAE;IACd1C,WAAW,CAAE,gCAA+B0C,KAAK,CAACV,OAAQ,EAAC,CAAC;EAC9D;EACAjC,YAAY,CAAE,yCAAwC,CAAC;EACvD,OAAOwB,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAesC,qBAAqBA,CACzCT,OAA4B,GAAG;EAC7BC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE,KAAK;EACdC,eAAe,EAAE;AACnB,CAAC,EACiB;EAClBxD,YAAY,CAAE,4CAA2C,CAAC;EAC1D,MAAM0C,MAAM,GAAG,EAAE;EACjB,IAAI;IACF,MAAMjB,QAA0B,GAAG,MAAMZ,WAAW,CAAC,CAAC;IACtDd,iBAAiB,CAAC0B,QAAQ,CAACmB,MAAM,EAAE,0BAA0B,CAAC;IAC9D,KAAK,MAAMb,MAAM,IAAIN,QAAQ,EAAE;MAC7B,MAAM2B,IAAI,GAAG7C,gBAAgB,CAACwB,MAAM,CAACF,GAAG,EAAE,cAAc,CAAC;MACzD,IAAI;QACF,MAAM6B,UAAiC,GAAG,MAAM3C,YAAY,CAC1DgB,MAAM,CAACF,GAAG,EACVwB,OACF,CAAC;QACD7C,cAAc,CAACkD,UAAU,EAAEN,IAAI,CAAC;QAChC9C,iBAAiB,CAAE,YAAWyB,MAAM,CAACF,GAAI,GAAE,CAAC;MAC9C,CAAC,CAAC,OAAOc,KAAK,EAAE;QACdD,MAAM,CAACO,IAAI,CAACN,KAAK,CAAC;QAClBrC,iBAAiB,CAAE,mBAAkByB,MAAM,CAACF,GAAI,GAAE,CAAC;MACrD;IACF;IACAzB,eAAe,CAAE,kBAAiB,CAAC;EACrC,CAAC,CAAC,OAAOuC,KAAK,EAAE;IACdD,MAAM,CAACO,IAAI,CAACN,KAAK,CAAC;IAClBvC,eAAe,CAAE,sCAAqC,CAAC;EACzD;EACAJ,YAAY,CAAE,0CAAyC,CAAC;EACxD,OAAO,CAAC,KAAK0C,MAAM,CAACE,MAAM;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAemB,gCAAgCA,CACpD5B,WAAmB,EACnBkB,OAA4B,GAAG;EAC7BC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE,KAAK;EACdC,eAAe,EAAE;AACnB,CAAC,EACiB;EAClBxD,YAAY,CAAE,4CAA2C,CAAC;EAC1D,MAAM0C,MAAM,GAAG,EAAE;EACjB,IAAI;IACF,MAAMjB,QAA0B,GAAG,MAAMX,sBAAsB,CAC7DqB,WACF,CAAC;IACDpC,iBAAiB,CACf0B,QAAQ,CAACmB,MAAM,EACd,oCAAmCT,WAAY,KAClD,CAAC;IACD,KAAK,MAAMJ,MAAM,IAAIN,QAAQ,EAAE;MAC7B,MAAM2B,IAAI,GAAG7C,gBAAgB,CAACwB,MAAM,CAACF,GAAG,EAAE,cAAc,CAAC;MACzD,IAAI;QACF,MAAM6B,UAAiC,GAAG,MAAM3C,YAAY,CAC1DgB,MAAM,CAACF,GAAG,EACVwB,OACF,CAAC;QACD7C,cAAc,CAACkD,UAAU,EAAEN,IAAI,CAAC;QAChC9C,iBAAiB,CAAE,YAAWyB,MAAM,CAACF,GAAI,GAAE,CAAC;MAC9C,CAAC,CAAC,OAAOc,KAAK,EAAE;QACdD,MAAM,CAACO,IAAI,CAACN,KAAK,CAAC;QAClBrC,iBAAiB,CAAE,mBAAkByB,MAAM,CAACF,GAAI,GAAE,CAAC;MACrD;IACF;IACAzB,eAAe,CAAE,kBAAiB,CAAC;EACrC,CAAC,CAAC,OAAOuC,KAAK,EAAE;IACdD,MAAM,CAACO,IAAI,CAACN,KAAK,CAAC;IAClBvC,eAAe,CAAE,sCAAqC,CAAC;EACzD;EACAJ,YAAY,CAAE,0CAAyC,CAAC;EACxD,OAAO,CAAC,KAAK0C,MAAM,CAACE,MAAM;AAC5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeoB,oBAAoBA,CACxC3B,QAAgB,EAChBe,IAAY,EACZC,OAA4B,GAAG;EAAEC,IAAI,EAAE,IAAI;EAAEC,OAAO,EAAE;AAAM,CAAC,EAC3C;EAClB,IAAI/B,OAAO,GAAG,KAAK;EACnBxB,YAAY,CAAE,2CAA0C,CAAC;EACzDG,WAAW,CAAE,aAAYkC,QAAS,KAAI,CAAC;EACvC,IAAI;IACF,MAAM4B,IAAI,GAAGvE,EAAE,CAACwE,YAAY,CAACd,IAAI,EAAE,MAAM,CAAC;IAC1C,MAAMe,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACJ,IAAI,CAAC;IACjC,MAAM/C,YAAY,CAACmB,QAAQ,EAAE8B,QAAQ,EAAEd,OAAO,CAAC;IAC/C7B,OAAO,GAAG,IAAI;IACdnB,cAAc,CAAE,YAAWgC,QAAS,GAAE,CAAC;EACzC,CAAC,CAAC,OAAOM,KAAK,EAAE;IACd1C,WAAW,CAAE,mBAAkBoC,QAAS,GAAE,CAAC;IAC3CnC,YAAY,CAACyC,KAAK,EAAE,OAAO,CAAC;EAC9B;EACA3C,YAAY,CAAE,yCAAwC,CAAC;EACvD,OAAOwB,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe8C,yBAAyBA,CAC7ClB,IAAY,EACZC,OAA4B,GAAG;EAAEC,IAAI,EAAE,IAAI;EAAEC,OAAO,EAAE;AAAM,CAAC,EAC3C;EAClB,IAAI/B,OAAO,GAAG,KAAK;EACnBxB,YAAY,CAAE,mDAAkD,CAAC;EACjEG,WAAW,CAAE,aAAYiD,IAAK,KAAI,CAAC;EACnC,IAAI;IACF,MAAMa,IAAI,GAAGvE,EAAE,CAACwE,YAAY,CAACd,IAAI,EAAE,MAAM,CAAC;IAC1C,MAAMe,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACJ,IAAI,CAAC;IACjC,MAAM9C,iBAAiB,CAACgD,QAAQ,EAAEd,OAAO,CAAC;IAC1C7B,OAAO,GAAG,IAAI;IACdnB,cAAc,CAAE,YAAW+C,IAAK,GAAE,CAAC;EACrC,CAAC,CAAC,OAAOT,KAAK,EAAE;IACd1C,WAAW,CAAE,mBAAkBmD,IAAK,GAAE,CAAC;IACvClD,YAAY,CAACyC,KAAK,EAAE,OAAO,CAAC;EAC9B;EACA3C,YAAY,CAAE,iDAAgD,CAAC;EAC/D,OAAOwB,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe+C,sBAAsBA,CAC1CnB,IAAY,EACZC,OAA4B,GAAG;EAAEC,IAAI,EAAE,IAAI;EAAEC,OAAO,EAAE;AAAM,CAAC,EAC3C;EAClB,IAAI/B,OAAO,GAAG,KAAK;EACnBxB,YAAY,CAAE,6CAA4C,CAAC;EAC3DG,WAAW,CAAE,aAAYiD,IAAK,KAAI,CAAC;EACnC,IAAI;IACF,MAAMa,IAAI,GAAGvE,EAAE,CAACwE,YAAY,CAACd,IAAI,EAAE,MAAM,CAAC;IAC1C,MAAMe,QAAQ,GAAGC,IAAI,CAACC,KAAK,CAACJ,IAAI,CAAC;IACjC,MAAM7C,cAAc,CAAC+C,QAAQ,EAAEd,OAAO,CAAC;IACvC7B,OAAO,GAAG,IAAI;IACdnB,cAAc,CACX,YAAW+C,IAAK,GACfC,OAAO,CAACmB,aAAa,GACjB,mBAAmB,GAAGnB,OAAO,CAACmB,aAAa,GAC3C,GACL,EACH,CAAC;EACH,CAAC,CAAC,OAAO7B,KAAK,EAAE;IACd1C,WAAW,CACR,mBAAkBmD,IAAK,GACtBC,OAAO,CAACmB,aAAa,GACjB,mBAAmB,GAAGnB,OAAO,CAACmB,aAAa,GAC3C,GACL,EACH,CAAC;IACDtE,YAAY,CAACyC,KAAK,EAAE,OAAO,CAAC;EAC9B;EACA3C,YAAY,CAAE,2CAA0C,CAAC;EACzD,OAAOwB,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeiD,uBAAuBA,CAC3CpB,OAA4B,GAAG;EAAEC,IAAI,EAAE,IAAI;EAAEC,OAAO,EAAE;AAAM,CAAC,EAC3C;EAClB,MAAMb,MAAM,GAAG,EAAE;EACjB,IAAI;IACF1C,YAAY,CAAE,8CAA6C,CAAC;IAC5D,MAAM0E,KAAK,GAAGhF,EAAE,CAACiF,WAAW,CAAC,GAAG,CAAC;IACjC,MAAMC,KAAK,GAAGF,KAAK,CAACG,MAAM,CAAEC,IAAI,IAC9BA,IAAI,CAACC,WAAW,CAAC,CAAC,CAACC,QAAQ,CAAC,oBAAoB,CAClD,CAAC;IACDjF,iBAAiB,CAAC6E,KAAK,CAAChC,MAAM,EAAE,uBAAuB,CAAC;IACxD,IAAIqC,KAAK,GAAG,CAAC;IACb,KAAK,MAAM7B,IAAI,IAAIwB,KAAK,EAAE;MACxB,IAAI;QACF,MAAMX,IAAI,GAAGvE,EAAE,CAACwE,YAAY,CAACd,IAAI,EAAE,MAAM,CAAC;QAC1C,MAAMe,QAA+B,GAAGC,IAAI,CAACC,KAAK,CAACJ,IAAI,CAAC;QACxD,MAAMiB,KAAK,GAAGC,MAAM,CAACC,IAAI,CAACjB,QAAQ,CAACkB,SAAS,CAAC,CAACzC,MAAM;QACpDqC,KAAK,IAAIC,KAAK;QACd,MAAM9D,cAAc,CAAC+C,QAAQ,EAAEd,OAAO,CAAC;QACvC/C,iBAAiB,CAAE,YAAW4E,KAAM,kBAAiB9B,IAAK,EAAC,CAAC;MAC9D,CAAC,CAAC,OAAOT,KAAK,EAAE;QACdD,MAAM,CAACO,IAAI,CAACN,KAAK,CAAC;QAClBrC,iBAAiB,CAAE,iCAAgC8C,IAAK,EAAC,CAAC;QAC1DlD,YAAY,CAACyC,KAAK,EAAE,OAAO,CAAC;MAC9B;IACF;IACAvC,eAAe,CACZ,sBAAqB6E,KAAM,kBAAiBL,KAAK,CAAChC,MAAO,SAC5D,CAAC;EACH,CAAC,CAAC,OAAOD,KAAK,EAAE;IACdD,MAAM,CAACO,IAAI,CAACN,KAAK,CAAC;IAClBvC,eAAe,CAAE,sCAAqC,CAAC;IACvDF,YAAY,CAACyC,KAAK,EAAE,OAAO,CAAC;EAC9B;EACA3C,YAAY,CAAE,4CAA2C,CAAC;EAC1D,OAAO,CAAC,KAAK0C,MAAM,CAACE,MAAM;AAC5B"}
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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"}