@rockcarver/frodo-cli 2.0.0-40 → 2.0.0-42
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 +9 -1
- package/esm/cli/admin/admin-execute-rfc7523-authz-grant-flow.js.map +1 -1
- package/esm/cli/admin/admin-generate-rfc7523-authz-grant-artefacts.js.map +1 -1
- package/esm/cli/app/app-delete.js.map +1 -1
- package/esm/cli/app/app-describe.js.map +1 -1
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/app/app-import.js.map +1 -1
- package/esm/cli/app/app-list.js.map +1 -1
- package/esm/cli/app/app.js.map +1 -1
- package/esm/cli/config/config-export.js +5 -3
- package/esm/cli/config/config-export.js.map +1 -1
- package/esm/cli/config/config-import.js +37 -4
- package/esm/cli/config/config-import.js.map +1 -1
- package/esm/cli/config/config.js +1 -2
- package/esm/cli/config/config.js.map +1 -1
- package/esm/cli/idp/idp-import.js +13 -5
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/journey/journey-export.js +7 -4
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/saml/saml-import.js +13 -5
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/service/service-import.js +22 -5
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/ops/ApplicationOps.js +1 -1
- package/esm/ops/ApplicationOps.js.map +1 -1
- package/esm/ops/ConfigOps.js +39 -5
- package/esm/ops/ConfigOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +12 -17
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +41 -91
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +20 -8
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +10 -6
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +20 -8
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ServiceOps.js +30 -14
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +16 -23
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/utils/Config.js +13 -3
- package/esm/utils/Config.js.map +1 -1
- package/package.json +2 -2
package/esm/ops/JourneyOps.js
CHANGED
|
@@ -61,7 +61,8 @@ export async function listJourneys(long = false, analyze = false) {
|
|
|
61
61
|
for (const journeyStub of journeys) {
|
|
62
62
|
exportPromises.push(exportJourney(journeyStub['_id'], {
|
|
63
63
|
useStringArrays: false,
|
|
64
|
-
deps: false
|
|
64
|
+
deps: false,
|
|
65
|
+
coords: true
|
|
65
66
|
}));
|
|
66
67
|
}
|
|
67
68
|
const journeyExports = await Promise.all(exportPromises);
|
|
@@ -94,7 +95,8 @@ export async function listJourneys(long = false, analyze = false) {
|
|
|
94
95
|
*/
|
|
95
96
|
export async function exportJourneyToFile(journeyId, file, includeMeta = true, options = {
|
|
96
97
|
deps: false,
|
|
97
|
-
useStringArrays: false
|
|
98
|
+
useStringArrays: false,
|
|
99
|
+
coords: true
|
|
98
100
|
}) {
|
|
99
101
|
debugMessage(`exportJourneyToFile: start`);
|
|
100
102
|
const verbose = state.getVerbose();
|
|
@@ -123,7 +125,8 @@ export async function exportJourneyToFile(journeyId, file, includeMeta = true, o
|
|
|
123
125
|
*/
|
|
124
126
|
export async function exportJourneysToFile(file, includeMeta = true, options = {
|
|
125
127
|
deps: false,
|
|
126
|
-
useStringArrays: false
|
|
128
|
+
useStringArrays: false,
|
|
129
|
+
coords: true
|
|
127
130
|
}) {
|
|
128
131
|
if (!file) {
|
|
129
132
|
file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');
|
|
@@ -140,7 +143,8 @@ export async function exportJourneysToFile(file, includeMeta = true, options = {
|
|
|
140
143
|
*/
|
|
141
144
|
export async function exportJourneysToFiles(includeMeta = true, options = {
|
|
142
145
|
deps: false,
|
|
143
|
-
useStringArrays: false
|
|
146
|
+
useStringArrays: false,
|
|
147
|
+
coords: true
|
|
144
148
|
}) {
|
|
145
149
|
const journeysExport = await exportJourneys(options);
|
|
146
150
|
const trees = Object.entries(journeysExport.trees);
|
|
@@ -288,7 +292,7 @@ export async function importJourneysFromFile(file, options) {
|
|
|
288
292
|
const data = fs.readFileSync(getFilePath(file), 'utf8');
|
|
289
293
|
try {
|
|
290
294
|
const fileData = JSON.parse(data);
|
|
291
|
-
await importJourneys(fileData
|
|
295
|
+
await importJourneys(fileData, options);
|
|
292
296
|
} catch (error) {
|
|
293
297
|
if (error.name === 'UnresolvedDependenciesError') {
|
|
294
298
|
for (const journey of Object.keys(error.unresolvedJourneys)) {
|
|
@@ -322,7 +326,7 @@ export async function importJourneysFromFiles(options) {
|
|
|
322
326
|
allJourneysData.trees[journeyData.tree._id] = journeyData;
|
|
323
327
|
}
|
|
324
328
|
try {
|
|
325
|
-
await importJourneys(allJourneysData
|
|
329
|
+
await importJourneys(allJourneysData, options);
|
|
326
330
|
} catch (error) {
|
|
327
331
|
var _error$response2;
|
|
328
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');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JourneyOps.js","names":["frodo","state","fs","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","CirclesOfTrust","EmailTemplate","Idp","Node","Saml2","Script","Theme","cloneDeep","wordwrap","getTypedFilename","saveJsonToFile","getRealmString","getFilePath","getWorkingDirectory","utils","readJourneys","exportJourney","exportJourneys","resolveDependencies","importJourneys","importJourney","getTreeDescendents","getNodeRef","onlineTreeExportResolver","getJourneyClassification","_getJourneyClassification","disableJourney","_disableJourney","enableJourney","_enableJourney","authn","journey","listJourneys","long","analyze","journeys","journeyStub","table","_journeyStub$uiConfig","push","_id","enabled","uiConfig","categories","JSON","parse","join","toString","spinnerId","exportPromises","useStringArrays","deps","journeyExports","Promise","all","journeyExport","_journeyExport$tree$u","tree","error","response","data","_error$response","exportJourneyToFile","journeyId","file","includeMeta","options","verbose","getVerbose","filePath","fileData","exportJourneysToFile","exportJourneysToFiles","journeysExport","trees","Object","entries","treeId","treeValue","indicatorId","meta","importJourneyFromFile","readFileSync","journeyData","installedJourneys","map","x","unresolvedJourneys","resolvedJourneys","indicatorId1","keys","length","indicatorId2","importError","indicatorId3","importFirstJourneyFromFile","hasOwnProperty","call","depSpinnerId","importSpinnerId","importJourneysFromFile","name","message","type","importJourneysFromFiles","names","readdirSync","jsonFiles","filter","toLowerCase","endsWith","allJourneysData","_error$response2","it","getJourneyClassificationMd","getOneLineDescription","treeObj","description","getOneLineDescriptionMd","describeTreeDescendents","descendents","depth","values","indent","Array","fill","descendent","describeTreeDescendentsMd","markdown","describeJourney","resolveTreeExport","_journeyData$meta","_journeyData$tree$uiC","_journeyData$themes","allNodes","nodes","innerNodes","nodeTypeMap","nodeData","_type","getAmVersion","originAmVersion","setAmVersion","stack","nodeType","count","String","getNodeClassification","nodeObj","themes","themeData","scripts","scriptData","emailTemplates","templateData","socialIdentityProviders","socialIdpData","saml2Entities","entityProviderData","circlesOfTrust","cotData","describeJourneyMd","_journeyData$meta2","_journeyData$tree$uiC2","_journeyData$themes2","getNodeClassificationMd","getTableHeaderMd","getTableRowMd"],"sources":["../../src/ops/JourneyOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type NodeSkeleton } from '@rockcarver/frodo-lib/types/api/NodeApi';\nimport { type TreeSkeleton } from '@rockcarver/frodo-lib/types/api/TreeApi';\nimport {\n type JourneyClassificationType,\n type MultiTreeExportInterface,\n type SingleTreeExportInterface,\n type TreeDependencyMapInterface,\n type TreeExportOptions,\n type TreeExportResolverInterface,\n type TreeImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/JourneyOps';\nimport fs from 'fs';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport * as CirclesOfTrust from './CirclesOfTrustOps';\nimport * as EmailTemplate from './EmailTemplateOps';\nimport * as Idp from './IdpOps';\nimport * as Node from './NodeOps';\nimport * as Saml2 from './Saml2Ops';\nimport * as Script from './ScriptOps';\nimport * as Theme from './ThemeOps';\nimport { cloneDeep } from './utils/OpsUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n getTypedFilename,\n saveJsonToFile,\n getRealmString,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readJourneys,\n exportJourney,\n exportJourneys,\n resolveDependencies,\n importJourneys,\n importJourney,\n getTreeDescendents,\n getNodeRef,\n onlineTreeExportResolver,\n getJourneyClassification: _getJourneyClassification,\n disableJourney: _disableJourney,\n enableJourney: _enableJourney,\n} = frodo.authn.journey;\n\n/**\n * List all the journeys/trees\n * @param {boolean} long Long version, all the fields\n * @param {boolean} analyze Analyze journeys/trees for custom nodes (expensive)\n * @returns {Promise<TreeSkeleton[]>} a promise that resolves to an array journey objects\n */\nexport async function listJourneys(\n long = false,\n analyze = false\n): Promise<TreeSkeleton[]> {\n let journeys = [];\n try {\n journeys = await readJourneys();\n if (!long && !analyze) {\n for (const journeyStub of journeys) {\n printMessage(`${journeyStub['_id']}`, 'data');\n }\n } else {\n if (!analyze) {\n const table = createTable(['Name', 'Status', 'Tags']);\n for (const journeyStub of journeys) {\n table.push([\n `${journeyStub._id}`,\n journeyStub.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n journeyStub.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyStub.uiConfig.categories).join(', '),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Retrieving details of all journeys...`\n );\n const exportPromises = [];\n try {\n for (const journeyStub of journeys) {\n exportPromises.push(\n exportJourney(journeyStub['_id'], {\n useStringArrays: false,\n deps: false,\n })\n );\n }\n const journeyExports = await Promise.all(exportPromises);\n stopProgressIndicator(\n spinnerId,\n 'Retrieved details of all journeys.',\n 'success'\n );\n const table = createTable([\n 'Name',\n 'Status',\n 'Classification',\n 'Tags',\n ]);\n for (const journeyExport of journeyExports) {\n table.push([\n `${journeyExport.tree._id}`,\n journeyExport.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n getJourneyClassification(journeyExport).join(', '),\n journeyExport.tree.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyExport.tree.uiConfig.categories).join(\n ', '\n ),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n 'Error retrieving details of all journeys.',\n 'fail'\n );\n printMessage(error.response.data, 'error');\n }\n }\n }\n } catch (error) {\n printMessage(error.response?.data, 'error');\n }\n return journeys;\n}\n\n/**\n * Export journey by id/name to file\n * @param {string} journeyId journey id/name\n * @param {string} file optional export file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneyToFile(\n journeyId: string,\n file: string,\n includeMeta = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n }\n): Promise<void> {\n debugMessage(`exportJourneyToFile: start`);\n const verbose = state.getVerbose();\n if (!file) {\n file = getTypedFilename(journeyId, 'journey');\n }\n const filePath = getFilePath(file, true);\n let spinnerId: string;\n if (!verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n try {\n const fileData: SingleTreeExportInterface = await exportJourney(\n journeyId,\n options\n );\n if (verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n saveJsonToFile(fileData, filePath, includeMeta);\n stopProgressIndicator(\n spinnerId,\n `Exported ${journeyId['brightCyan']} to ${filePath['brightCyan']}.`,\n 'success'\n );\n } catch (error) {\n if (verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n stopProgressIndicator(\n spinnerId,\n `Error exporting journey ${journeyId}: ${error}`,\n 'fail'\n );\n }\n}\n\n/**\n * Export all journeys to file\n * @param {string} file optional export file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFile(\n file: string,\n includeMeta = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n }\n): Promise<void> {\n if (!file) {\n file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');\n }\n const filePath = getFilePath(file, true);\n const fileData: MultiTreeExportInterface = await exportJourneys(options);\n saveJsonToFile(fileData, filePath, includeMeta);\n}\n\n/**\n * Export all journeys to separate files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFiles(\n includeMeta = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n }\n): Promise<void> {\n const journeysExport = await exportJourneys(options);\n const trees = Object.entries(journeysExport.trees);\n for (const [treeId, treeValue] of trees) {\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Saving ${treeId}...`\n );\n const file = getFilePath(getTypedFilename(`${treeId}`, 'journey'), true);\n treeValue['meta'] = journeysExport.meta;\n try {\n updateProgressIndicator(indicatorId, `Saving ${treeId} to ${file}`);\n saveJsonToFile(treeValue, file, includeMeta);\n stopProgressIndicator(indicatorId, `${treeId} saved to ${file}`);\n } catch (error) {\n stopProgressIndicator(indicatorId, `Error saving ${treeId} to ${file}`);\n }\n }\n}\n\n/**\n * Import a journey from file\n * @param {string} journeyId journey id/name\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneyFromFile(\n journeyId: string,\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getVerbose();\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n let journeyData = JSON.parse(data);\n // check if this is a file with multiple trees and get journey by id\n if (journeyData.trees && journeyData.trees[journeyId]) {\n journeyData = journeyData.trees[journeyId];\n } else if (journeyData.trees) {\n journeyData = null;\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId === journeyData.tree._id) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n const indicatorId1 = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Resolving dependencies'\n );\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n stopProgressIndicator(\n indicatorId1,\n `Resolved all dependencies.`,\n 'success'\n );\n\n let indicatorId2: string;\n if (!verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n try {\n await importJourney(journeyData, options);\n if (verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(\n indicatorId2,\n `Imported ${journeyId}.`,\n 'success'\n );\n } catch (importError) {\n if (verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(indicatorId2, `${importError}`, 'fail');\n }\n } else {\n stopProgressIndicator(indicatorId1, `Unresolved dependencies:`, 'fail');\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n // end dependency resolution for single tree import\n } else {\n const indicatorId3 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(indicatorId3, `${journeyId} not found!`, 'fail');\n }\n } catch (error) {\n printMessage(`Error importing journey ${journeyId}: ${error}`, 'error');\n }\n}\n\n/**\n * Import first journey from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importFirstJourneyFromFile(\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getVerbose();\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n let journeyData = cloneDeep(JSON.parse(data));\n let journeyId = null;\n // single tree\n if (journeyData.tree) {\n journeyId = cloneDeep(journeyData.tree._id);\n }\n // multiple trees, so get the first tree\n else if (journeyData.trees) {\n for (const treeId in journeyData.trees) {\n if (Object.hasOwnProperty.call(journeyData.trees, treeId)) {\n journeyId = treeId;\n journeyData = journeyData.trees[treeId];\n break;\n }\n }\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n const depSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Resolving dependencies'\n );\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n stopProgressIndicator(\n depSpinnerId,\n `Resolved all dependencies.`,\n 'success'\n );\n\n let importSpinnerId: string;\n if (!verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n try {\n await importJourney(journeyData, options);\n if (verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(\n importSpinnerId,\n `Imported ${journeyId}.`,\n 'success'\n );\n } catch (importError) {\n if (verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(importSpinnerId, `${importError}`, 'fail');\n }\n } else {\n stopProgressIndicator(depSpinnerId, `Unresolved dependencies:`, 'fail');\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n } else {\n const importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing...`\n );\n stopProgressIndicator(importSpinnerId, `No journeys found!`, 'fail');\n }\n // end dependency resolution for single tree import\n } catch (error) {\n printMessage(`Error importing first journey: ${error}`, 'error');\n }\n}\n\n/**\n * Import all journeys from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFile(\n file: string,\n options: TreeImportOptions\n) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n try {\n const fileData = JSON.parse(data);\n await importJourneys(fileData.trees, options);\n } catch (error) {\n if (error.name === 'UnresolvedDependenciesError') {\n for (const journey of Object.keys(error.unresolvedJourneys)) {\n printMessage({\n message: ` - ${journey} requires ${error.unresolvedJourneys[journey]}`,\n type: 'info',\n state,\n });\n }\n } else {\n printMessage(`${error.message}`, 'error');\n }\n }\n } catch (error) {\n printMessage(`Error importing journeys: ${error}`, 'error');\n }\n}\n\n/**\n * Import all journeys from separate files\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFiles(options: TreeImportOptions) {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) => name.toLowerCase().endsWith('.journey.json'))\n .map((name) => getFilePath(name));\n const allJourneysData = { trees: {} };\n for (const file of jsonFiles) {\n const journeyData = JSON.parse(fs.readFileSync(file, 'utf8'));\n allJourneysData.trees[journeyData.tree._id] = journeyData;\n }\n try {\n await importJourneys(\n allJourneysData.trees as MultiTreeExportInterface,\n options\n );\n } catch (error) {\n printMessage(`${error.response?.data?.message || error.message}`, 'error');\n }\n}\n\n/**\n * Get journey classification\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassification(\n journey: SingleTreeExportInterface\n): JourneyClassificationType[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return it['brightGreen'];\n\n case 'cloud':\n return it['brightMagenta'];\n\n case 'custom':\n return it['brightRed'];\n\n case 'premium':\n return it['brightYellow'];\n }\n });\n}\n\n/**\n * Get journey classification in markdown\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassificationMd(\n journey: SingleTreeExportInterface\n): string[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return `:green_circle: \\`${it}\\``;\n\n case 'cloud':\n return `:purple_circle: \\`${it}\\``;\n\n case 'custom':\n return `:red_circle: \\`${it}\\``;\n\n case 'premium':\n return `:yellow_circle: \\`${it}\\``;\n }\n });\n}\n\n/**\n * Get a one-line description of the tree object\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(treeObj: TreeSkeleton): string {\n const description = `[${treeObj._id['brightCyan']}]`;\n return description;\n}\n\n/**\n * Get a one-line description of the tree object in markdown\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescriptionMd(treeObj: TreeSkeleton): string {\n const description = `${treeObj._id}`;\n return description;\n}\n\n/**\n * Helper function to render a nested list of dependent trees\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendents(\n descendents: TreeDependencyMapInterface,\n depth = 0\n) {\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n printMessage(\n `\\nInner Tree Dependencies (${Object.values(descendents)[0].length}):`,\n 'data'\n );\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n printMessage(`${indent}- ${tree['brightCyan']}`, 'data');\n for (const descendent of descendents[tree]) {\n describeTreeDescendents(descendent, depth + 1);\n }\n }\n}\n\n/**\n * Helper function to render a nested list of dependent trees in markdown\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendentsMd(\n descendents: TreeDependencyMapInterface,\n depth = 0\n): string {\n let markdown = '';\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n markdown += `## Inner Tree Dependencies (${\n Object.values(descendents)[0].length\n })\\n`;\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n markdown += `${indent}- ${tree}\\n`;\n for (const descendent of descendents[tree]) {\n markdown += describeTreeDescendentsMd(descendent, depth + 1);\n }\n return markdown;\n }\n return markdown;\n}\n\n/**\n * Describe a journey:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourney(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n): Promise<void> {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(`${getOneLineDescription(journeyData.tree)}`, 'data');\n printMessage(Array(`[${journeyData.tree._id}]`['length']).fill('=').join(''));\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Status\n printMessage(\n `\\nStatus\\n${\n journeyData.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen']\n }`\n );\n\n // Classification\n if (state.getAmVersion()) {\n printMessage(\n `\\nClassification\\n${getJourneyClassification(journeyData).join(', ')}`,\n 'data'\n );\n }\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage('\\nCategories/Tags', 'data');\n printMessage(\n `${JSON.parse(journeyData.tree.uiConfig.categories).join(', ')}`,\n 'data'\n );\n }\n\n // Dependency Tree\n try {\n const descendents = await getTreeDescendents(\n journeyData,\n resolveTreeExport\n );\n describeTreeDescendents(descendents);\n } catch (error) {\n printMessage(`Error resolving inner tree dependencies:`, 'error');\n printMessage(error.stack, 'error');\n }\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `\\nNode Types (${Object.entries(nodeTypeMap).length}):`,\n 'data'\n );\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `- ${String(count)} [${\n nodeType['brightCyan']\n }] (${Node.getNodeClassification(nodeType).join(', ')})`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`\\nNodes (${Object.entries(allNodes).length}):`, 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `- ${Node.getOneLineDescription(\n nodeObj,\n getNodeRef(nodeObj, journeyData)\n )}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`\\nThemes (${journeyData.themes.length}):`, 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`- ${Theme.getOneLineDescription(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `\\nScripts (${Object.entries(journeyData.scripts).length}):`,\n 'data'\n );\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`- ${Script.getOneLineDescription(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `\\nEmail Templates (${\n Object.entries(journeyData.emailTemplates).length\n }):`,\n 'data'\n );\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(\n `- ${EmailTemplate.getOneLineDescription(templateData)}`,\n 'data'\n );\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `\\nSocial Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n }):`,\n 'data'\n );\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`- ${Idp.getOneLineDescription(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `\\nSAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n }):`,\n 'data'\n );\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(\n `- ${Saml2.getOneLineDescription(entityProviderData)}`,\n 'data'\n );\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `\\nSAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n }):`,\n 'data'\n );\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(\n `- ${CirclesOfTrust.getOneLineDescription(cotData)}`,\n 'data'\n );\n }\n }\n}\n\n/**\n * Describe a journey in markdown:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourneyMd(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n) {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(\n `# ${getOneLineDescriptionMd(journeyData.tree)} - ${\n journeyData.tree.enabled === false\n ? ':o: `disabled`'\n : ':white_check_mark: `enabled`'\n }, ${getJourneyClassificationMd(journeyData).join(', ')}`,\n 'data'\n );\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage(\n `\\`${JSON.parse(journeyData.tree.uiConfig.categories).join('`, `')}\\``,\n 'data'\n );\n }\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Journey image\n printMessage(`\\n[]()\\n`, 'data');\n\n // Dependency Tree\n const descendents = await getTreeDescendents(journeyData, resolveTreeExport);\n printMessage(describeTreeDescendentsMd(descendents), 'data');\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `## Node Types (${Object.entries(nodeTypeMap).length})`,\n 'data'\n );\n printMessage('| Count | Type | Classification |', 'data');\n printMessage('| -----:| ---- | -------------- |', 'data');\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `| ${String(count)} | ${nodeType} | ${Node.getNodeClassificationMd(\n nodeType\n ).join('<br>')} |`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');\n printMessage(Node.getTableHeaderMd(), 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `${Node.getTableRowMd(nodeObj, getNodeRef(nodeObj, journeyData))}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`## Themes (${journeyData.themes.length})`, 'data');\n printMessage(Theme.getTableHeaderMd(), 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`${Theme.getTableRowMd(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `## Scripts (${Object.entries(journeyData.scripts).length})`,\n 'data'\n );\n printMessage(Script.getTableHeaderMd(), 'data');\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`${Script.getTableRowMd(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `## Email Templates (${\n Object.entries(journeyData.emailTemplates).length\n })`,\n 'data'\n );\n printMessage(EmailTemplate.getTableHeaderMd(), 'data');\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(`${EmailTemplate.getTableRowMd(templateData)}`, 'data');\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `## Social Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n })`,\n 'data'\n );\n printMessage(Idp.getTableHeaderMd(), 'data');\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`${Idp.getTableRowMd(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `## SAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n })`,\n 'data'\n );\n printMessage(Saml2.getTableHeaderMd(), 'data');\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(`${Saml2.getTableRowMd(entityProviderData)}`, 'data');\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `## SAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n })`,\n 'data'\n );\n printMessage(CirclesOfTrust.getTableHeaderMd(), 'data');\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(`${CirclesOfTrust.getTableRowMd(cotData)}`, 'data');\n }\n }\n}\n\nexport async function enableJourney(journeyId: string): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Enabling journey ${journeyId}...`\n );\n if (_enableJourney(journeyId)) {\n stopProgressIndicator(\n indicatorId,\n `Enabled journey ${journeyId}.`,\n 'success'\n );\n return true;\n } else {\n stopProgressIndicator(\n indicatorId,\n `Error enabling journey ${journeyId}`,\n 'fail'\n );\n return false;\n }\n}\n\nexport async function disableJourney(journeyId: string): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Disabling journey ${journeyId}...`\n );\n if (_disableJourney(journeyId)) {\n stopProgressIndicator(\n indicatorId,\n `Disabled journey ${journeyId}.`,\n 'success'\n );\n return true;\n } else {\n stopProgressIndicator(\n indicatorId,\n `Error disabling journey ${journeyId}`,\n 'fail'\n );\n return false;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JourneyOps.js","names":["frodo","state","fs","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","CirclesOfTrust","EmailTemplate","Idp","Node","Saml2","Script","Theme","cloneDeep","wordwrap","getTypedFilename","saveJsonToFile","getRealmString","getFilePath","getWorkingDirectory","utils","readJourneys","exportJourney","exportJourneys","resolveDependencies","importJourneys","importJourney","getTreeDescendents","getNodeRef","onlineTreeExportResolver","getJourneyClassification","_getJourneyClassification","disableJourney","_disableJourney","enableJourney","_enableJourney","authn","journey","listJourneys","long","analyze","journeys","journeyStub","table","_journeyStub$uiConfig","push","_id","enabled","uiConfig","categories","JSON","parse","join","toString","spinnerId","exportPromises","useStringArrays","deps","coords","journeyExports","Promise","all","journeyExport","_journeyExport$tree$u","tree","error","response","data","_error$response","exportJourneyToFile","journeyId","file","includeMeta","options","verbose","getVerbose","filePath","fileData","exportJourneysToFile","exportJourneysToFiles","journeysExport","trees","Object","entries","treeId","treeValue","indicatorId","meta","importJourneyFromFile","readFileSync","journeyData","installedJourneys","map","x","unresolvedJourneys","resolvedJourneys","indicatorId1","keys","length","indicatorId2","importError","indicatorId3","importFirstJourneyFromFile","hasOwnProperty","call","depSpinnerId","importSpinnerId","importJourneysFromFile","name","message","type","importJourneysFromFiles","names","readdirSync","jsonFiles","filter","toLowerCase","endsWith","allJourneysData","_error$response2","it","getJourneyClassificationMd","getOneLineDescription","treeObj","description","getOneLineDescriptionMd","describeTreeDescendents","descendents","depth","values","indent","Array","fill","descendent","describeTreeDescendentsMd","markdown","describeJourney","resolveTreeExport","_journeyData$meta","_journeyData$tree$uiC","_journeyData$themes","allNodes","nodes","innerNodes","nodeTypeMap","nodeData","_type","getAmVersion","originAmVersion","setAmVersion","stack","nodeType","count","String","getNodeClassification","nodeObj","themes","themeData","scripts","scriptData","emailTemplates","templateData","socialIdentityProviders","socialIdpData","saml2Entities","entityProviderData","circlesOfTrust","cotData","describeJourneyMd","_journeyData$meta2","_journeyData$tree$uiC2","_journeyData$themes2","getNodeClassificationMd","getTableHeaderMd","getTableRowMd"],"sources":["../../src/ops/JourneyOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type NodeSkeleton } from '@rockcarver/frodo-lib/types/api/NodeApi';\nimport { type TreeSkeleton } from '@rockcarver/frodo-lib/types/api/TreeApi';\nimport {\n type JourneyClassificationType,\n type MultiTreeExportInterface,\n type SingleTreeExportInterface,\n type TreeDependencyMapInterface,\n type TreeExportOptions,\n type TreeExportResolverInterface,\n type TreeImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/JourneyOps';\nimport fs from 'fs';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport * as CirclesOfTrust from './CirclesOfTrustOps';\nimport * as EmailTemplate from './EmailTemplateOps';\nimport * as Idp from './IdpOps';\nimport * as Node from './NodeOps';\nimport * as Saml2 from './Saml2Ops';\nimport * as Script from './ScriptOps';\nimport * as Theme from './ThemeOps';\nimport { cloneDeep } from './utils/OpsUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n getTypedFilename,\n saveJsonToFile,\n getRealmString,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readJourneys,\n exportJourney,\n exportJourneys,\n resolveDependencies,\n importJourneys,\n importJourney,\n getTreeDescendents,\n getNodeRef,\n onlineTreeExportResolver,\n getJourneyClassification: _getJourneyClassification,\n disableJourney: _disableJourney,\n enableJourney: _enableJourney,\n} = frodo.authn.journey;\n\n/**\n * List all the journeys/trees\n * @param {boolean} long Long version, all the fields\n * @param {boolean} analyze Analyze journeys/trees for custom nodes (expensive)\n * @returns {Promise<TreeSkeleton[]>} a promise that resolves to an array journey objects\n */\nexport async function listJourneys(\n long = false,\n analyze = false\n): Promise<TreeSkeleton[]> {\n let journeys = [];\n try {\n journeys = await readJourneys();\n if (!long && !analyze) {\n for (const journeyStub of journeys) {\n printMessage(`${journeyStub['_id']}`, 'data');\n }\n } else {\n if (!analyze) {\n const table = createTable(['Name', 'Status', 'Tags']);\n for (const journeyStub of journeys) {\n table.push([\n `${journeyStub._id}`,\n journeyStub.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n journeyStub.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyStub.uiConfig.categories).join(', '),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Retrieving details of all journeys...`\n );\n const exportPromises = [];\n try {\n for (const journeyStub of journeys) {\n exportPromises.push(\n exportJourney(journeyStub['_id'], {\n useStringArrays: false,\n deps: false,\n coords: true,\n })\n );\n }\n const journeyExports = await Promise.all(exportPromises);\n stopProgressIndicator(\n spinnerId,\n 'Retrieved details of all journeys.',\n 'success'\n );\n const table = createTable([\n 'Name',\n 'Status',\n 'Classification',\n 'Tags',\n ]);\n for (const journeyExport of journeyExports) {\n table.push([\n `${journeyExport.tree._id}`,\n journeyExport.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n getJourneyClassification(journeyExport).join(', '),\n journeyExport.tree.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyExport.tree.uiConfig.categories).join(\n ', '\n ),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n 'Error retrieving details of all journeys.',\n 'fail'\n );\n printMessage(error.response.data, 'error');\n }\n }\n }\n } catch (error) {\n printMessage(error.response?.data, 'error');\n }\n return journeys;\n}\n\n/**\n * Export journey by id/name to file\n * @param {string} journeyId journey id/name\n * @param {string} file optional export file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneyToFile(\n journeyId: string,\n file: string,\n includeMeta = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n coords: true,\n }\n): Promise<void> {\n debugMessage(`exportJourneyToFile: start`);\n const verbose = state.getVerbose();\n if (!file) {\n file = getTypedFilename(journeyId, 'journey');\n }\n const filePath = getFilePath(file, true);\n let spinnerId: string;\n if (!verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n try {\n const fileData: SingleTreeExportInterface = await exportJourney(\n journeyId,\n options\n );\n if (verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n saveJsonToFile(fileData, filePath, includeMeta);\n stopProgressIndicator(\n spinnerId,\n `Exported ${journeyId['brightCyan']} to ${filePath['brightCyan']}.`,\n 'success'\n );\n } catch (error) {\n if (verbose)\n spinnerId = createProgressIndicator('indeterminate', 0, `${journeyId}`);\n stopProgressIndicator(\n spinnerId,\n `Error exporting journey ${journeyId}: ${error}`,\n 'fail'\n );\n }\n}\n\n/**\n * Export all journeys to file\n * @param {string} file optional export file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFile(\n file: string,\n includeMeta = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n coords: true,\n }\n): Promise<void> {\n if (!file) {\n file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');\n }\n const filePath = getFilePath(file, true);\n const fileData: MultiTreeExportInterface = await exportJourneys(options);\n saveJsonToFile(fileData, filePath, includeMeta);\n}\n\n/**\n * Export all journeys to separate files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFiles(\n includeMeta = true,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n coords: true,\n }\n): Promise<void> {\n const journeysExport = await exportJourneys(options);\n const trees = Object.entries(journeysExport.trees);\n for (const [treeId, treeValue] of trees) {\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Saving ${treeId}...`\n );\n const file = getFilePath(getTypedFilename(`${treeId}`, 'journey'), true);\n treeValue['meta'] = journeysExport.meta;\n try {\n updateProgressIndicator(indicatorId, `Saving ${treeId} to ${file}`);\n saveJsonToFile(treeValue, file, includeMeta);\n stopProgressIndicator(indicatorId, `${treeId} saved to ${file}`);\n } catch (error) {\n stopProgressIndicator(indicatorId, `Error saving ${treeId} to ${file}`);\n }\n }\n}\n\n/**\n * Import a journey from file\n * @param {string} journeyId journey id/name\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneyFromFile(\n journeyId: string,\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getVerbose();\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n let journeyData = JSON.parse(data);\n // check if this is a file with multiple trees and get journey by id\n if (journeyData.trees && journeyData.trees[journeyId]) {\n journeyData = journeyData.trees[journeyId];\n } else if (journeyData.trees) {\n journeyData = null;\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId === journeyData.tree._id) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n const indicatorId1 = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Resolving dependencies'\n );\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n stopProgressIndicator(\n indicatorId1,\n `Resolved all dependencies.`,\n 'success'\n );\n\n let indicatorId2: string;\n if (!verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n try {\n await importJourney(journeyData, options);\n if (verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(\n indicatorId2,\n `Imported ${journeyId}.`,\n 'success'\n );\n } catch (importError) {\n if (verbose)\n indicatorId2 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(indicatorId2, `${importError}`, 'fail');\n }\n } else {\n stopProgressIndicator(indicatorId1, `Unresolved dependencies:`, 'fail');\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n // end dependency resolution for single tree import\n } else {\n const indicatorId3 = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(indicatorId3, `${journeyId} not found!`, 'fail');\n }\n } catch (error) {\n printMessage(`Error importing journey ${journeyId}: ${error}`, 'error');\n }\n}\n\n/**\n * Import first journey from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importFirstJourneyFromFile(\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getVerbose();\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n let journeyData = cloneDeep(JSON.parse(data));\n let journeyId = null;\n // single tree\n if (journeyData.tree) {\n journeyId = cloneDeep(journeyData.tree._id);\n }\n // multiple trees, so get the first tree\n else if (journeyData.trees) {\n for (const treeId in journeyData.trees) {\n if (Object.hasOwnProperty.call(journeyData.trees, treeId)) {\n journeyId = treeId;\n journeyData = journeyData.trees[treeId];\n break;\n }\n }\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n const depSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n 'Resolving dependencies'\n );\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n stopProgressIndicator(\n depSpinnerId,\n `Resolved all dependencies.`,\n 'success'\n );\n\n let importSpinnerId: string;\n if (!verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n try {\n await importJourney(journeyData, options);\n if (verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(\n importSpinnerId,\n `Imported ${journeyId}.`,\n 'success'\n );\n } catch (importError) {\n if (verbose)\n importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${journeyId}...`\n );\n stopProgressIndicator(importSpinnerId, `${importError}`, 'fail');\n }\n } else {\n stopProgressIndicator(depSpinnerId, `Unresolved dependencies:`, 'fail');\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n } else {\n const importSpinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing...`\n );\n stopProgressIndicator(importSpinnerId, `No journeys found!`, 'fail');\n }\n // end dependency resolution for single tree import\n } catch (error) {\n printMessage(`Error importing first journey: ${error}`, 'error');\n }\n}\n\n/**\n * Import all journeys from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFile(\n file: string,\n options: TreeImportOptions\n) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n try {\n const fileData = JSON.parse(data);\n await importJourneys(fileData, options);\n } catch (error) {\n if (error.name === 'UnresolvedDependenciesError') {\n for (const journey of Object.keys(error.unresolvedJourneys)) {\n printMessage({\n message: ` - ${journey} requires ${error.unresolvedJourneys[journey]}`,\n type: 'info',\n state,\n });\n }\n } else {\n printMessage(`${error.message}`, 'error');\n }\n }\n } catch (error) {\n printMessage(`Error importing journeys: ${error}`, 'error');\n }\n}\n\n/**\n * Import all journeys from separate files\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFiles(options: TreeImportOptions) {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) => name.toLowerCase().endsWith('.journey.json'))\n .map((name) => getFilePath(name));\n const allJourneysData = { trees: {} };\n for (const file of jsonFiles) {\n const journeyData = JSON.parse(fs.readFileSync(file, 'utf8'));\n allJourneysData.trees[journeyData.tree._id] = journeyData;\n }\n try {\n await importJourneys(allJourneysData as MultiTreeExportInterface, options);\n } catch (error) {\n printMessage(`${error.response?.data?.message || error.message}`, 'error');\n }\n}\n\n/**\n * Get journey classification\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassification(\n journey: SingleTreeExportInterface\n): JourneyClassificationType[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return it['brightGreen'];\n\n case 'cloud':\n return it['brightMagenta'];\n\n case 'custom':\n return it['brightRed'];\n\n case 'premium':\n return it['brightYellow'];\n }\n });\n}\n\n/**\n * Get journey classification in markdown\n * @param {SingleTreeExportInterface} journey journey export\n * @returns {string[]} Colored string array of classifications\n */\nexport function getJourneyClassificationMd(\n journey: SingleTreeExportInterface\n): string[] {\n return _getJourneyClassification(journey).map((it) => {\n switch (it) {\n case 'standard':\n return `:green_circle: \\`${it}\\``;\n\n case 'cloud':\n return `:purple_circle: \\`${it}\\``;\n\n case 'custom':\n return `:red_circle: \\`${it}\\``;\n\n case 'premium':\n return `:yellow_circle: \\`${it}\\``;\n }\n });\n}\n\n/**\n * Get a one-line description of the tree object\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(treeObj: TreeSkeleton): string {\n const description = `[${treeObj._id['brightCyan']}]`;\n return description;\n}\n\n/**\n * Get a one-line description of the tree object in markdown\n * @param {TreeSkeleton} treeObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescriptionMd(treeObj: TreeSkeleton): string {\n const description = `${treeObj._id}`;\n return description;\n}\n\n/**\n * Helper function to render a nested list of dependent trees\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendents(\n descendents: TreeDependencyMapInterface,\n depth = 0\n) {\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n printMessage(\n `\\nInner Tree Dependencies (${Object.values(descendents)[0].length}):`,\n 'data'\n );\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n printMessage(`${indent}- ${tree['brightCyan']}`, 'data');\n for (const descendent of descendents[tree]) {\n describeTreeDescendents(descendent, depth + 1);\n }\n }\n}\n\n/**\n * Helper function to render a nested list of dependent trees in markdown\n * @param {TreeDependencyMapInterface} descendents tree dependency map\n * @param {number} depth level of nesting\n */\nfunction describeTreeDescendentsMd(\n descendents: TreeDependencyMapInterface,\n depth = 0\n): string {\n let markdown = '';\n if (depth || Object.values(descendents)[0].length) {\n // heading\n if (depth === 0) {\n markdown += `## Inner Tree Dependencies (${\n Object.values(descendents)[0].length\n })\\n`;\n }\n const indent = Array(depth * 2)\n .fill(' ')\n .join('');\n const [tree] = Object.keys(descendents);\n markdown += `${indent}- ${tree}\\n`;\n for (const descendent of descendents[tree]) {\n markdown += describeTreeDescendentsMd(descendent, depth + 1);\n }\n return markdown;\n }\n return markdown;\n}\n\n/**\n * Describe a journey:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourney(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n): Promise<void> {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(`${getOneLineDescription(journeyData.tree)}`, 'data');\n printMessage(Array(`[${journeyData.tree._id}]`['length']).fill('=').join(''));\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Status\n printMessage(\n `\\nStatus\\n${\n journeyData.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen']\n }`\n );\n\n // Classification\n if (state.getAmVersion()) {\n printMessage(\n `\\nClassification\\n${getJourneyClassification(journeyData).join(', ')}`,\n 'data'\n );\n }\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage('\\nCategories/Tags', 'data');\n printMessage(\n `${JSON.parse(journeyData.tree.uiConfig.categories).join(', ')}`,\n 'data'\n );\n }\n\n // Dependency Tree\n try {\n const descendents = await getTreeDescendents(\n journeyData,\n resolveTreeExport\n );\n describeTreeDescendents(descendents);\n } catch (error) {\n printMessage(`Error resolving inner tree dependencies:`, 'error');\n printMessage(error.stack, 'error');\n }\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `\\nNode Types (${Object.entries(nodeTypeMap).length}):`,\n 'data'\n );\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `- ${String(count)} [${\n nodeType['brightCyan']\n }] (${Node.getNodeClassification(nodeType).join(', ')})`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`\\nNodes (${Object.entries(allNodes).length}):`, 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `- ${Node.getOneLineDescription(\n nodeObj,\n getNodeRef(nodeObj, journeyData)\n )}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`\\nThemes (${journeyData.themes.length}):`, 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`- ${Theme.getOneLineDescription(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `\\nScripts (${Object.entries(journeyData.scripts).length}):`,\n 'data'\n );\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`- ${Script.getOneLineDescription(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `\\nEmail Templates (${\n Object.entries(journeyData.emailTemplates).length\n }):`,\n 'data'\n );\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(\n `- ${EmailTemplate.getOneLineDescription(templateData)}`,\n 'data'\n );\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `\\nSocial Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n }):`,\n 'data'\n );\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`- ${Idp.getOneLineDescription(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `\\nSAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n }):`,\n 'data'\n );\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(\n `- ${Saml2.getOneLineDescription(entityProviderData)}`,\n 'data'\n );\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `\\nSAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n }):`,\n 'data'\n );\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(\n `- ${CirclesOfTrust.getOneLineDescription(cotData)}`,\n 'data'\n );\n }\n }\n}\n\n/**\n * Describe a journey in markdown:\n * - Properties, tags, description, name, metadata\n * - Inner tree dependency tree\n * - Node type summary\n * - Nodes\n * - Themes\n * - Scripts\n * - Email templates\n * - Social identity providers\n * - SAML2 entity providers\n * - SAML2 circles of trust\n * @param {SingleTreeExportInterface} journeyData journey export object\n * @param {TreeExportResolverInterface} resolveTreeExport tree export resolver callback function\n */\nexport async function describeJourneyMd(\n journeyData: SingleTreeExportInterface,\n resolveTreeExport: TreeExportResolverInterface = onlineTreeExportResolver\n) {\n const allNodes = {\n ...journeyData.nodes,\n ...journeyData.innerNodes,\n };\n const nodeTypeMap = {};\n\n for (const nodeData of Object.values(allNodes)) {\n if (nodeTypeMap[nodeData._type._id]) {\n nodeTypeMap[nodeData._type._id] += 1;\n } else {\n nodeTypeMap[nodeData._type._id] = 1;\n }\n }\n\n // initialize AM version from file\n if (!state.getAmVersion() && journeyData.meta?.originAmVersion) {\n state.setAmVersion(journeyData.meta.originAmVersion);\n }\n\n // Journey Name\n printMessage(\n `# ${getOneLineDescriptionMd(journeyData.tree)} - ${\n journeyData.tree.enabled === false\n ? ':o: `disabled`'\n : ':white_check_mark: `enabled`'\n }, ${getJourneyClassificationMd(journeyData).join(', ')}`,\n 'data'\n );\n\n // Categories/Tags\n if (\n journeyData.tree.uiConfig?.categories &&\n journeyData.tree.uiConfig.categories != '[]'\n ) {\n printMessage(\n `\\`${JSON.parse(journeyData.tree.uiConfig.categories).join('`, `')}\\``,\n 'data'\n );\n }\n\n // Description\n if (journeyData.tree.description) {\n printMessage(`\\n${journeyData.tree.description}`, 'data');\n }\n\n // Journey image\n printMessage(`\\n[]()\\n`, 'data');\n\n // Dependency Tree\n const descendents = await getTreeDescendents(journeyData, resolveTreeExport);\n printMessage(describeTreeDescendentsMd(descendents), 'data');\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `## Node Types (${Object.entries(nodeTypeMap).length})`,\n 'data'\n );\n printMessage('| Count | Type | Classification |', 'data');\n printMessage('| -----:| ---- | -------------- |', 'data');\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `| ${String(count)} | ${nodeType} | ${Node.getNodeClassificationMd(\n nodeType\n ).join('<br>')} |`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');\n printMessage(Node.getTableHeaderMd(), 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `${Node.getTableRowMd(nodeObj, getNodeRef(nodeObj, journeyData))}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`## Themes (${journeyData.themes.length})`, 'data');\n printMessage(Theme.getTableHeaderMd(), 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`${Theme.getTableRowMd(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `## Scripts (${Object.entries(journeyData.scripts).length})`,\n 'data'\n );\n printMessage(Script.getTableHeaderMd(), 'data');\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`${Script.getTableRowMd(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `## Email Templates (${\n Object.entries(journeyData.emailTemplates).length\n })`,\n 'data'\n );\n printMessage(EmailTemplate.getTableHeaderMd(), 'data');\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(`${EmailTemplate.getTableRowMd(templateData)}`, 'data');\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `## Social Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n })`,\n 'data'\n );\n printMessage(Idp.getTableHeaderMd(), 'data');\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`${Idp.getTableRowMd(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `## SAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n })`,\n 'data'\n );\n printMessage(Saml2.getTableHeaderMd(), 'data');\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(`${Saml2.getTableRowMd(entityProviderData)}`, 'data');\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `## SAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n })`,\n 'data'\n );\n printMessage(CirclesOfTrust.getTableHeaderMd(), 'data');\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(`${CirclesOfTrust.getTableRowMd(cotData)}`, 'data');\n }\n }\n}\n\nexport async function enableJourney(journeyId: string): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Enabling journey ${journeyId}...`\n );\n if (_enableJourney(journeyId)) {\n stopProgressIndicator(\n indicatorId,\n `Enabled journey ${journeyId}.`,\n 'success'\n );\n return true;\n } else {\n stopProgressIndicator(\n indicatorId,\n `Error enabling journey ${journeyId}`,\n 'fail'\n );\n return false;\n }\n}\n\nexport async function disableJourney(journeyId: string): Promise<boolean> {\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Disabling journey ${journeyId}...`\n );\n if (_disableJourney(journeyId)) {\n stopProgressIndicator(\n indicatorId,\n `Disabled journey ${journeyId}.`,\n 'success'\n );\n return true;\n } else {\n stopProgressIndicator(\n indicatorId,\n `Error disabling journey ${journeyId}`,\n 'fail'\n );\n return false;\n }\n}\n"],"mappings":"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"}
|
package/esm/ops/Saml2Ops.js
CHANGED
|
@@ -216,14 +216,17 @@ export async function exportSaml2ProvidersToFiles(includeMeta = true) {
|
|
|
216
216
|
* Import a SAML entity provider by entity id from file
|
|
217
217
|
* @param {String} entityId Provider entity id
|
|
218
218
|
* @param {String} file Import file name
|
|
219
|
+
* @param {Saml2ProviderImportOptions} options import options
|
|
219
220
|
*/
|
|
220
|
-
export async function importSaml2ProviderFromFile(entityId, file
|
|
221
|
+
export async function importSaml2ProviderFromFile(entityId, file, options = {
|
|
222
|
+
deps: true
|
|
223
|
+
}) {
|
|
221
224
|
try {
|
|
222
225
|
const data = fs.readFileSync(getFilePath(file), 'utf8');
|
|
223
226
|
const fileData = JSON.parse(data);
|
|
224
227
|
const indicatorId = createProgressIndicator('indeterminate', 0, `Importing ${entityId}...`);
|
|
225
228
|
try {
|
|
226
|
-
await importSaml2Provider(entityId, fileData);
|
|
229
|
+
await importSaml2Provider(entityId, fileData, options);
|
|
227
230
|
stopProgressIndicator(indicatorId, `Imported ${entityId}.`, 'success');
|
|
228
231
|
} catch (error) {
|
|
229
232
|
stopProgressIndicator(indicatorId, `Error importing ${entityId}: ${error.message}`, 'fail');
|
|
@@ -236,8 +239,11 @@ export async function importSaml2ProviderFromFile(entityId, file) {
|
|
|
236
239
|
/**
|
|
237
240
|
* Import a SAML entity provider by entity id from file
|
|
238
241
|
* @param {String} file Import file name
|
|
242
|
+
* @param {Saml2ProviderImportOptions} options import options
|
|
239
243
|
*/
|
|
240
|
-
export async function importFirstSaml2ProviderFromFile(file
|
|
244
|
+
export async function importFirstSaml2ProviderFromFile(file, options = {
|
|
245
|
+
deps: true
|
|
246
|
+
}) {
|
|
241
247
|
try {
|
|
242
248
|
const data = fs.readFileSync(getFilePath(file), 'utf8');
|
|
243
249
|
const fileData = JSON.parse(data);
|
|
@@ -246,7 +252,7 @@ export async function importFirstSaml2ProviderFromFile(file) {
|
|
|
246
252
|
const entityId = decodeBase64(entityId64);
|
|
247
253
|
const indicatorId = createProgressIndicator('indeterminate', 0, `Importing ${entityId}...`);
|
|
248
254
|
try {
|
|
249
|
-
await importSaml2Provider(entityId, fileData);
|
|
255
|
+
await importSaml2Provider(entityId, fileData, options);
|
|
250
256
|
stopProgressIndicator(indicatorId, `Imported ${entityId}.`, 'success');
|
|
251
257
|
} catch (error) {
|
|
252
258
|
stopProgressIndicator(indicatorId, `Error importing ${entityId}: ${error.message}`, 'fail');
|
|
@@ -259,13 +265,16 @@ export async function importFirstSaml2ProviderFromFile(file) {
|
|
|
259
265
|
/**
|
|
260
266
|
* Import all SAML entity providers from file
|
|
261
267
|
* @param {String} file Import file name
|
|
268
|
+
* @param {Saml2ProviderImportOptions} options import options
|
|
262
269
|
*/
|
|
263
|
-
export async function importSaml2ProvidersFromFile(file
|
|
270
|
+
export async function importSaml2ProvidersFromFile(file, options = {
|
|
271
|
+
deps: true
|
|
272
|
+
}) {
|
|
264
273
|
try {
|
|
265
274
|
const data = fs.readFileSync(getFilePath(file), 'utf8');
|
|
266
275
|
const fileData = JSON.parse(data);
|
|
267
276
|
if (validateImport(fileData.meta)) {
|
|
268
|
-
await importSaml2Providers(fileData);
|
|
277
|
+
await importSaml2Providers(fileData, options);
|
|
269
278
|
} else {
|
|
270
279
|
printMessage('Import validation failed...', 'error');
|
|
271
280
|
}
|
|
@@ -276,8 +285,11 @@ export async function importSaml2ProvidersFromFile(file) {
|
|
|
276
285
|
|
|
277
286
|
/**
|
|
278
287
|
* Import all SAML entity providers from all *.saml.json files in the current directory
|
|
288
|
+
* @param {Saml2ProviderImportOptions} options import options
|
|
279
289
|
*/
|
|
280
|
-
export async function importSaml2ProvidersFromFiles(
|
|
290
|
+
export async function importSaml2ProvidersFromFiles(options = {
|
|
291
|
+
deps: true
|
|
292
|
+
}) {
|
|
281
293
|
const names = fs.readdirSync(getWorkingDirectory());
|
|
282
294
|
const jsonFiles = names.filter(name => name.toLowerCase().endsWith('.saml.json')).map(name => getFilePath(name));
|
|
283
295
|
const indicatorId = createProgressIndicator('determinate', jsonFiles.length, 'Importing providers...');
|
|
@@ -287,7 +299,7 @@ export async function importSaml2ProvidersFromFiles() {
|
|
|
287
299
|
const data = fs.readFileSync(file, 'utf8');
|
|
288
300
|
const fileData = JSON.parse(data);
|
|
289
301
|
if (validateImport(fileData.meta)) {
|
|
290
|
-
const result = await importSaml2Providers(fileData);
|
|
302
|
+
const result = await importSaml2Providers(fileData, options);
|
|
291
303
|
total += result.length;
|
|
292
304
|
updateProgressIndicator(indicatorId, `Imported ${result.length} provider(s) from ${file}.`);
|
|
293
305
|
} else {
|
package/esm/ops/Saml2Ops.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Saml2Ops.js","names":["frodo","fs","createObjectTable","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","decodeBase64","saveTextToFile","getFilePath","getWorkingDirectory","utils","getTypedFilename","saveJsonToFile","getRealmString","validateImport","readSaml2ProviderStubs","readSaml2Provider","readSaml2ProviderStub","getSaml2ProviderMetadataUrl","getSaml2ProviderMetadata","exportSaml2Provider","exportSaml2Providers","importSaml2Provider","importSaml2Providers","saml2","entityProvider","roleMap","identityProvider","serviceProvider","attributeQueryProvider","xacmlPolicyEnforcementPoint","getOneLineDescription","saml2ProviderObj","roles","key","value","Object","entries","push","description","entityId","entityLocation","length","join","getTableHeaderMd","markdown","getTableRowMd","row","listSaml2Providers","long","providerList","sort","a","b","_id","localeCompare","provider","table","location","map","role","toString","describeSaml2Provider","stub","rawProviderData","_rev","metadataUrl","error","message","exportSaml2MetadataToFile","file","filePath","indicatorId","metaData","brightCyan","exportSaml2ProviderToFile","includeMeta","fileData","err","exportSaml2ProvidersToFile","exportData","_error$response","response","status","exportSaml2ProvidersToFiles","stubs","importSaml2ProviderFromFile","data","readFileSync","JSON","parse","importFirstSaml2ProviderFromFile","entityId64","keys","saml","remote","hosted","importSaml2ProvidersFromFile","meta","importSaml2ProvidersFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","total","result"],"sources":["../../src/ops/Saml2Ops.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { type Saml2ProviderSkeleton } from '@rockcarver/frodo-lib/types/api/Saml2Api';\nimport { type Saml2ExportInterface } from '@rockcarver/frodo-lib/types/ops/Saml2Ops';\nimport fs from 'fs';\n\nimport {\n createObjectTable,\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\n\nconst { decodeBase64, saveTextToFile, getFilePath, getWorkingDirectory } =\n frodo.utils;\nconst { getTypedFilename, saveJsonToFile, getRealmString, validateImport } =\n frodo.utils;\nconst {\n readSaml2ProviderStubs,\n readSaml2Provider,\n readSaml2ProviderStub,\n getSaml2ProviderMetadataUrl,\n getSaml2ProviderMetadata,\n exportSaml2Provider,\n exportSaml2Providers,\n importSaml2Provider,\n importSaml2Providers,\n} = frodo.saml2.entityProvider;\n\nconst roleMap = {\n identityProvider: 'IDP',\n serviceProvider: 'SP',\n attributeQueryProvider: 'AttrQuery',\n xacmlPolicyEnforcementPoint: 'XACML PEP',\n};\n\n/**\n * Get a one-line description of the saml2 provider object\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n saml2ProviderObj: Saml2ProviderSkeleton\n): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const description = `[${saml2ProviderObj.entityId['brightCyan']}]${\n ' (' + saml2ProviderObj.entityLocation\n }${roles.length ? ' ' + roles.join(', ') + ')' : ')'}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Entity Id | Location | Role(s) |\\n';\n markdown += '| --------- | -------- | ------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the saml2 provider in markdown\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a table-row of the saml2 provider in markdown\n */\nexport function getTableRowMd(saml2ProviderObj: Saml2ProviderSkeleton): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const row = `| ${saml2ProviderObj.entityId} | ${\n saml2ProviderObj.entityLocation\n } | ${roles.length ? roles.join(', ') : ''} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {boolean} long Long list format with details\n */\nexport async function listSaml2Providers(long = false) {\n const providerList = await readSaml2ProviderStubs();\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const provider of providerList) {\n printMessage(`${provider.entityId}`, 'data');\n }\n } else {\n const table = createTable([\n 'Entity Id'['brightCyan'],\n 'Location'['brightCyan'],\n 'Role(s)'['brightCyan'],\n ]);\n for (const provider of providerList) {\n table.push([\n provider.entityId,\n provider.location,\n provider.roles.map((role) => roleMap[role]).join(', '),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n}\n\n/**\n * Describe an entity provider's configuration\n * @param {String} entityId Provider entity id\n */\nexport async function describeSaml2Provider(entityId) {\n try {\n const stub = await readSaml2ProviderStub(entityId);\n const { location } = stub;\n const roles = stub.roles.map((role: string) => roleMap[role]).join(', ');\n const rawProviderData = await readSaml2Provider(entityId);\n delete rawProviderData._id;\n delete rawProviderData._rev;\n rawProviderData.location = location;\n rawProviderData.roles = roles;\n rawProviderData.metadataUrl = getSaml2ProviderMetadataUrl(entityId);\n const table = createObjectTable(rawProviderData);\n printMessage(table.toString(), 'data');\n } catch (error) {\n printMessage(error.message, 'error');\n }\n}\n\n/**\n * Export provider metadata to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2MetadataToFile(entityId, file = null) {\n if (!file) {\n file = getTypedFilename(entityId, 'metadata', 'xml');\n }\n const filePath = getFilePath(file, true);\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting metadata for: ${entityId}`\n );\n try {\n updateProgressIndicator(indicatorId, `Writing file ${filePath}`);\n const metaData = await getSaml2ProviderMetadata(entityId);\n saveTextToFile(metaData, filePath);\n updateProgressIndicator(indicatorId, `Exported provider ${entityId}`);\n stopProgressIndicator(\n indicatorId,\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${entityId.brightCyan} metadata to ${filePath.brightCyan}.`\n );\n } catch (error) {\n stopProgressIndicator(indicatorId, `${error}`);\n printMessage(error, 'error');\n }\n}\n\n/**\n * Export a single entity provider to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportSaml2ProviderToFile(\n entityId,\n file = null,\n includeMeta = true\n) {\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`\n );\n if (!file) {\n file = getTypedFilename(entityId, 'saml');\n }\n const filePath = getFilePath(file, true);\n let indicatorId: string;\n try {\n indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting provider ${entityId}`\n );\n const fileData = await exportSaml2Provider(entityId);\n saveJsonToFile(fileData, filePath, includeMeta);\n updateProgressIndicator(indicatorId, `Exported provider ${entityId}`);\n stopProgressIndicator(\n indicatorId,\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${entityId.brightCyan} to ${filePath.brightCyan}.`\n );\n } catch (err) {\n stopProgressIndicator(indicatorId, `${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: end [entityId=${entityId}, file=${filePath}]`\n );\n}\n\n/**\n * Export all entity providers to one file\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportSaml2ProvidersToFile(\n file = null,\n includeMeta = true\n) {\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);\n if (!file) {\n file = getTypedFilename(`all${getRealmString()}Providers`, 'saml');\n }\n try {\n const exportData = await exportSaml2Providers();\n saveJsonToFile(exportData, getFilePath(file, true), includeMeta);\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [file=${file}]`);\n}\n\n/**\n * Export all entity providers to individual files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportSaml2ProvidersToFiles(includeMeta = true) {\n const stubs = await readSaml2ProviderStubs();\n if (stubs.length > 0) {\n const indicatorId = createProgressIndicator(\n 'determinate',\n stubs.length,\n 'Exporting providers'\n );\n for (const stub of stubs) {\n const file = getFilePath(getTypedFilename(stub.entityId, 'saml'), true);\n const fileData = await exportSaml2Provider(stub.entityId);\n saveJsonToFile(fileData, file, includeMeta);\n updateProgressIndicator(\n indicatorId,\n `Exported provider ${stub.entityId}`\n );\n }\n stopProgressIndicator(indicatorId, `${stubs.length} providers exported.`);\n } else {\n printMessage('No entity providers found.', 'info');\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} entityId Provider entity id\n * @param {String} file Import file name\n */\nexport async function importSaml2ProviderFromFile(\n entityId: string,\n file: string\n) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${entityId}...`\n );\n try {\n await importSaml2Provider(entityId, fileData);\n stopProgressIndicator(indicatorId, `Imported ${entityId}.`, 'success');\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing ${entityId}: ${error.message}`,\n 'fail'\n );\n }\n } catch (error) {\n printMessage(\n `Error importing saml2 provider ${entityId}: ${error}`,\n 'error'\n );\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} file Import file name\n */\nexport async function importFirstSaml2ProviderFromFile(file: string) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data) as Saml2ExportInterface;\n // pick the first provider and run with it\n const entityId64 =\n Object.keys(fileData.saml.remote)[0] ||\n Object.keys(fileData.saml.hosted)[0];\n const entityId = decodeBase64(entityId64);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${entityId}...`\n );\n try {\n await importSaml2Provider(entityId, fileData);\n stopProgressIndicator(indicatorId, `Imported ${entityId}.`, 'success');\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing ${entityId}: ${error.message}`,\n 'fail'\n );\n }\n } catch (error) {\n printMessage(`Error importing first saml2 provider: ${error}`, 'error');\n }\n}\n\n/**\n * Import all SAML entity providers from file\n * @param {String} file Import file name\n */\nexport async function importSaml2ProvidersFromFile(file: string) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n await importSaml2Providers(fileData);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n } catch (error) {\n printMessage(`Error importing saml2 providers: ${error}`, 'error');\n }\n}\n\n/**\n * Import all SAML entity providers from all *.saml.json files in the current directory\n */\nexport async function importSaml2ProvidersFromFiles() {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) => name.toLowerCase().endsWith('.saml.json'))\n .map((name) => getFilePath(name));\n const indicatorId = createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing providers...'\n );\n let total = 0;\n for (const file of jsonFiles) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n const result = await importSaml2Providers(fileData);\n total += result.length;\n updateProgressIndicator(\n indicatorId,\n `Imported ${result.length} provider(s) from ${file}.`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n } catch (error) {\n printMessage(\n `Error importing providers from ${file}: ${error.message}`,\n 'error'\n );\n }\n }\n stopProgressIndicator(\n indicatorId,\n `Imported ${total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Saml2Ops.js","names":["frodo","fs","createObjectTable","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","decodeBase64","saveTextToFile","getFilePath","getWorkingDirectory","utils","getTypedFilename","saveJsonToFile","getRealmString","validateImport","readSaml2ProviderStubs","readSaml2Provider","readSaml2ProviderStub","getSaml2ProviderMetadataUrl","getSaml2ProviderMetadata","exportSaml2Provider","exportSaml2Providers","importSaml2Provider","importSaml2Providers","saml2","entityProvider","roleMap","identityProvider","serviceProvider","attributeQueryProvider","xacmlPolicyEnforcementPoint","getOneLineDescription","saml2ProviderObj","roles","key","value","Object","entries","push","description","entityId","entityLocation","length","join","getTableHeaderMd","markdown","getTableRowMd","row","listSaml2Providers","long","providerList","sort","a","b","_id","localeCompare","provider","table","location","map","role","toString","describeSaml2Provider","stub","rawProviderData","_rev","metadataUrl","error","message","exportSaml2MetadataToFile","file","filePath","indicatorId","metaData","brightCyan","exportSaml2ProviderToFile","includeMeta","fileData","err","exportSaml2ProvidersToFile","exportData","_error$response","response","status","exportSaml2ProvidersToFiles","stubs","importSaml2ProviderFromFile","options","deps","data","readFileSync","JSON","parse","importFirstSaml2ProviderFromFile","entityId64","keys","saml","remote","hosted","importSaml2ProvidersFromFile","meta","importSaml2ProvidersFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","total","result"],"sources":["../../src/ops/Saml2Ops.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { type Saml2ProviderSkeleton } from '@rockcarver/frodo-lib/types/api/Saml2Api';\nimport {\n type Saml2ExportInterface,\n type Saml2ProviderImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/Saml2Ops';\nimport fs from 'fs';\n\nimport {\n createObjectTable,\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\n\nconst { decodeBase64, saveTextToFile, getFilePath, getWorkingDirectory } =\n frodo.utils;\nconst { getTypedFilename, saveJsonToFile, getRealmString, validateImport } =\n frodo.utils;\nconst {\n readSaml2ProviderStubs,\n readSaml2Provider,\n readSaml2ProviderStub,\n getSaml2ProviderMetadataUrl,\n getSaml2ProviderMetadata,\n exportSaml2Provider,\n exportSaml2Providers,\n importSaml2Provider,\n importSaml2Providers,\n} = frodo.saml2.entityProvider;\n\nconst roleMap = {\n identityProvider: 'IDP',\n serviceProvider: 'SP',\n attributeQueryProvider: 'AttrQuery',\n xacmlPolicyEnforcementPoint: 'XACML PEP',\n};\n\n/**\n * Get a one-line description of the saml2 provider object\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n saml2ProviderObj: Saml2ProviderSkeleton\n): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const description = `[${saml2ProviderObj.entityId['brightCyan']}]${\n ' (' + saml2ProviderObj.entityLocation\n }${roles.length ? ' ' + roles.join(', ') + ')' : ')'}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Entity Id | Location | Role(s) |\\n';\n markdown += '| --------- | -------- | ------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the saml2 provider in markdown\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a table-row of the saml2 provider in markdown\n */\nexport function getTableRowMd(saml2ProviderObj: Saml2ProviderSkeleton): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const row = `| ${saml2ProviderObj.entityId} | ${\n saml2ProviderObj.entityLocation\n } | ${roles.length ? roles.join(', ') : ''} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {boolean} long Long list format with details\n */\nexport async function listSaml2Providers(long = false) {\n const providerList = await readSaml2ProviderStubs();\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const provider of providerList) {\n printMessage(`${provider.entityId}`, 'data');\n }\n } else {\n const table = createTable([\n 'Entity Id'['brightCyan'],\n 'Location'['brightCyan'],\n 'Role(s)'['brightCyan'],\n ]);\n for (const provider of providerList) {\n table.push([\n provider.entityId,\n provider.location,\n provider.roles.map((role) => roleMap[role]).join(', '),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n}\n\n/**\n * Describe an entity provider's configuration\n * @param {String} entityId Provider entity id\n */\nexport async function describeSaml2Provider(entityId) {\n try {\n const stub = await readSaml2ProviderStub(entityId);\n const { location } = stub;\n const roles = stub.roles.map((role: string) => roleMap[role]).join(', ');\n const rawProviderData = await readSaml2Provider(entityId);\n delete rawProviderData._id;\n delete rawProviderData._rev;\n rawProviderData.location = location;\n rawProviderData.roles = roles;\n rawProviderData.metadataUrl = getSaml2ProviderMetadataUrl(entityId);\n const table = createObjectTable(rawProviderData);\n printMessage(table.toString(), 'data');\n } catch (error) {\n printMessage(error.message, 'error');\n }\n}\n\n/**\n * Export provider metadata to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2MetadataToFile(entityId, file = null) {\n if (!file) {\n file = getTypedFilename(entityId, 'metadata', 'xml');\n }\n const filePath = getFilePath(file, true);\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting metadata for: ${entityId}`\n );\n try {\n updateProgressIndicator(indicatorId, `Writing file ${filePath}`);\n const metaData = await getSaml2ProviderMetadata(entityId);\n saveTextToFile(metaData, filePath);\n updateProgressIndicator(indicatorId, `Exported provider ${entityId}`);\n stopProgressIndicator(\n indicatorId,\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${entityId.brightCyan} metadata to ${filePath.brightCyan}.`\n );\n } catch (error) {\n stopProgressIndicator(indicatorId, `${error}`);\n printMessage(error, 'error');\n }\n}\n\n/**\n * Export a single entity provider to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportSaml2ProviderToFile(\n entityId,\n file = null,\n includeMeta = true\n) {\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`\n );\n if (!file) {\n file = getTypedFilename(entityId, 'saml');\n }\n const filePath = getFilePath(file, true);\n let indicatorId: string;\n try {\n indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting provider ${entityId}`\n );\n const fileData = await exportSaml2Provider(entityId);\n saveJsonToFile(fileData, filePath, includeMeta);\n updateProgressIndicator(indicatorId, `Exported provider ${entityId}`);\n stopProgressIndicator(\n indicatorId,\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${entityId.brightCyan} to ${filePath.brightCyan}.`\n );\n } catch (err) {\n stopProgressIndicator(indicatorId, `${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: end [entityId=${entityId}, file=${filePath}]`\n );\n}\n\n/**\n * Export all entity providers to one file\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportSaml2ProvidersToFile(\n file = null,\n includeMeta = true\n) {\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);\n if (!file) {\n file = getTypedFilename(`all${getRealmString()}Providers`, 'saml');\n }\n try {\n const exportData = await exportSaml2Providers();\n saveJsonToFile(exportData, getFilePath(file, true), includeMeta);\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [file=${file}]`);\n}\n\n/**\n * Export all entity providers to individual files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportSaml2ProvidersToFiles(includeMeta = true) {\n const stubs = await readSaml2ProviderStubs();\n if (stubs.length > 0) {\n const indicatorId = createProgressIndicator(\n 'determinate',\n stubs.length,\n 'Exporting providers'\n );\n for (const stub of stubs) {\n const file = getFilePath(getTypedFilename(stub.entityId, 'saml'), true);\n const fileData = await exportSaml2Provider(stub.entityId);\n saveJsonToFile(fileData, file, includeMeta);\n updateProgressIndicator(\n indicatorId,\n `Exported provider ${stub.entityId}`\n );\n }\n stopProgressIndicator(indicatorId, `${stubs.length} providers exported.`);\n } else {\n printMessage('No entity providers found.', 'info');\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} entityId Provider entity id\n * @param {String} file Import file name\n * @param {Saml2ProviderImportOptions} options import options\n */\nexport async function importSaml2ProviderFromFile(\n entityId: string,\n file: string,\n options: Saml2ProviderImportOptions = { deps: true }\n) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${entityId}...`\n );\n try {\n await importSaml2Provider(entityId, fileData, options);\n stopProgressIndicator(indicatorId, `Imported ${entityId}.`, 'success');\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing ${entityId}: ${error.message}`,\n 'fail'\n );\n }\n } catch (error) {\n printMessage(\n `Error importing saml2 provider ${entityId}: ${error}`,\n 'error'\n );\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} file Import file name\n * @param {Saml2ProviderImportOptions} options import options\n */\nexport async function importFirstSaml2ProviderFromFile(\n file: string,\n options: Saml2ProviderImportOptions = { deps: true }\n) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data) as Saml2ExportInterface;\n // pick the first provider and run with it\n const entityId64 =\n Object.keys(fileData.saml.remote)[0] ||\n Object.keys(fileData.saml.hosted)[0];\n const entityId = decodeBase64(entityId64);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing ${entityId}...`\n );\n try {\n await importSaml2Provider(entityId, fileData, options);\n stopProgressIndicator(indicatorId, `Imported ${entityId}.`, 'success');\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing ${entityId}: ${error.message}`,\n 'fail'\n );\n }\n } catch (error) {\n printMessage(`Error importing first saml2 provider: ${error}`, 'error');\n }\n}\n\n/**\n * Import all SAML entity providers from file\n * @param {String} file Import file name\n * @param {Saml2ProviderImportOptions} options import options\n */\nexport async function importSaml2ProvidersFromFile(\n file: string,\n options: Saml2ProviderImportOptions = { deps: true }\n) {\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n await importSaml2Providers(fileData, options);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n } catch (error) {\n printMessage(`Error importing saml2 providers: ${error}`, 'error');\n }\n}\n\n/**\n * Import all SAML entity providers from all *.saml.json files in the current directory\n * @param {Saml2ProviderImportOptions} options import options\n */\nexport async function importSaml2ProvidersFromFiles(\n options: Saml2ProviderImportOptions = { deps: true }\n) {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) => name.toLowerCase().endsWith('.saml.json'))\n .map((name) => getFilePath(name));\n const indicatorId = createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing providers...'\n );\n let total = 0;\n for (const file of jsonFiles) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n const result = await importSaml2Providers(fileData, options);\n total += result.length;\n updateProgressIndicator(\n indicatorId,\n `Imported ${result.length} provider(s) from ${file}.`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n } catch (error) {\n printMessage(\n `Error importing providers from ${file}: ${error.message}`,\n 'error'\n );\n }\n }\n stopProgressIndicator(\n indicatorId,\n `Imported ${total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n"],"mappings":"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"}
|