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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/CHANGELOG.md +275 -4
  2. package/esm/app.js +20 -5
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/FrodoCommand.js +28 -6
  5. package/esm/cli/FrodoCommand.js.map +1 -1
  6. package/esm/cli/_template/something-delete.js +7 -4
  7. package/esm/cli/_template/something-delete.js.map +1 -1
  8. package/esm/cli/_template/something-describe.js +7 -4
  9. package/esm/cli/_template/something-describe.js.map +1 -1
  10. package/esm/cli/_template/something-else-delete.js +7 -4
  11. package/esm/cli/_template/something-else-delete.js.map +1 -1
  12. package/esm/cli/_template/something-else-describe.js +7 -4
  13. package/esm/cli/_template/something-else-describe.js.map +1 -1
  14. package/esm/cli/_template/something-else-export.js +7 -4
  15. package/esm/cli/_template/something-else-export.js.map +1 -1
  16. package/esm/cli/_template/something-else-import.js +7 -4
  17. package/esm/cli/_template/something-else-import.js.map +1 -1
  18. package/esm/cli/_template/something-else-list.js +7 -4
  19. package/esm/cli/_template/something-else-list.js.map +1 -1
  20. package/esm/cli/_template/something-else.js +1 -1
  21. package/esm/cli/_template/something-else.js.map +1 -1
  22. package/esm/cli/_template/something-export.js +7 -4
  23. package/esm/cli/_template/something-export.js.map +1 -1
  24. package/esm/cli/_template/something-import.js +7 -4
  25. package/esm/cli/_template/something-import.js.map +1 -1
  26. package/esm/cli/_template/something-list.js +7 -4
  27. package/esm/cli/_template/something-list.js.map +1 -1
  28. package/esm/cli/_template/something-other-delete.js +7 -4
  29. package/esm/cli/_template/something-other-delete.js.map +1 -1
  30. package/esm/cli/_template/something-other-describe.js +7 -4
  31. package/esm/cli/_template/something-other-describe.js.map +1 -1
  32. package/esm/cli/_template/something-other-export.js +7 -4
  33. package/esm/cli/_template/something-other-export.js.map +1 -1
  34. package/esm/cli/_template/something-other-import.js +7 -4
  35. package/esm/cli/_template/something-other-import.js.map +1 -1
  36. package/esm/cli/_template/something-other-list.js +7 -4
  37. package/esm/cli/_template/something-other-list.js.map +1 -1
  38. package/esm/cli/_template/something-other.js +1 -1
  39. package/esm/cli/_template/something-other.js.map +1 -1
  40. package/esm/cli/_template/something.js +2 -2
  41. package/esm/cli/_template/something.js.map +1 -1
  42. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +10 -4
  43. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
  44. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +14 -7
  45. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  46. package/esm/cli/admin/admin-federation-export.js +45 -0
  47. package/esm/cli/admin/admin-federation-export.js.map +1 -0
  48. package/esm/cli/admin/admin-federation-import.js +49 -0
  49. package/esm/cli/admin/admin-federation-import.js.map +1 -0
  50. package/esm/cli/admin/admin-federation-list.js +29 -0
  51. package/esm/cli/admin/admin-federation-list.js.map +1 -0
  52. package/esm/cli/admin/admin-federation.js +13 -0
  53. package/esm/cli/admin/admin-federation.js.map +1 -0
  54. package/esm/cli/admin/admin-get-access-token.js +12 -6
  55. package/esm/cli/admin/admin-get-access-token.js.map +1 -1
  56. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +13 -7
  57. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  58. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +11 -5
  59. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
  60. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +11 -5
  61. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
  62. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +11 -5
  63. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
  64. package/esm/cli/admin/admin-list-static-user-mappings.js +12 -6
  65. package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
  66. package/esm/cli/admin/admin-remove-static-user-mapping.js +12 -5
  67. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  68. package/esm/cli/admin/admin-repair-org-model.js +11 -5
  69. package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
  70. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +12 -6
  71. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  72. package/esm/cli/admin/admin-show-generic-extension-attributes.js +11 -5
  73. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
  74. package/esm/cli/admin/admin-train-auto-access-model.js +33 -0
  75. package/esm/cli/admin/admin-train-auto-access-model.js.map +1 -0
  76. package/esm/cli/admin/admin.js +6 -2
  77. package/esm/cli/admin/admin.js.map +1 -1
  78. package/esm/cli/agent/agent-delete.js +13 -6
  79. package/esm/cli/agent/agent-delete.js.map +1 -1
  80. package/esm/cli/agent/agent-describe.js +7 -4
  81. package/esm/cli/agent/agent-describe.js.map +1 -1
  82. package/esm/cli/agent/agent-export.js +8 -5
  83. package/esm/cli/agent/agent-export.js.map +1 -1
  84. package/esm/cli/agent/agent-gateway-delete.js +13 -6
  85. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  86. package/esm/cli/agent/agent-gateway-describe.js +7 -4
  87. package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
  88. package/esm/cli/agent/agent-gateway-export.js +8 -5
  89. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  90. package/esm/cli/agent/agent-gateway-import.js +8 -5
  91. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  92. package/esm/cli/agent/agent-gateway-list.js +7 -4
  93. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  94. package/esm/cli/agent/agent-gateway.js +1 -1
  95. package/esm/cli/agent/agent-gateway.js.map +1 -1
  96. package/esm/cli/agent/agent-import.js +8 -5
  97. package/esm/cli/agent/agent-import.js.map +1 -1
  98. package/esm/cli/agent/agent-java-delete.js +13 -6
  99. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  100. package/esm/cli/agent/agent-java-describe.js +7 -4
  101. package/esm/cli/agent/agent-java-describe.js.map +1 -1
  102. package/esm/cli/agent/agent-java-export.js +8 -5
  103. package/esm/cli/agent/agent-java-export.js.map +1 -1
  104. package/esm/cli/agent/agent-java-import.js +8 -5
  105. package/esm/cli/agent/agent-java-import.js.map +1 -1
  106. package/esm/cli/agent/agent-java-list.js +7 -4
  107. package/esm/cli/agent/agent-java-list.js.map +1 -1
  108. package/esm/cli/agent/agent-java.js +1 -1
  109. package/esm/cli/agent/agent-java.js.map +1 -1
  110. package/esm/cli/agent/agent-list.js +7 -4
  111. package/esm/cli/agent/agent-list.js.map +1 -1
  112. package/esm/cli/agent/agent-web-delete.js +13 -6
  113. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  114. package/esm/cli/agent/agent-web-describe.js +7 -4
  115. package/esm/cli/agent/agent-web-describe.js.map +1 -1
  116. package/esm/cli/agent/agent-web-export.js +8 -5
  117. package/esm/cli/agent/agent-web-export.js.map +1 -1
  118. package/esm/cli/agent/agent-web-import.js +8 -5
  119. package/esm/cli/agent/agent-web-import.js.map +1 -1
  120. package/esm/cli/agent/agent-web-list.js +7 -4
  121. package/esm/cli/agent/agent-web-list.js.map +1 -1
  122. package/esm/cli/agent/agent-web.js +3 -3
  123. package/esm/cli/agent/agent-web.js.map +1 -1
  124. package/esm/cli/agent/agent.js +2 -2
  125. package/esm/cli/agent/agent.js.map +1 -1
  126. package/esm/cli/app/app-delete.js +27 -8
  127. package/esm/cli/app/app-delete.js.map +1 -1
  128. package/esm/cli/app/app-describe.js +9 -5
  129. package/esm/cli/app/app-describe.js.map +1 -1
  130. package/esm/cli/app/app-export.js +17 -13
  131. package/esm/cli/app/app-export.js.map +1 -1
  132. package/esm/cli/app/app-import.js +21 -17
  133. package/esm/cli/app/app-import.js.map +1 -1
  134. package/esm/cli/app/app-list.js +12 -8
  135. package/esm/cli/app/app-list.js.map +1 -1
  136. package/esm/cli/app/app.js +8 -12
  137. package/esm/cli/app/app.js.map +1 -1
  138. package/esm/cli/authn/authn-describe.js +30 -0
  139. package/esm/cli/authn/authn-describe.js.map +1 -0
  140. package/esm/cli/authn/authn-export.js +26 -0
  141. package/esm/cli/authn/authn-export.js.map +1 -0
  142. package/esm/cli/authn/authn-import.js +26 -0
  143. package/esm/cli/authn/authn-import.js.map +1 -0
  144. package/esm/cli/authn/authn.js +12 -0
  145. package/esm/cli/authn/authn.js.map +1 -0
  146. package/esm/cli/authz/authz-policy-delete.js +11 -8
  147. package/esm/cli/authz/authz-policy-delete.js.map +1 -1
  148. package/esm/cli/authz/authz-policy-describe.js +8 -5
  149. package/esm/cli/authz/authz-policy-describe.js.map +1 -1
  150. package/esm/cli/authz/authz-policy-export.js +12 -9
  151. package/esm/cli/authz/authz-policy-export.js.map +1 -1
  152. package/esm/cli/authz/authz-policy-import.js +10 -7
  153. package/esm/cli/authz/authz-policy-import.js.map +1 -1
  154. package/esm/cli/authz/authz-policy-list.js +9 -6
  155. package/esm/cli/authz/authz-policy-list.js.map +1 -1
  156. package/esm/cli/authz/authz-policy.js +1 -1
  157. package/esm/cli/authz/authz-policy.js.map +1 -1
  158. package/esm/cli/authz/authz-set-delete.js +10 -7
  159. package/esm/cli/authz/authz-set-delete.js.map +1 -1
  160. package/esm/cli/authz/authz-set-describe.js +8 -5
  161. package/esm/cli/authz/authz-set-describe.js.map +1 -1
  162. package/esm/cli/authz/authz-set-export.js +10 -7
  163. package/esm/cli/authz/authz-set-export.js.map +1 -1
  164. package/esm/cli/authz/authz-set-import.js +10 -7
  165. package/esm/cli/authz/authz-set-import.js.map +1 -1
  166. package/esm/cli/authz/authz-set-list.js +7 -4
  167. package/esm/cli/authz/authz-set-list.js.map +1 -1
  168. package/esm/cli/authz/authz-set.js +1 -1
  169. package/esm/cli/authz/authz-set.js.map +1 -1
  170. package/esm/cli/authz/authz-type-delete.js +12 -9
  171. package/esm/cli/authz/authz-type-delete.js.map +1 -1
  172. package/esm/cli/authz/authz-type-describe.js +9 -6
  173. package/esm/cli/authz/authz-type-describe.js.map +1 -1
  174. package/esm/cli/authz/authz-type-export.js +11 -8
  175. package/esm/cli/authz/authz-type-export.js.map +1 -1
  176. package/esm/cli/authz/authz-type-import.js +12 -9
  177. package/esm/cli/authz/authz-type-import.js.map +1 -1
  178. package/esm/cli/authz/authz-type-list.js +8 -5
  179. package/esm/cli/authz/authz-type-list.js.map +1 -1
  180. package/esm/cli/authz/authz-type.js +1 -1
  181. package/esm/cli/authz/authz-type.js.map +1 -1
  182. package/esm/cli/authz/authz.js +2 -2
  183. package/esm/cli/authz/authz.js.map +1 -1
  184. package/esm/cli/conn/conn-delete.js +2 -2
  185. package/esm/cli/conn/conn-delete.js.map +1 -1
  186. package/esm/cli/conn/conn-describe.js +2 -2
  187. package/esm/cli/conn/conn-describe.js.map +1 -1
  188. package/esm/cli/conn/conn-list.js +2 -2
  189. package/esm/cli/conn/conn-list.js.map +1 -1
  190. package/esm/cli/conn/conn-save.js +31 -15
  191. package/esm/cli/conn/conn-save.js.map +1 -1
  192. package/esm/cli/conn/conn.js +2 -2
  193. package/esm/cli/conn/conn.js.map +1 -1
  194. package/esm/cli/email/email-template-export.js +10 -7
  195. package/esm/cli/email/email-template-export.js.map +1 -1
  196. package/esm/cli/email/email-template-import.js +11 -8
  197. package/esm/cli/email/email-template-import.js.map +1 -1
  198. package/esm/cli/email/email-template-list.js +8 -5
  199. package/esm/cli/email/email-template-list.js.map +1 -1
  200. package/esm/cli/email/email-template.js +1 -1
  201. package/esm/cli/email/email-template.js.map +1 -1
  202. package/esm/cli/email/email.js +2 -2
  203. package/esm/cli/email/email.js.map +1 -1
  204. package/esm/cli/esv/esv-apply.js +18 -8
  205. package/esm/cli/esv/esv-apply.js.map +1 -1
  206. package/esm/cli/esv/esv-secret-create.js +8 -5
  207. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  208. package/esm/cli/esv/esv-secret-delete.js +9 -6
  209. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  210. package/esm/cli/esv/esv-secret-describe.js +8 -5
  211. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  212. package/esm/cli/esv/esv-secret-export.js +19 -5
  213. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  214. package/esm/cli/esv/esv-secret-import.js +7 -4
  215. package/esm/cli/esv/esv-secret-import.js.map +1 -1
  216. package/esm/cli/esv/esv-secret-list.js +8 -5
  217. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  218. package/esm/cli/esv/esv-secret-set.js +8 -5
  219. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  220. package/esm/cli/esv/esv-secret-version-activate.js +8 -5
  221. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  222. package/esm/cli/esv/esv-secret-version-create.js +9 -6
  223. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  224. package/esm/cli/esv/esv-secret-version-deactivate.js +8 -5
  225. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  226. package/esm/cli/esv/esv-secret-version-delete.js +9 -6
  227. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  228. package/esm/cli/esv/esv-secret-version-list.js +8 -5
  229. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  230. package/esm/cli/esv/esv-secret-version.js +1 -1
  231. package/esm/cli/esv/esv-secret-version.js.map +1 -1
  232. package/esm/cli/esv/esv-secret.js +2 -3
  233. package/esm/cli/esv/esv-secret.js.map +1 -1
  234. package/esm/cli/esv/esv-variable-create.js +10 -6
  235. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  236. package/esm/cli/esv/esv-variable-delete.js +10 -7
  237. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  238. package/esm/cli/esv/esv-variable-describe.js +10 -7
  239. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  240. package/esm/cli/esv/esv-variable-export.js +20 -6
  241. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  242. package/esm/cli/esv/esv-variable-import.js +7 -4
  243. package/esm/cli/esv/esv-variable-import.js.map +1 -1
  244. package/esm/cli/esv/esv-variable-list.js +8 -5
  245. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  246. package/esm/cli/esv/esv-variable-set.js +8 -5
  247. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  248. package/esm/cli/esv/esv-variable.js +2 -3
  249. package/esm/cli/esv/esv-variable.js.map +1 -1
  250. package/esm/cli/esv/esv.js +2 -2
  251. package/esm/cli/esv/esv.js.map +1 -1
  252. package/esm/cli/idm/idm-count.js +9 -6
  253. package/esm/cli/idm/idm-count.js.map +1 -1
  254. package/esm/cli/idm/idm-export.js +21 -12
  255. package/esm/cli/idm/idm-export.js.map +1 -1
  256. package/esm/cli/idm/idm-import.js +22 -13
  257. package/esm/cli/idm/idm-import.js.map +1 -1
  258. package/esm/cli/idm/idm-list.js +7 -4
  259. package/esm/cli/idm/idm-list.js.map +1 -1
  260. package/esm/cli/idm/idm.js +2 -2
  261. package/esm/cli/idm/idm.js.map +1 -1
  262. package/esm/cli/idp/idp-export.js +11 -8
  263. package/esm/cli/idp/idp-export.js.map +1 -1
  264. package/esm/cli/idp/idp-import.js +15 -12
  265. package/esm/cli/idp/idp-import.js.map +1 -1
  266. package/esm/cli/idp/idp-list.js +7 -4
  267. package/esm/cli/idp/idp-list.js.map +1 -1
  268. package/esm/cli/idp/idp.js +2 -2
  269. package/esm/cli/idp/idp.js.map +1 -1
  270. package/esm/cli/info/info.js +16 -10
  271. package/esm/cli/info/info.js.map +1 -1
  272. package/esm/cli/journey/journey-delete.js +8 -5
  273. package/esm/cli/journey/journey-delete.js.map +1 -1
  274. package/esm/cli/journey/journey-describe.js +19 -10
  275. package/esm/cli/journey/journey-describe.js.map +1 -1
  276. package/esm/cli/journey/journey-disable.js +12 -6
  277. package/esm/cli/journey/journey-disable.js.map +1 -1
  278. package/esm/cli/journey/journey-enable.js +12 -6
  279. package/esm/cli/journey/journey-enable.js.map +1 -1
  280. package/esm/cli/journey/journey-export.js +21 -9
  281. package/esm/cli/journey/journey-export.js.map +1 -1
  282. package/esm/cli/journey/journey-import.js +11 -8
  283. package/esm/cli/journey/journey-import.js.map +1 -1
  284. package/esm/cli/journey/journey-list.js +6 -3
  285. package/esm/cli/journey/journey-list.js.map +1 -1
  286. package/esm/cli/journey/journey-prune.js +23 -12
  287. package/esm/cli/journey/journey-prune.js.map +1 -1
  288. package/esm/cli/journey/journey.js +2 -2
  289. package/esm/cli/journey/journey.js.map +1 -1
  290. package/esm/cli/{logging/logs-fetch.js → log/log-fetch.js} +68 -36
  291. package/esm/cli/log/log-fetch.js.map +1 -0
  292. package/esm/cli/log/log-key-delete.js +35 -0
  293. package/esm/cli/log/log-key-delete.js.map +1 -0
  294. package/esm/cli/log/log-key-describe.js +22 -0
  295. package/esm/cli/log/log-key-describe.js.map +1 -0
  296. package/esm/cli/log/log-key-list.js +26 -0
  297. package/esm/cli/log/log-key-list.js.map +1 -0
  298. package/esm/cli/log/log-key.js +8 -0
  299. package/esm/cli/log/log-key.js.map +1 -0
  300. package/esm/cli/log/log-list.js +80 -0
  301. package/esm/cli/log/log-list.js.map +1 -0
  302. package/esm/cli/log/log-tail.js +77 -0
  303. package/esm/cli/log/log-tail.js.map +1 -0
  304. package/esm/cli/{logging/logs.js → log/log.js} +6 -3
  305. package/esm/cli/log/log.js.map +1 -0
  306. package/esm/cli/oauth/oauth-client-delete.js +22 -0
  307. package/esm/cli/oauth/oauth-client-delete.js.map +1 -0
  308. package/esm/cli/oauth/oauth-client-describe.js +22 -0
  309. package/esm/cli/oauth/oauth-client-describe.js.map +1 -0
  310. package/esm/cli/oauth/oauth-client-export.js +52 -0
  311. package/esm/cli/oauth/oauth-client-export.js.map +1 -0
  312. package/esm/cli/oauth/oauth-client-import.js +57 -0
  313. package/esm/cli/oauth/oauth-client-import.js.map +1 -0
  314. package/esm/cli/oauth/oauth-client-list.js +25 -0
  315. package/esm/cli/oauth/oauth-client-list.js.map +1 -0
  316. package/esm/cli/oauth/oauth-client.js +14 -0
  317. package/esm/cli/oauth/oauth-client.js.map +1 -0
  318. package/esm/cli/oauth/oauth.js +13 -0
  319. package/esm/cli/oauth/oauth.js.map +1 -0
  320. package/esm/cli/realm/realm-add-custom-domain.js +8 -5
  321. package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
  322. package/esm/cli/realm/realm-describe.js +8 -5
  323. package/esm/cli/realm/realm-describe.js.map +1 -1
  324. package/esm/cli/realm/realm-list.js +8 -5
  325. package/esm/cli/realm/realm-list.js.map +1 -1
  326. package/esm/cli/realm/realm-remove-custom-domain.js +11 -5
  327. package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
  328. package/esm/cli/realm/realm.js +2 -2
  329. package/esm/cli/realm/realm.js.map +1 -1
  330. package/esm/cli/saml/saml-cot-export.js +10 -7
  331. package/esm/cli/saml/saml-cot-export.js.map +1 -1
  332. package/esm/cli/saml/saml-cot-import.js +15 -12
  333. package/esm/cli/saml/saml-cot-import.js.map +1 -1
  334. package/esm/cli/saml/saml-cot-list.js +8 -5
  335. package/esm/cli/saml/saml-cot-list.js.map +1 -1
  336. package/esm/cli/saml/saml-cot.js +1 -1
  337. package/esm/cli/saml/saml-cot.js.map +1 -1
  338. package/esm/cli/saml/saml-delete.js +14 -7
  339. package/esm/cli/saml/saml-delete.js.map +1 -1
  340. package/esm/cli/saml/saml-describe.js +8 -5
  341. package/esm/cli/saml/saml-describe.js.map +1 -1
  342. package/esm/cli/saml/saml-export.js +10 -7
  343. package/esm/cli/saml/saml-export.js.map +1 -1
  344. package/esm/cli/saml/saml-import.js +11 -8
  345. package/esm/cli/saml/saml-import.js.map +1 -1
  346. package/esm/cli/saml/saml-list.js +8 -5
  347. package/esm/cli/saml/saml-list.js.map +1 -1
  348. package/esm/cli/saml/saml-metadata-export.js +9 -6
  349. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  350. package/esm/cli/saml/saml-metadata.js +1 -1
  351. package/esm/cli/saml/saml-metadata.js.map +1 -1
  352. package/esm/cli/saml/saml.js +2 -2
  353. package/esm/cli/saml/saml.js.map +1 -1
  354. package/esm/cli/script/script-delete.js +7 -4
  355. package/esm/cli/script/script-delete.js.map +1 -1
  356. package/esm/cli/script/script-describe.js +7 -4
  357. package/esm/cli/script/script-describe.js.map +1 -1
  358. package/esm/cli/script/script-export.js +8 -5
  359. package/esm/cli/script/script-export.js.map +1 -1
  360. package/esm/cli/script/script-import.js +9 -6
  361. package/esm/cli/script/script-import.js.map +1 -1
  362. package/esm/cli/script/script-list.js +8 -5
  363. package/esm/cli/script/script-list.js.map +1 -1
  364. package/esm/cli/script/script.js +2 -2
  365. package/esm/cli/script/script.js.map +1 -1
  366. package/esm/cli/service/service-delete.js +8 -5
  367. package/esm/cli/service/service-delete.js.map +1 -1
  368. package/esm/cli/service/service-export.js +9 -6
  369. package/esm/cli/service/service-export.js.map +1 -1
  370. package/esm/cli/service/service-import.js +11 -9
  371. package/esm/cli/service/service-import.js.map +1 -1
  372. package/esm/cli/service/service-list.js +7 -4
  373. package/esm/cli/service/service-list.js.map +1 -1
  374. package/esm/cli/service/service.js +2 -2
  375. package/esm/cli/service/service.js.map +1 -1
  376. package/esm/cli/shell/shell.js +57 -0
  377. package/esm/cli/shell/shell.js.map +1 -0
  378. package/esm/cli/theme/theme-delete.js +10 -7
  379. package/esm/cli/theme/theme-delete.js.map +1 -1
  380. package/esm/cli/theme/theme-export.js +11 -8
  381. package/esm/cli/theme/theme-export.js.map +1 -1
  382. package/esm/cli/theme/theme-import.js +12 -9
  383. package/esm/cli/theme/theme-import.js.map +1 -1
  384. package/esm/cli/theme/theme-list.js +7 -4
  385. package/esm/cli/theme/theme-list.js.map +1 -1
  386. package/esm/cli/theme/theme.js +2 -2
  387. package/esm/cli/theme/theme.js.map +1 -1
  388. package/esm/help/SampleData.js +7 -0
  389. package/esm/help/SampleData.js.map +1 -0
  390. package/esm/launch.js +1 -1
  391. package/esm/launch.js.map +1 -1
  392. package/esm/loader.js +2 -2
  393. package/esm/loader.js.map +1 -1
  394. package/esm/ops/AdminFederationOps.js +225 -0
  395. package/esm/ops/AdminFederationOps.js.map +1 -0
  396. package/esm/ops/AgentOps.js +128 -87
  397. package/esm/ops/AgentOps.js.map +1 -1
  398. package/esm/ops/ApplicationOps.js +315 -0
  399. package/esm/ops/ApplicationOps.js.map +1 -0
  400. package/esm/ops/AuthenticationSettingsOps.js +89 -0
  401. package/esm/ops/AuthenticationSettingsOps.js.map +1 -0
  402. package/esm/ops/CirclesOfTrustOps.js +72 -59
  403. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  404. package/esm/ops/ConnectionProfileOps.js +13 -6
  405. package/esm/ops/ConnectionProfileOps.js.map +1 -1
  406. package/esm/ops/EmailTemplateOps.js +76 -64
  407. package/esm/ops/EmailTemplateOps.js.map +1 -1
  408. package/esm/ops/IdmOps.js +70 -84
  409. package/esm/ops/IdmOps.js.map +1 -1
  410. package/esm/ops/IdpOps.js +74 -43
  411. package/esm/ops/IdpOps.js.map +1 -1
  412. package/esm/ops/JourneyOps.js +99 -67
  413. package/esm/ops/JourneyOps.js.map +1 -1
  414. package/esm/ops/LogOps.js +92 -30
  415. package/esm/ops/LogOps.js.map +1 -1
  416. package/esm/ops/NodeOps.js +6 -3
  417. package/esm/ops/NodeOps.js.map +1 -1
  418. package/esm/ops/OAuth2ClientOps.js +51 -32
  419. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  420. package/esm/ops/OrganizationOps.js +14 -22
  421. package/esm/ops/OrganizationOps.js.map +1 -1
  422. package/esm/ops/PolicyOps.js +84 -55
  423. package/esm/ops/PolicyOps.js.map +1 -1
  424. package/esm/ops/PolicySetOps.js +67 -43
  425. package/esm/ops/PolicySetOps.js.map +1 -1
  426. package/esm/ops/RealmOps.js +18 -11
  427. package/esm/ops/RealmOps.js.map +1 -1
  428. package/esm/ops/ResourceTypeOps.js +75 -66
  429. package/esm/ops/ResourceTypeOps.js.map +1 -1
  430. package/esm/ops/Saml2Ops.js +76 -54
  431. package/esm/ops/Saml2Ops.js.map +1 -1
  432. package/esm/ops/Saml2Ops.test_.js.map +1 -1
  433. package/esm/ops/ScriptOps.js +92 -31
  434. package/esm/ops/ScriptOps.js.map +1 -1
  435. package/esm/ops/SecretsOps.js +106 -23
  436. package/esm/ops/SecretsOps.js.map +1 -1
  437. package/esm/ops/ServiceOps.js +67 -41
  438. package/esm/ops/ServiceOps.js.map +1 -1
  439. package/esm/ops/ThemeOps.js +62 -36
  440. package/esm/ops/ThemeOps.js.map +1 -1
  441. package/esm/ops/VariablesOps.js +132 -41
  442. package/esm/ops/VariablesOps.js.map +1 -1
  443. package/esm/ops/utils/OpsUtils.js +1 -1
  444. package/esm/ops/utils/OpsUtils.js.map +1 -1
  445. package/esm/ops/utils/Wordwrap.js +1 -1
  446. package/esm/ops/utils/Wordwrap.js.map +1 -1
  447. package/esm/storage/StaticStorage.js +1 -1
  448. package/esm/storage/StaticStorage.js.map +1 -1
  449. package/esm/utils/Config.js +7 -4
  450. package/esm/utils/Config.js.map +1 -1
  451. package/esm/utils/Console.js +9 -5
  452. package/esm/utils/Console.js.map +1 -1
  453. package/esm/utils/ExportImportUtils.js +32 -66
  454. package/esm/utils/ExportImportUtils.js.map +1 -1
  455. package/esm/utils/Version.js +19 -16
  456. package/esm/utils/Version.js.map +1 -1
  457. package/global-jest-setup.js +4 -0
  458. package/package.json +46 -35
  459. package/esm/cli/logging/logs-fetch.js.map +0 -1
  460. package/esm/cli/logging/logs-list.js +0 -49
  461. package/esm/cli/logging/logs-list.js.map +0 -1
  462. package/esm/cli/logging/logs-tail.js +0 -46
  463. package/esm/cli/logging/logs-tail.js.map +0 -1
  464. package/esm/cli/logging/logs.js.map +0 -1
  465. package/esm/cli/theme/theme-delete.e2e.test_.js.map +0 -1
  466. package/esm/cli/theme/theme-list.e2e.test_.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { frodo, state } from '@rockcarver/frodo-lib';
2
2
  import fs from 'fs';
3
- import { printMessage, createProgressBar, updateProgressBar, stopProgressBar, showSpinner, succeedSpinner, failSpinner, createTable, debugMessage } from '../utils/Console';
3
+ import { createProgressBar, createTable, debugMessage, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
4
4
  import * as CirclesOfTrust from './CirclesOfTrustOps';
5
5
  import * as EmailTemplate from './EmailTemplateOps';
6
6
  import * as Idp from './IdpOps';
@@ -8,8 +8,27 @@ import * as Node from './NodeOps';
8
8
  import * as Saml2 from './Saml2Ops';
9
9
  import * as Script from './ScriptOps';
10
10
  import * as Theme from './ThemeOps';
11
- import wordwrap from './utils/Wordwrap';
12
11
  import { cloneDeep } from './utils/OpsUtils';
12
+ import wordwrap from './utils/Wordwrap';
13
+ const {
14
+ getTypedFilename,
15
+ saveJsonToFile,
16
+ getRealmString,
17
+ getFilePath,
18
+ getWorkingDirectory
19
+ } = frodo.utils;
20
+ const {
21
+ readJourneys,
22
+ exportJourney,
23
+ createMultiTreeExportTemplate,
24
+ resolveDependencies,
25
+ importJourneys,
26
+ importJourney,
27
+ getTreeDescendents,
28
+ getNodeRef,
29
+ onlineTreeExportResolver,
30
+ getJourneyClassification: _getJourneyClassification
31
+ } = frodo.authn.journey;
13
32
 
14
33
  /**
15
34
  * List all the journeys/trees
@@ -20,7 +39,7 @@ import { cloneDeep } from './utils/OpsUtils';
20
39
  export async function listJourneys(long = false, analyze = false) {
21
40
  let journeys = [];
22
41
  try {
23
- journeys = await frodo.authn.journey.getJourneys();
42
+ journeys = await readJourneys();
24
43
  if (!long && !analyze) {
25
44
  for (const journeyStub of journeys) {
26
45
  printMessage(`${journeyStub['_id']}`, 'data');
@@ -38,7 +57,7 @@ export async function listJourneys(long = false, analyze = false) {
38
57
  const exportPromises = [];
39
58
  try {
40
59
  for (const journeyStub of journeys) {
41
- exportPromises.push(frodo.authn.journey.exportJourney(journeyStub['_id'], {
60
+ exportPromises.push(exportJourney(journeyStub['_id'], {
42
61
  useStringArrays: false,
43
62
  deps: false
44
63
  }));
@@ -72,28 +91,17 @@ export async function listJourneys(long = false, analyze = false) {
72
91
  */
73
92
  export async function exportJourneyToFile(journeyId, file, options) {
74
93
  debugMessage(`exportJourneyToFile: start`);
75
- const verbose = state.getDebug();
94
+ const verbose = state.getVerbose();
76
95
  if (!file) {
77
- file = frodo.utils.impex.getTypedFilename(journeyId, 'journey');
78
- }
79
- if (state.getDirectory()) {
80
- const dir = state.getDirectory().replace(/\/$/, '');
81
- debugMessage(`exportJourneyToFile: directory='${dir}'`);
82
- file = `${dir}/${file}`;
83
- // create directory if it doesn't exist
84
- if (!fs.existsSync(dir)) {
85
- debugMessage(`exportJourneyToFile: creating directory '${dir}'`);
86
- fs.mkdirSync(dir, {
87
- recursive: true
88
- });
89
- }
96
+ file = getTypedFilename(journeyId, 'journey');
90
97
  }
98
+ const filePath = getFilePath(file, true);
91
99
  if (!verbose) showSpinner(`${journeyId}`);
92
100
  try {
93
- const fileData = await frodo.authn.journey.exportJourney(journeyId, options);
101
+ const fileData = await exportJourney(journeyId, options);
94
102
  if (verbose) showSpinner(`${journeyId}`);
95
- frodo.utils.impex.saveJsonToFile(fileData, file);
96
- succeedSpinner(`Exported ${journeyId['brightCyan']} to ${file['brightCyan']}.`);
103
+ saveJsonToFile(fileData, filePath);
104
+ succeedSpinner(`Exported ${journeyId['brightCyan']} to ${filePath['brightCyan']}.`);
97
105
  } catch (error) {
98
106
  if (verbose) showSpinner(`${journeyId}`);
99
107
  failSpinner(`Error exporting journey ${journeyId}: ${error}`);
@@ -109,25 +117,25 @@ export async function exportJourneysToFile(file, options = {
109
117
  deps: false,
110
118
  useStringArrays: false
111
119
  }) {
112
- let fileName = file;
113
- if (!fileName) {
114
- fileName = frodo.utils.impex.getTypedFilename(`all${frodo.utils.impex.getRealmString()}Journeys`, 'journeys');
120
+ if (!file) {
121
+ file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');
115
122
  }
116
- const trees = await frodo.authn.journey.getJourneys();
117
- const fileData = frodo.authn.journey.createMultiTreeExportTemplate();
123
+ const filePath = getFilePath(file, true);
124
+ const trees = await readJourneys();
125
+ const fileData = createMultiTreeExportTemplate();
118
126
  createProgressBar(trees.length, 'Exporting journeys...');
119
127
  for (const tree of trees) {
120
128
  updateProgressBar(`${tree._id}`);
121
129
  try {
122
- const exportData = await frodo.authn.journey.exportJourney(tree._id, options);
130
+ const exportData = await exportJourney(tree._id, options);
123
131
  delete exportData.meta;
124
132
  fileData.trees[tree._id] = exportData;
125
133
  } catch (error) {
126
134
  printMessage(`Error exporting journey ${tree._id}: ${error}`, 'error');
127
135
  }
128
136
  }
129
- frodo.utils.impex.saveJsonToFile(fileData, fileName);
130
- stopProgressBar(`Exported to ${fileName}`);
137
+ saveJsonToFile(fileData, filePath);
138
+ stopProgressBar(`Exported to ${filePath}`);
131
139
  }
132
140
 
133
141
  /**
@@ -135,14 +143,14 @@ export async function exportJourneysToFile(file, options = {
135
143
  * @param {TreeExportOptions} options export options
136
144
  */
137
145
  export async function exportJourneysToFiles(options) {
138
- const trees = await frodo.authn.journey.getJourneys();
146
+ const trees = await readJourneys();
139
147
  createProgressBar(trees.length, 'Exporting journeys...');
140
148
  for (const tree of trees) {
141
149
  updateProgressBar(`${tree._id}`);
142
- const fileName = frodo.utils.impex.getTypedFilename(`${tree._id}`, 'journey');
150
+ const fileName = getTypedFilename(`${tree._id}`, 'journey');
143
151
  try {
144
- const exportData = await frodo.authn.journey.exportJourney(tree._id, options);
145
- frodo.utils.impex.saveJsonToFile(exportData, fileName);
152
+ const exportData = await exportJourney(tree._id, options);
153
+ saveJsonToFile(exportData, getFilePath(fileName, true));
146
154
  } catch (error) {
147
155
  // do we need to report status here?
148
156
  }
@@ -157,8 +165,8 @@ export async function exportJourneysToFiles(options) {
157
165
  * @param {TreeImportOptions} options import options
158
166
  */
159
167
  export async function importJourneyFromFile(journeyId, file, options) {
160
- const verbose = state.getDebug();
161
- fs.readFile(file, 'utf8', async (err, data) => {
168
+ const verbose = state.getVerbose();
169
+ fs.readFile(getFilePath(file), 'utf8', async (err, data) => {
162
170
  if (err) throw err;
163
171
  let journeyData = JSON.parse(data);
164
172
  // check if this is a file with multiple trees and get journey by id
@@ -171,17 +179,17 @@ export async function importJourneyFromFile(journeyId, file, options) {
171
179
  // if a journeyId was specified, only import the matching journey
172
180
  if (journeyData && journeyId === journeyData.tree._id) {
173
181
  // attempt dependency resolution for single tree import
174
- const installedJourneys = (await frodo.authn.journey.getJourneys()).map(x => x._id);
182
+ const installedJourneys = (await readJourneys()).map(x => x._id);
175
183
  const unresolvedJourneys = {};
176
184
  const resolvedJourneys = [];
177
185
  showSpinner('Resolving dependencies');
178
- await frodo.authn.journey.resolveDependencies(installedJourneys, {
186
+ await resolveDependencies(installedJourneys, {
179
187
  [journeyId]: journeyData
180
188
  }, unresolvedJourneys, resolvedJourneys);
181
189
  if (Object.keys(unresolvedJourneys).length === 0) {
182
190
  succeedSpinner(`Resolved all dependencies.`);
183
191
  if (!verbose) showSpinner(`Importing ${journeyId}...`);
184
- frodo.authn.journey.importJourney(journeyData, options).then(() => {
192
+ importJourney(journeyData, options).then(() => {
185
193
  if (verbose) showSpinner(`Importing ${journeyId}...`);
186
194
  succeedSpinner(`Imported ${journeyId}.`);
187
195
  }).catch(importError => {
@@ -208,8 +216,8 @@ export async function importJourneyFromFile(journeyId, file, options) {
208
216
  * @param {TreeImportOptions} options import options
209
217
  */
210
218
  export async function importFirstJourneyFromFile(file, options) {
211
- const verbose = state.getDebug();
212
- fs.readFile(file, 'utf8', async (err, data) => {
219
+ const verbose = state.getVerbose();
220
+ fs.readFile(getFilePath(file), 'utf8', async (err, data) => {
213
221
  if (err) throw err;
214
222
  let journeyData = cloneDeep(JSON.parse(data));
215
223
  let journeyId = null;
@@ -231,17 +239,17 @@ export async function importFirstJourneyFromFile(file, options) {
231
239
  // if a journeyId was specified, only import the matching journey
232
240
  if (journeyData && journeyId) {
233
241
  // attempt dependency resolution for single tree import
234
- const installedJourneys = (await frodo.authn.journey.getJourneys()).map(x => x._id);
242
+ const installedJourneys = (await readJourneys()).map(x => x._id);
235
243
  const unresolvedJourneys = {};
236
244
  const resolvedJourneys = [];
237
245
  showSpinner('Resolving dependencies');
238
- await frodo.authn.journey.resolveDependencies(installedJourneys, {
246
+ await resolveDependencies(installedJourneys, {
239
247
  [journeyId]: journeyData
240
248
  }, unresolvedJourneys, resolvedJourneys);
241
249
  if (Object.keys(unresolvedJourneys).length === 0) {
242
250
  succeedSpinner(`Resolved all dependencies.`);
243
251
  if (!verbose) showSpinner(`Importing ${journeyId}...`);
244
- frodo.authn.journey.importJourney(journeyData, options).then(() => {
252
+ importJourney(journeyData, options).then(() => {
245
253
  if (verbose) showSpinner(`Importing ${journeyId}...`);
246
254
  succeedSpinner(`Imported ${journeyId}.`);
247
255
  }).catch(importError => {
@@ -268,10 +276,24 @@ export async function importFirstJourneyFromFile(file, options) {
268
276
  * @param {TreeImportOptions} options import options
269
277
  */
270
278
  export async function importJourneysFromFile(file, options) {
271
- fs.readFile(file, 'utf8', (err, data) => {
279
+ fs.readFile(getFilePath(file), 'utf8', (err, data) => {
272
280
  if (err) throw err;
273
- const fileData = JSON.parse(data);
274
- frodo.authn.journey.importAllJourneys(fileData.trees, options);
281
+ try {
282
+ const fileData = JSON.parse(data);
283
+ importJourneys(fileData.trees, options);
284
+ } catch (error) {
285
+ if (error.name === 'UnresolvedDependenciesError') {
286
+ for (const journey of Object.keys(error.unresolvedJourneys)) {
287
+ printMessage({
288
+ message: ` - ${journey} requires ${error.unresolvedJourneys[journey]}`,
289
+ type: 'info',
290
+ state
291
+ });
292
+ }
293
+ } else {
294
+ printMessage(`${error.message}`, 'error');
295
+ }
296
+ }
275
297
  });
276
298
  }
277
299
 
@@ -280,8 +302,8 @@ export async function importJourneysFromFile(file, options) {
280
302
  * @param {TreeImportOptions} options import options
281
303
  */
282
304
  export async function importJourneysFromFiles(options) {
283
- const names = fs.readdirSync('.');
284
- const jsonFiles = names.filter(name => name.toLowerCase().endsWith('.journey.json'));
305
+ const names = fs.readdirSync(getWorkingDirectory());
306
+ const jsonFiles = names.filter(name => name.toLowerCase().endsWith('.journey.json')).map(name => getFilePath(name));
285
307
  const allJourneysData = {
286
308
  trees: {}
287
309
  };
@@ -289,7 +311,12 @@ export async function importJourneysFromFiles(options) {
289
311
  const journeyData = JSON.parse(fs.readFileSync(file, 'utf8'));
290
312
  allJourneysData.trees[journeyData.tree._id] = journeyData;
291
313
  }
292
- frodo.authn.journey.importAllJourneys(allJourneysData.trees, options);
314
+ try {
315
+ await importJourneys(allJourneysData.trees, options);
316
+ } catch (error) {
317
+ var _error$response2;
318
+ printMessage(`${((_error$response2 = error.response) === null || _error$response2 === void 0 || (_error$response2 = _error$response2.data) === null || _error$response2 === void 0 ? void 0 : _error$response2.message) || error.message}`, 'error');
319
+ }
293
320
  }
294
321
 
295
322
  /**
@@ -298,16 +325,16 @@ export async function importJourneysFromFiles(options) {
298
325
  * @returns {string[]} Colored string array of classifications
299
326
  */
300
327
  export function getJourneyClassification(journey) {
301
- return getJourneyClassification(journey).map(it => {
328
+ return _getJourneyClassification(journey).map(it => {
302
329
  switch (it) {
303
330
  case 'standard':
304
- return it.toString()['brightGreen'];
331
+ return it['brightGreen'];
305
332
  case 'cloud':
306
- return it.toString()['brightMagenta'];
333
+ return it['brightMagenta'];
307
334
  case 'custom':
308
- return it.toString()['brightRed'];
335
+ return it['brightRed'];
309
336
  case 'premium':
310
- return it.toString()['brightYellow'];
337
+ return it['brightYellow'];
311
338
  }
312
339
  });
313
340
  }
@@ -318,16 +345,16 @@ export function getJourneyClassification(journey) {
318
345
  * @returns {string[]} Colored string array of classifications
319
346
  */
320
347
  export function getJourneyClassificationMd(journey) {
321
- return getJourneyClassification(journey).map(it => {
348
+ return _getJourneyClassification(journey).map(it => {
322
349
  switch (it) {
323
350
  case 'standard':
324
- return `:green_circle: \`${it.toString()}\``;
351
+ return `:green_circle: \`${it}\``;
325
352
  case 'cloud':
326
- return `:purple_circle: \`${it.toString()}\``;
353
+ return `:purple_circle: \`${it}\``;
327
354
  case 'custom':
328
- return `:red_circle: \`${it.toString()}\``;
355
+ return `:red_circle: \`${it}\``;
329
356
  case 'premium':
330
- return `:yellow_circle: \`${it.toString()}\``;
357
+ return `:yellow_circle: \`${it}\``;
331
358
  }
332
359
  });
333
360
  }
@@ -410,7 +437,7 @@ function describeTreeDescendentsMd(descendents, depth = 0) {
410
437
  * @param {SingleTreeExportInterface} journeyData journey export object
411
438
  * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function
412
439
  */
413
- export async function describeJourney(journeyData, resolveTreeExport = frodo.authn.journey.onlineTreeExportResolver) {
440
+ export async function describeJourney(journeyData, resolveTreeExport = onlineTreeExportResolver) {
414
441
  var _journeyData$meta, _journeyData$tree$uiC, _journeyData$themes;
415
442
  const allNodes = {
416
443
  ...journeyData.nodes,
@@ -454,8 +481,13 @@ export async function describeJourney(journeyData, resolveTreeExport = frodo.aut
454
481
  }
455
482
 
456
483
  // Dependency Tree
457
- const descendents = await frodo.authn.journey.getTreeDescendents(journeyData, resolveTreeExport);
458
- describeTreeDescendents(descendents);
484
+ try {
485
+ const descendents = await getTreeDescendents(journeyData, resolveTreeExport);
486
+ describeTreeDescendents(descendents);
487
+ } catch (error) {
488
+ printMessage(`Error resolving inner tree dependencies:`, 'error');
489
+ printMessage(error.stack, 'error');
490
+ }
459
491
 
460
492
  // Node Types
461
493
  if (Object.entries(nodeTypeMap).length) {
@@ -469,7 +501,7 @@ export async function describeJourney(journeyData, resolveTreeExport = frodo.aut
469
501
  if (Object.entries(allNodes).length) {
470
502
  printMessage(`\nNodes (${Object.entries(allNodes).length}):`, 'data');
471
503
  for (const nodeObj of Object.values(allNodes)) {
472
- printMessage(`- ${Node.getOneLineDescription(nodeObj, frodo.authn.journey.getNodeRef(nodeObj, journeyData))}`, 'data');
504
+ printMessage(`- ${Node.getOneLineDescription(nodeObj, getNodeRef(nodeObj, journeyData))}`, 'data');
473
505
  }
474
506
  }
475
507
 
@@ -537,7 +569,7 @@ export async function describeJourney(journeyData, resolveTreeExport = frodo.aut
537
569
  * @param {SingleTreeExportInterface} journeyData journey export object
538
570
  * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function
539
571
  */
540
- export async function describeJourneyMd(journeyData, resolveTreeExport = frodo.authn.journey.onlineTreeExportResolver) {
572
+ export async function describeJourneyMd(journeyData, resolveTreeExport = onlineTreeExportResolver) {
541
573
  var _journeyData$meta2, _journeyData$tree$uiC2, _journeyData$themes2;
542
574
  const allNodes = {
543
575
  ...journeyData.nodes,
@@ -574,7 +606,7 @@ export async function describeJourneyMd(journeyData, resolveTreeExport = frodo.a
574
606
  printMessage(`\n[![](./${journeyData.tree._id}.png)]()\n`, 'data');
575
607
 
576
608
  // Dependency Tree
577
- const descendents = await frodo.authn.journey.getTreeDescendents(journeyData, resolveTreeExport);
609
+ const descendents = await getTreeDescendents(journeyData, resolveTreeExport);
578
610
  printMessage(describeTreeDescendentsMd(descendents), 'data');
579
611
 
580
612
  // Node Types
@@ -592,7 +624,7 @@ export async function describeJourneyMd(journeyData, resolveTreeExport = frodo.a
592
624
  printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');
593
625
  printMessage(Node.getTableHeaderMd(), 'data');
594
626
  for (const nodeObj of Object.values(allNodes)) {
595
- printMessage(`${Node.getTableRowMd(nodeObj, frodo.authn.journey.getNodeRef(nodeObj, journeyData))}`, 'data');
627
+ printMessage(`${Node.getTableRowMd(nodeObj, getNodeRef(nodeObj, journeyData))}`, 'data');
596
628
  }
597
629
  }
598
630
 
@@ -650,4 +682,4 @@ export async function describeJourneyMd(journeyData, resolveTreeExport = frodo.a
650
682
  }
651
683
  }
652
684
  }
653
- //# sourceMappingURL=JourneyOps.js.map
685
+ //# sourceMappingURL=JourneyOps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JourneyOps.js","names":["frodo","state","fs","printMessage","createProgressBar","updateProgressBar","stopProgressBar","showSpinner","succeedSpinner","failSpinner","createTable","debugMessage","CirclesOfTrust","EmailTemplate","Idp","Node","Saml2","Script","Theme","wordwrap","cloneDeep","listJourneys","long","analyze","journeys","authn","journey","getJourneys","journeyStub","table","_journeyStub$uiConfig","push","_id","enabled","uiConfig","categories","JSON","parse","join","toString","exportPromises","exportJourney","useStringArrays","deps","journeyExports","Promise","all","journeyExport","_journeyExport$tree$u","tree","getJourneyClassification","error","response","data","_error$response","exportJourneyToFile","journeyId","file","options","verbose","getDebug","utils","impex","getTypedFilename","getDirectory","dir","replace","existsSync","mkdirSync","recursive","fileData","saveJsonToFile","exportJourneysToFile","fileName","getRealmString","trees","createMultiTreeExportTemplate","length","exportData","meta","exportJourneysToFiles","importJourneyFromFile","readFile","err","journeyData","installedJourneys","map","x","unresolvedJourneys","resolvedJourneys","resolveDependencies","Object","keys","importJourney","then","catch","importError","importFirstJourneyFromFile","treeId","hasOwnProperty","call","importJourneysFromFile","importAllJourneys","importJourneysFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","allJourneysData","readFileSync","it","getJourneyClassificationMd","getOneLineDescription","treeObj","description","getOneLineDescriptionMd","describeTreeDescendents","descendents","depth","values","indent","Array","fill","descendent","describeTreeDescendentsMd","markdown","describeJourney","resolveTreeExport","onlineTreeExportResolver","_journeyData$meta","_journeyData$tree$uiC","_journeyData$themes","allNodes","nodes","innerNodes","nodeTypeMap","nodeData","_type","getAmVersion","originAmVersion","setAmVersion","getTreeDescendents","entries","nodeType","count","String","getNodeClassification","nodeObj","getNodeRef","themes","themeData","scripts","scriptData","emailTemplates","templateData","socialIdentityProviders","socialIdpData","saml2Entities","entityProviderData","circlesOfTrust","cotData","describeJourneyMd","_journeyData$meta2","_journeyData$tree$uiC2","_journeyData$themes2","getNodeClassificationMd","getTableHeaderMd","getTableRowMd"],"sources":["ops/JourneyOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport type {\n NodeSkeleton,\n TreeSkeleton,\n} from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport type {\n JourneyClassificationType,\n MultiTreeExportInterface,\n SingleTreeExportInterface,\n TreeDependencyMapInterface,\n TreeExportOptions,\n TreeExportResolverInterface,\n TreeImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/OpsTypes';\nimport {\n printMessage,\n createProgressBar,\n updateProgressBar,\n stopProgressBar,\n showSpinner,\n succeedSpinner,\n failSpinner,\n createTable,\n debugMessage,\n} from '../utils/Console';\nimport * as CirclesOfTrust from './CirclesOfTrustOps';\nimport * as EmailTemplate from './EmailTemplateOps';\nimport * as Idp from './IdpOps';\nimport * as Node from './NodeOps';\nimport * as Saml2 from './Saml2Ops';\nimport * as Script from './ScriptOps';\nimport * as Theme from './ThemeOps';\nimport wordwrap from './utils/Wordwrap';\nimport { cloneDeep } from './utils/OpsUtils';\n\n/**\n * List all the journeys/trees\n * @param {boolean} long Long version, all the fields\n * @param {boolean} analyze Analyze journeys/trees for custom nodes (expensive)\n * @returns {Promise<TreeSkeleton[]>} a promise that resolves to an array journey objects\n */\nexport async function listJourneys(\n long = false,\n analyze = false\n): Promise<TreeSkeleton[]> {\n let journeys = [];\n try {\n journeys = await frodo.authn.journey.getJourneys();\n if (!long && !analyze) {\n for (const journeyStub of journeys) {\n printMessage(`${journeyStub['_id']}`, 'data');\n }\n } else {\n if (!analyze) {\n const table = createTable(['Name', 'Status', 'Tags']);\n for (const journeyStub of journeys) {\n table.push([\n `${journeyStub._id}`,\n journeyStub.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n journeyStub.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyStub.uiConfig.categories).join(', '),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n showSpinner('Retrieving details of all journeys...');\n const exportPromises = [];\n try {\n for (const journeyStub of journeys) {\n exportPromises.push(\n frodo.authn.journey.exportJourney(journeyStub['_id'], {\n useStringArrays: false,\n deps: false,\n })\n );\n }\n const journeyExports = await Promise.all(exportPromises);\n succeedSpinner('Retrieved details of all journeys.');\n const table = createTable([\n 'Name',\n 'Status',\n 'Classification',\n 'Tags',\n ]);\n for (const journeyExport of journeyExports) {\n table.push([\n `${journeyExport.tree._id}`,\n journeyExport.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n getJourneyClassification(journeyExport).join(', '),\n journeyExport.tree.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyExport.tree.uiConfig.categories).join(\n ', '\n ),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } catch (error) {\n failSpinner('Error retrieving details of all journeys.');\n printMessage(error.response.data, 'error');\n }\n }\n }\n } catch (error) {\n printMessage(error.response?.data, 'error');\n }\n return journeys;\n}\n\n/**\n * Export journey by id/name to file\n * @param {string} journeyId journey id/name\n * @param {string} file optional export file name\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneyToFile(\n journeyId: string,\n file: string,\n options: TreeExportOptions\n): Promise<void> {\n debugMessage(`exportJourneyToFile: start`);\n const verbose = state.getDebug();\n if (!file) {\n file = frodo.utils.impex.getTypedFilename(journeyId, 'journey');\n }\n if (state.getDirectory()) {\n const dir = state.getDirectory().replace(/\\/$/, '');\n debugMessage(`exportJourneyToFile: directory='${dir}'`);\n file = `${dir}/${file}`;\n // create directory if it doesn't exist\n if (!fs.existsSync(dir)) {\n debugMessage(`exportJourneyToFile: creating directory '${dir}'`);\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n if (!verbose) showSpinner(`${journeyId}`);\n try {\n const fileData: SingleTreeExportInterface =\n await frodo.authn.journey.exportJourney(journeyId, options);\n if (verbose) showSpinner(`${journeyId}`);\n frodo.utils.impex.saveJsonToFile(fileData, file);\n succeedSpinner(\n `Exported ${journeyId['brightCyan']} to ${file['brightCyan']}.`\n );\n } catch (error) {\n if (verbose) showSpinner(`${journeyId}`);\n failSpinner(`Error exporting journey ${journeyId}: ${error}`);\n }\n}\n\n/**\n * Export all journeys to file\n * @param {string} file optional export file name\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFile(\n file: string,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n }\n): Promise<void> {\n let fileName = file;\n if (!fileName) {\n fileName = frodo.utils.impex.getTypedFilename(\n `all${frodo.utils.impex.getRealmString()}Journeys`,\n 'journeys'\n );\n }\n const trees = await frodo.authn.journey.getJourneys();\n const fileData: MultiTreeExportInterface =\n frodo.authn.journey.createMultiTreeExportTemplate();\n createProgressBar(trees.length, 'Exporting journeys...');\n for (const tree of trees) {\n updateProgressBar(`${tree._id}`);\n try {\n const exportData = await frodo.authn.journey.exportJourney(\n tree._id,\n options\n );\n delete exportData.meta;\n fileData.trees[tree._id] = exportData;\n } catch (error) {\n printMessage(`Error exporting journey ${tree._id}: ${error}`, 'error');\n }\n }\n frodo.utils.impex.saveJsonToFile(fileData, fileName);\n stopProgressBar(`Exported to ${fileName}`);\n}\n\n/**\n * Export all journeys to separate files\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFiles(\n options: TreeExportOptions\n): Promise<void> {\n const trees = await frodo.authn.journey.getJourneys();\n createProgressBar(trees.length, 'Exporting journeys...');\n for (const tree of trees) {\n updateProgressBar(`${tree._id}`);\n const fileName = frodo.utils.impex.getTypedFilename(\n `${tree._id}`,\n 'journey'\n );\n try {\n const exportData: SingleTreeExportInterface =\n await frodo.authn.journey.exportJourney(tree._id, options);\n frodo.utils.impex.saveJsonToFile(exportData, fileName);\n } catch (error) {\n // do we need to report status here?\n }\n }\n stopProgressBar('Done');\n}\n\n/**\n * Import a journey from file\n * @param {string} journeyId journey id/name\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneyFromFile(\n journeyId: string,\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getDebug();\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n let journeyData = JSON.parse(data);\n // check if this is a file with multiple trees and get journey by id\n if (journeyData.trees && journeyData.trees[journeyId]) {\n journeyData = journeyData.trees[journeyId];\n } else if (journeyData.trees) {\n journeyData = null;\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId === journeyData.tree._id) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await frodo.authn.journey.getJourneys()).map(\n (x) => x._id\n );\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n showSpinner('Resolving dependencies');\n await frodo.authn.journey.resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n succeedSpinner(`Resolved all dependencies.`);\n\n if (!verbose) showSpinner(`Importing ${journeyId}...`);\n frodo.authn.journey\n .importJourney(journeyData, options)\n .then(() => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n succeedSpinner(`Imported ${journeyId}.`);\n })\n .catch((importError) => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n failSpinner(`${importError}`);\n });\n } else {\n failSpinner(`Unresolved dependencies:`);\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n // end dependency resolution for single tree import\n } else {\n showSpinner(`Importing ${journeyId}...`);\n failSpinner(`${journeyId} not found!`);\n }\n });\n}\n\n/**\n * Import first journey from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importFirstJourneyFromFile(\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getDebug();\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n let journeyData = cloneDeep(JSON.parse(data));\n let journeyId = null;\n // single tree\n if (journeyData.tree) {\n journeyId = cloneDeep(journeyData.tree._id);\n }\n // multiple trees, so get the first tree\n else if (journeyData.trees) {\n for (const treeId in journeyData.trees) {\n if (Object.hasOwnProperty.call(journeyData.trees, treeId)) {\n journeyId = treeId;\n journeyData = journeyData.trees[treeId];\n break;\n }\n }\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await frodo.authn.journey.getJourneys()).map(\n (x) => x._id\n );\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n showSpinner('Resolving dependencies');\n await frodo.authn.journey.resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n succeedSpinner(`Resolved all dependencies.`);\n\n if (!verbose) showSpinner(`Importing ${journeyId}...`);\n frodo.authn.journey\n .importJourney(journeyData, options)\n .then(() => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n succeedSpinner(`Imported ${journeyId}.`);\n })\n .catch((importError) => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n failSpinner(`${importError}`);\n });\n } else {\n failSpinner(`Unresolved dependencies:`);\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n } else {\n showSpinner(`Importing...`);\n failSpinner(`No journeys found!`);\n }\n // end dependency resolution for single tree import\n });\n}\n\n/**\n * Import all journeys from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFile(\n file: string,\n options: TreeImportOptions\n) {\n fs.readFile(file, 'utf8', (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n frodo.authn.journey.importAllJourneys(fileData.trees, options);\n });\n}\n\n/**\n * Import all journeys from separate files\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFiles(options: TreeImportOptions) {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.journey.json')\n );\n const allJourneysData = { trees: {} };\n for (const file of jsonFiles) {\n const journeyData = JSON.parse(fs.readFileSync(file, 'utf8'));\n allJourneysData.trees[journeyData.tree._id] = journeyData;\n }\n frodo.authn.journey.importAllJourneys(\n allJourneysData.trees as MultiTreeExportInterface,\n options\n );\n}\n\n/**\n * Get journey classification\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassification(\n journey: SingleTreeExportInterface\n): JourneyClassificationType[] {\n return getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return it.toString()['brightGreen'];\n\n case 'cloud':\n return it.toString()['brightMagenta'];\n\n case 'custom':\n return it.toString()['brightRed'];\n\n case 'premium':\n return it.toString()['brightYellow'];\n }\n });\n}\n\n/**\n * Get journey classification in markdown\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassificationMd(\n journey: SingleTreeExportInterface\n): string[] {\n return getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return `:green_circle: \\`${it.toString()}\\``;\n\n case 'cloud':\n return `:purple_circle: \\`${it.toString()}\\``;\n\n case 'custom':\n return `:red_circle: \\`${it.toString()}\\``;\n\n case 'premium':\n return `:yellow_circle: \\`${it.toString()}\\``;\n }\n });\n}\n\n/**\n * Get a one-line description of the tree object\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(treeObj: TreeSkeleton): string {\n const description = `[${treeObj._id['brightCyan']}]`;\n return description;\n}\n\n/**\n * Get a one-line description of the tree object in markdown\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescriptionMd(treeObj: TreeSkeleton): string {\n const description = `${treeObj._id}`;\n return description;\n}\n\n/**\n * Helper function to render a nested list of dependent trees\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendents(\n descendents: TreeDependencyMapInterface,\n depth = 0\n) {\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n printMessage(\n `\\nInner Tree Dependencies (${Object.values(descendents)[0].length}):`,\n 'data'\n );\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n printMessage(`${indent}- ${tree['brightCyan']}`, 'data');\n for (const descendent of descendents[tree]) {\n describeTreeDescendents(descendent, depth + 1);\n }\n }\n}\n\n/**\n * Helper function to render a nested list of dependent trees in markdown\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendentsMd(\n descendents: TreeDependencyMapInterface,\n depth = 0\n): string {\n let markdown = '';\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n markdown += `## Inner Tree Dependencies (${\n Object.values(descendents)[0].length\n })\\n`;\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n markdown += `${indent}- ${tree}\\n`;\n for (const descendent of descendents[tree]) {\n markdown += describeTreeDescendentsMd(descendent, depth + 1);\n }\n return markdown;\n }\n return markdown;\n}\n\n/**\n * Describe a journey:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourney(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = frodo.authn.journey\n .onlineTreeExportResolver\n): Promise<void> {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(`${getOneLineDescription(journeyData.tree)}`, 'data');\n printMessage(Array(`[${journeyData.tree._id}]`['length']).fill('=').join(''));\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Status\n printMessage(\n `\\nStatus\\n${\n journeyData.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen']\n }`\n );\n\n // Classification\n if (state.getAmVersion()) {\n printMessage(\n `\\nClassification\\n${getJourneyClassification(journeyData).join(', ')}`,\n 'data'\n );\n }\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage('\\nCategories/Tags', 'data');\n printMessage(\n `${JSON.parse(journeyData.tree.uiConfig.categories).join(', ')}`,\n 'data'\n );\n }\n\n // Dependency Tree\n const descendents = await frodo.authn.journey.getTreeDescendents(\n journeyData,\n resolveTreeExport\n );\n describeTreeDescendents(descendents);\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `\\nNode Types (${Object.entries(nodeTypeMap).length}):`,\n 'data'\n );\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `- ${String(count)} [${\n nodeType['brightCyan']\n }] (${Node.getNodeClassification(nodeType).join(', ')})`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`\\nNodes (${Object.entries(allNodes).length}):`, 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `- ${Node.getOneLineDescription(\n nodeObj,\n frodo.authn.journey.getNodeRef(nodeObj, journeyData)\n )}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`\\nThemes (${journeyData.themes.length}):`, 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`- ${Theme.getOneLineDescription(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `\\nScripts (${Object.entries(journeyData.scripts).length}):`,\n 'data'\n );\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`- ${Script.getOneLineDescription(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `\\nEmail Templates (${\n Object.entries(journeyData.emailTemplates).length\n }):`,\n 'data'\n );\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(\n `- ${EmailTemplate.getOneLineDescription(templateData)}`,\n 'data'\n );\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `\\nSocial Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n }):`,\n 'data'\n );\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`- ${Idp.getOneLineDescription(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `\\nSAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n }):`,\n 'data'\n );\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(\n `- ${Saml2.getOneLineDescription(entityProviderData)}`,\n 'data'\n );\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `\\nSAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n }):`,\n 'data'\n );\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(\n `- ${CirclesOfTrust.getOneLineDescription(cotData)}`,\n 'data'\n );\n }\n }\n}\n\n/**\n * Describe a journey in markdown:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourneyMd(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = frodo.authn.journey\n .onlineTreeExportResolver\n) {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(\n `# ${getOneLineDescriptionMd(journeyData.tree)} - ${\n journeyData.tree.enabled === false\n ? ':o: `disabled`'\n : ':white_check_mark: `enabled`'\n }, ${getJourneyClassificationMd(journeyData).join(', ')}`,\n 'data'\n );\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage(\n `\\`${JSON.parse(journeyData.tree.uiConfig.categories).join('`, `')}\\``,\n 'data'\n );\n }\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Journey image\n printMessage(`\\n[![](./${journeyData.tree._id}.png)]()\\n`, 'data');\n\n // Dependency Tree\n const descendents = await frodo.authn.journey.getTreeDescendents(\n journeyData,\n resolveTreeExport\n );\n printMessage(describeTreeDescendentsMd(descendents), 'data');\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `## Node Types (${Object.entries(nodeTypeMap).length})`,\n 'data'\n );\n printMessage('| Count | Type | Classification |', 'data');\n printMessage('| -----:| ---- | -------------- |', 'data');\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `| ${String(count)} | ${nodeType} | ${Node.getNodeClassificationMd(\n nodeType\n ).join('<br>')} |`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');\n printMessage(Node.getTableHeaderMd(), 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `${Node.getTableRowMd(\n nodeObj,\n frodo.authn.journey.getNodeRef(nodeObj, journeyData)\n )}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`## Themes (${journeyData.themes.length})`, 'data');\n printMessage(Theme.getTableHeaderMd(), 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`${Theme.getTableRowMd(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `## Scripts (${Object.entries(journeyData.scripts).length})`,\n 'data'\n );\n printMessage(Script.getTableHeaderMd(), 'data');\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`${Script.getTableRowMd(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `## Email Templates (${\n Object.entries(journeyData.emailTemplates).length\n })`,\n 'data'\n );\n printMessage(EmailTemplate.getTableHeaderMd(), 'data');\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(`${EmailTemplate.getTableRowMd(templateData)}`, 'data');\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `## Social Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n })`,\n 'data'\n );\n printMessage(Idp.getTableHeaderMd(), 'data');\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`${Idp.getTableRowMd(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `## SAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n })`,\n 'data'\n );\n printMessage(Saml2.getTableHeaderMd(), 'data');\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(`${Saml2.getTableRowMd(entityProviderData)}`, 'data');\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `## SAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n })`,\n 'data'\n );\n printMessage(CirclesOfTrust.getTableHeaderMd(), 'data');\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(`${CirclesOfTrust.getTableRowMd(cotData)}`, 'data');\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"JourneyOps.js","names":["frodo","state","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","CirclesOfTrust","EmailTemplate","Idp","Node","Saml2","Script","Theme","cloneDeep","wordwrap","getTypedFilename","saveJsonToFile","getRealmString","getFilePath","getWorkingDirectory","utils","readJourneys","exportJourney","createMultiTreeExportTemplate","resolveDependencies","importJourneys","importJourney","getTreeDescendents","getNodeRef","onlineTreeExportResolver","getJourneyClassification","_getJourneyClassification","authn","journey","listJourneys","long","analyze","journeys","journeyStub","table","_journeyStub$uiConfig","push","_id","enabled","uiConfig","categories","JSON","parse","join","toString","exportPromises","useStringArrays","deps","journeyExports","Promise","all","journeyExport","_journeyExport$tree$u","tree","error","response","data","_error$response","exportJourneyToFile","journeyId","file","options","verbose","getVerbose","filePath","fileData","exportJourneysToFile","trees","length","exportData","meta","exportJourneysToFiles","fileName","importJourneyFromFile","readFile","err","journeyData","installedJourneys","map","x","unresolvedJourneys","resolvedJourneys","Object","keys","then","catch","importError","importFirstJourneyFromFile","treeId","hasOwnProperty","call","importJourneysFromFile","name","message","type","importJourneysFromFiles","names","readdirSync","jsonFiles","filter","toLowerCase","endsWith","allJourneysData","readFileSync","_error$response2","it","getJourneyClassificationMd","getOneLineDescription","treeObj","description","getOneLineDescriptionMd","describeTreeDescendents","descendents","depth","values","indent","Array","fill","descendent","describeTreeDescendentsMd","markdown","describeJourney","resolveTreeExport","_journeyData$meta","_journeyData$tree$uiC","_journeyData$themes","allNodes","nodes","innerNodes","nodeTypeMap","nodeData","_type","getAmVersion","originAmVersion","setAmVersion","stack","entries","nodeType","count","String","getNodeClassification","nodeObj","themes","themeData","scripts","scriptData","emailTemplates","templateData","socialIdentityProviders","socialIdpData","saml2Entities","entityProviderData","circlesOfTrust","cotData","describeJourneyMd","_journeyData$meta2","_journeyData$tree$uiC2","_journeyData$themes2","getNodeClassificationMd","getTableHeaderMd","getTableRowMd"],"sources":["../../src/ops/JourneyOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type NodeSkeleton } from '@rockcarver/frodo-lib/types/api/NodeApi';\nimport { type TreeSkeleton } from '@rockcarver/frodo-lib/types/api/TreeApi';\nimport {\n type JourneyClassificationType,\n type MultiTreeExportInterface,\n type SingleTreeExportInterface,\n type TreeDependencyMapInterface,\n type TreeExportOptions,\n type TreeExportResolverInterface,\n type TreeImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/JourneyOps';\nimport fs from 'fs';\n\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport * as CirclesOfTrust from './CirclesOfTrustOps';\nimport * as EmailTemplate from './EmailTemplateOps';\nimport * as Idp from './IdpOps';\nimport * as Node from './NodeOps';\nimport * as Saml2 from './Saml2Ops';\nimport * as Script from './ScriptOps';\nimport * as Theme from './ThemeOps';\nimport { cloneDeep } from './utils/OpsUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n getTypedFilename,\n saveJsonToFile,\n getRealmString,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readJourneys,\n exportJourney,\n createMultiTreeExportTemplate,\n resolveDependencies,\n importJourneys,\n importJourney,\n getTreeDescendents,\n getNodeRef,\n onlineTreeExportResolver,\n getJourneyClassification: _getJourneyClassification,\n} = frodo.authn.journey;\n\n/**\n * List all the journeys/trees\n * @param {boolean} long Long version, all the fields\n * @param {boolean} analyze Analyze journeys/trees for custom nodes (expensive)\n * @returns {Promise<TreeSkeleton[]>} a promise that resolves to an array journey objects\n */\nexport async function listJourneys(\n long = false,\n analyze = false\n): Promise<TreeSkeleton[]> {\n let journeys = [];\n try {\n journeys = await readJourneys();\n if (!long && !analyze) {\n for (const journeyStub of journeys) {\n printMessage(`${journeyStub['_id']}`, 'data');\n }\n } else {\n if (!analyze) {\n const table = createTable(['Name', 'Status', 'Tags']);\n for (const journeyStub of journeys) {\n table.push([\n `${journeyStub._id}`,\n journeyStub.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n journeyStub.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyStub.uiConfig.categories).join(', '),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n showSpinner('Retrieving details of all journeys...');\n const exportPromises = [];\n try {\n for (const journeyStub of journeys) {\n exportPromises.push(\n exportJourney(journeyStub['_id'], {\n useStringArrays: false,\n deps: false,\n })\n );\n }\n const journeyExports = await Promise.all(exportPromises);\n succeedSpinner('Retrieved details of all journeys.');\n const table = createTable([\n 'Name',\n 'Status',\n 'Classification',\n 'Tags',\n ]);\n for (const journeyExport of journeyExports) {\n table.push([\n `${journeyExport.tree._id}`,\n journeyExport.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n getJourneyClassification(journeyExport).join(', '),\n journeyExport.tree.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyExport.tree.uiConfig.categories).join(\n ', '\n ),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } catch (error) {\n failSpinner('Error retrieving details of all journeys.');\n printMessage(error.response.data, 'error');\n }\n }\n }\n } catch (error) {\n printMessage(error.response?.data, 'error');\n }\n return journeys;\n}\n\n/**\n * Export journey by id/name to file\n * @param {string} journeyId journey id/name\n * @param {string} file optional export file name\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneyToFile(\n journeyId: string,\n file: string,\n options: TreeExportOptions\n): Promise<void> {\n debugMessage(`exportJourneyToFile: start`);\n const verbose = state.getVerbose();\n if (!file) {\n file = getTypedFilename(journeyId, 'journey');\n }\n const filePath = getFilePath(file, true);\n if (!verbose) showSpinner(`${journeyId}`);\n try {\n const fileData: SingleTreeExportInterface = await exportJourney(\n journeyId,\n options\n );\n if (verbose) showSpinner(`${journeyId}`);\n saveJsonToFile(fileData, filePath);\n succeedSpinner(\n `Exported ${journeyId['brightCyan']} to ${filePath['brightCyan']}.`\n );\n } catch (error) {\n if (verbose) showSpinner(`${journeyId}`);\n failSpinner(`Error exporting journey ${journeyId}: ${error}`);\n }\n}\n\n/**\n * Export all journeys to file\n * @param {string} file optional export file name\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFile(\n file: string,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n }\n): Promise<void> {\n if (!file) {\n file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');\n }\n const filePath = getFilePath(file, true);\n const trees = await readJourneys();\n const fileData: MultiTreeExportInterface = createMultiTreeExportTemplate();\n createProgressBar(trees.length, 'Exporting journeys...');\n for (const tree of trees) {\n updateProgressBar(`${tree._id}`);\n try {\n const exportData = await exportJourney(tree._id, options);\n delete exportData.meta;\n fileData.trees[tree._id] = exportData;\n } catch (error) {\n printMessage(`Error exporting journey ${tree._id}: ${error}`, 'error');\n }\n }\n saveJsonToFile(fileData, filePath);\n stopProgressBar(`Exported to ${filePath}`);\n}\n\n/**\n * Export all journeys to separate files\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFiles(\n options: TreeExportOptions\n): Promise<void> {\n const trees = await readJourneys();\n createProgressBar(trees.length, 'Exporting journeys...');\n for (const tree of trees) {\n updateProgressBar(`${tree._id}`);\n const fileName = getTypedFilename(`${tree._id}`, 'journey');\n try {\n const exportData: SingleTreeExportInterface = await exportJourney(\n tree._id,\n options\n );\n saveJsonToFile(exportData, getFilePath(fileName, true));\n } catch (error) {\n // do we need to report status here?\n }\n }\n stopProgressBar('Done');\n}\n\n/**\n * Import a journey from file\n * @param {string} journeyId journey id/name\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneyFromFile(\n journeyId: string,\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getVerbose();\n fs.readFile(getFilePath(file), 'utf8', async (err, data) => {\n if (err) throw err;\n let journeyData = JSON.parse(data);\n // check if this is a file with multiple trees and get journey by id\n if (journeyData.trees && journeyData.trees[journeyId]) {\n journeyData = journeyData.trees[journeyId];\n } else if (journeyData.trees) {\n journeyData = null;\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId === journeyData.tree._id) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n showSpinner('Resolving dependencies');\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n succeedSpinner(`Resolved all dependencies.`);\n\n if (!verbose) showSpinner(`Importing ${journeyId}...`);\n importJourney(journeyData, options)\n .then(() => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n succeedSpinner(`Imported ${journeyId}.`);\n })\n .catch((importError) => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n failSpinner(`${importError}`);\n });\n } else {\n failSpinner(`Unresolved dependencies:`);\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n // end dependency resolution for single tree import\n } else {\n showSpinner(`Importing ${journeyId}...`);\n failSpinner(`${journeyId} not found!`);\n }\n });\n}\n\n/**\n * Import first journey from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importFirstJourneyFromFile(\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getVerbose();\n fs.readFile(getFilePath(file), 'utf8', async (err, data) => {\n if (err) throw err;\n let journeyData = cloneDeep(JSON.parse(data));\n let journeyId = null;\n // single tree\n if (journeyData.tree) {\n journeyId = cloneDeep(journeyData.tree._id);\n }\n // multiple trees, so get the first tree\n else if (journeyData.trees) {\n for (const treeId in journeyData.trees) {\n if (Object.hasOwnProperty.call(journeyData.trees, treeId)) {\n journeyId = treeId;\n journeyData = journeyData.trees[treeId];\n break;\n }\n }\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n showSpinner('Resolving dependencies');\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n succeedSpinner(`Resolved all dependencies.`);\n\n if (!verbose) showSpinner(`Importing ${journeyId}...`);\n importJourney(journeyData, options)\n .then(() => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n succeedSpinner(`Imported ${journeyId}.`);\n })\n .catch((importError) => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n failSpinner(`${importError}`);\n });\n } else {\n failSpinner(`Unresolved dependencies:`);\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n } else {\n showSpinner(`Importing...`);\n failSpinner(`No journeys found!`);\n }\n // end dependency resolution for single tree import\n });\n}\n\n/**\n * Import all journeys from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFile(\n file: string,\n options: TreeImportOptions\n) {\n fs.readFile(getFilePath(file), 'utf8', (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n importJourneys(fileData.trees, options);\n } catch (error) {\n if (error.name === 'UnresolvedDependenciesError') {\n for (const journey of Object.keys(error.unresolvedJourneys)) {\n printMessage({\n message: ` - ${journey} requires ${error.unresolvedJourneys[journey]}`,\n type: 'info',\n state,\n });\n }\n } else {\n printMessage(`${error.message}`, 'error');\n }\n }\n });\n}\n\n/**\n * Import all journeys from separate files\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFiles(options: TreeImportOptions) {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) => name.toLowerCase().endsWith('.journey.json'))\n .map((name) => getFilePath(name));\n const allJourneysData = { trees: {} };\n for (const file of jsonFiles) {\n const journeyData = JSON.parse(fs.readFileSync(file, 'utf8'));\n allJourneysData.trees[journeyData.tree._id] = journeyData;\n }\n try {\n await importJourneys(\n allJourneysData.trees as MultiTreeExportInterface,\n options\n );\n } catch (error) {\n printMessage(`${error.response?.data?.message || error.message}`, 'error');\n }\n}\n\n/**\n * Get journey classification\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassification(\n journey: SingleTreeExportInterface\n): JourneyClassificationType[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return it['brightGreen'];\n\n case 'cloud':\n return it['brightMagenta'];\n\n case 'custom':\n return it['brightRed'];\n\n case 'premium':\n return it['brightYellow'];\n }\n });\n}\n\n/**\n * Get journey classification in markdown\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassificationMd(\n journey: SingleTreeExportInterface\n): string[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return `:green_circle: \\`${it}\\``;\n\n case 'cloud':\n return `:purple_circle: \\`${it}\\``;\n\n case 'custom':\n return `:red_circle: \\`${it}\\``;\n\n case 'premium':\n return `:yellow_circle: \\`${it}\\``;\n }\n });\n}\n\n/**\n * Get a one-line description of the tree object\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(treeObj: TreeSkeleton): string {\n const description = `[${treeObj._id['brightCyan']}]`;\n return description;\n}\n\n/**\n * Get a one-line description of the tree object in markdown\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescriptionMd(treeObj: TreeSkeleton): string {\n const description = `${treeObj._id}`;\n return description;\n}\n\n/**\n * Helper function to render a nested list of dependent trees\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendents(\n descendents: TreeDependencyMapInterface,\n depth = 0\n) {\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n printMessage(\n `\\nInner Tree Dependencies (${Object.values(descendents)[0].length}):`,\n 'data'\n );\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n printMessage(`${indent}- ${tree['brightCyan']}`, 'data');\n for (const descendent of descendents[tree]) {\n describeTreeDescendents(descendent, depth + 1);\n }\n }\n}\n\n/**\n * Helper function to render a nested list of dependent trees in markdown\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendentsMd(\n descendents: TreeDependencyMapInterface,\n depth = 0\n): string {\n let markdown = '';\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n markdown += `## Inner Tree Dependencies (${\n Object.values(descendents)[0].length\n })\\n`;\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n markdown += `${indent}- ${tree}\\n`;\n for (const descendent of descendents[tree]) {\n markdown += describeTreeDescendentsMd(descendent, depth + 1);\n }\n return markdown;\n }\n return markdown;\n}\n\n/**\n * Describe a journey:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourney(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n): Promise<void> {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(`${getOneLineDescription(journeyData.tree)}`, 'data');\n printMessage(Array(`[${journeyData.tree._id}]`['length']).fill('=').join(''));\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Status\n printMessage(\n `\\nStatus\\n${\n journeyData.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen']\n }`\n );\n\n // Classification\n if (state.getAmVersion()) {\n printMessage(\n `\\nClassification\\n${getJourneyClassification(journeyData).join(', ')}`,\n 'data'\n );\n }\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage('\\nCategories/Tags', 'data');\n printMessage(\n `${JSON.parse(journeyData.tree.uiConfig.categories).join(', ')}`,\n 'data'\n );\n }\n\n // Dependency Tree\n try {\n const descendents = await getTreeDescendents(\n journeyData,\n resolveTreeExport\n );\n describeTreeDescendents(descendents);\n } catch (error) {\n printMessage(`Error resolving inner tree dependencies:`, 'error');\n printMessage(error.stack, 'error');\n }\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `\\nNode Types (${Object.entries(nodeTypeMap).length}):`,\n 'data'\n );\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `- ${String(count)} [${\n nodeType['brightCyan']\n }] (${Node.getNodeClassification(nodeType).join(', ')})`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`\\nNodes (${Object.entries(allNodes).length}):`, 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `- ${Node.getOneLineDescription(\n nodeObj,\n getNodeRef(nodeObj, journeyData)\n )}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`\\nThemes (${journeyData.themes.length}):`, 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`- ${Theme.getOneLineDescription(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `\\nScripts (${Object.entries(journeyData.scripts).length}):`,\n 'data'\n );\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`- ${Script.getOneLineDescription(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `\\nEmail Templates (${\n Object.entries(journeyData.emailTemplates).length\n }):`,\n 'data'\n );\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(\n `- ${EmailTemplate.getOneLineDescription(templateData)}`,\n 'data'\n );\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `\\nSocial Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n }):`,\n 'data'\n );\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`- ${Idp.getOneLineDescription(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `\\nSAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n }):`,\n 'data'\n );\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(\n `- ${Saml2.getOneLineDescription(entityProviderData)}`,\n 'data'\n );\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `\\nSAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n }):`,\n 'data'\n );\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(\n `- ${CirclesOfTrust.getOneLineDescription(cotData)}`,\n 'data'\n );\n }\n }\n}\n\n/**\n * Describe a journey in markdown:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourneyMd(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n) {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(\n `# ${getOneLineDescriptionMd(journeyData.tree)} - ${\n journeyData.tree.enabled === false\n ? ':o: `disabled`'\n : ':white_check_mark: `enabled`'\n }, ${getJourneyClassificationMd(journeyData).join(', ')}`,\n 'data'\n );\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage(\n `\\`${JSON.parse(journeyData.tree.uiConfig.categories).join('`, `')}\\``,\n 'data'\n );\n }\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Journey image\n printMessage(`\\n[![](./${journeyData.tree._id}.png)]()\\n`, 'data');\n\n // Dependency Tree\n const descendents = await getTreeDescendents(journeyData, resolveTreeExport);\n printMessage(describeTreeDescendentsMd(descendents), 'data');\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `## Node Types (${Object.entries(nodeTypeMap).length})`,\n 'data'\n );\n printMessage('| Count | Type | Classification |', 'data');\n printMessage('| -----:| ---- | -------------- |', 'data');\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `| ${String(count)} | ${nodeType} | ${Node.getNodeClassificationMd(\n nodeType\n ).join('<br>')} |`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');\n printMessage(Node.getTableHeaderMd(), 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `${Node.getTableRowMd(nodeObj, getNodeRef(nodeObj, journeyData))}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`## Themes (${journeyData.themes.length})`, 'data');\n printMessage(Theme.getTableHeaderMd(), 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`${Theme.getTableRowMd(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `## Scripts (${Object.entries(journeyData.scripts).length})`,\n 'data'\n );\n printMessage(Script.getTableHeaderMd(), 'data');\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`${Script.getTableRowMd(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `## Email Templates (${\n Object.entries(journeyData.emailTemplates).length\n })`,\n 'data'\n );\n printMessage(EmailTemplate.getTableHeaderMd(), 'data');\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(`${EmailTemplate.getTableRowMd(templateData)}`, 'data');\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `## Social Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n })`,\n 'data'\n );\n printMessage(Idp.getTableHeaderMd(), 'data');\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`${Idp.getTableRowMd(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `## SAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n })`,\n 'data'\n );\n printMessage(Saml2.getTableHeaderMd(), 'data');\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(`${Saml2.getTableRowMd(entityProviderData)}`, 'data');\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `## SAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n })`,\n 'data'\n );\n printMessage(CirclesOfTrust.getTableHeaderMd(), 'data');\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(`${CirclesOfTrust.getTableRowMd(cotData)}`, 'data');\n }\n }\n}\n"],"mappings":"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"}