@rockcarver/frodo-cli 2.0.0-23 → 2.0.0-24

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 CHANGED
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.0.0-23] - 2023-10-14
11
+
10
12
  ## [2.0.0-22] - 2023-10-12
11
13
 
12
14
  ## [2.0.0-21] - 2023-10-11
@@ -1359,7 +1361,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1359
1361
  - Fixed problem with adding connection profiles
1360
1362
  - Miscellaneous bug fixes
1361
1363
 
1362
- [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-22...HEAD
1364
+ [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-23...HEAD
1365
+
1366
+ [2.0.0-23]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-22...v2.0.0-23
1363
1367
 
1364
1368
  [2.0.0-22]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-21...v2.0.0-22
1365
1369
 
@@ -0,0 +1,33 @@
1
+ import { frodo, state } from '@rockcarver/frodo-lib';
2
+ import { Option } from 'commander';
3
+ import { printMessage } from '../../utils/Console.js';
4
+ import { FrodoCommand } from '../FrodoCommand.js';
5
+ const {
6
+ getTokens
7
+ } = frodo.login;
8
+ const {
9
+ trainAA
10
+ } = frodo.admin;
11
+ const program = new FrodoCommand('frodo admin train-auto-access-model');
12
+ program.description('Train Auto Access model.').addOption(new Option('--api-key <key>', 'API key to authenticate to training journey.').default('')).addOption(new Option('--api-secret <secret>', 'API secret to authenticate to training journey.').default('')).addOption(new Option('--usernames [usernames]', 'Comma-delimited list of custom usernames.').default('')).addOption(new Option('--user-agents [usernames]', 'Comma-delimited list of custom user agents.').default('')).addOption(new Option('--ip-addresses [usernames]', 'Comma-delimited list of custom IP addresses.').default('')).action(
13
+ // implement command logic inside action handler
14
+ async (host, realm, user, password, options, command) => {
15
+ command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
16
+ if (await getTokens()) {
17
+ printMessage(`Training Auto Access model in realm "${state.getRealm()}"...`);
18
+ try {
19
+ await trainAA(options.apiKey, options.apiSecret, options.usernames.split(','), options.userAgents.split(','), options.ipAddresses.split(','), 100);
20
+ printMessage(`Done.`);
21
+ } catch (error) {
22
+ printMessage(error, 'error');
23
+ process.exitCode = 1;
24
+ }
25
+ } else {
26
+ process.exitCode = 1;
27
+ }
28
+ }
29
+ // end command logic inside action handler
30
+ );
31
+
32
+ program.parse();
33
+ //# sourceMappingURL=admin-train-auto-access-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-train-auto-access-model.js","names":["frodo","state","Option","printMessage","FrodoCommand","getTokens","login","trainAA","admin","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","getRealm","apiKey","apiSecret","usernames","split","userAgents","ipAddresses","error","process","exitCode","parse"],"sources":["../../../src/cli/admin/admin-train-auto-access-model.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { printMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand.js';\n\nconst { getTokens } = frodo.login;\nconst { trainAA } = frodo.admin;\n\nconst program = new FrodoCommand('frodo admin train-auto-access-model');\n\nprogram\n .description('Train Auto Access model.')\n .addOption(\n new Option(\n '--api-key <key>',\n 'API key to authenticate to training journey.'\n ).default('')\n )\n .addOption(\n new Option(\n '--api-secret <secret>',\n 'API secret to authenticate to training journey.'\n ).default('')\n )\n .addOption(\n new Option(\n '--usernames [usernames]',\n 'Comma-delimited list of custom usernames.'\n ).default('')\n )\n .addOption(\n new Option(\n '--user-agents [usernames]',\n 'Comma-delimited list of custom user agents.'\n ).default('')\n )\n .addOption(\n new Option(\n '--ip-addresses [usernames]',\n 'Comma-delimited list of custom IP addresses.'\n ).default('')\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n printMessage(\n `Training Auto Access model in realm \"${state.getRealm()}\"...`\n );\n try {\n await trainAA(\n options.apiKey,\n options.apiSecret,\n options.usernames.split(','),\n options.userAgents.split(','),\n options.ipAddresses.split(','),\n 100\n );\n printMessage(`Done.`);\n } catch (error) {\n printMessage(error, 'error');\n process.exitCode = 1;\n }\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,YAAY,QAAQ,oBAAoB;AAEjD,MAAM;EAAEC;AAAU,CAAC,GAAGL,KAAK,CAACM,KAAK;AACjC,MAAM;EAAEC;AAAQ,CAAC,GAAGP,KAAK,CAACQ,KAAK;AAE/B,MAAMC,OAAO,GAAG,IAAIL,YAAY,CAAC,qCAAqC,CAAC;AAEvEK,OAAO,CACJC,WAAW,CAAC,0BAA0B,CAAC,CACvCC,SAAS,CACR,IAAIT,MAAM,CACR,iBAAiB,EACjB,8CACF,CAAC,CAACU,OAAO,CAAC,EAAE,CACd,CAAC,CACAD,SAAS,CACR,IAAIT,MAAM,CACR,uBAAuB,EACvB,iDACF,CAAC,CAACU,OAAO,CAAC,EAAE,CACd,CAAC,CACAD,SAAS,CACR,IAAIT,MAAM,CACR,yBAAyB,EACzB,2CACF,CAAC,CAACU,OAAO,CAAC,EAAE,CACd,CAAC,CACAD,SAAS,CACR,IAAIT,MAAM,CACR,2BAA2B,EAC3B,6CACF,CAAC,CAACU,OAAO,CAAC,EAAE,CACd,CAAC,CACAD,SAAS,CACR,IAAIT,MAAM,CACR,4BAA4B,EAC5B,8CACF,CAAC,CAACU,OAAO,CAAC,EAAE,CACd,CAAC,CACAC,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMd,SAAS,CAAC,CAAC,EAAE;IACrBF,YAAY,CACT,wCAAuCF,KAAK,CAACoB,QAAQ,CAAC,CAAE,MAC3D,CAAC;IACD,IAAI;MACF,MAAMd,OAAO,CACXW,OAAO,CAACI,MAAM,EACdJ,OAAO,CAACK,SAAS,EACjBL,OAAO,CAACM,SAAS,CAACC,KAAK,CAAC,GAAG,CAAC,EAC5BP,OAAO,CAACQ,UAAU,CAACD,KAAK,CAAC,GAAG,CAAC,EAC7BP,OAAO,CAACS,WAAW,CAACF,KAAK,CAAC,GAAG,CAAC,EAC9B,GACF,CAAC;MACDtB,YAAY,CAAE,OAAM,CAAC;IACvB,CAAC,CAAC,OAAOyB,KAAK,EAAE;MACdzB,YAAY,CAACyB,KAAK,EAAE,OAAO,CAAC;MAC5BC,OAAO,CAACC,QAAQ,GAAG,CAAC;IACtB;EACF,CAAC,MAAM;IACLD,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHrB,OAAO,CAACsB,KAAK,CAAC,CAAC"}
@@ -17,6 +17,9 @@ export default function setup() {
17
17
  program.command('hide-generic-extension-attributes', 'Hide generic extension attributes.');
18
18
  program.command('show-generic-extension-attributes', 'Show generic extension attributes.');
19
19
  program.command('repair-org-model', 'Repair org model.');
20
+
21
+ // program.command('train-auto-access-model', 'Train Auto Access model.');
22
+
20
23
  return program;
21
24
  }
22
25
  //# sourceMappingURL=admin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","names":["path","fileURLToPath","FrodoStubCommand","__dirname","dirname","import","meta","url","setup","program","description","executableDir","command"],"sources":["../../../src/cli/admin/admin.ts"],"sourcesContent":["import path from 'path';\nimport { fileURLToPath } from 'url';\n\nimport { FrodoStubCommand } from '../FrodoCommand';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport default function setup() {\n const program = new FrodoStubCommand('admin')\n .description('Platform admin tasks.')\n .executableDir(__dirname);\n\n program.command('federation', 'Manage admin federation configuration.');\n\n program.command(\n 'create-oauth2-client-with-admin-privileges',\n 'Create an oauth2 client with admin privileges.'\n );\n\n program.command(\n 'get-access-token',\n 'Get an access token using client credentials grant type.'\n );\n\n program.command(\n 'list-oauth2-clients-with-admin-privileges',\n 'List oauth2 clients with admin privileges.'\n );\n\n program.command(\n 'grant-oauth2-client-admin-privileges',\n 'Grant an oauth2 client admin privileges.'\n );\n\n program.command(\n 'revoke-oauth2-client-admin-privileges',\n 'Revoke admin privileges from an oauth2 client.'\n );\n\n program.command(\n 'list-oauth2-clients-with-custom-privileges',\n 'List oauth2 clients with custom privileges.'\n );\n\n program.command(\n 'list-static-user-mappings',\n 'List all subjects of static user mappings that are not oauth2 clients.'\n );\n\n program.command(\n 'remove-static-user-mapping',\n \"Remove a subject's static user mapping.\"\n );\n\n program.command(\n 'add-autoid-static-user-mapping',\n 'Add AutoId static user mapping to enable dashboards and other AutoId-based functionality.'\n );\n\n program.command(\n 'hide-generic-extension-attributes',\n 'Hide generic extension attributes.'\n );\n\n program.command(\n 'show-generic-extension-attributes',\n 'Show generic extension attributes.'\n );\n\n program.command('repair-org-model', 'Repair org model.');\n\n return program;\n}\n"],"mappings":"AAAA,OAAOA,IAAI,MAAM,MAAM;AACvB,SAASC,aAAa,QAAQ,KAAK;AAEnC,SAASC,gBAAgB,QAAQ,iBAAiB;AAElD,MAAMC,SAAS,GAAGH,IAAI,CAACI,OAAO,CAACH,aAAa,CAACI,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC;AAE9D,eAAe,SAASC,KAAKA,CAAA,EAAG;EAC9B,MAAMC,OAAO,GAAG,IAAIP,gBAAgB,CAAC,OAAO,CAAC,CAC1CQ,WAAW,CAAC,uBAAuB,CAAC,CACpCC,aAAa,CAACR,SAAS,CAAC;EAE3BM,OAAO,CAACG,OAAO,CAAC,YAAY,EAAE,wCAAwC,CAAC;EAEvEH,OAAO,CAACG,OAAO,CACb,4CAA4C,EAC5C,gDACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,kBAAkB,EAClB,0DACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,2CAA2C,EAC3C,4CACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,sCAAsC,EACtC,0CACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,uCAAuC,EACvC,gDACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,4CAA4C,EAC5C,6CACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,2BAA2B,EAC3B,wEACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,4BAA4B,EAC5B,yCACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,gCAAgC,EAChC,2FACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,mCAAmC,EACnC,oCACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,mCAAmC,EACnC,oCACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;EAExD,OAAOH,OAAO;AAChB"}
1
+ {"version":3,"file":"admin.js","names":["path","fileURLToPath","FrodoStubCommand","__dirname","dirname","import","meta","url","setup","program","description","executableDir","command"],"sources":["../../../src/cli/admin/admin.ts"],"sourcesContent":["import path from 'path';\nimport { fileURLToPath } from 'url';\n\nimport { FrodoStubCommand } from '../FrodoCommand';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport default function setup() {\n const program = new FrodoStubCommand('admin')\n .description('Platform admin tasks.')\n .executableDir(__dirname);\n\n program.command('federation', 'Manage admin federation configuration.');\n\n program.command(\n 'create-oauth2-client-with-admin-privileges',\n 'Create an oauth2 client with admin privileges.'\n );\n\n program.command(\n 'get-access-token',\n 'Get an access token using client credentials grant type.'\n );\n\n program.command(\n 'list-oauth2-clients-with-admin-privileges',\n 'List oauth2 clients with admin privileges.'\n );\n\n program.command(\n 'grant-oauth2-client-admin-privileges',\n 'Grant an oauth2 client admin privileges.'\n );\n\n program.command(\n 'revoke-oauth2-client-admin-privileges',\n 'Revoke admin privileges from an oauth2 client.'\n );\n\n program.command(\n 'list-oauth2-clients-with-custom-privileges',\n 'List oauth2 clients with custom privileges.'\n );\n\n program.command(\n 'list-static-user-mappings',\n 'List all subjects of static user mappings that are not oauth2 clients.'\n );\n\n program.command(\n 'remove-static-user-mapping',\n \"Remove a subject's static user mapping.\"\n );\n\n program.command(\n 'add-autoid-static-user-mapping',\n 'Add AutoId static user mapping to enable dashboards and other AutoId-based functionality.'\n );\n\n program.command(\n 'hide-generic-extension-attributes',\n 'Hide generic extension attributes.'\n );\n\n program.command(\n 'show-generic-extension-attributes',\n 'Show generic extension attributes.'\n );\n\n program.command('repair-org-model', 'Repair org model.');\n\n // program.command('train-auto-access-model', 'Train Auto Access model.');\n\n return program;\n}\n"],"mappings":"AAAA,OAAOA,IAAI,MAAM,MAAM;AACvB,SAASC,aAAa,QAAQ,KAAK;AAEnC,SAASC,gBAAgB,QAAQ,iBAAiB;AAElD,MAAMC,SAAS,GAAGH,IAAI,CAACI,OAAO,CAACH,aAAa,CAACI,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC;AAE9D,eAAe,SAASC,KAAKA,CAAA,EAAG;EAC9B,MAAMC,OAAO,GAAG,IAAIP,gBAAgB,CAAC,OAAO,CAAC,CAC1CQ,WAAW,CAAC,uBAAuB,CAAC,CACpCC,aAAa,CAACR,SAAS,CAAC;EAE3BM,OAAO,CAACG,OAAO,CAAC,YAAY,EAAE,wCAAwC,CAAC;EAEvEH,OAAO,CAACG,OAAO,CACb,4CAA4C,EAC5C,gDACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,kBAAkB,EAClB,0DACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,2CAA2C,EAC3C,4CACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,sCAAsC,EACtC,0CACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,uCAAuC,EACvC,gDACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,4CAA4C,EAC5C,6CACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,2BAA2B,EAC3B,wEACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,4BAA4B,EAC5B,yCACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,gCAAgC,EAChC,2FACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,mCAAmC,EACnC,oCACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CACb,mCAAmC,EACnC,oCACF,CAAC;EAEDH,OAAO,CAACG,OAAO,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;;EAExD;;EAEA,OAAOH,OAAO;AAChB"}
@@ -180,7 +180,6 @@ export async function exportEmailTemplatesToFiles() {
180
180
  * @param {boolean} raw import raw data file lacking frodo export envelop
181
181
  */
182
182
  export async function importEmailTemplateFromFile(templateId, file, raw = false) {
183
- // eslint-disable-next-line no-param-reassign
184
183
  templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');
185
184
  const filePath = getFilePath(file);
186
185
  fs.readFile(filePath, 'utf8', async (err, data) => {
@@ -188,7 +187,7 @@ export async function importEmailTemplateFromFile(templateId, file, raw = false)
188
187
  const fileData = JSON.parse(data);
189
188
  if (raw || validateImport(fileData.meta)) {
190
189
  createProgressIndicator('determinate', 1, `Importing ${templateId}`);
191
- if (fileData.emailTemplate[templateId] || raw && fileData._id === templateId) {
190
+ if (fileData.emailTemplate && fileData.emailTemplate[templateId] || raw && getTemplateIdFromFileName(file) === templateId) {
192
191
  try {
193
192
  const emailTemplateData = raw ? s2sConvert(fileData) : fileData.emailTemplate[templateId];
194
193
  await updateEmailTemplate(templateId, emailTemplateData);
@@ -242,11 +241,13 @@ export async function importEmailTemplatesFromFile(file) {
242
241
  * @param {string} file file name
243
242
  * @returns {string} email template id/name
244
243
  */
245
- function readEmailTemplateIdFromFile(file) {
246
- debugMessage(`cli.EmailTemplateOps.readEmailTemplateIdFromFile: file=${file}`);
247
- const fileName = path.basename(file);
248
- const templateId = fileName.substring(14, fileName.indexOf('.'));
249
- debugMessage(`cli.EmailTemplateOps.readEmailTemplateIdFromFile: templateId=${templateId}`);
244
+ function getTemplateIdFromFileName(file) {
245
+ debugMessage(`cli.EmailTemplateOps.getTemplateIdFromFileName: file=${file}`);
246
+ const basename = path.basename(file);
247
+ const keys = basename.split('-');
248
+ if (keys[0] !== EMAIL_TEMPLATE_TYPE || keys.length <= 1) throw new Error(`Filename does not indicate a raw email template: ${file}`);
249
+ const templateId = keys[1].split('.')[0];
250
+ debugMessage(`cli.EmailTemplateOps.getTemplateIdFromFileName: templateId=${templateId}`);
250
251
  return templateId;
251
252
  }
252
253
 
@@ -285,7 +286,7 @@ export async function importEmailTemplatesFromFiles(raw = false) {
285
286
  let errors = 0;
286
287
  if (raw) {
287
288
  total++;
288
- const templateId = readEmailTemplateIdFromFile(file);
289
+ const templateId = getTemplateIdFromFileName(file);
289
290
  try {
290
291
  const templateData = s2sConvert(fileData);
291
292
  await updateEmailTemplate(templateId, templateData);
@@ -328,18 +329,18 @@ export async function importFirstEmailTemplateFromFile(file, raw = false) {
328
329
  fs.readFile(getFilePath(file), 'utf8', async (err, data) => {
329
330
  if (err) throw err;
330
331
  const fileData = JSON.parse(data);
331
- if (raw && file.startsWith('emailTemplate-') || validateImport(fileData.meta)) {
332
+ if (raw || validateImport(fileData.meta)) {
332
333
  showSpinner(`Importing first email template`);
333
334
  if (raw) {
334
- const templateId = readEmailTemplateIdFromFile(file);
335
335
  try {
336
+ const templateId = getTemplateIdFromFileName(file);
336
337
  const templateData = s2sConvert(fileData);
337
338
  await updateEmailTemplate(templateId, templateData);
338
339
  succeedSpinner(`Imported ${templateId}`);
339
- } catch (updateEmailTemplateError) {
340
- var _updateEmailTemplateE2;
341
- failSpinner(`Error importing ${templateId}`);
342
- printMessage((_updateEmailTemplateE2 = updateEmailTemplateError.response) === null || _updateEmailTemplateE2 === void 0 ? void 0 : _updateEmailTemplateE2.data, 'error');
340
+ } catch (error) {
341
+ var _error$response;
342
+ failSpinner(`Error importing email template: ${error}`);
343
+ printMessage((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data, 'error');
343
344
  }
344
345
  } else {
345
346
  for (const id in fileData.emailTemplate) {
@@ -348,9 +349,9 @@ export async function importFirstEmailTemplateFromFile(file, raw = false) {
348
349
  await updateEmailTemplate(id.replace(regexEmailTemplateType, ''), fileData.emailTemplate[id]);
349
350
  succeedSpinner(`Imported ${id}`);
350
351
  } catch (updateEmailTemplateError) {
351
- var _updateEmailTemplateE3;
352
+ var _updateEmailTemplateE2;
352
353
  failSpinner(`Error importing ${id}`);
353
- printMessage((_updateEmailTemplateE3 = updateEmailTemplateError.response) === null || _updateEmailTemplateE3 === void 0 ? void 0 : _updateEmailTemplateE3.data, 'error');
354
+ printMessage((_updateEmailTemplateE2 = updateEmailTemplateError.response) === null || _updateEmailTemplateE2 === void 0 ? void 0 : _updateEmailTemplateE2.data, 'error');
354
355
  }
355
356
  break;
356
357
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EmailTemplateOps.js","names":["frodo","fs","path","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressIndicator","succeedSpinner","updateProgressIndicator","getTypedFilename","saveJsonToFile","cloneDeep","wordwrap","validateImport","getFilePath","getWorkingDirectory","utils","EMAIL_TEMPLATE_TYPE","readEmailTemplates","readEmailTemplate","updateEmailTemplate","email","template","EMAIL_TEMPLATE_FILE_TYPE","regexEmailTemplateType","RegExp","getFileDataTemplate","meta","emailTemplate","getOneLineDescription","templateObj","description","_id","split","displayName","defaultLocale","subject","Object","values","getTableHeaderMd","markdown","getTableRowMd","templateId","replace","locales","keys","length","filter","locale","join","row","name","listEmailTemplates","long","emailTemplates","error","message","sort","a","b","localeCompare","entries","table","push","enabled","from","toString","exportEmailTemplateToFile","file","fileName","filePath","templateData","fileData","err","exportEmailTemplatesToFile","templates","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","readFile","data","JSON","parse","emailTemplateData","s2sConvert","updateEmailTemplateError","importEmailTemplatesFromFile","id","hasOwnProperty","call","response","readEmailTemplateIdFromFile","basename","substring","indexOf","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","map","total","totalErrors","readFileSync","errors","_updateEmailTemplateE","importFirstEmailTemplateFromFile","_updateEmailTemplateE2","_updateEmailTemplateE3"],"sources":["../../src/ops/EmailTemplateOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { EmailTemplateSkeleton } from '@rockcarver/frodo-lib/types/ops/EmailTemplateOps';\nimport fs from 'fs';\nimport path from 'path';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';\nimport { cloneDeep } from './utils/OpsUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst { validateImport, getFilePath, getWorkingDirectory } = frodo.utils;\nconst {\n EMAIL_TEMPLATE_TYPE,\n readEmailTemplates,\n readEmailTemplate,\n updateEmailTemplate,\n} = frodo.email.template;\n\nconst EMAIL_TEMPLATE_FILE_TYPE = 'template.email';\n\nconst regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n emailTemplate: {},\n };\n}\n\n/**\n * Get a one-line description of the email template\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n templateObj: EmailTemplateSkeleton\n): string {\n const description = `[${templateObj._id.split('/')[1]['brightCyan']}] ${\n templateObj.displayName ? templateObj.displayName : ''\n } - ${\n templateObj.defaultLocale\n ? templateObj.subject[templateObj.defaultLocale]\n : Object.values(templateObj.subject)[0]\n }`;\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 += '| Display Name | Locale(s) | Subject | Id |\\n';\n markdown += '| ------------ | --------- | ------- | ---|';\n return markdown;\n}\n\n/**\n * Get a table-row of the email template in markdown\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a table-row of the email template in markdown\n */\nexport function getTableRowMd(templateObj: EmailTemplateSkeleton): string {\n const templateId = templateObj._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const locales = `${templateObj.defaultLocale}${\n Object.keys(templateObj.subject).length > 1\n ? ` (${Object.keys(templateObj.subject)\n .filter((locale) => locale !== templateObj.defaultLocale)\n .join(',')})`\n : ''\n }`;\n const row = `| ${\n templateObj.name ? templateObj.name : templateId\n } | ${locales} | ${\n templateObj.subject[templateObj.defaultLocale]\n } | \\`${templateId}\\` |`;\n return row;\n}\n\n/**\n * List email templates\n * @param {boolean} long Long list format with details\n * @return {Promise<unknown[]>} a promise that resolves to an array of email template objects\n */\nexport async function listEmailTemplates(long = false): Promise<unknown[]> {\n let emailTemplates = [];\n try {\n emailTemplates = await readEmailTemplates();\n } catch (error) {\n printMessage(`Error retrieving email templates: ${error.message}`, 'error');\n }\n emailTemplates.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const [, emailTemplate] of emailTemplates.entries()) {\n printMessage(\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n 'data'\n );\n }\n } else {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Name'['brightCyan'],\n 'Status'['brightCyan'],\n 'Locale(s)'['brightCyan'],\n 'From'['brightCyan'],\n 'Subject'['brightCyan'],\n ]);\n for (const emailTemplate of emailTemplates) {\n table.push([\n // Id\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n // Name\n `${emailTemplate.displayName ? emailTemplate.displayName : ''}`,\n // Status\n emailTemplate.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n // Locale(s)\n `${emailTemplate.defaultLocale}${\n Object.keys(emailTemplate.subject).length > 1\n ? ` (${Object.keys(emailTemplate.subject)\n .filter((locale) => locale !== emailTemplate.defaultLocale)\n .join(',')})`\n : ''\n }`,\n // From\n `${emailTemplate.from ? emailTemplate.from : ''}`,\n // Subject\n wordwrap(emailTemplate.subject[emailTemplate.defaultLocale], 40),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n return emailTemplates;\n}\n\n/**\n * Export single email template to a file\n * @param {string} templateId email template id to export\n * @param {string} file filename where to export the template data\n */\nexport async function exportEmailTemplateToFile(\n templateId: string,\n file: string\n) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n }\n const filePath = getFilePath(fileName, true);\n createProgressIndicator('determinate', 1, `Exporting ${templateId}`);\n try {\n const templateData = await readEmailTemplate(templateId);\n updateProgressIndicator(`Writing file ${filePath}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, filePath);\n stopProgressIndicator(\n `Exported ${templateId['brightCyan']} to ${filePath['brightCyan']}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to file\n * @param {String} file optional filename\n */\nexport async function exportEmailTemplatesToFile(file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`allEmailTemplates`, EMAIL_TEMPLATE_FILE_TYPE);\n }\n const filePath = getFilePath(fileName, true);\n try {\n const fileData = getFileDataTemplate();\n const templates = await readEmailTemplates();\n createProgressIndicator(\n 'determinate',\n templates.length,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n }\n saveJsonToFile(fileData, filePath);\n stopProgressIndicator(\n `${templates.length} templates exported to ${filePath}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to separate files\n */\nexport async function exportEmailTemplatesToFiles() {\n try {\n const templates = await readEmailTemplates();\n createProgressIndicator(\n 'determinate',\n templates.length,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n const fileData = getFileDataTemplate();\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n saveJsonToFile(fileData, getFilePath(fileName, true));\n }\n stopProgressIndicator(`${templates.length} templates exported.`);\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Import email template by id from file\n * @param {string} templateId email template id\n * @param {string} file optional filename\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplateFromFile(\n templateId: string,\n file: string,\n raw = false\n) {\n // eslint-disable-next-line no-param-reassign\n templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const filePath = getFilePath(file);\n fs.readFile(filePath, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (raw || validateImport(fileData.meta)) {\n createProgressIndicator('determinate', 1, `Importing ${templateId}`);\n if (\n fileData.emailTemplate[templateId] ||\n (raw && fileData._id === templateId)\n ) {\n try {\n const emailTemplateData = raw\n ? s2sConvert(fileData)\n : fileData.emailTemplate[templateId];\n await updateEmailTemplate(templateId, emailTemplateData);\n updateProgressIndicator(`Importing ${templateId}`);\n stopProgressIndicator(`Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n stopProgressIndicator(`${updateEmailTemplateError}`);\n printMessage(updateEmailTemplateError, 'error');\n }\n } else {\n stopProgressIndicator(\n `Email template ${templateId} not found in ${filePath}!`\n );\n printMessage(\n `Email template ${templateId} not found in ${filePath}!`,\n 'error'\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all email templates from file\n * @param {string} file optional filename\n */\nexport async function importEmailTemplatesFromFile(file: string) {\n fs.readFile(getFilePath(file), 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n 'determinate',\n Object.keys(fileData.emailTemplate).length,\n `Importing email templates`\n );\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await updateEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Done.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Helper function to get email template id from file name\n * @param {string} file file name\n * @returns {string} email template id/name\n */\nfunction readEmailTemplateIdFromFile(file: string) {\n debugMessage(\n `cli.EmailTemplateOps.readEmailTemplateIdFromFile: file=${file}`\n );\n const fileName = path.basename(file);\n const templateId = fileName.substring(14, fileName.indexOf('.'));\n debugMessage(\n `cli.EmailTemplateOps.readEmailTemplateIdFromFile: templateId=${templateId}`\n );\n return templateId;\n}\n\n/**\n * Convert template for s2s purposes (software-to-saas migration)\n * @param {EmailTemplateSkeleton} templateData template object\n * @returns {EmailTemplateSkeleton} converted template object\n */\nfunction s2sConvert(\n templateData: EmailTemplateSkeleton\n): EmailTemplateSkeleton {\n if (templateData.message && !templateData.html) {\n const convertedData = cloneDeep(templateData);\n convertedData.html = cloneDeep(templateData.message);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: templateData:`);\n debugMessage(templateData);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: convertedData:`);\n debugMessage(convertedData);\n return convertedData;\n }\n return templateData;\n}\n\n/**\n * Import all email templates from separate files\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplatesFromFiles(raw = false) {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) =>\n raw\n ? name.startsWith(`${EMAIL_TEMPLATE_TYPE}-`) && name.endsWith(`.json`)\n : name.toLowerCase().endsWith(`${EMAIL_TEMPLATE_FILE_TYPE}.json`)\n )\n .map((name) => getFilePath(name));\n createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing email templates...'\n );\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n validateImport(fileData.meta)\n ) {\n let errors = 0;\n if (raw) {\n total++;\n const templateId = readEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await updateEmailTemplate(templateId, templateData);\n } catch (updateEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError, 'error');\n printMessage(updateEmailTemplateError.response?.data, 'error');\n }\n } else {\n total += Object.keys(fileData.emailTemplate).length;\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await updateEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n } catch (updateEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError.response.data, 'error');\n }\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(`Imported ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} email template(s) from ${\n jsonFiles.length\n } file(s).`\n );\n}\n\n/**\n * Import first email template from file\n * @param {String} file optional filename\n */\nexport async function importFirstEmailTemplateFromFile(\n file: string,\n raw = false\n) {\n fs.readFile(getFilePath(file), 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n validateImport(fileData.meta)\n ) {\n showSpinner(`Importing first email template`);\n if (raw) {\n const templateId = readEmailTemplateIdFromFile(file);\n try {\n const templateData = s2sConvert(fileData);\n await updateEmailTemplate(templateId, templateData);\n succeedSpinner(`Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n failSpinner(`Error importing ${templateId}`);\n printMessage(updateEmailTemplateError.response?.data, 'error');\n }\n } else {\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n try {\n await updateEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n succeedSpinner(`Imported ${id}`);\n } catch (updateEmailTemplateError) {\n failSpinner(`Error importing ${id}`);\n printMessage(updateEmailTemplateError.response?.data, 'error');\n }\n break;\n }\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"EmailTemplateOps.js","names":["frodo","fs","path","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressIndicator","succeedSpinner","updateProgressIndicator","getTypedFilename","saveJsonToFile","cloneDeep","wordwrap","validateImport","getFilePath","getWorkingDirectory","utils","EMAIL_TEMPLATE_TYPE","readEmailTemplates","readEmailTemplate","updateEmailTemplate","email","template","EMAIL_TEMPLATE_FILE_TYPE","regexEmailTemplateType","RegExp","getFileDataTemplate","meta","emailTemplate","getOneLineDescription","templateObj","description","_id","split","displayName","defaultLocale","subject","Object","values","getTableHeaderMd","markdown","getTableRowMd","templateId","replace","locales","keys","length","filter","locale","join","row","name","listEmailTemplates","long","emailTemplates","error","message","sort","a","b","localeCompare","entries","table","push","enabled","from","toString","exportEmailTemplateToFile","file","fileName","filePath","templateData","fileData","err","exportEmailTemplatesToFile","templates","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","readFile","data","JSON","parse","getTemplateIdFromFileName","emailTemplateData","s2sConvert","updateEmailTemplateError","importEmailTemplatesFromFile","id","hasOwnProperty","call","response","basename","Error","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","map","total","totalErrors","readFileSync","errors","_updateEmailTemplateE","importFirstEmailTemplateFromFile","_error$response","_updateEmailTemplateE2"],"sources":["../../src/ops/EmailTemplateOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { EmailTemplateSkeleton } from '@rockcarver/frodo-lib/types/ops/EmailTemplateOps';\nimport fs from 'fs';\nimport path from 'path';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';\nimport { cloneDeep } from './utils/OpsUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst { validateImport, getFilePath, getWorkingDirectory } = frodo.utils;\nconst {\n EMAIL_TEMPLATE_TYPE,\n readEmailTemplates,\n readEmailTemplate,\n updateEmailTemplate,\n} = frodo.email.template;\n\nconst EMAIL_TEMPLATE_FILE_TYPE = 'template.email';\n\nconst regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');\n\n// use a function vs a template variable to avoid problems in loops\nfunction getFileDataTemplate() {\n return {\n meta: {},\n emailTemplate: {},\n };\n}\n\n/**\n * Get a one-line description of the email template\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n templateObj: EmailTemplateSkeleton\n): string {\n const description = `[${templateObj._id.split('/')[1]['brightCyan']}] ${\n templateObj.displayName ? templateObj.displayName : ''\n } - ${\n templateObj.defaultLocale\n ? templateObj.subject[templateObj.defaultLocale]\n : Object.values(templateObj.subject)[0]\n }`;\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 += '| Display Name | Locale(s) | Subject | Id |\\n';\n markdown += '| ------------ | --------- | ------- | ---|';\n return markdown;\n}\n\n/**\n * Get a table-row of the email template in markdown\n * @param {EmailTemplateSkeleton} templateObj email template object to describe\n * @returns {string} a table-row of the email template in markdown\n */\nexport function getTableRowMd(templateObj: EmailTemplateSkeleton): string {\n const templateId = templateObj._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const locales = `${templateObj.defaultLocale}${\n Object.keys(templateObj.subject).length > 1\n ? ` (${Object.keys(templateObj.subject)\n .filter((locale) => locale !== templateObj.defaultLocale)\n .join(',')})`\n : ''\n }`;\n const row = `| ${\n templateObj.name ? templateObj.name : templateId\n } | ${locales} | ${\n templateObj.subject[templateObj.defaultLocale]\n } | \\`${templateId}\\` |`;\n return row;\n}\n\n/**\n * List email templates\n * @param {boolean} long Long list format with details\n * @return {Promise<unknown[]>} a promise that resolves to an array of email template objects\n */\nexport async function listEmailTemplates(long = false): Promise<unknown[]> {\n let emailTemplates = [];\n try {\n emailTemplates = await readEmailTemplates();\n } catch (error) {\n printMessage(`Error retrieving email templates: ${error.message}`, 'error');\n }\n emailTemplates.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const [, emailTemplate] of emailTemplates.entries()) {\n printMessage(\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n 'data'\n );\n }\n } else {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Name'['brightCyan'],\n 'Status'['brightCyan'],\n 'Locale(s)'['brightCyan'],\n 'From'['brightCyan'],\n 'Subject'['brightCyan'],\n ]);\n for (const emailTemplate of emailTemplates) {\n table.push([\n // Id\n `${emailTemplate._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '')}`,\n // Name\n `${emailTemplate.displayName ? emailTemplate.displayName : ''}`,\n // Status\n emailTemplate.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n // Locale(s)\n `${emailTemplate.defaultLocale}${\n Object.keys(emailTemplate.subject).length > 1\n ? ` (${Object.keys(emailTemplate.subject)\n .filter((locale) => locale !== emailTemplate.defaultLocale)\n .join(',')})`\n : ''\n }`,\n // From\n `${emailTemplate.from ? emailTemplate.from : ''}`,\n // Subject\n wordwrap(emailTemplate.subject[emailTemplate.defaultLocale], 40),\n ]);\n }\n printMessage(table.toString(), 'data');\n }\n return emailTemplates;\n}\n\n/**\n * Export single email template to a file\n * @param {string} templateId email template id to export\n * @param {string} file filename where to export the template data\n */\nexport async function exportEmailTemplateToFile(\n templateId: string,\n file: string\n) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n }\n const filePath = getFilePath(fileName, true);\n createProgressIndicator('determinate', 1, `Exporting ${templateId}`);\n try {\n const templateData = await readEmailTemplate(templateId);\n updateProgressIndicator(`Writing file ${filePath}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, filePath);\n stopProgressIndicator(\n `Exported ${templateId['brightCyan']} to ${filePath['brightCyan']}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to file\n * @param {String} file optional filename\n */\nexport async function exportEmailTemplatesToFile(file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`allEmailTemplates`, EMAIL_TEMPLATE_FILE_TYPE);\n }\n const filePath = getFilePath(fileName, true);\n try {\n const fileData = getFileDataTemplate();\n const templates = await readEmailTemplates();\n createProgressIndicator(\n 'determinate',\n templates.length,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n }\n saveJsonToFile(fileData, filePath);\n stopProgressIndicator(\n `${templates.length} templates exported to ${filePath}.`\n );\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to separate files\n */\nexport async function exportEmailTemplatesToFiles() {\n try {\n const templates = await readEmailTemplates();\n createProgressIndicator(\n 'determinate',\n templates.length,\n 'Exporting email templates'\n );\n for (const template of templates) {\n const templateId = template._id.replace(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n const fileData = getFileDataTemplate();\n updateProgressIndicator(`Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n saveJsonToFile(fileData, getFilePath(fileName, true));\n }\n stopProgressIndicator(`${templates.length} templates exported.`);\n } catch (err) {\n stopProgressIndicator(`${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Import email template by id from file\n * @param {string} templateId email template id\n * @param {string} file optional filename\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplateFromFile(\n templateId: string,\n file: string,\n raw = false\n) {\n templateId = templateId.replaceAll(`${EMAIL_TEMPLATE_TYPE}/`, '');\n const filePath = getFilePath(file);\n fs.readFile(filePath, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (raw || validateImport(fileData.meta)) {\n createProgressIndicator('determinate', 1, `Importing ${templateId}`);\n if (\n (fileData.emailTemplate && fileData.emailTemplate[templateId]) ||\n (raw && getTemplateIdFromFileName(file) === templateId)\n ) {\n try {\n const emailTemplateData = raw\n ? s2sConvert(fileData)\n : fileData.emailTemplate[templateId];\n await updateEmailTemplate(templateId, emailTemplateData);\n updateProgressIndicator(`Importing ${templateId}`);\n stopProgressIndicator(`Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n stopProgressIndicator(`${updateEmailTemplateError}`);\n printMessage(updateEmailTemplateError, 'error');\n }\n } else {\n stopProgressIndicator(\n `Email template ${templateId} not found in ${filePath}!`\n );\n printMessage(\n `Email template ${templateId} not found in ${filePath}!`,\n 'error'\n );\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all email templates from file\n * @param {string} file optional filename\n */\nexport async function importEmailTemplatesFromFile(file: string) {\n fs.readFile(getFilePath(file), 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n createProgressIndicator(\n 'determinate',\n Object.keys(fileData.emailTemplate).length,\n `Importing email templates`\n );\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await updateEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(`Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError.response.data, 'error');\n }\n }\n }\n stopProgressIndicator(`Done.`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Helper function to get email template id from file name\n * @param {string} file file name\n * @returns {string} email template id/name\n */\nfunction getTemplateIdFromFileName(file: string) {\n debugMessage(`cli.EmailTemplateOps.getTemplateIdFromFileName: file=${file}`);\n const basename = path.basename(file);\n const keys = basename.split('-');\n if (keys[0] !== EMAIL_TEMPLATE_TYPE || keys.length <= 1)\n throw new Error(`Filename does not indicate a raw email template: ${file}`);\n const templateId = keys[1].split('.')[0];\n debugMessage(\n `cli.EmailTemplateOps.getTemplateIdFromFileName: templateId=${templateId}`\n );\n return templateId;\n}\n\n/**\n * Convert template for s2s purposes (software-to-saas migration)\n * @param {EmailTemplateSkeleton} templateData template object\n * @returns {EmailTemplateSkeleton} converted template object\n */\nfunction s2sConvert(\n templateData: EmailTemplateSkeleton\n): EmailTemplateSkeleton {\n if (templateData.message && !templateData.html) {\n const convertedData = cloneDeep(templateData);\n convertedData.html = cloneDeep(templateData.message);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: templateData:`);\n debugMessage(templateData);\n debugMessage(`cli.EmailTemplateOps.s2sConvert: convertedData:`);\n debugMessage(convertedData);\n return convertedData;\n }\n return templateData;\n}\n\n/**\n * Import all email templates from separate files\n * @param {boolean} raw import raw data file lacking frodo export envelop\n */\nexport async function importEmailTemplatesFromFiles(raw = false) {\n const names = fs.readdirSync(getWorkingDirectory());\n const jsonFiles = names\n .filter((name) =>\n raw\n ? name.startsWith(`${EMAIL_TEMPLATE_TYPE}-`) && name.endsWith(`.json`)\n : name.toLowerCase().endsWith(`${EMAIL_TEMPLATE_FILE_TYPE}.json`)\n )\n .map((name) => getFilePath(name));\n createProgressIndicator(\n 'determinate',\n jsonFiles.length,\n 'Importing email templates...'\n );\n let total = 0;\n let totalErrors = 0;\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (\n (raw && file.startsWith('emailTemplate-')) ||\n validateImport(fileData.meta)\n ) {\n let errors = 0;\n if (raw) {\n total++;\n const templateId = getTemplateIdFromFileName(file);\n try {\n const templateData = s2sConvert(fileData);\n await updateEmailTemplate(templateId, templateData);\n } catch (updateEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError, 'error');\n printMessage(updateEmailTemplateError.response?.data, 'error');\n }\n } else {\n total += Object.keys(fileData.emailTemplate).length;\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await updateEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n } catch (updateEmailTemplateError) {\n errors += 1;\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError.response.data, 'error');\n }\n }\n }\n }\n totalErrors += errors;\n updateProgressIndicator(`Imported ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n `Imported ${total - totalErrors} of ${total} email template(s) from ${\n jsonFiles.length\n } file(s).`\n );\n}\n\n/**\n * Import first email template from file\n * @param {String} file optional filename\n */\nexport async function importFirstEmailTemplateFromFile(\n file: string,\n raw = false\n) {\n fs.readFile(getFilePath(file), 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (raw || validateImport(fileData.meta)) {\n showSpinner(`Importing first email template`);\n if (raw) {\n try {\n const templateId = getTemplateIdFromFileName(file);\n const templateData = s2sConvert(fileData);\n await updateEmailTemplate(templateId, templateData);\n succeedSpinner(`Imported ${templateId}`);\n } catch (error) {\n failSpinner(`Error importing email template: ${error}`);\n printMessage(error.response?.data, 'error');\n }\n } else {\n for (const id in fileData.emailTemplate) {\n if ({}.hasOwnProperty.call(fileData.emailTemplate, id)) {\n try {\n await updateEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n succeedSpinner(`Imported ${id}`);\n } catch (updateEmailTemplateError) {\n failSpinner(`Error importing ${id}`);\n printMessage(updateEmailTemplateError.response?.data, 'error');\n }\n break;\n }\n }\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n"],"mappings":"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"}
@@ -91,7 +91,7 @@ export async function listJourneys(long = false, analyze = false) {
91
91
  */
92
92
  export async function exportJourneyToFile(journeyId, file, options) {
93
93
  debugMessage(`exportJourneyToFile: start`);
94
- const verbose = state.getDebug();
94
+ const verbose = state.getVerbose();
95
95
  if (!file) {
96
96
  file = getTypedFilename(journeyId, 'journey');
97
97
  }
@@ -165,7 +165,7 @@ export async function exportJourneysToFiles(options) {
165
165
  * @param {TreeImportOptions} options import options
166
166
  */
167
167
  export async function importJourneyFromFile(journeyId, file, options) {
168
- const verbose = state.getDebug();
168
+ const verbose = state.getVerbose();
169
169
  fs.readFile(getFilePath(file), 'utf8', async (err, data) => {
170
170
  if (err) throw err;
171
171
  let journeyData = JSON.parse(data);
@@ -216,7 +216,7 @@ export async function importJourneyFromFile(journeyId, file, options) {
216
216
  * @param {TreeImportOptions} options import options
217
217
  */
218
218
  export async function importFirstJourneyFromFile(file, options) {
219
- const verbose = state.getDebug();
219
+ const verbose = state.getVerbose();
220
220
  fs.readFile(getFilePath(file), 'utf8', async (err, data) => {
221
221
  if (err) throw err;
222
222
  let journeyData = cloneDeep(JSON.parse(data));
@@ -1 +1 @@
1
- {"version":3,"file":"JourneyOps.js","names":["frodo","state","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","CirclesOfTrust","EmailTemplate","Idp","Node","Saml2","Script","Theme","cloneDeep","wordwrap","getTypedFilename","saveJsonToFile","getRealmString","getFilePath","getWorkingDirectory","utils","readJourneys","exportJourney","createMultiTreeExportTemplate","resolveDependencies","importJourneys","importJourney","getTreeDescendents","getNodeRef","onlineTreeExportResolver","getJourneyClassification","_getJourneyClassification","authn","journey","listJourneys","long","analyze","journeys","journeyStub","table","_journeyStub$uiConfig","push","_id","enabled","uiConfig","categories","JSON","parse","join","toString","exportPromises","useStringArrays","deps","journeyExports","Promise","all","journeyExport","_journeyExport$tree$u","tree","error","response","data","_error$response","exportJourneyToFile","journeyId","file","options","verbose","getDebug","filePath","fileData","exportJourneysToFile","trees","length","exportData","meta","exportJourneysToFiles","fileName","importJourneyFromFile","readFile","err","journeyData","installedJourneys","map","x","unresolvedJourneys","resolvedJourneys","Object","keys","then","catch","importError","importFirstJourneyFromFile","treeId","hasOwnProperty","call","importJourneysFromFile","name","message","type","importJourneysFromFiles","names","readdirSync","jsonFiles","filter","toLowerCase","endsWith","allJourneysData","readFileSync","_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","entries","nodeType","count","String","getNodeClassification","nodeObj","themes","themeData","scripts","scriptData","emailTemplates","templateData","socialIdentityProviders","socialIdpData","saml2Entities","entityProviderData","circlesOfTrust","cotData","describeJourneyMd","_journeyData$meta2","_journeyData$tree$uiC2","_journeyData$themes2","getNodeClassificationMd","getTableHeaderMd","getTableRowMd"],"sources":["../../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 createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\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 createMultiTreeExportTemplate,\n resolveDependencies,\n importJourneys,\n importJourney,\n getTreeDescendents,\n getNodeRef,\n onlineTreeExportResolver,\n getJourneyClassification: _getJourneyClassification,\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 showSpinner('Retrieving details of all journeys...');\n const exportPromises = [];\n try {\n for (const journeyStub of journeys) {\n exportPromises.push(\n exportJourney(journeyStub['_id'], {\n useStringArrays: false,\n deps: false,\n })\n );\n }\n const journeyExports = await Promise.all(exportPromises);\n succeedSpinner('Retrieved details of all journeys.');\n const table = createTable([\n 'Name',\n 'Status',\n 'Classification',\n 'Tags',\n ]);\n for (const journeyExport of journeyExports) {\n table.push([\n `${journeyExport.tree._id}`,\n journeyExport.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n getJourneyClassification(journeyExport).join(', '),\n journeyExport.tree.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyExport.tree.uiConfig.categories).join(\n ', '\n ),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } catch (error) {\n failSpinner('Error retrieving details of all journeys.');\n printMessage(error.response.data, 'error');\n }\n }\n }\n } catch (error) {\n printMessage(error.response?.data, 'error');\n }\n return journeys;\n}\n\n/**\n * Export journey by id/name to file\n * @param {string} journeyId journey id/name\n * @param {string} file optional export file name\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneyToFile(\n journeyId: string,\n file: string,\n options: TreeExportOptions\n): Promise<void> {\n debugMessage(`exportJourneyToFile: start`);\n const verbose = state.getDebug();\n if (!file) {\n file = getTypedFilename(journeyId, 'journey');\n }\n const filePath = getFilePath(file, true);\n if (!verbose) showSpinner(`${journeyId}`);\n try {\n const fileData: SingleTreeExportInterface = await exportJourney(\n journeyId,\n options\n );\n if (verbose) showSpinner(`${journeyId}`);\n saveJsonToFile(fileData, filePath);\n succeedSpinner(\n `Exported ${journeyId['brightCyan']} to ${filePath['brightCyan']}.`\n );\n } catch (error) {\n if (verbose) showSpinner(`${journeyId}`);\n failSpinner(`Error exporting journey ${journeyId}: ${error}`);\n }\n}\n\n/**\n * Export all journeys to file\n * @param {string} file optional export file name\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFile(\n file: string,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n }\n): Promise<void> {\n if (!file) {\n file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');\n }\n const filePath = getFilePath(file, true);\n const trees = await readJourneys();\n const fileData: MultiTreeExportInterface = createMultiTreeExportTemplate();\n createProgressBar(trees.length, 'Exporting journeys...');\n for (const tree of trees) {\n updateProgressBar(`${tree._id}`);\n try {\n const exportData = await exportJourney(tree._id, options);\n delete exportData.meta;\n fileData.trees[tree._id] = exportData;\n } catch (error) {\n printMessage(`Error exporting journey ${tree._id}: ${error}`, 'error');\n }\n }\n saveJsonToFile(fileData, filePath);\n stopProgressBar(`Exported to ${filePath}`);\n}\n\n/**\n * Export all journeys to separate files\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFiles(\n options: TreeExportOptions\n): Promise<void> {\n const trees = await readJourneys();\n createProgressBar(trees.length, 'Exporting journeys...');\n for (const tree of trees) {\n updateProgressBar(`${tree._id}`);\n const fileName = getTypedFilename(`${tree._id}`, 'journey');\n try {\n const exportData: SingleTreeExportInterface = await exportJourney(\n tree._id,\n options\n );\n saveJsonToFile(exportData, getFilePath(fileName, true));\n } catch (error) {\n // do we need to report status here?\n }\n }\n stopProgressBar('Done');\n}\n\n/**\n * Import a journey from file\n * @param {string} journeyId journey id/name\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneyFromFile(\n journeyId: string,\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getDebug();\n fs.readFile(getFilePath(file), 'utf8', async (err, data) => {\n if (err) throw err;\n let journeyData = JSON.parse(data);\n // check if this is a file with multiple trees and get journey by id\n if (journeyData.trees && journeyData.trees[journeyId]) {\n journeyData = journeyData.trees[journeyId];\n } else if (journeyData.trees) {\n journeyData = null;\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId === journeyData.tree._id) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n showSpinner('Resolving dependencies');\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n succeedSpinner(`Resolved all dependencies.`);\n\n if (!verbose) showSpinner(`Importing ${journeyId}...`);\n importJourney(journeyData, options)\n .then(() => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n succeedSpinner(`Imported ${journeyId}.`);\n })\n .catch((importError) => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n failSpinner(`${importError}`);\n });\n } else {\n failSpinner(`Unresolved dependencies:`);\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n // end dependency resolution for single tree import\n } else {\n showSpinner(`Importing ${journeyId}...`);\n failSpinner(`${journeyId} not found!`);\n }\n });\n}\n\n/**\n * Import first journey from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importFirstJourneyFromFile(\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getDebug();\n fs.readFile(getFilePath(file), 'utf8', async (err, data) => {\n if (err) throw err;\n let journeyData = cloneDeep(JSON.parse(data));\n let journeyId = null;\n // single tree\n if (journeyData.tree) {\n journeyId = cloneDeep(journeyData.tree._id);\n }\n // multiple trees, so get the first tree\n else if (journeyData.trees) {\n for (const treeId in journeyData.trees) {\n if (Object.hasOwnProperty.call(journeyData.trees, treeId)) {\n journeyId = treeId;\n journeyData = journeyData.trees[treeId];\n break;\n }\n }\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n showSpinner('Resolving dependencies');\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n succeedSpinner(`Resolved all dependencies.`);\n\n if (!verbose) showSpinner(`Importing ${journeyId}...`);\n importJourney(journeyData, options)\n .then(() => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n succeedSpinner(`Imported ${journeyId}.`);\n })\n .catch((importError) => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n failSpinner(`${importError}`);\n });\n } else {\n failSpinner(`Unresolved dependencies:`);\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n } else {\n showSpinner(`Importing...`);\n failSpinner(`No journeys found!`);\n }\n // end dependency resolution for single tree import\n });\n}\n\n/**\n * Import all journeys from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFile(\n file: string,\n options: TreeImportOptions\n) {\n fs.readFile(getFilePath(file), 'utf8', (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n 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 });\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[![](./${journeyData.tree._id}.png)]()\\n`, 'data');\n\n // Dependency Tree\n const descendents = await getTreeDescendents(journeyData, resolveTreeExport);\n printMessage(describeTreeDescendentsMd(descendents), 'data');\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `## Node Types (${Object.entries(nodeTypeMap).length})`,\n 'data'\n );\n printMessage('| Count | Type | Classification |', 'data');\n printMessage('| -----:| ---- | -------------- |', 'data');\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `| ${String(count)} | ${nodeType} | ${Node.getNodeClassificationMd(\n nodeType\n ).join('<br>')} |`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');\n printMessage(Node.getTableHeaderMd(), 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `${Node.getTableRowMd(nodeObj, getNodeRef(nodeObj, journeyData))}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`## Themes (${journeyData.themes.length})`, 'data');\n printMessage(Theme.getTableHeaderMd(), 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`${Theme.getTableRowMd(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `## Scripts (${Object.entries(journeyData.scripts).length})`,\n 'data'\n );\n printMessage(Script.getTableHeaderMd(), 'data');\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`${Script.getTableRowMd(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `## Email Templates (${\n Object.entries(journeyData.emailTemplates).length\n })`,\n 'data'\n );\n printMessage(EmailTemplate.getTableHeaderMd(), 'data');\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(`${EmailTemplate.getTableRowMd(templateData)}`, 'data');\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `## Social Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n })`,\n 'data'\n );\n printMessage(Idp.getTableHeaderMd(), 'data');\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`${Idp.getTableRowMd(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `## SAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n })`,\n 'data'\n );\n printMessage(Saml2.getTableHeaderMd(), 'data');\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(`${Saml2.getTableRowMd(entityProviderData)}`, 'data');\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `## SAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n })`,\n 'data'\n );\n printMessage(CirclesOfTrust.getTableHeaderMd(), 'data');\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(`${CirclesOfTrust.getTableRowMd(cotData)}`, 'data');\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"JourneyOps.js","names":["frodo","state","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","CirclesOfTrust","EmailTemplate","Idp","Node","Saml2","Script","Theme","cloneDeep","wordwrap","getTypedFilename","saveJsonToFile","getRealmString","getFilePath","getWorkingDirectory","utils","readJourneys","exportJourney","createMultiTreeExportTemplate","resolveDependencies","importJourneys","importJourney","getTreeDescendents","getNodeRef","onlineTreeExportResolver","getJourneyClassification","_getJourneyClassification","authn","journey","listJourneys","long","analyze","journeys","journeyStub","table","_journeyStub$uiConfig","push","_id","enabled","uiConfig","categories","JSON","parse","join","toString","exportPromises","useStringArrays","deps","journeyExports","Promise","all","journeyExport","_journeyExport$tree$u","tree","error","response","data","_error$response","exportJourneyToFile","journeyId","file","options","verbose","getVerbose","filePath","fileData","exportJourneysToFile","trees","length","exportData","meta","exportJourneysToFiles","fileName","importJourneyFromFile","readFile","err","journeyData","installedJourneys","map","x","unresolvedJourneys","resolvedJourneys","Object","keys","then","catch","importError","importFirstJourneyFromFile","treeId","hasOwnProperty","call","importJourneysFromFile","name","message","type","importJourneysFromFiles","names","readdirSync","jsonFiles","filter","toLowerCase","endsWith","allJourneysData","readFileSync","_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","entries","nodeType","count","String","getNodeClassification","nodeObj","themes","themeData","scripts","scriptData","emailTemplates","templateData","socialIdentityProviders","socialIdpData","saml2Entities","entityProviderData","circlesOfTrust","cotData","describeJourneyMd","_journeyData$meta2","_journeyData$tree$uiC2","_journeyData$themes2","getNodeClassificationMd","getTableHeaderMd","getTableRowMd"],"sources":["../../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 createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\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 createMultiTreeExportTemplate,\n resolveDependencies,\n importJourneys,\n importJourney,\n getTreeDescendents,\n getNodeRef,\n onlineTreeExportResolver,\n getJourneyClassification: _getJourneyClassification,\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 showSpinner('Retrieving details of all journeys...');\n const exportPromises = [];\n try {\n for (const journeyStub of journeys) {\n exportPromises.push(\n exportJourney(journeyStub['_id'], {\n useStringArrays: false,\n deps: false,\n })\n );\n }\n const journeyExports = await Promise.all(exportPromises);\n succeedSpinner('Retrieved details of all journeys.');\n const table = createTable([\n 'Name',\n 'Status',\n 'Classification',\n 'Tags',\n ]);\n for (const journeyExport of journeyExports) {\n table.push([\n `${journeyExport.tree._id}`,\n journeyExport.tree.enabled === false\n ? 'disabled'['brightRed']\n : 'enabled'['brightGreen'],\n getJourneyClassification(journeyExport).join(', '),\n journeyExport.tree.uiConfig?.categories\n ? wordwrap(\n JSON.parse(journeyExport.tree.uiConfig.categories).join(\n ', '\n ),\n 60\n )\n : '',\n ]);\n }\n printMessage(table.toString(), 'data');\n } catch (error) {\n failSpinner('Error retrieving details of all journeys.');\n printMessage(error.response.data, 'error');\n }\n }\n }\n } catch (error) {\n printMessage(error.response?.data, 'error');\n }\n return journeys;\n}\n\n/**\n * Export journey by id/name to file\n * @param {string} journeyId journey id/name\n * @param {string} file optional export file name\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneyToFile(\n journeyId: string,\n file: string,\n options: TreeExportOptions\n): Promise<void> {\n debugMessage(`exportJourneyToFile: start`);\n const verbose = state.getVerbose();\n if (!file) {\n file = getTypedFilename(journeyId, 'journey');\n }\n const filePath = getFilePath(file, true);\n if (!verbose) showSpinner(`${journeyId}`);\n try {\n const fileData: SingleTreeExportInterface = await exportJourney(\n journeyId,\n options\n );\n if (verbose) showSpinner(`${journeyId}`);\n saveJsonToFile(fileData, filePath);\n succeedSpinner(\n `Exported ${journeyId['brightCyan']} to ${filePath['brightCyan']}.`\n );\n } catch (error) {\n if (verbose) showSpinner(`${journeyId}`);\n failSpinner(`Error exporting journey ${journeyId}: ${error}`);\n }\n}\n\n/**\n * Export all journeys to file\n * @param {string} file optional export file name\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFile(\n file: string,\n options: TreeExportOptions = {\n deps: false,\n useStringArrays: false,\n }\n): Promise<void> {\n if (!file) {\n file = getTypedFilename(`all${getRealmString()}Journeys`, 'journey');\n }\n const filePath = getFilePath(file, true);\n const trees = await readJourneys();\n const fileData: MultiTreeExportInterface = createMultiTreeExportTemplate();\n createProgressBar(trees.length, 'Exporting journeys...');\n for (const tree of trees) {\n updateProgressBar(`${tree._id}`);\n try {\n const exportData = await exportJourney(tree._id, options);\n delete exportData.meta;\n fileData.trees[tree._id] = exportData;\n } catch (error) {\n printMessage(`Error exporting journey ${tree._id}: ${error}`, 'error');\n }\n }\n saveJsonToFile(fileData, filePath);\n stopProgressBar(`Exported to ${filePath}`);\n}\n\n/**\n * Export all journeys to separate files\n * @param {TreeExportOptions} options export options\n */\nexport async function exportJourneysToFiles(\n options: TreeExportOptions\n): Promise<void> {\n const trees = await readJourneys();\n createProgressBar(trees.length, 'Exporting journeys...');\n for (const tree of trees) {\n updateProgressBar(`${tree._id}`);\n const fileName = getTypedFilename(`${tree._id}`, 'journey');\n try {\n const exportData: SingleTreeExportInterface = await exportJourney(\n tree._id,\n options\n );\n saveJsonToFile(exportData, getFilePath(fileName, true));\n } catch (error) {\n // do we need to report status here?\n }\n }\n stopProgressBar('Done');\n}\n\n/**\n * Import a journey from file\n * @param {string} journeyId journey id/name\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneyFromFile(\n journeyId: string,\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getVerbose();\n fs.readFile(getFilePath(file), 'utf8', async (err, data) => {\n if (err) throw err;\n let journeyData = JSON.parse(data);\n // check if this is a file with multiple trees and get journey by id\n if (journeyData.trees && journeyData.trees[journeyId]) {\n journeyData = journeyData.trees[journeyId];\n } else if (journeyData.trees) {\n journeyData = null;\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId === journeyData.tree._id) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n showSpinner('Resolving dependencies');\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n succeedSpinner(`Resolved all dependencies.`);\n\n if (!verbose) showSpinner(`Importing ${journeyId}...`);\n importJourney(journeyData, options)\n .then(() => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n succeedSpinner(`Imported ${journeyId}.`);\n })\n .catch((importError) => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n failSpinner(`${importError}`);\n });\n } else {\n failSpinner(`Unresolved dependencies:`);\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n // end dependency resolution for single tree import\n } else {\n showSpinner(`Importing ${journeyId}...`);\n failSpinner(`${journeyId} not found!`);\n }\n });\n}\n\n/**\n * Import first journey from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importFirstJourneyFromFile(\n file: string,\n options: TreeImportOptions\n) {\n const verbose = state.getVerbose();\n fs.readFile(getFilePath(file), 'utf8', async (err, data) => {\n if (err) throw err;\n let journeyData = cloneDeep(JSON.parse(data));\n let journeyId = null;\n // single tree\n if (journeyData.tree) {\n journeyId = cloneDeep(journeyData.tree._id);\n }\n // multiple trees, so get the first tree\n else if (journeyData.trees) {\n for (const treeId in journeyData.trees) {\n if (Object.hasOwnProperty.call(journeyData.trees, treeId)) {\n journeyId = treeId;\n journeyData = journeyData.trees[treeId];\n break;\n }\n }\n }\n\n // if a journeyId was specified, only import the matching journey\n if (journeyData && journeyId) {\n // attempt dependency resolution for single tree import\n const installedJourneys = (await readJourneys()).map((x) => x._id);\n const unresolvedJourneys = {};\n const resolvedJourneys = [];\n showSpinner('Resolving dependencies');\n await resolveDependencies(\n installedJourneys,\n { [journeyId]: journeyData },\n unresolvedJourneys,\n resolvedJourneys\n );\n if (Object.keys(unresolvedJourneys).length === 0) {\n succeedSpinner(`Resolved all dependencies.`);\n\n if (!verbose) showSpinner(`Importing ${journeyId}...`);\n importJourney(journeyData, options)\n .then(() => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n succeedSpinner(`Imported ${journeyId}.`);\n })\n .catch((importError) => {\n if (verbose) showSpinner(`Importing ${journeyId}...`);\n failSpinner(`${importError}`);\n });\n } else {\n failSpinner(`Unresolved dependencies:`);\n for (const journey of Object.keys(unresolvedJourneys)) {\n printMessage(\n ` ${journey} requires ${unresolvedJourneys[journey]}`,\n 'error'\n );\n }\n }\n } else {\n showSpinner(`Importing...`);\n failSpinner(`No journeys found!`);\n }\n // end dependency resolution for single tree import\n });\n}\n\n/**\n * Import all journeys from file\n * @param {string} file import file name\n * @param {TreeImportOptions} options import options\n */\nexport async function importJourneysFromFile(\n file: string,\n options: TreeImportOptions\n) {\n fs.readFile(getFilePath(file), 'utf8', (err, data) => {\n if (err) throw err;\n try {\n const fileData = JSON.parse(data);\n 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 });\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[![](./${journeyData.tree._id}.png)]()\\n`, 'data');\n\n // Dependency Tree\n const descendents = await getTreeDescendents(journeyData, resolveTreeExport);\n printMessage(describeTreeDescendentsMd(descendents), 'data');\n\n // Node Types\n if (Object.entries(nodeTypeMap).length) {\n printMessage(\n `## Node Types (${Object.entries(nodeTypeMap).length})`,\n 'data'\n );\n printMessage('| Count | Type | Classification |', 'data');\n printMessage('| -----:| ---- | -------------- |', 'data');\n for (const [nodeType, count] of Object.entries(nodeTypeMap)) {\n printMessage(\n `| ${String(count)} | ${nodeType} | ${Node.getNodeClassificationMd(\n nodeType\n ).join('<br>')} |`,\n 'data'\n );\n }\n }\n\n // Nodes\n if (Object.entries(allNodes).length) {\n printMessage(`## Nodes (${Object.entries(allNodes).length})`, 'data');\n printMessage(Node.getTableHeaderMd(), 'data');\n for (const nodeObj of Object.values<NodeSkeleton>(allNodes)) {\n printMessage(\n `${Node.getTableRowMd(nodeObj, getNodeRef(nodeObj, journeyData))}`,\n 'data'\n );\n }\n }\n\n // Themes\n if (journeyData.themes?.length) {\n printMessage(`## Themes (${journeyData.themes.length})`, 'data');\n printMessage(Theme.getTableHeaderMd(), 'data');\n for (const themeData of journeyData.themes) {\n printMessage(`${Theme.getTableRowMd(themeData)}`, 'data');\n }\n }\n\n // Scripts\n if (Object.entries(journeyData.scripts).length) {\n printMessage(\n `## Scripts (${Object.entries(journeyData.scripts).length})`,\n 'data'\n );\n printMessage(Script.getTableHeaderMd(), 'data');\n for (const scriptData of Object.values(journeyData.scripts)) {\n printMessage(`${Script.getTableRowMd(scriptData)}`, 'data');\n }\n }\n\n // Email Templates\n if (Object.entries(journeyData.emailTemplates).length) {\n printMessage(\n `## Email Templates (${\n Object.entries(journeyData.emailTemplates).length\n })`,\n 'data'\n );\n printMessage(EmailTemplate.getTableHeaderMd(), 'data');\n for (const templateData of Object.values(journeyData.emailTemplates)) {\n printMessage(`${EmailTemplate.getTableRowMd(templateData)}`, 'data');\n }\n }\n\n // Social Identity Providers\n if (Object.entries(journeyData.socialIdentityProviders).length) {\n printMessage(\n `## Social Identity Providers (${\n Object.entries(journeyData.socialIdentityProviders).length\n })`,\n 'data'\n );\n printMessage(Idp.getTableHeaderMd(), 'data');\n for (const socialIdpData of Object.values(\n journeyData.socialIdentityProviders\n )) {\n printMessage(`${Idp.getTableRowMd(socialIdpData)}`, 'data');\n }\n }\n\n // SAML2 Entity Providers\n if (Object.entries(journeyData.saml2Entities).length) {\n printMessage(\n `## SAML2 Entity Providers (${\n Object.entries(journeyData.saml2Entities).length\n })`,\n 'data'\n );\n printMessage(Saml2.getTableHeaderMd(), 'data');\n for (const entityProviderData of Object.values(journeyData.saml2Entities)) {\n printMessage(`${Saml2.getTableRowMd(entityProviderData)}`, 'data');\n }\n }\n\n // SAML2 Circles Of Trust\n if (Object.entries(journeyData.circlesOfTrust).length) {\n printMessage(\n `## SAML2 Circles Of Trust (${\n Object.entries(journeyData.circlesOfTrust).length\n })`,\n 'data'\n );\n printMessage(CirclesOfTrust.getTableHeaderMd(), 'data');\n for (const cotData of Object.values(journeyData.circlesOfTrust)) {\n printMessage(`${CirclesOfTrust.getTableRowMd(cotData)}`, 'data');\n }\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-cli",
3
- "version": "2.0.0-23",
3
+ "version": "2.0.0-24",
4
4
  "type": "module",
5
5
  "description": "A command line interface to manage ForgeRock Identity Cloud tenants, ForgeOps deployments, and classic deployments.",
6
6
  "keywords": [
@@ -107,7 +107,7 @@
107
107
  ]
108
108
  },
109
109
  "dependencies": {
110
- "@rockcarver/frodo-lib": "2.0.0-38",
110
+ "@rockcarver/frodo-lib": "2.0.0-39",
111
111
  "chokidar": "^3.5.3",
112
112
  "cli-progress": "^3.11.2",
113
113
  "cli-table3": "^0.6.3",