@rockcarver/frodo-cli 0.18.2-9 → 0.19.0

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 (324) hide show
  1. package/CHANGELOG.md +112 -1
  2. package/esm/app.js +4 -1
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/FrodoCommand.js +133 -0
  5. package/esm/cli/FrodoCommand.js.map +1 -0
  6. package/esm/cli/_template/something-delete.js +9 -15
  7. package/esm/cli/_template/something-delete.js.map +1 -1
  8. package/esm/cli/_template/something-describe.js +9 -15
  9. package/esm/cli/_template/something-describe.js.map +1 -1
  10. package/esm/cli/_template/something-else-delete.js +9 -15
  11. package/esm/cli/_template/something-else-delete.js.map +1 -1
  12. package/esm/cli/_template/something-else-describe.js +9 -15
  13. package/esm/cli/_template/something-else-describe.js.map +1 -1
  14. package/esm/cli/_template/something-else-export.js +9 -15
  15. package/esm/cli/_template/something-else-export.js.map +1 -1
  16. package/esm/cli/_template/something-else-import.js +9 -15
  17. package/esm/cli/_template/something-else-import.js.map +1 -1
  18. package/esm/cli/_template/something-else-list.js +9 -15
  19. package/esm/cli/_template/something-else-list.js.map +1 -1
  20. package/esm/cli/_template/something-else.js +8 -8
  21. package/esm/cli/_template/something-else.js.map +1 -1
  22. package/esm/cli/_template/something-export.js +9 -15
  23. package/esm/cli/_template/something-export.js.map +1 -1
  24. package/esm/cli/_template/something-import.js +9 -15
  25. package/esm/cli/_template/something-import.js.map +1 -1
  26. package/esm/cli/_template/something-list.js +9 -15
  27. package/esm/cli/_template/something-list.js.map +1 -1
  28. package/esm/cli/_template/something-other-delete.js +9 -15
  29. package/esm/cli/_template/something-other-delete.js.map +1 -1
  30. package/esm/cli/_template/something-other-describe.js +9 -15
  31. package/esm/cli/_template/something-other-describe.js.map +1 -1
  32. package/esm/cli/_template/something-other-export.js +9 -15
  33. package/esm/cli/_template/something-other-export.js.map +1 -1
  34. package/esm/cli/_template/something-other-import.js +9 -15
  35. package/esm/cli/_template/something-other-import.js.map +1 -1
  36. package/esm/cli/_template/something-other-list.js +9 -15
  37. package/esm/cli/_template/something-other-list.js.map +1 -1
  38. package/esm/cli/_template/something-other.js +8 -8
  39. package/esm/cli/_template/something-other.js.map +1 -1
  40. package/esm/cli/_template/something.js +9 -10
  41. package/esm/cli/_template/something.js.map +1 -1
  42. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +8 -15
  43. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
  44. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +9 -15
  45. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  46. package/esm/cli/admin/admin-get-access-token.js +9 -15
  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 +9 -15
  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 +9 -15
  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 -15
  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 -15
  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 +9 -15
  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 -15
  59. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  60. package/esm/cli/admin/admin-repair-org-model.js +9 -15
  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 +9 -15
  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 +9 -15
  65. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
  66. package/esm/cli/admin/admin.js +14 -15
  67. package/esm/cli/admin/admin.js.map +1 -1
  68. package/esm/cli/agent/agent-delete.js +8 -15
  69. package/esm/cli/agent/agent-delete.js.map +1 -1
  70. package/esm/cli/agent/agent-describe.js +9 -15
  71. package/esm/cli/agent/agent-describe.js.map +1 -1
  72. package/esm/cli/agent/agent-export.js +8 -15
  73. package/esm/cli/agent/agent-export.js.map +1 -1
  74. package/esm/cli/agent/agent-gateway-delete.js +8 -15
  75. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  76. package/esm/cli/agent/agent-gateway-describe.js +9 -15
  77. package/esm/cli/agent/agent-gateway-describe.js.map +1 -1
  78. package/esm/cli/agent/agent-gateway-export.js +8 -15
  79. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  80. package/esm/cli/agent/agent-gateway-import.js +8 -15
  81. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  82. package/esm/cli/agent/agent-gateway-list.js +9 -15
  83. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  84. package/esm/cli/agent/agent-gateway.js +8 -8
  85. package/esm/cli/agent/agent-gateway.js.map +1 -1
  86. package/esm/cli/agent/agent-import.js +8 -15
  87. package/esm/cli/agent/agent-import.js.map +1 -1
  88. package/esm/cli/agent/agent-java-delete.js +8 -15
  89. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  90. package/esm/cli/agent/agent-java-describe.js +9 -15
  91. package/esm/cli/agent/agent-java-describe.js.map +1 -1
  92. package/esm/cli/agent/agent-java-export.js +8 -15
  93. package/esm/cli/agent/agent-java-export.js.map +1 -1
  94. package/esm/cli/agent/agent-java-import.js +8 -15
  95. package/esm/cli/agent/agent-java-import.js.map +1 -1
  96. package/esm/cli/agent/agent-java-list.js +9 -15
  97. package/esm/cli/agent/agent-java-list.js.map +1 -1
  98. package/esm/cli/agent/agent-java.js +8 -8
  99. package/esm/cli/agent/agent-java.js.map +1 -1
  100. package/esm/cli/agent/agent-list.js +9 -15
  101. package/esm/cli/agent/agent-list.js.map +1 -1
  102. package/esm/cli/agent/agent-web-delete.js +8 -15
  103. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  104. package/esm/cli/agent/agent-web-describe.js +9 -15
  105. package/esm/cli/agent/agent-web-describe.js.map +1 -1
  106. package/esm/cli/agent/agent-web-export.js +8 -15
  107. package/esm/cli/agent/agent-web-export.js.map +1 -1
  108. package/esm/cli/agent/agent-web-import.js +8 -15
  109. package/esm/cli/agent/agent-web-import.js.map +1 -1
  110. package/esm/cli/agent/agent-web-list.js +9 -15
  111. package/esm/cli/agent/agent-web-list.js.map +1 -1
  112. package/esm/cli/agent/agent-web.js +8 -8
  113. package/esm/cli/agent/agent-web.js.map +1 -1
  114. package/esm/cli/agent/agent.js +10 -11
  115. package/esm/cli/agent/agent.js.map +1 -1
  116. package/esm/cli/app/app-delete.js +9 -12
  117. package/esm/cli/app/app-delete.js.map +1 -1
  118. package/esm/cli/app/app-describe.js +9 -12
  119. package/esm/cli/app/app-describe.js.map +1 -1
  120. package/esm/cli/app/app-export.js +28 -34
  121. package/esm/cli/app/app-export.js.map +1 -1
  122. package/esm/cli/app/app-import.js +11 -14
  123. package/esm/cli/app/app-import.js.map +1 -1
  124. package/esm/cli/app/app-list.js +11 -14
  125. package/esm/cli/app/app-list.js.map +1 -1
  126. package/esm/cli/app/app.js +8 -10
  127. package/esm/cli/app/app.js.map +1 -1
  128. package/esm/cli/conn/conn-delete.js +5 -5
  129. package/esm/cli/conn/conn-delete.js.map +1 -1
  130. package/esm/cli/conn/conn-describe.js +6 -5
  131. package/esm/cli/conn/conn-describe.js.map +1 -1
  132. package/esm/cli/conn/conn-list.js +6 -8
  133. package/esm/cli/conn/conn-list.js.map +1 -1
  134. package/esm/cli/conn/conn-save.js +72 -0
  135. package/esm/cli/conn/conn-save.js.map +1 -0
  136. package/esm/cli/conn/conn.js +10 -8
  137. package/esm/cli/conn/conn.js.map +1 -1
  138. package/esm/cli/email/email-template-export.js +27 -33
  139. package/esm/cli/email/email-template-export.js.map +1 -1
  140. package/esm/cli/email/email-template-import.js +33 -39
  141. package/esm/cli/email/email-template-import.js.map +1 -1
  142. package/esm/cli/email/email-template-list.js +11 -14
  143. package/esm/cli/email/email-template-list.js.map +1 -1
  144. package/esm/cli/email/email-template.js +6 -6
  145. package/esm/cli/email/email-template.js.map +1 -1
  146. package/esm/cli/email/email.js +2 -2
  147. package/esm/cli/email/email.js.map +1 -1
  148. package/esm/cli/esv/esv-apply.js +9 -12
  149. package/esm/cli/esv/esv-apply.js.map +1 -1
  150. package/esm/cli/esv/esv-secret-create.js +11 -14
  151. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  152. package/esm/cli/esv/esv-secret-delete.js +23 -29
  153. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  154. package/esm/cli/esv/esv-secret-describe.js +11 -14
  155. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  156. package/esm/cli/esv/esv-secret-export.js +9 -12
  157. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  158. package/esm/cli/esv/esv-secret-import.js +9 -12
  159. package/esm/cli/esv/esv-secret-import.js.map +1 -1
  160. package/esm/cli/esv/esv-secret-list.js +11 -14
  161. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  162. package/esm/cli/esv/esv-secret-set.js +11 -14
  163. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  164. package/esm/cli/esv/esv-secret-version-activate.js +18 -24
  165. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  166. package/esm/cli/esv/esv-secret-version-create.js +11 -14
  167. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  168. package/esm/cli/esv/esv-secret-version-deactivate.js +18 -24
  169. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  170. package/esm/cli/esv/esv-secret-version-delete.js +23 -29
  171. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  172. package/esm/cli/esv/esv-secret-version-list.js +11 -14
  173. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  174. package/esm/cli/esv/esv-secret-version.js +8 -8
  175. package/esm/cli/esv/esv-secret-version.js.map +1 -1
  176. package/esm/cli/esv/esv-secret.js +11 -11
  177. package/esm/cli/esv/esv-secret.js.map +1 -1
  178. package/esm/cli/esv/esv-variable-create.js +10 -14
  179. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  180. package/esm/cli/esv/esv-variable-delete.js +23 -29
  181. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  182. package/esm/cli/esv/esv-variable-describe.js +11 -14
  183. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  184. package/esm/cli/esv/esv-variable-export.js +9 -12
  185. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  186. package/esm/cli/esv/esv-variable-import.js +9 -12
  187. package/esm/cli/esv/esv-variable-import.js.map +1 -1
  188. package/esm/cli/esv/esv-variable-list.js +11 -14
  189. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  190. package/esm/cli/esv/esv-variable-set.js +19 -26
  191. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  192. package/esm/cli/esv/esv-variable.js +10 -10
  193. package/esm/cli/esv/esv-variable.js.map +1 -1
  194. package/esm/cli/esv/esv.js +5 -6
  195. package/esm/cli/esv/esv.js.map +1 -1
  196. package/esm/cli/idm/idm-count.js +12 -17
  197. package/esm/cli/idm/idm-count.js.map +1 -1
  198. package/esm/cli/idm/idm-export.js +29 -39
  199. package/esm/cli/idm/idm-export.js.map +1 -1
  200. package/esm/cli/idm/idm-import.js +29 -39
  201. package/esm/cli/idm/idm-import.js.map +1 -1
  202. package/esm/cli/idm/idm-list.js +11 -17
  203. package/esm/cli/idm/idm-list.js.map +1 -1
  204. package/esm/cli/idm/idm.js +6 -9
  205. package/esm/cli/idm/idm.js.map +1 -1
  206. package/esm/cli/idp/idp-export.js +11 -15
  207. package/esm/cli/idp/idp-export.js.map +1 -1
  208. package/esm/cli/idp/idp-import.js +32 -38
  209. package/esm/cli/idp/idp-import.js.map +1 -1
  210. package/esm/cli/idp/idp-list.js +9 -13
  211. package/esm/cli/idp/idp-list.js.map +1 -1
  212. package/esm/cli/idp/idp.js +5 -6
  213. package/esm/cli/idp/idp.js.map +1 -1
  214. package/esm/cli/info/info.js +19 -20
  215. package/esm/cli/info/info.js.map +1 -1
  216. package/esm/cli/journey/journey-delete.js +22 -28
  217. package/esm/cli/journey/journey-delete.js.map +1 -1
  218. package/esm/cli/journey/journey-describe.js +12 -19
  219. package/esm/cli/journey/journey-describe.js.map +1 -1
  220. package/esm/cli/journey/journey-disable.js +20 -26
  221. package/esm/cli/journey/journey-disable.js.map +1 -1
  222. package/esm/cli/journey/journey-enable.js +20 -26
  223. package/esm/cli/journey/journey-enable.js.map +1 -1
  224. package/esm/cli/journey/journey-export.js +37 -45
  225. package/esm/cli/journey/journey-export.js.map +1 -1
  226. package/esm/cli/journey/journey-import.js +44 -52
  227. package/esm/cli/journey/journey-import.js.map +1 -1
  228. package/esm/cli/journey/journey-list.js +10 -13
  229. package/esm/cli/journey/journey-list.js.map +1 -1
  230. package/esm/cli/journey/journey-prune.js +9 -13
  231. package/esm/cli/journey/journey-prune.js.map +1 -1
  232. package/esm/cli/journey/journey.js +10 -11
  233. package/esm/cli/journey/journey.js.map +1 -1
  234. package/esm/cli/logging/logs-fetch.js +17 -19
  235. package/esm/cli/logging/logs-fetch.js.map +1 -1
  236. package/esm/cli/logging/logs-list.js +19 -25
  237. package/esm/cli/logging/logs-list.js.map +1 -1
  238. package/esm/cli/logging/logs-tail.js +17 -19
  239. package/esm/cli/logging/logs-tail.js.map +1 -1
  240. package/esm/cli/logging/logs.js +7 -6
  241. package/esm/cli/logging/logs.js.map +1 -1
  242. package/esm/cli/realm/realm-add-custom-domain.js +11 -14
  243. package/esm/cli/realm/realm-add-custom-domain.js.map +1 -1
  244. package/esm/cli/realm/realm-describe.js +10 -14
  245. package/esm/cli/realm/realm-describe.js.map +1 -1
  246. package/esm/cli/realm/realm-list.js +11 -14
  247. package/esm/cli/realm/realm-list.js.map +1 -1
  248. package/esm/cli/realm/realm-remove-custom-domain.js +11 -14
  249. package/esm/cli/realm/realm-remove-custom-domain.js.map +1 -1
  250. package/esm/cli/realm/realm.js +7 -8
  251. package/esm/cli/realm/realm.js.map +1 -1
  252. package/esm/cli/saml/saml-cot-export.js +27 -36
  253. package/esm/cli/saml/saml-cot-export.js.map +1 -1
  254. package/esm/cli/saml/saml-cot-import.js +32 -41
  255. package/esm/cli/saml/saml-cot-import.js.map +1 -1
  256. package/esm/cli/saml/saml-cot-list.js +10 -16
  257. package/esm/cli/saml/saml-cot-list.js.map +1 -1
  258. package/esm/cli/saml/saml-cot.js +6 -6
  259. package/esm/cli/saml/saml-cot.js.map +1 -1
  260. package/esm/cli/saml/saml-delete.js +8 -15
  261. package/esm/cli/saml/saml-delete.js.map +1 -1
  262. package/esm/cli/saml/saml-describe.js +10 -16
  263. package/esm/cli/saml/saml-describe.js.map +1 -1
  264. package/esm/cli/saml/saml-export.js +9 -16
  265. package/esm/cli/saml/saml-export.js.map +1 -1
  266. package/esm/cli/saml/saml-import.js +45 -54
  267. package/esm/cli/saml/saml-import.js.map +1 -1
  268. package/esm/cli/saml/saml-list.js +11 -17
  269. package/esm/cli/saml/saml-list.js.map +1 -1
  270. package/esm/cli/saml/saml-metadata-export.js +21 -30
  271. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  272. package/esm/cli/saml/saml-metadata.js +4 -4
  273. package/esm/cli/saml/saml-metadata.js.map +1 -1
  274. package/esm/cli/saml/saml.js +9 -10
  275. package/esm/cli/saml/saml.js.map +1 -1
  276. package/esm/cli/script/script-delete.js +9 -12
  277. package/esm/cli/script/script-delete.js.map +1 -1
  278. package/esm/cli/script/script-describe.js +9 -12
  279. package/esm/cli/script/script-describe.js.map +1 -1
  280. package/esm/cli/script/script-export.js +28 -34
  281. package/esm/cli/script/script-export.js.map +1 -1
  282. package/esm/cli/script/script-import.js +10 -13
  283. package/esm/cli/script/script-import.js.map +1 -1
  284. package/esm/cli/script/script-list.js +10 -13
  285. package/esm/cli/script/script-list.js.map +1 -1
  286. package/esm/cli/script/script.js +7 -8
  287. package/esm/cli/script/script.js.map +1 -1
  288. package/esm/cli/service/service-delete.js +10 -16
  289. package/esm/cli/service/service-delete.js.map +1 -1
  290. package/esm/cli/service/service-export.js +12 -17
  291. package/esm/cli/service/service-export.js.map +1 -1
  292. package/esm/cli/service/service-import.js +12 -18
  293. package/esm/cli/service/service-import.js.map +1 -1
  294. package/esm/cli/service/service-list.js +9 -15
  295. package/esm/cli/service/service-list.js.map +1 -1
  296. package/esm/cli/service/service.js +6 -7
  297. package/esm/cli/service/service.js.map +1 -1
  298. package/esm/cli/theme/theme-delete.js +12 -19
  299. package/esm/cli/theme/theme-delete.js.map +1 -1
  300. package/esm/cli/theme/theme-export.js +12 -19
  301. package/esm/cli/theme/theme-export.js.map +1 -1
  302. package/esm/cli/theme/theme-import.js +14 -21
  303. package/esm/cli/theme/theme-import.js.map +1 -1
  304. package/esm/cli/theme/theme-list.js +10 -16
  305. package/esm/cli/theme/theme-list.js.map +1 -1
  306. package/esm/cli/theme/theme.js +6 -7
  307. package/esm/cli/theme/theme.js.map +1 -1
  308. package/esm/ops/ConnectionProfileOps.js +30 -0
  309. package/esm/ops/ConnectionProfileOps.js.map +1 -0
  310. package/esm/ops/IdmOps.js +317 -0
  311. package/esm/ops/IdmOps.js.map +1 -0
  312. package/esm/ops/JourneyOps.js +2 -1
  313. package/esm/ops/JourneyOps.js.map +1 -1
  314. package/esm/ops/ServiceOps.js +20 -20
  315. package/esm/ops/ServiceOps.js.map +1 -1
  316. package/esm/utils/Console.js +15 -25
  317. package/esm/utils/Console.js.map +1 -1
  318. package/package.json +6 -6
  319. package/esm/cli/cmd_common.js +0 -79
  320. package/esm/cli/cmd_common.js.map +0 -1
  321. package/esm/cli/conn/conn-add.js +0 -37
  322. package/esm/cli/conn/conn-add.js.map +0 -1
  323. package/esm/cli/journey/journey-delete.e2e.test_.js.map +0 -1
  324. package/esm/cli/journey/journey-list.e2e.test_.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"JourneyOps.js","names":["fs","_","printMessage","createProgressBar","updateProgressBar","stopProgressBar","showSpinner","succeedSpinner","failSpinner","createTable","debugMessage","ExportImportUtils","Journey","Types","state","CirclesOfTrust","EmailTemplate","Idp","Node","Saml2","Script","Theme","wordwrap","getJourneys","importAllJourneys","importJourney","resolveDependencies","createMultiTreeExportTemplate","exportJourney","onlineTreeExportResolver","getTreeDescendents","getNodeRef","getTypedFilename","saveJsonToFile","getRealmString","listJourneys","long","analyze","journeys","journeyStub","table","push","_id","enabled","uiConfig","categories","JSON","parse","join","toString","exportPromises","useStringArrays","deps","journeyExports","Promise","all","journeyExport","tree","getJourneyClassification","error","response","data","exportJourneyToFile","journeyId","file","options","verbose","default","session","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","journey","importFirstJourneyFromFile","cloneDeep","treeId","hasOwnProperty","call","importJourneysFromFile","importJourneysFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","allJourneysData","readFileSync","it","JourneyClassification","STANDARD","CLOUD","CUSTOM","PREMIUM","getJourneyClassificationMd","getOneLineDescription","treeObj","description","getOneLineDescriptionMd","describeTreeDescendents","descendents","depth","values","indent","Array","fill","descendent","describeTreeDescendentsMd","markdown","describeJourney","resolveTreeExport","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","getNodeClassificationMd","getTableHeaderMd","getTableRowMd"],"sources":["ops/JourneyOps.ts"],"sourcesContent":["import fs from 'fs';\nimport _ from 'lodash';\nimport {\n NodeSkeleton,\n TreeSkeleton,\n} from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport {\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 {\n ExportImportUtils,\n Journey,\n Types,\n state,\n} from '@rockcarver/frodo-lib';\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';\n\nconst {\n getJourneys,\n importAllJourneys,\n importJourney,\n resolveDependencies,\n createMultiTreeExportTemplate,\n exportJourney,\n onlineTreeExportResolver,\n getTreeDescendents,\n getNodeRef,\n} = Journey;\nconst { getTypedFilename, saveJsonToFile, getRealmString } = ExportImportUtils;\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.default.session.getDebug();\n if (!file) {\n file = getTypedFilename(journeyId, 'journey');\n }\n if (state.default.session.getDirectory()) {\n const dir = state.default.session.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.default.session.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.default.session.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): string[] {\n return Journey.getJourneyClassification(journey).map((it) => {\n switch (it) {\n case Types.JourneyClassification.STANDARD:\n return it.toString()['brightGreen'];\n\n case Types.JourneyClassification.CLOUD:\n return it.toString()['brightMagenta'];\n\n case Types.JourneyClassification.CUSTOM:\n return it.toString()['brightRed'];\n\n case Types.JourneyClassification.PREMIUM:\n return it.toString()['brightYellow'];\n }\n });\n}\n\n/**\n * Get journey classification in markdown\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassificationMd(\n journey: SingleTreeExportInterface\n): string[] {\n return Journey.getJourneyClassification(journey).map((it) => {\n switch (it) {\n case Types.JourneyClassification.STANDARD:\n return `:green_circle: \\`${it.toString()}\\``;\n\n case Types.JourneyClassification.CLOUD:\n return `:purple_circle: \\`${it.toString()}\\``;\n\n case Types.JourneyClassification.CUSTOM:\n return `:red_circle: \\`${it.toString()}\\``;\n\n case Types.JourneyClassification.PREMIUM:\n return `:yellow_circle: \\`${it.toString()}\\``;\n }\n });\n}\n\n/**\n * Get a one-line description of the tree object\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(treeObj: TreeSkeleton): string {\n const description = `[${treeObj._id['brightCyan']}]`;\n return description;\n}\n\n/**\n * Get a one-line description of the tree object in markdown\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescriptionMd(treeObj: TreeSkeleton): string {\n const description = `${treeObj._id}`;\n return description;\n}\n\n/**\n * Helper function to render a nested list of dependent trees\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendents(\n descendents: TreeDependencyMapInterface,\n depth = 0\n) {\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n printMessage(\n `\\nInner Tree Dependencies (${Object.values(descendents)[0].length}):`,\n 'data'\n );\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n printMessage(`${indent}- ${tree['brightCyan']}`, 'data');\n for (const descendent of descendents[tree]) {\n describeTreeDescendents(descendent, depth + 1);\n }\n }\n}\n\n/**\n * Helper function to render a nested list of dependent trees in markdown\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendentsMd(\n descendents: TreeDependencyMapInterface,\n depth = 0\n): string {\n let markdown = '';\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n markdown += `## Inner Tree Dependencies (${\n Object.values(descendents)[0].length\n })\\n`;\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n markdown += `${indent}- ${tree}\\n`;\n for (const descendent of descendents[tree]) {\n markdown += describeTreeDescendentsMd(descendent, depth + 1);\n }\n return markdown;\n }\n return markdown;\n}\n\n/**\n * Describe a journey:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourney(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = 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 (\n !state.default.session.getAmVersion() &&\n journeyData.meta?.originAmVersion\n ) {\n state.default.session.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.default.session.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 (\n !state.default.session.getAmVersion() &&\n journeyData.meta?.originAmVersion\n ) {\n state.default.session.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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"}
1
+ {"version":3,"file":"JourneyOps.js","names":["fs","_","printMessage","createProgressBar","updateProgressBar","stopProgressBar","showSpinner","succeedSpinner","failSpinner","createTable","debugMessage","ExportImportUtils","Journey","Types","state","CirclesOfTrust","EmailTemplate","Idp","Node","Saml2","Script","Theme","wordwrap","getJourneys","importAllJourneys","importJourney","resolveDependencies","createMultiTreeExportTemplate","exportJourney","onlineTreeExportResolver","getTreeDescendents","getNodeRef","getTypedFilename","saveJsonToFile","getRealmString","listJourneys","long","analyze","journeys","journeyStub","table","push","_id","enabled","uiConfig","categories","JSON","parse","join","toString","exportPromises","useStringArrays","deps","journeyExports","Promise","all","journeyExport","tree","getJourneyClassification","error","response","data","exportJourneyToFile","journeyId","file","options","verbose","default","session","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","journey","importFirstJourneyFromFile","cloneDeep","treeId","hasOwnProperty","call","importJourneysFromFile","importJourneysFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","allJourneysData","readFileSync","it","JourneyClassification","STANDARD","CLOUD","CUSTOM","PREMIUM","getJourneyClassificationMd","getOneLineDescription","treeObj","description","getOneLineDescriptionMd","describeTreeDescendents","descendents","depth","values","indent","Array","fill","descendent","describeTreeDescendentsMd","markdown","describeJourney","resolveTreeExport","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","getNodeClassificationMd","getTableHeaderMd","getTableRowMd"],"sources":["ops/JourneyOps.ts"],"sourcesContent":["import fs from 'fs';\nimport _ from 'lodash';\nimport {\n NodeSkeleton,\n TreeSkeleton,\n} from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport {\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 {\n ExportImportUtils,\n Journey,\n Types,\n state,\n} from '@rockcarver/frodo-lib';\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';\n\nconst {\n getJourneys,\n importAllJourneys,\n importJourney,\n resolveDependencies,\n createMultiTreeExportTemplate,\n exportJourney,\n onlineTreeExportResolver,\n getTreeDescendents,\n getNodeRef,\n} = Journey;\nconst { getTypedFilename, saveJsonToFile, getRealmString } = ExportImportUtils;\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.default.session.getDebug();\n if (!file) {\n file = getTypedFilename(journeyId, 'journey');\n }\n if (state.default.session.getDirectory()) {\n const dir = state.default.session.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.default.session.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.default.session.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): string[] {\n return Journey.getJourneyClassification(journey).map((it) => {\n switch (it) {\n case Types.JourneyClassification.STANDARD:\n return it.toString()['brightGreen'];\n\n case Types.JourneyClassification.CLOUD:\n return it.toString()['brightMagenta'];\n\n case Types.JourneyClassification.CUSTOM:\n return it.toString()['brightRed'];\n\n case Types.JourneyClassification.PREMIUM:\n return it.toString()['brightYellow'];\n }\n });\n}\n\n/**\n * Get journey classification in markdown\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassificationMd(\n journey: SingleTreeExportInterface\n): string[] {\n return Journey.getJourneyClassification(journey).map((it) => {\n switch (it) {\n case Types.JourneyClassification.STANDARD:\n return `:green_circle: \\`${it.toString()}\\``;\n\n case Types.JourneyClassification.CLOUD:\n return `:purple_circle: \\`${it.toString()}\\``;\n\n case Types.JourneyClassification.CUSTOM:\n return `:red_circle: \\`${it.toString()}\\``;\n\n case Types.JourneyClassification.PREMIUM:\n return `:yellow_circle: \\`${it.toString()}\\``;\n }\n });\n}\n\n/**\n * Get a one-line description of the tree object\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(treeObj: TreeSkeleton): string {\n const description = `[${treeObj._id['brightCyan']}]`;\n return description;\n}\n\n/**\n * Get a one-line description of the tree object in markdown\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescriptionMd(treeObj: TreeSkeleton): string {\n const description = `${treeObj._id}`;\n return description;\n}\n\n/**\n * Helper function to render a nested list of dependent trees\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendents(\n descendents: TreeDependencyMapInterface,\n depth = 0\n) {\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n printMessage(\n `\\nInner Tree Dependencies (${Object.values(descendents)[0].length}):`,\n 'data'\n );\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n printMessage(`${indent}- ${tree['brightCyan']}`, 'data');\n for (const descendent of descendents[tree]) {\n describeTreeDescendents(descendent, depth + 1);\n }\n }\n}\n\n/**\n * Helper function to render a nested list of dependent trees in markdown\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendentsMd(\n descendents: TreeDependencyMapInterface,\n depth = 0\n): string {\n let markdown = '';\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n markdown += `## Inner Tree Dependencies (${\n Object.values(descendents)[0].length\n })\\n`;\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n markdown += `${indent}- ${tree}\\n`;\n for (const descendent of descendents[tree]) {\n markdown += describeTreeDescendentsMd(descendent, depth + 1);\n }\n return markdown;\n }\n return markdown;\n}\n\n/**\n * Describe a journey:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourney(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = 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 (\n !state.default.session.getAmVersion() &&\n journeyData.meta?.originAmVersion\n ) {\n state.default.session.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.default.session.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 (\n !state.default.session.getAmVersion() &&\n journeyData.meta?.originAmVersion\n ) {\n state.default.session.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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"}
@@ -25,9 +25,9 @@ const {
25
25
  /**
26
26
  * List services
27
27
  */
28
- export async function listServices(long = false) {
28
+ export async function listServices(long = false, globalConfig = false) {
29
29
  try {
30
- const services = await getListOfServices();
30
+ const services = await getListOfServices(globalConfig);
31
31
  services.sort((a, b) => a._id.localeCompare(b._id));
32
32
  if (long) {
33
33
  const table = createTable(['Service Id', 'Service Name']);
@@ -50,8 +50,8 @@ export async function listServices(long = false) {
50
50
  * Export all services to file
51
51
  * @param {string} file file name
52
52
  */
53
- export async function exportServicesToFile(file) {
54
- const exportData = await exportServices();
53
+ export async function exportServicesToFile(file, globalConfig = false) {
54
+ const exportData = await exportServices(globalConfig);
55
55
  let fileName = getTypedFilename(`all${titleCase(getRealmName(state.default.session.getRealm()))}Services`, `service`);
56
56
  if (file) {
57
57
  fileName = file;
@@ -64,8 +64,8 @@ export async function exportServicesToFile(file) {
64
64
  * @param {string} serviceId service id
65
65
  * @param {string} file file name
66
66
  */
67
- export async function exportServiceToFile(serviceId, file) {
68
- const exportData = await exportService(serviceId);
67
+ export async function exportServiceToFile(serviceId, file, globalConfig = false) {
68
+ const exportData = await exportService(serviceId, globalConfig);
69
69
  let fileName = getTypedFilename(serviceId, `service`);
70
70
  if (file) {
71
71
  fileName = file;
@@ -76,9 +76,9 @@ export async function exportServiceToFile(serviceId, file) {
76
76
  /**
77
77
  * Export all services to separate files
78
78
  */
79
- export async function exportServicesToFiles() {
79
+ export async function exportServicesToFiles(globalConfig = false) {
80
80
  debugMessage(`cli.ServiceOps.exportServicesToFiles: start`);
81
- const services = await getFullServices();
81
+ const services = await getFullServices(globalConfig);
82
82
  for (const service of services) {
83
83
  const fileName = getTypedFilename(service._type._id, `service`);
84
84
  const exportData = createServiceExportTemplate();
@@ -95,7 +95,7 @@ export async function exportServicesToFiles() {
95
95
  * @param {string} file import file name
96
96
  * @param {boolean} clean remove existing service
97
97
  */
98
- export async function importServiceFromFile(serviceId, file, clean) {
98
+ export async function importServiceFromFile(serviceId, file, clean, globalConfig = false) {
99
99
  debugMessage(`cli.ServiceOps.importServiceFromFile: start [serviceId=${serviceId}, file=${file}]`);
100
100
  const verbose = state.default.session.getVerbose();
101
101
  fs.readFile(file, 'utf8', async (err, data) => {
@@ -105,7 +105,7 @@ export async function importServiceFromFile(serviceId, file, clean) {
105
105
  if (!verbose) showSpinner(`Importing ${serviceId}...`);
106
106
  try {
107
107
  if (verbose) showSpinner(`Importing ${serviceId}...`);
108
- await importService(serviceId, importData, clean);
108
+ await importService(serviceId, importData, clean, globalConfig);
109
109
  succeedSpinner(`Imported ${serviceId}.`);
110
110
  } catch (importError) {
111
111
  var _importError$response, _importError$response2, _importError$response3, _importError$response4;
@@ -127,7 +127,7 @@ export async function importServiceFromFile(serviceId, file, clean) {
127
127
  * @param {string} file import file name
128
128
  * @param {boolean} clean remove existing service
129
129
  */
130
- export async function importFirstServiceFromFile(file, clean) {
130
+ export async function importFirstServiceFromFile(file, clean, globalConfig = false) {
131
131
  debugMessage(`cli.ServiceOps.importFirstServiceFromFile: start [file=${file}]`);
132
132
  const verbose = state.default.session.getVerbose();
133
133
  fs.readFile(file, 'utf8', async (err, data) => {
@@ -138,7 +138,7 @@ export async function importFirstServiceFromFile(file, clean) {
138
138
  if (!verbose) showSpinner(`Importing ${serviceId}...`);
139
139
  try {
140
140
  if (verbose) showSpinner(`Importing ${serviceId}...`);
141
- await importService(serviceId, importData, clean);
141
+ await importService(serviceId, importData, clean, globalConfig);
142
142
  succeedSpinner(`Imported ${serviceId}.`);
143
143
  } catch (importError) {
144
144
  var _importError$response5, _importError$response6, _importError$response7, _importError$response8;
@@ -160,14 +160,14 @@ export async function importFirstServiceFromFile(file, clean) {
160
160
  * @param {String} file file name
161
161
  * @param {boolean} clean remove existing service
162
162
  */
163
- export async function importServicesFromFile(file, clean) {
163
+ export async function importServicesFromFile(file, clean, globalConfig = false) {
164
164
  debugMessage(`cli.ServiceOps.importServiceFromFile: start [file=${file}]`);
165
165
  fs.readFile(file, 'utf8', async (err, data) => {
166
166
  if (err) throw err;
167
167
  debugMessage(`cli.ServiceOps.importServiceFromFile: importing ${file}`);
168
168
  const importData = JSON.parse(data);
169
169
  try {
170
- await importServices(importData, clean);
170
+ await importServices(importData, clean, globalConfig);
171
171
  } catch (error) {
172
172
  printMessage(`${error.message}`, 'error');
173
173
  printMessage(error.response.status, 'error');
@@ -180,12 +180,12 @@ export async function importServicesFromFile(file, clean) {
180
180
  * Import all services from separate files
181
181
  * @param {boolean} clean remove existing service
182
182
  */
183
- export async function importServicesFromFiles(clean) {
183
+ export async function importServicesFromFiles(clean, globalConfig = false) {
184
184
  debugMessage(`cli.ServiceOps.importServicesFromFiles: start`);
185
185
  const names = fs.readdirSync(getWorkingDirectory());
186
186
  const agentFiles = names.filter(name => name.toLowerCase().endsWith('.service.json'));
187
187
  for (const file of agentFiles) {
188
- await importServicesFromFile(file, clean);
188
+ await importServicesFromFile(file, clean, globalConfig);
189
189
  }
190
190
  debugMessage(`cli.ServiceOps.importServicesFromFiles: end`);
191
191
  }
@@ -194,9 +194,9 @@ export async function importServicesFromFiles(clean) {
194
194
  * Delete a service by id/name
195
195
  * @param {string} serviceId Reference to the service to delete
196
196
  */
197
- export async function deleteService(serviceId) {
197
+ export async function deleteService(serviceId, globalConfig = false) {
198
198
  try {
199
- await deleteFullService(serviceId);
199
+ await deleteFullService(serviceId, globalConfig);
200
200
  } catch (error) {
201
201
  var _error$response, _error$response$data;
202
202
  const message = (_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.message;
@@ -207,7 +207,7 @@ export async function deleteService(serviceId) {
207
207
  /**
208
208
  * Delete all services
209
209
  */
210
- export async function deleteServices() {
211
- await deleteFullServices();
210
+ export async function deleteServices(globalConfig = false) {
211
+ await deleteFullServices(globalConfig);
212
212
  }
213
213
  //# sourceMappingURL=ServiceOps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceOps.js","names":["fs","printMessage","createTable","debugMessage","showSpinner","succeedSpinner","failSpinner","ExportImportUtils","Service","Utils","state","createServiceExportTemplate","deleteFullServices","deleteFullService","getListOfServices","getFullServices","exportServices","exportService","importServices","importService","getTypedFilename","getWorkingDirectory","saveJsonToFile","titleCase","getRealmName","listServices","long","services","sort","a","b","_id","localeCompare","table","service","push","name","toString","error","stack","exportServicesToFile","file","exportData","fileName","default","session","getRealm","exportServiceToFile","serviceId","exportServicesToFiles","_type","importServiceFromFile","clean","verbose","getVerbose","readFile","err","data","importData","JSON","parse","importError","message","response","detail","importFirstServiceFromFile","Object","keys","length","importServicesFromFile","status","importServicesFromFiles","names","readdirSync","agentFiles","filter","toLowerCase","endsWith","deleteService","deleteServices"],"sources":["ops/ServiceOps.ts"],"sourcesContent":["import fs from 'fs';\nimport {\n printMessage,\n createTable,\n debugMessage,\n showSpinner,\n succeedSpinner,\n failSpinner,\n} from '../utils/Console';\nimport {\n ExportImportUtils,\n Service,\n Utils,\n state,\n} from '@rockcarver/frodo-lib';\nimport { ServiceExportInterface } from '@rockcarver/frodo-lib/types/ops/OpsTypes';\n\nconst {\n createServiceExportTemplate,\n deleteFullServices,\n deleteFullService,\n getListOfServices,\n getFullServices,\n exportServices,\n exportService,\n importServices,\n importService,\n} = Service;\nconst { getTypedFilename, getWorkingDirectory, saveJsonToFile, titleCase } =\n ExportImportUtils;\nconst { getRealmName } = Utils;\n\n/**\n * List services\n */\nexport async function listServices(long = false) {\n try {\n const services = await getListOfServices();\n services.sort((a, b) => a._id.localeCompare(b._id));\n if (long) {\n const table = createTable(['Service Id', 'Service Name']);\n for (const service of services) {\n table.push([service._id, service.name]);\n }\n printMessage(table.toString(), 'data');\n } else {\n for (const service of services) {\n printMessage(`${service._id}`, 'data');\n }\n }\n } catch (error) {\n printMessage(`Error listing agents - ${error}`, 'error');\n printMessage(error.stack, 'error');\n }\n}\n\n/**\n * Export all services to file\n * @param {string} file file name\n */\nexport async function exportServicesToFile(file) {\n const exportData = await exportServices();\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.default.session.getRealm()))}Services`,\n `service`\n );\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, fileName);\n}\n\n/**\n * Export service to file\n * @param {string} serviceId service id\n * @param {string} file file name\n */\nexport async function exportServiceToFile(serviceId: string, file: string) {\n const exportData = await exportService(serviceId);\n let fileName = getTypedFilename(serviceId, `service`);\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, fileName);\n}\n\n/**\n * Export all services to separate files\n */\nexport async function exportServicesToFiles() {\n debugMessage(`cli.ServiceOps.exportServicesToFiles: start`);\n const services = await getFullServices();\n for (const service of services) {\n const fileName = getTypedFilename(service._type._id, `service`);\n const exportData = createServiceExportTemplate();\n exportData.service[service._type._id] = service;\n debugMessage(\n `cli.ServiceOps.exportServicesToFiles: exporting ${service._type._id} to ${fileName}`\n );\n saveJsonToFile(exportData, fileName);\n }\n debugMessage(`cli.ServiceOps.exportServicesToFiles: end.`);\n}\n\n/**\n * Import a service from file\n * @param {string} serviceId service id/name\n * @param {string} file import file name\n * @param {boolean} clean remove existing service\n */\nexport async function importServiceFromFile(\n serviceId: string,\n file: string,\n clean: boolean\n) {\n debugMessage(\n `cli.ServiceOps.importServiceFromFile: start [serviceId=${serviceId}, file=${file}]`\n );\n const verbose = state.default.session.getVerbose();\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const importData = JSON.parse(data);\n if (importData && importData.service[serviceId]) {\n if (!verbose) showSpinner(`Importing ${serviceId}...`);\n try {\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n await importService(serviceId, importData, clean);\n succeedSpinner(`Imported ${serviceId}.`);\n } catch (importError) {\n const message = importError.response?.data?.message;\n const detail = importError.response?.data?.detail;\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n failSpinner(`${detail ? message + ' - ' + detail : message}`);\n }\n } else {\n showSpinner(`Importing ${serviceId}...`);\n failSpinner(`${serviceId} not found!`);\n }\n });\n debugMessage(\n `cli.ServiceOps.importServiceFromFile: end [serviceId=${serviceId}, file=${file}]`\n );\n}\n\n/**\n * Import first service from file\n * @param {string} file import file name\n * @param {boolean} clean remove existing service\n */\nexport async function importFirstServiceFromFile(file: string, clean: boolean) {\n debugMessage(\n `cli.ServiceOps.importFirstServiceFromFile: start [file=${file}]`\n );\n const verbose = state.default.session.getVerbose();\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const importData = JSON.parse(data);\n if (importData && Object.keys(importData.service).length) {\n const serviceId = Object.keys(importData.service)[0];\n if (!verbose) showSpinner(`Importing ${serviceId}...`);\n try {\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n await importService(serviceId, importData, clean);\n succeedSpinner(`Imported ${serviceId}.`);\n } catch (importError) {\n const message = importError.response?.data?.message;\n const detail = importError.response?.data?.detail;\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n failSpinner(`${detail ? message + ' - ' + detail : message}`);\n }\n } else {\n showSpinner(`Importing service...`);\n failSpinner(`No service found in ${file}!`);\n }\n debugMessage(\n `cli.ServiceOps.importFirstServiceFromFile: end [file=${file}]`\n );\n });\n}\n\n/**\n * Import services from file\n * @param {String} file file name\n * @param {boolean} clean remove existing service\n */\nexport async function importServicesFromFile(file: string, clean: boolean) {\n debugMessage(`cli.ServiceOps.importServiceFromFile: start [file=${file}]`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n debugMessage(`cli.ServiceOps.importServiceFromFile: importing ${file}`);\n const importData = JSON.parse(data) as ServiceExportInterface;\n try {\n await importServices(importData, clean);\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n printMessage(error.response.status, 'error');\n }\n debugMessage(`cli.ServiceOps.importServiceFromFile: end [file=${file}]`);\n });\n}\n\n/**\n * Import all services from separate files\n * @param {boolean} clean remove existing service\n */\nexport async function importServicesFromFiles(clean: boolean) {\n debugMessage(`cli.ServiceOps.importServicesFromFiles: start`);\n const names = fs.readdirSync(getWorkingDirectory());\n const agentFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.service.json')\n );\n for (const file of agentFiles) {\n await importServicesFromFile(file, clean);\n }\n debugMessage(`cli.ServiceOps.importServicesFromFiles: end`);\n}\n\n/**\n * Delete a service by id/name\n * @param {string} serviceId Reference to the service to delete\n */\nexport async function deleteService(serviceId: string) {\n try {\n await deleteFullService(serviceId);\n } catch (error) {\n const message = error.response?.data?.message;\n printMessage(`Delete service '${serviceId}': ${message}`, 'error');\n }\n}\n\n/**\n * Delete all services\n */\nexport async function deleteServices() {\n await deleteFullServices();\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ServiceOps.js","names":["fs","printMessage","createTable","debugMessage","showSpinner","succeedSpinner","failSpinner","ExportImportUtils","Service","Utils","state","createServiceExportTemplate","deleteFullServices","deleteFullService","getListOfServices","getFullServices","exportServices","exportService","importServices","importService","getTypedFilename","getWorkingDirectory","saveJsonToFile","titleCase","getRealmName","listServices","long","globalConfig","services","sort","a","b","_id","localeCompare","table","service","push","name","toString","error","stack","exportServicesToFile","file","exportData","fileName","default","session","getRealm","exportServiceToFile","serviceId","exportServicesToFiles","_type","importServiceFromFile","clean","verbose","getVerbose","readFile","err","data","importData","JSON","parse","importError","message","response","detail","importFirstServiceFromFile","Object","keys","length","importServicesFromFile","status","importServicesFromFiles","names","readdirSync","agentFiles","filter","toLowerCase","endsWith","deleteService","deleteServices"],"sources":["ops/ServiceOps.ts"],"sourcesContent":["import fs from 'fs';\nimport {\n printMessage,\n createTable,\n debugMessage,\n showSpinner,\n succeedSpinner,\n failSpinner,\n} from '../utils/Console';\nimport {\n ExportImportUtils,\n Service,\n Utils,\n state,\n} from '@rockcarver/frodo-lib';\nimport { ServiceExportInterface } from '@rockcarver/frodo-lib/types/ops/OpsTypes';\n\nconst {\n createServiceExportTemplate,\n deleteFullServices,\n deleteFullService,\n getListOfServices,\n getFullServices,\n exportServices,\n exportService,\n importServices,\n importService,\n} = Service;\nconst { getTypedFilename, getWorkingDirectory, saveJsonToFile, titleCase } =\n ExportImportUtils;\nconst { getRealmName } = Utils;\n\n/**\n * List services\n */\nexport async function listServices(long = false, globalConfig = false) {\n try {\n const services = await getListOfServices(globalConfig);\n services.sort((a, b) => a._id.localeCompare(b._id));\n if (long) {\n const table = createTable(['Service Id', 'Service Name']);\n for (const service of services) {\n table.push([service._id, service.name]);\n }\n printMessage(table.toString(), 'data');\n } else {\n for (const service of services) {\n printMessage(`${service._id}`, 'data');\n }\n }\n } catch (error) {\n printMessage(`Error listing agents - ${error}`, 'error');\n printMessage(error.stack, 'error');\n }\n}\n\n/**\n * Export all services to file\n * @param {string} file file name\n */\nexport async function exportServicesToFile(file, globalConfig = false) {\n const exportData = await exportServices(globalConfig);\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.default.session.getRealm()))}Services`,\n `service`\n );\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, fileName);\n}\n\n/**\n * Export service to file\n * @param {string} serviceId service id\n * @param {string} file file name\n */\nexport async function exportServiceToFile(\n serviceId: string,\n file: string,\n globalConfig = false\n) {\n const exportData = await exportService(serviceId, globalConfig);\n let fileName = getTypedFilename(serviceId, `service`);\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, fileName);\n}\n\n/**\n * Export all services to separate files\n */\nexport async function exportServicesToFiles(globalConfig = false) {\n debugMessage(`cli.ServiceOps.exportServicesToFiles: start`);\n const services = await getFullServices(globalConfig);\n for (const service of services) {\n const fileName = getTypedFilename(service._type._id, `service`);\n const exportData = createServiceExportTemplate();\n exportData.service[service._type._id] = service;\n debugMessage(\n `cli.ServiceOps.exportServicesToFiles: exporting ${service._type._id} to ${fileName}`\n );\n saveJsonToFile(exportData, fileName);\n }\n debugMessage(`cli.ServiceOps.exportServicesToFiles: end.`);\n}\n\n/**\n * Import a service from file\n * @param {string} serviceId service id/name\n * @param {string} file import file name\n * @param {boolean} clean remove existing service\n */\nexport async function importServiceFromFile(\n serviceId: string,\n file: string,\n clean: boolean,\n globalConfig = false\n) {\n debugMessage(\n `cli.ServiceOps.importServiceFromFile: start [serviceId=${serviceId}, file=${file}]`\n );\n const verbose = state.default.session.getVerbose();\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const importData = JSON.parse(data);\n if (importData && importData.service[serviceId]) {\n if (!verbose) showSpinner(`Importing ${serviceId}...`);\n try {\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n await importService(serviceId, importData, clean, globalConfig);\n succeedSpinner(`Imported ${serviceId}.`);\n } catch (importError) {\n const message = importError.response?.data?.message;\n const detail = importError.response?.data?.detail;\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n failSpinner(`${detail ? message + ' - ' + detail : message}`);\n }\n } else {\n showSpinner(`Importing ${serviceId}...`);\n failSpinner(`${serviceId} not found!`);\n }\n });\n debugMessage(\n `cli.ServiceOps.importServiceFromFile: end [serviceId=${serviceId}, file=${file}]`\n );\n}\n\n/**\n * Import first service from file\n * @param {string} file import file name\n * @param {boolean} clean remove existing service\n */\nexport async function importFirstServiceFromFile(\n file: string,\n clean: boolean,\n globalConfig = false\n) {\n debugMessage(\n `cli.ServiceOps.importFirstServiceFromFile: start [file=${file}]`\n );\n const verbose = state.default.session.getVerbose();\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const importData = JSON.parse(data);\n if (importData && Object.keys(importData.service).length) {\n const serviceId = Object.keys(importData.service)[0];\n if (!verbose) showSpinner(`Importing ${serviceId}...`);\n try {\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n await importService(serviceId, importData, clean, globalConfig);\n succeedSpinner(`Imported ${serviceId}.`);\n } catch (importError) {\n const message = importError.response?.data?.message;\n const detail = importError.response?.data?.detail;\n if (verbose) showSpinner(`Importing ${serviceId}...`);\n failSpinner(`${detail ? message + ' - ' + detail : message}`);\n }\n } else {\n showSpinner(`Importing service...`);\n failSpinner(`No service found in ${file}!`);\n }\n debugMessage(\n `cli.ServiceOps.importFirstServiceFromFile: end [file=${file}]`\n );\n });\n}\n\n/**\n * Import services from file\n * @param {String} file file name\n * @param {boolean} clean remove existing service\n */\nexport async function importServicesFromFile(\n file: string,\n clean: boolean,\n globalConfig = false\n) {\n debugMessage(`cli.ServiceOps.importServiceFromFile: start [file=${file}]`);\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n debugMessage(`cli.ServiceOps.importServiceFromFile: importing ${file}`);\n const importData = JSON.parse(data) as ServiceExportInterface;\n try {\n await importServices(importData, clean, globalConfig);\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n printMessage(error.response.status, 'error');\n }\n debugMessage(`cli.ServiceOps.importServiceFromFile: end [file=${file}]`);\n });\n}\n\n/**\n * Import all services from separate files\n * @param {boolean} clean remove existing service\n */\nexport async function importServicesFromFiles(\n clean: boolean,\n globalConfig = false\n) {\n debugMessage(`cli.ServiceOps.importServicesFromFiles: start`);\n const names = fs.readdirSync(getWorkingDirectory());\n const agentFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.service.json')\n );\n for (const file of agentFiles) {\n await importServicesFromFile(file, clean, globalConfig);\n }\n debugMessage(`cli.ServiceOps.importServicesFromFiles: end`);\n}\n\n/**\n * Delete a service by id/name\n * @param {string} serviceId Reference to the service to delete\n */\nexport async function deleteService(serviceId: string, globalConfig = false) {\n try {\n await deleteFullService(serviceId, globalConfig);\n } catch (error) {\n const message = error.response?.data?.message;\n printMessage(`Delete service '${serviceId}': ${message}`, 'error');\n }\n}\n\n/**\n * Delete all services\n */\nexport async function deleteServices(globalConfig = false) {\n await deleteFullServices(globalConfig);\n}\n"],"mappings":"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"}
@@ -8,21 +8,23 @@ Color.enable();
8
8
  const {
9
9
  appendTextToFile
10
10
  } = ExportImportUtils;
11
+ let progressBar = null;
12
+ let spinner = null;
11
13
 
12
14
  /**
13
- * Output a message in default color to stdout or append to `state.default.session.getOutputFile()`
15
+ * Output a message in default color to stdout or append to `state.getOutputFile()`
14
16
  * @param {string | object} message the message
15
17
  */
16
18
  function data(message, newline = true) {
17
19
  if (!message) return;
18
- if (state.default.session.getOutputFile()) {
20
+ if (state.getOutputFile()) {
19
21
  if (typeof message === 'object') {
20
22
  message = JSON.stringify(message, null, 2);
21
23
  }
22
24
  if (newline) {
23
25
  message += '\n';
24
26
  }
25
- appendTextToFile(message, state.default.session.getOutputFile());
27
+ appendTextToFile(message, state.getOutputFile());
26
28
  } else if (typeof message === 'object') {
27
29
  console.dir(message, {
28
30
  depth: 3
@@ -134,7 +136,7 @@ function curlirize(message) {
134
136
  */
135
137
  export function verboseMessage(message) {
136
138
  if (!message) return;
137
- if (state.default.session.getVerbose()) {
139
+ if (state.getVerbose()) {
138
140
  text(message);
139
141
  }
140
142
  }
@@ -145,7 +147,7 @@ export function verboseMessage(message) {
145
147
  */
146
148
  export function debugMessage(message) {
147
149
  if (!message) return;
148
- if (state.default.session.getDebug()) {
150
+ if (state.getDebug()) {
149
151
  debug(message);
150
152
  }
151
153
  }
@@ -156,7 +158,7 @@ export function debugMessage(message) {
156
158
  */
157
159
  export function curlirizeMessage(message) {
158
160
  if (!message) return;
159
- if (state.default.session.getCurlirize()) {
161
+ if (state.getCurlirize()) {
160
162
  curlirize(message);
161
163
  }
162
164
  }
@@ -214,12 +216,10 @@ export function createProgressBar(total, message = null, options = {
214
216
  noTTYOutput: true
215
217
  };
216
218
  }
217
- let pBar = state.default.session.getItem('progressBar');
218
- if (!pBar) pBar = new SingleBar(opt, Presets.legacy); // create only when needed
219
- pBar.start(total, 0, {
219
+ progressBar = new SingleBar(opt, Presets.legacy); // create only when needed
220
+ progressBar.start(total, 0, {
220
221
  data: message
221
222
  });
222
- state.default.session.setItem('progressBar', pBar);
223
223
  }
224
224
 
225
225
  /**
@@ -228,10 +228,9 @@ export function createProgressBar(total, message = null, options = {
228
228
  *
229
229
  */
230
230
  export function updateProgressBar(message = null) {
231
- const pBar = state.default.session.getItem('progressBar');
232
- if (message) pBar.increment({
231
+ if (message) progressBar.increment({
233
232
  data: message
234
- });else pBar.increment();
233
+ });else progressBar.increment();
235
234
  }
236
235
 
237
236
  /**
@@ -239,11 +238,10 @@ export function updateProgressBar(message = null) {
239
238
  * @param {*} message optional message to update the progress bar
240
239
  */
241
240
  export function stopProgressBar(message = null) {
242
- const pBar = state.default.session.getItem('progressBar');
243
- if (message) pBar.update({
241
+ if (message) progressBar.update({
244
242
  data: message
245
243
  });
246
- pBar.stop();
244
+ progressBar.stop();
247
245
  }
248
246
 
249
247
  /**
@@ -251,8 +249,7 @@ export function stopProgressBar(message = null) {
251
249
  * @param {String} message optional spinner message
252
250
  */
253
251
  export function showSpinner(message) {
254
- const spinner = createSpinner(message).start();
255
- state.default.session.setItem('Spinner', spinner);
252
+ spinner = createSpinner(message).start();
256
253
  }
257
254
 
258
255
  /**
@@ -260,7 +257,6 @@ export function showSpinner(message) {
260
257
  * @param {String} message optional message to update the spinner
261
258
  */
262
259
  export function stopSpinner(message = null) {
263
- const spinner = state.default.session.getItem('Spinner');
264
260
  if (spinner) {
265
261
  let options = {};
266
262
  if (message) options = {
@@ -275,7 +271,6 @@ export function stopSpinner(message = null) {
275
271
  * @param {String} message optional message to update the spinner
276
272
  */
277
273
  export function succeedSpinner(message = null) {
278
- const spinner = state.default.session.getItem('Spinner');
279
274
  if (spinner) {
280
275
  let options = {};
281
276
  if (message) options = {
@@ -290,7 +285,6 @@ export function succeedSpinner(message = null) {
290
285
  * @param {String} message optional message to update the spinner
291
286
  */
292
287
  export function warnSpinner(message = null) {
293
- const spinner = state.default.session.getItem('Spinner');
294
288
  if (spinner) {
295
289
  let options = {};
296
290
  if (message) options = {
@@ -305,7 +299,6 @@ export function warnSpinner(message = null) {
305
299
  * @param {String} message optional message to update the spinner
306
300
  */
307
301
  export function failSpinner(message = null) {
308
- const spinner = state.default.session.getItem('Spinner');
309
302
  if (spinner) {
310
303
  let options = {};
311
304
  if (message) options = {
@@ -320,7 +313,6 @@ export function failSpinner(message = null) {
320
313
  * @param {String} message optional message to update the spinner
321
314
  */
322
315
  export function spinSpinner(message = null) {
323
- const spinner = state.default.session.getItem('Spinner');
324
316
  if (spinner) {
325
317
  let options = {};
326
318
  if (message) options = {
@@ -338,7 +330,6 @@ export function createProgressIndicator(type = 'determinate', total = 0, message
338
330
  }
339
331
  }
340
332
  export function updateProgressIndicator(message) {
341
- const progressBar = state.default.session.getItem('progressBar');
342
333
  if (!progressBar) {
343
334
  spinSpinner(message);
344
335
  } else {
@@ -346,7 +337,6 @@ export function updateProgressIndicator(message) {
346
337
  }
347
338
  }
348
339
  export function stopProgressIndicator(message, status = 'none') {
349
- const progressBar = state.default.session.getItem('progressBar');
350
340
  if (!progressBar) {
351
341
  switch (status) {
352
342
  case 'none':