@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.
- package/CHANGELOG.md +10 -1
- package/esm/app.js +7 -2
- package/esm/app.js.map +1 -1
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js +3 -6
- package/esm/cli/admin/admin-add-autoid-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +46 -51
- package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-federation-export.js +1 -1
- package/esm/cli/admin/admin-federation-export.js.map +1 -1
- package/esm/cli/admin/admin-federation-import.js +1 -1
- package/esm/cli/admin/admin-federation-import.js.map +1 -1
- package/esm/cli/admin/admin-federation-list.js +1 -1
- package/esm/cli/admin/admin-federation-list.js.map +1 -1
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +4 -6
- package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js +4 -6
- package/esm/cli/admin/admin-hide-generic-extension-attributes.js.map +1 -1
- package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js +4 -9
- package/esm/cli/admin/admin-list-oauth2-clients-with-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js +4 -9
- package/esm/cli/admin/admin-list-oauth2-clients-with-custom-privileges.js.map +1 -1
- package/esm/cli/admin/admin-list-static-user-mappings.js +3 -9
- package/esm/cli/admin/admin-list-static-user-mappings.js.map +1 -1
- package/esm/cli/admin/admin-remove-static-user-mapping.js +3 -6
- package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
- package/esm/cli/admin/admin-repair-org-model.js +4 -6
- package/esm/cli/admin/admin-repair-org-model.js.map +1 -1
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +4 -6
- package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
- package/esm/cli/admin/admin-show-generic-extension-attributes.js +4 -6
- package/esm/cli/admin/admin-show-generic-extension-attributes.js.map +1 -1
- package/esm/cli/agent/agent-delete.js +8 -21
- package/esm/cli/agent/agent-delete.js.map +1 -1
- package/esm/cli/agent/agent-export.js +6 -3
- package/esm/cli/agent/agent-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-delete.js +7 -20
- package/esm/cli/agent/agent-gateway-delete.js.map +1 -1
- package/esm/cli/agent/agent-gateway-export.js +6 -3
- package/esm/cli/agent/agent-gateway-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-import.js +8 -4
- package/esm/cli/agent/agent-gateway-import.js.map +1 -1
- package/esm/cli/agent/agent-gateway-list.js +2 -1
- package/esm/cli/agent/agent-gateway-list.js.map +1 -1
- package/esm/cli/agent/agent-import.js +8 -4
- package/esm/cli/agent/agent-import.js.map +1 -1
- package/esm/cli/agent/agent-java-delete.js +7 -20
- package/esm/cli/agent/agent-java-delete.js.map +1 -1
- package/esm/cli/agent/agent-java-export.js +6 -3
- package/esm/cli/agent/agent-java-export.js.map +1 -1
- package/esm/cli/agent/agent-java-import.js +8 -4
- package/esm/cli/agent/agent-java-import.js.map +1 -1
- package/esm/cli/agent/agent-java-list.js +2 -1
- package/esm/cli/agent/agent-java-list.js.map +1 -1
- package/esm/cli/agent/agent-list.js +2 -1
- package/esm/cli/agent/agent-list.js.map +1 -1
- package/esm/cli/agent/agent-web-delete.js +7 -20
- package/esm/cli/agent/agent-web-delete.js.map +1 -1
- package/esm/cli/agent/agent-web-export.js +6 -3
- package/esm/cli/agent/agent-web-export.js.map +1 -1
- package/esm/cli/agent/agent-web-import.js +8 -4
- package/esm/cli/agent/agent-web-import.js.map +1 -1
- package/esm/cli/agent/agent-web-list.js +2 -1
- package/esm/cli/agent/agent-web-list.js.map +1 -1
- package/esm/cli/app/app-delete.js +4 -4
- package/esm/cli/app/app-delete.js.map +1 -1
- package/esm/cli/app/app-export.js +6 -6
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/app/app-import.js +8 -8
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/app/app-list.js +2 -1
- package/esm/cli/app/app-list.js.map +1 -1
- package/esm/cli/conn/conn-delete.js +7 -1
- package/esm/cli/conn/conn-delete.js.map +1 -1
- package/esm/cli/conn/conn-save.js +9 -9
- package/esm/cli/conn/conn-save.js.map +1 -1
- package/esm/cli/email/email-template-export.js +6 -3
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +8 -4
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +2 -1
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-create.js +1 -1
- package/esm/cli/esv/esv-secret-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-delete.js +1 -1
- package/esm/cli/esv/esv-secret-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-describe.js +1 -1
- package/esm/cli/esv/esv-secret-describe.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +1 -1
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +1 -1
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-secret-set.js +1 -1
- package/esm/cli/esv/esv-secret-set.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js +1 -1
- package/esm/cli/esv/esv-secret-version-activate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-create.js +1 -1
- package/esm/cli/esv/esv-secret-version-create.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js +1 -1
- package/esm/cli/esv/esv-secret-version-deactivate.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js +1 -1
- package/esm/cli/esv/esv-secret-version-delete.js.map +1 -1
- package/esm/cli/esv/esv-secret-version-list.js +1 -1
- package/esm/cli/esv/esv-secret-version-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-create.js +1 -1
- package/esm/cli/esv/esv-variable-create.js.map +1 -1
- package/esm/cli/esv/esv-variable-delete.js +1 -1
- package/esm/cli/esv/esv-variable-delete.js.map +1 -1
- package/esm/cli/esv/esv-variable-describe.js +1 -1
- package/esm/cli/esv/esv-variable-describe.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +1 -1
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +1 -1
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-set.js +1 -1
- package/esm/cli/esv/esv-variable-set.js.map +1 -1
- package/esm/cli/idm/idm-count.js +2 -1
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +6 -3
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-import.js +8 -4
- package/esm/cli/idm/idm-import.js.map +1 -1
- package/esm/cli/idm/idm-list.js +2 -1
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idp/idp-export.js +6 -3
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +8 -4
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +2 -1
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +6 -7
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-describe.js +15 -9
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/journey/journey-export.js +6 -3
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/journey/journey-import.js +8 -4
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.js +2 -1
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/journey/journey-prune.js +3 -2
- package/esm/cli/journey/journey-prune.js.map +1 -1
- package/esm/cli/log/log-fetch.js +6 -2
- package/esm/cli/log/log-fetch.js.map +1 -1
- package/esm/cli/log/log-list.js +12 -3
- package/esm/cli/log/log-list.js.map +1 -1
- package/esm/cli/log/log-tail.js +6 -2
- package/esm/cli/log/log-tail.js.map +1 -1
- package/esm/cli/oauth/oauth-client-export.js +6 -6
- package/esm/cli/oauth/oauth-client-export.js.map +1 -1
- package/esm/cli/oauth/oauth-client-import.js +8 -8
- package/esm/cli/oauth/oauth-client-import.js.map +1 -1
- package/esm/cli/oauth/oauth-client-list.js +2 -1
- package/esm/cli/oauth/oauth-client-list.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +2 -1
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-export.js +6 -3
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/cli/saml/saml-import.js +8 -4
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +2 -1
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +10 -2
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/script/script-delete.js +10 -4
- package/esm/cli/script/script-delete.js.map +1 -1
- package/esm/cli/script/script-export.js +9 -13
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-import.js +19 -14
- package/esm/cli/script/script-import.js.map +1 -1
- package/esm/cli/service/service-delete.js +4 -2
- package/esm/cli/service/service-delete.js.map +1 -1
- package/esm/cli/service/service-export.js +6 -3
- package/esm/cli/service/service-export.js.map +1 -1
- package/esm/cli/service/service-import.js +8 -4
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/cli/service/service-list.js +2 -1
- package/esm/cli/service/service-list.js.map +1 -1
- package/esm/cli/shell/shell.js +2 -4
- package/esm/cli/shell/shell.js.map +1 -1
- package/esm/cli/theme/theme-delete.js +7 -4
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +8 -4
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +10 -5
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.js +2 -1
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/ops/AdminOps.js +790 -3
- package/esm/ops/AdminOps.js.map +1 -1
- package/esm/ops/AgentOps.js +638 -305
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/ApplicationOps.js +91 -79
- package/esm/ops/ApplicationOps.js.map +1 -1
- package/esm/ops/AuthenticateOps.js +4 -9
- package/esm/ops/AuthenticateOps.js.map +1 -1
- package/esm/ops/AuthenticationSettingsOps.js +22 -23
- package/esm/ops/AuthenticationSettingsOps.js.map +1 -1
- package/esm/ops/CirclesOfTrustOps.js +52 -55
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/ConfigOps.js +100 -84
- package/esm/ops/ConfigOps.js.map +1 -1
- package/esm/ops/ConnectionProfileOps.js +9 -7
- package/esm/ops/ConnectionProfileOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +64 -47
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +149 -117
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +76 -46
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +333 -238
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/LogOps.js +15 -23
- package/esm/ops/LogOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +43 -36
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/PolicyOps.js +104 -108
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +72 -78
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +84 -99
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +132 -88
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ScriptOps.js +90 -80
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/ServiceOps.js +125 -87
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +170 -139
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/{AdminFederationOps.js → cloud/AdminFederationOps.js} +10 -16
- package/esm/ops/cloud/AdminFederationOps.js.map +1 -0
- package/esm/ops/{SecretsOps.js → cloud/SecretsOps.js} +123 -129
- package/esm/ops/cloud/SecretsOps.js.map +1 -0
- package/esm/ops/{VariablesOps.js → cloud/VariablesOps.js} +48 -52
- package/esm/ops/cloud/VariablesOps.js.map +1 -0
- package/esm/ops/templates/OAuth2ClientTemplate.json +270 -0
- package/esm/ops/templates/OAuth2TrustedJwtIssuerTemplate.json +38 -0
- package/esm/ops/templates/OrgModelUserAttributesTemplate.json +149 -0
- package/esm/ops/templates/autoaccess/IPAddresses.json +202 -0
- package/esm/ops/templates/autoaccess/UserAgents.json +35 -0
- package/esm/ops/templates/autoaccess/Usernames.json +203 -0
- package/esm/ops/templates/cloud/GenericExtensionAttributesTemplate.json +392 -0
- package/esm/ops/templates/cloud/managed.json +4119 -0
- package/esm/ops/utils/OpsUtils.js.map +1 -1
- package/esm/utils/Console.js +31 -0
- package/esm/utils/Console.js.map +1 -1
- package/package.json +10 -6
- package/esm/ops/AdminFederationOps.js.map +0 -1
- package/esm/ops/SecretsOps.js.map +0 -1
- package/esm/ops/VariablesOps.js.map +0 -1
package/esm/ops/JourneyOps.js
CHANGED
|
@@ -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<
|
|
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
|
-
|
|
83
|
+
printError(error);
|
|
79
84
|
}
|
|
80
85
|
}
|
|
81
86
|
}
|
|
82
87
|
} catch (error) {
|
|
83
|
-
|
|
84
|
-
printMessage((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data, 'error');
|
|
88
|
+
printError(error);
|
|
85
89
|
}
|
|
86
|
-
return
|
|
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
|
-
|
|
132
|
-
|
|
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
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
294
|
-
|
|
295
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
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
|
-
|
|
470
|
-
|
|
471
|
-
|
|
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
|
-
|
|
475
|
-
|
|
476
|
-
|
|
495
|
+
// Journey Name
|
|
496
|
+
printMessage(`${getOneLineDescription(journeyData.tree)}`, 'data');
|
|
497
|
+
printMessage(Array(`[${journeyData.tree._id}]`['length']).fill('=').join(''));
|
|
477
498
|
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
499
|
+
// Description
|
|
500
|
+
if (journeyData.tree.description) {
|
|
501
|
+
printMessage(`\n${journeyData.tree.description}`, 'data');
|
|
502
|
+
}
|
|
482
503
|
|
|
483
|
-
|
|
484
|
-
|
|
504
|
+
// Status
|
|
505
|
+
printMessage(`\nStatus\n${journeyData.tree.enabled === false ? 'disabled'['brightRed'] : 'enabled'['brightGreen']}`);
|
|
485
506
|
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
507
|
+
// Classification
|
|
508
|
+
if (state.getAmVersion()) {
|
|
509
|
+
printMessage(`\nClassification\n${getJourneyClassification(journeyData).join(', ')}`, 'data');
|
|
510
|
+
}
|
|
490
511
|
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
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
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
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
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
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
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
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
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
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
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
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
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
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
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
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
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
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
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
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
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
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
|
-
|
|
607
|
-
|
|
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
|
-
|
|
610
|
-
|
|
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
|
-
|
|
615
|
-
|
|
616
|
-
|
|
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
|
-
|
|
620
|
-
|
|
645
|
+
// Description
|
|
646
|
+
if (journeyData.tree.description) {
|
|
647
|
+
printMessage(`\n${journeyData.tree.description}`, 'data');
|
|
648
|
+
}
|
|
621
649
|
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
printMessage(describeTreeDescendentsMd(descendents), 'data');
|
|
650
|
+
// Journey image
|
|
651
|
+
printMessage(`\n[]()\n`, 'data');
|
|
625
652
|
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
printMessage(
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
printMessage(
|
|
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
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
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
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
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
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
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
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
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
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
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
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
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
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
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
|
-
|
|
746
|
+
try {
|
|
747
|
+
await _enableJourney(journeyId);
|
|
702
748
|
stopProgressIndicator(indicatorId, `Enabled journey ${journeyId}.`, 'success');
|
|
703
749
|
return true;
|
|
704
|
-
}
|
|
750
|
+
} catch (error) {
|
|
705
751
|
stopProgressIndicator(indicatorId, `Error enabling journey ${journeyId}`, 'fail');
|
|
706
|
-
|
|
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
|
-
|
|
764
|
+
try {
|
|
765
|
+
await _disableJourney(journeyId);
|
|
712
766
|
stopProgressIndicator(indicatorId, `Disabled journey ${journeyId}.`, 'success');
|
|
713
767
|
return true;
|
|
714
|
-
}
|
|
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
|