@rockcarver/frodo-cli 2.0.0-37 → 2.0.0-39

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 (104) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/esm/cli/_template/something-else-export.js +1 -1
  3. package/esm/cli/_template/something-else-export.js.map +1 -1
  4. package/esm/cli/_template/something-export.js +1 -1
  5. package/esm/cli/_template/something-export.js.map +1 -1
  6. package/esm/cli/_template/something-other-export.js +1 -1
  7. package/esm/cli/_template/something-other-export.js.map +1 -1
  8. package/esm/cli/admin/admin-federation-export.js +4 -4
  9. package/esm/cli/admin/admin-federation-export.js.map +1 -1
  10. package/esm/cli/agent/agent-export.js +4 -4
  11. package/esm/cli/agent/agent-export.js.map +1 -1
  12. package/esm/cli/agent/agent-gateway-export.js +4 -4
  13. package/esm/cli/agent/agent-gateway-export.js.map +1 -1
  14. package/esm/cli/agent/agent-java-export.js +4 -4
  15. package/esm/cli/agent/agent-java-export.js.map +1 -1
  16. package/esm/cli/agent/agent-web-export.js +4 -4
  17. package/esm/cli/agent/agent-web-export.js.map +1 -1
  18. package/esm/cli/app/app-export.js +4 -4
  19. package/esm/cli/app/app-export.js.map +1 -1
  20. package/esm/cli/authn/authn-export.js +2 -2
  21. package/esm/cli/authn/authn-export.js.map +1 -1
  22. package/esm/cli/authz/authz-policy-export.js +6 -6
  23. package/esm/cli/authz/authz-policy-export.js.map +1 -1
  24. package/esm/cli/authz/authz-set-export.js +4 -4
  25. package/esm/cli/authz/authz-set-export.js.map +1 -1
  26. package/esm/cli/authz/authz-type-export.js +5 -5
  27. package/esm/cli/authz/authz-type-export.js.map +1 -1
  28. package/esm/cli/config/config-export.js +3 -3
  29. package/esm/cli/config/config-export.js.map +1 -1
  30. package/esm/cli/email/email-template-export.js +4 -4
  31. package/esm/cli/email/email-template-export.js.map +1 -1
  32. package/esm/cli/esv/esv-secret-export.js +4 -4
  33. package/esm/cli/esv/esv-secret-export.js.map +1 -1
  34. package/esm/cli/esv/esv-secret-list.js +2 -2
  35. package/esm/cli/esv/esv-secret-list.js.map +1 -1
  36. package/esm/cli/esv/esv-variable-export.js +4 -4
  37. package/esm/cli/esv/esv-variable-export.js.map +1 -1
  38. package/esm/cli/esv/esv-variable-list.js +2 -2
  39. package/esm/cli/esv/esv-variable-list.js.map +1 -1
  40. package/esm/cli/idp/idp-export.js +4 -4
  41. package/esm/cli/idp/idp-export.js.map +1 -1
  42. package/esm/cli/journey/journey-describe.js +3 -1
  43. package/esm/cli/journey/journey-describe.js.map +1 -1
  44. package/esm/cli/journey/journey-export.js +4 -4
  45. package/esm/cli/journey/journey-export.js.map +1 -1
  46. package/esm/cli/oauth/oauth-client-export.js +4 -4
  47. package/esm/cli/oauth/oauth-client-export.js.map +1 -1
  48. package/esm/cli/saml/saml-cot-export.js +4 -4
  49. package/esm/cli/saml/saml-cot-export.js.map +1 -1
  50. package/esm/cli/saml/saml-export.js +4 -4
  51. package/esm/cli/saml/saml-export.js.map +1 -1
  52. package/esm/cli/script/script-export.js +4 -4
  53. package/esm/cli/script/script-export.js.map +1 -1
  54. package/esm/cli/script/script-list.js +2 -2
  55. package/esm/cli/script/script-list.js.map +1 -1
  56. package/esm/cli/service/service-export.js +4 -4
  57. package/esm/cli/service/service-export.js.map +1 -1
  58. package/esm/cli/theme/theme-export.js +5 -5
  59. package/esm/cli/theme/theme-export.js.map +1 -1
  60. package/esm/ops/AdminFederationOps.js +11 -7
  61. package/esm/ops/AdminFederationOps.js.map +1 -1
  62. package/esm/ops/AgentOps.js +39 -25
  63. package/esm/ops/AgentOps.js.map +1 -1
  64. package/esm/ops/ApplicationOps.js +11 -8
  65. package/esm/ops/ApplicationOps.js.map +1 -1
  66. package/esm/ops/AuthenticationSettingsOps.js +4 -3
  67. package/esm/ops/AuthenticationSettingsOps.js.map +1 -1
  68. package/esm/ops/CirclesOfTrustOps.js +12 -7
  69. package/esm/ops/CirclesOfTrustOps.js.map +1 -1
  70. package/esm/ops/ConfigOps.js +9 -7
  71. package/esm/ops/ConfigOps.js.map +1 -1
  72. package/esm/ops/EmailTemplateOps.js +11 -7
  73. package/esm/ops/EmailTemplateOps.js.map +1 -1
  74. package/esm/ops/IdmOps.js +3 -2
  75. package/esm/ops/IdmOps.js.map +1 -1
  76. package/esm/ops/IdpOps.js +14 -7
  77. package/esm/ops/IdpOps.js.map +1 -1
  78. package/esm/ops/JourneyOps.js +15 -6
  79. package/esm/ops/JourneyOps.js.map +1 -1
  80. package/esm/ops/OAuth2ClientOps.js +10 -7
  81. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  82. package/esm/ops/PolicyOps.js +18 -11
  83. package/esm/ops/PolicyOps.js.map +1 -1
  84. package/esm/ops/PolicySetOps.js +12 -7
  85. package/esm/ops/PolicySetOps.js.map +1 -1
  86. package/esm/ops/ResourceTypeOps.js +15 -9
  87. package/esm/ops/ResourceTypeOps.js.map +1 -1
  88. package/esm/ops/Saml2Ops.js +10 -7
  89. package/esm/ops/Saml2Ops.js.map +1 -1
  90. package/esm/ops/ScriptOps.js +73 -36
  91. package/esm/ops/ScriptOps.js.map +1 -1
  92. package/esm/ops/SecretsOps.js +76 -48
  93. package/esm/ops/SecretsOps.js.map +1 -1
  94. package/esm/ops/ServiceOps.js +10 -9
  95. package/esm/ops/ServiceOps.js.map +1 -1
  96. package/esm/ops/ThemeOps.js +15 -9
  97. package/esm/ops/ThemeOps.js.map +1 -1
  98. package/esm/ops/VariablesOps.js +49 -23
  99. package/esm/ops/VariablesOps.js.map +1 -1
  100. package/esm/utils/Config.js +147 -1
  101. package/esm/utils/Config.js.map +1 -1
  102. package/package.json +2 -2
  103. package/esm/utils/ExportImportUtils.js +0 -48
  104. package/esm/utils/ExportImportUtils.js.map +0 -1
@@ -1,9 +1,11 @@
1
1
  import { frodo, state } from '@rockcarver/frodo-lib';
2
2
  import fs from 'fs';
3
3
  import { createProgressIndicator, createTable, debugMessage, printMessage, stopProgressIndicator, updateProgressIndicator } from '../utils/Console';
4
- import { getTypedFilename, saveJsonToFile, titleCase } from '../utils/ExportImportUtils';
5
4
  const {
6
5
  getRealmName,
6
+ getTypedFilename,
7
+ saveJsonToFile,
8
+ titleCase,
7
9
  getFilePath,
8
10
  getWorkingDirectory
9
11
  } = frodo.utils;
@@ -81,8 +83,9 @@ export async function listCirclesOfTrust(long = false) {
81
83
  * Export a single circle of trust to file
82
84
  * @param {String} cotId circle of trust id/name
83
85
  * @param {String} file Optional filename
86
+ * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
84
87
  */
85
- export async function exportCircleOfTrustToFile(cotId, file = null) {
88
+ export async function exportCircleOfTrustToFile(cotId, file = null, includeMeta = true) {
86
89
  let outcome = false;
87
90
  debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: begin`);
88
91
  const indicatorId = createProgressIndicator('indeterminate', 0, `Exporting ${cotId}...`);
@@ -93,7 +96,7 @@ export async function exportCircleOfTrustToFile(cotId, file = null) {
93
96
  }
94
97
  const filePath = getFilePath(fileName, true);
95
98
  const exportData = await exportCircleOfTrust(cotId);
96
- saveJsonToFile(exportData, filePath);
99
+ saveJsonToFile(exportData, filePath, includeMeta);
97
100
  stopProgressIndicator(indicatorId, `Exported ${cotId} to ${filePath}.`, 'success');
98
101
  outcome = true;
99
102
  } catch (error) {
@@ -106,8 +109,9 @@ export async function exportCircleOfTrustToFile(cotId, file = null) {
106
109
  /**
107
110
  * Export all circles of trust to one file
108
111
  * @param {String} file Optional filename
112
+ * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
109
113
  */
110
- export async function exportCirclesOfTrustToFile(file = null) {
114
+ export async function exportCirclesOfTrustToFile(file = null, includeMeta = true) {
111
115
  let outcome = false;
112
116
  debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: begin`);
113
117
  const indicatorId = createProgressIndicator('indeterminate', 0, `Exporting all circles of trust...`);
@@ -118,7 +122,7 @@ export async function exportCirclesOfTrustToFile(file = null) {
118
122
  }
119
123
  const filePath = getFilePath(fileName, true);
120
124
  const exportData = await exportCirclesOfTrust();
121
- saveJsonToFile(exportData, filePath);
125
+ saveJsonToFile(exportData, filePath, includeMeta);
122
126
  stopProgressIndicator(indicatorId, `Exported all circles of trust to ${filePath}.`, 'success');
123
127
  outcome = true;
124
128
  } catch (error) {
@@ -130,8 +134,9 @@ export async function exportCirclesOfTrustToFile(file = null) {
130
134
 
131
135
  /**
132
136
  * Export all circles of trust to individual files
137
+ * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
133
138
  */
134
- export async function exportCirclesOfTrustToFiles() {
139
+ export async function exportCirclesOfTrustToFiles(includeMeta = true) {
135
140
  debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: begin`);
136
141
  const errors = [];
137
142
  let indicatorId;
@@ -142,7 +147,7 @@ export async function exportCirclesOfTrustToFiles() {
142
147
  const file = getTypedFilename(cot._id, 'cot.saml');
143
148
  try {
144
149
  const exportData = await exportCircleOfTrust(cot._id);
145
- saveJsonToFile(exportData, getFilePath(file, true));
150
+ saveJsonToFile(exportData, getFilePath(file, true), includeMeta);
146
151
  updateProgressIndicator(indicatorId, `Exported ${cot.name}.`);
147
152
  } catch (error) {
148
153
  errors.push(error);
@@ -1 +1 @@
1
- {"version":3,"file":"CirclesOfTrustOps.js","names":["frodo","state","fs","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","getTypedFilename","saveJsonToFile","titleCase","getRealmName","getFilePath","getWorkingDirectory","utils","readCirclesOfTrust","exportCircleOfTrust","exportCirclesOfTrust","importCircleOfTrust","importCirclesOfTrust","importFirstCircleOfTrust","saml2","circlesOfTrust","getOneLineDescription","cotObj","description","_id","getTableHeaderMd","markdown","getTableRowMd","row","status","trustedProviders","map","provider","split","join","listCirclesOfTrust","long","outcome","cotList","error","sort","a","b","localeCompare","forEach","cot","table","push","toString","exportCircleOfTrustToFile","cotId","file","indicatorId","fileName","filePath","exportData","message","exportCirclesOfTrustToFile","getRealm","exportCirclesOfTrustToFiles","errors","cots","length","name","importCircleOfTrustFromFile","data","readFileSync","fileData","JSON","parse","_error$response","response","importFirstCircleOfTrustFromFile","_error$response2","importCirclesOfTrustFromFile","_error$response3","importCirclesOfTrustFromFiles","names","readdirSync","files","filter","toLowerCase","endsWith","total","count","Object","keys","saml"],"sources":["../../src/ops/CirclesOfTrustOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type CircleOfTrustSkeleton } from '@rockcarver/frodo-lib/types/api/CirclesOfTrustApi';\nimport { type CirclesOfTrustExportInterface } from '@rockcarver/frodo-lib/types/ops/CirclesOfTrustOps';\nimport fs from 'fs';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\n\nconst { getRealmName, getFilePath, getWorkingDirectory } = frodo.utils;\nconst {\n readCirclesOfTrust,\n exportCircleOfTrust,\n exportCirclesOfTrust,\n importCircleOfTrust,\n importCirclesOfTrust,\n importFirstCircleOfTrust,\n} = frodo.saml2.circlesOfTrust;\n\n/**\n * Get a one-line description of the circle of trust object\n * @param {CircleOfTrustSkeleton} cotObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(cotObj: CircleOfTrustSkeleton): string {\n const description = `[${cotObj._id['brightCyan']}]`;\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 += '| Name/Id | Status | Trusted Providers |\\n';\n markdown += '| ------- | ------ | ----------------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the circle of trust in markdown\n * @param {SocialIdpSkeleton} cotObj circle of trust object to describe\n * @returns {string} a table-row of the circle of trust in markdown\n */\nexport function getTableRowMd(cotObj: CircleOfTrustSkeleton): string {\n const row = `| ${cotObj._id} | ${\n cotObj.status === 'active'\n ? ':white_check_mark: `active`'\n : ':o: `inactive`'\n } | ${cotObj.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('<br>')} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {String} long Long list format with details\n */\nexport async function listCirclesOfTrust(long = false): Promise<boolean> {\n let outcome = false;\n let cotList = [];\n try {\n cotList = await readCirclesOfTrust();\n } catch (error) {\n printMessage(`readCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n cotList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n cotList.forEach((cot) => {\n printMessage(`${cot._id}`, 'data');\n });\n outcome = true;\n } else {\n const table = createTable([\n 'Name'['brightCyan'],\n 'Description'['brightCyan'],\n 'Status'['brightCyan'],\n 'Trusted Providers'['brightCyan'],\n ]);\n cotList.forEach((cot) => {\n table.push([\n cot._id,\n cot.description,\n cot.status,\n cot.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('\\n'),\n ]);\n });\n printMessage(table.toString(), 'data');\n outcome = true;\n }\n return outcome;\n}\n\n/**\n * Export a single circle of trust to file\n * @param {String} cotId circle of trust id/name\n * @param {String} file Optional filename\n */\nexport async function exportCircleOfTrustToFile(\n cotId: string,\n file: string = null\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: begin`);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Exporting ${cotId}...`\n );\n try {\n let fileName = getTypedFilename(cotId, 'cot.saml');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportCircleOfTrust(cotId);\n saveJsonToFile(exportData, filePath);\n stopProgressIndicator(\n indicatorId,\n `Exported ${cotId} to ${filePath}.`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error exporting ${cotId}: ${error.message}`,\n 'fail'\n );\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: end`);\n return outcome;\n}\n\n/**\n * Export all circles of trust to one file\n * @param {String} file Optional filename\n */\nexport async function exportCirclesOfTrustToFile(\n file: string = null\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: begin`);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Exporting all circles of trust...`\n );\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}CirclesOfTrust`,\n 'cot.saml'\n );\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportCirclesOfTrust();\n saveJsonToFile(exportData, filePath);\n stopProgressIndicator(\n indicatorId,\n `Exported all circles of trust to ${filePath}.`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error exporting circles of trust: ${error.message}`,\n 'fail'\n );\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: end`);\n return outcome;\n}\n\n/**\n * Export all circles of trust to individual files\n */\nexport async function exportCirclesOfTrustToFiles(): Promise<boolean> {\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: begin`);\n const errors = [];\n let indicatorId: string;\n try {\n const cots: CircleOfTrustSkeleton[] = await readCirclesOfTrust();\n indicatorId = createProgressIndicator(\n 'determinate',\n cots.length,\n 'Exporting circles of trust...'\n );\n for (const cot of cots) {\n const file = getTypedFilename(cot._id, 'cot.saml');\n try {\n const exportData: CirclesOfTrustExportInterface =\n await exportCircleOfTrust(cot._id);\n saveJsonToFile(exportData, getFilePath(file, true));\n updateProgressIndicator(indicatorId, `Exported ${cot.name}.`);\n } catch (error) {\n errors.push(error);\n updateProgressIndicator(indicatorId, `Error exporting ${cot.name}.`);\n }\n }\n stopProgressIndicator(indicatorId, `Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressIndicator(\n indicatorId,\n `Error exporting circles of trust to files`\n );\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {String} file Import file name\n */\nexport async function importCircleOfTrustFromFile(\n cotId: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing circle of trust ${cotId} from ${filePath}...`\n );\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importCircleOfTrust(cotId, fileData);\n outcome = true;\n stopProgressIndicator(\n indicatorId,\n `Imported circle of trust ${cotId} from ${filePath}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing circle of trust ${cotId} from ${filePath}.`,\n 'fail'\n );\n printMessage(error.response?.data || error, 'error');\n }\n return outcome;\n}\n\n/**\n * Import first SAML circle of trust from file\n * @param {String} file Import file name\n */\nexport async function importFirstCircleOfTrustFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing first circle of trust from ${filePath}...`\n );\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importFirstCircleOfTrust(fileData);\n outcome = true;\n stopProgressIndicator(\n indicatorId,\n `Imported first circle of trust from ${filePath}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing first circle of trust from ${filePath}.`,\n 'fail'\n );\n printMessage(error.response?.data || error, 'error');\n }\n return outcome;\n}\n\n/**\n * Import all SAML circles of trust from file\n * @param {String} file Import file name\n */\nexport async function importCirclesOfTrustFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing circles of trust from ${filePath}...`\n );\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importCirclesOfTrust(fileData);\n outcome = true;\n stopProgressIndicator(\n indicatorId,\n `Imported circles of trust from ${filePath}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing circles of trust from ${filePath}.`,\n 'fail'\n );\n printMessage(error.response?.data || error, 'error');\n }\n return outcome;\n}\n\n/**\n * Import all SAML circles of trust from all *.cot.saml.json files in the current directory\n */\nexport async function importCirclesOfTrustFromFiles(): Promise<boolean> {\n const errors = [];\n let indicatorId: string;\n try {\n debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: begin`);\n const names = fs.readdirSync(getWorkingDirectory());\n const files = names\n .filter((name) => name.toLowerCase().endsWith('.cot.saml.json'))\n .map((name) => getFilePath(name));\n indicatorId = createProgressIndicator(\n 'determinate',\n files.length,\n 'Importing circles of trust...'\n );\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: CirclesOfTrustExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.saml.cot).length;\n total += count;\n await importCirclesOfTrust(fileData);\n updateProgressIndicator(\n indicatorId,\n `Imported ${count} circles of trust from ${file}`\n );\n } catch (error) {\n errors.push(error);\n updateProgressIndicator(\n indicatorId,\n `Error importing circles of trust from ${file}`\n );\n printMessage(error, 'error');\n }\n }\n stopProgressIndicator(\n indicatorId,\n `Imported ${total} circles of trust from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressIndicator(\n indicatorId,\n `Error importing circles of trust from files.`\n );\n printMessage(error, 'error');\n }\n debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CirclesOfTrustOps.js","names":["frodo","state","fs","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","getRealmName","getTypedFilename","saveJsonToFile","titleCase","getFilePath","getWorkingDirectory","utils","readCirclesOfTrust","exportCircleOfTrust","exportCirclesOfTrust","importCircleOfTrust","importCirclesOfTrust","importFirstCircleOfTrust","saml2","circlesOfTrust","getOneLineDescription","cotObj","description","_id","getTableHeaderMd","markdown","getTableRowMd","row","status","trustedProviders","map","provider","split","join","listCirclesOfTrust","long","outcome","cotList","error","sort","a","b","localeCompare","forEach","cot","table","push","toString","exportCircleOfTrustToFile","cotId","file","includeMeta","indicatorId","fileName","filePath","exportData","message","exportCirclesOfTrustToFile","getRealm","exportCirclesOfTrustToFiles","errors","cots","length","name","importCircleOfTrustFromFile","data","readFileSync","fileData","JSON","parse","_error$response","response","importFirstCircleOfTrustFromFile","_error$response2","importCirclesOfTrustFromFile","_error$response3","importCirclesOfTrustFromFiles","names","readdirSync","files","filter","toLowerCase","endsWith","total","count","Object","keys","saml"],"sources":["../../src/ops/CirclesOfTrustOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type CircleOfTrustSkeleton } from '@rockcarver/frodo-lib/types/api/CirclesOfTrustApi';\nimport { type CirclesOfTrustExportInterface } from '@rockcarver/frodo-lib/types/ops/CirclesOfTrustOps';\nimport fs from 'fs';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\n\nconst {\n getRealmName,\n getTypedFilename,\n saveJsonToFile,\n titleCase,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readCirclesOfTrust,\n exportCircleOfTrust,\n exportCirclesOfTrust,\n importCircleOfTrust,\n importCirclesOfTrust,\n importFirstCircleOfTrust,\n} = frodo.saml2.circlesOfTrust;\n\n/**\n * Get a one-line description of the circle of trust object\n * @param {CircleOfTrustSkeleton} cotObj circle of trust object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(cotObj: CircleOfTrustSkeleton): string {\n const description = `[${cotObj._id['brightCyan']}]`;\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 += '| Name/Id | Status | Trusted Providers |\\n';\n markdown += '| ------- | ------ | ----------------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the circle of trust in markdown\n * @param {SocialIdpSkeleton} cotObj circle of trust object to describe\n * @returns {string} a table-row of the circle of trust in markdown\n */\nexport function getTableRowMd(cotObj: CircleOfTrustSkeleton): string {\n const row = `| ${cotObj._id} | ${\n cotObj.status === 'active'\n ? ':white_check_mark: `active`'\n : ':o: `inactive`'\n } | ${cotObj.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('<br>')} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {String} long Long list format with details\n */\nexport async function listCirclesOfTrust(long = false): Promise<boolean> {\n let outcome = false;\n let cotList = [];\n try {\n cotList = await readCirclesOfTrust();\n } catch (error) {\n printMessage(`readCirclesOfTrust ERROR: ${error}`, 'error');\n printMessage(error, 'data');\n }\n cotList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n cotList.forEach((cot) => {\n printMessage(`${cot._id}`, 'data');\n });\n outcome = true;\n } else {\n const table = createTable([\n 'Name'['brightCyan'],\n 'Description'['brightCyan'],\n 'Status'['brightCyan'],\n 'Trusted Providers'['brightCyan'],\n ]);\n cotList.forEach((cot) => {\n table.push([\n cot._id,\n cot.description,\n cot.status,\n cot.trustedProviders\n .map((provider) => provider.split('|')[0])\n .join('\\n'),\n ]);\n });\n printMessage(table.toString(), 'data');\n outcome = true;\n }\n return outcome;\n}\n\n/**\n * Export a single circle of trust to file\n * @param {String} cotId circle of trust id/name\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportCircleOfTrustToFile(\n cotId: string,\n file: string = null,\n includeMeta = true\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: begin`);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Exporting ${cotId}...`\n );\n try {\n let fileName = getTypedFilename(cotId, 'cot.saml');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportCircleOfTrust(cotId);\n saveJsonToFile(exportData, filePath, includeMeta);\n stopProgressIndicator(\n indicatorId,\n `Exported ${cotId} to ${filePath}.`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error exporting ${cotId}: ${error.message}`,\n 'fail'\n );\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: end`);\n return outcome;\n}\n\n/**\n * Export all circles of trust to one file\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportCirclesOfTrustToFile(\n file: string = null,\n includeMeta = true\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: begin`);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Exporting all circles of trust...`\n );\n try {\n let fileName = getTypedFilename(\n `all${titleCase(getRealmName(state.getRealm()))}CirclesOfTrust`,\n 'cot.saml'\n );\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await exportCirclesOfTrust();\n saveJsonToFile(exportData, filePath, includeMeta);\n stopProgressIndicator(\n indicatorId,\n `Exported all circles of trust to ${filePath}.`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error exporting circles of trust: ${error.message}`,\n 'fail'\n );\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: end`);\n return outcome;\n}\n\n/**\n * Export all circles of trust to individual files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportCirclesOfTrustToFiles(\n includeMeta = true\n): Promise<boolean> {\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: begin`);\n const errors = [];\n let indicatorId: string;\n try {\n const cots: CircleOfTrustSkeleton[] = await readCirclesOfTrust();\n indicatorId = createProgressIndicator(\n 'determinate',\n cots.length,\n 'Exporting circles of trust...'\n );\n for (const cot of cots) {\n const file = getTypedFilename(cot._id, 'cot.saml');\n try {\n const exportData: CirclesOfTrustExportInterface =\n await exportCircleOfTrust(cot._id);\n saveJsonToFile(exportData, getFilePath(file, true), includeMeta);\n updateProgressIndicator(indicatorId, `Exported ${cot.name}.`);\n } catch (error) {\n errors.push(error);\n updateProgressIndicator(indicatorId, `Error exporting ${cot.name}.`);\n }\n }\n stopProgressIndicator(indicatorId, `Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressIndicator(\n indicatorId,\n `Error exporting circles of trust to files`\n );\n }\n debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import a SAML circle of trust by id/name from file\n * @param {String} cotId Circle of trust id/name\n * @param {String} file Import file name\n */\nexport async function importCircleOfTrustFromFile(\n cotId: string,\n file: string\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing circle of trust ${cotId} from ${filePath}...`\n );\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importCircleOfTrust(cotId, fileData);\n outcome = true;\n stopProgressIndicator(\n indicatorId,\n `Imported circle of trust ${cotId} from ${filePath}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing circle of trust ${cotId} from ${filePath}.`,\n 'fail'\n );\n printMessage(error.response?.data || error, 'error');\n }\n return outcome;\n}\n\n/**\n * Import first SAML circle of trust from file\n * @param {String} file Import file name\n */\nexport async function importFirstCircleOfTrustFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing first circle of trust from ${filePath}...`\n );\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importFirstCircleOfTrust(fileData);\n outcome = true;\n stopProgressIndicator(\n indicatorId,\n `Imported first circle of trust from ${filePath}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing first circle of trust from ${filePath}.`,\n 'fail'\n );\n printMessage(error.response?.data || error, 'error');\n }\n return outcome;\n}\n\n/**\n * Import all SAML circles of trust from file\n * @param {String} file Import file name\n */\nexport async function importCirclesOfTrustFromFile(\n file: string\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing circles of trust from ${filePath}...`\n );\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importCirclesOfTrust(fileData);\n outcome = true;\n stopProgressIndicator(\n indicatorId,\n `Imported circles of trust from ${filePath}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing circles of trust from ${filePath}.`,\n 'fail'\n );\n printMessage(error.response?.data || error, 'error');\n }\n return outcome;\n}\n\n/**\n * Import all SAML circles of trust from all *.cot.saml.json files in the current directory\n */\nexport async function importCirclesOfTrustFromFiles(): Promise<boolean> {\n const errors = [];\n let indicatorId: string;\n try {\n debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: begin`);\n const names = fs.readdirSync(getWorkingDirectory());\n const files = names\n .filter((name) => name.toLowerCase().endsWith('.cot.saml.json'))\n .map((name) => getFilePath(name));\n indicatorId = createProgressIndicator(\n 'determinate',\n files.length,\n 'Importing circles of trust...'\n );\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: CirclesOfTrustExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.saml.cot).length;\n total += count;\n await importCirclesOfTrust(fileData);\n updateProgressIndicator(\n indicatorId,\n `Imported ${count} circles of trust from ${file}`\n );\n } catch (error) {\n errors.push(error);\n updateProgressIndicator(\n indicatorId,\n `Error importing circles of trust from ${file}`\n );\n printMessage(error, 'error');\n }\n }\n stopProgressIndicator(\n indicatorId,\n `Imported ${total} circles of trust from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressIndicator(\n indicatorId,\n `Error importing circles of trust from files.`\n );\n printMessage(error, 'error');\n }\n debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
@@ -21,9 +21,10 @@ const {
21
21
  /**
22
22
  * Export everything to separate files
23
23
  * @param file file name
24
+ * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
24
25
  * @param {FullExportOptions} options export options
25
26
  */
26
- export async function exportEverythingToFile(file, options = {
27
+ export async function exportEverythingToFile(file, includeMeta = true, options = {
27
28
  useStringArrays: true,
28
29
  noDecode: false
29
30
  }) {
@@ -32,15 +33,16 @@ export async function exportEverythingToFile(file, options = {
32
33
  if (file) {
33
34
  fileName = file;
34
35
  }
35
- saveJsonToFile(exportData, getFilePath(fileName, true));
36
+ saveJsonToFile(exportData, getFilePath(fileName, true), includeMeta);
36
37
  }
37
38
 
38
39
  /**
39
40
  * Export everything to separate files
40
41
  * @param extract Extracts the scripts from the exports into separate files if true
42
+ * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
41
43
  * @param {FullExportOptions} options export options
42
44
  */
43
- export async function exportEverythingToFiles(extract = false, options = {
45
+ export async function exportEverythingToFiles(extract = false, includeMeta = true, options = {
44
46
  useStringArrays: true,
45
47
  noDecode: false
46
48
  }) {
@@ -71,7 +73,7 @@ export async function exportEverythingToFiles(extract = false, options = {
71
73
  samlData.saml.cot = {
72
74
  [id]: value
73
75
  };
74
- saveJsonToFile(samlData, `${baseDirectory}/cot/${getTypedFilename(id, 'cot.saml')}`);
76
+ saveJsonToFile(samlData, `${baseDirectory}/cot/${getTypedFilename(id, 'cot.saml')}`, includeMeta);
75
77
  });
76
78
  samlData.saml.cot = {};
77
79
  }
@@ -84,14 +86,14 @@ export async function exportEverythingToFiles(extract = false, options = {
84
86
  samlData.saml.metadata = {
85
87
  [id]: obj.metadata[id]
86
88
  };
87
- saveJsonToFile(samlData, `${baseDirectory}/${type}/${filename}`);
89
+ saveJsonToFile(samlData, `${baseDirectory}/${type}/${filename}`, includeMeta);
88
90
  samlData.saml[samlType] = {};
89
91
  });
90
92
  } else if (type == 'authentication') {
91
93
  const fileName = getTypedFilename(`${frodo.utils.getRealmName(state.getRealm())}Realm`, 'authentication.settings');
92
94
  saveJsonToFile({
93
95
  authentication: obj
94
- }, `${baseDirectory}/${type}/${fileName}`);
96
+ }, `${baseDirectory}/${type}/${fileName}`, includeMeta);
95
97
  } else {
96
98
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
97
99
  Object.entries(obj).forEach(([id, value]) => {
@@ -118,7 +120,7 @@ export async function exportEverythingToFiles(extract = false, options = {
118
120
  [type]: {
119
121
  [id]: value
120
122
  }
121
- }, `${baseDirectory}/${type}/${filename}`);
123
+ }, `${baseDirectory}/${type}/${filename}`, includeMeta);
122
124
  }
123
125
  });
124
126
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigOps.js","names":["frodo","state","fs","fse","printMessage","extractScriptToFile","getRealmName","getTypedFilename","titleCase","saveJsonToFile","getFilePath","getWorkingDirectory","utils","exportFullConfiguration","config","stringify","json","exportEverythingToFile","file","options","useStringArrays","noDecode","exportData","fileName","getRealm","exportEverythingToFiles","extract","meta","baseDirectory","Object","entries","forEach","type","obj","existsSync","mkdirSync","samlData","saml","cot","hosted","metadata","remote","id","value","concat","filename","entityId","samlType","authentication","includes","slice","lastIndexOf","recursive","outputFile","err","name"],"sources":["../../src/ops/ConfigOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n FullExportInterface,\n FullExportOptions,\n} from '@rockcarver/frodo-lib/types/ops/ConfigOps';\nimport { ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport fs from 'fs';\nimport fse from 'fs-extra';\n\nimport { printMessage } from '../utils/Console';\nimport { extractScriptToFile } from './ScriptOps';\n\nconst {\n getRealmName,\n getTypedFilename,\n titleCase,\n saveJsonToFile,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst { exportFullConfiguration } = frodo.config;\nconst { stringify } = frodo.utils.json;\n\n/**\n * Export everything to separate files\n * @param file file name\n * @param {FullExportOptions} options export options\n */\nexport async function exportEverythingToFile(\n file,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n }\n): Promise<void> {\n const exportData = await exportFullConfiguration(options);\n let fileName = getTypedFilename(\n `${titleCase(getRealmName(state.getRealm()))}`,\n `everything`\n );\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, getFilePath(fileName, true));\n}\n\n/**\n * Export everything to separate files\n * @param extract Extracts the scripts from the exports into separate files if true\n * @param {FullExportOptions} options export options\n */\nexport async function exportEverythingToFiles(\n extract = false,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n }\n): Promise<void> {\n const exportData: FullExportInterface =\n await exportFullConfiguration(options);\n delete exportData.meta;\n const baseDirectory = getWorkingDirectory(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(exportData).forEach(([type, obj]: [string, any]) => {\n if (obj) {\n if (!fs.existsSync(`${baseDirectory}/${type}`)) {\n fs.mkdirSync(`${baseDirectory}/${type}`);\n }\n if (type == 'saml') {\n const samlData = {\n saml: {\n cot: {},\n hosted: {},\n metadata: {},\n remote: {},\n },\n };\n if (obj.cot) {\n if (!fs.existsSync(`${baseDirectory}/cot`)) {\n fs.mkdirSync(`${baseDirectory}/cot`);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj.cot).forEach(([id, value]: [string, any]) => {\n samlData.saml.cot = {\n [id]: value,\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/cot/${getTypedFilename(id, 'cot.saml')}`\n );\n });\n samlData.saml.cot = {};\n }\n Object.entries(obj.hosted)\n .concat(Object.entries(obj.remote))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .forEach(([id, value]: [string, any]) => {\n const filename = getTypedFilename(\n value.entityId ? value.entityId : id,\n type\n );\n const samlType = obj.hosted[id] ? 'hosted' : 'remote';\n samlData.saml[samlType][id] = value;\n samlData.saml.metadata = {\n [id]: obj.metadata[id],\n };\n saveJsonToFile(samlData, `${baseDirectory}/${type}/${filename}`);\n samlData.saml[samlType] = {};\n });\n } else if (type == 'authentication') {\n const fileName = getTypedFilename(\n `${frodo.utils.getRealmName(state.getRealm())}Realm`,\n 'authentication.settings'\n );\n saveJsonToFile(\n {\n authentication: obj,\n },\n `${baseDirectory}/${type}/${fileName}`\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj).forEach(([id, value]: [string, any]) => {\n if (type == 'config') {\n if (value != null) {\n const filename = `${id}.json`;\n if (filename.includes('/')) {\n fs.mkdirSync(\n `${baseDirectory}/${type}/${filename.slice(\n 0,\n filename.lastIndexOf('/')\n )}`,\n {\n recursive: true,\n }\n );\n }\n fse.outputFile(\n `${baseDirectory}/${type}/${filename}`,\n stringify(value),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n } else {\n const filename = getTypedFilename(\n value && value.name ? value.name : id,\n type\n );\n if (extract && type == 'script') {\n extractScriptToFile(\n exportData as ScriptExportInterface,\n id,\n type\n );\n }\n saveJsonToFile(\n {\n [type]: {\n [id]: value,\n },\n },\n `${baseDirectory}/${type}/${filename}`\n );\n }\n });\n }\n }\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ConfigOps.js","names":["frodo","state","fs","fse","printMessage","extractScriptToFile","getRealmName","getTypedFilename","titleCase","saveJsonToFile","getFilePath","getWorkingDirectory","utils","exportFullConfiguration","config","stringify","json","exportEverythingToFile","file","includeMeta","options","useStringArrays","noDecode","exportData","fileName","getRealm","exportEverythingToFiles","extract","meta","baseDirectory","Object","entries","forEach","type","obj","existsSync","mkdirSync","samlData","saml","cot","hosted","metadata","remote","id","value","concat","filename","entityId","samlType","authentication","includes","slice","lastIndexOf","recursive","outputFile","err","name"],"sources":["../../src/ops/ConfigOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n FullExportInterface,\n FullExportOptions,\n} from '@rockcarver/frodo-lib/types/ops/ConfigOps';\nimport { ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport fs from 'fs';\nimport fse from 'fs-extra';\n\nimport { printMessage } from '../utils/Console';\nimport { extractScriptToFile } from './ScriptOps';\n\nconst {\n getRealmName,\n getTypedFilename,\n titleCase,\n saveJsonToFile,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst { exportFullConfiguration } = frodo.config;\nconst { stringify } = frodo.utils.json;\n\n/**\n * Export everything to separate files\n * @param file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n */\nexport async function exportEverythingToFile(\n file,\n includeMeta = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n }\n): Promise<void> {\n const exportData = await exportFullConfiguration(options);\n let fileName = getTypedFilename(\n `${titleCase(getRealmName(state.getRealm()))}`,\n `everything`\n );\n if (file) {\n fileName = file;\n }\n saveJsonToFile(exportData, getFilePath(fileName, true), includeMeta);\n}\n\n/**\n * Export everything to separate files\n * @param extract Extracts the scripts from the exports into separate files if true\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @param {FullExportOptions} options export options\n */\nexport async function exportEverythingToFiles(\n extract = false,\n includeMeta = true,\n options: FullExportOptions = {\n useStringArrays: true,\n noDecode: false,\n }\n): Promise<void> {\n const exportData: FullExportInterface =\n await exportFullConfiguration(options);\n delete exportData.meta;\n const baseDirectory = getWorkingDirectory(true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(exportData).forEach(([type, obj]: [string, any]) => {\n if (obj) {\n if (!fs.existsSync(`${baseDirectory}/${type}`)) {\n fs.mkdirSync(`${baseDirectory}/${type}`);\n }\n if (type == 'saml') {\n const samlData = {\n saml: {\n cot: {},\n hosted: {},\n metadata: {},\n remote: {},\n },\n };\n if (obj.cot) {\n if (!fs.existsSync(`${baseDirectory}/cot`)) {\n fs.mkdirSync(`${baseDirectory}/cot`);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj.cot).forEach(([id, value]: [string, any]) => {\n samlData.saml.cot = {\n [id]: value,\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/cot/${getTypedFilename(id, 'cot.saml')}`,\n includeMeta\n );\n });\n samlData.saml.cot = {};\n }\n Object.entries(obj.hosted)\n .concat(Object.entries(obj.remote))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .forEach(([id, value]: [string, any]) => {\n const filename = getTypedFilename(\n value.entityId ? value.entityId : id,\n type\n );\n const samlType = obj.hosted[id] ? 'hosted' : 'remote';\n samlData.saml[samlType][id] = value;\n samlData.saml.metadata = {\n [id]: obj.metadata[id],\n };\n saveJsonToFile(\n samlData,\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n samlData.saml[samlType] = {};\n });\n } else if (type == 'authentication') {\n const fileName = getTypedFilename(\n `${frodo.utils.getRealmName(state.getRealm())}Realm`,\n 'authentication.settings'\n );\n saveJsonToFile(\n {\n authentication: obj,\n },\n `${baseDirectory}/${type}/${fileName}`,\n includeMeta\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(obj).forEach(([id, value]: [string, any]) => {\n if (type == 'config') {\n if (value != null) {\n const filename = `${id}.json`;\n if (filename.includes('/')) {\n fs.mkdirSync(\n `${baseDirectory}/${type}/${filename.slice(\n 0,\n filename.lastIndexOf('/')\n )}`,\n {\n recursive: true,\n }\n );\n }\n fse.outputFile(\n `${baseDirectory}/${type}/${filename}`,\n stringify(value),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n } else {\n const filename = getTypedFilename(\n value && value.name ? value.name : id,\n type\n );\n if (extract && type == 'script') {\n extractScriptToFile(\n exportData as ScriptExportInterface,\n id,\n type\n );\n }\n saveJsonToFile(\n {\n [type]: {\n [id]: value,\n },\n },\n `${baseDirectory}/${type}/${filename}`,\n includeMeta\n );\n }\n });\n }\n }\n });\n}\n"],"mappings":"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"}
@@ -2,11 +2,12 @@ import { frodo } from '@rockcarver/frodo-lib';
2
2
  import fs from 'fs';
3
3
  import path from 'path';
4
4
  import { createProgressIndicator, createTable, debugMessage, printMessage, stopProgressIndicator, updateProgressIndicator } from '../utils/Console';
5
- import { getTypedFilename, saveJsonToFile } from '../utils/ExportImportUtils';
6
5
  import { cloneDeep } from './utils/OpsUtils';
7
6
  import wordwrap from './utils/Wordwrap';
8
7
  const {
9
8
  validateImport,
9
+ getTypedFilename,
10
+ saveJsonToFile,
10
11
  getFilePath,
11
12
  getWorkingDirectory
12
13
  } = frodo.utils;
@@ -104,8 +105,9 @@ export async function listEmailTemplates(long = false) {
104
105
  * Export single email template to a file
105
106
  * @param {string} templateId email template id to export
106
107
  * @param {string} file filename where to export the template data
108
+ * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
107
109
  */
108
- export async function exportEmailTemplateToFile(templateId, file) {
110
+ export async function exportEmailTemplateToFile(templateId, file, includeMeta = true) {
109
111
  let fileName = file;
110
112
  if (!fileName) {
111
113
  fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);
@@ -117,7 +119,7 @@ export async function exportEmailTemplateToFile(templateId, file) {
117
119
  updateProgressIndicator(indicatorId, `Writing file ${filePath}`);
118
120
  const fileData = getFileDataTemplate();
119
121
  fileData.emailTemplate[templateId] = templateData;
120
- saveJsonToFile(fileData, filePath);
122
+ saveJsonToFile(fileData, filePath, includeMeta);
121
123
  stopProgressIndicator(indicatorId, `Exported ${templateId['brightCyan']} to ${filePath['brightCyan']}.`);
122
124
  } catch (err) {
123
125
  stopProgressIndicator(indicatorId, `${err}`);
@@ -128,8 +130,9 @@ export async function exportEmailTemplateToFile(templateId, file) {
128
130
  /**
129
131
  * Export all email templates to file
130
132
  * @param {String} file optional filename
133
+ * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
131
134
  */
132
- export async function exportEmailTemplatesToFile(file) {
135
+ export async function exportEmailTemplatesToFile(file, includeMeta = true) {
133
136
  let fileName = file;
134
137
  if (!fileName) {
135
138
  fileName = getTypedFilename(`allEmailTemplates`, EMAIL_TEMPLATE_FILE_TYPE);
@@ -137,7 +140,7 @@ export async function exportEmailTemplatesToFile(file) {
137
140
  const filePath = getFilePath(fileName, true);
138
141
  try {
139
142
  const exportData = await exportEmailTemplates();
140
- saveJsonToFile(exportData, filePath);
143
+ saveJsonToFile(exportData, filePath, includeMeta);
141
144
  } catch (err) {
142
145
  printMessage(err, 'error');
143
146
  }
@@ -145,8 +148,9 @@ export async function exportEmailTemplatesToFile(file) {
145
148
 
146
149
  /**
147
150
  * Export all email templates to separate files
151
+ * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
148
152
  */
149
- export async function exportEmailTemplatesToFiles() {
153
+ export async function exportEmailTemplatesToFiles(includeMeta = true) {
150
154
  let indicatorId;
151
155
  try {
152
156
  const exportData = Object.entries((await exportEmailTemplates()).emailTemplate);
@@ -156,7 +160,7 @@ export async function exportEmailTemplatesToFiles() {
156
160
  const fileData = getFileDataTemplate();
157
161
  updateProgressIndicator(indicatorId, `Exporting ${templateId}`);
158
162
  fileData.emailTemplate[templateId] = template;
159
- saveJsonToFile(fileData, getFilePath(fileName, true));
163
+ saveJsonToFile(fileData, getFilePath(fileName, true), includeMeta);
160
164
  }
161
165
  stopProgressIndicator(indicatorId, `${exportData.length} templates written.`);
162
166
  } catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"EmailTemplateOps.js","names":["frodo","fs","path","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","getTypedFilename","saveJsonToFile","cloneDeep","wordwrap","validateImport","getFilePath","getWorkingDirectory","utils","EMAIL_TEMPLATE_TYPE","readEmailTemplates","readEmailTemplate","exportEmailTemplates","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","indicatorId","templateData","fileData","err","exportEmailTemplatesToFile","exportData","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","data","readFileSync","JSON","parse","getTemplateIdFromFileName","emailTemplateData","s2sConvert","updateEmailTemplateError","importEmailTemplatesFromFile","id","response","basename","Error","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","map","total","totalErrors","errors","_updateEmailTemplateE","hasOwnProperty","call","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 printMessage,\n stopProgressIndicator,\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 exportEmailTemplates,\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 const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting ${templateId}`\n );\n try {\n const templateData = await readEmailTemplate(templateId);\n updateProgressIndicator(indicatorId, `Writing file ${filePath}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, filePath);\n stopProgressIndicator(\n indicatorId,\n `Exported ${templateId['brightCyan']} to ${filePath['brightCyan']}.`\n );\n } catch (err) {\n stopProgressIndicator(indicatorId, `${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 exportData = await exportEmailTemplates();\n saveJsonToFile(exportData, filePath);\n } catch (err) {\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to separate files\n */\nexport async function exportEmailTemplatesToFiles() {\n let indicatorId: string;\n try {\n const exportData = Object.entries(\n (await exportEmailTemplates()).emailTemplate\n );\n indicatorId = createProgressIndicator(\n 'determinate',\n exportData.length,\n 'Writing email templates'\n );\n for (const [templateId, template] of exportData) {\n const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n const fileData = getFileDataTemplate();\n updateProgressIndicator(indicatorId, `Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n saveJsonToFile(fileData, getFilePath(fileName, true));\n }\n stopProgressIndicator(\n indicatorId,\n `${exportData.length} templates written.`\n );\n } catch (err) {\n stopProgressIndicator(indicatorId, `${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 try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Importing ${templateId}`\n );\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(indicatorId, `Importing ${templateId}`);\n stopProgressIndicator(indicatorId, `Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n stopProgressIndicator(indicatorId, `${updateEmailTemplateError}`);\n printMessage(updateEmailTemplateError, 'error');\n }\n } else {\n stopProgressIndicator(\n indicatorId,\n `Email template ${templateId} not found in ${filePath}!`\n );\n printMessage(\n `Email template ${templateId} not found in ${filePath}!`,\n 'error'\n );\n }\n } catch (error) {\n printMessage(\n `Error importing email template ${templateId}: ${error}`,\n '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 try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n const indicatorId = createProgressIndicator(\n 'determinate',\n Object.keys(fileData.emailTemplate).length,\n `Importing email templates`\n );\n for (const id of Object.keys(fileData.emailTemplate)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await updateEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(indicatorId, `Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError.response.data, 'error');\n }\n }\n stopProgressIndicator(indicatorId, `Done.`);\n } catch (error) {\n printMessage(`Error importing email templates: ${error}`, 'error');\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 const indicatorId = 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(indicatorId, `Imported ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n indicatorId,\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 let indicatorId: string;\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing first email template`\n );\n if (raw) {\n try {\n const templateId = getTemplateIdFromFileName(file);\n const templateData = s2sConvert(fileData);\n await updateEmailTemplate(templateId, templateData);\n stopProgressIndicator(indicatorId, `Imported ${templateId}`, 'success');\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing email template: ${error}`,\n 'fail'\n );\n printMessage(error.response?.data, 'error');\n }\n } else {\n for (const id of Object.keys(fileData.emailTemplate)) {\n try {\n await updateEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n stopProgressIndicator(indicatorId, `Imported ${id}`, 'success');\n } catch (updateEmailTemplateError) {\n stopProgressIndicator(indicatorId, `Error importing ${id}`, 'fail');\n printMessage(updateEmailTemplateError.response?.data, 'error');\n }\n break;\n }\n }\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing first email template`,\n 'fail'\n );\n printMessage(`Error importing first email template: ${error}`, 'error');\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"EmailTemplateOps.js","names":["frodo","fs","path","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","cloneDeep","wordwrap","validateImport","getTypedFilename","saveJsonToFile","getFilePath","getWorkingDirectory","utils","EMAIL_TEMPLATE_TYPE","readEmailTemplates","readEmailTemplate","exportEmailTemplates","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","includeMeta","fileName","filePath","indicatorId","templateData","fileData","err","exportEmailTemplatesToFile","exportData","exportEmailTemplatesToFiles","importEmailTemplateFromFile","raw","replaceAll","data","readFileSync","JSON","parse","getTemplateIdFromFileName","emailTemplateData","s2sConvert","updateEmailTemplateError","importEmailTemplatesFromFile","id","response","basename","Error","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","map","total","totalErrors","errors","_updateEmailTemplateE","hasOwnProperty","call","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 printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport { cloneDeep } from './utils/OpsUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n validateImport,\n getTypedFilename,\n saveJsonToFile,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n EMAIL_TEMPLATE_TYPE,\n readEmailTemplates,\n readEmailTemplate,\n exportEmailTemplates,\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 * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportEmailTemplateToFile(\n templateId: string,\n file: string,\n includeMeta = true\n) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n }\n const filePath = getFilePath(fileName, true);\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting ${templateId}`\n );\n try {\n const templateData = await readEmailTemplate(templateId);\n updateProgressIndicator(indicatorId, `Writing file ${filePath}`);\n const fileData = getFileDataTemplate();\n fileData.emailTemplate[templateId] = templateData;\n saveJsonToFile(fileData, filePath, includeMeta);\n stopProgressIndicator(\n indicatorId,\n `Exported ${templateId['brightCyan']} to ${filePath['brightCyan']}.`\n );\n } catch (err) {\n stopProgressIndicator(indicatorId, `${err}`);\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to file\n * @param {String} file optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportEmailTemplatesToFile(file, includeMeta = true) {\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 exportData = await exportEmailTemplates();\n saveJsonToFile(exportData, filePath, includeMeta);\n } catch (err) {\n printMessage(err, 'error');\n }\n}\n\n/**\n * Export all email templates to separate files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n */\nexport async function exportEmailTemplatesToFiles(includeMeta = true) {\n let indicatorId;\n try {\n const exportData = Object.entries(\n (await exportEmailTemplates()).emailTemplate\n );\n indicatorId = createProgressIndicator(\n 'determinate',\n exportData.length,\n 'Writing email templates'\n );\n for (const [templateId, template] of exportData) {\n const fileName = getTypedFilename(templateId, EMAIL_TEMPLATE_FILE_TYPE);\n const fileData = getFileDataTemplate();\n updateProgressIndicator(indicatorId, `Exporting ${templateId}`);\n fileData.emailTemplate[templateId] = template;\n saveJsonToFile(fileData, getFilePath(fileName, true), includeMeta);\n }\n stopProgressIndicator(\n indicatorId,\n `${exportData.length} templates written.`\n );\n } catch (err) {\n stopProgressIndicator(indicatorId, `${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 try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n const indicatorId = createProgressIndicator(\n 'determinate',\n 1,\n `Importing ${templateId}`\n );\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(indicatorId, `Importing ${templateId}`);\n stopProgressIndicator(indicatorId, `Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n stopProgressIndicator(indicatorId, `${updateEmailTemplateError}`);\n printMessage(updateEmailTemplateError, 'error');\n }\n } else {\n stopProgressIndicator(\n indicatorId,\n `Email template ${templateId} not found in ${filePath}!`\n );\n printMessage(\n `Email template ${templateId} not found in ${filePath}!`,\n 'error'\n );\n }\n } catch (error) {\n printMessage(\n `Error importing email template ${templateId}: ${error}`,\n '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 try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n const indicatorId = createProgressIndicator(\n 'determinate',\n Object.keys(fileData.emailTemplate).length,\n `Importing email templates`\n );\n for (const id of Object.keys(fileData.emailTemplate)) {\n const templateId = id.replace(regexEmailTemplateType, '');\n try {\n await updateEmailTemplate(\n templateId,\n fileData.emailTemplate[templateId]\n );\n updateProgressIndicator(indicatorId, `Imported ${templateId}`);\n } catch (updateEmailTemplateError) {\n printMessage(`\\nError importing ${templateId}`, 'error');\n printMessage(updateEmailTemplateError.response.data, 'error');\n }\n }\n stopProgressIndicator(indicatorId, `Done.`);\n } catch (error) {\n printMessage(`Error importing email templates: ${error}`, 'error');\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 const indicatorId = 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(indicatorId, `Imported ${file}`);\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressIndicator(\n indicatorId,\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 let indicatorId: string;\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing first email template`\n );\n if (raw) {\n try {\n const templateId = getTemplateIdFromFileName(file);\n const templateData = s2sConvert(fileData);\n await updateEmailTemplate(templateId, templateData);\n stopProgressIndicator(indicatorId, `Imported ${templateId}`, 'success');\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing email template: ${error}`,\n 'fail'\n );\n printMessage(error.response?.data, 'error');\n }\n } else {\n for (const id of Object.keys(fileData.emailTemplate)) {\n try {\n await updateEmailTemplate(\n id.replace(regexEmailTemplateType, ''),\n fileData.emailTemplate[id]\n );\n stopProgressIndicator(indicatorId, `Imported ${id}`, 'success');\n } catch (updateEmailTemplateError) {\n stopProgressIndicator(indicatorId, `Error importing ${id}`, 'fail');\n printMessage(updateEmailTemplateError.response?.data, 'error');\n }\n break;\n }\n }\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing first email template`,\n 'fail'\n );\n printMessage(`Error importing first email template: ${error}`, 'error');\n }\n}\n"],"mappings":"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"}
package/esm/ops/IdmOps.js CHANGED
@@ -5,14 +5,15 @@ import path from 'path';
5
5
  import propertiesReader from 'properties-reader';
6
6
  import replaceall from 'replaceall';
7
7
  import { createProgressIndicator, printMessage, stopProgressIndicator } from '../utils/Console';
8
- import { getTypedFilename, readFiles } from '../utils/ExportImportUtils';
9
8
  const {
10
9
  stringify
11
10
  } = frodo.utils.json;
12
11
  const {
13
12
  unSubstituteEnvParams,
14
13
  areScriptHooksValid,
15
- getFilePath
14
+ getFilePath,
15
+ getTypedFilename,
16
+ readFiles
16
17
  } = frodo.utils;
17
18
  const {
18
19
  testConnectorServers,