@rockcarver/frodo-cli 2.0.0-15 → 2.0.0-16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/CHANGELOG.md +5 -1
  2. package/esm/app.js +2 -0
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/FrodoCommand.js +11 -1
  5. package/esm/cli/FrodoCommand.js.map +1 -1
  6. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +1 -1
  7. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  8. package/esm/cli/admin/admin-get-access-token.js +1 -1
  9. package/esm/cli/admin/admin-get-access-token.js.map +1 -1
  10. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +2 -2
  11. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  12. package/esm/cli/admin/admin-remove-static-user-mapping.js +3 -2
  13. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  14. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +2 -2
  15. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  16. package/esm/cli/app/app-delete.js +21 -5
  17. package/esm/cli/app/app-delete.js.map +1 -1
  18. package/esm/cli/app/app-describe.js +2 -1
  19. package/esm/cli/app/app-describe.js.map +1 -1
  20. package/esm/cli/app/app-export.js +8 -7
  21. package/esm/cli/app/app-export.js.map +1 -1
  22. package/esm/cli/app/app-import.js +11 -10
  23. package/esm/cli/app/app-import.js.map +1 -1
  24. package/esm/cli/app/app-list.js +5 -4
  25. package/esm/cli/app/app-list.js.map +1 -1
  26. package/esm/cli/app/app.js +6 -10
  27. package/esm/cli/app/app.js.map +1 -1
  28. package/esm/cli/conn/conn-save.js +4 -4
  29. package/esm/cli/conn/conn-save.js.map +1 -1
  30. package/esm/cli/info/info.js +1 -1
  31. package/esm/cli/info/info.js.map +1 -1
  32. package/esm/cli/oauth/oauth-client-delete.js +22 -0
  33. package/esm/cli/oauth/oauth-client-delete.js.map +1 -0
  34. package/esm/cli/oauth/oauth-client-describe.js +22 -0
  35. package/esm/cli/oauth/oauth-client-describe.js.map +1 -0
  36. package/esm/cli/oauth/oauth-client-export.js +52 -0
  37. package/esm/cli/oauth/oauth-client-export.js.map +1 -0
  38. package/esm/cli/oauth/oauth-client-import.js +57 -0
  39. package/esm/cli/oauth/oauth-client-import.js.map +1 -0
  40. package/esm/cli/oauth/oauth-client-list.js +25 -0
  41. package/esm/cli/oauth/oauth-client-list.js.map +1 -0
  42. package/esm/cli/oauth/oauth-client.js +14 -0
  43. package/esm/cli/oauth/oauth-client.js.map +1 -0
  44. package/esm/cli/oauth/oauth.js +13 -0
  45. package/esm/cli/oauth/oauth.js.map +1 -0
  46. package/esm/cli/shell/shell.js.map +1 -1
  47. package/esm/ops/ApplicationOps.js +309 -0
  48. package/esm/ops/ApplicationOps.js.map +1 -0
  49. package/esm/ops/IdmOps.js +6 -6
  50. package/esm/ops/IdmOps.js.map +1 -1
  51. package/esm/ops/JourneyOps.js +2 -2
  52. package/esm/ops/JourneyOps.js.map +1 -1
  53. package/esm/ops/OAuth2ClientOps.js +3 -3
  54. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  55. package/esm/ops/PolicyOps.js.map +1 -1
  56. package/esm/ops/PolicySetOps.js.map +1 -1
  57. package/esm/ops/ResourceTypeOps.js +8 -8
  58. package/esm/ops/ResourceTypeOps.js.map +1 -1
  59. package/esm/ops/ServiceOps.js +8 -8
  60. package/esm/ops/ServiceOps.js.map +1 -1
  61. package/esm/utils/ExportImportUtils.js +8 -2
  62. package/esm/utils/ExportImportUtils.js.map +1 -1
  63. package/package.json +11 -11
@@ -0,0 +1,14 @@
1
+ import { FrodoStubCommand } from '../FrodoCommand';
2
+ const program = new FrodoStubCommand('frodo oauth client');
3
+ program.description('Manage OAuth2 clients.');
4
+ program.command('list', 'List OAuth2 clients.');
5
+
6
+ // program.command('describe', 'Describe OAuth2 clients.');
7
+
8
+ program.command('export', 'Export OAuth2 clients.');
9
+ program.command('import', 'Import OAuth2 clients.');
10
+
11
+ // program.command('delete', 'Delete OAuth2 clients.');
12
+
13
+ program.parse();
14
+ //# sourceMappingURL=oauth-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-client.js","names":["FrodoStubCommand","program","description","command","parse"],"sources":["../../../src/cli/oauth/oauth-client.ts"],"sourcesContent":["import { FrodoStubCommand } from '../FrodoCommand';\n\nconst program = new FrodoStubCommand('frodo oauth client');\n\nprogram.description('Manage OAuth2 clients.');\n\nprogram.command('list', 'List OAuth2 clients.');\n\n// program.command('describe', 'Describe OAuth2 clients.');\n\nprogram.command('export', 'Export OAuth2 clients.');\n\nprogram.command('import', 'Import OAuth2 clients.');\n\n// program.command('delete', 'Delete OAuth2 clients.');\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,iBAAiB;AAElD,MAAMC,OAAO,GAAG,IAAID,gBAAgB,CAAC,oBAAoB,CAAC;AAE1DC,OAAO,CAACC,WAAW,CAAC,wBAAwB,CAAC;AAE7CD,OAAO,CAACE,OAAO,CAAC,MAAM,EAAE,sBAAsB,CAAC;;AAE/C;;AAEAF,OAAO,CAACE,OAAO,CAAC,QAAQ,EAAE,wBAAwB,CAAC;AAEnDF,OAAO,CAACE,OAAO,CAAC,QAAQ,EAAE,wBAAwB,CAAC;;AAEnD;;AAEAF,OAAO,CAACG,KAAK,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import path from 'path';
2
+ import { fileURLToPath } from 'url';
3
+ import { FrodoStubCommand } from '../FrodoCommand';
4
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
5
+ export default function setup() {
6
+ const program = new FrodoStubCommand('oauth').description('Manage OAuth2 clients and providers.').executableDir(__dirname);
7
+ program.command('client', 'Manage OAuth2 clients.');
8
+
9
+ // program.command('provider', 'Manage OAuth2 providers.');
10
+
11
+ return program;
12
+ }
13
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","names":["path","fileURLToPath","FrodoStubCommand","__dirname","dirname","import","meta","url","setup","program","description","executableDir","command"],"sources":["../../../src/cli/oauth/oauth.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('oauth')\n .description('Manage OAuth2 clients and providers.')\n .executableDir(__dirname);\n\n program.command('client', 'Manage OAuth2 clients.');\n\n // program.command('provider', 'Manage OAuth2 providers.');\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,sCAAsC,CAAC,CACnDC,aAAa,CAACR,SAAS,CAAC;EAE3BM,OAAO,CAACG,OAAO,CAAC,QAAQ,EAAE,wBAAwB,CAAC;;EAEnD;;EAEA,OAAOH,OAAO;AAChB"}
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","names":["frodo","fuzzy","inquirer","inquirerPrompt","s","printMessage","FrodoCommand","getTokens","login","exits","functions","utils","json","getPaths","searchFunctions","_answers","input","Promise","resolve","setTimeout","results","filter","map","el","original","Math","random","setup","program","description","addHelpText","amBaseUrl","username","password","connId","action","host","realm","user","options","command","handleDefaultArgsAndOpts","exit","registerPrompt","response","prompt","type","prefix","name","message","source","suggestOnly","includes","result","str","eval","call","error","_error$response","data"],"sources":["../../../src/cli/shell/shell.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport fuzzy from 'fuzzy';\nimport inquirer from 'inquirer';\nimport inquirerPrompt from 'inquirer-autocomplete-prompt';\n\nimport * as s from '../../help/SampleData';\nimport { printMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst exits = ['exit', 'quit', 'q'];\nconst functions = frodo.utils.json.getPaths(frodo, 'this.');\n\nfunction searchFunctions(_answers, input = '') {\n return new Promise((resolve) => {\n setTimeout(() => {\n const results = fuzzy.filter(input, functions).map((el) => el.original);\n // results.splice(5, 0, new inquirer.Separator());\n // results.push(new inquirer.Separator());\n resolve(results);\n }, Math.random() * 470 + 30);\n });\n}\n\nexport default function setup() {\n const program = new FrodoCommand('shell');\n program\n .description('Launch the frodo interactive shell.')\n .addHelpText(\n 'after',\n `Usage Examples:\\n` +\n ` Launch a frodo shell using explicit login parameters:\\n` +\n ` $ frodo shell ${s.amBaseUrl} ${s.username} '${s.password}'\\n`[\n 'brightCyan'\n ] +\n ` Launch a frodo shell using a connection profile (identified by the full AM base URL):\\n` +\n ` $ frodo shell ${s.amBaseUrl}'\\n`['brightCyan'] +\n ` Launch a frodo shell using a connection profile (identified by a unique substring of the AM base URL):\\n` +\n ` $ frodo shell ${s.connId}'\\n`['brightCyan']\n )\n .action(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 (host) await getTokens();\n let exit = false;\n do {\n try {\n inquirer.registerPrompt('autocomplete', inquirerPrompt);\n const response = await inquirer.prompt([\n {\n type: 'autocomplete',\n prefix: '',\n name: 'command',\n message: '>',\n source: searchFunctions,\n suggestOnly: true,\n },\n ]);\n exit = exits.includes(response.command);\n // evaluate code with context\n if (!exit) {\n const result = await function (str: string) {\n return eval(str);\n }.call(frodo, `${response.command}`);\n printMessage(result, 'data');\n }\n } catch (error) {\n printMessage(error.response?.data, 'error');\n printMessage(`${error}`, 'error');\n }\n } while (!exit);\n });\n return program;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"shell.js","names":["frodo","fuzzy","inquirer","inquirerPrompt","s","printMessage","FrodoCommand","getTokens","login","exits","functions","utils","json","getPaths","searchFunctions","_answers","input","Promise","resolve","setTimeout","results","filter","map","el","original","Math","random","setup","program","description","addHelpText","amBaseUrl","username","password","connId","action","host","realm","user","options","command","handleDefaultArgsAndOpts","exit","registerPrompt","response","prompt","type","prefix","name","message","source","suggestOnly","includes","result","str","eval","call","error","_error$response","data"],"sources":["../../../src/cli/shell/shell.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport fuzzy from 'fuzzy';\nimport inquirer from 'inquirer';\nimport inquirerPrompt from 'inquirer-autocomplete-prompt';\n\nimport * as s from '../../help/SampleData';\nimport { printMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst exits = ['exit', 'quit', 'q'];\nconst functions = frodo.utils.json.getPaths(frodo, 'this.');\n\nfunction searchFunctions(_answers, input = '') {\n return new Promise((resolve) => {\n setTimeout(\n () => {\n const results = fuzzy.filter(input, functions).map((el) => el.original);\n // results.splice(5, 0, new inquirer.Separator());\n // results.push(new inquirer.Separator());\n resolve(results);\n },\n Math.random() * 470 + 30\n );\n });\n}\n\nexport default function setup() {\n const program = new FrodoCommand('shell');\n program\n .description('Launch the frodo interactive shell.')\n .addHelpText(\n 'after',\n `Usage Examples:\\n` +\n ` Launch a frodo shell using explicit login parameters:\\n` +\n ` $ frodo shell ${s.amBaseUrl} ${s.username} '${s.password}'\\n`[\n 'brightCyan'\n ] +\n ` Launch a frodo shell using a connection profile (identified by the full AM base URL):\\n` +\n ` $ frodo shell ${s.amBaseUrl}'\\n`['brightCyan'] +\n ` Launch a frodo shell using a connection profile (identified by a unique substring of the AM base URL):\\n` +\n ` $ frodo shell ${s.connId}'\\n`['brightCyan']\n )\n .action(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 (host) await getTokens();\n let exit = false;\n do {\n try {\n inquirer.registerPrompt('autocomplete', inquirerPrompt);\n const response = await inquirer.prompt([\n {\n type: 'autocomplete',\n prefix: '',\n name: 'command',\n message: '>',\n source: searchFunctions,\n suggestOnly: true,\n },\n ]);\n exit = exits.includes(response.command);\n // evaluate code with context\n if (!exit) {\n const result = await function (str: string) {\n return eval(str);\n }.call(frodo, `${response.command}`);\n printMessage(result, 'data');\n }\n } catch (error) {\n printMessage(error.response?.data, 'error');\n printMessage(`${error}`, 'error');\n }\n } while (!exit);\n });\n return program;\n}\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,OAAOC,KAAK,MAAM,OAAO;AACzB,OAAOC,QAAQ,MAAM,UAAU;AAC/B,OAAOC,cAAc,MAAM,8BAA8B;AAEzD,OAAO,KAAKC,CAAC,MAAM,uBAAuB;AAC1C,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGP,KAAK,CAACQ,KAAK;AAEjC,MAAMC,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC;AACnC,MAAMC,SAAS,GAAGV,KAAK,CAACW,KAAK,CAACC,IAAI,CAACC,QAAQ,CAACb,KAAK,EAAE,OAAO,CAAC;AAE3D,SAASc,eAAeA,CAACC,QAAQ,EAAEC,KAAK,GAAG,EAAE,EAAE;EAC7C,OAAO,IAAIC,OAAO,CAAEC,OAAO,IAAK;IAC9BC,UAAU,CACR,MAAM;MACJ,MAAMC,OAAO,GAAGnB,KAAK,CAACoB,MAAM,CAACL,KAAK,EAAEN,SAAS,CAAC,CAACY,GAAG,CAAEC,EAAE,IAAKA,EAAE,CAACC,QAAQ,CAAC;MACvE;MACA;MACAN,OAAO,CAACE,OAAO,CAAC;IAClB,CAAC,EACDK,IAAI,CAACC,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,EACxB,CAAC;EACH,CAAC,CAAC;AACJ;AAEA,eAAe,SAASC,KAAKA,CAAA,EAAG;EAC9B,MAAMC,OAAO,GAAG,IAAItB,YAAY,CAAC,OAAO,CAAC;EACzCsB,OAAO,CACJC,WAAW,CAAC,qCAAqC,CAAC,CAClDC,WAAW,CACV,OAAO,EACN,mBAAkB,GAChB,2DAA0D,GAC1D,mBAAkB1B,CAAC,CAAC2B,SAAU,IAAG3B,CAAC,CAAC4B,QAAS,KAAI5B,CAAC,CAAC6B,QAAS,KAAI,CAC9D,YAAY,CACb,GACA,2FAA0F,GAC1F,mBAAkB7B,CAAC,CAAC2B,SAAU,KAAI,CAAC,YAAY,CAAC,GAChD,4GAA2G,GAC3G,mBAAkB3B,CAAC,CAAC8B,MAAO,KAAI,CAAC,YAAY,CACjD,CAAC,CACAC,MAAM,CAAC,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEL,QAAQ,EAAEM,OAAO,EAAEC,OAAO,KAAK;IAC/DA,OAAO,CAACC,wBAAwB,CAC9BL,IAAI,EACJC,KAAK,EACLC,IAAI,EACJL,QAAQ,EACRM,OAAO,EACPC,OACF,CAAC;IACD,IAAIJ,IAAI,EAAE,MAAM7B,SAAS,CAAC,CAAC;IAC3B,IAAImC,IAAI,GAAG,KAAK;IAChB,GAAG;MACD,IAAI;QACFxC,QAAQ,CAACyC,cAAc,CAAC,cAAc,EAAExC,cAAc,CAAC;QACvD,MAAMyC,QAAQ,GAAG,MAAM1C,QAAQ,CAAC2C,MAAM,CAAC,CACrC;UACEC,IAAI,EAAE,cAAc;UACpBC,MAAM,EAAE,EAAE;UACVC,IAAI,EAAE,SAAS;UACfC,OAAO,EAAE,GAAG;UACZC,MAAM,EAAEpC,eAAe;UACvBqC,WAAW,EAAE;QACf,CAAC,CACF,CAAC;QACFT,IAAI,GAAGjC,KAAK,CAAC2C,QAAQ,CAACR,QAAQ,CAACJ,OAAO,CAAC;QACvC;QACA,IAAI,CAACE,IAAI,EAAE;UACT,MAAMW,MAAM,GAAG,MAAM,UAAUC,GAAW,EAAE;YAC1C,OAAOC,IAAI,CAACD,GAAG,CAAC;UAClB,CAAC,CAACE,IAAI,CAACxD,KAAK,EAAG,GAAE4C,QAAQ,CAACJ,OAAQ,EAAC,CAAC;UACpCnC,YAAY,CAACgD,MAAM,EAAE,MAAM,CAAC;QAC9B;MACF,CAAC,CAAC,OAAOI,KAAK,EAAE;QAAA,IAAAC,eAAA;QACdrD,YAAY,EAAAqD,eAAA,GAACD,KAAK,CAACb,QAAQ,cAAAc,eAAA,uBAAdA,eAAA,CAAgBC,IAAI,EAAE,OAAO,CAAC;QAC3CtD,YAAY,CAAE,GAAEoD,KAAM,EAAC,EAAE,OAAO,CAAC;MACnC;IACF,CAAC,QAAQ,CAACf,IAAI;EAChB,CAAC,CAAC;EACJ,OAAOd,OAAO;AAChB"}
@@ -0,0 +1,309 @@
1
+ import { frodo, state } from '@rockcarver/frodo-lib';
2
+ import fs from 'fs';
3
+ import { createProgressBar, createTable, debugMessage, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
4
+ import { saveJsonToFile } from '../utils/ExportImportUtils';
5
+ import wordwrap from './utils/Wordwrap';
6
+ const {
7
+ getTypedFilename,
8
+ titleCase
9
+ } = frodo.utils;
10
+ const {
11
+ readApplications: _readApplications,
12
+ deleteApplicationByName: _deleteApplicationByName,
13
+ deleteApplications: _deleteApplications,
14
+ exportApplication: _exportApplication,
15
+ exportApplicationByName: _exportApplicationByName,
16
+ exportApplications: _exportApplications,
17
+ importApplicationByName: _importApplicationByName,
18
+ importFirstApplication: _importFirstApplication,
19
+ importApplications: _importApplications
20
+ } = frodo.app;
21
+
22
+ /**
23
+ * List applications
24
+ */
25
+ export async function listApplications(long = false) {
26
+ try {
27
+ const applications = await _readApplications();
28
+ applications.sort((a, b) => a.name.localeCompare(b.name));
29
+ if (long) {
30
+ const table = createTable(['Name', 'Id', 'Template', {
31
+ hAlign: 'right',
32
+ content: 'Version'
33
+ }, {
34
+ hAlign: 'right',
35
+ content: 'Authoritative'
36
+ }, 'Description']);
37
+ applications.forEach(app => {
38
+ table.push([app.name, app._id, app.templateName, {
39
+ hAlign: 'right',
40
+ content: app.templateVersion
41
+ }, {
42
+ hAlign: 'right',
43
+ content: app.authoritative
44
+ }, wordwrap(app.description, 30)]);
45
+ });
46
+ printMessage(table.toString(), 'data');
47
+ } else {
48
+ applications.forEach(app => {
49
+ printMessage(`${app.name}`, 'data');
50
+ });
51
+ }
52
+ } catch (error) {
53
+ printMessage(`Error listing applications - ${error}`, 'error');
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Delete application
59
+ * @param {string} applicationName application name
60
+ * @param {boolean} deep deep delete (include dependencies)
61
+ * @returns {Promise<boolean>} true if successful, false otherwise
62
+ */
63
+ export async function deleteApplication(applicationName, deep) {
64
+ let outcome = false;
65
+ debugMessage(`cli.ApplicationOps.deleteApplication: begin`);
66
+ showSpinner(`Deleting ${applicationName}...`);
67
+ try {
68
+ await _deleteApplicationByName(applicationName, deep);
69
+ outcome = true;
70
+ succeedSpinner(`Deleted ${applicationName}`);
71
+ } catch (error) {
72
+ failSpinner(`Error deleting ${applicationName}: ${error.message}`);
73
+ }
74
+ debugMessage(`cli.ApplicationOps.deleteApplication: end`);
75
+ return outcome;
76
+ }
77
+
78
+ /**
79
+ * Delete all applications
80
+ * @param {boolean} deep deep delete (include dependencies)
81
+ * @returns {Promise<boolean>} true if successful, false otherwise
82
+ */
83
+ export async function deleteApplications(deep) {
84
+ let outcome = false;
85
+ debugMessage(`cli.ApplicationOps.deleteApplications: begin`);
86
+ showSpinner(`Deleting all applications...`);
87
+ try {
88
+ const deleted = await _deleteApplications(deep);
89
+ outcome = true;
90
+ succeedSpinner(`Deleted ${deleted.length} applications`);
91
+ } catch (error) {
92
+ failSpinner(`Error deleting applications: ${error.message}`);
93
+ }
94
+ debugMessage(`cli.ApplicationOps.deleteApplications: end`);
95
+ return outcome;
96
+ }
97
+
98
+ /**
99
+ * Export application to file
100
+ * @param {string} applicationName application name
101
+ * @param {string} file file name
102
+ * @param {ApplicationExportOptions} options export options
103
+ * @returns {Promise<boolean>} true if successful, false otherwise
104
+ */
105
+ export async function exportApplicationToFile(applicationName, file, options = {
106
+ useStringArrays: true,
107
+ deps: true
108
+ }) {
109
+ let outcome = false;
110
+ debugMessage(`cli.ApplicationOps.exportApplicationToFile: begin`);
111
+ showSpinner(`Exporting ${applicationName}...`);
112
+ try {
113
+ let fileName = getTypedFilename(applicationName, 'application');
114
+ if (file) {
115
+ fileName = file;
116
+ }
117
+ const exportData = await _exportApplicationByName(applicationName, options);
118
+ saveJsonToFile(exportData, fileName);
119
+ succeedSpinner(`Exported ${applicationName} to ${fileName}.`);
120
+ outcome = true;
121
+ } catch (error) {
122
+ failSpinner(`Error exporting ${applicationName}: ${error.message}`);
123
+ }
124
+ debugMessage(`cli.ApplicationOps.exportApplicationToFile: end`);
125
+ return outcome;
126
+ }
127
+
128
+ /**
129
+ * Export all applications to file
130
+ * @param {string} file file name
131
+ * @param {ApplicationExportOptions} options export options
132
+ * @returns {Promise<boolean>} true if successful, false otherwise
133
+ */
134
+ export async function exportApplicationsToFile(file, options = {
135
+ useStringArrays: true,
136
+ deps: true
137
+ }) {
138
+ let outcome = false;
139
+ debugMessage(`cli.ApplicationOps.exportApplicationsToFile: begin`);
140
+ showSpinner(`Exporting all applications...`);
141
+ try {
142
+ let fileName = getTypedFilename(`all${titleCase(frodo.utils.getRealmName(state.getRealm()))}Applications`, 'application');
143
+ if (file) {
144
+ fileName = file;
145
+ }
146
+ const exportData = await _exportApplications(options);
147
+ saveJsonToFile(exportData, fileName);
148
+ succeedSpinner(`Exported all applications to ${fileName}.`);
149
+ outcome = true;
150
+ } catch (error) {
151
+ failSpinner(`Error exporting all applications`);
152
+ printMessage(`${error.message}`, 'error');
153
+ }
154
+ debugMessage(`cli.ApplicationOps.exportApplicationsToFile: end [${outcome}]`);
155
+ return outcome;
156
+ }
157
+
158
+ /**
159
+ * Export all applications to separate files
160
+ * @param {ApplicationExportOptions} options export options
161
+ * @returns {Promise<boolean>} true if successful, false otherwise
162
+ */
163
+ export async function exportApplicationsToFiles(options = {
164
+ useStringArrays: true,
165
+ deps: true
166
+ }) {
167
+ debugMessage(`cli.ApplicationOps.exportApplicationsToFiles: begin`);
168
+ const errors = [];
169
+ try {
170
+ const applications = await _readApplications();
171
+ createProgressBar(applications.length, 'Exporting applications...');
172
+ for (const application of applications) {
173
+ const file = getTypedFilename(application.name, 'application');
174
+ try {
175
+ const exportData = await _exportApplication(application._id, options);
176
+ saveJsonToFile(exportData, file);
177
+ updateProgressBar(`Exported ${application._id}.`);
178
+ } catch (error) {
179
+ errors.push(error);
180
+ updateProgressBar(`Error exporting ${application._id}.`);
181
+ }
182
+ }
183
+ stopProgressBar(`Export complete.`);
184
+ } catch (error) {
185
+ errors.push(error);
186
+ stopProgressBar(`Error exporting applications(s) to file(s)`);
187
+ }
188
+ debugMessage(`cli.ApplicationOps.exportApplicationsToFiles: end`);
189
+ return 0 === errors.length;
190
+ }
191
+
192
+ /**
193
+ * Import application from file
194
+ * @param {string} applicationName client id
195
+ * @param {string} file file name
196
+ * @param {ApplicationImportOptions} options import options
197
+ * @returns {Promise<boolean>} true if successful, false otherwise
198
+ */
199
+ export async function importApplicationFromFile(applicationName, file, options = {
200
+ deps: true
201
+ }) {
202
+ let outcome = false;
203
+ debugMessage(`cli.ApplicationOps.importApplicationFromFile: begin`);
204
+ showSpinner(`Importing ${applicationName}...`);
205
+ try {
206
+ const data = fs.readFileSync(file, 'utf8');
207
+ const fileData = JSON.parse(data);
208
+ await _importApplicationByName(applicationName, fileData, options);
209
+ outcome = true;
210
+ succeedSpinner(`Imported ${applicationName}.`);
211
+ } catch (error) {
212
+ failSpinner(`Error importing ${applicationName}.`);
213
+ printMessage(error, 'error');
214
+ }
215
+ debugMessage(`cli.ApplicationOps.importApplicationFromFile: end`);
216
+ return outcome;
217
+ }
218
+
219
+ /**
220
+ * Import first application from file
221
+ * @param {string} file file name
222
+ * @param {ApplicationImportOptions} options import options
223
+ * @returns {Promise<boolean>} true if successful, false otherwise
224
+ */
225
+ export async function importFirstApplicationFromFile(file, options = {
226
+ deps: true
227
+ }) {
228
+ let outcome = false;
229
+ debugMessage(`cli.ApplicationOps.importFirstApplicationFromFile: begin`);
230
+ showSpinner(`Importing ${file}...`);
231
+ try {
232
+ const data = fs.readFileSync(file, 'utf8');
233
+ const fileData = JSON.parse(data);
234
+ await _importFirstApplication(fileData, options);
235
+ outcome = true;
236
+ succeedSpinner(`Imported ${file}.`);
237
+ } catch (error) {
238
+ failSpinner(`Error importing ${file}.`);
239
+ printMessage(error, 'error');
240
+ }
241
+ debugMessage(`cli.ApplicationOps.importFirstApplicationFromFile: end`);
242
+ return outcome;
243
+ }
244
+
245
+ /**
246
+ * Import applications from file
247
+ * @param {string} file file name
248
+ * @param {ApplicationImportOptions} options import options
249
+ * @returns {Promise<boolean>} true if successful, false otherwise
250
+ */
251
+ export async function importApplicationsFromFile(file, options = {
252
+ deps: true
253
+ }) {
254
+ let outcome = false;
255
+ debugMessage(`cli.ApplicationOps.importApplicationsFromFile: begin`);
256
+ showSpinner(`Importing ${file}...`);
257
+ try {
258
+ const data = fs.readFileSync(file, 'utf8');
259
+ const applicationData = JSON.parse(data);
260
+ await _importApplications(applicationData, options);
261
+ outcome = true;
262
+ succeedSpinner(`Imported ${file}.`);
263
+ } catch (error) {
264
+ failSpinner(`Error importing ${file}.`);
265
+ printMessage(error, 'error');
266
+ }
267
+ debugMessage(`cli.ApplicationOps.importApplicationsFromFile: end`);
268
+ return outcome;
269
+ }
270
+
271
+ /**
272
+ * Import applications from files
273
+ * @param {ApplicationImportOptions} options import options
274
+ * @returns {Promise<boolean>} true if successful, false otherwise
275
+ */
276
+ export async function importApplicationsFromFiles(options = {
277
+ deps: true
278
+ }) {
279
+ const errors = [];
280
+ try {
281
+ debugMessage(`cli.ApplicationOps.importApplicationsFromFiles: begin`);
282
+ const names = fs.readdirSync('.');
283
+ const files = names.filter(name => name.toLowerCase().endsWith('.application.json'));
284
+ createProgressBar(files.length, 'Importing applications...');
285
+ let total = 0;
286
+ for (const file of files) {
287
+ try {
288
+ const data = fs.readFileSync(file, 'utf8');
289
+ const fileData = JSON.parse(data);
290
+ const count = Object.keys(fileData.application).length;
291
+ total += count;
292
+ await _importApplications(fileData, options);
293
+ updateProgressBar(`Imported ${count} application(s) from ${file}`);
294
+ } catch (error) {
295
+ errors.push(error);
296
+ updateProgressBar(`Error importing application(s) from ${file}`);
297
+ printMessage(error, 'error');
298
+ }
299
+ }
300
+ stopProgressBar(`Finished importing ${total} application(s) from ${files.length} file(s).`);
301
+ } catch (error) {
302
+ errors.push(error);
303
+ stopProgressBar(`Error importing application(s) from file(s).`);
304
+ printMessage(error, 'error');
305
+ }
306
+ debugMessage(`cli.ApplicationOps.importApplicationsFromFiles: end`);
307
+ return 0 === errors.length;
308
+ }
309
+ //# sourceMappingURL=ApplicationOps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApplicationOps.js","names":["frodo","state","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","saveJsonToFile","wordwrap","getTypedFilename","titleCase","utils","readApplications","_readApplications","deleteApplicationByName","_deleteApplicationByName","deleteApplications","_deleteApplications","exportApplication","_exportApplication","exportApplicationByName","_exportApplicationByName","exportApplications","_exportApplications","importApplicationByName","_importApplicationByName","importFirstApplication","_importFirstApplication","importApplications","_importApplications","app","listApplications","long","applications","sort","a","b","name","localeCompare","table","hAlign","content","forEach","push","_id","templateName","templateVersion","authoritative","description","toString","error","deleteApplication","applicationName","deep","outcome","message","deleted","length","exportApplicationToFile","file","options","useStringArrays","deps","fileName","exportData","exportApplicationsToFile","getRealmName","getRealm","exportApplicationsToFiles","errors","application","importApplicationFromFile","data","readFileSync","fileData","JSON","parse","importFirstApplicationFromFile","importApplicationsFromFile","applicationData","importApplicationsFromFiles","names","readdirSync","files","filter","toLowerCase","endsWith","total","count","Object","keys"],"sources":["../../src/ops/ApplicationOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport type {\n ApplicationExportInterface,\n ApplicationExportOptions,\n ApplicationImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/ApplicationOps';\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 { saveJsonToFile } from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst { getTypedFilename, titleCase } = frodo.utils;\nconst {\n readApplications: _readApplications,\n deleteApplicationByName: _deleteApplicationByName,\n deleteApplications: _deleteApplications,\n exportApplication: _exportApplication,\n exportApplicationByName: _exportApplicationByName,\n exportApplications: _exportApplications,\n importApplicationByName: _importApplicationByName,\n importFirstApplication: _importFirstApplication,\n importApplications: _importApplications,\n} = frodo.app;\n\n/**\n * List applications\n */\nexport async function listApplications(long = false) {\n try {\n const applications = await _readApplications();\n applications.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable([\n 'Name',\n 'Id',\n 'Template',\n {\n hAlign: 'right',\n content: 'Version',\n },\n {\n hAlign: 'right',\n content: 'Authoritative',\n },\n 'Description',\n ]);\n applications.forEach((app) => {\n table.push([\n app.name,\n app._id,\n app.templateName,\n {\n hAlign: 'right',\n content: app.templateVersion,\n },\n {\n hAlign: 'right',\n content: app.authoritative,\n },\n wordwrap(app.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n applications.forEach((app) => {\n printMessage(`${app.name}`, 'data');\n });\n }\n } catch (error) {\n printMessage(`Error listing applications - ${error}`, 'error');\n }\n}\n\n/**\n * Delete application\n * @param {string} applicationName application name\n * @param {boolean} deep deep delete (include dependencies)\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteApplication(\n applicationName: string,\n deep: boolean\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.deleteApplication: begin`);\n showSpinner(`Deleting ${applicationName}...`);\n try {\n await _deleteApplicationByName(applicationName, deep);\n outcome = true;\n succeedSpinner(`Deleted ${applicationName}`);\n } catch (error) {\n failSpinner(`Error deleting ${applicationName}: ${error.message}`);\n }\n debugMessage(`cli.ApplicationOps.deleteApplication: end`);\n return outcome;\n}\n\n/**\n * Delete all applications\n * @param {boolean} deep deep delete (include dependencies)\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteApplications(deep: boolean): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.deleteApplications: begin`);\n showSpinner(`Deleting all applications...`);\n try {\n const deleted = await _deleteApplications(deep);\n outcome = true;\n succeedSpinner(`Deleted ${deleted.length} applications`);\n } catch (error) {\n failSpinner(`Error deleting applications: ${error.message}`);\n }\n debugMessage(`cli.ApplicationOps.deleteApplications: end`);\n return outcome;\n}\n\n/**\n * Export application to file\n * @param {string} applicationName application name\n * @param {string} file file name\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportApplicationToFile(\n applicationName: string,\n file: string,\n options: ApplicationExportOptions = { useStringArrays: true, deps: true }\n) {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.exportApplicationToFile: begin`);\n showSpinner(`Exporting ${applicationName}...`);\n try {\n let fileName = getTypedFilename(applicationName, 'application');\n if (file) {\n fileName = file;\n }\n const exportData = await _exportApplicationByName(applicationName, options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported ${applicationName} to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${applicationName}: ${error.message}`);\n }\n debugMessage(`cli.ApplicationOps.exportApplicationToFile: end`);\n return outcome;\n}\n\n/**\n * Export all applications to file\n * @param {string} file file name\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportApplicationsToFile(\n file: string,\n options: ApplicationExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.exportApplicationsToFile: begin`);\n showSpinner(`Exporting all applications...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(frodo.utils.getRealmName(state.getRealm()))}Applications`,\n 'application'\n );\n if (file) {\n fileName = file;\n }\n const exportData = await _exportApplications(options);\n saveJsonToFile(exportData, fileName);\n succeedSpinner(`Exported all applications to ${fileName}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting all applications`);\n printMessage(`${error.message}`, 'error');\n }\n debugMessage(`cli.ApplicationOps.exportApplicationsToFile: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Export all applications to separate files\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportApplicationsToFiles(\n options: ApplicationExportOptions = { useStringArrays: true, deps: true }\n) {\n debugMessage(`cli.ApplicationOps.exportApplicationsToFiles: begin`);\n const errors = [];\n try {\n const applications = await _readApplications();\n createProgressBar(applications.length, 'Exporting applications...');\n for (const application of applications) {\n const file = getTypedFilename(application.name, 'application');\n try {\n const exportData = await _exportApplication(application._id, options);\n saveJsonToFile(exportData, file);\n updateProgressBar(`Exported ${application._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${application._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting applications(s) to file(s)`);\n }\n debugMessage(`cli.ApplicationOps.exportApplicationsToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import application from file\n * @param {string} applicationName client id\n * @param {string} file file name\n * @param {ApplicationImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importApplicationFromFile(\n applicationName: string,\n file: string,\n options: ApplicationImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.importApplicationFromFile: begin`);\n showSpinner(`Importing ${applicationName}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await _importApplicationByName(applicationName, fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${applicationName}.`);\n } catch (error) {\n failSpinner(`Error importing ${applicationName}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ApplicationOps.importApplicationFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first application from file\n * @param {string} file file name\n * @param {ApplicationImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstApplicationFromFile(\n file: string,\n options: ApplicationImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.importFirstApplicationFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n await _importFirstApplication(fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ApplicationOps.importFirstApplicationFromFile: end`);\n return outcome;\n}\n\n/**\n * Import applications from file\n * @param {string} file file name\n * @param {ApplicationImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importApplicationsFromFile(\n file: string,\n options: ApplicationImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.importApplicationsFromFile: begin`);\n showSpinner(`Importing ${file}...`);\n try {\n const data = fs.readFileSync(file, 'utf8');\n const applicationData = JSON.parse(data);\n await _importApplications(applicationData, options);\n outcome = true;\n succeedSpinner(`Imported ${file}.`);\n } catch (error) {\n failSpinner(`Error importing ${file}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ApplicationOps.importApplicationsFromFile: end`);\n return outcome;\n}\n\n/**\n * Import applications from files\n * @param {ApplicationImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importApplicationsFromFiles(\n options: ApplicationImportOptions = { deps: true }\n): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.ApplicationOps.importApplicationsFromFiles: begin`);\n const names = fs.readdirSync('.');\n const files = names.filter((name) =>\n name.toLowerCase().endsWith('.application.json')\n );\n createProgressBar(files.length, 'Importing applications...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: ApplicationExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.application).length;\n total += count;\n await _importApplications(fileData, options);\n updateProgressBar(`Imported ${count} application(s) from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing application(s) from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} application(s) from ${files.length} file(s).`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing application(s) from file(s).`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ApplicationOps.importApplicationsFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
package/esm/ops/IdmOps.js CHANGED
@@ -84,15 +84,15 @@ export async function exportAllRawConfigEntities(directory) {
84
84
  const entityPromises = [];
85
85
  for (const configEntity of configurations) {
86
86
  entityPromises.push(readConfigEntity(configEntity._id).catch(readConfigEntityError => {
87
- var _readConfigEntityErro, _readConfigEntityErro2, _readConfigEntityErro3, _readConfigEntityErro4, _readConfigEntityErro5, _readConfigEntityErro6, _readConfigEntityErro7, _readConfigEntityErro8, _readConfigEntityErro9;
88
- if (!(((_readConfigEntityErro = readConfigEntityError.response) === null || _readConfigEntityErro === void 0 ? void 0 : _readConfigEntityErro.status) === 403 && ((_readConfigEntityErro2 = readConfigEntityError.response) === null || _readConfigEntityErro2 === void 0 ? void 0 : (_readConfigEntityErro3 = _readConfigEntityErro2.data) === null || _readConfigEntityErro3 === void 0 ? void 0 : _readConfigEntityErro3.message) === 'This operation is not available in ForgeRock Identity Cloud.') && !(
87
+ var _readConfigEntityErro, _readConfigEntityErro2, _readConfigEntityErro3, _readConfigEntityErro4, _readConfigEntityErro5, _readConfigEntityErro6;
88
+ if (!(((_readConfigEntityErro = readConfigEntityError.response) === null || _readConfigEntityErro === void 0 ? void 0 : _readConfigEntityErro.status) === 403 && ((_readConfigEntityErro2 = readConfigEntityError.response) === null || _readConfigEntityErro2 === void 0 || (_readConfigEntityErro2 = _readConfigEntityErro2.data) === null || _readConfigEntityErro2 === void 0 ? void 0 : _readConfigEntityErro2.message) === 'This operation is not available in ForgeRock Identity Cloud.') && !(
89
89
  // list of config entities, which do not exist by default or ever.
90
90
 
91
- ['script', 'notificationFactory', 'apiVersion', 'metrics', 'repo.init', 'endpoint/validateQueryFilter', 'endpoint/oauthproxy', 'external.rest', 'scheduler', 'org.apache.felix.fileinstall/openidm', 'cluster', 'endpoint/mappingDetails', 'fieldPolicy/teammember'].includes(configEntity._id) && ((_readConfigEntityErro4 = readConfigEntityError.response) === null || _readConfigEntityErro4 === void 0 ? void 0 : _readConfigEntityErro4.status) === 404 && ((_readConfigEntityErro5 = readConfigEntityError.response) === null || _readConfigEntityErro5 === void 0 ? void 0 : (_readConfigEntityErro6 = _readConfigEntityErro5.data) === null || _readConfigEntityErro6 === void 0 ? void 0 : _readConfigEntityErro6.reason) === 'Not Found') &&
91
+ ['script', 'notificationFactory', 'apiVersion', 'metrics', 'repo.init', 'endpoint/validateQueryFilter', 'endpoint/oauthproxy', 'external.rest', 'scheduler', 'org.apache.felix.fileinstall/openidm', 'cluster', 'endpoint/mappingDetails', 'fieldPolicy/teammember'].includes(configEntity._id) && ((_readConfigEntityErro3 = readConfigEntityError.response) === null || _readConfigEntityErro3 === void 0 ? void 0 : _readConfigEntityErro3.status) === 404 && ((_readConfigEntityErro4 = readConfigEntityError.response) === null || _readConfigEntityErro4 === void 0 || (_readConfigEntityErro4 = _readConfigEntityErro4.data) === null || _readConfigEntityErro4 === void 0 ? void 0 : _readConfigEntityErro4.reason) === 'Not Found') &&
92
92
  // https://bugster.forgerock.org/jira/browse/OPENIDM-18270
93
- !(((_readConfigEntityErro7 = readConfigEntityError.response) === null || _readConfigEntityErro7 === void 0 ? void 0 : _readConfigEntityErro7.status) === 404 && ((_readConfigEntityErro8 = readConfigEntityError.response) === null || _readConfigEntityErro8 === void 0 ? void 0 : (_readConfigEntityErro9 = _readConfigEntityErro8.data) === null || _readConfigEntityErro9 === void 0 ? void 0 : _readConfigEntityErro9.message) === 'No configuration exists for id org.apache.felix.fileinstall/openidm')) {
94
- var _readConfigEntityErro10;
95
- printMessage((_readConfigEntityErro10 = readConfigEntityError.response) === null || _readConfigEntityErro10 === void 0 ? void 0 : _readConfigEntityErro10.data, 'error');
93
+ !(((_readConfigEntityErro5 = readConfigEntityError.response) === null || _readConfigEntityErro5 === void 0 ? void 0 : _readConfigEntityErro5.status) === 404 && ((_readConfigEntityErro6 = readConfigEntityError.response) === null || _readConfigEntityErro6 === void 0 || (_readConfigEntityErro6 = _readConfigEntityErro6.data) === null || _readConfigEntityErro6 === void 0 ? void 0 : _readConfigEntityErro6.message) === 'No configuration exists for id org.apache.felix.fileinstall/openidm')) {
94
+ var _readConfigEntityErro7;
95
+ printMessage((_readConfigEntityErro7 = readConfigEntityError.response) === null || _readConfigEntityErro7 === void 0 ? void 0 : _readConfigEntityErro7.data, 'error');
96
96
  printMessage(`Error getting config entity ${configEntity._id}: ${readConfigEntityError}`, 'error');
97
97
  }
98
98
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"IdmOps.js","names":["frodo","fs","fse","path","propertiesReader","replaceall","createProgressIndicator","printMessage","stopProgressIndicator","getTypedFilename","readFiles","unSubstituteEnvParams","areScriptHooksValid","utils","testConnectorServers","readConfigEntities","readConfigEntity","updateConfigEntity","idm","config","queryManagedObjects","managed","warnAboutOfflineConnectorServers","all","offline","filter","status","ok","map","name","length","join","error","message","listAllConfigEntities","configurations","configEntity","_id","readConfigEntitiesError","exportConfigEntity","id","file","fileName","writeFile","JSON","stringify","err","exportAllRawConfigEntities","directory","existsSync","mkdirSync","undefined","entityPromises","push","catch","readConfigEntityError","_readConfigEntityErro","_readConfigEntityErro2","_readConfigEntityErro3","_readConfigEntityErro4","_readConfigEntityErro5","_readConfigEntityErro6","_readConfigEntityErro7","_readConfigEntityErro8","_readConfigEntityErro9","response","data","includes","reason","_readConfigEntityErro10","results","Promise","item","outputFile","exportAllConfigEntities","entitiesFile","envFile","entriesToExport","readFile","entriesData","parse","envParams","configEntityString","each","key","value","importConfigEntityByIdFromFile","entityId","validate","fileData","readFileSync","resolve","process","cwd","entityData","isValid","updateConfigEntityError","importConfigEntityFromFile","importAllRawConfigEntities","baseDirectory","files","jsonFiles","toLowerCase","endsWith","content","substring","everyScriptValid","jsObject","isScriptValid","allSettled","errors","result","importAllConfigEntities","entriesToImport","envReader","unsubstituted","countManagedObjects","type"],"sources":["../../src/ops/IdmOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport fse from 'fs-extra';\nimport path from 'path';\nimport propertiesReader from 'properties-reader';\nimport replaceall from 'replaceall';\n\nimport {\n createProgressIndicator,\n printMessage,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename, readFiles } from '../utils/ExportImportUtils';\n\nconst { unSubstituteEnvParams, areScriptHooksValid } = frodo.utils;\nconst {\n testConnectorServers,\n readConfigEntities,\n readConfigEntity,\n updateConfigEntity,\n} = frodo.idm.config;\nconst { queryManagedObjects } = frodo.idm.managed;\n\n/**\n * Warn about and list offline remote connector servers\n */\nexport async function warnAboutOfflineConnectorServers() {\n try {\n const all = await testConnectorServers();\n const offline = all\n .filter((status) => !status.ok)\n .map((status) => status.name);\n if (offline.length) {\n printMessage(\n `\\nThe following connector server(s) are offline and their connectors and configuration unavailable:\\n${offline.join(\n '\\n'\n )}`,\n 'warn'\n );\n }\n } catch (error) {\n printMessage(error, 'error');\n printMessage(\n `Error getting offline connector servers: ${error.message}`,\n 'error'\n );\n }\n}\n\n/**\n * List all IDM configuration objects\n */\nexport async function listAllConfigEntities() {\n try {\n const configurations = await readConfigEntities();\n for (const configEntity of configurations) {\n printMessage(`${configEntity._id}`, 'data');\n }\n } catch (readConfigEntitiesError) {\n printMessage(readConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${readConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export an IDM configuration object.\n * @param {String} id the desired configuration object\n * @param {String} file optional export file\n */\nexport async function exportConfigEntity(id, file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`${id}`, 'idm');\n }\n const configEntity = await readConfigEntity(id);\n fs.writeFile(fileName, JSON.stringify(configEntity, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${id} export to file`, 'error');\n }\n return '';\n });\n}\n\n/**\n * Export all IDM configuration objects into separate JSON files in a directory specified by <directory>\n * @param {String} directory export directory\n */\nexport async function exportAllRawConfigEntities(directory) {\n try {\n const configurations = await readConfigEntities();\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n entityPromises.push(\n readConfigEntity(configEntity._id).catch((readConfigEntityError) => {\n if (\n !(\n readConfigEntityError.response?.status === 403 &&\n readConfigEntityError.response?.data?.message ===\n 'This operation is not available in ForgeRock Identity Cloud.'\n ) &&\n !(\n // list of config entities, which do not exist by default or ever.\n (\n [\n 'script',\n 'notificationFactory',\n 'apiVersion',\n 'metrics',\n 'repo.init',\n 'endpoint/validateQueryFilter',\n 'endpoint/oauthproxy',\n 'external.rest',\n 'scheduler',\n 'org.apache.felix.fileinstall/openidm',\n 'cluster',\n 'endpoint/mappingDetails',\n 'fieldPolicy/teammember',\n ].includes(configEntity._id) &&\n readConfigEntityError.response?.status === 404 &&\n readConfigEntityError.response?.data?.reason === 'Not Found'\n )\n ) &&\n // https://bugster.forgerock.org/jira/browse/OPENIDM-18270\n !(\n readConfigEntityError.response?.status === 404 &&\n readConfigEntityError.response?.data?.message ===\n 'No configuration exists for id org.apache.felix.fileinstall/openidm'\n )\n ) {\n printMessage(readConfigEntityError.response?.data, 'error');\n printMessage(\n `Error getting config entity ${configEntity._id}: ${readConfigEntityError}`,\n 'error'\n );\n }\n })\n );\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n fse.outputFile(\n `${directory}/${item._id}.json`,\n JSON.stringify(item, null, 2),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator('Exported config objects.', 'success');\n } catch (readConfigEntitiesError) {\n printMessage(readConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${readConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all IDM configuration objects\n * @param {String} directory export directory\n * @param {String} entitiesFile JSON file that specifies the config entities to export/import\n * @param {String} envFile File that defines environment specific variables for replacement during configuration export/import\n */\nexport async function exportAllConfigEntities(\n directory,\n entitiesFile,\n envFile\n) {\n let entriesToExport = [];\n // read list of entities to export\n fs.readFile(entitiesFile, 'utf8', async (err, data) => {\n if (err) throw err;\n const entriesData = JSON.parse(data);\n entriesToExport = entriesData.idm;\n // console.log(`entriesToExport ${entriesToExport}`);\n\n // read list of configs to parameterize for environment specific values\n const envParams = propertiesReader(envFile);\n\n try {\n const configurations = await readConfigEntities();\n // create export directory if not exist\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n if (entriesToExport.includes(configEntity._id)) {\n entityPromises.push(readConfigEntity(configEntity._id));\n }\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n let configEntityString = JSON.stringify(item, null, 2);\n envParams.each((key, value) => {\n configEntityString = replaceall(\n value,\n `\\${${key}}`,\n configEntityString\n );\n });\n fse.outputFile(\n `${directory}/${item._id}.json`,\n configEntityString,\n (error) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${error}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator(null, 'success');\n } catch (readConfigEntitiesError) {\n printMessage(readConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${readConfigEntitiesError}`,\n 'error'\n );\n }\n });\n}\n\n/**\n * Import an IDM configuration object by id from file.\n * @param entityId the configuration object to import\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityByIdFromFile(\n entityId: string,\n file?: string,\n validate?: boolean\n) {\n if (!file) {\n file = getTypedFilename(entityId, 'idm');\n }\n\n const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n\n const entityData = JSON.parse(fileData);\n const isValid = areScriptHooksValid(entityData);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await updateConfigEntity(entityId, entityData);\n } catch (updateConfigEntityError) {\n printMessage(updateConfigEntityError, 'error');\n printMessage(`Error: ${updateConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import IDM configuration object from file.\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityFromFile(\n file: string,\n validate?: boolean\n) {\n const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n const entityData = JSON.parse(fileData);\n const entityId = entityData._id;\n const isValid = areScriptHooksValid(entityData);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await updateConfigEntity(entityId, entityData);\n } catch (updateConfigEntityError) {\n printMessage(updateConfigEntityError, 'error');\n printMessage(`Error: ${updateConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import all IDM configuration objects from separate JSON files in a directory specified by <directory>\n * @param baseDirectory export directory\n * @param validate validate script hooks\n */\nexport async function importAllRawConfigEntities(\n baseDirectory: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ path, content }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = areScriptHooksValid(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles.map((file) => {\n return updateConfigEntity(file.entityId, JSON.parse(file.content));\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Import all IDM configuration objects\n * @param baseDirectory import directory\n * @param entitiesFile JSON file that specifies the config entities to export/import\n * @param envFile File that defines environment specific variables for replacement during configuration export/import\n * @param validate validate script hooks\n */\nexport async function importAllConfigEntities(\n baseDirectory: string,\n entitiesFile: string,\n envFile: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const entriesToImport = JSON.parse(fs.readFileSync(entitiesFile, 'utf8')).idm;\n\n const envReader = propertiesReader(envFile);\n\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ content, path }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = areScriptHooksValid(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles\n .filter(({ entityId }) => {\n return entriesToImport.includes(entityId);\n })\n .map(({ entityId, content }) => {\n const unsubstituted = unSubstituteEnvParams(content, envReader);\n return updateConfigEntity(entityId, JSON.parse(unsubstituted));\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Count number of managed objects of a given type\n * @param {String} type managed object type, e.g. alpha_user\n */\nexport async function countManagedObjects(type: string) {\n try {\n const result = await queryManagedObjects(type);\n printMessage(`${type}: ${result.length}`);\n } catch (error) {\n printMessage(error.response.data, 'error');\n printMessage(`Error querying managed objects by type: ${error}`, 'error');\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"IdmOps.js","names":["frodo","fs","fse","path","propertiesReader","replaceall","createProgressIndicator","printMessage","stopProgressIndicator","getTypedFilename","readFiles","unSubstituteEnvParams","areScriptHooksValid","utils","testConnectorServers","readConfigEntities","readConfigEntity","updateConfigEntity","idm","config","queryManagedObjects","managed","warnAboutOfflineConnectorServers","all","offline","filter","status","ok","map","name","length","join","error","message","listAllConfigEntities","configurations","configEntity","_id","readConfigEntitiesError","exportConfigEntity","id","file","fileName","writeFile","JSON","stringify","err","exportAllRawConfigEntities","directory","existsSync","mkdirSync","undefined","entityPromises","push","catch","readConfigEntityError","_readConfigEntityErro","_readConfigEntityErro2","_readConfigEntityErro3","_readConfigEntityErro4","_readConfigEntityErro5","_readConfigEntityErro6","response","data","includes","reason","_readConfigEntityErro7","results","Promise","item","outputFile","exportAllConfigEntities","entitiesFile","envFile","entriesToExport","readFile","entriesData","parse","envParams","configEntityString","each","key","value","importConfigEntityByIdFromFile","entityId","validate","fileData","readFileSync","resolve","process","cwd","entityData","isValid","updateConfigEntityError","importConfigEntityFromFile","importAllRawConfigEntities","baseDirectory","files","jsonFiles","toLowerCase","endsWith","content","substring","everyScriptValid","jsObject","isScriptValid","allSettled","errors","result","importAllConfigEntities","entriesToImport","envReader","unsubstituted","countManagedObjects","type"],"sources":["../../src/ops/IdmOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport fs from 'fs';\nimport fse from 'fs-extra';\nimport path from 'path';\nimport propertiesReader from 'properties-reader';\nimport replaceall from 'replaceall';\n\nimport {\n createProgressIndicator,\n printMessage,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename, readFiles } from '../utils/ExportImportUtils';\n\nconst { unSubstituteEnvParams, areScriptHooksValid } = frodo.utils;\nconst {\n testConnectorServers,\n readConfigEntities,\n readConfigEntity,\n updateConfigEntity,\n} = frodo.idm.config;\nconst { queryManagedObjects } = frodo.idm.managed;\n\n/**\n * Warn about and list offline remote connector servers\n */\nexport async function warnAboutOfflineConnectorServers() {\n try {\n const all = await testConnectorServers();\n const offline = all\n .filter((status) => !status.ok)\n .map((status) => status.name);\n if (offline.length) {\n printMessage(\n `\\nThe following connector server(s) are offline and their connectors and configuration unavailable:\\n${offline.join(\n '\\n'\n )}`,\n 'warn'\n );\n }\n } catch (error) {\n printMessage(error, 'error');\n printMessage(\n `Error getting offline connector servers: ${error.message}`,\n 'error'\n );\n }\n}\n\n/**\n * List all IDM configuration objects\n */\nexport async function listAllConfigEntities() {\n try {\n const configurations = await readConfigEntities();\n for (const configEntity of configurations) {\n printMessage(`${configEntity._id}`, 'data');\n }\n } catch (readConfigEntitiesError) {\n printMessage(readConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${readConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export an IDM configuration object.\n * @param {String} id the desired configuration object\n * @param {String} file optional export file\n */\nexport async function exportConfigEntity(id, file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`${id}`, 'idm');\n }\n const configEntity = await readConfigEntity(id);\n fs.writeFile(fileName, JSON.stringify(configEntity, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${id} export to file`, 'error');\n }\n return '';\n });\n}\n\n/**\n * Export all IDM configuration objects into separate JSON files in a directory specified by <directory>\n * @param {String} directory export directory\n */\nexport async function exportAllRawConfigEntities(directory) {\n try {\n const configurations = await readConfigEntities();\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n entityPromises.push(\n readConfigEntity(configEntity._id).catch((readConfigEntityError) => {\n if (\n !(\n readConfigEntityError.response?.status === 403 &&\n readConfigEntityError.response?.data?.message ===\n 'This operation is not available in ForgeRock Identity Cloud.'\n ) &&\n !(\n // list of config entities, which do not exist by default or ever.\n (\n [\n 'script',\n 'notificationFactory',\n 'apiVersion',\n 'metrics',\n 'repo.init',\n 'endpoint/validateQueryFilter',\n 'endpoint/oauthproxy',\n 'external.rest',\n 'scheduler',\n 'org.apache.felix.fileinstall/openidm',\n 'cluster',\n 'endpoint/mappingDetails',\n 'fieldPolicy/teammember',\n ].includes(configEntity._id) &&\n readConfigEntityError.response?.status === 404 &&\n readConfigEntityError.response?.data?.reason === 'Not Found'\n )\n ) &&\n // https://bugster.forgerock.org/jira/browse/OPENIDM-18270\n !(\n readConfigEntityError.response?.status === 404 &&\n readConfigEntityError.response?.data?.message ===\n 'No configuration exists for id org.apache.felix.fileinstall/openidm'\n )\n ) {\n printMessage(readConfigEntityError.response?.data, 'error');\n printMessage(\n `Error getting config entity ${configEntity._id}: ${readConfigEntityError}`,\n 'error'\n );\n }\n })\n );\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n fse.outputFile(\n `${directory}/${item._id}.json`,\n JSON.stringify(item, null, 2),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator('Exported config objects.', 'success');\n } catch (readConfigEntitiesError) {\n printMessage(readConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${readConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all IDM configuration objects\n * @param {String} directory export directory\n * @param {String} entitiesFile JSON file that specifies the config entities to export/import\n * @param {String} envFile File that defines environment specific variables for replacement during configuration export/import\n */\nexport async function exportAllConfigEntities(\n directory,\n entitiesFile,\n envFile\n) {\n let entriesToExport = [];\n // read list of entities to export\n fs.readFile(entitiesFile, 'utf8', async (err, data) => {\n if (err) throw err;\n const entriesData = JSON.parse(data);\n entriesToExport = entriesData.idm;\n // console.log(`entriesToExport ${entriesToExport}`);\n\n // read list of configs to parameterize for environment specific values\n const envParams = propertiesReader(envFile);\n\n try {\n const configurations = await readConfigEntities();\n // create export directory if not exist\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n if (entriesToExport.includes(configEntity._id)) {\n entityPromises.push(readConfigEntity(configEntity._id));\n }\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n let configEntityString = JSON.stringify(item, null, 2);\n envParams.each((key, value) => {\n configEntityString = replaceall(\n value,\n `\\${${key}}`,\n configEntityString\n );\n });\n fse.outputFile(\n `${directory}/${item._id}.json`,\n configEntityString,\n (error) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${error}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator(null, 'success');\n } catch (readConfigEntitiesError) {\n printMessage(readConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${readConfigEntitiesError}`,\n 'error'\n );\n }\n });\n}\n\n/**\n * Import an IDM configuration object by id from file.\n * @param entityId the configuration object to import\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityByIdFromFile(\n entityId: string,\n file?: string,\n validate?: boolean\n) {\n if (!file) {\n file = getTypedFilename(entityId, 'idm');\n }\n\n const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n\n const entityData = JSON.parse(fileData);\n const isValid = areScriptHooksValid(entityData);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await updateConfigEntity(entityId, entityData);\n } catch (updateConfigEntityError) {\n printMessage(updateConfigEntityError, 'error');\n printMessage(`Error: ${updateConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import IDM configuration object from file.\n * @param file optional file to import\n * @param validate validate script hooks\n */\nexport async function importConfigEntityFromFile(\n file: string,\n validate?: boolean\n) {\n const fileData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n const entityData = JSON.parse(fileData);\n const entityId = entityData._id;\n const isValid = areScriptHooksValid(entityData);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await updateConfigEntity(entityId, entityData);\n } catch (updateConfigEntityError) {\n printMessage(updateConfigEntityError, 'error');\n printMessage(`Error: ${updateConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import all IDM configuration objects from separate JSON files in a directory specified by <directory>\n * @param baseDirectory export directory\n * @param validate validate script hooks\n */\nexport async function importAllRawConfigEntities(\n baseDirectory: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ path, content }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = areScriptHooksValid(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles.map((file) => {\n return updateConfigEntity(file.entityId, JSON.parse(file.content));\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Import all IDM configuration objects\n * @param baseDirectory import directory\n * @param entitiesFile JSON file that specifies the config entities to export/import\n * @param envFile File that defines environment specific variables for replacement during configuration export/import\n * @param validate validate script hooks\n */\nexport async function importAllConfigEntities(\n baseDirectory: string,\n entitiesFile: string,\n envFile: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const entriesToImport = JSON.parse(fs.readFileSync(entitiesFile, 'utf8')).idm;\n\n const envReader = propertiesReader(envFile);\n\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ content, path }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = areScriptHooksValid(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles\n .filter(({ entityId }) => {\n return entriesToImport.includes(entityId);\n })\n .map(({ entityId, content }) => {\n const unsubstituted = unSubstituteEnvParams(content, envReader);\n return updateConfigEntity(entityId, JSON.parse(unsubstituted));\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Count number of managed objects of a given type\n * @param {String} type managed object type, e.g. alpha_user\n */\nexport async function countManagedObjects(type: string) {\n try {\n const result = await queryManagedObjects(type);\n printMessage(`${type}: ${result.length}`);\n } catch (error) {\n printMessage(error.response.data, 'error');\n printMessage(`Error querying managed objects by type: ${error}`, 'error');\n }\n}\n"],"mappings":"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"}
@@ -323,8 +323,8 @@ export async function importJourneysFromFiles(options) {
323
323
  try {
324
324
  await importJourneys(allJourneysData.trees, options);
325
325
  } catch (error) {
326
- var _error$response2, _error$response2$data;
327
- printMessage(`${((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : (_error$response2$data = _error$response2.data) === null || _error$response2$data === void 0 ? void 0 : _error$response2$data.message) || error.message}`, 'error');
326
+ var _error$response2;
327
+ printMessage(`${((_error$response2 = error.response) === null || _error$response2 === void 0 || (_error$response2 = _error$response2.data) === null || _error$response2 === void 0 ? void 0 : _error$response2.message) || error.message}`, 'error');
328
328
  }
329
329
  }
330
330