@rockcarver/frodo-cli 2.0.0-5 → 2.0.0-7

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 (344) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/esm/app.js +4 -1
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/_template/something-delete.js +4 -1
  5. package/esm/cli/_template/something-delete.js.map +1 -1
  6. package/esm/cli/_template/something-describe.js +4 -1
  7. package/esm/cli/_template/something-describe.js.map +1 -1
  8. package/esm/cli/_template/something-else-delete.js +4 -1
  9. package/esm/cli/_template/something-else-delete.js.map +1 -1
  10. package/esm/cli/_template/something-else-describe.js +4 -1
  11. package/esm/cli/_template/something-else-describe.js.map +1 -1
  12. package/esm/cli/_template/something-else-export.js +4 -1
  13. package/esm/cli/_template/something-else-export.js.map +1 -1
  14. package/esm/cli/_template/something-else-import.js +4 -1
  15. package/esm/cli/_template/something-else-import.js.map +1 -1
  16. package/esm/cli/_template/something-else-list.js +4 -1
  17. package/esm/cli/_template/something-else-list.js.map +1 -1
  18. package/esm/cli/_template/something-export.js +4 -1
  19. package/esm/cli/_template/something-export.js.map +1 -1
  20. package/esm/cli/_template/something-import.js +4 -1
  21. package/esm/cli/_template/something-import.js.map +1 -1
  22. package/esm/cli/_template/something-list.js +4 -1
  23. package/esm/cli/_template/something-list.js.map +1 -1
  24. package/esm/cli/_template/something-other-delete.js +4 -1
  25. package/esm/cli/_template/something-other-delete.js.map +1 -1
  26. package/esm/cli/_template/something-other-describe.js +4 -1
  27. package/esm/cli/_template/something-other-describe.js.map +1 -1
  28. package/esm/cli/_template/something-other-export.js +4 -1
  29. package/esm/cli/_template/something-other-export.js.map +1 -1
  30. package/esm/cli/_template/something-other-import.js +4 -1
  31. package/esm/cli/_template/something-other-import.js.map +1 -1
  32. package/esm/cli/_template/something-other-list.js +4 -1
  33. package/esm/cli/_template/something-other-list.js.map +1 -1
  34. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +8 -2
  35. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
  36. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +10 -3
  37. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  38. package/esm/cli/admin/admin-federation-export.js +45 -0
  39. package/esm/cli/admin/admin-federation-export.js.map +1 -0
  40. package/esm/cli/admin/admin-federation-import.js +49 -0
  41. package/esm/cli/admin/admin-federation-import.js.map +1 -0
  42. package/esm/cli/admin/admin-federation-list.js +29 -0
  43. package/esm/cli/admin/admin-federation-list.js.map +1 -0
  44. package/esm/cli/admin/admin-federation.js +13 -0
  45. package/esm/cli/admin/admin-federation.js.map +1 -0
  46. package/esm/cli/admin/admin-get-access-token.js +8 -2
  47. package/esm/cli/admin/admin-get-access-token.js.map +1 -1
  48. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +8 -2
  49. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  50. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +8 -2
  51. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
  52. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +8 -2
  53. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
  54. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +8 -2
  55. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
  56. package/esm/cli/admin/admin-list-static-user-mappings.js +8 -2
  57. package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
  58. package/esm/cli/admin/admin-remove-static-user-mapping.js +8 -2
  59. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  60. package/esm/cli/admin/admin-repair-org-model.js +8 -2
  61. package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
  62. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +8 -2
  63. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  64. package/esm/cli/admin/admin-show-generic-extension-attributes.js +8 -2
  65. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
  66. package/esm/cli/admin/admin.js +1 -0
  67. package/esm/cli/admin/admin.js.map +1 -1
  68. package/esm/cli/agent/agent-delete.js +10 -3
  69. package/esm/cli/agent/agent-delete.js.map +1 -1
  70. package/esm/cli/agent/agent-describe.js +4 -1
  71. package/esm/cli/agent/agent-describe.js.map +1 -1
  72. package/esm/cli/agent/agent-export.js +4 -1
  73. package/esm/cli/agent/agent-export.js.map +1 -1
  74. package/esm/cli/agent/agent-gateway-delete.js +10 -3
  75. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  76. package/esm/cli/agent/agent-gateway-describe.js +4 -1
  77. package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
  78. package/esm/cli/agent/agent-gateway-export.js +4 -1
  79. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  80. package/esm/cli/agent/agent-gateway-import.js +4 -1
  81. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  82. package/esm/cli/agent/agent-gateway-list.js +4 -1
  83. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  84. package/esm/cli/agent/agent-import.js +4 -1
  85. package/esm/cli/agent/agent-import.js.map +1 -1
  86. package/esm/cli/agent/agent-java-delete.js +10 -3
  87. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  88. package/esm/cli/agent/agent-java-describe.js +4 -1
  89. package/esm/cli/agent/agent-java-describe.js.map +1 -1
  90. package/esm/cli/agent/agent-java-export.js +4 -1
  91. package/esm/cli/agent/agent-java-export.js.map +1 -1
  92. package/esm/cli/agent/agent-java-import.js +4 -1
  93. package/esm/cli/agent/agent-java-import.js.map +1 -1
  94. package/esm/cli/agent/agent-java-list.js +4 -1
  95. package/esm/cli/agent/agent-java-list.js.map +1 -1
  96. package/esm/cli/agent/agent-list.js +4 -1
  97. package/esm/cli/agent/agent-list.js.map +1 -1
  98. package/esm/cli/agent/agent-web-delete.js +10 -3
  99. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  100. package/esm/cli/agent/agent-web-describe.js +4 -1
  101. package/esm/cli/agent/agent-web-describe.js.map +1 -1
  102. package/esm/cli/agent/agent-web-export.js +4 -1
  103. package/esm/cli/agent/agent-web-export.js.map +1 -1
  104. package/esm/cli/agent/agent-web-import.js +4 -1
  105. package/esm/cli/agent/agent-web-import.js.map +1 -1
  106. package/esm/cli/agent/agent-web-list.js +4 -1
  107. package/esm/cli/agent/agent-web-list.js.map +1 -1
  108. package/esm/cli/app/app-delete.js +4 -1
  109. package/esm/cli/app/app-delete.js.map +1 -1
  110. package/esm/cli/app/app-describe.js +4 -1
  111. package/esm/cli/app/app-describe.js.map +1 -1
  112. package/esm/cli/app/app-export.js +6 -3
  113. package/esm/cli/app/app-export.js.map +1 -1
  114. package/esm/cli/app/app-import.js +7 -4
  115. package/esm/cli/app/app-import.js.map +1 -1
  116. package/esm/cli/app/app-list.js +4 -1
  117. package/esm/cli/app/app-list.js.map +1 -1
  118. package/esm/cli/authz/authz-policy-delete.js +6 -3
  119. package/esm/cli/authz/authz-policy-delete.js.map +1 -1
  120. package/esm/cli/authz/authz-policy-describe.js +4 -1
  121. package/esm/cli/authz/authz-policy-describe.js.map +1 -1
  122. package/esm/cli/authz/authz-policy-export.js +8 -5
  123. package/esm/cli/authz/authz-policy-export.js.map +1 -1
  124. package/esm/cli/authz/authz-policy-import.js +7 -4
  125. package/esm/cli/authz/authz-policy-import.js.map +1 -1
  126. package/esm/cli/authz/authz-policy-list.js +5 -2
  127. package/esm/cli/authz/authz-policy-list.js.map +1 -1
  128. package/esm/cli/authz/authz-set-delete.js +5 -2
  129. package/esm/cli/authz/authz-set-delete.js.map +1 -1
  130. package/esm/cli/authz/authz-set-describe.js +4 -1
  131. package/esm/cli/authz/authz-set-describe.js.map +1 -1
  132. package/esm/cli/authz/authz-set-export.js +6 -3
  133. package/esm/cli/authz/authz-set-export.js.map +1 -1
  134. package/esm/cli/authz/authz-set-import.js +7 -4
  135. package/esm/cli/authz/authz-set-import.js.map +1 -1
  136. package/esm/cli/authz/authz-set-list.js +4 -1
  137. package/esm/cli/authz/authz-set-list.js.map +1 -1
  138. package/esm/cli/authz/authz-type-delete.js +6 -3
  139. package/esm/cli/authz/authz-type-delete.js.map +1 -1
  140. package/esm/cli/authz/authz-type-describe.js +5 -2
  141. package/esm/cli/authz/authz-type-describe.js.map +1 -1
  142. package/esm/cli/authz/authz-type-export.js +7 -4
  143. package/esm/cli/authz/authz-type-export.js.map +1 -1
  144. package/esm/cli/authz/authz-type-import.js +8 -5
  145. package/esm/cli/authz/authz-type-import.js.map +1 -1
  146. package/esm/cli/authz/authz-type-list.js +4 -1
  147. package/esm/cli/authz/authz-type-list.js.map +1 -1
  148. package/esm/cli/conn/conn-save.js +18 -5
  149. package/esm/cli/conn/conn-save.js.map +1 -1
  150. package/esm/cli/email/email-template-export.js +6 -3
  151. package/esm/cli/email/email-template-export.js.map +1 -1
  152. package/esm/cli/email/email-template-import.js +7 -4
  153. package/esm/cli/email/email-template-import.js.map +1 -1
  154. package/esm/cli/email/email-template-list.js +4 -1
  155. package/esm/cli/email/email-template-list.js.map +1 -1
  156. package/esm/cli/esv/esv-apply.js +15 -5
  157. package/esm/cli/esv/esv-apply.js.map +1 -1
  158. package/esm/cli/esv/esv-secret-create.js +4 -1
  159. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  160. package/esm/cli/esv/esv-secret-delete.js +5 -2
  161. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  162. package/esm/cli/esv/esv-secret-describe.js +4 -1
  163. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  164. package/esm/cli/esv/esv-secret-export.js +4 -1
  165. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  166. package/esm/cli/esv/esv-secret-import.js +4 -1
  167. package/esm/cli/esv/esv-secret-import.js.map +1 -1
  168. package/esm/cli/esv/esv-secret-list.js +4 -1
  169. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  170. package/esm/cli/esv/esv-secret-set.js +4 -1
  171. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  172. package/esm/cli/esv/esv-secret-version-activate.js +4 -1
  173. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  174. package/esm/cli/esv/esv-secret-version-create.js +4 -1
  175. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  176. package/esm/cli/esv/esv-secret-version-deactivate.js +4 -1
  177. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  178. package/esm/cli/esv/esv-secret-version-delete.js +5 -2
  179. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  180. package/esm/cli/esv/esv-secret-version-list.js +4 -1
  181. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  182. package/esm/cli/esv/esv-variable-create.js +4 -1
  183. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  184. package/esm/cli/esv/esv-variable-delete.js +5 -2
  185. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  186. package/esm/cli/esv/esv-variable-describe.js +4 -1
  187. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  188. package/esm/cli/esv/esv-variable-export.js +4 -1
  189. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  190. package/esm/cli/esv/esv-variable-import.js +4 -1
  191. package/esm/cli/esv/esv-variable-import.js.map +1 -1
  192. package/esm/cli/esv/esv-variable-list.js +4 -1
  193. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  194. package/esm/cli/esv/esv-variable-set.js +5 -2
  195. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  196. package/esm/cli/idm/idm-count.js +4 -1
  197. package/esm/cli/idm/idm-count.js.map +1 -1
  198. package/esm/cli/idm/idm-export.js +6 -3
  199. package/esm/cli/idm/idm-export.js.map +1 -1
  200. package/esm/cli/idm/idm-import.js +7 -4
  201. package/esm/cli/idm/idm-import.js.map +1 -1
  202. package/esm/cli/idm/idm-list.js +4 -1
  203. package/esm/cli/idm/idm-list.js.map +1 -1
  204. package/esm/cli/idp/idp-export.js +4 -1
  205. package/esm/cli/idp/idp-export.js.map +1 -1
  206. package/esm/cli/idp/idp-import.js +7 -4
  207. package/esm/cli/idp/idp-import.js.map +1 -1
  208. package/esm/cli/idp/idp-list.js +4 -1
  209. package/esm/cli/idp/idp-list.js.map +1 -1
  210. package/esm/cli/info/info.js +8 -2
  211. package/esm/cli/info/info.js.map +1 -1
  212. package/esm/cli/journey/journey-delete.js +5 -2
  213. package/esm/cli/journey/journey-delete.js.map +1 -1
  214. package/esm/cli/journey/journey-describe.js +14 -6
  215. package/esm/cli/journey/journey-describe.js.map +1 -1
  216. package/esm/cli/journey/journey-disable.js +8 -2
  217. package/esm/cli/journey/journey-disable.js.map +1 -1
  218. package/esm/cli/journey/journey-enable.js +8 -2
  219. package/esm/cli/journey/journey-enable.js.map +1 -1
  220. package/esm/cli/journey/journey-export.js +6 -3
  221. package/esm/cli/journey/journey-export.js.map +1 -1
  222. package/esm/cli/journey/journey-import.js +7 -4
  223. package/esm/cli/journey/journey-import.js.map +1 -1
  224. package/esm/cli/journey/journey-list.js +4 -1
  225. package/esm/cli/journey/journey-list.js.map +1 -1
  226. package/esm/cli/journey/journey-prune.js +10 -3
  227. package/esm/cli/journey/journey-prune.js.map +1 -1
  228. package/esm/cli/log/log-fetch.js +16 -6
  229. package/esm/cli/log/log-fetch.js.map +1 -1
  230. package/esm/cli/log/log-key-delete.js +5 -2
  231. package/esm/cli/log/log-key-delete.js.map +1 -1
  232. package/esm/cli/log/log-key-describe.js +4 -1
  233. package/esm/cli/log/log-key-describe.js.map +1 -1
  234. package/esm/cli/log/log-key-list.js +4 -1
  235. package/esm/cli/log/log-key-list.js.map +1 -1
  236. package/esm/cli/log/log-list.js +14 -4
  237. package/esm/cli/log/log-list.js.map +1 -1
  238. package/esm/cli/log/log-tail.js +16 -6
  239. package/esm/cli/log/log-tail.js.map +1 -1
  240. package/esm/cli/realm/realm-add-custom-domain.js +4 -1
  241. package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
  242. package/esm/cli/realm/realm-describe.js +4 -1
  243. package/esm/cli/realm/realm-describe.js.map +1 -1
  244. package/esm/cli/realm/realm-list.js +4 -1
  245. package/esm/cli/realm/realm-list.js.map +1 -1
  246. package/esm/cli/realm/realm-remove-custom-domain.js +8 -2
  247. package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
  248. package/esm/cli/saml/saml-cot-export.js +6 -3
  249. package/esm/cli/saml/saml-cot-export.js.map +1 -1
  250. package/esm/cli/saml/saml-cot-import.js +7 -4
  251. package/esm/cli/saml/saml-cot-import.js.map +1 -1
  252. package/esm/cli/saml/saml-cot-list.js +4 -1
  253. package/esm/cli/saml/saml-cot-list.js.map +1 -1
  254. package/esm/cli/saml/saml-delete.js +11 -4
  255. package/esm/cli/saml/saml-delete.js.map +1 -1
  256. package/esm/cli/saml/saml-describe.js +4 -1
  257. package/esm/cli/saml/saml-describe.js.map +1 -1
  258. package/esm/cli/saml/saml-export.js +6 -3
  259. package/esm/cli/saml/saml-export.js.map +1 -1
  260. package/esm/cli/saml/saml-import.js +7 -4
  261. package/esm/cli/saml/saml-import.js.map +1 -1
  262. package/esm/cli/saml/saml-list.js +4 -1
  263. package/esm/cli/saml/saml-list.js.map +1 -1
  264. package/esm/cli/saml/saml-metadata-export.js +5 -2
  265. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  266. package/esm/cli/script/script-delete.js +4 -1
  267. package/esm/cli/script/script-delete.js.map +1 -1
  268. package/esm/cli/script/script-describe.js +4 -1
  269. package/esm/cli/script/script-describe.js.map +1 -1
  270. package/esm/cli/script/script-export.js +4 -1
  271. package/esm/cli/script/script-export.js.map +1 -1
  272. package/esm/cli/script/script-import.js +4 -1
  273. package/esm/cli/script/script-import.js.map +1 -1
  274. package/esm/cli/script/script-list.js +4 -1
  275. package/esm/cli/script/script-list.js.map +1 -1
  276. package/esm/cli/service/service-delete.js +5 -2
  277. package/esm/cli/service/service-delete.js.map +1 -1
  278. package/esm/cli/service/service-export.js +6 -3
  279. package/esm/cli/service/service-export.js.map +1 -1
  280. package/esm/cli/service/service-import.js +7 -4
  281. package/esm/cli/service/service-import.js.map +1 -1
  282. package/esm/cli/service/service-list.js +4 -1
  283. package/esm/cli/service/service-list.js.map +1 -1
  284. package/esm/cli/theme/theme-delete.js +6 -3
  285. package/esm/cli/theme/theme-delete.js.map +1 -1
  286. package/esm/cli/theme/theme-export.js +7 -4
  287. package/esm/cli/theme/theme-export.js.map +1 -1
  288. package/esm/cli/theme/theme-import.js +8 -5
  289. package/esm/cli/theme/theme-import.js.map +1 -1
  290. package/esm/cli/theme/theme-list.js +4 -1
  291. package/esm/cli/theme/theme-list.js.map +1 -1
  292. package/esm/ops/AdminFederationOps.js +216 -0
  293. package/esm/ops/AdminFederationOps.js.map +1 -0
  294. package/esm/ops/AgentOps.js +62 -36
  295. package/esm/ops/AgentOps.js.map +1 -1
  296. package/esm/ops/CirclesOfTrustOps.js +22 -10
  297. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  298. package/esm/ops/ConnectionProfileOps.js +10 -3
  299. package/esm/ops/ConnectionProfileOps.js.map +1 -1
  300. package/esm/ops/EmailTemplateOps.js +23 -15
  301. package/esm/ops/EmailTemplateOps.js.map +1 -1
  302. package/esm/ops/IdmOps.js +34 -21
  303. package/esm/ops/IdmOps.js.map +1 -1
  304. package/esm/ops/IdpOps.js +17 -9
  305. package/esm/ops/IdpOps.js.map +1 -1
  306. package/esm/ops/JourneyOps.js +46 -30
  307. package/esm/ops/JourneyOps.js.map +1 -1
  308. package/esm/ops/LogOps.js +21 -11
  309. package/esm/ops/LogOps.js.map +1 -1
  310. package/esm/ops/NodeOps.js +5 -2
  311. package/esm/ops/NodeOps.js.map +1 -1
  312. package/esm/ops/OAuth2ClientOps.js +26 -13
  313. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  314. package/esm/ops/OrganizationOps.js +8 -2
  315. package/esm/ops/OrganizationOps.js.map +1 -1
  316. package/esm/ops/PolicyOps.js +36 -21
  317. package/esm/ops/PolicyOps.js.map +1 -1
  318. package/esm/ops/PolicySetOps.js +35 -18
  319. package/esm/ops/PolicySetOps.js.map +1 -1
  320. package/esm/ops/RealmOps.js +11 -6
  321. package/esm/ops/RealmOps.js.map +1 -1
  322. package/esm/ops/ResourceTypeOps.js +34 -18
  323. package/esm/ops/ResourceTypeOps.js.map +1 -1
  324. package/esm/ops/Saml2Ops.js +43 -23
  325. package/esm/ops/Saml2Ops.js.map +1 -1
  326. package/esm/ops/ScriptOps.js +18 -10
  327. package/esm/ops/ScriptOps.js.map +1 -1
  328. package/esm/ops/SecretsOps.js +28 -14
  329. package/esm/ops/SecretsOps.js.map +1 -1
  330. package/esm/ops/ServiceOps.js +38 -17
  331. package/esm/ops/ServiceOps.js.map +1 -1
  332. package/esm/ops/ThemeOps.js +35 -19
  333. package/esm/ops/ThemeOps.js.map +1 -1
  334. package/esm/ops/VariablesOps.js +23 -12
  335. package/esm/ops/VariablesOps.js.map +1 -1
  336. package/esm/utils/Config.js +6 -3
  337. package/esm/utils/Config.js.map +1 -1
  338. package/esm/utils/Console.js +5 -2
  339. package/esm/utils/Console.js.map +1 -1
  340. package/esm/utils/ExportImportUtils.js +6 -3
  341. package/esm/utils/ExportImportUtils.js.map +1 -1
  342. package/esm/utils/Version.js +7 -3
  343. package/esm/utils/Version.js.map +1 -1
  344. package/package.json +2 -2
@@ -10,6 +10,22 @@ import * as Script from './ScriptOps';
10
10
  import * as Theme from './ThemeOps';
11
11
  import wordwrap from './utils/Wordwrap';
12
12
  import { cloneDeep } from './utils/OpsUtils';
13
+ const {
14
+ getTypedFilename,
15
+ saveJsonToFile,
16
+ getRealmString
17
+ } = frodo.utils.impex;
18
+ const {
19
+ getJourneys,
20
+ exportJourney,
21
+ createMultiTreeExportTemplate,
22
+ resolveDependencies,
23
+ importAllJourneys,
24
+ importJourney,
25
+ getTreeDescendents,
26
+ getNodeRef,
27
+ onlineTreeExportResolver
28
+ } = frodo.authn.journey;
13
29
 
14
30
  /**
15
31
  * List all the journeys/trees
@@ -20,7 +36,7 @@ import { cloneDeep } from './utils/OpsUtils';
20
36
  export async function listJourneys(long = false, analyze = false) {
21
37
  let journeys = [];
22
38
  try {
23
- journeys = await frodo.authn.journey.getJourneys();
39
+ journeys = await getJourneys();
24
40
  if (!long && !analyze) {
25
41
  for (const journeyStub of journeys) {
26
42
  printMessage(`${journeyStub['_id']}`, 'data');
@@ -38,7 +54,7 @@ export async function listJourneys(long = false, analyze = false) {
38
54
  const exportPromises = [];
39
55
  try {
40
56
  for (const journeyStub of journeys) {
41
- exportPromises.push(frodo.authn.journey.exportJourney(journeyStub['_id'], {
57
+ exportPromises.push(exportJourney(journeyStub['_id'], {
42
58
  useStringArrays: false,
43
59
  deps: false
44
60
  }));
@@ -74,7 +90,7 @@ export async function exportJourneyToFile(journeyId, file, options) {
74
90
  debugMessage(`exportJourneyToFile: start`);
75
91
  const verbose = state.getDebug();
76
92
  if (!file) {
77
- file = frodo.utils.impex.getTypedFilename(journeyId, 'journey');
93
+ file = getTypedFilename(journeyId, 'journey');
78
94
  }
79
95
  if (state.getDirectory()) {
80
96
  const dir = state.getDirectory().replace(/\/$/, '');
@@ -90,9 +106,9 @@ export async function exportJourneyToFile(journeyId, file, options) {
90
106
  }
91
107
  if (!verbose) showSpinner(`${journeyId}`);
92
108
  try {
93
- const fileData = await frodo.authn.journey.exportJourney(journeyId, options);
109
+ const fileData = await exportJourney(journeyId, options);
94
110
  if (verbose) showSpinner(`${journeyId}`);
95
- frodo.utils.impex.saveJsonToFile(fileData, file);
111
+ saveJsonToFile(fileData, file);
96
112
  succeedSpinner(`Exported ${journeyId['brightCyan']} to ${file['brightCyan']}.`);
97
113
  } catch (error) {
98
114
  if (verbose) showSpinner(`${journeyId}`);
@@ -111,22 +127,22 @@ export async function exportJourneysToFile(file, options = {
111
127
  }) {
112
128
  let fileName = file;
113
129
  if (!fileName) {
114
- fileName = frodo.utils.impex.getTypedFilename(`all${frodo.utils.impex.getRealmString()}Journeys`, 'journeys');
130
+ fileName = getTypedFilename(`all${getRealmString()}Journeys`, 'journeys');
115
131
  }
116
- const trees = await frodo.authn.journey.getJourneys();
117
- const fileData = frodo.authn.journey.createMultiTreeExportTemplate();
132
+ const trees = await getJourneys();
133
+ const fileData = createMultiTreeExportTemplate();
118
134
  createProgressBar(trees.length, 'Exporting journeys...');
119
135
  for (const tree of trees) {
120
136
  updateProgressBar(`${tree._id}`);
121
137
  try {
122
- const exportData = await frodo.authn.journey.exportJourney(tree._id, options);
138
+ const exportData = await exportJourney(tree._id, options);
123
139
  delete exportData.meta;
124
140
  fileData.trees[tree._id] = exportData;
125
141
  } catch (error) {
126
142
  printMessage(`Error exporting journey ${tree._id}: ${error}`, 'error');
127
143
  }
128
144
  }
129
- frodo.utils.impex.saveJsonToFile(fileData, fileName);
145
+ saveJsonToFile(fileData, fileName);
130
146
  stopProgressBar(`Exported to ${fileName}`);
131
147
  }
132
148
 
@@ -135,14 +151,14 @@ export async function exportJourneysToFile(file, options = {
135
151
  * @param {TreeExportOptions} options export options
136
152
  */
137
153
  export async function exportJourneysToFiles(options) {
138
- const trees = await frodo.authn.journey.getJourneys();
154
+ const trees = await getJourneys();
139
155
  createProgressBar(trees.length, 'Exporting journeys...');
140
156
  for (const tree of trees) {
141
157
  updateProgressBar(`${tree._id}`);
142
- const fileName = frodo.utils.impex.getTypedFilename(`${tree._id}`, 'journey');
158
+ const fileName = getTypedFilename(`${tree._id}`, 'journey');
143
159
  try {
144
- const exportData = await frodo.authn.journey.exportJourney(tree._id, options);
145
- frodo.utils.impex.saveJsonToFile(exportData, fileName);
160
+ const exportData = await exportJourney(tree._id, options);
161
+ saveJsonToFile(exportData, fileName);
146
162
  } catch (error) {
147
163
  // do we need to report status here?
148
164
  }
@@ -171,17 +187,17 @@ export async function importJourneyFromFile(journeyId, file, options) {
171
187
  // if a journeyId was specified, only import the matching journey
172
188
  if (journeyData && journeyId === journeyData.tree._id) {
173
189
  // attempt dependency resolution for single tree import
174
- const installedJourneys = (await frodo.authn.journey.getJourneys()).map(x => x._id);
190
+ const installedJourneys = (await getJourneys()).map(x => x._id);
175
191
  const unresolvedJourneys = {};
176
192
  const resolvedJourneys = [];
177
193
  showSpinner('Resolving dependencies');
178
- await frodo.authn.journey.resolveDependencies(installedJourneys, {
194
+ await resolveDependencies(installedJourneys, {
179
195
  [journeyId]: journeyData
180
196
  }, unresolvedJourneys, resolvedJourneys);
181
197
  if (Object.keys(unresolvedJourneys).length === 0) {
182
198
  succeedSpinner(`Resolved all dependencies.`);
183
199
  if (!verbose) showSpinner(`Importing ${journeyId}...`);
184
- frodo.authn.journey.importJourney(journeyData, options).then(() => {
200
+ importJourney(journeyData, options).then(() => {
185
201
  if (verbose) showSpinner(`Importing ${journeyId}...`);
186
202
  succeedSpinner(`Imported ${journeyId}.`);
187
203
  }).catch(importError => {
@@ -231,17 +247,17 @@ export async function importFirstJourneyFromFile(file, options) {
231
247
  // if a journeyId was specified, only import the matching journey
232
248
  if (journeyData && journeyId) {
233
249
  // attempt dependency resolution for single tree import
234
- const installedJourneys = (await frodo.authn.journey.getJourneys()).map(x => x._id);
250
+ const installedJourneys = (await getJourneys()).map(x => x._id);
235
251
  const unresolvedJourneys = {};
236
252
  const resolvedJourneys = [];
237
253
  showSpinner('Resolving dependencies');
238
- await frodo.authn.journey.resolveDependencies(installedJourneys, {
254
+ await resolveDependencies(installedJourneys, {
239
255
  [journeyId]: journeyData
240
256
  }, unresolvedJourneys, resolvedJourneys);
241
257
  if (Object.keys(unresolvedJourneys).length === 0) {
242
258
  succeedSpinner(`Resolved all dependencies.`);
243
259
  if (!verbose) showSpinner(`Importing ${journeyId}...`);
244
- frodo.authn.journey.importJourney(journeyData, options).then(() => {
260
+ importJourney(journeyData, options).then(() => {
245
261
  if (verbose) showSpinner(`Importing ${journeyId}...`);
246
262
  succeedSpinner(`Imported ${journeyId}.`);
247
263
  }).catch(importError => {
@@ -271,7 +287,7 @@ export async function importJourneysFromFile(file, options) {
271
287
  fs.readFile(file, 'utf8', (err, data) => {
272
288
  if (err) throw err;
273
289
  const fileData = JSON.parse(data);
274
- frodo.authn.journey.importAllJourneys(fileData.trees, options);
290
+ importAllJourneys(fileData.trees, options);
275
291
  });
276
292
  }
277
293
 
@@ -289,7 +305,7 @@ export async function importJourneysFromFiles(options) {
289
305
  const journeyData = JSON.parse(fs.readFileSync(file, 'utf8'));
290
306
  allJourneysData.trees[journeyData.tree._id] = journeyData;
291
307
  }
292
- frodo.authn.journey.importAllJourneys(allJourneysData.trees, options);
308
+ importAllJourneys(allJourneysData.trees, options);
293
309
  }
294
310
 
295
311
  /**
@@ -298,7 +314,7 @@ export async function importJourneysFromFiles(options) {
298
314
  * @returns {string[]} Colored string array of classifications
299
315
  */
300
316
  export function getJourneyClassification(journey) {
301
- return frodo.authn.journey.getJourneyClassification(journey).map(it => {
317
+ return getJourneyClassification(journey).map(it => {
302
318
  switch (it) {
303
319
  case 'standard':
304
320
  return it['brightGreen'];
@@ -318,7 +334,7 @@ export function getJourneyClassification(journey) {
318
334
  * @returns {string[]} Colored string array of classifications
319
335
  */
320
336
  export function getJourneyClassificationMd(journey) {
321
- return frodo.authn.journey.getJourneyClassification(journey).map(it => {
337
+ return getJourneyClassification(journey).map(it => {
322
338
  switch (it) {
323
339
  case 'standard':
324
340
  return `:green_circle: \`${it}\``;
@@ -410,7 +426,7 @@ function describeTreeDescendentsMd(descendents, depth = 0) {
410
426
  * @param {SingleTreeExportInterface} journeyData journey export object
411
427
  * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function
412
428
  */
413
- export async function describeJourney(journeyData, resolveTreeExport = frodo.authn.journey.onlineTreeExportResolver) {
429
+ export async function describeJourney(journeyData, resolveTreeExport = onlineTreeExportResolver) {
414
430
  var _journeyData$meta, _journeyData$tree$uiC, _journeyData$themes;
415
431
  const allNodes = {
416
432
  ...journeyData.nodes,
@@ -454,7 +470,7 @@ export async function describeJourney(journeyData, resolveTreeExport = frodo.aut
454
470
  }
455
471
 
456
472
  // Dependency Tree
457
- const descendents = await frodo.authn.journey.getTreeDescendents(journeyData, resolveTreeExport);
473
+ const descendents = await getTreeDescendents(journeyData, resolveTreeExport);
458
474
  describeTreeDescendents(descendents);
459
475
 
460
476
  // Node Types
@@ -469,7 +485,7 @@ export async function describeJourney(journeyData, resolveTreeExport = frodo.aut
469
485
  if (Object.entries(allNodes).length) {
470
486
  printMessage(`\nNodes (${Object.entries(allNodes).length}):`, 'data');
471
487
  for (const nodeObj of Object.values(allNodes)) {
472
- printMessage(`- ${Node.getOneLineDescription(nodeObj, frodo.authn.journey.getNodeRef(nodeObj, journeyData))}`, 'data');
488
+ printMessage(`- ${Node.getOneLineDescription(nodeObj, getNodeRef(nodeObj, journeyData))}`, 'data');
473
489
  }
474
490
  }
475
491
 
@@ -537,7 +553,7 @@ export async function describeJourney(journeyData, resolveTreeExport = frodo.aut
537
553
  * @param {SingleTreeExportInterface} journeyData journey export object
538
554
  * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function
539
555
  */
540
- export async function describeJourneyMd(journeyData, resolveTreeExport = frodo.authn.journey.onlineTreeExportResolver) {
556
+ export async function describeJourneyMd(journeyData, resolveTreeExport = onlineTreeExportResolver) {
541
557
  var _journeyData$meta2, _journeyData$tree$uiC2, _journeyData$themes2;
542
558
  const allNodes = {
543
559
  ...journeyData.nodes,
@@ -574,7 +590,7 @@ export async function describeJourneyMd(journeyData, resolveTreeExport = frodo.a
574
590
  printMessage(`\n[![](./${journeyData.tree._id}.png)]()\n`, 'data');
575
591
 
576
592
  // Dependency Tree
577
- const descendents = await frodo.authn.journey.getTreeDescendents(journeyData, resolveTreeExport);
593
+ const descendents = await getTreeDescendents(journeyData, resolveTreeExport);
578
594
  printMessage(describeTreeDescendentsMd(descendents), 'data');
579
595
 
580
596
  // Node Types
@@ -592,7 +608,7 @@ export async function describeJourneyMd(journeyData, resolveTreeExport = frodo.a
592
608
  printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');
593
609
  printMessage(Node.getTableHeaderMd(), 'data');
594
610
  for (const nodeObj of Object.values(allNodes)) {
595
- printMessage(`${Node.getTableRowMd(nodeObj, frodo.authn.journey.getNodeRef(nodeObj, journeyData))}`, 'data');
611
+ printMessage(`${Node.getTableRowMd(nodeObj, getNodeRef(nodeObj, journeyData))}`, 'data');
596
612
  }
597
613
  }
598
614
 
@@ -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 frodo.authn.journey.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 frodo.authn.journey.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 = 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","printMessage","createProgressBar","updateProgressBar","stopProgressBar","showSpinner","succeedSpinner","failSpinner","createTable","debugMessage","CirclesOfTrust","EmailTemplate","Idp","Node","Saml2","Script","Theme","wordwrap","cloneDeep","getTypedFilename","saveJsonToFile","getRealmString","utils","impex","getJourneys","exportJourney","createMultiTreeExportTemplate","resolveDependencies","importAllJourneys","importJourney","getTreeDescendents","getNodeRef","onlineTreeExportResolver","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","getJourneyClassification","error","response","data","_error$response","exportJourneyToFile","journeyId","file","options","verbose","getDebug","getDirectory","dir","replace","existsSync","mkdirSync","recursive","fileData","exportJourneysToFile","fileName","trees","length","exportData","meta","exportJourneysToFiles","importJourneyFromFile","readFile","err","journeyData","installedJourneys","map","x","unresolvedJourneys","resolvedJourneys","Object","keys","then","catch","importError","importFirstJourneyFromFile","treeId","hasOwnProperty","call","importJourneysFromFile","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","_journeyData$meta","_journeyData$tree$uiC","_journeyData$themes","allNodes","nodes","innerNodes","nodeTypeMap","nodeData","_type","getAmVersion","originAmVersion","setAmVersion","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":["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\nconst { getTypedFilename, saveJsonToFile, getRealmString } = frodo.utils.impex;\nconst {\n getJourneys,\n exportJourney,\n createMultiTreeExportTemplate,\n resolveDependencies,\n importAllJourneys,\n importJourney,\n getTreeDescendents,\n getNodeRef,\n onlineTreeExportResolver,\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 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 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 = 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 = await exportJourney(\n journeyId,\n options\n );\n if (verbose) showSpinner(`${journeyId}`);\n 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 = getTypedFilename(`all${getRealmString()}Journeys`, 'journeys');\n }\n const trees = await getJourneys();\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, 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 getJourneys();\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, 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 getJourneys()).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.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 getJourneys()).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(file, 'utf8', (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n 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 importAllJourneys(allJourneysData.trees as MultiTreeExportInterface, options);\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 const descendents = await getTreeDescendents(journeyData, resolveTreeExport);\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 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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"}
package/esm/ops/LogOps.js CHANGED
@@ -1,9 +1,19 @@
1
1
  import { frodo, state } from '@rockcarver/frodo-lib';
2
2
  import { createTable, debugMessage, failSpinner, printMessage, showSpinner, succeedSpinner, verboseMessage } from '../utils/Console';
3
+ const {
4
+ getLogApiKeys,
5
+ createLogApiKey,
6
+ fetch,
7
+ tail,
8
+ getDefaultNoiseFilter,
9
+ resolvePayloadLevel,
10
+ deleteLogApiKey: _deleteLogApiKey,
11
+ deleteLogApiKeys: _deleteLogApiKeys
12
+ } = frodo.cloud.log;
3
13
  export async function listLogApiKeys(long = false) {
4
14
  let outcome = false;
5
15
  try {
6
- const keys = await frodo.cloud.log.getLogApiKeys();
16
+ const keys = await getLogApiKeys();
7
17
  if (long) {
8
18
  const table = createTable(['Key Id', 'Name', 'Created at']);
9
19
  for (const key of keys) {
@@ -25,7 +35,7 @@ export async function provisionCreds() {
25
35
  try {
26
36
  let keyName = `frodo-${state.getUsername()}`;
27
37
  try {
28
- const keys = await frodo.cloud.log.getLogApiKeys();
38
+ const keys = await getLogApiKeys();
29
39
  for (const key of keys) {
30
40
  if (key.name === keyName) {
31
41
  // append current timestamp to name if the named key already exists
@@ -33,7 +43,7 @@ export async function provisionCreds() {
33
43
  }
34
44
  }
35
45
  try {
36
- const resp = await frodo.cloud.log.createLogApiKey(keyName);
46
+ const resp = await createLogApiKey(keyName);
37
47
  // if (resp.name !== keyName) {
38
48
  // printMessage(
39
49
  // `create keys ERROR: could not create log API key ${keyName} [new key name: ${resp.name}]`,
@@ -60,7 +70,7 @@ export async function deleteLogApiKey(keyId) {
60
70
  debugMessage(`cli.LogOps.deleteKey: start`);
61
71
  showSpinner(`Deleting ${keyId}...`);
62
72
  try {
63
- await frodo.cloud.log.deleteLogApiKey(keyId);
73
+ await _deleteLogApiKey(keyId);
64
74
  succeedSpinner(`Deleted ${keyId}.`);
65
75
  outcome = true;
66
76
  } catch (error) {
@@ -74,7 +84,7 @@ export async function deleteLogApiKeys() {
74
84
  debugMessage(`cli.LogOps.deleteKeys: start`);
75
85
  showSpinner(`Deleting all keys...`);
76
86
  try {
77
- const response = await frodo.cloud.log.deleteLogApiKeys();
87
+ const response = await _deleteLogApiKeys();
78
88
  succeedSpinner(`Deleted ${response.length} keys.`);
79
89
  outcome = true;
80
90
  } catch (error) {
@@ -85,13 +95,13 @@ export async function deleteLogApiKeys() {
85
95
  }
86
96
  export async function tailLogs(source, levels, txid, cookie, nf) {
87
97
  try {
88
- const logsObject = await frodo.cloud.log.tail(source, cookie);
98
+ const logsObject = await tail(source, cookie);
89
99
  let filteredLogs = [];
90
- const noiseFilter = nf == null ? frodo.cloud.log.getDefaultNoiseFilter() : nf;
100
+ const noiseFilter = nf == null ? getDefaultNoiseFilter() : nf;
91
101
  if (Array.isArray(logsObject.result)) {
92
102
  filteredLogs = logsObject.result.filter(el => {
93
103
  var _transactionId;
94
- return !noiseFilter.includes(el.payload.logger) && !noiseFilter.includes(el.type) && (levels[0] === 'ALL' || levels.includes(frodo.cloud.log.resolvePayloadLevel(el))) && (typeof txid === 'undefined' || txid === null || ((_transactionId = el.payload.transactionId) === null || _transactionId === void 0 ? void 0 : _transactionId.includes(txid)));
104
+ return !noiseFilter.includes(el.payload.logger) && !noiseFilter.includes(el.type) && (levels[0] === 'ALL' || levels.includes(resolvePayloadLevel(el))) && (typeof txid === 'undefined' || txid === null || ((_transactionId = el.payload.transactionId) === null || _transactionId === void 0 ? void 0 : _transactionId.includes(txid)));
95
105
  });
96
106
  }
97
107
  filteredLogs.forEach(e => {
@@ -108,13 +118,13 @@ export async function tailLogs(source, levels, txid, cookie, nf) {
108
118
  }
109
119
  export async function fetchLogs(source, startTs, endTs, levels, txid, ffString, cookie, nf) {
110
120
  try {
111
- const logsObject = await frodo.cloud.log.fetch(source, startTs, endTs, cookie);
121
+ const logsObject = await fetch(source, startTs, endTs, cookie);
112
122
  let filteredLogs = [];
113
- const noiseFilter = nf == null ? frodo.cloud.log.getDefaultNoiseFilter() : nf;
123
+ const noiseFilter = nf == null ? getDefaultNoiseFilter() : nf;
114
124
  if (Array.isArray(logsObject.result)) {
115
125
  filteredLogs = logsObject.result.filter(el => {
116
126
  var _transactionId2;
117
- return !noiseFilter.includes(el.payload.logger) && !noiseFilter.includes(el.type) && (levels[0] === 'ALL' || levels.includes(frodo.cloud.log.resolvePayloadLevel(el))) && (typeof txid === 'undefined' || txid === null || ((_transactionId2 = el.payload.transactionId) === null || _transactionId2 === void 0 ? void 0 : _transactionId2.includes(txid)));
127
+ return !noiseFilter.includes(el.payload.logger) && !noiseFilter.includes(el.type) && (levels[0] === 'ALL' || levels.includes(resolvePayloadLevel(el))) && (typeof txid === 'undefined' || txid === null || ((_transactionId2 = el.payload.transactionId) === null || _transactionId2 === void 0 ? void 0 : _transactionId2.includes(txid)));
118
128
  });
119
129
  }
120
130
  filteredLogs.forEach(e => {