@rockcarver/frodo-cli 2.0.0-51 → 2.0.0-52

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 (250) hide show
  1. package/CHANGELOG.md +10 -1
  2. package/esm/app.js +7 -2
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +3 -6
  5. package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
  6. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +46 -51
  7. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  8. package/esm/cli/admin/admin-federation-export.js +1 -1
  9. package/esm/cli/admin/admin-federation-export.js.map +1 -1
  10. package/esm/cli/admin/admin-federation-import.js +1 -1
  11. package/esm/cli/admin/admin-federation-import.js.map +1 -1
  12. package/esm/cli/admin/admin-federation-list.js +1 -1
  13. package/esm/cli/admin/admin-federation-list.js.map +1 -1
  14. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +4 -6
  15. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  16. package/esm/cli/admin/admin-hide-generic-extension-attributes.js +4 -6
  17. package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
  18. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +4 -9
  19. package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
  20. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +4 -9
  21. package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
  22. package/esm/cli/admin/admin-list-static-user-mappings.js +3 -9
  23. package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
  24. package/esm/cli/admin/admin-remove-static-user-mapping.js +3 -6
  25. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  26. package/esm/cli/admin/admin-repair-org-model.js +4 -6
  27. package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
  28. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +4 -6
  29. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  30. package/esm/cli/admin/admin-show-generic-extension-attributes.js +4 -6
  31. package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
  32. package/esm/cli/agent/agent-delete.js +8 -21
  33. package/esm/cli/agent/agent-delete.js.map +1 -1
  34. package/esm/cli/agent/agent-export.js +6 -3
  35. package/esm/cli/agent/agent-export.js.map +1 -1
  36. package/esm/cli/agent/agent-gateway-delete.js +7 -20
  37. package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
  38. package/esm/cli/agent/agent-gateway-export.js +6 -3
  39. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  40. package/esm/cli/agent/agent-gateway-import.js +8 -4
  41. package/esm/cli/agent/agent-gateway-import.js.map +1 -1
  42. package/esm/cli/agent/agent-gateway-list.js +2 -1
  43. package/esm/cli/agent/agent-gateway-list.js.map +1 -1
  44. package/esm/cli/agent/agent-import.js +8 -4
  45. package/esm/cli/agent/agent-import.js.map +1 -1
  46. package/esm/cli/agent/agent-java-delete.js +7 -20
  47. package/esm/cli/agent/agent-java-delete.js.map +1 -1
  48. package/esm/cli/agent/agent-java-export.js +6 -3
  49. package/esm/cli/agent/agent-java-export.js.map +1 -1
  50. package/esm/cli/agent/agent-java-import.js +8 -4
  51. package/esm/cli/agent/agent-java-import.js.map +1 -1
  52. package/esm/cli/agent/agent-java-list.js +2 -1
  53. package/esm/cli/agent/agent-java-list.js.map +1 -1
  54. package/esm/cli/agent/agent-list.js +2 -1
  55. package/esm/cli/agent/agent-list.js.map +1 -1
  56. package/esm/cli/agent/agent-web-delete.js +7 -20
  57. package/esm/cli/agent/agent-web-delete.js.map +1 -1
  58. package/esm/cli/agent/agent-web-export.js +6 -3
  59. package/esm/cli/agent/agent-web-export.js.map +1 -1
  60. package/esm/cli/agent/agent-web-import.js +8 -4
  61. package/esm/cli/agent/agent-web-import.js.map +1 -1
  62. package/esm/cli/agent/agent-web-list.js +2 -1
  63. package/esm/cli/agent/agent-web-list.js.map +1 -1
  64. package/esm/cli/app/app-delete.js +4 -4
  65. package/esm/cli/app/app-delete.js.map +1 -1
  66. package/esm/cli/app/app-export.js +6 -6
  67. package/esm/cli/app/app-export.js.map +1 -1
  68. package/esm/cli/app/app-import.js +8 -8
  69. package/esm/cli/app/app-import.js.map +1 -1
  70. package/esm/cli/app/app-list.js +2 -1
  71. package/esm/cli/app/app-list.js.map +1 -1
  72. package/esm/cli/conn/conn-delete.js +7 -1
  73. package/esm/cli/conn/conn-delete.js.map +1 -1
  74. package/esm/cli/conn/conn-save.js +9 -9
  75. package/esm/cli/conn/conn-save.js.map +1 -1
  76. package/esm/cli/email/email-template-export.js +6 -3
  77. package/esm/cli/email/email-template-export.js.map +1 -1
  78. package/esm/cli/email/email-template-import.js +8 -4
  79. package/esm/cli/email/email-template-import.js.map +1 -1
  80. package/esm/cli/email/email-template-list.js +2 -1
  81. package/esm/cli/email/email-template-list.js.map +1 -1
  82. package/esm/cli/esv/esv-secret-create.js +1 -1
  83. package/esm/cli/esv/esv-secret-create.js.map +1 -1
  84. package/esm/cli/esv/esv-secret-delete.js +1 -1
  85. package/esm/cli/esv/esv-secret-delete.js.map +1 -1
  86. package/esm/cli/esv/esv-secret-describe.js +1 -1
  87. package/esm/cli/esv/esv-secret-describe.js.map +1 -1
  88. package/esm/cli/esv/esv-secret-export.js +1 -1
  89. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  90. package/esm/cli/esv/esv-secret-list.js +1 -1
  91. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  92. package/esm/cli/esv/esv-secret-set.js +1 -1
  93. package/esm/cli/esv/esv-secret-set.js.map +1 -1
  94. package/esm/cli/esv/esv-secret-version-activate.js +1 -1
  95. package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
  96. package/esm/cli/esv/esv-secret-version-create.js +1 -1
  97. package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
  98. package/esm/cli/esv/esv-secret-version-deactivate.js +1 -1
  99. package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
  100. package/esm/cli/esv/esv-secret-version-delete.js +1 -1
  101. package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
  102. package/esm/cli/esv/esv-secret-version-list.js +1 -1
  103. package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
  104. package/esm/cli/esv/esv-variable-create.js +1 -1
  105. package/esm/cli/esv/esv-variable-create.js.map +1 -1
  106. package/esm/cli/esv/esv-variable-delete.js +1 -1
  107. package/esm/cli/esv/esv-variable-delete.js.map +1 -1
  108. package/esm/cli/esv/esv-variable-describe.js +1 -1
  109. package/esm/cli/esv/esv-variable-describe.js.map +1 -1
  110. package/esm/cli/esv/esv-variable-export.js +1 -1
  111. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  112. package/esm/cli/esv/esv-variable-list.js +1 -1
  113. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  114. package/esm/cli/esv/esv-variable-set.js +1 -1
  115. package/esm/cli/esv/esv-variable-set.js.map +1 -1
  116. package/esm/cli/idm/idm-count.js +2 -1
  117. package/esm/cli/idm/idm-count.js.map +1 -1
  118. package/esm/cli/idm/idm-export.js +6 -3
  119. package/esm/cli/idm/idm-export.js.map +1 -1
  120. package/esm/cli/idm/idm-import.js +8 -4
  121. package/esm/cli/idm/idm-import.js.map +1 -1
  122. package/esm/cli/idm/idm-list.js +2 -1
  123. package/esm/cli/idm/idm-list.js.map +1 -1
  124. package/esm/cli/idp/idp-export.js +6 -3
  125. package/esm/cli/idp/idp-export.js.map +1 -1
  126. package/esm/cli/idp/idp-import.js +8 -4
  127. package/esm/cli/idp/idp-import.js.map +1 -1
  128. package/esm/cli/idp/idp-list.js +2 -1
  129. package/esm/cli/idp/idp-list.js.map +1 -1
  130. package/esm/cli/journey/journey-delete.js +6 -7
  131. package/esm/cli/journey/journey-delete.js.map +1 -1
  132. package/esm/cli/journey/journey-describe.js +15 -9
  133. package/esm/cli/journey/journey-describe.js.map +1 -1
  134. package/esm/cli/journey/journey-export.js +6 -3
  135. package/esm/cli/journey/journey-export.js.map +1 -1
  136. package/esm/cli/journey/journey-import.js +8 -4
  137. package/esm/cli/journey/journey-import.js.map +1 -1
  138. package/esm/cli/journey/journey-list.js +2 -1
  139. package/esm/cli/journey/journey-list.js.map +1 -1
  140. package/esm/cli/journey/journey-prune.js +3 -2
  141. package/esm/cli/journey/journey-prune.js.map +1 -1
  142. package/esm/cli/log/log-fetch.js +6 -2
  143. package/esm/cli/log/log-fetch.js.map +1 -1
  144. package/esm/cli/log/log-list.js +12 -3
  145. package/esm/cli/log/log-list.js.map +1 -1
  146. package/esm/cli/log/log-tail.js +6 -2
  147. package/esm/cli/log/log-tail.js.map +1 -1
  148. package/esm/cli/oauth/oauth-client-export.js +6 -6
  149. package/esm/cli/oauth/oauth-client-export.js.map +1 -1
  150. package/esm/cli/oauth/oauth-client-import.js +8 -8
  151. package/esm/cli/oauth/oauth-client-import.js.map +1 -1
  152. package/esm/cli/oauth/oauth-client-list.js +2 -1
  153. package/esm/cli/oauth/oauth-client-list.js.map +1 -1
  154. package/esm/cli/saml/saml-describe.js +2 -1
  155. package/esm/cli/saml/saml-describe.js.map +1 -1
  156. package/esm/cli/saml/saml-export.js +6 -3
  157. package/esm/cli/saml/saml-export.js.map +1 -1
  158. package/esm/cli/saml/saml-import.js +8 -4
  159. package/esm/cli/saml/saml-import.js.map +1 -1
  160. package/esm/cli/saml/saml-list.js +2 -1
  161. package/esm/cli/saml/saml-list.js.map +1 -1
  162. package/esm/cli/saml/saml-metadata-export.js +10 -2
  163. package/esm/cli/saml/saml-metadata-export.js.map +1 -1
  164. package/esm/cli/script/script-delete.js +10 -4
  165. package/esm/cli/script/script-delete.js.map +1 -1
  166. package/esm/cli/script/script-export.js +9 -13
  167. package/esm/cli/script/script-export.js.map +1 -1
  168. package/esm/cli/script/script-import.js +19 -14
  169. package/esm/cli/script/script-import.js.map +1 -1
  170. package/esm/cli/service/service-delete.js +4 -2
  171. package/esm/cli/service/service-delete.js.map +1 -1
  172. package/esm/cli/service/service-export.js +6 -3
  173. package/esm/cli/service/service-export.js.map +1 -1
  174. package/esm/cli/service/service-import.js +8 -4
  175. package/esm/cli/service/service-import.js.map +1 -1
  176. package/esm/cli/service/service-list.js +2 -1
  177. package/esm/cli/service/service-list.js.map +1 -1
  178. package/esm/cli/shell/shell.js +2 -4
  179. package/esm/cli/shell/shell.js.map +1 -1
  180. package/esm/cli/theme/theme-delete.js +7 -4
  181. package/esm/cli/theme/theme-delete.js.map +1 -1
  182. package/esm/cli/theme/theme-export.js +8 -4
  183. package/esm/cli/theme/theme-export.js.map +1 -1
  184. package/esm/cli/theme/theme-import.js +10 -5
  185. package/esm/cli/theme/theme-import.js.map +1 -1
  186. package/esm/cli/theme/theme-list.js +2 -1
  187. package/esm/cli/theme/theme-list.js.map +1 -1
  188. package/esm/ops/AdminOps.js +790 -3
  189. package/esm/ops/AdminOps.js.map +1 -1
  190. package/esm/ops/AgentOps.js +638 -305
  191. package/esm/ops/AgentOps.js.map +1 -1
  192. package/esm/ops/ApplicationOps.js +91 -79
  193. package/esm/ops/ApplicationOps.js.map +1 -1
  194. package/esm/ops/AuthenticateOps.js +4 -9
  195. package/esm/ops/AuthenticateOps.js.map +1 -1
  196. package/esm/ops/AuthenticationSettingsOps.js +22 -23
  197. package/esm/ops/AuthenticationSettingsOps.js.map +1 -1
  198. package/esm/ops/CirclesOfTrustOps.js +52 -55
  199. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  200. package/esm/ops/ConfigOps.js +100 -84
  201. package/esm/ops/ConfigOps.js.map +1 -1
  202. package/esm/ops/ConnectionProfileOps.js +9 -7
  203. package/esm/ops/ConnectionProfileOps.js.map +1 -1
  204. package/esm/ops/EmailTemplateOps.js +64 -47
  205. package/esm/ops/EmailTemplateOps.js.map +1 -1
  206. package/esm/ops/IdmOps.js +149 -117
  207. package/esm/ops/IdmOps.js.map +1 -1
  208. package/esm/ops/IdpOps.js +76 -46
  209. package/esm/ops/IdpOps.js.map +1 -1
  210. package/esm/ops/JourneyOps.js +333 -238
  211. package/esm/ops/JourneyOps.js.map +1 -1
  212. package/esm/ops/LogOps.js +15 -23
  213. package/esm/ops/LogOps.js.map +1 -1
  214. package/esm/ops/OAuth2ClientOps.js +43 -36
  215. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  216. package/esm/ops/PolicyOps.js +104 -108
  217. package/esm/ops/PolicyOps.js.map +1 -1
  218. package/esm/ops/PolicySetOps.js +72 -78
  219. package/esm/ops/PolicySetOps.js.map +1 -1
  220. package/esm/ops/ResourceTypeOps.js +84 -99
  221. package/esm/ops/ResourceTypeOps.js.map +1 -1
  222. package/esm/ops/Saml2Ops.js +132 -88
  223. package/esm/ops/Saml2Ops.js.map +1 -1
  224. package/esm/ops/ScriptOps.js +90 -80
  225. package/esm/ops/ScriptOps.js.map +1 -1
  226. package/esm/ops/ServiceOps.js +125 -87
  227. package/esm/ops/ServiceOps.js.map +1 -1
  228. package/esm/ops/ThemeOps.js +170 -139
  229. package/esm/ops/ThemeOps.js.map +1 -1
  230. package/esm/ops/{AdminFederationOps.js → cloud/AdminFederationOps.js} +10 -16
  231. package/esm/ops/cloud/AdminFederationOps.js.map +1 -0
  232. package/esm/ops/{SecretsOps.js → cloud/SecretsOps.js} +123 -129
  233. package/esm/ops/cloud/SecretsOps.js.map +1 -0
  234. package/esm/ops/{VariablesOps.js → cloud/VariablesOps.js} +48 -52
  235. package/esm/ops/cloud/VariablesOps.js.map +1 -0
  236. package/esm/ops/templates/OAuth2ClientTemplate.json +270 -0
  237. package/esm/ops/templates/OAuth2TrustedJwtIssuerTemplate.json +38 -0
  238. package/esm/ops/templates/OrgModelUserAttributesTemplate.json +149 -0
  239. package/esm/ops/templates/autoaccess/IPAddresses.json +202 -0
  240. package/esm/ops/templates/autoaccess/UserAgents.json +35 -0
  241. package/esm/ops/templates/autoaccess/Usernames.json +203 -0
  242. package/esm/ops/templates/cloud/GenericExtensionAttributesTemplate.json +392 -0
  243. package/esm/ops/templates/cloud/managed.json +4119 -0
  244. package/esm/ops/utils/OpsUtils.js.map +1 -1
  245. package/esm/utils/Console.js +31 -0
  246. package/esm/utils/Console.js.map +1 -1
  247. package/package.json +10 -6
  248. package/esm/ops/AdminFederationOps.js.map +0 -1
  249. package/esm/ops/SecretsOps.js.map +0 -1
  250. package/esm/ops/VariablesOps.js.map +0 -1
@@ -1,6 +1,6 @@
1
- import { frodo, state } from '@rockcarver/frodo-lib';
1
+ import { frodo, FrodoError, state } from '@rockcarver/frodo-lib';
2
2
  import fs from 'fs';
3
- import { createProgressIndicator, createTable, debugMessage, printMessage, stopProgressIndicator, updateProgressIndicator } from '../utils/Console';
3
+ import { createProgressIndicator, createTable, debugMessage, printError, printMessage, stopProgressIndicator, updateProgressIndicator } from '../utils/Console';
4
4
  import * as CirclesOfTrust from './CirclesOfTrustOps';
5
5
  import * as EmailTemplate from './EmailTemplateOps';
6
6
  import * as Idp from './IdpOps';
@@ -29,14 +29,16 @@ const {
29
29
  onlineTreeExportResolver,
30
30
  getJourneyClassification: _getJourneyClassification,
31
31
  disableJourney: _disableJourney,
32
- enableJourney: _enableJourney
32
+ enableJourney: _enableJourney,
33
+ deleteJourney: _deleteJourney,
34
+ deleteJourneys: _deleteJourneys
33
35
  } = frodo.authn.journey;
34
36
 
35
37
  /**
36
38
  * List all the journeys/trees
37
39
  * @param {boolean} long Long version, all the fields
38
40
  * @param {boolean} analyze Analyze journeys/trees for custom nodes (expensive)
39
- * @returns {Promise<TreeSkeleton[]>} a promise that resolves to an array journey objects
41
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
40
42
  */
41
43
  export async function listJourneys(long = false, analyze = false) {
42
44
  let journeys = [];
@@ -46,6 +48,7 @@ export async function listJourneys(long = false, analyze = false) {
46
48
  for (const journeyStub of journeys) {
47
49
  printMessage(`${journeyStub['_id']}`, 'data');
48
50
  }
51
+ return true;
49
52
  } else {
50
53
  if (!analyze) {
51
54
  const table = createTable(['Name', 'Status', 'Tags']);
@@ -54,6 +57,7 @@ export async function listJourneys(long = false, analyze = false) {
54
57
  table.push([`${journeyStub._id}`, journeyStub.enabled === false ? 'disabled'['brightRed'] : 'enabled'['brightGreen'], (_journeyStub$uiConfig = journeyStub.uiConfig) !== null && _journeyStub$uiConfig !== void 0 && _journeyStub$uiConfig.categories ? wordwrap(JSON.parse(journeyStub.uiConfig.categories).join(', '), 60) : '']);
55
58
  }
56
59
  printMessage(table.toString(), 'data');
60
+ return true;
57
61
  } else {
58
62
  const spinnerId = createProgressIndicator('indeterminate', 0, `Retrieving details of all journeys...`);
59
63
  const exportPromises = [];
@@ -73,17 +77,17 @@ export async function listJourneys(long = false, analyze = false) {
73
77
  table.push([`${journeyExport.tree._id}`, journeyExport.tree.enabled === false ? 'disabled'['brightRed'] : 'enabled'['brightGreen'], getJourneyClassification(journeyExport).join(', '), (_journeyExport$tree$u = journeyExport.tree.uiConfig) !== null && _journeyExport$tree$u !== void 0 && _journeyExport$tree$u.categories ? wordwrap(JSON.parse(journeyExport.tree.uiConfig.categories).join(', '), 60) : '']);
74
78
  }
75
79
  printMessage(table.toString(), 'data');
80
+ return true;
76
81
  } catch (error) {
77
82
  stopProgressIndicator(spinnerId, 'Error retrieving details of all journeys.', 'fail');
78
- printMessage(error.response.data, 'error');
83
+ printError(error);
79
84
  }
80
85
  }
81
86
  }
82
87
  } catch (error) {
83
- var _error$response;
84
- printMessage((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data, 'error');
88
+ printError(error);
85
89
  }
86
- return journeys;
90
+ return false;
87
91
  }
88
92
 
89
93
  /**
@@ -92,6 +96,7 @@ export async function listJourneys(long = false, analyze = false) {
92
96
  * @param {string} file optional export file name
93
97
  * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
94
98
  * @param {TreeExportOptions} options export options
99
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
95
100
  */
96
101
  export async function exportJourneyToFile(journeyId, file, includeMeta = true, options = {
97
102
  deps: false,
@@ -111,10 +116,13 @@ export async function exportJourneyToFile(journeyId, file, includeMeta = true, o
111
116
  if (verbose) spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);
112
117
  saveJsonToFile(fileData, filePath, includeMeta);
113
118
  stopProgressIndicator(spinnerId, `Exported ${journeyId['brightCyan']} to ${filePath['brightCyan']}.`, 'success');
119
+ return true;
114
120
  } catch (error) {
115
121
  if (verbose) spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);
116
122
  stopProgressIndicator(spinnerId, `Error exporting journey ${journeyId}: ${error}`, 'fail');
123
+ printError(error);
117
124
  }
125
+ return false;
118
126
  }
119
127
 
120
128
  /**
@@ -122,44 +130,57 @@ export async function exportJourneyToFile(journeyId, file, includeMeta = true, o
122
130
  * @param {string} file optional export file name
123
131
  * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
124
132
  * @param {TreeExportOptions} options export options
133
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
125
134
  */
126
135
  export async function exportJourneysToFile(file, includeMeta = true, options = {
127
136
  deps: false,
128
137
  useStringArrays: false,
129
138
  coords: true
130
139
  }) {
131
- if (!file) {
132
- file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');
140
+ try {
141
+ if (!file) {
142
+ file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');
143
+ }
144
+ const filePath = getFilePath(file, true);
145
+ const fileData = await exportJourneys(options);
146
+ saveJsonToFile(fileData, filePath, includeMeta);
147
+ return true;
148
+ } catch (error) {
149
+ printError(error);
133
150
  }
134
- const filePath = getFilePath(file, true);
135
- const fileData = await exportJourneys(options);
136
- saveJsonToFile(fileData, filePath, includeMeta);
137
151
  }
138
152
 
139
153
  /**
140
154
  * Export all journeys to separate files
141
155
  * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
142
156
  * @param {TreeExportOptions} options export options
157
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
143
158
  */
144
159
  export async function exportJourneysToFiles(includeMeta = true, options = {
145
160
  deps: false,
146
161
  useStringArrays: false,
147
162
  coords: true
148
163
  }) {
149
- const journeysExport = await exportJourneys(options);
150
- const trees = Object.entries(journeysExport.trees);
151
- for (const [treeId, treeValue] of trees) {
152
- const indicatorId = createProgressIndicator('determinate', 1, `Saving ${treeId}...`);
153
- const file = getFilePath(getTypedFilename(`${treeId}`, 'journey'), true);
154
- treeValue['meta'] = journeysExport.meta;
155
- try {
156
- updateProgressIndicator(indicatorId, `Saving ${treeId} to ${file}`);
157
- saveJsonToFile(treeValue, file, includeMeta);
158
- stopProgressIndicator(indicatorId, `${treeId} saved to ${file}`);
159
- } catch (error) {
160
- stopProgressIndicator(indicatorId, `Error saving ${treeId} to ${file}`);
164
+ try {
165
+ const journeysExport = await exportJourneys(options);
166
+ const trees = Object.entries(journeysExport.trees);
167
+ for (const [treeId, treeValue] of trees) {
168
+ const indicatorId = createProgressIndicator('determinate', 1, `Saving ${treeId}...`);
169
+ const file = getFilePath(getTypedFilename(`${treeId}`, 'journey'), true);
170
+ treeValue['meta'] = journeysExport.meta;
171
+ try {
172
+ updateProgressIndicator(indicatorId, `Saving ${treeId} to ${file}`);
173
+ saveJsonToFile(treeValue, file, includeMeta);
174
+ stopProgressIndicator(indicatorId, `${treeId} saved to ${file}`);
175
+ } catch (error) {
176
+ stopProgressIndicator(indicatorId, `Error saving ${treeId} to ${file}`);
177
+ }
161
178
  }
179
+ return true;
180
+ } catch (error) {
181
+ printError(error);
162
182
  }
183
+ return false;
163
184
  }
164
185
 
165
186
  /**
@@ -167,6 +188,7 @@ export async function exportJourneysToFiles(includeMeta = true, options = {
167
188
  * @param {string} journeyId journey id/name
168
189
  * @param {string} file import file name
169
190
  * @param {TreeImportOptions} options import options
191
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
170
192
  */
171
193
  export async function importJourneyFromFile(journeyId, file, options) {
172
194
  const verbose = state.getVerbose();
@@ -198,6 +220,7 @@ export async function importJourneyFromFile(journeyId, file, options) {
198
220
  await importJourney(journeyData, options);
199
221
  if (verbose) indicatorId2 = createProgressIndicator('indeterminate', 0, `Importing ${journeyId}...`);
200
222
  stopProgressIndicator(indicatorId2, `Imported ${journeyId}.`, 'success');
223
+ return true;
201
224
  } catch (importError) {
202
225
  if (verbose) indicatorId2 = createProgressIndicator('indeterminate', 0, `Importing ${journeyId}...`);
203
226
  stopProgressIndicator(indicatorId2, `${importError}`, 'fail');
@@ -214,14 +237,16 @@ export async function importJourneyFromFile(journeyId, file, options) {
214
237
  stopProgressIndicator(indicatorId3, `${journeyId} not found!`, 'fail');
215
238
  }
216
239
  } catch (error) {
217
- printMessage(`Error importing journey ${journeyId}: ${error}`, 'error');
240
+ printError(error);
218
241
  }
242
+ return false;
219
243
  }
220
244
 
221
245
  /**
222
246
  * Import first journey from file
223
247
  * @param {string} file import file name
224
248
  * @param {TreeImportOptions} options import options
249
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
225
250
  */
226
251
  export async function importFirstJourneyFromFile(file, options) {
227
252
  const verbose = state.getVerbose();
@@ -262,6 +287,7 @@ export async function importFirstJourneyFromFile(file, options) {
262
287
  await importJourney(journeyData, options);
263
288
  if (verbose) importSpinnerId = createProgressIndicator('indeterminate', 0, `Importing ${journeyId}...`);
264
289
  stopProgressIndicator(importSpinnerId, `Imported ${journeyId}.`, 'success');
290
+ return true;
265
291
  } catch (importError) {
266
292
  if (verbose) importSpinnerId = createProgressIndicator('indeterminate', 0, `Importing ${journeyId}...`);
267
293
  stopProgressIndicator(importSpinnerId, `${importError}`, 'fail');
@@ -278,59 +304,51 @@ export async function importFirstJourneyFromFile(file, options) {
278
304
  }
279
305
  // end dependency resolution for single tree import
280
306
  } catch (error) {
281
- printMessage(`Error importing first journey: ${error}`, 'error');
307
+ printError(error);
282
308
  }
309
+ return false;
283
310
  }
284
311
 
285
312
  /**
286
313
  * Import all journeys from file
287
314
  * @param {string} file import file name
288
315
  * @param {TreeImportOptions} options import options
316
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
289
317
  */
290
318
  export async function importJourneysFromFile(file, options) {
291
319
  try {
292
320
  const data = fs.readFileSync(getFilePath(file), 'utf8');
293
- try {
294
- const fileData = JSON.parse(data);
295
- await importJourneys(fileData, options);
296
- } catch (error) {
297
- if (error.name === 'UnresolvedDependenciesError') {
298
- for (const journey of Object.keys(error.unresolvedJourneys)) {
299
- printMessage({
300
- message: ` - ${journey} requires ${error.unresolvedJourneys[journey]}`,
301
- type: 'info',
302
- state
303
- });
304
- }
305
- } else {
306
- printMessage(`${error.message}`, 'error');
307
- }
308
- }
321
+ const fileData = JSON.parse(data);
322
+ await importJourneys(fileData, options);
323
+ return true;
309
324
  } catch (error) {
310
- printMessage(`Error importing journeys: ${error}`, 'error');
325
+ printError(error);
311
326
  }
327
+ return false;
312
328
  }
313
329
 
314
330
  /**
315
331
  * Import all journeys from separate files
316
332
  * @param {TreeImportOptions} options import options
333
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
317
334
  */
318
335
  export async function importJourneysFromFiles(options) {
319
- const names = fs.readdirSync(getWorkingDirectory());
320
- const jsonFiles = names.filter(name => name.toLowerCase().endsWith('.journey.json')).map(name => getFilePath(name));
321
- const allJourneysData = {
322
- trees: {}
323
- };
324
- for (const file of jsonFiles) {
325
- const journeyData = JSON.parse(fs.readFileSync(file, 'utf8'));
326
- allJourneysData.trees[journeyData.tree._id] = journeyData;
327
- }
328
336
  try {
337
+ const names = fs.readdirSync(getWorkingDirectory());
338
+ const jsonFiles = names.filter(name => name.toLowerCase().endsWith('.journey.json')).map(name => getFilePath(name));
339
+ const allJourneysData = {
340
+ trees: {}
341
+ };
342
+ for (const file of jsonFiles) {
343
+ const journeyData = JSON.parse(fs.readFileSync(file, 'utf8'));
344
+ allJourneysData.trees[journeyData.tree._id] = journeyData;
345
+ }
329
346
  await importJourneys(allJourneysData, options);
347
+ return true;
330
348
  } catch (error) {
331
- var _error$response2;
332
- printMessage(`${((_error$response2 = error.response) === null || _error$response2 === void 0 || (_error$response2 = _error$response2.data) === null || _error$response2 === void 0 ? void 0 : _error$response2.message) || error.message}`, 'error');
349
+ printError(error);
333
350
  }
351
+ return false;
334
352
  }
335
353
 
336
354
  /**
@@ -450,122 +468,132 @@ function describeTreeDescendentsMd(descendents, depth = 0) {
450
468
  * - SAML2 circles of trust
451
469
  * @param {SingleTreeExportInterface} journeyData journey export object
452
470
  * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function
471
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
453
472
  */
454
473
  export async function describeJourney(journeyData, resolveTreeExport = onlineTreeExportResolver) {
455
- var _journeyData$meta, _journeyData$tree$uiC, _journeyData$themes;
456
- const allNodes = {
457
- ...journeyData.nodes,
458
- ...journeyData.innerNodes
459
- };
460
- const nodeTypeMap = {};
461
- for (const nodeData of Object.values(allNodes)) {
462
- if (nodeTypeMap[nodeData._type._id]) {
463
- nodeTypeMap[nodeData._type._id] += 1;
464
- } else {
465
- nodeTypeMap[nodeData._type._id] = 1;
474
+ const errors = [];
475
+ try {
476
+ var _journeyData$meta, _journeyData$tree$uiC, _journeyData$themes;
477
+ const allNodes = {
478
+ ...journeyData.nodes,
479
+ ...journeyData.innerNodes
480
+ };
481
+ const nodeTypeMap = {};
482
+ for (const nodeData of Object.values(allNodes)) {
483
+ if (nodeTypeMap[nodeData._type._id]) {
484
+ nodeTypeMap[nodeData._type._id] += 1;
485
+ } else {
486
+ nodeTypeMap[nodeData._type._id] = 1;
487
+ }
466
488
  }
467
- }
468
489
 
469
- // initialize AM version from file
470
- if (!state.getAmVersion() && (_journeyData$meta = journeyData.meta) !== null && _journeyData$meta !== void 0 && _journeyData$meta.originAmVersion) {
471
- state.setAmVersion(journeyData.meta.originAmVersion);
472
- }
490
+ // initialize AM version from file
491
+ if (!state.getAmVersion() && (_journeyData$meta = journeyData.meta) !== null && _journeyData$meta !== void 0 && _journeyData$meta.originAmVersion) {
492
+ state.setAmVersion(journeyData.meta.originAmVersion);
493
+ }
473
494
 
474
- // Journey Name
475
- printMessage(`${getOneLineDescription(journeyData.tree)}`, 'data');
476
- printMessage(Array(`[${journeyData.tree._id}]`['length']).fill('=').join(''));
495
+ // Journey Name
496
+ printMessage(`${getOneLineDescription(journeyData.tree)}`, 'data');
497
+ printMessage(Array(`[${journeyData.tree._id}]`['length']).fill('=').join(''));
477
498
 
478
- // Description
479
- if (journeyData.tree.description) {
480
- printMessage(`\n${journeyData.tree.description}`, 'data');
481
- }
499
+ // Description
500
+ if (journeyData.tree.description) {
501
+ printMessage(`\n${journeyData.tree.description}`, 'data');
502
+ }
482
503
 
483
- // Status
484
- printMessage(`\nStatus\n${journeyData.tree.enabled === false ? 'disabled'['brightRed'] : 'enabled'['brightGreen']}`);
504
+ // Status
505
+ printMessage(`\nStatus\n${journeyData.tree.enabled === false ? 'disabled'['brightRed'] : 'enabled'['brightGreen']}`);
485
506
 
486
- // Classification
487
- if (state.getAmVersion()) {
488
- printMessage(`\nClassification\n${getJourneyClassification(journeyData).join(', ')}`, 'data');
489
- }
507
+ // Classification
508
+ if (state.getAmVersion()) {
509
+ printMessage(`\nClassification\n${getJourneyClassification(journeyData).join(', ')}`, 'data');
510
+ }
490
511
 
491
- // Categories/Tags
492
- if ((_journeyData$tree$uiC = journeyData.tree.uiConfig) !== null && _journeyData$tree$uiC !== void 0 && _journeyData$tree$uiC.categories && journeyData.tree.uiConfig.categories != '[]') {
493
- printMessage('\nCategories/Tags', 'data');
494
- printMessage(`${JSON.parse(journeyData.tree.uiConfig.categories).join(', ')}`, 'data');
495
- }
512
+ // Categories/Tags
513
+ if ((_journeyData$tree$uiC = journeyData.tree.uiConfig) !== null && _journeyData$tree$uiC !== void 0 && _journeyData$tree$uiC.categories && journeyData.tree.uiConfig.categories != '[]') {
514
+ printMessage('\nCategories/Tags', 'data');
515
+ printMessage(`${JSON.parse(journeyData.tree.uiConfig.categories).join(', ')}`, 'data');
516
+ }
496
517
 
497
- // Dependency Tree
498
- try {
499
- const descendents = await getTreeDescendents(journeyData, resolveTreeExport);
500
- describeTreeDescendents(descendents);
501
- } catch (error) {
502
- printMessage(`Error resolving inner tree dependencies:`, 'error');
503
- printMessage(error.stack, 'error');
504
- }
518
+ // Dependency Tree
519
+ try {
520
+ const descendents = await getTreeDescendents(journeyData, resolveTreeExport);
521
+ describeTreeDescendents(descendents);
522
+ } catch (error) {
523
+ errors.push(error);
524
+ }
505
525
 
506
- // Node Types
507
- if (Object.entries(nodeTypeMap).length) {
508
- printMessage(`\nNode Types (${Object.entries(nodeTypeMap).length}):`, 'data');
509
- for (const [nodeType, count] of Object.entries(nodeTypeMap)) {
510
- printMessage(`- ${String(count)} [${nodeType['brightCyan']}] (${Node.getNodeClassification(nodeType).join(', ')})`, 'data');
526
+ // Node Types
527
+ if (Object.entries(nodeTypeMap).length) {
528
+ printMessage(`\nNode Types (${Object.entries(nodeTypeMap).length}):`, 'data');
529
+ for (const [nodeType, count] of Object.entries(nodeTypeMap)) {
530
+ printMessage(`- ${String(count)} [${nodeType['brightCyan']}] (${Node.getNodeClassification(nodeType).join(', ')})`, 'data');
531
+ }
511
532
  }
512
- }
513
533
 
514
- // Nodes
515
- if (Object.entries(allNodes).length) {
516
- printMessage(`\nNodes (${Object.entries(allNodes).length}):`, 'data');
517
- for (const nodeObj of Object.values(allNodes)) {
518
- printMessage(`- ${Node.getOneLineDescription(nodeObj, getNodeRef(nodeObj, journeyData))}`, 'data');
534
+ // Nodes
535
+ if (Object.entries(allNodes).length) {
536
+ printMessage(`\nNodes (${Object.entries(allNodes).length}):`, 'data');
537
+ for (const nodeObj of Object.values(allNodes)) {
538
+ printMessage(`- ${Node.getOneLineDescription(nodeObj, getNodeRef(nodeObj, journeyData))}`, 'data');
539
+ }
519
540
  }
520
- }
521
541
 
522
- // Themes
523
- if ((_journeyData$themes = journeyData.themes) !== null && _journeyData$themes !== void 0 && _journeyData$themes.length) {
524
- printMessage(`\nThemes (${journeyData.themes.length}):`, 'data');
525
- for (const themeData of journeyData.themes) {
526
- printMessage(`- ${Theme.getOneLineDescription(themeData)}`, 'data');
542
+ // Themes
543
+ if ((_journeyData$themes = journeyData.themes) !== null && _journeyData$themes !== void 0 && _journeyData$themes.length) {
544
+ printMessage(`\nThemes (${journeyData.themes.length}):`, 'data');
545
+ for (const themeData of journeyData.themes) {
546
+ printMessage(`- ${Theme.getOneLineDescription(themeData)}`, 'data');
547
+ }
527
548
  }
528
- }
529
549
 
530
- // Scripts
531
- if (Object.entries(journeyData.scripts).length) {
532
- printMessage(`\nScripts (${Object.entries(journeyData.scripts).length}):`, 'data');
533
- for (const scriptData of Object.values(journeyData.scripts)) {
534
- printMessage(`- ${Script.getOneLineDescription(scriptData)}`, 'data');
550
+ // Scripts
551
+ if (Object.entries(journeyData.scripts).length) {
552
+ printMessage(`\nScripts (${Object.entries(journeyData.scripts).length}):`, 'data');
553
+ for (const scriptData of Object.values(journeyData.scripts)) {
554
+ printMessage(`- ${Script.getOneLineDescription(scriptData)}`, 'data');
555
+ }
535
556
  }
536
- }
537
557
 
538
- // Email Templates
539
- if (Object.entries(journeyData.emailTemplates).length) {
540
- printMessage(`\nEmail Templates (${Object.entries(journeyData.emailTemplates).length}):`, 'data');
541
- for (const templateData of Object.values(journeyData.emailTemplates)) {
542
- printMessage(`- ${EmailTemplate.getOneLineDescription(templateData)}`, 'data');
558
+ // Email Templates
559
+ if (Object.entries(journeyData.emailTemplates).length) {
560
+ printMessage(`\nEmail Templates (${Object.entries(journeyData.emailTemplates).length}):`, 'data');
561
+ for (const templateData of Object.values(journeyData.emailTemplates)) {
562
+ printMessage(`- ${EmailTemplate.getOneLineDescription(templateData)}`, 'data');
563
+ }
543
564
  }
544
- }
545
565
 
546
- // Social Identity Providers
547
- if (Object.entries(journeyData.socialIdentityProviders).length) {
548
- printMessage(`\nSocial Identity Providers (${Object.entries(journeyData.socialIdentityProviders).length}):`, 'data');
549
- for (const socialIdpData of Object.values(journeyData.socialIdentityProviders)) {
550
- printMessage(`- ${Idp.getOneLineDescription(socialIdpData)}`, 'data');
566
+ // Social Identity Providers
567
+ if (Object.entries(journeyData.socialIdentityProviders).length) {
568
+ printMessage(`\nSocial Identity Providers (${Object.entries(journeyData.socialIdentityProviders).length}):`, 'data');
569
+ for (const socialIdpData of Object.values(journeyData.socialIdentityProviders)) {
570
+ printMessage(`- ${Idp.getOneLineDescription(socialIdpData)}`, 'data');
571
+ }
551
572
  }
552
- }
553
573
 
554
- // SAML2 Entity Providers
555
- if (Object.entries(journeyData.saml2Entities).length) {
556
- printMessage(`\nSAML2 Entity Providers (${Object.entries(journeyData.saml2Entities).length}):`, 'data');
557
- for (const entityProviderData of Object.values(journeyData.saml2Entities)) {
558
- printMessage(`- ${Saml2.getOneLineDescription(entityProviderData)}`, 'data');
574
+ // SAML2 Entity Providers
575
+ if (Object.entries(journeyData.saml2Entities).length) {
576
+ printMessage(`\nSAML2 Entity Providers (${Object.entries(journeyData.saml2Entities).length}):`, 'data');
577
+ for (const entityProviderData of Object.values(journeyData.saml2Entities)) {
578
+ printMessage(`- ${Saml2.getOneLineDescription(entityProviderData)}`, 'data');
579
+ }
559
580
  }
560
- }
561
581
 
562
- // SAML2 Circles Of Trust
563
- if (Object.entries(journeyData.circlesOfTrust).length) {
564
- printMessage(`\nSAML2 Circles Of Trust (${Object.entries(journeyData.circlesOfTrust).length}):`, 'data');
565
- for (const cotData of Object.values(journeyData.circlesOfTrust)) {
566
- printMessage(`- ${CirclesOfTrust.getOneLineDescription(cotData)}`, 'data');
582
+ // SAML2 Circles Of Trust
583
+ if (Object.entries(journeyData.circlesOfTrust).length) {
584
+ printMessage(`\nSAML2 Circles Of Trust (${Object.entries(journeyData.circlesOfTrust).length}):`, 'data');
585
+ for (const cotData of Object.values(journeyData.circlesOfTrust)) {
586
+ printMessage(`- ${CirclesOfTrust.getOneLineDescription(cotData)}`, 'data');
587
+ }
588
+ }
589
+ if (errors.length > 0) {
590
+ throw new FrodoError(`Error describing journey`, errors);
567
591
  }
592
+ return true;
593
+ } catch (error) {
594
+ printError(error);
568
595
  }
596
+ return false;
569
597
  }
570
598
 
571
599
  /**
@@ -582,138 +610,205 @@ export async function describeJourney(journeyData, resolveTreeExport = onlineTre
582
610
  * - SAML2 circles of trust
583
611
  * @param {SingleTreeExportInterface} journeyData journey export object
584
612
  * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function
613
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
585
614
  */
586
615
  export async function describeJourneyMd(journeyData, resolveTreeExport = onlineTreeExportResolver) {
587
- var _journeyData$meta2, _journeyData$tree$uiC2, _journeyData$themes2;
588
- const allNodes = {
589
- ...journeyData.nodes,
590
- ...journeyData.innerNodes
591
- };
592
- const nodeTypeMap = {};
593
- for (const nodeData of Object.values(allNodes)) {
594
- if (nodeTypeMap[nodeData._type._id]) {
595
- nodeTypeMap[nodeData._type._id] += 1;
596
- } else {
597
- nodeTypeMap[nodeData._type._id] = 1;
616
+ const errors = [];
617
+ try {
618
+ var _journeyData$meta2, _journeyData$tree$uiC2, _journeyData$themes2;
619
+ const allNodes = {
620
+ ...journeyData.nodes,
621
+ ...journeyData.innerNodes
622
+ };
623
+ const nodeTypeMap = {};
624
+ for (const nodeData of Object.values(allNodes)) {
625
+ if (nodeTypeMap[nodeData._type._id]) {
626
+ nodeTypeMap[nodeData._type._id] += 1;
627
+ } else {
628
+ nodeTypeMap[nodeData._type._id] = 1;
629
+ }
598
630
  }
599
- }
600
-
601
- // initialize AM version from file
602
- if (!state.getAmVersion() && (_journeyData$meta2 = journeyData.meta) !== null && _journeyData$meta2 !== void 0 && _journeyData$meta2.originAmVersion) {
603
- state.setAmVersion(journeyData.meta.originAmVersion);
604
- }
605
631
 
606
- // Journey Name
607
- printMessage(`# ${getOneLineDescriptionMd(journeyData.tree)} - ${journeyData.tree.enabled === false ? ':o: `disabled`' : ':white_check_mark: `enabled`'}, ${getJourneyClassificationMd(journeyData).join(', ')}`, 'data');
632
+ // initialize AM version from file
633
+ if (!state.getAmVersion() && (_journeyData$meta2 = journeyData.meta) !== null && _journeyData$meta2 !== void 0 && _journeyData$meta2.originAmVersion) {
634
+ state.setAmVersion(journeyData.meta.originAmVersion);
635
+ }
608
636
 
609
- // Categories/Tags
610
- if ((_journeyData$tree$uiC2 = journeyData.tree.uiConfig) !== null && _journeyData$tree$uiC2 !== void 0 && _journeyData$tree$uiC2.categories && journeyData.tree.uiConfig.categories != '[]') {
611
- printMessage(`\`${JSON.parse(journeyData.tree.uiConfig.categories).join('`, `')}\``, 'data');
612
- }
637
+ // Journey Name
638
+ printMessage(`# ${getOneLineDescriptionMd(journeyData.tree)} - ${journeyData.tree.enabled === false ? ':o: `disabled`' : ':white_check_mark: `enabled`'}, ${getJourneyClassificationMd(journeyData).join(', ')}`, 'data');
613
639
 
614
- // Description
615
- if (journeyData.tree.description) {
616
- printMessage(`\n${journeyData.tree.description}`, 'data');
617
- }
640
+ // Categories/Tags
641
+ if ((_journeyData$tree$uiC2 = journeyData.tree.uiConfig) !== null && _journeyData$tree$uiC2 !== void 0 && _journeyData$tree$uiC2.categories && journeyData.tree.uiConfig.categories != '[]') {
642
+ printMessage(`\`${JSON.parse(journeyData.tree.uiConfig.categories).join('`, `')}\``, 'data');
643
+ }
618
644
 
619
- // Journey image
620
- printMessage(`\n[![](./${journeyData.tree._id}.png)]()\n`, 'data');
645
+ // Description
646
+ if (journeyData.tree.description) {
647
+ printMessage(`\n${journeyData.tree.description}`, 'data');
648
+ }
621
649
 
622
- // Dependency Tree
623
- const descendents = await getTreeDescendents(journeyData, resolveTreeExport);
624
- printMessage(describeTreeDescendentsMd(descendents), 'data');
650
+ // Journey image
651
+ printMessage(`\n[![](./${journeyData.tree._id}.png)]()\n`, 'data');
625
652
 
626
- // Node Types
627
- if (Object.entries(nodeTypeMap).length) {
628
- printMessage(`## Node Types (${Object.entries(nodeTypeMap).length})`, 'data');
629
- printMessage('| Count | Type | Classification |', 'data');
630
- printMessage('| -----:| ---- | -------------- |', 'data');
631
- for (const [nodeType, count] of Object.entries(nodeTypeMap)) {
632
- printMessage(`| ${String(count)} | ${nodeType} | ${Node.getNodeClassificationMd(nodeType).join('<br>')} |`, 'data');
653
+ // Dependency Tree
654
+ const descendents = await getTreeDescendents(journeyData, resolveTreeExport);
655
+ printMessage(describeTreeDescendentsMd(descendents), 'data');
656
+
657
+ // Node Types
658
+ if (Object.entries(nodeTypeMap).length) {
659
+ printMessage(`## Node Types (${Object.entries(nodeTypeMap).length})`, 'data');
660
+ printMessage('| Count | Type | Classification |', 'data');
661
+ printMessage('| -----:| ---- | -------------- |', 'data');
662
+ for (const [nodeType, count] of Object.entries(nodeTypeMap)) {
663
+ printMessage(`| ${String(count)} | ${nodeType} | ${Node.getNodeClassificationMd(nodeType).join('<br>')} |`, 'data');
664
+ }
633
665
  }
634
- }
635
666
 
636
- // Nodes
637
- if (Object.entries(allNodes).length) {
638
- printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');
639
- printMessage(Node.getTableHeaderMd(), 'data');
640
- for (const nodeObj of Object.values(allNodes)) {
641
- printMessage(`${Node.getTableRowMd(nodeObj, getNodeRef(nodeObj, journeyData))}`, 'data');
667
+ // Nodes
668
+ if (Object.entries(allNodes).length) {
669
+ printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');
670
+ printMessage(Node.getTableHeaderMd(), 'data');
671
+ for (const nodeObj of Object.values(allNodes)) {
672
+ printMessage(`${Node.getTableRowMd(nodeObj, getNodeRef(nodeObj, journeyData))}`, 'data');
673
+ }
642
674
  }
643
- }
644
675
 
645
- // Themes
646
- if ((_journeyData$themes2 = journeyData.themes) !== null && _journeyData$themes2 !== void 0 && _journeyData$themes2.length) {
647
- printMessage(`## Themes (${journeyData.themes.length})`, 'data');
648
- printMessage(Theme.getTableHeaderMd(), 'data');
649
- for (const themeData of journeyData.themes) {
650
- printMessage(`${Theme.getTableRowMd(themeData)}`, 'data');
676
+ // Themes
677
+ if ((_journeyData$themes2 = journeyData.themes) !== null && _journeyData$themes2 !== void 0 && _journeyData$themes2.length) {
678
+ printMessage(`## Themes (${journeyData.themes.length})`, 'data');
679
+ printMessage(Theme.getTableHeaderMd(), 'data');
680
+ for (const themeData of journeyData.themes) {
681
+ printMessage(`${Theme.getTableRowMd(themeData)}`, 'data');
682
+ }
651
683
  }
652
- }
653
684
 
654
- // Scripts
655
- if (Object.entries(journeyData.scripts).length) {
656
- printMessage(`## Scripts (${Object.entries(journeyData.scripts).length})`, 'data');
657
- printMessage(Script.getTableHeaderMd(), 'data');
658
- for (const scriptData of Object.values(journeyData.scripts)) {
659
- printMessage(`${Script.getTableRowMd(scriptData)}`, 'data');
685
+ // Scripts
686
+ if (Object.entries(journeyData.scripts).length) {
687
+ printMessage(`## Scripts (${Object.entries(journeyData.scripts).length})`, 'data');
688
+ printMessage(Script.getTableHeaderMd(), 'data');
689
+ for (const scriptData of Object.values(journeyData.scripts)) {
690
+ printMessage(`${Script.getTableRowMd(scriptData)}`, 'data');
691
+ }
660
692
  }
661
- }
662
693
 
663
- // Email Templates
664
- if (Object.entries(journeyData.emailTemplates).length) {
665
- printMessage(`## Email Templates (${Object.entries(journeyData.emailTemplates).length})`, 'data');
666
- printMessage(EmailTemplate.getTableHeaderMd(), 'data');
667
- for (const templateData of Object.values(journeyData.emailTemplates)) {
668
- printMessage(`${EmailTemplate.getTableRowMd(templateData)}`, 'data');
694
+ // Email Templates
695
+ if (Object.entries(journeyData.emailTemplates).length) {
696
+ printMessage(`## Email Templates (${Object.entries(journeyData.emailTemplates).length})`, 'data');
697
+ printMessage(EmailTemplate.getTableHeaderMd(), 'data');
698
+ for (const templateData of Object.values(journeyData.emailTemplates)) {
699
+ printMessage(`${EmailTemplate.getTableRowMd(templateData)}`, 'data');
700
+ }
669
701
  }
670
- }
671
702
 
672
- // Social Identity Providers
673
- if (Object.entries(journeyData.socialIdentityProviders).length) {
674
- printMessage(`## Social Identity Providers (${Object.entries(journeyData.socialIdentityProviders).length})`, 'data');
675
- printMessage(Idp.getTableHeaderMd(), 'data');
676
- for (const socialIdpData of Object.values(journeyData.socialIdentityProviders)) {
677
- printMessage(`${Idp.getTableRowMd(socialIdpData)}`, 'data');
703
+ // Social Identity Providers
704
+ if (Object.entries(journeyData.socialIdentityProviders).length) {
705
+ printMessage(`## Social Identity Providers (${Object.entries(journeyData.socialIdentityProviders).length})`, 'data');
706
+ printMessage(Idp.getTableHeaderMd(), 'data');
707
+ for (const socialIdpData of Object.values(journeyData.socialIdentityProviders)) {
708
+ printMessage(`${Idp.getTableRowMd(socialIdpData)}`, 'data');
709
+ }
678
710
  }
679
- }
680
711
 
681
- // SAML2 Entity Providers
682
- if (Object.entries(journeyData.saml2Entities).length) {
683
- printMessage(`## SAML2 Entity Providers (${Object.entries(journeyData.saml2Entities).length})`, 'data');
684
- printMessage(Saml2.getTableHeaderMd(), 'data');
685
- for (const entityProviderData of Object.values(journeyData.saml2Entities)) {
686
- printMessage(`${Saml2.getTableRowMd(entityProviderData)}`, 'data');
712
+ // SAML2 Entity Providers
713
+ if (Object.entries(journeyData.saml2Entities).length) {
714
+ printMessage(`## SAML2 Entity Providers (${Object.entries(journeyData.saml2Entities).length})`, 'data');
715
+ printMessage(Saml2.getTableHeaderMd(), 'data');
716
+ for (const entityProviderData of Object.values(journeyData.saml2Entities)) {
717
+ printMessage(`${Saml2.getTableRowMd(entityProviderData)}`, 'data');
718
+ }
687
719
  }
688
- }
689
720
 
690
- // SAML2 Circles Of Trust
691
- if (Object.entries(journeyData.circlesOfTrust).length) {
692
- printMessage(`## SAML2 Circles Of Trust (${Object.entries(journeyData.circlesOfTrust).length})`, 'data');
693
- printMessage(CirclesOfTrust.getTableHeaderMd(), 'data');
694
- for (const cotData of Object.values(journeyData.circlesOfTrust)) {
695
- printMessage(`${CirclesOfTrust.getTableRowMd(cotData)}`, 'data');
721
+ // SAML2 Circles Of Trust
722
+ if (Object.entries(journeyData.circlesOfTrust).length) {
723
+ printMessage(`## SAML2 Circles Of Trust (${Object.entries(journeyData.circlesOfTrust).length})`, 'data');
724
+ printMessage(CirclesOfTrust.getTableHeaderMd(), 'data');
725
+ for (const cotData of Object.values(journeyData.circlesOfTrust)) {
726
+ printMessage(`${CirclesOfTrust.getTableRowMd(cotData)}`, 'data');
727
+ }
728
+ }
729
+ if (errors.length > 0) {
730
+ throw new FrodoError(`Error describing journey`, errors);
696
731
  }
732
+ return true;
733
+ } catch (error) {
734
+ printError(error);
697
735
  }
736
+ return false;
698
737
  }
738
+
739
+ /**
740
+ * Enable a journey
741
+ * @param {string} journeyId id/name of journey
742
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
743
+ */
699
744
  export async function enableJourney(journeyId) {
700
745
  const indicatorId = createProgressIndicator('indeterminate', 0, `Enabling journey ${journeyId}...`);
701
- if (_enableJourney(journeyId)) {
746
+ try {
747
+ await _enableJourney(journeyId);
702
748
  stopProgressIndicator(indicatorId, `Enabled journey ${journeyId}.`, 'success');
703
749
  return true;
704
- } else {
750
+ } catch (error) {
705
751
  stopProgressIndicator(indicatorId, `Error enabling journey ${journeyId}`, 'fail');
706
- return false;
752
+ printError(error);
707
753
  }
754
+ return false;
708
755
  }
756
+
757
+ /**
758
+ * Disable a journey
759
+ * @param {string} journeyId id/name of journey
760
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
761
+ */
709
762
  export async function disableJourney(journeyId) {
710
763
  const indicatorId = createProgressIndicator('indeterminate', 0, `Disabling journey ${journeyId}...`);
711
- if (_disableJourney(journeyId)) {
764
+ try {
765
+ await _disableJourney(journeyId);
712
766
  stopProgressIndicator(indicatorId, `Disabled journey ${journeyId}.`, 'success');
713
767
  return true;
714
- } else {
768
+ } catch (error) {
715
769
  stopProgressIndicator(indicatorId, `Error disabling journey ${journeyId}`, 'fail');
716
- return false;
717
770
  }
771
+ return false;
772
+ }
773
+
774
+ /**
775
+ * Delete a journey
776
+ * @param {string} journeyId id/name of journey
777
+ * @param {{ deep: boolean; verbose: boolean }} [options] delete journey options
778
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
779
+ */
780
+ export async function deleteJourney(journeyId, options = {
781
+ deep: true,
782
+ verbose: false,
783
+ progress: true
784
+ }) {
785
+ try {
786
+ await _deleteJourney(journeyId, options);
787
+ return true;
788
+ } catch (error) {
789
+ printError(error);
790
+ }
791
+ return false;
792
+ }
793
+
794
+ /**
795
+ * Delete all journeys
796
+ * @param {{ deep: boolean; verbose: boolean }} [options] delete journey options
797
+ * @returns {Promise<boolean>} a promise resolving to true if successful, false otherwise
798
+ */
799
+ export async function deleteJourneys(options = {
800
+ deep: true,
801
+ verbose: false
802
+ }) {
803
+ const indicatorId = createProgressIndicator('indeterminate', null, `Deleting journeys...`);
804
+ try {
805
+ const status = await _deleteJourneys(options);
806
+ stopProgressIndicator(indicatorId, `Deleted ${Object.keys(status).length} journeys`);
807
+ return true;
808
+ } catch (error) {
809
+ stopProgressIndicator(indicatorId, `Error deleting journeys`);
810
+ printError(error);
811
+ }
812
+ return false;
718
813
  }
719
814
  //# sourceMappingURL=JourneyOps.js.map