@rockcarver/frodo-cli 2.0.0-6 → 2.0.0-61

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