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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/CHANGELOG.md +275 -4
  2. package/esm/app.js +20 -5
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/FrodoCommand.js +28 -6
  5. package/esm/cli/FrodoCommand.js.map +1 -1
  6. package/esm/cli/_template/something-delete.js +7 -4
  7. package/esm/cli/_template/something-delete.js.map +1 -1
  8. package/esm/cli/_template/something-describe.js +7 -4
  9. package/esm/cli/_template/something-describe.js.map +1 -1
  10. package/esm/cli/_template/something-else-delete.js +7 -4
  11. package/esm/cli/_template/something-else-delete.js.map +1 -1
  12. package/esm/cli/_template/something-else-describe.js +7 -4
  13. package/esm/cli/_template/something-else-describe.js.map +1 -1
  14. package/esm/cli/_template/something-else-export.js +7 -4
  15. package/esm/cli/_template/something-else-export.js.map +1 -1
  16. package/esm/cli/_template/something-else-import.js +7 -4
  17. package/esm/cli/_template/something-else-import.js.map +1 -1
  18. package/esm/cli/_template/something-else-list.js +7 -4
  19. package/esm/cli/_template/something-else-list.js.map +1 -1
  20. package/esm/cli/_template/something-else.js +1 -1
  21. package/esm/cli/_template/something-else.js.map +1 -1
  22. package/esm/cli/_template/something-export.js +7 -4
  23. package/esm/cli/_template/something-export.js.map +1 -1
  24. package/esm/cli/_template/something-import.js +7 -4
  25. package/esm/cli/_template/something-import.js.map +1 -1
  26. package/esm/cli/_template/something-list.js +7 -4
  27. package/esm/cli/_template/something-list.js.map +1 -1
  28. package/esm/cli/_template/something-other-delete.js +7 -4
  29. package/esm/cli/_template/something-other-delete.js.map +1 -1
  30. package/esm/cli/_template/something-other-describe.js +7 -4
  31. package/esm/cli/_template/something-other-describe.js.map +1 -1
  32. package/esm/cli/_template/something-other-export.js +7 -4
  33. package/esm/cli/_template/something-other-export.js.map +1 -1
  34. package/esm/cli/_template/something-other-import.js +7 -4
  35. package/esm/cli/_template/something-other-import.js.map +1 -1
  36. package/esm/cli/_template/something-other-list.js +7 -4
  37. package/esm/cli/_template/something-other-list.js.map +1 -1
  38. package/esm/cli/_template/something-other.js +1 -1
  39. package/esm/cli/_template/something-other.js.map +1 -1
  40. package/esm/cli/_template/something.js +2 -2
  41. package/esm/cli/_template/something.js.map +1 -1
  42. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +10 -4
  43. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
  44. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +14 -7
  45. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  46. package/esm/cli/admin/admin-federation-export.js +45 -0
  47. package/esm/cli/admin/admin-federation-export.js.map +1 -0
  48. package/esm/cli/admin/admin-federation-import.js +49 -0
  49. package/esm/cli/admin/admin-federation-import.js.map +1 -0
  50. package/esm/cli/admin/admin-federation-list.js +29 -0
  51. package/esm/cli/admin/admin-federation-list.js.map +1 -0
  52. package/esm/cli/admin/admin-federation.js +13 -0
  53. package/esm/cli/admin/admin-federation.js.map +1 -0
  54. package/esm/cli/admin/admin-get-access-token.js +12 -6
  55. package/esm/cli/admin/admin-get-access-token.js.map +1 -1
  56. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +13 -7
  57. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  58. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +11 -5
  59. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
  60. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +11 -5
  61. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
  62. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +11 -5
  63. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
  64. package/esm/cli/admin/admin-list-static-user-mappings.js +12 -6
  65. package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
  66. package/esm/cli/admin/admin-remove-static-user-mapping.js +12 -5
  67. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  68. package/esm/cli/admin/admin-repair-org-model.js +11 -5
  69. package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
  70. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +12 -6
  71. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  72. package/esm/cli/admin/admin-show-generic-extension-attributes.js +11 -5
  73. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
  74. package/esm/cli/admin/admin-train-auto-access-model.js +33 -0
  75. package/esm/cli/admin/admin-train-auto-access-model.js.map +1 -0
  76. package/esm/cli/admin/admin.js +6 -2
  77. package/esm/cli/admin/admin.js.map +1 -1
  78. package/esm/cli/agent/agent-delete.js +13 -6
  79. package/esm/cli/agent/agent-delete.js.map +1 -1
  80. package/esm/cli/agent/agent-describe.js +7 -4
  81. package/esm/cli/agent/agent-describe.js.map +1 -1
  82. package/esm/cli/agent/agent-export.js +8 -5
  83. package/esm/cli/agent/agent-export.js.map +1 -1
  84. package/esm/cli/agent/agent-gateway-delete.js +13 -6
  85. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  86. package/esm/cli/agent/agent-gateway-describe.js +7 -4
  87. package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
  88. package/esm/cli/agent/agent-gateway-export.js +8 -5
  89. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  90. package/esm/cli/agent/agent-gateway-import.js +8 -5
  91. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  92. package/esm/cli/agent/agent-gateway-list.js +7 -4
  93. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  94. package/esm/cli/agent/agent-gateway.js +1 -1
  95. package/esm/cli/agent/agent-gateway.js.map +1 -1
  96. package/esm/cli/agent/agent-import.js +8 -5
  97. package/esm/cli/agent/agent-import.js.map +1 -1
  98. package/esm/cli/agent/agent-java-delete.js +13 -6
  99. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  100. package/esm/cli/agent/agent-java-describe.js +7 -4
  101. package/esm/cli/agent/agent-java-describe.js.map +1 -1
  102. package/esm/cli/agent/agent-java-export.js +8 -5
  103. package/esm/cli/agent/agent-java-export.js.map +1 -1
  104. package/esm/cli/agent/agent-java-import.js +8 -5
  105. package/esm/cli/agent/agent-java-import.js.map +1 -1
  106. package/esm/cli/agent/agent-java-list.js +7 -4
  107. package/esm/cli/agent/agent-java-list.js.map +1 -1
  108. package/esm/cli/agent/agent-java.js +1 -1
  109. package/esm/cli/agent/agent-java.js.map +1 -1
  110. package/esm/cli/agent/agent-list.js +7 -4
  111. package/esm/cli/agent/agent-list.js.map +1 -1
  112. package/esm/cli/agent/agent-web-delete.js +13 -6
  113. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  114. package/esm/cli/agent/agent-web-describe.js +7 -4
  115. package/esm/cli/agent/agent-web-describe.js.map +1 -1
  116. package/esm/cli/agent/agent-web-export.js +8 -5
  117. package/esm/cli/agent/agent-web-export.js.map +1 -1
  118. package/esm/cli/agent/agent-web-import.js +8 -5
  119. package/esm/cli/agent/agent-web-import.js.map +1 -1
  120. package/esm/cli/agent/agent-web-list.js +7 -4
  121. package/esm/cli/agent/agent-web-list.js.map +1 -1
  122. package/esm/cli/agent/agent-web.js +3 -3
  123. package/esm/cli/agent/agent-web.js.map +1 -1
  124. package/esm/cli/agent/agent.js +2 -2
  125. package/esm/cli/agent/agent.js.map +1 -1
  126. package/esm/cli/app/app-delete.js +27 -8
  127. package/esm/cli/app/app-delete.js.map +1 -1
  128. package/esm/cli/app/app-describe.js +9 -5
  129. package/esm/cli/app/app-describe.js.map +1 -1
  130. package/esm/cli/app/app-export.js +17 -13
  131. package/esm/cli/app/app-export.js.map +1 -1
  132. package/esm/cli/app/app-import.js +21 -17
  133. package/esm/cli/app/app-import.js.map +1 -1
  134. package/esm/cli/app/app-list.js +12 -8
  135. package/esm/cli/app/app-list.js.map +1 -1
  136. package/esm/cli/app/app.js +8 -12
  137. package/esm/cli/app/app.js.map +1 -1
  138. package/esm/cli/authn/authn-describe.js +30 -0
  139. package/esm/cli/authn/authn-describe.js.map +1 -0
  140. package/esm/cli/authn/authn-export.js +26 -0
  141. package/esm/cli/authn/authn-export.js.map +1 -0
  142. package/esm/cli/authn/authn-import.js +26 -0
  143. package/esm/cli/authn/authn-import.js.map +1 -0
  144. package/esm/cli/authn/authn.js +12 -0
  145. package/esm/cli/authn/authn.js.map +1 -0
  146. package/esm/cli/authz/authz-policy-delete.js +11 -8
  147. package/esm/cli/authz/authz-policy-delete.js.map +1 -1
  148. package/esm/cli/authz/authz-policy-describe.js +8 -5
  149. package/esm/cli/authz/authz-policy-describe.js.map +1 -1
  150. package/esm/cli/authz/authz-policy-export.js +12 -9
  151. package/esm/cli/authz/authz-policy-export.js.map +1 -1
  152. package/esm/cli/authz/authz-policy-import.js +10 -7
  153. package/esm/cli/authz/authz-policy-import.js.map +1 -1
  154. package/esm/cli/authz/authz-policy-list.js +9 -6
  155. package/esm/cli/authz/authz-policy-list.js.map +1 -1
  156. package/esm/cli/authz/authz-policy.js +1 -1
  157. package/esm/cli/authz/authz-policy.js.map +1 -1
  158. package/esm/cli/authz/authz-set-delete.js +10 -7
  159. package/esm/cli/authz/authz-set-delete.js.map +1 -1
  160. package/esm/cli/authz/authz-set-describe.js +8 -5
  161. package/esm/cli/authz/authz-set-describe.js.map +1 -1
  162. package/esm/cli/authz/authz-set-export.js +10 -7
  163. package/esm/cli/authz/authz-set-export.js.map +1 -1
  164. package/esm/cli/authz/authz-set-import.js +10 -7
  165. package/esm/cli/authz/authz-set-import.js.map +1 -1
  166. package/esm/cli/authz/authz-set-list.js +7 -4
  167. package/esm/cli/authz/authz-set-list.js.map +1 -1
  168. package/esm/cli/authz/authz-set.js +1 -1
  169. package/esm/cli/authz/authz-set.js.map +1 -1
  170. package/esm/cli/authz/authz-type-delete.js +12 -9
  171. package/esm/cli/authz/authz-type-delete.js.map +1 -1
  172. package/esm/cli/authz/authz-type-describe.js +9 -6
  173. package/esm/cli/authz/authz-type-describe.js.map +1 -1
  174. package/esm/cli/authz/authz-type-export.js +11 -8
  175. package/esm/cli/authz/authz-type-export.js.map +1 -1
  176. package/esm/cli/authz/authz-type-import.js +12 -9
  177. package/esm/cli/authz/authz-type-import.js.map +1 -1
  178. package/esm/cli/authz/authz-type-list.js +8 -5
  179. package/esm/cli/authz/authz-type-list.js.map +1 -1
  180. package/esm/cli/authz/authz-type.js +1 -1
  181. package/esm/cli/authz/authz-type.js.map +1 -1
  182. package/esm/cli/authz/authz.js +2 -2
  183. package/esm/cli/authz/authz.js.map +1 -1
  184. package/esm/cli/conn/conn-delete.js +2 -2
  185. package/esm/cli/conn/conn-delete.js.map +1 -1
  186. package/esm/cli/conn/conn-describe.js +2 -2
  187. package/esm/cli/conn/conn-describe.js.map +1 -1
  188. package/esm/cli/conn/conn-list.js +2 -2
  189. package/esm/cli/conn/conn-list.js.map +1 -1
  190. package/esm/cli/conn/conn-save.js +31 -15
  191. package/esm/cli/conn/conn-save.js.map +1 -1
  192. package/esm/cli/conn/conn.js +2 -2
  193. package/esm/cli/conn/conn.js.map +1 -1
  194. package/esm/cli/email/email-template-export.js +10 -7
  195. package/esm/cli/email/email-template-export.js.map +1 -1
  196. package/esm/cli/email/email-template-import.js +11 -8
  197. package/esm/cli/email/email-template-import.js.map +1 -1
  198. package/esm/cli/email/email-template-list.js +8 -5
  199. package/esm/cli/email/email-template-list.js.map +1 -1
  200. package/esm/cli/email/email-template.js +1 -1
  201. package/esm/cli/email/email-template.js.map +1 -1
  202. package/esm/cli/email/email.js +2 -2
  203. package/esm/cli/email/email.js.map +1 -1
  204. package/esm/cli/esv/esv-apply.js +18 -8
  205. package/esm/cli/esv/esv-apply.js.map +1 -1
  206. package/esm/cli/esv/esv-secret-create.js +8 -5
  207. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  208. package/esm/cli/esv/esv-secret-delete.js +9 -6
  209. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  210. package/esm/cli/esv/esv-secret-describe.js +8 -5
  211. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  212. package/esm/cli/esv/esv-secret-export.js +19 -5
  213. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  214. package/esm/cli/esv/esv-secret-import.js +7 -4
  215. package/esm/cli/esv/esv-secret-import.js.map +1 -1
  216. package/esm/cli/esv/esv-secret-list.js +8 -5
  217. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  218. package/esm/cli/esv/esv-secret-set.js +8 -5
  219. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  220. package/esm/cli/esv/esv-secret-version-activate.js +8 -5
  221. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  222. package/esm/cli/esv/esv-secret-version-create.js +9 -6
  223. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  224. package/esm/cli/esv/esv-secret-version-deactivate.js +8 -5
  225. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  226. package/esm/cli/esv/esv-secret-version-delete.js +9 -6
  227. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  228. package/esm/cli/esv/esv-secret-version-list.js +8 -5
  229. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  230. package/esm/cli/esv/esv-secret-version.js +1 -1
  231. package/esm/cli/esv/esv-secret-version.js.map +1 -1
  232. package/esm/cli/esv/esv-secret.js +2 -3
  233. package/esm/cli/esv/esv-secret.js.map +1 -1
  234. package/esm/cli/esv/esv-variable-create.js +10 -6
  235. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  236. package/esm/cli/esv/esv-variable-delete.js +10 -7
  237. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  238. package/esm/cli/esv/esv-variable-describe.js +10 -7
  239. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  240. package/esm/cli/esv/esv-variable-export.js +20 -6
  241. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  242. package/esm/cli/esv/esv-variable-import.js +7 -4
  243. package/esm/cli/esv/esv-variable-import.js.map +1 -1
  244. package/esm/cli/esv/esv-variable-list.js +8 -5
  245. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  246. package/esm/cli/esv/esv-variable-set.js +8 -5
  247. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  248. package/esm/cli/esv/esv-variable.js +2 -3
  249. package/esm/cli/esv/esv-variable.js.map +1 -1
  250. package/esm/cli/esv/esv.js +2 -2
  251. package/esm/cli/esv/esv.js.map +1 -1
  252. package/esm/cli/idm/idm-count.js +9 -6
  253. package/esm/cli/idm/idm-count.js.map +1 -1
  254. package/esm/cli/idm/idm-export.js +21 -12
  255. package/esm/cli/idm/idm-export.js.map +1 -1
  256. package/esm/cli/idm/idm-import.js +22 -13
  257. package/esm/cli/idm/idm-import.js.map +1 -1
  258. package/esm/cli/idm/idm-list.js +7 -4
  259. package/esm/cli/idm/idm-list.js.map +1 -1
  260. package/esm/cli/idm/idm.js +2 -2
  261. package/esm/cli/idm/idm.js.map +1 -1
  262. package/esm/cli/idp/idp-export.js +11 -8
  263. package/esm/cli/idp/idp-export.js.map +1 -1
  264. package/esm/cli/idp/idp-import.js +15 -12
  265. package/esm/cli/idp/idp-import.js.map +1 -1
  266. package/esm/cli/idp/idp-list.js +7 -4
  267. package/esm/cli/idp/idp-list.js.map +1 -1
  268. package/esm/cli/idp/idp.js +2 -2
  269. package/esm/cli/idp/idp.js.map +1 -1
  270. package/esm/cli/info/info.js +16 -10
  271. package/esm/cli/info/info.js.map +1 -1
  272. package/esm/cli/journey/journey-delete.js +8 -5
  273. package/esm/cli/journey/journey-delete.js.map +1 -1
  274. package/esm/cli/journey/journey-describe.js +19 -10
  275. package/esm/cli/journey/journey-describe.js.map +1 -1
  276. package/esm/cli/journey/journey-disable.js +12 -6
  277. package/esm/cli/journey/journey-disable.js.map +1 -1
  278. package/esm/cli/journey/journey-enable.js +12 -6
  279. package/esm/cli/journey/journey-enable.js.map +1 -1
  280. package/esm/cli/journey/journey-export.js +21 -9
  281. package/esm/cli/journey/journey-export.js.map +1 -1
  282. package/esm/cli/journey/journey-import.js +11 -8
  283. package/esm/cli/journey/journey-import.js.map +1 -1
  284. package/esm/cli/journey/journey-list.js +6 -3
  285. package/esm/cli/journey/journey-list.js.map +1 -1
  286. package/esm/cli/journey/journey-prune.js +23 -12
  287. package/esm/cli/journey/journey-prune.js.map +1 -1
  288. package/esm/cli/journey/journey.js +2 -2
  289. package/esm/cli/journey/journey.js.map +1 -1
  290. package/esm/cli/{logging/logs-fetch.js → log/log-fetch.js} +68 -36
  291. package/esm/cli/log/log-fetch.js.map +1 -0
  292. package/esm/cli/log/log-key-delete.js +35 -0
  293. package/esm/cli/log/log-key-delete.js.map +1 -0
  294. package/esm/cli/log/log-key-describe.js +22 -0
  295. package/esm/cli/log/log-key-describe.js.map +1 -0
  296. package/esm/cli/log/log-key-list.js +26 -0
  297. package/esm/cli/log/log-key-list.js.map +1 -0
  298. package/esm/cli/log/log-key.js +8 -0
  299. package/esm/cli/log/log-key.js.map +1 -0
  300. package/esm/cli/log/log-list.js +80 -0
  301. package/esm/cli/log/log-list.js.map +1 -0
  302. package/esm/cli/log/log-tail.js +77 -0
  303. package/esm/cli/log/log-tail.js.map +1 -0
  304. package/esm/cli/{logging/logs.js → log/log.js} +6 -3
  305. package/esm/cli/log/log.js.map +1 -0
  306. package/esm/cli/oauth/oauth-client-delete.js +22 -0
  307. package/esm/cli/oauth/oauth-client-delete.js.map +1 -0
  308. package/esm/cli/oauth/oauth-client-describe.js +22 -0
  309. package/esm/cli/oauth/oauth-client-describe.js.map +1 -0
  310. package/esm/cli/oauth/oauth-client-export.js +52 -0
  311. package/esm/cli/oauth/oauth-client-export.js.map +1 -0
  312. package/esm/cli/oauth/oauth-client-import.js +57 -0
  313. package/esm/cli/oauth/oauth-client-import.js.map +1 -0
  314. package/esm/cli/oauth/oauth-client-list.js +25 -0
  315. package/esm/cli/oauth/oauth-client-list.js.map +1 -0
  316. package/esm/cli/oauth/oauth-client.js +14 -0
  317. package/esm/cli/oauth/oauth-client.js.map +1 -0
  318. package/esm/cli/oauth/oauth.js +13 -0
  319. package/esm/cli/oauth/oauth.js.map +1 -0
  320. package/esm/cli/realm/realm-add-custom-domain.js +8 -5
  321. package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
  322. package/esm/cli/realm/realm-describe.js +8 -5
  323. package/esm/cli/realm/realm-describe.js.map +1 -1
  324. package/esm/cli/realm/realm-list.js +8 -5
  325. package/esm/cli/realm/realm-list.js.map +1 -1
  326. package/esm/cli/realm/realm-remove-custom-domain.js +11 -5
  327. package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
  328. package/esm/cli/realm/realm.js +2 -2
  329. package/esm/cli/realm/realm.js.map +1 -1
  330. package/esm/cli/saml/saml-cot-export.js +10 -7
  331. package/esm/cli/saml/saml-cot-export.js.map +1 -1
  332. package/esm/cli/saml/saml-cot-import.js +15 -12
  333. package/esm/cli/saml/saml-cot-import.js.map +1 -1
  334. package/esm/cli/saml/saml-cot-list.js +8 -5
  335. package/esm/cli/saml/saml-cot-list.js.map +1 -1
  336. package/esm/cli/saml/saml-cot.js +1 -1
  337. package/esm/cli/saml/saml-cot.js.map +1 -1
  338. package/esm/cli/saml/saml-delete.js +14 -7
  339. package/esm/cli/saml/saml-delete.js.map +1 -1
  340. package/esm/cli/saml/saml-describe.js +8 -5
  341. package/esm/cli/saml/saml-describe.js.map +1 -1
  342. package/esm/cli/saml/saml-export.js +10 -7
  343. package/esm/cli/saml/saml-export.js.map +1 -1
  344. package/esm/cli/saml/saml-import.js +11 -8
  345. package/esm/cli/saml/saml-import.js.map +1 -1
  346. package/esm/cli/saml/saml-list.js +8 -5
  347. package/esm/cli/saml/saml-list.js.map +1 -1
  348. package/esm/cli/saml/saml-metadata-export.js +9 -6
  349. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  350. package/esm/cli/saml/saml-metadata.js +1 -1
  351. package/esm/cli/saml/saml-metadata.js.map +1 -1
  352. package/esm/cli/saml/saml.js +2 -2
  353. package/esm/cli/saml/saml.js.map +1 -1
  354. package/esm/cli/script/script-delete.js +7 -4
  355. package/esm/cli/script/script-delete.js.map +1 -1
  356. package/esm/cli/script/script-describe.js +7 -4
  357. package/esm/cli/script/script-describe.js.map +1 -1
  358. package/esm/cli/script/script-export.js +8 -5
  359. package/esm/cli/script/script-export.js.map +1 -1
  360. package/esm/cli/script/script-import.js +9 -6
  361. package/esm/cli/script/script-import.js.map +1 -1
  362. package/esm/cli/script/script-list.js +8 -5
  363. package/esm/cli/script/script-list.js.map +1 -1
  364. package/esm/cli/script/script.js +2 -2
  365. package/esm/cli/script/script.js.map +1 -1
  366. package/esm/cli/service/service-delete.js +8 -5
  367. package/esm/cli/service/service-delete.js.map +1 -1
  368. package/esm/cli/service/service-export.js +9 -6
  369. package/esm/cli/service/service-export.js.map +1 -1
  370. package/esm/cli/service/service-import.js +11 -9
  371. package/esm/cli/service/service-import.js.map +1 -1
  372. package/esm/cli/service/service-list.js +7 -4
  373. package/esm/cli/service/service-list.js.map +1 -1
  374. package/esm/cli/service/service.js +2 -2
  375. package/esm/cli/service/service.js.map +1 -1
  376. package/esm/cli/shell/shell.js +57 -0
  377. package/esm/cli/shell/shell.js.map +1 -0
  378. package/esm/cli/theme/theme-delete.js +10 -7
  379. package/esm/cli/theme/theme-delete.js.map +1 -1
  380. package/esm/cli/theme/theme-export.js +11 -8
  381. package/esm/cli/theme/theme-export.js.map +1 -1
  382. package/esm/cli/theme/theme-import.js +12 -9
  383. package/esm/cli/theme/theme-import.js.map +1 -1
  384. package/esm/cli/theme/theme-list.js +7 -4
  385. package/esm/cli/theme/theme-list.js.map +1 -1
  386. package/esm/cli/theme/theme.js +2 -2
  387. package/esm/cli/theme/theme.js.map +1 -1
  388. package/esm/help/SampleData.js +7 -0
  389. package/esm/help/SampleData.js.map +1 -0
  390. package/esm/launch.js +1 -1
  391. package/esm/launch.js.map +1 -1
  392. package/esm/loader.js +2 -2
  393. package/esm/loader.js.map +1 -1
  394. package/esm/ops/AdminFederationOps.js +225 -0
  395. package/esm/ops/AdminFederationOps.js.map +1 -0
  396. package/esm/ops/AgentOps.js +128 -87
  397. package/esm/ops/AgentOps.js.map +1 -1
  398. package/esm/ops/ApplicationOps.js +315 -0
  399. package/esm/ops/ApplicationOps.js.map +1 -0
  400. package/esm/ops/AuthenticationSettingsOps.js +89 -0
  401. package/esm/ops/AuthenticationSettingsOps.js.map +1 -0
  402. package/esm/ops/CirclesOfTrustOps.js +72 -59
  403. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  404. package/esm/ops/ConnectionProfileOps.js +13 -6
  405. package/esm/ops/ConnectionProfileOps.js.map +1 -1
  406. package/esm/ops/EmailTemplateOps.js +76 -64
  407. package/esm/ops/EmailTemplateOps.js.map +1 -1
  408. package/esm/ops/IdmOps.js +70 -84
  409. package/esm/ops/IdmOps.js.map +1 -1
  410. package/esm/ops/IdpOps.js +74 -43
  411. package/esm/ops/IdpOps.js.map +1 -1
  412. package/esm/ops/JourneyOps.js +99 -67
  413. package/esm/ops/JourneyOps.js.map +1 -1
  414. package/esm/ops/LogOps.js +92 -30
  415. package/esm/ops/LogOps.js.map +1 -1
  416. package/esm/ops/NodeOps.js +6 -3
  417. package/esm/ops/NodeOps.js.map +1 -1
  418. package/esm/ops/OAuth2ClientOps.js +51 -32
  419. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  420. package/esm/ops/OrganizationOps.js +14 -22
  421. package/esm/ops/OrganizationOps.js.map +1 -1
  422. package/esm/ops/PolicyOps.js +84 -55
  423. package/esm/ops/PolicyOps.js.map +1 -1
  424. package/esm/ops/PolicySetOps.js +67 -43
  425. package/esm/ops/PolicySetOps.js.map +1 -1
  426. package/esm/ops/RealmOps.js +18 -11
  427. package/esm/ops/RealmOps.js.map +1 -1
  428. package/esm/ops/ResourceTypeOps.js +75 -66
  429. package/esm/ops/ResourceTypeOps.js.map +1 -1
  430. package/esm/ops/Saml2Ops.js +76 -54
  431. package/esm/ops/Saml2Ops.js.map +1 -1
  432. package/esm/ops/Saml2Ops.test_.js.map +1 -1
  433. package/esm/ops/ScriptOps.js +92 -31
  434. package/esm/ops/ScriptOps.js.map +1 -1
  435. package/esm/ops/SecretsOps.js +106 -23
  436. package/esm/ops/SecretsOps.js.map +1 -1
  437. package/esm/ops/ServiceOps.js +67 -41
  438. package/esm/ops/ServiceOps.js.map +1 -1
  439. package/esm/ops/ThemeOps.js +62 -36
  440. package/esm/ops/ThemeOps.js.map +1 -1
  441. package/esm/ops/VariablesOps.js +132 -41
  442. package/esm/ops/VariablesOps.js.map +1 -1
  443. package/esm/ops/utils/OpsUtils.js +1 -1
  444. package/esm/ops/utils/OpsUtils.js.map +1 -1
  445. package/esm/ops/utils/Wordwrap.js +1 -1
  446. package/esm/ops/utils/Wordwrap.js.map +1 -1
  447. package/esm/storage/StaticStorage.js +1 -1
  448. package/esm/storage/StaticStorage.js.map +1 -1
  449. package/esm/utils/Config.js +7 -4
  450. package/esm/utils/Config.js.map +1 -1
  451. package/esm/utils/Console.js +9 -5
  452. package/esm/utils/Console.js.map +1 -1
  453. package/esm/utils/ExportImportUtils.js +32 -66
  454. package/esm/utils/ExportImportUtils.js.map +1 -1
  455. package/esm/utils/Version.js +19 -16
  456. package/esm/utils/Version.js.map +1 -1
  457. package/global-jest-setup.js +4 -0
  458. package/package.json +46 -35
  459. package/esm/cli/logging/logs-fetch.js.map +0 -1
  460. package/esm/cli/logging/logs-list.js +0 -49
  461. package/esm/cli/logging/logs-list.js.map +0 -1
  462. package/esm/cli/logging/logs-tail.js +0 -46
  463. package/esm/cli/logging/logs-tail.js.map +0 -1
  464. package/esm/cli/logging/logs.js.map +0 -1
  465. package/esm/cli/theme/theme-delete.e2e.test_.js.map +0 -1
  466. package/esm/cli/theme/theme-list.e2e.test_.js.map +0 -1
@@ -2,6 +2,26 @@ import { frodo, state } from '@rockcarver/frodo-lib';
2
2
  import fs from 'fs';
3
3
  import { createObjectTable, createProgressBar, createTable, debugMessage, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
4
4
  import { getTypedFilename, saveJsonToFile, titleCase } from '../utils/ExportImportUtils';
5
+ const {
6
+ getRealmName,
7
+ getFilePath,
8
+ getWorkingDirectory
9
+ } = frodo.utils;
10
+ const {
11
+ readResourceTypes,
12
+ readResourceType,
13
+ readResourceTypeByName,
14
+ exportResourceType,
15
+ exportResourceTypeByName,
16
+ exportResourceTypes,
17
+ importResourceType,
18
+ importResourceTypeByName,
19
+ importFirstResourceType,
20
+ importResourceTypes,
21
+ deleteResourceType,
22
+ deleteResourceTypeByName
23
+ } = frodo.authz.resourceType;
24
+
5
25
  /**
6
26
  * List resource types
7
27
  * @param {boolean} long more fields
@@ -10,7 +30,7 @@ import { getTypedFilename, saveJsonToFile, titleCase } from '../utils/ExportImpo
10
30
  export async function listResourceTypes(long = false) {
11
31
  let outcome = false;
12
32
  try {
13
- const resourceTypes = await frodo.authz.resourceType.getResourceTypes();
33
+ const resourceTypes = await readResourceTypes();
14
34
  resourceTypes.sort((a, b) => a.name.localeCompare(b.name));
15
35
  if (long) {
16
36
  const table = createTable(['Name', 'Description', 'Uuid']);
@@ -40,7 +60,7 @@ export async function listResourceTypes(long = false) {
40
60
  export async function describeResourceType(resourceTypeUuid, json = false) {
41
61
  let outcome = false;
42
62
  try {
43
- const resourceType = await frodo.authz.resourceType.getResourceType(resourceTypeUuid);
63
+ const resourceType = await readResourceType(resourceTypeUuid);
44
64
  if (json) {
45
65
  printMessage(resourceType, 'data');
46
66
  } else {
@@ -53,8 +73,8 @@ export async function describeResourceType(resourceTypeUuid, json = false) {
53
73
  if (((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) === 404) {
54
74
  printMessage(`Resource Type with uuid ${resourceTypeUuid} does not exist in realm ${state.getRealm()}`, 'error');
55
75
  } else {
56
- var _error$response2, _error$response2$data;
57
- printMessage(((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : (_error$response2$data = _error$response2.data) === null || _error$response2$data === void 0 ? void 0 : _error$response2$data.message) || error.message, 'error');
76
+ var _error$response2;
77
+ printMessage(((_error$response2 = error.response) === null || _error$response2 === void 0 || (_error$response2 = _error$response2.data) === null || _error$response2 === void 0 ? void 0 : _error$response2.message) || error.message, 'error');
58
78
  }
59
79
  }
60
80
  return outcome;
@@ -69,7 +89,7 @@ export async function describeResourceType(resourceTypeUuid, json = false) {
69
89
  export async function describeResourceTypeByName(resourceTypeName, json = false) {
70
90
  let outcome = false;
71
91
  try {
72
- const resourceType = await frodo.authz.resourceType.getResourceTypeByName(resourceTypeName);
92
+ const resourceType = await readResourceTypeByName(resourceTypeName);
73
93
  if (json) {
74
94
  printMessage(resourceType, 'data');
75
95
  } else {
@@ -82,8 +102,8 @@ export async function describeResourceTypeByName(resourceTypeName, json = false)
82
102
  if (((_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.status) === 404) {
83
103
  printMessage(`Resource Type with name ${resourceTypeName} does not exist in realm ${state.getRealm()}`, 'error');
84
104
  } else {
85
- var _error$response4, _error$response4$data;
86
- printMessage(((_error$response4 = error.response) === null || _error$response4 === void 0 ? void 0 : (_error$response4$data = _error$response4.data) === null || _error$response4$data === void 0 ? void 0 : _error$response4$data.message) || error.message, 'error');
105
+ var _error$response4;
106
+ printMessage(((_error$response4 = error.response) === null || _error$response4 === void 0 || (_error$response4 = _error$response4.data) === null || _error$response4 === void 0 ? void 0 : _error$response4.message) || error.message, 'error');
87
107
  }
88
108
  }
89
109
  return outcome;
@@ -94,26 +114,18 @@ export async function describeResourceTypeByName(resourceTypeName, json = false)
94
114
  * @param {string} resourceTypeUuid resource type uuid
95
115
  * @returns {Promise<boolean>} true if successful, false otherwise
96
116
  */
97
- export async function deleteResourceType(resourceTypeUuid) {
117
+ export async function deleteResourceTypeById(resourceTypeUuid) {
98
118
  debugMessage(`cli.ResourceTypeOps.deleteResourceType: begin`);
99
119
  showSpinner(`Deleting ${resourceTypeUuid}...`);
100
120
  let outcome = false;
101
- const errors = [];
102
121
  try {
103
122
  debugMessage(`Deleting resource type ${resourceTypeUuid}`);
104
- await frodo.authz.resourceType.deleteResourceType(resourceTypeUuid);
105
- } catch (error) {
106
- errors.push(error);
107
- }
108
- if (errors.length) {
109
- const errorMessages = errors.map(error => {
110
- var _error$response5, _error$response5$data;
111
- return ((_error$response5 = error.response) === null || _error$response5 === void 0 ? void 0 : (_error$response5$data = _error$response5.data) === null || _error$response5$data === void 0 ? void 0 : _error$response5$data.message) || error.message;
112
- }).join('\n');
113
- failSpinner(`Error deleting ${resourceTypeUuid}: ${errorMessages}`);
114
- } else {
123
+ await deleteResourceType(resourceTypeUuid);
115
124
  succeedSpinner(`Deleted ${resourceTypeUuid}.`);
116
125
  outcome = true;
126
+ } catch (error) {
127
+ var _error$response5;
128
+ failSpinner(`Error deleting ${resourceTypeUuid}: ${((_error$response5 = error.response) === null || _error$response5 === void 0 || (_error$response5 = _error$response5.data) === null || _error$response5 === void 0 ? void 0 : _error$response5.message) || error.message}`);
117
129
  }
118
130
  debugMessage(`cli.ResourceTypeOps.deleteResourceType: end [outcome=${outcome}]`);
119
131
  return outcome;
@@ -124,26 +136,18 @@ export async function deleteResourceType(resourceTypeUuid) {
124
136
  * @param {string} resourceTypeName resource type name
125
137
  * @returns {Promise<boolean>} true if successful, false otherwise
126
138
  */
127
- export async function deleteResourceTypeByName(resourceTypeName) {
139
+ export async function deleteResourceTypeUsingName(resourceTypeName) {
128
140
  debugMessage(`cli.ResourceTypeOps.deleteResourceTypeByName: begin`);
129
141
  showSpinner(`Deleting ${resourceTypeName}...`);
130
142
  let outcome = false;
131
- const errors = [];
132
143
  try {
133
144
  debugMessage(`Deleting resource type ${resourceTypeName}`);
134
- await frodo.authz.resourceType.deleteResourceTypeByName(resourceTypeName);
135
- } catch (error) {
136
- errors.push(error);
137
- }
138
- if (errors.length) {
139
- const errorMessages = errors.map(error => {
140
- var _error$response6, _error$response6$data;
141
- return ((_error$response6 = error.response) === null || _error$response6 === void 0 ? void 0 : (_error$response6$data = _error$response6.data) === null || _error$response6$data === void 0 ? void 0 : _error$response6$data.message) || error.message;
142
- }).join('\n');
143
- failSpinner(`Error deleting ${resourceTypeName}: ${errorMessages}`);
144
- } else {
145
+ await deleteResourceTypeByName(resourceTypeName);
145
146
  succeedSpinner(`Deleted ${resourceTypeName}.`);
146
147
  outcome = true;
148
+ } catch (error) {
149
+ var _error$response6;
150
+ failSpinner(`Error deleting ${resourceTypeName}: ${((_error$response6 = error.response) === null || _error$response6 === void 0 || (_error$response6 = _error$response6.data) === null || _error$response6 === void 0 ? void 0 : _error$response6.message) || error.message}`);
147
151
  }
148
152
  debugMessage(`cli.ResourceTypeOps.deleteResourceTypeByName: end [outcome=${outcome}]`);
149
153
  return outcome;
@@ -161,7 +165,7 @@ export async function deleteResourceTypes() {
161
165
  try {
162
166
  showSpinner(`Retrieving all resource types...`);
163
167
  try {
164
- resourceTypes = await frodo.authz.resourceType.getResourceTypes();
168
+ resourceTypes = await readResourceTypes();
165
169
  succeedSpinner(`Found ${resourceTypes.length} resource types.`);
166
170
  } catch (error) {
167
171
  error.message = `Error retrieving all resource types: ${error.message}`;
@@ -173,7 +177,7 @@ export async function deleteResourceTypes() {
173
177
  const resourceTypeId = resourceType.uuid;
174
178
  try {
175
179
  debugMessage(`Deleting resource type ${resourceTypeId}`);
176
- await frodo.authz.resourceType.deleteResourceType(resourceTypeId);
180
+ await deleteResourceType(resourceTypeId);
177
181
  updateProgressBar(`Deleted ${resourceTypeId}`);
178
182
  } catch (error) {
179
183
  error.message = `Error deleting resource type ${resourceTypeId}: ${error}`;
@@ -212,9 +216,10 @@ export async function exportResourceTypeToFile(resourceTypeUuid, file) {
212
216
  if (file) {
213
217
  fileName = file;
214
218
  }
215
- const exportData = await frodo.authz.resourceType.exportResourceType(resourceTypeUuid);
216
- saveJsonToFile(exportData, fileName);
217
- succeedSpinner(`Exported ${resourceTypeUuid} to ${fileName}.`);
219
+ const filePath = getFilePath(fileName, true);
220
+ const exportData = await exportResourceType(resourceTypeUuid);
221
+ saveJsonToFile(exportData, filePath);
222
+ succeedSpinner(`Exported ${resourceTypeUuid} to ${filePath}.`);
218
223
  outcome = true;
219
224
  } catch (error) {
220
225
  failSpinner(`Error exporting ${resourceTypeUuid}: ${error.message}`);
@@ -238,9 +243,10 @@ export async function exportResourceTypeByNameToFile(resourceTypeName, file) {
238
243
  if (file) {
239
244
  fileName = file;
240
245
  }
241
- const exportData = await frodo.authz.resourceType.exportResourceTypeByName(resourceTypeName);
242
- saveJsonToFile(exportData, fileName);
243
- succeedSpinner(`Exported ${resourceTypeName} to ${fileName}.`);
246
+ const filePath = getFilePath(fileName, true);
247
+ const exportData = await exportResourceTypeByName(resourceTypeName);
248
+ saveJsonToFile(exportData, filePath);
249
+ succeedSpinner(`Exported ${resourceTypeName} to ${filePath}.`);
244
250
  outcome = true;
245
251
  } catch (error) {
246
252
  failSpinner(`Error exporting ${resourceTypeName}: ${error.message}`);
@@ -259,13 +265,14 @@ export async function exportResourceTypesToFile(file) {
259
265
  debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFile: begin`);
260
266
  showSpinner(`Exporting all resource types...`);
261
267
  try {
262
- let fileName = getTypedFilename(`all${titleCase(frodo.helper.utils.getRealmName(state.getRealm()))}ResourceTypes`, 'resourcetype.authz');
268
+ let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm()))}ResourceTypes`, 'resourcetype.authz');
263
269
  if (file) {
264
270
  fileName = file;
265
271
  }
266
- const exportData = await frodo.authz.resourceType.exportResourceTypes();
267
- saveJsonToFile(exportData, fileName);
268
- succeedSpinner(`Exported all resource types to ${fileName}.`);
272
+ const filePath = getFilePath(fileName, true);
273
+ const exportData = await exportResourceTypes();
274
+ saveJsonToFile(exportData, filePath);
275
+ succeedSpinner(`Exported all resource types to ${filePath}.`);
269
276
  outcome = true;
270
277
  } catch (error) {
271
278
  failSpinner(`Error exporting resource types: ${error.message}`);
@@ -282,13 +289,13 @@ export async function exportResourceTypesToFiles() {
282
289
  debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFiles: begin`);
283
290
  const errors = [];
284
291
  try {
285
- const resourceTypes = await frodo.authz.resourceType.getResourceTypes();
292
+ const resourceTypes = await readResourceTypes();
286
293
  createProgressBar(resourceTypes.length, 'Exporting resource types...');
287
294
  for (const resourceType of resourceTypes) {
288
295
  const file = getTypedFilename(resourceType.name, 'resourcetype.authz');
289
296
  try {
290
- const exportData = await frodo.authz.resourceType.exportResourceType(resourceType.uuid);
291
- saveJsonToFile(exportData, file);
297
+ const exportData = await exportResourceType(resourceType.uuid);
298
+ saveJsonToFile(exportData, getFilePath(file, true));
292
299
  updateProgressBar(`Exported ${resourceType.name}.`);
293
300
  } catch (error) {
294
301
  errors.push(error);
@@ -315,9 +322,9 @@ export async function importResourceTypeFromFile(resourceTypeId, file) {
315
322
  debugMessage(`cli.ResourceTypeOps.importResourceTypeFromFile: begin`);
316
323
  showSpinner(`Importing ${resourceTypeId}...`);
317
324
  try {
318
- const data = fs.readFileSync(file, 'utf8');
325
+ const data = fs.readFileSync(getFilePath(file), 'utf8');
319
326
  const fileData = JSON.parse(data);
320
- await frodo.authz.resourceType.importResourceType(resourceTypeId, fileData);
327
+ await importResourceType(resourceTypeId, fileData);
321
328
  outcome = true;
322
329
  succeedSpinner(`Imported ${resourceTypeId}.`);
323
330
  } catch (error) {
@@ -339,9 +346,9 @@ export async function importResourceTypeByNameFromFile(resourceTypeName, file) {
339
346
  debugMessage(`cli.ResourceTypeOps.importResourceTypeByNameFromFile: begin`);
340
347
  showSpinner(`Importing ${resourceTypeName}...`);
341
348
  try {
342
- const data = fs.readFileSync(file, 'utf8');
349
+ const data = fs.readFileSync(getFilePath(file), 'utf8');
343
350
  const fileData = JSON.parse(data);
344
- await frodo.authz.resourceType.importResourceTypeByName(resourceTypeName, fileData);
351
+ await importResourceTypeByName(resourceTypeName, fileData);
345
352
  outcome = true;
346
353
  succeedSpinner(`Imported ${resourceTypeName}.`);
347
354
  } catch (error) {
@@ -360,15 +367,16 @@ export async function importResourceTypeByNameFromFile(resourceTypeName, file) {
360
367
  export async function importFirstResourceTypeFromFile(file) {
361
368
  let outcome = false;
362
369
  debugMessage(`cli.ResourceTypeOps.importFirstResourceTypeFromFile: begin`);
363
- showSpinner(`Importing ${file}...`);
370
+ const filePath = getFilePath(file);
371
+ showSpinner(`Importing ${filePath}...`);
364
372
  try {
365
- const data = fs.readFileSync(file, 'utf8');
373
+ const data = fs.readFileSync(filePath, 'utf8');
366
374
  const fileData = JSON.parse(data);
367
- await frodo.authz.resourceType.importFirstResourceType(fileData);
375
+ await importFirstResourceType(fileData);
368
376
  outcome = true;
369
- succeedSpinner(`Imported ${file}.`);
377
+ succeedSpinner(`Imported ${filePath}.`);
370
378
  } catch (error) {
371
- failSpinner(`Error importing ${file}.`);
379
+ failSpinner(`Error importing ${filePath}.`);
372
380
  printMessage(error, 'error');
373
381
  }
374
382
  debugMessage(`cli.ResourceTypeOps.importFirstResourceTypeFromFile: end`);
@@ -383,15 +391,16 @@ export async function importFirstResourceTypeFromFile(file) {
383
391
  export async function importResourceTypesFromFile(file) {
384
392
  let outcome = false;
385
393
  debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFile: begin`);
386
- showSpinner(`Importing ${file}...`);
394
+ const filePath = getFilePath(file);
395
+ showSpinner(`Importing ${filePath}...`);
387
396
  try {
388
- const data = fs.readFileSync(file, 'utf8');
397
+ const data = fs.readFileSync(filePath, 'utf8');
389
398
  const fileData = JSON.parse(data);
390
- await frodo.authz.resourceType.importResourceTypes(fileData);
399
+ await importResourceTypes(fileData);
391
400
  outcome = true;
392
- succeedSpinner(`Imported ${file}.`);
401
+ succeedSpinner(`Imported ${filePath}.`);
393
402
  } catch (error) {
394
- failSpinner(`Error importing ${file}.`);
403
+ failSpinner(`Error importing ${filePath}.`);
395
404
  printMessage(error, 'error');
396
405
  }
397
406
  debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFile: end`);
@@ -406,8 +415,8 @@ export async function importResourceTypesFromFiles() {
406
415
  const errors = [];
407
416
  try {
408
417
  debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFiles: begin`);
409
- const names = fs.readdirSync('.');
410
- const files = names.filter(name => name.toLowerCase().endsWith('.resourcetype.authz.json'));
418
+ const names = fs.readdirSync(getWorkingDirectory());
419
+ const files = names.filter(name => name.toLowerCase().endsWith('.resourcetype.authz.json')).map(name => getFilePath(name));
411
420
  createProgressBar(files.length, 'Importing resource types...');
412
421
  let total = 0;
413
422
  for (const file of files) {
@@ -416,7 +425,7 @@ export async function importResourceTypesFromFiles() {
416
425
  const fileData = JSON.parse(data);
417
426
  const count = Object.keys(fileData.resourcetype).length;
418
427
  total += count;
419
- await frodo.authz.resourceType.importResourceTypes(fileData);
428
+ await importResourceTypes(fileData);
420
429
  updateProgressBar(`Imported ${count} resource types from ${file}`);
421
430
  } catch (error) {
422
431
  errors.push(error);
@@ -433,4 +442,4 @@ export async function importResourceTypesFromFiles() {
433
442
  debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFiles: end`);
434
443
  return 0 === errors.length;
435
444
  }
436
- //# sourceMappingURL=ResourceTypeOps.js.map
445
+ //# sourceMappingURL=ResourceTypeOps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceTypeOps.js","names":["frodo","state","fs","createObjectTable","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","titleCase","listResourceTypes","long","outcome","resourceTypes","authz","resourceType","getResourceTypes","sort","a","b","name","localeCompare","table","push","description","uuid","toString","err","message","describeResourceType","resourceTypeUuid","json","getResourceType","error","_error$response","response","status","getRealm","_error$response2","_error$response2$data","data","describeResourceTypeByName","resourceTypeName","getResourceTypeByName","_error$response3","_error$response4","_error$response4$data","deleteResourceType","errors","length","errorMessages","map","_error$response5","_error$response5$data","join","deleteResourceTypeByName","_error$response6","_error$response6$data","deleteResourceTypes","resourceTypeId","exportResourceTypeToFile","file","fileName","exportData","exportResourceType","exportResourceTypeByNameToFile","exportResourceTypeByName","exportResourceTypesToFile","helper","utils","getRealmName","exportResourceTypes","exportResourceTypesToFiles","importResourceTypeFromFile","readFileSync","fileData","JSON","parse","importResourceType","importResourceTypeByNameFromFile","importResourceTypeByName","importFirstResourceTypeFromFile","importFirstResourceType","importResourceTypesFromFile","importResourceTypes","importResourceTypesFromFiles","names","readdirSync","files","filter","toLowerCase","endsWith","total","count","Object","keys","resourcetype"],"sources":["ops/ResourceTypeOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport type { ResourceTypeSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport {\n createObjectTable,\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport { ResourceTypeExportInterface } from '@rockcarver/frodo-lib/types/ops/ResourceTypeOps';\n\n/**\n * List resource types\n * @param {boolean} long more fields\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listResourceTypes(long = false): Promise<boolean> {\n let outcome = false;\n try {\n const resourceTypes = await frodo.authz.resourceType.getResourceTypes();\n resourceTypes.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable(['Name', 'Description', 'Uuid']);\n for (const resourceType of resourceTypes) {\n table.push([\n `${resourceType.name}`,\n `${resourceType.description}`,\n `${resourceType.uuid}`,\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n for (const resourceType of resourceTypes) {\n printMessage(`${resourceType.name}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listResourceTypes ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * Describe resource type by uuid\n * @param {string} resourceTypeUuid resource type uuid\n * @param {boolean} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeResourceType(\n resourceTypeUuid: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const resourceType = await frodo.authz.resourceType.getResourceType(\n resourceTypeUuid\n );\n if (json) {\n printMessage(resourceType, 'data');\n } else {\n const table = createObjectTable(resourceType);\n printMessage(table.toString(), 'data');\n }\n outcome = true;\n } catch (error) {\n if (error.response?.status === 404) {\n printMessage(\n `Resource Type with uuid ${resourceTypeUuid} does not exist in realm ${state.getRealm()}`,\n 'error'\n );\n } else {\n printMessage(error.response?.data?.message || error.message, 'error');\n }\n }\n return outcome;\n}\n\n/**\n * Describe resource type by name\n * @param {string} resourceTypeName resource type name\n * @param {boolean} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeResourceTypeByName(\n resourceTypeName: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const resourceType = await frodo.authz.resourceType.getResourceTypeByName(\n resourceTypeName\n );\n if (json) {\n printMessage(resourceType, 'data');\n } else {\n const table = createObjectTable(resourceType);\n printMessage(table.toString(), 'data');\n }\n outcome = true;\n } catch (error) {\n if (error.response?.status === 404) {\n printMessage(\n `Resource Type with name ${resourceTypeName} does not exist in realm ${state.getRealm()}`,\n 'error'\n );\n } else {\n printMessage(error.response?.data?.message || error.message, 'error');\n }\n }\n return outcome;\n}\n\n/**\n * Delete resource type by uuid\n * @param {string} resourceTypeUuid resource type uuid\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteResourceType(\n resourceTypeUuid: string\n): Promise<boolean | ResourceTypeSkeleton> {\n debugMessage(`cli.ResourceTypeOps.deleteResourceType: begin`);\n showSpinner(`Deleting ${resourceTypeUuid}...`);\n let outcome = false;\n const errors = [];\n try {\n debugMessage(`Deleting resource type ${resourceTypeUuid}`);\n await frodo.authz.resourceType.deleteResourceType(resourceTypeUuid);\n } catch (error) {\n errors.push(error);\n }\n if (errors.length) {\n const errorMessages = errors\n .map((error) => error.response?.data?.message || error.message)\n .join('\\n');\n failSpinner(`Error deleting ${resourceTypeUuid}: ${errorMessages}`);\n } else {\n succeedSpinner(`Deleted ${resourceTypeUuid}.`);\n outcome = true;\n }\n debugMessage(\n `cli.ResourceTypeOps.deleteResourceType: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Delete resource type by name\n * @param {string} resourceTypeName resource type name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteResourceTypeByName(\n resourceTypeName: string\n): Promise<boolean | ResourceTypeSkeleton> {\n debugMessage(`cli.ResourceTypeOps.deleteResourceTypeByName: begin`);\n showSpinner(`Deleting ${resourceTypeName}...`);\n let outcome = false;\n const errors = [];\n try {\n debugMessage(`Deleting resource type ${resourceTypeName}`);\n await frodo.authz.resourceType.deleteResourceTypeByName(resourceTypeName);\n } catch (error) {\n errors.push(error);\n }\n if (errors.length) {\n const errorMessages = errors\n .map((error) => error.response?.data?.message || error.message)\n .join('\\n');\n failSpinner(`Error deleting ${resourceTypeName}: ${errorMessages}`);\n } else {\n succeedSpinner(`Deleted ${resourceTypeName}.`);\n outcome = true;\n }\n debugMessage(\n `cli.ResourceTypeOps.deleteResourceTypeByName: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Delete all resource types\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteResourceTypes(): Promise<\n boolean | ResourceTypeSkeleton\n> {\n debugMessage(`cli.ResourceTypeOps.deleteResourceTypes: begin`);\n let outcome = false;\n const errors = [];\n let resourceTypes: ResourceTypeSkeleton[] = [];\n try {\n showSpinner(`Retrieving all resource types...`);\n try {\n resourceTypes = await frodo.authz.resourceType.getResourceTypes();\n succeedSpinner(`Found ${resourceTypes.length} resource types.`);\n } catch (error) {\n error.message = `Error retrieving all resource types: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (resourceTypes.length)\n createProgressBar(\n resourceTypes.length,\n `Deleting ${resourceTypes.length} resource types...`\n );\n for (const resourceType of resourceTypes) {\n const resourceTypeId = resourceType.uuid;\n try {\n debugMessage(`Deleting resource type ${resourceTypeId}`);\n await frodo.authz.resourceType.deleteResourceType(resourceTypeId);\n updateProgressBar(`Deleted ${resourceTypeId}`);\n } catch (error) {\n error.message = `Error deleting resource type ${resourceTypeId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting resource types: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (resourceTypes.length)\n stopProgressBar(`Error deleting all resource types: ${errorMessages}`);\n } else {\n if (resourceTypes.length)\n stopProgressBar(`Deleted ${resourceTypes.length} resource types.`);\n outcome = true;\n }\n }\n debugMessage(\n `cli.ResourceTypeOps.deleteResourceTypes: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export resource type to file\n * @param {string} resourceTypeUuid resource type uuid\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypeToFile(\n resourceTypeUuid: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeToFile: begin`);\n showSpinner(`Exporting ${resourceTypeUuid}...`);\n try {\n let fileName = getTypedFilename(resourceTypeUuid, 'resourcetype.authz');\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.authz.resourceType.exportResourceType(\n resourceTypeUuid\n );\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${resourceTypeUuid} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${resourceTypeUuid}: ${error.message}`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeToFile: end`);\n return outcome;\n}\n\n/**\n * Export resource type by name to file\n * @param {string} resourceTypeName resource type name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypeByNameToFile(\n resourceTypeName: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeByNameToFile: begin`);\n showSpinner(`Exporting ${resourceTypeName}...`);\n try {\n let fileName = getTypedFilename(resourceTypeName, 'resourcetype.authz');\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.authz.resourceType.exportResourceTypeByName(\n resourceTypeName\n );\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${resourceTypeName} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${resourceTypeName}: ${error.message}`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeByNameToFile: end`);\n return outcome;\n}\n\n/**\n * Export resource types to file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypesToFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFile: begin`);\n showSpinner(`Exporting all resource types...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(\n frodo.helper.utils.getRealmName(state.getRealm())\n )}ResourceTypes`,\n 'resourcetype.authz'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.authz.resourceType.exportResourceTypes();\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all resource types to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting resource types: ${error.message}`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFile: end`);\n return outcome;\n}\n\n/**\n * Export all resource types to separate files\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypesToFiles(): Promise<boolean> {\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFiles: begin`);\n const errors = [];\n try {\n const resourceTypes: ResourceTypeSkeleton[] =\n await frodo.authz.resourceType.getResourceTypes();\n createProgressBar(resourceTypes.length, 'Exporting resource types...');\n for (const resourceType of resourceTypes) {\n const file = getTypedFilename(resourceType.name, 'resourcetype.authz');\n try {\n const exportData: ResourceTypeExportInterface =\n await frodo.authz.resourceType.exportResourceType(resourceType.uuid);\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${resourceType.name}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${resourceType.name}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting resource types to files`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import resource type from file\n * @param {string} resourceTypeId resource type id\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypeFromFile(\n resourceTypeId: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importResourceTypeFromFile: begin`);\n showSpinner(`Importing ${resourceTypeId}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.authz.resourceType.importResourceType(resourceTypeId, fileData);\n outcome = true;\n succeedSpinner(`Imported ${resourceTypeId}.`);\n } catch (error) {\n failSpinner(`Error importing ${resourceTypeId}: ${error.message}`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypeFromFile: end`);\n return outcome;\n}\n\n/**\n * Import resource type by name from file\n * @param {string} resourceTypeName resource type name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypeByNameFromFile(\n resourceTypeName: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importResourceTypeByNameFromFile: begin`);\n showSpinner(`Importing ${resourceTypeName}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.authz.resourceType.importResourceTypeByName(\n resourceTypeName,\n fileData\n );\n outcome = true;\n succeedSpinner(`Imported ${resourceTypeName}.`);\n } catch (error) {\n failSpinner(`Error importing ${resourceTypeName}: ${error.message}`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypeByNameFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first resource type from file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstResourceTypeFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importFirstResourceTypeFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.authz.resourceType.importFirstResourceType(fileData);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importFirstResourceTypeFromFile: end`);\n return outcome;\n}\n\n/**\n * Import resource types from file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypesFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await frodo.authz.resourceType.importResourceTypes(fileData);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFile: end`);\n return outcome;\n}\n\n/**\n * Import resource types from files\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypesFromFiles(): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.resourcetype.authz.json')\n );\n createProgressBar(files.length, 'Importing resource types...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: ResourceTypeExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.resourcetype).length;\n total += count;\n await frodo.authz.resourceType.importResourceTypes(fileData);\n updateProgressBar(`Imported ${count} resource types from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing resource types from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} resource types from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing resource types from files.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ResourceTypeOps.js","names":["frodo","state","fs","createObjectTable","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","titleCase","getRealmName","getFilePath","getWorkingDirectory","utils","readResourceTypes","readResourceType","readResourceTypeByName","exportResourceType","exportResourceTypeByName","exportResourceTypes","importResourceType","importResourceTypeByName","importFirstResourceType","importResourceTypes","deleteResourceType","deleteResourceTypeByName","authz","resourceType","listResourceTypes","long","outcome","resourceTypes","sort","a","b","name","localeCompare","table","push","description","uuid","toString","err","message","describeResourceType","resourceTypeUuid","json","error","_error$response","response","status","getRealm","_error$response2","data","describeResourceTypeByName","resourceTypeName","_error$response3","_error$response4","deleteResourceTypeById","_error$response5","deleteResourceTypeUsingName","_error$response6","deleteResourceTypes","errors","length","resourceTypeId","errorMessages","map","join","exportResourceTypeToFile","file","fileName","filePath","exportData","exportResourceTypeByNameToFile","exportResourceTypesToFile","exportResourceTypesToFiles","importResourceTypeFromFile","readFileSync","fileData","JSON","parse","importResourceTypeByNameFromFile","importFirstResourceTypeFromFile","importResourceTypesFromFile","importResourceTypesFromFiles","names","readdirSync","files","filter","toLowerCase","endsWith","total","count","Object","keys","resourcetype"],"sources":["../../src/ops/ResourceTypeOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type ResourceTypeSkeleton } from '@rockcarver/frodo-lib/types/api/ResourceTypesApi';\nimport { type ResourceTypeExportInterface } from '@rockcarver/frodo-lib/types/ops/ResourceTypeOps';\nimport fs from 'fs';\n\nimport {\n createObjectTable,\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\n\nconst { getRealmName, getFilePath, getWorkingDirectory } = frodo.utils;\nconst {\n readResourceTypes,\n readResourceType,\n readResourceTypeByName,\n exportResourceType,\n exportResourceTypeByName,\n exportResourceTypes,\n importResourceType,\n importResourceTypeByName,\n importFirstResourceType,\n importResourceTypes,\n deleteResourceType,\n deleteResourceTypeByName,\n} = frodo.authz.resourceType;\n\n/**\n * List resource types\n * @param {boolean} long more fields\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listResourceTypes(long = false): Promise<boolean> {\n let outcome = false;\n try {\n const resourceTypes = await readResourceTypes();\n resourceTypes.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable(['Name', 'Description', 'Uuid']);\n for (const resourceType of resourceTypes) {\n table.push([\n `${resourceType.name}`,\n `${resourceType.description}`,\n `${resourceType.uuid}`,\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n for (const resourceType of resourceTypes) {\n printMessage(`${resourceType.name}`, 'data');\n }\n }\n outcome = true;\n } catch (err) {\n printMessage(`listResourceTypes ERROR: ${err.message}`, 'error');\n printMessage(err, 'error');\n }\n return outcome;\n}\n\n/**\n * Describe resource type by uuid\n * @param {string} resourceTypeUuid resource type uuid\n * @param {boolean} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeResourceType(\n resourceTypeUuid: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const resourceType = await readResourceType(resourceTypeUuid);\n if (json) {\n printMessage(resourceType, 'data');\n } else {\n const table = createObjectTable(resourceType);\n printMessage(table.toString(), 'data');\n }\n outcome = true;\n } catch (error) {\n if (error.response?.status === 404) {\n printMessage(\n `Resource Type with uuid ${resourceTypeUuid} does not exist in realm ${state.getRealm()}`,\n 'error'\n );\n } else {\n printMessage(error.response?.data?.message || error.message, 'error');\n }\n }\n return outcome;\n}\n\n/**\n * Describe resource type by name\n * @param {string} resourceTypeName resource type name\n * @param {boolean} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeResourceTypeByName(\n resourceTypeName: string,\n json = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const resourceType = await readResourceTypeByName(resourceTypeName);\n if (json) {\n printMessage(resourceType, 'data');\n } else {\n const table = createObjectTable(resourceType);\n printMessage(table.toString(), 'data');\n }\n outcome = true;\n } catch (error) {\n if (error.response?.status === 404) {\n printMessage(\n `Resource Type with name ${resourceTypeName} does not exist in realm ${state.getRealm()}`,\n 'error'\n );\n } else {\n printMessage(error.response?.data?.message || error.message, 'error');\n }\n }\n return outcome;\n}\n\n/**\n * Delete resource type by uuid\n * @param {string} resourceTypeUuid resource type uuid\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteResourceTypeById(\n resourceTypeUuid: string\n): Promise<boolean | ResourceTypeSkeleton> {\n debugMessage(`cli.ResourceTypeOps.deleteResourceType: begin`);\n showSpinner(`Deleting ${resourceTypeUuid}...`);\n let outcome = false;\n try {\n debugMessage(`Deleting resource type ${resourceTypeUuid}`);\n await deleteResourceType(resourceTypeUuid);\n succeedSpinner(`Deleted ${resourceTypeUuid}.`);\n outcome = true;\n } catch (error) {\n failSpinner(\n `Error deleting ${resourceTypeUuid}: ${\n error.response?.data?.message || error.message\n }`\n );\n }\n debugMessage(\n `cli.ResourceTypeOps.deleteResourceType: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Delete resource type by name\n * @param {string} resourceTypeName resource type name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteResourceTypeUsingName(\n resourceTypeName: string\n): Promise<boolean | ResourceTypeSkeleton> {\n debugMessage(`cli.ResourceTypeOps.deleteResourceTypeByName: begin`);\n showSpinner(`Deleting ${resourceTypeName}...`);\n let outcome = false;\n try {\n debugMessage(`Deleting resource type ${resourceTypeName}`);\n await deleteResourceTypeByName(resourceTypeName);\n succeedSpinner(`Deleted ${resourceTypeName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(\n `Error deleting ${resourceTypeName}: ${\n error.response?.data?.message || error.message\n }`\n );\n }\n debugMessage(\n `cli.ResourceTypeOps.deleteResourceTypeByName: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Delete all resource types\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteResourceTypes(): Promise<\n boolean | ResourceTypeSkeleton\n> {\n debugMessage(`cli.ResourceTypeOps.deleteResourceTypes: begin`);\n let outcome = false;\n const errors = [];\n let resourceTypes: ResourceTypeSkeleton[] = [];\n try {\n showSpinner(`Retrieving all resource types...`);\n try {\n resourceTypes = await readResourceTypes();\n succeedSpinner(`Found ${resourceTypes.length} resource types.`);\n } catch (error) {\n error.message = `Error retrieving all resource types: ${error.message}`;\n failSpinner(error.message);\n throw error;\n }\n if (resourceTypes.length)\n createProgressBar(\n resourceTypes.length,\n `Deleting ${resourceTypes.length} resource types...`\n );\n for (const resourceType of resourceTypes) {\n const resourceTypeId = resourceType.uuid;\n try {\n debugMessage(`Deleting resource type ${resourceTypeId}`);\n await deleteResourceType(resourceTypeId);\n updateProgressBar(`Deleted ${resourceTypeId}`);\n } catch (error) {\n error.message = `Error deleting resource type ${resourceTypeId}: ${error}`;\n updateProgressBar(error.message);\n errors.push(error);\n }\n }\n } catch (error) {\n error.message = `Error deleting resource types: ${error}`;\n errors.push(error);\n } finally {\n if (errors.length) {\n const errorMessages = errors.map((error) => error.message).join('\\n');\n if (resourceTypes.length)\n stopProgressBar(`Error deleting all resource types: ${errorMessages}`);\n } else {\n if (resourceTypes.length)\n stopProgressBar(`Deleted ${resourceTypes.length} resource types.`);\n outcome = true;\n }\n }\n debugMessage(\n `cli.ResourceTypeOps.deleteResourceTypes: end [outcome=${outcome}]`\n );\n return outcome;\n}\n\n/**\n * Export resource type to file\n * @param {string} resourceTypeUuid resource type uuid\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypeToFile(\n resourceTypeUuid: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeToFile: begin`);\n showSpinner(`Exporting ${resourceTypeUuid}...`);\n try {\n let fileName = getTypedFilename(resourceTypeUuid, 'resourcetype.authz');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportResourceType(resourceTypeUuid);\n saveJsonToFile(exportData, filePath);\n succeedSpinner(`Exported ${resourceTypeUuid} to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${resourceTypeUuid}: ${error.message}`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeToFile: end`);\n return outcome;\n}\n\n/**\n * Export resource type by name to file\n * @param {string} resourceTypeName resource type name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypeByNameToFile(\n resourceTypeName: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeByNameToFile: begin`);\n showSpinner(`Exporting ${resourceTypeName}...`);\n try {\n let fileName = getTypedFilename(resourceTypeName, 'resourcetype.authz');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportResourceTypeByName(resourceTypeName);\n saveJsonToFile(exportData, filePath);\n succeedSpinner(`Exported ${resourceTypeName} to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${resourceTypeName}: ${error.message}`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypeByNameToFile: end`);\n return outcome;\n}\n\n/**\n * Export resource types to file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypesToFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFile: begin`);\n showSpinner(`Exporting all resource types...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}ResourceTypes`,\n 'resourcetype.authz'\n );\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportResourceTypes();\n saveJsonToFile(exportData, filePath);\n succeedSpinner(`Exported all resource types to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting resource types: ${error.message}`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFile: end`);\n return outcome;\n}\n\n/**\n * Export all resource types to separate files\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportResourceTypesToFiles(): Promise<boolean> {\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFiles: begin`);\n const errors = [];\n try {\n const resourceTypes: ResourceTypeSkeleton[] = await readResourceTypes();\n createProgressBar(resourceTypes.length, 'Exporting resource types...');\n for (const resourceType of resourceTypes) {\n const file = getTypedFilename(resourceType.name, 'resourcetype.authz');\n try {\n const exportData: ResourceTypeExportInterface =\n await exportResourceType(resourceType.uuid);\n saveJsonToFile(exportData, getFilePath(file, true));\n updateProgressBar(`Exported ${resourceType.name}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${resourceType.name}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting resource types to files`);\n }\n debugMessage(`cli.ResourceTypeOps.exportResourceTypesToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import resource type from file\n * @param {string} resourceTypeId resource type id\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypeFromFile(\n resourceTypeId: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importResourceTypeFromFile: begin`);\n showSpinner(`Importing ${resourceTypeId}...`);\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n await importResourceType(resourceTypeId, fileData);\n outcome = true;\n succeedSpinner(`Imported ${resourceTypeId}.`);\n } catch (error) {\n failSpinner(`Error importing ${resourceTypeId}: ${error.message}`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypeFromFile: end`);\n return outcome;\n}\n\n/**\n * Import resource type by name from file\n * @param {string} resourceTypeName resource type name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypeByNameFromFile(\n resourceTypeName: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importResourceTypeByNameFromFile: begin`);\n showSpinner(`Importing ${resourceTypeName}...`);\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n await importResourceTypeByName(resourceTypeName, fileData);\n outcome = true;\n succeedSpinner(`Imported ${resourceTypeName}.`);\n } catch (error) {\n failSpinner(`Error importing ${resourceTypeName}: ${error.message}`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypeByNameFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first resource type from file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstResourceTypeFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importFirstResourceTypeFromFile: begin`);\n const filePath = getFilePath(file);\n showSpinner(`Importing ${filePath}...`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importFirstResourceType(fileData);\n outcome = true;\n succeedSpinner(`Imported ${filePath}.`);\n } catch (error) {\n failSpinner(`Error importing ${filePath}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importFirstResourceTypeFromFile: end`);\n return outcome;\n}\n\n/**\n * Import resource types from file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypesFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFile: begin`);\n const filePath = getFilePath(file);\n showSpinner(`Importing ${filePath}...`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importResourceTypes(fileData);\n outcome = true;\n succeedSpinner(`Imported ${filePath}.`);\n } catch (error) {\n failSpinner(`Error importing ${filePath}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFile: end`);\n return outcome;\n}\n\n/**\n * Import resource types from files\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importResourceTypesFromFiles(): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFiles: begin`);\n const names = fs.readdirSync(getWorkingDirectory());\n const files = names\n .filter((name) => name.toLowerCase().endsWith('.resourcetype.authz.json'))\n .map((name) => getFilePath(name));\n createProgressBar(files.length, 'Importing resource types...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: ResourceTypeExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.resourcetype).length;\n total += count;\n await importResourceTypes(fileData);\n updateProgressBar(`Imported ${count} resource types from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing resource types from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} resource types from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing resource types from files.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ResourceTypeOps.importResourceTypesFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}