@rockcarver/frodo-cli 2.0.0-4 → 2.0.0-41

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 (486) hide show
  1. package/CHANGELOG.md +312 -5
  2. package/esm/app.js +22 -5
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/FrodoCommand.js +33 -7
  5. package/esm/cli/FrodoCommand.js.map +1 -1
  6. package/esm/cli/_template/something-delete.js +7 -5
  7. package/esm/cli/_template/something-delete.js.map +1 -1
  8. package/esm/cli/_template/something-describe.js +7 -5
  9. package/esm/cli/_template/something-describe.js.map +1 -1
  10. package/esm/cli/_template/something-else-delete.js +7 -5
  11. package/esm/cli/_template/something-else-delete.js.map +1 -1
  12. package/esm/cli/_template/something-else-describe.js +7 -5
  13. package/esm/cli/_template/something-else-describe.js.map +1 -1
  14. package/esm/cli/_template/something-else-export.js +8 -6
  15. package/esm/cli/_template/something-else-export.js.map +1 -1
  16. package/esm/cli/_template/something-else-import.js +7 -5
  17. package/esm/cli/_template/something-else-import.js.map +1 -1
  18. package/esm/cli/_template/something-else-list.js +7 -5
  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 +8 -6
  23. package/esm/cli/_template/something-export.js.map +1 -1
  24. package/esm/cli/_template/something-import.js +7 -5
  25. package/esm/cli/_template/something-import.js.map +1 -1
  26. package/esm/cli/_template/something-list.js +7 -5
  27. package/esm/cli/_template/something-list.js.map +1 -1
  28. package/esm/cli/_template/something-other-delete.js +7 -5
  29. package/esm/cli/_template/something-other-delete.js.map +1 -1
  30. package/esm/cli/_template/something-other-describe.js +7 -5
  31. package/esm/cli/_template/something-other-describe.js.map +1 -1
  32. package/esm/cli/_template/something-other-export.js +8 -6
  33. package/esm/cli/_template/something-other-export.js.map +1 -1
  34. package/esm/cli/_template/something-other-import.js +7 -5
  35. package/esm/cli/_template/something-other-import.js.map +1 -1
  36. package/esm/cli/_template/something-other-list.js +7 -5
  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 -5
  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 -8
  45. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  46. package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js +41 -0
  47. package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js.map +1 -0
  48. package/esm/cli/admin/admin-federation-export.js +44 -0
  49. package/esm/cli/admin/admin-federation-export.js.map +1 -0
  50. package/esm/cli/admin/admin-federation-import.js +48 -0
  51. package/esm/cli/admin/admin-federation-import.js.map +1 -0
  52. package/esm/cli/admin/admin-federation-list.js +28 -0
  53. package/esm/cli/admin/admin-federation-list.js.map +1 -0
  54. package/esm/cli/admin/admin-federation.js +13 -0
  55. package/esm/cli/admin/admin-federation.js.map +1 -0
  56. package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.js +43 -0
  57. package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.js.map +1 -0
  58. package/esm/cli/admin/admin-get-access-token.js +12 -7
  59. package/esm/cli/admin/admin-get-access-token.js.map +1 -1
  60. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +13 -8
  61. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  62. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +11 -6
  63. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
  64. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +11 -6
  65. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
  66. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +11 -6
  67. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
  68. package/esm/cli/admin/admin-list-static-user-mappings.js +12 -7
  69. package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
  70. package/esm/cli/admin/admin-remove-static-user-mapping.js +12 -6
  71. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  72. package/esm/cli/admin/admin-repair-org-model.js +11 -6
  73. package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
  74. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +12 -7
  75. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  76. package/esm/cli/admin/admin-show-generic-extension-attributes.js +11 -6
  77. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
  78. package/esm/cli/admin/admin-train-auto-access-model.js +32 -0
  79. package/esm/cli/admin/admin-train-auto-access-model.js.map +1 -0
  80. package/esm/cli/admin/admin.js +8 -2
  81. package/esm/cli/admin/admin.js.map +1 -1
  82. package/esm/cli/agent/agent-delete.js +13 -7
  83. package/esm/cli/agent/agent-delete.js.map +1 -1
  84. package/esm/cli/agent/agent-describe.js +7 -5
  85. package/esm/cli/agent/agent-describe.js.map +1 -1
  86. package/esm/cli/agent/agent-export.js +12 -10
  87. package/esm/cli/agent/agent-export.js.map +1 -1
  88. package/esm/cli/agent/agent-gateway-delete.js +13 -7
  89. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  90. package/esm/cli/agent/agent-gateway-describe.js +7 -5
  91. package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
  92. package/esm/cli/agent/agent-gateway-export.js +12 -10
  93. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  94. package/esm/cli/agent/agent-gateway-import.js +8 -6
  95. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  96. package/esm/cli/agent/agent-gateway-list.js +7 -5
  97. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  98. package/esm/cli/agent/agent-gateway.js +1 -1
  99. package/esm/cli/agent/agent-gateway.js.map +1 -1
  100. package/esm/cli/agent/agent-import.js +8 -6
  101. package/esm/cli/agent/agent-import.js.map +1 -1
  102. package/esm/cli/agent/agent-java-delete.js +13 -7
  103. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  104. package/esm/cli/agent/agent-java-describe.js +7 -5
  105. package/esm/cli/agent/agent-java-describe.js.map +1 -1
  106. package/esm/cli/agent/agent-java-export.js +12 -10
  107. package/esm/cli/agent/agent-java-export.js.map +1 -1
  108. package/esm/cli/agent/agent-java-import.js +8 -6
  109. package/esm/cli/agent/agent-java-import.js.map +1 -1
  110. package/esm/cli/agent/agent-java-list.js +7 -5
  111. package/esm/cli/agent/agent-java-list.js.map +1 -1
  112. package/esm/cli/agent/agent-java.js +1 -1
  113. package/esm/cli/agent/agent-java.js.map +1 -1
  114. package/esm/cli/agent/agent-list.js +7 -5
  115. package/esm/cli/agent/agent-list.js.map +1 -1
  116. package/esm/cli/agent/agent-web-delete.js +13 -7
  117. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  118. package/esm/cli/agent/agent-web-describe.js +7 -5
  119. package/esm/cli/agent/agent-web-describe.js.map +1 -1
  120. package/esm/cli/agent/agent-web-export.js +12 -10
  121. package/esm/cli/agent/agent-web-export.js.map +1 -1
  122. package/esm/cli/agent/agent-web-import.js +8 -6
  123. package/esm/cli/agent/agent-web-import.js.map +1 -1
  124. package/esm/cli/agent/agent-web-list.js +7 -5
  125. package/esm/cli/agent/agent-web-list.js.map +1 -1
  126. package/esm/cli/agent/agent-web.js +3 -3
  127. package/esm/cli/agent/agent-web.js.map +1 -1
  128. package/esm/cli/agent/agent.js +2 -2
  129. package/esm/cli/agent/agent.js.map +1 -1
  130. package/esm/cli/app/app-delete.js +27 -9
  131. package/esm/cli/app/app-delete.js.map +1 -1
  132. package/esm/cli/app/app-describe.js +9 -6
  133. package/esm/cli/app/app-describe.js.map +1 -1
  134. package/esm/cli/app/app-export.js +17 -14
  135. package/esm/cli/app/app-export.js.map +1 -1
  136. package/esm/cli/app/app-import.js +21 -18
  137. package/esm/cli/app/app-import.js.map +1 -1
  138. package/esm/cli/app/app-list.js +12 -9
  139. package/esm/cli/app/app-list.js.map +1 -1
  140. package/esm/cli/app/app.js +8 -12
  141. package/esm/cli/app/app.js.map +1 -1
  142. package/esm/cli/authn/authn-describe.js +29 -0
  143. package/esm/cli/authn/authn-describe.js.map +1 -0
  144. package/esm/cli/authn/authn-export.js +25 -0
  145. package/esm/cli/authn/authn-export.js.map +1 -0
  146. package/esm/cli/authn/authn-import.js +25 -0
  147. package/esm/cli/authn/authn-import.js.map +1 -0
  148. package/esm/cli/authn/authn.js +12 -0
  149. package/esm/cli/authn/authn.js.map +1 -0
  150. package/esm/cli/authz/authz-policy-delete.js +11 -9
  151. package/esm/cli/authz/authz-policy-delete.js.map +1 -1
  152. package/esm/cli/authz/authz-policy-describe.js +8 -6
  153. package/esm/cli/authz/authz-policy-describe.js.map +1 -1
  154. package/esm/cli/authz/authz-policy-export.js +18 -16
  155. package/esm/cli/authz/authz-policy-export.js.map +1 -1
  156. package/esm/cli/authz/authz-policy-import.js +11 -9
  157. package/esm/cli/authz/authz-policy-import.js.map +1 -1
  158. package/esm/cli/authz/authz-policy-list.js +11 -9
  159. package/esm/cli/authz/authz-policy-list.js.map +1 -1
  160. package/esm/cli/authz/authz-policy.js +1 -1
  161. package/esm/cli/authz/authz-policy.js.map +1 -1
  162. package/esm/cli/authz/authz-set-delete.js +11 -9
  163. package/esm/cli/authz/authz-set-delete.js.map +1 -1
  164. package/esm/cli/authz/authz-set-describe.js +8 -6
  165. package/esm/cli/authz/authz-set-describe.js.map +1 -1
  166. package/esm/cli/authz/authz-set-export.js +14 -12
  167. package/esm/cli/authz/authz-set-export.js.map +1 -1
  168. package/esm/cli/authz/authz-set-import.js +11 -9
  169. package/esm/cli/authz/authz-set-import.js.map +1 -1
  170. package/esm/cli/authz/authz-set-list.js +8 -6
  171. package/esm/cli/authz/authz-set-list.js.map +1 -1
  172. package/esm/cli/authz/authz-set.js +1 -1
  173. package/esm/cli/authz/authz-set.js.map +1 -1
  174. package/esm/cli/authz/authz-type-delete.js +13 -11
  175. package/esm/cli/authz/authz-type-delete.js.map +1 -1
  176. package/esm/cli/authz/authz-type-describe.js +9 -7
  177. package/esm/cli/authz/authz-type-describe.js.map +1 -1
  178. package/esm/cli/authz/authz-type-export.js +16 -14
  179. package/esm/cli/authz/authz-type-export.js.map +1 -1
  180. package/esm/cli/authz/authz-type-import.js +14 -12
  181. package/esm/cli/authz/authz-type-import.js.map +1 -1
  182. package/esm/cli/authz/authz-type-list.js +9 -7
  183. package/esm/cli/authz/authz-type-list.js.map +1 -1
  184. package/esm/cli/authz/authz-type.js +1 -1
  185. package/esm/cli/authz/authz-type.js.map +1 -1
  186. package/esm/cli/authz/authz.js +2 -2
  187. package/esm/cli/authz/authz.js.map +1 -1
  188. package/esm/cli/config/config-delete.js +21 -0
  189. package/esm/cli/config/config-delete.js.map +1 -0
  190. package/esm/cli/config/config-describe.js +21 -0
  191. package/esm/cli/config/config-describe.js.map +1 -0
  192. package/esm/cli/config/config-export.js +43 -0
  193. package/esm/cli/config/config-export.js.map +1 -0
  194. package/esm/cli/config/config-import.js +54 -0
  195. package/esm/cli/config/config-import.js.map +1 -0
  196. package/esm/cli/config/config-list.js +21 -0
  197. package/esm/cli/config/config-list.js.map +1 -0
  198. package/esm/cli/config/config.js +19 -0
  199. package/esm/cli/config/config.js.map +1 -0
  200. package/esm/cli/conn/conn-delete.js +2 -3
  201. package/esm/cli/conn/conn-delete.js.map +1 -1
  202. package/esm/cli/conn/conn-describe.js +2 -3
  203. package/esm/cli/conn/conn-describe.js.map +1 -1
  204. package/esm/cli/conn/conn-list.js +2 -3
  205. package/esm/cli/conn/conn-list.js.map +1 -1
  206. package/esm/cli/conn/conn-save.js +31 -16
  207. package/esm/cli/conn/conn-save.js.map +1 -1
  208. package/esm/cli/conn/conn.js +2 -2
  209. package/esm/cli/conn/conn.js.map +1 -1
  210. package/esm/cli/email/email-template-export.js +14 -12
  211. package/esm/cli/email/email-template-export.js.map +1 -1
  212. package/esm/cli/email/email-template-import.js +15 -13
  213. package/esm/cli/email/email-template-import.js.map +1 -1
  214. package/esm/cli/email/email-template-list.js +9 -7
  215. package/esm/cli/email/email-template-list.js.map +1 -1
  216. package/esm/cli/email/email-template.js +1 -1
  217. package/esm/cli/email/email-template.js.map +1 -1
  218. package/esm/cli/email/email.js +2 -2
  219. package/esm/cli/email/email.js.map +1 -1
  220. package/esm/cli/esv/esv-apply.js +18 -9
  221. package/esm/cli/esv/esv-apply.js.map +1 -1
  222. package/esm/cli/esv/esv-secret-create.js +10 -7
  223. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  224. package/esm/cli/esv/esv-secret-delete.js +13 -10
  225. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  226. package/esm/cli/esv/esv-secret-describe.js +10 -7
  227. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  228. package/esm/cli/esv/esv-secret-export.js +22 -7
  229. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  230. package/esm/cli/esv/esv-secret-import.js +7 -5
  231. package/esm/cli/esv/esv-secret-import.js.map +1 -1
  232. package/esm/cli/esv/esv-secret-list.js +11 -8
  233. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  234. package/esm/cli/esv/esv-secret-set.js +10 -7
  235. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  236. package/esm/cli/esv/esv-secret-version-activate.js +10 -8
  237. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  238. package/esm/cli/esv/esv-secret-version-create.js +10 -7
  239. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  240. package/esm/cli/esv/esv-secret-version-deactivate.js +10 -8
  241. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  242. package/esm/cli/esv/esv-secret-version-delete.js +13 -10
  243. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  244. package/esm/cli/esv/esv-secret-version-list.js +10 -7
  245. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  246. package/esm/cli/esv/esv-secret-version.js +1 -1
  247. package/esm/cli/esv/esv-secret-version.js.map +1 -1
  248. package/esm/cli/esv/esv-secret.js +2 -3
  249. package/esm/cli/esv/esv-secret.js.map +1 -1
  250. package/esm/cli/esv/esv-variable-create.js +11 -7
  251. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  252. package/esm/cli/esv/esv-variable-delete.js +13 -9
  253. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  254. package/esm/cli/esv/esv-variable-describe.js +11 -8
  255. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  256. package/esm/cli/esv/esv-variable-export.js +23 -7
  257. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  258. package/esm/cli/esv/esv-variable-import.js +7 -5
  259. package/esm/cli/esv/esv-variable-import.js.map +1 -1
  260. package/esm/cli/esv/esv-variable-list.js +11 -8
  261. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  262. package/esm/cli/esv/esv-variable-set.js +12 -8
  263. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  264. package/esm/cli/esv/esv-variable.js +2 -3
  265. package/esm/cli/esv/esv-variable.js.map +1 -1
  266. package/esm/cli/esv/esv.js +2 -2
  267. package/esm/cli/esv/esv.js.map +1 -1
  268. package/esm/cli/idm/idm-count.js +10 -8
  269. package/esm/cli/idm/idm-count.js.map +1 -1
  270. package/esm/cli/idm/idm-export.js +24 -16
  271. package/esm/cli/idm/idm-export.js.map +1 -1
  272. package/esm/cli/idm/idm-import.js +22 -14
  273. package/esm/cli/idm/idm-import.js.map +1 -1
  274. package/esm/cli/idm/idm-list.js +9 -7
  275. package/esm/cli/idm/idm-list.js.map +1 -1
  276. package/esm/cli/idm/idm.js +2 -2
  277. package/esm/cli/idm/idm.js.map +1 -1
  278. package/esm/cli/idp/idp-export.js +12 -10
  279. package/esm/cli/idp/idp-export.js.map +1 -1
  280. package/esm/cli/idp/idp-import.js +24 -14
  281. package/esm/cli/idp/idp-import.js.map +1 -1
  282. package/esm/cli/idp/idp-list.js +8 -6
  283. package/esm/cli/idp/idp-list.js.map +1 -1
  284. package/esm/cli/idp/idp.js +2 -2
  285. package/esm/cli/idp/idp.js.map +1 -1
  286. package/esm/cli/info/info.js +13 -8
  287. package/esm/cli/info/info.js.map +1 -1
  288. package/esm/cli/journey/journey-delete.js +14 -8
  289. package/esm/cli/journey/journey-delete.js.map +1 -1
  290. package/esm/cli/journey/journey-describe.js +22 -12
  291. package/esm/cli/journey/journey-describe.js.map +1 -1
  292. package/esm/cli/journey/journey-disable.js +11 -12
  293. package/esm/cli/journey/journey-disable.js.map +1 -1
  294. package/esm/cli/journey/journey-enable.js +11 -12
  295. package/esm/cli/journey/journey-enable.js.map +1 -1
  296. package/esm/cli/journey/journey-export.js +24 -13
  297. package/esm/cli/journey/journey-export.js.map +1 -1
  298. package/esm/cli/journey/journey-import.js +15 -13
  299. package/esm/cli/journey/journey-import.js.map +1 -1
  300. package/esm/cli/journey/journey-list.js +7 -5
  301. package/esm/cli/journey/journey-list.js.map +1 -1
  302. package/esm/cli/journey/journey-prune.js +23 -13
  303. package/esm/cli/journey/journey-prune.js.map +1 -1
  304. package/esm/cli/journey/journey.js +2 -2
  305. package/esm/cli/journey/journey.js.map +1 -1
  306. package/esm/cli/{logging/logs-fetch.js → log/log-fetch.js} +68 -36
  307. package/esm/cli/log/log-fetch.js.map +1 -0
  308. package/esm/cli/log/log-key-delete.js +34 -0
  309. package/esm/cli/log/log-key-delete.js.map +1 -0
  310. package/esm/cli/log/log-key-describe.js +21 -0
  311. package/esm/cli/log/log-key-describe.js.map +1 -0
  312. package/esm/cli/log/log-key-list.js +25 -0
  313. package/esm/cli/log/log-key-list.js.map +1 -0
  314. package/esm/cli/log/log-key.js +8 -0
  315. package/esm/cli/log/log-key.js.map +1 -0
  316. package/esm/cli/log/log-list.js +80 -0
  317. package/esm/cli/log/log-list.js.map +1 -0
  318. package/esm/cli/log/log-tail.js +77 -0
  319. package/esm/cli/log/log-tail.js.map +1 -0
  320. package/esm/cli/{logging/logs.js → log/log.js} +6 -3
  321. package/esm/cli/log/log.js.map +1 -0
  322. package/esm/cli/oauth/oauth-client-delete.js +21 -0
  323. package/esm/cli/oauth/oauth-client-delete.js.map +1 -0
  324. package/esm/cli/oauth/oauth-client-describe.js +21 -0
  325. package/esm/cli/oauth/oauth-client-describe.js.map +1 -0
  326. package/esm/cli/oauth/oauth-client-export.js +51 -0
  327. package/esm/cli/oauth/oauth-client-export.js.map +1 -0
  328. package/esm/cli/oauth/oauth-client-import.js +56 -0
  329. package/esm/cli/oauth/oauth-client-import.js.map +1 -0
  330. package/esm/cli/oauth/oauth-client-list.js +24 -0
  331. package/esm/cli/oauth/oauth-client-list.js.map +1 -0
  332. package/esm/cli/oauth/oauth-client.js +14 -0
  333. package/esm/cli/oauth/oauth-client.js.map +1 -0
  334. package/esm/cli/oauth/oauth.js +13 -0
  335. package/esm/cli/oauth/oauth.js.map +1 -0
  336. package/esm/cli/realm/realm-add-custom-domain.js +8 -6
  337. package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
  338. package/esm/cli/realm/realm-describe.js +8 -6
  339. package/esm/cli/realm/realm-describe.js.map +1 -1
  340. package/esm/cli/realm/realm-list.js +8 -6
  341. package/esm/cli/realm/realm-list.js.map +1 -1
  342. package/esm/cli/realm/realm-remove-custom-domain.js +11 -6
  343. package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
  344. package/esm/cli/realm/realm.js +2 -2
  345. package/esm/cli/realm/realm.js.map +1 -1
  346. package/esm/cli/saml/saml-cot-export.js +14 -12
  347. package/esm/cli/saml/saml-cot-export.js.map +1 -1
  348. package/esm/cli/saml/saml-cot-import.js +15 -13
  349. package/esm/cli/saml/saml-cot-import.js.map +1 -1
  350. package/esm/cli/saml/saml-cot-list.js +9 -7
  351. package/esm/cli/saml/saml-cot-list.js.map +1 -1
  352. package/esm/cli/saml/saml-cot.js +1 -1
  353. package/esm/cli/saml/saml-cot.js.map +1 -1
  354. package/esm/cli/saml/saml-delete.js +14 -8
  355. package/esm/cli/saml/saml-delete.js.map +1 -1
  356. package/esm/cli/saml/saml-describe.js +9 -7
  357. package/esm/cli/saml/saml-describe.js.map +1 -1
  358. package/esm/cli/saml/saml-export.js +14 -12
  359. package/esm/cli/saml/saml-export.js.map +1 -1
  360. package/esm/cli/saml/saml-import.js +24 -14
  361. package/esm/cli/saml/saml-import.js.map +1 -1
  362. package/esm/cli/saml/saml-list.js +9 -7
  363. package/esm/cli/saml/saml-list.js.map +1 -1
  364. package/esm/cli/saml/saml-metadata-export.js +10 -8
  365. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  366. package/esm/cli/saml/saml-metadata.js +1 -1
  367. package/esm/cli/saml/saml-metadata.js.map +1 -1
  368. package/esm/cli/saml/saml.js +2 -2
  369. package/esm/cli/saml/saml.js.map +1 -1
  370. package/esm/cli/script/script-delete.js +21 -8
  371. package/esm/cli/script/script-delete.js.map +1 -1
  372. package/esm/cli/script/script-describe.js +7 -5
  373. package/esm/cli/script/script-describe.js.map +1 -1
  374. package/esm/cli/script/script-export.js +12 -14
  375. package/esm/cli/script/script-export.js.map +1 -1
  376. package/esm/cli/script/script-import.js +9 -7
  377. package/esm/cli/script/script-import.js.map +1 -1
  378. package/esm/cli/script/script-list.js +10 -8
  379. package/esm/cli/script/script-list.js.map +1 -1
  380. package/esm/cli/script/script.js +3 -5
  381. package/esm/cli/script/script.js.map +1 -1
  382. package/esm/cli/service/service-delete.js +8 -5
  383. package/esm/cli/service/service-delete.js.map +1 -1
  384. package/esm/cli/service/service-export.js +13 -11
  385. package/esm/cli/service/service-export.js.map +1 -1
  386. package/esm/cli/service/service-import.js +32 -14
  387. package/esm/cli/service/service-import.js.map +1 -1
  388. package/esm/cli/service/service-list.js +7 -4
  389. package/esm/cli/service/service-list.js.map +1 -1
  390. package/esm/cli/service/service.js +2 -2
  391. package/esm/cli/service/service.js.map +1 -1
  392. package/esm/cli/shell/shell.js +57 -0
  393. package/esm/cli/shell/shell.js.map +1 -0
  394. package/esm/cli/theme/theme-delete.js +13 -11
  395. package/esm/cli/theme/theme-delete.js.map +1 -1
  396. package/esm/cli/theme/theme-export.js +16 -14
  397. package/esm/cli/theme/theme-export.js.map +1 -1
  398. package/esm/cli/theme/theme-import.js +16 -14
  399. package/esm/cli/theme/theme-import.js.map +1 -1
  400. package/esm/cli/theme/theme-list.js +8 -6
  401. package/esm/cli/theme/theme-list.js.map +1 -1
  402. package/esm/cli/theme/theme.js +2 -2
  403. package/esm/cli/theme/theme.js.map +1 -1
  404. package/esm/help/SampleData.js +7 -0
  405. package/esm/help/SampleData.js.map +1 -0
  406. package/esm/launch.js +1 -1
  407. package/esm/launch.js.map +1 -1
  408. package/esm/loader.js +2 -2
  409. package/esm/loader.js.map +1 -1
  410. package/esm/ops/AdminFederationOps.js +231 -0
  411. package/esm/ops/AdminFederationOps.js.map +1 -0
  412. package/esm/ops/AdminOps.js +151 -0
  413. package/esm/ops/AdminOps.js.map +1 -0
  414. package/esm/ops/AgentOps.js +213 -150
  415. package/esm/ops/AgentOps.js.map +1 -1
  416. package/esm/ops/ApplicationOps.js +324 -0
  417. package/esm/ops/ApplicationOps.js.map +1 -0
  418. package/esm/ops/AuthenticationSettingsOps.js +90 -0
  419. package/esm/ops/AuthenticationSettingsOps.js.map +1 -0
  420. package/esm/ops/CirclesOfTrustOps.js +98 -78
  421. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  422. package/esm/ops/ConfigOps.js +162 -0
  423. package/esm/ops/ConfigOps.js.map +1 -0
  424. package/esm/ops/ConnectionProfileOps.js +12 -6
  425. package/esm/ops/ConnectionProfileOps.js.map +1 -1
  426. package/esm/ops/EmailTemplateOps.js +122 -127
  427. package/esm/ops/EmailTemplateOps.js.map +1 -1
  428. package/esm/ops/IdmOps.js +101 -182
  429. package/esm/ops/IdmOps.js.map +1 -1
  430. package/esm/ops/IdpOps.js +118 -73
  431. package/esm/ops/IdpOps.js.map +1 -1
  432. package/esm/ops/JourneyOps.js +176 -114
  433. package/esm/ops/JourneyOps.js.map +1 -1
  434. package/esm/ops/LogOps.js +92 -30
  435. package/esm/ops/LogOps.js.map +1 -1
  436. package/esm/ops/NodeOps.js +6 -3
  437. package/esm/ops/NodeOps.js.map +1 -1
  438. package/esm/ops/OAuth2ClientOps.js +71 -49
  439. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  440. package/esm/ops/OrganizationOps.js +14 -22
  441. package/esm/ops/OrganizationOps.js.map +1 -1
  442. package/esm/ops/PolicyOps.js +127 -86
  443. package/esm/ops/PolicyOps.js.map +1 -1
  444. package/esm/ops/PolicySetOps.js +108 -76
  445. package/esm/ops/PolicySetOps.js.map +1 -1
  446. package/esm/ops/RealmOps.js +18 -11
  447. package/esm/ops/RealmOps.js.map +1 -1
  448. package/esm/ops/ResourceTypeOps.js +105 -87
  449. package/esm/ops/ResourceTypeOps.js.map +1 -1
  450. package/esm/ops/Saml2Ops.js +132 -91
  451. package/esm/ops/Saml2Ops.js.map +1 -1
  452. package/esm/ops/Saml2Ops.test_.js.map +1 -1
  453. package/esm/ops/ScriptOps.js +205 -82
  454. package/esm/ops/ScriptOps.js.map +1 -1
  455. package/esm/ops/SecretsOps.js +289 -79
  456. package/esm/ops/SecretsOps.js.map +1 -1
  457. package/esm/ops/ServiceOps.js +97 -54
  458. package/esm/ops/ServiceOps.js.map +1 -1
  459. package/esm/ops/ThemeOps.js +164 -158
  460. package/esm/ops/ThemeOps.js.map +1 -1
  461. package/esm/ops/VariablesOps.js +252 -65
  462. package/esm/ops/VariablesOps.js.map +1 -1
  463. package/esm/ops/utils/OpsUtils.js +1 -1
  464. package/esm/ops/utils/OpsUtils.js.map +1 -1
  465. package/esm/ops/utils/Wordwrap.js +1 -1
  466. package/esm/ops/utils/Wordwrap.js.map +1 -1
  467. package/esm/storage/StaticStorage.js +1 -1
  468. package/esm/storage/StaticStorage.js.map +1 -1
  469. package/esm/utils/Config.js +162 -4
  470. package/esm/utils/Config.js.map +1 -1
  471. package/esm/utils/Console.js +78 -35
  472. package/esm/utils/Console.js.map +1 -1
  473. package/esm/utils/Version.js +19 -16
  474. package/esm/utils/Version.js.map +1 -1
  475. package/global-jest-setup.js +4 -0
  476. package/package.json +55 -37
  477. package/esm/cli/logging/logs-fetch.js.map +0 -1
  478. package/esm/cli/logging/logs-list.js +0 -49
  479. package/esm/cli/logging/logs-list.js.map +0 -1
  480. package/esm/cli/logging/logs-tail.js +0 -46
  481. package/esm/cli/logging/logs-tail.js.map +0 -1
  482. package/esm/cli/logging/logs.js.map +0 -1
  483. package/esm/cli/theme/theme-delete.e2e.test_.js.map +0 -1
  484. package/esm/cli/theme/theme-list.e2e.test_.js.map +0 -1
  485. package/esm/utils/ExportImportUtils.js +0 -90
  486. package/esm/utils/ExportImportUtils.js.map +0 -1
@@ -0,0 +1,90 @@
1
+ import { frodo, state } from '@rockcarver/frodo-lib';
2
+ import fs from 'fs';
3
+ import { createObjectTable, debugMessage, failSpinner, printMessage, showSpinner, succeedSpinner } from '../utils/Console';
4
+ const {
5
+ saveJsonToFile,
6
+ getTypedFilename,
7
+ getFilePath
8
+ } = frodo.utils;
9
+ const {
10
+ exportAuthenticationSettings: _exportAuthenticationSettings,
11
+ importAuthenticationSettings: _importAuthenticationSettings,
12
+ readAuthenticationSettings: _readAuthenticationSettings
13
+ } = frodo.authn.settings;
14
+
15
+ /**
16
+ * Export authentication settings to file
17
+ * @param {string} file file name
18
+ * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
19
+ * @returns {Promise<boolean>} true if successful, false otherwise
20
+ */
21
+ export async function exportAuthenticationSettingsToFile(file, includeMeta = true) {
22
+ let outcome = false;
23
+ debugMessage(`cli.AuthenticationSettingsOps.exportAuthenticationSettingsToFile: begin`);
24
+ showSpinner(`Exporting ${frodo.utils.getRealmName(state.getRealm())} realm authentication settings...`);
25
+ try {
26
+ let fileName = getTypedFilename(`${frodo.utils.getRealmName(state.getRealm())}Realm`, 'authentication.settings');
27
+ if (file) {
28
+ fileName = file;
29
+ }
30
+ const filePath = getFilePath(fileName, true);
31
+ const exportData = await _exportAuthenticationSettings();
32
+ saveJsonToFile(exportData, filePath, includeMeta);
33
+ succeedSpinner(`Exported ${frodo.utils.getRealmName(state.getRealm())} realm authentication settings to ${filePath}.`);
34
+ outcome = true;
35
+ } catch (error) {
36
+ failSpinner(`Error exporting ${frodo.utils.getRealmName(state.getRealm())} realm authentication settings: ${error.message}`);
37
+ }
38
+ debugMessage(`cli.AuthenticationSettingsOps.exportAuthenticationSettingsToFile: end`);
39
+ return outcome;
40
+ }
41
+
42
+ /**
43
+ * Import authentication settings from file
44
+ * @param {string} file file name
45
+ * @returns {Promise<boolean>} true if successful, false otherwise
46
+ */
47
+ export async function importAuthenticationSettingsFromFile(file) {
48
+ let outcome = false;
49
+ debugMessage(`cli.AuthenticationSettingsOps.importAuthenticationSettingsFromFile: begin`);
50
+ showSpinner(`Importing ${frodo.utils.getRealmName(state.getRealm())} realm authentication settings...`);
51
+ try {
52
+ const data = fs.readFileSync(getFilePath(file), 'utf8');
53
+ const fileData = JSON.parse(data);
54
+ await _importAuthenticationSettings(fileData);
55
+ outcome = true;
56
+ succeedSpinner(`Imported ${frodo.utils.getRealmName(state.getRealm())} realm authentication settings.`);
57
+ } catch (error) {
58
+ failSpinner(`Error importing ${frodo.utils.getRealmName(state.getRealm())} realm authentication settings.`);
59
+ printMessage(error, 'error');
60
+ }
61
+ debugMessage(`cli.AuthenticationSettingsOps.importAuthenticationSettingsFromFile: end`);
62
+ return outcome;
63
+ }
64
+
65
+ /**
66
+ * Describe authentication settings
67
+ * @param {boolean} json JSON output
68
+ * @returns {Promise<boolean>} true if successful, false otherwise
69
+ */
70
+ export async function describeAuthenticationSettings(json = false) {
71
+ let outcome = false;
72
+ try {
73
+ const settings = await _readAuthenticationSettings();
74
+ delete settings._id;
75
+ delete settings._rev;
76
+ delete settings._type;
77
+ if (json) {
78
+ printMessage(settings, 'data');
79
+ outcome = true;
80
+ } else {
81
+ const table = createObjectTable(settings);
82
+ printMessage(table.toString(), 'data');
83
+ outcome = true;
84
+ }
85
+ } catch (error) {
86
+ printMessage(error.message, 'error');
87
+ }
88
+ return outcome;
89
+ }
90
+ //# sourceMappingURL=AuthenticationSettingsOps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthenticationSettingsOps.js","names":["frodo","state","fs","createObjectTable","debugMessage","failSpinner","printMessage","showSpinner","succeedSpinner","saveJsonToFile","getTypedFilename","getFilePath","utils","exportAuthenticationSettings","_exportAuthenticationSettings","importAuthenticationSettings","_importAuthenticationSettings","readAuthenticationSettings","_readAuthenticationSettings","authn","settings","exportAuthenticationSettingsToFile","file","includeMeta","outcome","getRealmName","getRealm","fileName","filePath","exportData","error","message","importAuthenticationSettingsFromFile","data","readFileSync","fileData","JSON","parse","describeAuthenticationSettings","json","_id","_rev","_type","table","toString"],"sources":["../../src/ops/AuthenticationSettingsOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\n\nimport {\n createObjectTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n succeedSpinner,\n} from '../utils/Console';\n\nconst { saveJsonToFile, getTypedFilename, getFilePath } = frodo.utils;\nconst {\n exportAuthenticationSettings: _exportAuthenticationSettings,\n importAuthenticationSettings: _importAuthenticationSettings,\n readAuthenticationSettings: _readAuthenticationSettings,\n} = frodo.authn.settings;\n\n/**\n * Export authentication settings to file\n * @param {string} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportAuthenticationSettingsToFile(\n file: string,\n includeMeta = true\n): Promise<boolean> {\n let outcome = false;\n debugMessage(\n `cli.AuthenticationSettingsOps.exportAuthenticationSettingsToFile: begin`\n );\n showSpinner(\n `Exporting ${frodo.utils.getRealmName(\n state.getRealm()\n )} realm authentication settings...`\n );\n try {\n let fileName = getTypedFilename(\n `${frodo.utils.getRealmName(state.getRealm())}Realm`,\n 'authentication.settings'\n );\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await _exportAuthenticationSettings();\n saveJsonToFile(exportData, filePath, includeMeta);\n succeedSpinner(\n `Exported ${frodo.utils.getRealmName(\n state.getRealm()\n )} realm authentication settings to ${filePath}.`\n );\n outcome = true;\n } catch (error) {\n failSpinner(\n `Error exporting ${frodo.utils.getRealmName(\n state.getRealm()\n )} realm authentication settings: ${error.message}`\n );\n }\n debugMessage(\n `cli.AuthenticationSettingsOps.exportAuthenticationSettingsToFile: end`\n );\n return outcome;\n}\n\n/**\n * Import authentication settings from file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importAuthenticationSettingsFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n debugMessage(\n `cli.AuthenticationSettingsOps.importAuthenticationSettingsFromFile: begin`\n );\n showSpinner(\n `Importing ${frodo.utils.getRealmName(\n state.getRealm()\n )} realm authentication settings...`\n );\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n await _importAuthenticationSettings(fileData);\n outcome = true;\n succeedSpinner(\n `Imported ${frodo.utils.getRealmName(\n state.getRealm()\n )} realm authentication settings.`\n );\n } catch (error) {\n failSpinner(\n `Error importing ${frodo.utils.getRealmName(\n state.getRealm()\n )} realm authentication settings.`\n );\n printMessage(error, 'error');\n }\n debugMessage(\n `cli.AuthenticationSettingsOps.importAuthenticationSettingsFromFile: end`\n );\n return outcome;\n}\n\n/**\n * Describe authentication settings\n * @param {boolean} json JSON output\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeAuthenticationSettings(\n json = false\n): Promise<boolean> {\n let outcome = false;\n try {\n const settings = await _readAuthenticationSettings();\n delete settings._id;\n delete settings._rev;\n delete settings._type;\n if (json) {\n printMessage(settings, 'data');\n outcome = true;\n } else {\n const table = createObjectTable(settings);\n printMessage(table.toString(), 'data');\n outcome = true;\n }\n } catch (error) {\n printMessage(error.message, 'error');\n }\n return outcome;\n}\n"],"mappings":"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"}
@@ -1,7 +1,23 @@
1
1
  import { frodo, state } from '@rockcarver/frodo-lib';
2
2
  import fs from 'fs';
3
- import { createProgressBar, createTable, debugMessage, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
4
- import { getTypedFilename, saveJsonToFile, titleCase } from '../utils/ExportImportUtils';
3
+ import { createProgressIndicator, createTable, debugMessage, printMessage, stopProgressIndicator, updateProgressIndicator } from '../utils/Console';
4
+ const {
5
+ getRealmName,
6
+ getTypedFilename,
7
+ saveJsonToFile,
8
+ titleCase,
9
+ getFilePath,
10
+ getWorkingDirectory
11
+ } = frodo.utils;
12
+ const {
13
+ readCirclesOfTrust,
14
+ exportCircleOfTrust,
15
+ exportCirclesOfTrust,
16
+ importCircleOfTrust,
17
+ importCirclesOfTrust,
18
+ importFirstCircleOfTrust
19
+ } = frodo.saml2.circlesOfTrust;
20
+
5
21
  /**
6
22
  * Get a one-line description of the circle of trust object
7
23
  * @param {CircleOfTrustSkeleton} cotObj circle of trust object to describe
@@ -41,9 +57,9 @@ export async function listCirclesOfTrust(long = false) {
41
57
  let outcome = false;
42
58
  let cotList = [];
43
59
  try {
44
- cotList = await frodo.saml2.circlesOfTrust.getCirclesOfTrust();
60
+ cotList = await readCirclesOfTrust();
45
61
  } catch (error) {
46
- printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');
62
+ printMessage(`readCirclesOfTrust ERROR: ${error}`, 'error');
47
63
  printMessage(error, 'data');
48
64
  }
49
65
  cotList.sort((a, b) => a._id.localeCompare(b._id));
@@ -57,7 +73,7 @@ export async function listCirclesOfTrust(long = false) {
57
73
  cotList.forEach(cot => {
58
74
  table.push([cot._id, cot.description, cot.status, cot.trustedProviders.map(provider => provider.split('|')[0]).join('\n')]);
59
75
  });
60
- printMessage(table.toString());
76
+ printMessage(table.toString(), 'data');
61
77
  outcome = true;
62
78
  }
63
79
  return outcome;
@@ -67,22 +83,24 @@ export async function listCirclesOfTrust(long = false) {
67
83
  * Export a single circle of trust to file
68
84
  * @param {String} cotId circle of trust id/name
69
85
  * @param {String} file Optional filename
86
+ * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
70
87
  */
71
- export async function exportCircleOfTrustToFile(cotId, file = null) {
88
+ export async function exportCircleOfTrustToFile(cotId, file = null, includeMeta = true) {
72
89
  let outcome = false;
73
90
  debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: begin`);
74
- showSpinner(`Exporting ${cotId}...`);
91
+ const indicatorId = createProgressIndicator('indeterminate', 0, `Exporting ${cotId}...`);
75
92
  try {
76
93
  let fileName = getTypedFilename(cotId, 'cot.saml');
77
94
  if (file) {
78
95
  fileName = file;
79
96
  }
80
- const exportData = await frodo.saml2.circlesOfTrust.exportCircleOfTrust(cotId);
81
- saveJsonToFile(exportData, fileName);
82
- succeedSpinner(`Exported ${cotId} to ${fileName}.`);
97
+ const filePath = getFilePath(fileName, true);
98
+ const exportData = await exportCircleOfTrust(cotId);
99
+ saveJsonToFile(exportData, filePath, includeMeta);
100
+ stopProgressIndicator(indicatorId, `Exported ${cotId} to ${filePath}.`, 'success');
83
101
  outcome = true;
84
102
  } catch (error) {
85
- failSpinner(`Error exporting ${cotId}: ${error.message}`);
103
+ stopProgressIndicator(indicatorId, `Error exporting ${cotId}: ${error.message}`, 'fail');
86
104
  }
87
105
  debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: end`);
88
106
  return outcome;
@@ -91,22 +109,24 @@ export async function exportCircleOfTrustToFile(cotId, file = null) {
91
109
  /**
92
110
  * Export all circles of trust to one file
93
111
  * @param {String} file Optional filename
112
+ * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
94
113
  */
95
- export async function exportCirclesOfTrustToFile(file = null) {
114
+ export async function exportCirclesOfTrustToFile(file = null, includeMeta = true) {
96
115
  let outcome = false;
97
116
  debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: begin`);
98
- showSpinner(`Exporting all circles of trust...`);
117
+ const indicatorId = createProgressIndicator('indeterminate', 0, `Exporting all circles of trust...`);
99
118
  try {
100
- let fileName = getTypedFilename(`all${titleCase(frodo.helper.utils.getRealmName(state.getRealm()))}CirclesOfTrust`, 'cot.saml');
119
+ let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm()))}CirclesOfTrust`, 'cot.saml');
101
120
  if (file) {
102
121
  fileName = file;
103
122
  }
104
- const exportData = await frodo.saml2.circlesOfTrust.exportCirclesOfTrust();
105
- saveJsonToFile(exportData, fileName);
106
- succeedSpinner(`Exported all circles of trust to ${fileName}.`);
123
+ const filePath = getFilePath(fileName, true);
124
+ const exportData = await exportCirclesOfTrust();
125
+ saveJsonToFile(exportData, filePath, includeMeta);
126
+ stopProgressIndicator(indicatorId, `Exported all circles of trust to ${filePath}.`, 'success');
107
127
  outcome = true;
108
128
  } catch (error) {
109
- failSpinner(`Error exporting circles of trust: ${error.message}`);
129
+ stopProgressIndicator(indicatorId, `Error exporting circles of trust: ${error.message}`, 'fail');
110
130
  }
111
131
  debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: end`);
112
132
  return outcome;
@@ -114,28 +134,30 @@ export async function exportCirclesOfTrustToFile(file = null) {
114
134
 
115
135
  /**
116
136
  * Export all circles of trust to individual files
137
+ * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
117
138
  */
118
- export async function exportCirclesOfTrustToFiles() {
139
+ export async function exportCirclesOfTrustToFiles(includeMeta = true) {
119
140
  debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: begin`);
120
141
  const errors = [];
142
+ let indicatorId;
121
143
  try {
122
- const cots = await frodo.saml2.circlesOfTrust.getCirclesOfTrust();
123
- createProgressBar(cots.length, 'Exporting circles of trust...');
144
+ const cots = await readCirclesOfTrust();
145
+ indicatorId = createProgressIndicator('determinate', cots.length, 'Exporting circles of trust...');
124
146
  for (const cot of cots) {
125
147
  const file = getTypedFilename(cot._id, 'cot.saml');
126
148
  try {
127
- const exportData = await frodo.saml2.circlesOfTrust.exportCircleOfTrust(cot._id);
128
- saveJsonToFile(exportData, file);
129
- updateProgressBar(`Exported ${cot.name}.`);
149
+ const exportData = await exportCircleOfTrust(cot._id);
150
+ saveJsonToFile(exportData, getFilePath(file, true), includeMeta);
151
+ updateProgressIndicator(indicatorId, `Exported ${cot.name}.`);
130
152
  } catch (error) {
131
153
  errors.push(error);
132
- updateProgressBar(`Error exporting ${cot.name}.`);
154
+ updateProgressIndicator(indicatorId, `Error exporting ${cot.name}.`);
133
155
  }
134
156
  }
135
- stopProgressBar(`Export complete.`);
157
+ stopProgressIndicator(indicatorId, `Export complete.`);
136
158
  } catch (error) {
137
159
  errors.push(error);
138
- stopProgressBar(`Error exporting circles of trust to files`);
160
+ stopProgressIndicator(indicatorId, `Error exporting circles of trust to files`);
139
161
  }
140
162
  debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: end`);
141
163
  return 0 === errors.length;
@@ -148,20 +170,19 @@ export async function exportCirclesOfTrustToFiles() {
148
170
  */
149
171
  export async function importCircleOfTrustFromFile(cotId, file) {
150
172
  let outcome = false;
151
- showSpinner(`Importing circle of trust ${cotId} from ${file}...`);
152
- fs.readFile(file, 'utf8', async (err, data) => {
153
- if (err) throw err;
154
- try {
155
- const fileData = JSON.parse(data);
156
- await frodo.saml2.circlesOfTrust.importCircleOfTrust(cotId, fileData);
157
- outcome = true;
158
- succeedSpinner(`Imported circle of trust ${cotId} from ${file}.`);
159
- } catch (error) {
160
- var _error$response;
161
- failSpinner(`Error importing circle of trust ${cotId} from ${file}.`);
162
- printMessage(((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data) || error, 'error');
163
- }
164
- });
173
+ const filePath = getFilePath(file);
174
+ const indicatorId = createProgressIndicator('indeterminate', 0, `Importing circle of trust ${cotId} from ${filePath}...`);
175
+ try {
176
+ const data = fs.readFileSync(filePath, 'utf8');
177
+ const fileData = JSON.parse(data);
178
+ await importCircleOfTrust(cotId, fileData);
179
+ outcome = true;
180
+ stopProgressIndicator(indicatorId, `Imported circle of trust ${cotId} from ${filePath}.`, 'success');
181
+ } catch (error) {
182
+ var _error$response;
183
+ stopProgressIndicator(indicatorId, `Error importing circle of trust ${cotId} from ${filePath}.`, 'fail');
184
+ printMessage(((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data) || error, 'error');
185
+ }
165
186
  return outcome;
166
187
  }
167
188
 
@@ -171,20 +192,19 @@ export async function importCircleOfTrustFromFile(cotId, file) {
171
192
  */
172
193
  export async function importFirstCircleOfTrustFromFile(file) {
173
194
  let outcome = false;
174
- showSpinner(`Importing first circle of trust from ${file}...`);
175
- fs.readFile(file, 'utf8', async (err, data) => {
176
- if (err) throw err;
177
- try {
178
- const fileData = JSON.parse(data);
179
- await frodo.saml2.circlesOfTrust.importFirstCircleOfTrust(fileData);
180
- outcome = true;
181
- succeedSpinner(`Imported first circle of trust from ${file}.`);
182
- } catch (error) {
183
- var _error$response2;
184
- failSpinner(`Error importing first circle of trust from ${file}.`);
185
- printMessage(((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data) || error, 'error');
186
- }
187
- });
195
+ const filePath = getFilePath(file);
196
+ const indicatorId = createProgressIndicator('indeterminate', 0, `Importing first circle of trust from ${filePath}...`);
197
+ try {
198
+ const data = fs.readFileSync(filePath, 'utf8');
199
+ const fileData = JSON.parse(data);
200
+ await importFirstCircleOfTrust(fileData);
201
+ outcome = true;
202
+ stopProgressIndicator(indicatorId, `Imported first circle of trust from ${filePath}.`, 'success');
203
+ } catch (error) {
204
+ var _error$response2;
205
+ stopProgressIndicator(indicatorId, `Error importing first circle of trust from ${filePath}.`, 'fail');
206
+ printMessage(((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data) || error, 'error');
207
+ }
188
208
  return outcome;
189
209
  }
190
210
 
@@ -194,20 +214,19 @@ export async function importFirstCircleOfTrustFromFile(file) {
194
214
  */
195
215
  export async function importCirclesOfTrustFromFile(file) {
196
216
  let outcome = false;
197
- showSpinner(`Importing circles of trust from ${file}...`);
198
- fs.readFile(file, 'utf8', async (err, data) => {
199
- if (err) throw err;
200
- try {
201
- const fileData = JSON.parse(data);
202
- await frodo.saml2.circlesOfTrust.importCirclesOfTrust(fileData);
203
- outcome = true;
204
- succeedSpinner(`Imported circles of trust from ${file}.`);
205
- } catch (error) {
206
- var _error$response3;
207
- failSpinner(`Error importing circles of trust from ${file}.`);
208
- printMessage(((_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data) || error, 'error');
209
- }
210
- });
217
+ const filePath = getFilePath(file);
218
+ const indicatorId = createProgressIndicator('indeterminate', 0, `Importing circles of trust from ${filePath}...`);
219
+ try {
220
+ const data = fs.readFileSync(filePath, 'utf8');
221
+ const fileData = JSON.parse(data);
222
+ await importCirclesOfTrust(fileData);
223
+ outcome = true;
224
+ stopProgressIndicator(indicatorId, `Imported circles of trust from ${filePath}.`, 'success');
225
+ } catch (error) {
226
+ var _error$response3;
227
+ stopProgressIndicator(indicatorId, `Error importing circles of trust from ${filePath}.`, 'fail');
228
+ printMessage(((_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data) || error, 'error');
229
+ }
211
230
  return outcome;
212
231
  }
213
232
 
@@ -216,11 +235,12 @@ export async function importCirclesOfTrustFromFile(file) {
216
235
  */
217
236
  export async function importCirclesOfTrustFromFiles() {
218
237
  const errors = [];
238
+ let indicatorId;
219
239
  try {
220
240
  debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: begin`);
221
- const names = fs.readdirSync('.');
222
- const files = names.filter(name => name.toLowerCase().endsWith('.policy.authz.json'));
223
- createProgressBar(files.length, 'Importing circles of trust...');
241
+ const names = fs.readdirSync(getWorkingDirectory());
242
+ const files = names.filter(name => name.toLowerCase().endsWith('.cot.saml.json')).map(name => getFilePath(name));
243
+ indicatorId = createProgressIndicator('determinate', files.length, 'Importing circles of trust...');
224
244
  let total = 0;
225
245
  for (const file of files) {
226
246
  try {
@@ -228,21 +248,21 @@ export async function importCirclesOfTrustFromFiles() {
228
248
  const fileData = JSON.parse(data);
229
249
  const count = Object.keys(fileData.saml.cot).length;
230
250
  total += count;
231
- await frodo.saml2.circlesOfTrust.importCirclesOfTrust(fileData);
232
- updateProgressBar(`Imported ${count} circles of trust from ${file}`);
251
+ await importCirclesOfTrust(fileData);
252
+ updateProgressIndicator(indicatorId, `Imported ${count} circles of trust from ${file}`);
233
253
  } catch (error) {
234
254
  errors.push(error);
235
- updateProgressBar(`Error importing circles of trust from ${file}`);
255
+ updateProgressIndicator(indicatorId, `Error importing circles of trust from ${file}`);
236
256
  printMessage(error, 'error');
237
257
  }
238
258
  }
239
- stopProgressBar(`Imported ${total} circles of trust from ${files.length} files.`);
259
+ stopProgressIndicator(indicatorId, `Imported ${total} circles of trust from ${files.length} files.`);
240
260
  } catch (error) {
241
261
  errors.push(error);
242
- stopProgressBar(`Error importing circles of trust from files.`);
262
+ stopProgressIndicator(indicatorId, `Error importing circles of trust from files.`);
243
263
  printMessage(error, 'error');
244
264
  }
245
265
  debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: end`);
246
266
  return 0 === errors.length;
247
267
  }
248
- //# sourceMappingURL=CirclesOfTrustOps.js.map
268
+ //# sourceMappingURL=CirclesOfTrustOps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CirclesOfTrustOps.js","names":["frodo","state","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","getTypedFilename","saveJsonToFile","titleCase","getOneLineDescription","cotObj","description","_id","getTableHeaderMd","markdown","getTableRowMd","row","status","trustedProviders","map","provider","split","join","listCirclesOfTrust","long","outcome","cotList","saml2","circlesOfTrust","getCirclesOfTrust","error","sort","a","b","localeCompare","forEach","cot","table","push","toString","exportCircleOfTrustToFile","cotId","file","fileName","exportData","exportCircleOfTrust","message","exportCirclesOfTrustToFile","helper","utils","getRealmName","getRealm","exportCirclesOfTrust","exportCirclesOfTrustToFiles","errors","cots","length","name","importCircleOfTrustFromFile","readFile","err","data","fileData","JSON","parse","importCircleOfTrust","_error$response","response","importFirstCircleOfTrustFromFile","importFirstCircleOfTrust","_error$response2","importCirclesOfTrustFromFile","importCirclesOfTrust","_error$response3","importCirclesOfTrustFromFiles","names","readdirSync","files","filter","toLowerCase","endsWith","total","readFileSync","count","Object","keys","saml"],"sources":["ops/CirclesOfTrustOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport type { CircleOfTrustSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport type { CirclesOfTrustExportInterface } from '@rockcarver/frodo-lib/types/ops/OpsTypes';\n\n/**\n * Get a one-line description of the circle of trust object\n * @param {CircleOfTrustSkeleton} cotObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(cotObj: CircleOfTrustSkeleton): string {\n const description = `[${cotObj._id['brightCyan']}]`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Name/Id | Status | Trusted Providers |\\n';\n markdown += '| ------- | ------ | ----------------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the circle of trust in markdown\n * @param {SocialIdpSkeleton} cotObj circle of trust object to describe\n * @returns {string} a table-row of the circle of trust in markdown\n */\nexport function getTableRowMd(cotObj: CircleOfTrustSkeleton): string {\n const row = `| ${cotObj._id} | ${\n cotObj.status === 'active'\n ? ':white_check_mark: `active`'\n : ':o: `inactive`'\n } | ${cotObj.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('<br>')} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {String} long Long list format with details\n */\nexport async function listCirclesOfTrust(long = false): Promise<boolean> {\n let outcome = false;\n let cotList = [];\n try {\n cotList = await frodo.saml2.circlesOfTrust.getCirclesOfTrust();\n } catch (error) {\n printMessage(`getCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n cotList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n cotList.forEach((cot) => {\n printMessage(`${cot._id}`, 'data');\n });\n outcome = true;\n } else {\n const table = createTable([\n 'Name'['brightCyan'],\n 'Description'['brightCyan'],\n 'Status'['brightCyan'],\n 'Trusted Providers'['brightCyan'],\n ]);\n cotList.forEach((cot) => {\n table.push([\n cot._id,\n cot.description,\n cot.status,\n cot.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('\\n'),\n ]);\n });\n printMessage(table.toString());\n outcome = true;\n }\n return outcome;\n}\n\n/**\n * Export a single circle of trust to file\n * @param {String} cotId circle of trust id/name\n * @param {String} file Optional filename\n */\nexport async function exportCircleOfTrustToFile(\n cotId: string,\n file: string = null\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: begin`);\n showSpinner(`Exporting ${cotId}...`);\n try {\n let fileName = getTypedFilename(cotId, 'cot.saml');\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.saml2.circlesOfTrust.exportCircleOfTrust(\n cotId\n );\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${cotId} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${cotId}: ${error.message}`);\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: end`);\n return outcome;\n}\n\n/**\n * Export all circles of trust to one file\n * @param {String} file Optional filename\n */\nexport async function exportCirclesOfTrustToFile(\n file: string = null\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: begin`);\n showSpinner(`Exporting all circles of trust...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(\n frodo.helper.utils.getRealmName(state.getRealm())\n )}CirclesOfTrust`,\n 'cot.saml'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await frodo.saml2.circlesOfTrust.exportCirclesOfTrust();\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all circles of trust to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting circles of trust: ${error.message}`);\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: end`);\n return outcome;\n}\n\n/**\n * Export all circles of trust to individual files\n */\nexport async function exportCirclesOfTrustToFiles(): Promise<boolean> {\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: begin`);\n const errors = [];\n try {\n const cots: CircleOfTrustSkeleton[] =\n await frodo.saml2.circlesOfTrust.getCirclesOfTrust();\n createProgressBar(cots.length, 'Exporting circles of trust...');\n for (const cot of cots) {\n const file = getTypedFilename(cot._id, 'cot.saml');\n try {\n const exportData: CirclesOfTrustExportInterface =\n await frodo.saml2.circlesOfTrust.exportCircleOfTrust(cot._id);\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${cot.name}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${cot.name}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting circles of trust to files`);\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {String} file Import file name\n */\nexport async function importCircleOfTrustFromFile(\n cotId: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing circle of trust ${cotId} from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n await frodo.saml2.circlesOfTrust.importCircleOfTrust(cotId, fileData);\n outcome = true;\n succeedSpinner(`Imported circle of trust ${cotId} from ${file}.`);\n } catch (error) {\n failSpinner(`Error importing circle of trust ${cotId} from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import first SAML circle of trust from file\n * @param {String} file Import file name\n */\nexport async function importFirstCircleOfTrustFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing first circle of trust from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n await frodo.saml2.circlesOfTrust.importFirstCircleOfTrust(fileData);\n outcome = true;\n succeedSpinner(`Imported first circle of trust from ${file}.`);\n } catch (error) {\n failSpinner(`Error importing first circle of trust from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import all SAML circles of trust from file\n * @param {String} file Import file name\n */\nexport async function importCirclesOfTrustFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n showSpinner(`Importing circles of trust from ${file}...`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n await frodo.saml2.circlesOfTrust.importCirclesOfTrust(fileData);\n outcome = true;\n succeedSpinner(`Imported circles of trust from ${file}.`);\n } catch (error) {\n failSpinner(`Error importing circles of trust from ${file}.`);\n printMessage(error.response?.data || error, 'error');\n }\n });\n return outcome;\n}\n\n/**\n * Import all SAML circles of trust from all *.cot.saml.json files in the current directory\n */\nexport async function importCirclesOfTrustFromFiles(): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.policy.authz.json')\n );\n createProgressBar(files.length, 'Importing circles of trust...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: CirclesOfTrustExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.saml.cot).length;\n total += count;\n await frodo.saml2.circlesOfTrust.importCirclesOfTrust(fileData);\n updateProgressBar(`Imported ${count} circles of trust from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing circles of trust from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Imported ${total} circles of trust from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing circles of trust from files.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CirclesOfTrustOps.js","names":["frodo","state","fs","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","getRealmName","getTypedFilename","saveJsonToFile","titleCase","getFilePath","getWorkingDirectory","utils","readCirclesOfTrust","exportCircleOfTrust","exportCirclesOfTrust","importCircleOfTrust","importCirclesOfTrust","importFirstCircleOfTrust","saml2","circlesOfTrust","getOneLineDescription","cotObj","description","_id","getTableHeaderMd","markdown","getTableRowMd","row","status","trustedProviders","map","provider","split","join","listCirclesOfTrust","long","outcome","cotList","error","sort","a","b","localeCompare","forEach","cot","table","push","toString","exportCircleOfTrustToFile","cotId","file","includeMeta","indicatorId","fileName","filePath","exportData","message","exportCirclesOfTrustToFile","getRealm","exportCirclesOfTrustToFiles","errors","cots","length","name","importCircleOfTrustFromFile","data","readFileSync","fileData","JSON","parse","_error$response","response","importFirstCircleOfTrustFromFile","_error$response2","importCirclesOfTrustFromFile","_error$response3","importCirclesOfTrustFromFiles","names","readdirSync","files","filter","toLowerCase","endsWith","total","count","Object","keys","saml"],"sources":["../../src/ops/CirclesOfTrustOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type CircleOfTrustSkeleton } from '@rockcarver/frodo-lib/types/api/CirclesOfTrustApi';\nimport { type CirclesOfTrustExportInterface } from '@rockcarver/frodo-lib/types/ops/CirclesOfTrustOps';\nimport fs from 'fs';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\n\nconst {\n getRealmName,\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readCirclesOfTrust,\n exportCircleOfTrust,\n exportCirclesOfTrust,\n importCircleOfTrust,\n importCirclesOfTrust,\n importFirstCircleOfTrust,\n} = frodo.saml2.circlesOfTrust;\n\n/**\n * Get a one-line description of the circle of trust object\n * @param {CircleOfTrustSkeleton} cotObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(cotObj: CircleOfTrustSkeleton): string {\n const description = `[${cotObj._id['brightCyan']}]`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Name/Id | Status | Trusted Providers |\\n';\n markdown += '| ------- | ------ | ----------------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the circle of trust in markdown\n * @param {SocialIdpSkeleton} cotObj circle of trust object to describe\n * @returns {string} a table-row of the circle of trust in markdown\n */\nexport function getTableRowMd(cotObj: CircleOfTrustSkeleton): string {\n const row = `| ${cotObj._id} | ${\n cotObj.status === 'active'\n ? ':white_check_mark: `active`'\n : ':o: `inactive`'\n } | ${cotObj.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('<br>')} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {String} long Long list format with details\n */\nexport async function listCirclesOfTrust(long = false): Promise<boolean> {\n let outcome = false;\n let cotList = [];\n try {\n cotList = await readCirclesOfTrust();\n } catch (error) {\n printMessage(`readCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n cotList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n cotList.forEach((cot) => {\n printMessage(`${cot._id}`, 'data');\n });\n outcome = true;\n } else {\n const table = createTable([\n 'Name'['brightCyan'],\n 'Description'['brightCyan'],\n 'Status'['brightCyan'],\n 'Trusted Providers'['brightCyan'],\n ]);\n cotList.forEach((cot) => {\n table.push([\n cot._id,\n cot.description,\n cot.status,\n cot.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('\\n'),\n ]);\n });\n printMessage(table.toString(), 'data');\n outcome = true;\n }\n return outcome;\n}\n\n/**\n * Export a single circle of trust to file\n * @param {String} cotId circle of trust id/name\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportCircleOfTrustToFile(\n cotId: string,\n file: string = null,\n includeMeta = true\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: begin`);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Exporting ${cotId}...`\n );\n try {\n let fileName = getTypedFilename(cotId, 'cot.saml');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportCircleOfTrust(cotId);\n saveJsonToFile(exportData, filePath, includeMeta);\n stopProgressIndicator(\n indicatorId,\n `Exported ${cotId} to ${filePath}.`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error exporting ${cotId}: ${error.message}`,\n 'fail'\n );\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: end`);\n return outcome;\n}\n\n/**\n * Export all circles of trust to one file\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportCirclesOfTrustToFile(\n file: string = null,\n includeMeta = true\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: begin`);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Exporting all circles of trust...`\n );\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}CirclesOfTrust`,\n 'cot.saml'\n );\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportCirclesOfTrust();\n saveJsonToFile(exportData, filePath, includeMeta);\n stopProgressIndicator(\n indicatorId,\n `Exported all circles of trust to ${filePath}.`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error exporting circles of trust: ${error.message}`,\n 'fail'\n );\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: end`);\n return outcome;\n}\n\n/**\n * Export all circles of trust to individual files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportCirclesOfTrustToFiles(\n includeMeta = true\n): Promise<boolean> {\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: begin`);\n const errors = [];\n let indicatorId: string;\n try {\n const cots: CircleOfTrustSkeleton[] = await readCirclesOfTrust();\n indicatorId = createProgressIndicator(\n 'determinate',\n cots.length,\n 'Exporting circles of trust...'\n );\n for (const cot of cots) {\n const file = getTypedFilename(cot._id, 'cot.saml');\n try {\n const exportData: CirclesOfTrustExportInterface =\n await exportCircleOfTrust(cot._id);\n saveJsonToFile(exportData, getFilePath(file, true), includeMeta);\n updateProgressIndicator(indicatorId, `Exported ${cot.name}.`);\n } catch (error) {\n errors.push(error);\n updateProgressIndicator(indicatorId, `Error exporting ${cot.name}.`);\n }\n }\n stopProgressIndicator(indicatorId, `Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressIndicator(\n indicatorId,\n `Error exporting circles of trust to files`\n );\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {String} file Import file name\n */\nexport async function importCircleOfTrustFromFile(\n cotId: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing circle of trust ${cotId} from ${filePath}...`\n );\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importCircleOfTrust(cotId, fileData);\n outcome = true;\n stopProgressIndicator(\n indicatorId,\n `Imported circle of trust ${cotId} from ${filePath}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing circle of trust ${cotId} from ${filePath}.`,\n 'fail'\n );\n printMessage(error.response?.data || error, 'error');\n }\n return outcome;\n}\n\n/**\n * Import first SAML circle of trust from file\n * @param {String} file Import file name\n */\nexport async function importFirstCircleOfTrustFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing first circle of trust from ${filePath}...`\n );\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importFirstCircleOfTrust(fileData);\n outcome = true;\n stopProgressIndicator(\n indicatorId,\n `Imported first circle of trust from ${filePath}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing first circle of trust from ${filePath}.`,\n 'fail'\n );\n printMessage(error.response?.data || error, 'error');\n }\n return outcome;\n}\n\n/**\n * Import all SAML circles of trust from file\n * @param {String} file Import file name\n */\nexport async function importCirclesOfTrustFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing circles of trust from ${filePath}...`\n );\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importCirclesOfTrust(fileData);\n outcome = true;\n stopProgressIndicator(\n indicatorId,\n `Imported circles of trust from ${filePath}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing circles of trust from ${filePath}.`,\n 'fail'\n );\n printMessage(error.response?.data || error, 'error');\n }\n return outcome;\n}\n\n/**\n * Import all SAML circles of trust from all *.cot.saml.json files in the current directory\n */\nexport async function importCirclesOfTrustFromFiles(): Promise<boolean> {\n const errors = [];\n let indicatorId: string;\n try {\n debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: begin`);\n const names = fs.readdirSync(getWorkingDirectory());\n const files = names\n .filter((name) => name.toLowerCase().endsWith('.cot.saml.json'))\n .map((name) => getFilePath(name));\n indicatorId = createProgressIndicator(\n 'determinate',\n files.length,\n 'Importing circles of trust...'\n );\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: CirclesOfTrustExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.saml.cot).length;\n total += count;\n await importCirclesOfTrust(fileData);\n updateProgressIndicator(\n indicatorId,\n `Imported ${count} circles of trust from ${file}`\n );\n } catch (error) {\n errors.push(error);\n updateProgressIndicator(\n indicatorId,\n `Error importing circles of trust from ${file}`\n );\n printMessage(error, 'error');\n }\n }\n stopProgressIndicator(\n indicatorId,\n `Imported ${total} circles of trust from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressIndicator(\n indicatorId,\n `Error importing circles of trust from files.`\n );\n printMessage(error, 'error');\n }\n debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}