@rockcarver/frodo-cli 2.0.0-40 → 2.0.0-41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -1
- package/esm/cli/config/config-import.js +37 -4
- package/esm/cli/config/config-import.js.map +1 -1
- package/esm/cli/config/config.js +1 -2
- package/esm/cli/config/config.js.map +1 -1
- package/esm/cli/idp/idp-import.js +13 -5
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/saml/saml-import.js +13 -5
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/service/service-import.js +22 -5
- package/esm/cli/service/service-import.js.map +1 -1
- package/esm/ops/ApplicationOps.js +1 -1
- package/esm/ops/ApplicationOps.js.map +1 -1
- package/esm/ops/ConfigOps.js +35 -3
- package/esm/ops/ConfigOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +12 -17
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +41 -91
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +20 -8
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +2 -2
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +20 -8
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ServiceOps.js +30 -14
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +16 -23
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/utils/Config.js +11 -2
- package/esm/utils/Config.js.map +1 -1
- package/package.json +2 -2
package/esm/ops/ConfigOps.js.map
CHANGED
|
@@ -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","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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"}
|
|
1
|
+
{"version":3,"file":"ConfigOps.js","names":["frodo","state","fs","fse","getFullExportConfig","getFullExportConfigFromDirectory","printMessage","extractScriptToFile","getRealmName","getTypedFilename","titleCase","saveJsonToFile","getFilePath","getWorkingDirectory","utils","exportFullConfiguration","importFullConfiguration","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","importEverythingFromFile","reUuidJourneys","reUuidScripts","cleanServices","global","realm","data","importEverythingFromFiles","getDirectory"],"sources":["../../src/ops/ConfigOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n type FullExportInterface,\n type FullExportOptions,\n type FullImportOptions,\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 {\n getFullExportConfig,\n getFullExportConfigFromDirectory,\n} from '../utils/Config';\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, importFullConfiguration } = frodo.config;\nconst { stringify } = frodo.utils.json;\n\n/**\n * Export everything to separate files\n * @param {String} 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: string,\n includeMeta: boolean = 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 {boolean} 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: boolean = false,\n includeMeta: boolean = 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\n/**\n * Import everything from a single file\n * @param {String} file The file path\n * @param {FullImportOptions} options import options\n */\nexport async function importEverythingFromFile(\n file: string,\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n }\n) {\n const data = await getFullExportConfig(file);\n await importFullConfiguration(data, options);\n}\n\n/**\n * Import everything from separate files\n */\nexport async function importEverythingFromFiles(\n options: FullImportOptions = {\n reUuidJourneys: false,\n reUuidScripts: false,\n cleanServices: false,\n global: false,\n realm: false,\n }\n) {\n const data = await getFullExportConfigFromDirectory(state.getDirectory());\n await importFullConfiguration(data, options);\n}\n"],"mappings":"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"}
|
|
@@ -16,7 +16,8 @@ const {
|
|
|
16
16
|
readEmailTemplates,
|
|
17
17
|
readEmailTemplate,
|
|
18
18
|
exportEmailTemplates,
|
|
19
|
-
updateEmailTemplate
|
|
19
|
+
updateEmailTemplate,
|
|
20
|
+
importEmailTemplates
|
|
20
21
|
} = frodo.email.template;
|
|
21
22
|
const EMAIL_TEMPLATE_FILE_TYPE = 'template.email';
|
|
22
23
|
const regexEmailTemplateType = new RegExp(`${EMAIL_TEMPLATE_TYPE}/`, 'g');
|
|
@@ -206,23 +207,17 @@ export async function importEmailTemplateFromFile(templateId, file, raw = false)
|
|
|
206
207
|
* @param {string} file optional filename
|
|
207
208
|
*/
|
|
208
209
|
export async function importEmailTemplatesFromFile(file) {
|
|
210
|
+
const filePath = getFilePath(file);
|
|
211
|
+
const indicatorId = createProgressIndicator('indeterminate', 0, `Importing email templates from ${filePath}...`);
|
|
209
212
|
try {
|
|
210
|
-
const data = fs.readFileSync(
|
|
213
|
+
const data = fs.readFileSync(filePath, 'utf8');
|
|
211
214
|
const fileData = JSON.parse(data);
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
const templateId = id.replace(regexEmailTemplateType, '');
|
|
215
|
-
try {
|
|
216
|
-
await updateEmailTemplate(templateId, fileData.emailTemplate[templateId]);
|
|
217
|
-
updateProgressIndicator(indicatorId, `Imported ${templateId}`);
|
|
218
|
-
} catch (updateEmailTemplateError) {
|
|
219
|
-
printMessage(`\nError importing ${templateId}`, 'error');
|
|
220
|
-
printMessage(updateEmailTemplateError.response.data, 'error');
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
stopProgressIndicator(indicatorId, `Done.`);
|
|
215
|
+
await importEmailTemplates(fileData);
|
|
216
|
+
stopProgressIndicator(indicatorId, `Successfully imported email templates from ${filePath}.`, 'success');
|
|
224
217
|
} catch (error) {
|
|
225
|
-
|
|
218
|
+
var _error$response;
|
|
219
|
+
stopProgressIndicator(indicatorId, `Error importing email templates from ${filePath}.`, 'fail');
|
|
220
|
+
printMessage(((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data) || error, 'error');
|
|
226
221
|
}
|
|
227
222
|
}
|
|
228
223
|
|
|
@@ -328,9 +323,9 @@ export async function importFirstEmailTemplateFromFile(file, raw = false) {
|
|
|
328
323
|
await updateEmailTemplate(templateId, templateData);
|
|
329
324
|
stopProgressIndicator(indicatorId, `Imported ${templateId}`, 'success');
|
|
330
325
|
} catch (error) {
|
|
331
|
-
var _error$
|
|
326
|
+
var _error$response2;
|
|
332
327
|
stopProgressIndicator(indicatorId, `Error importing email template: ${error}`, 'fail');
|
|
333
|
-
printMessage((_error$
|
|
328
|
+
printMessage((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data, 'error');
|
|
334
329
|
}
|
|
335
330
|
} else {
|
|
336
331
|
for (const id of Object.keys(fileData.emailTemplate)) {
|
|
@@ -1 +1 @@
|
|
|
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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"}
|
|
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","importEmailTemplates","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","_error$response","response","basename","Error","html","convertedData","importEmailTemplatesFromFiles","names","readdirSync","jsonFiles","startsWith","endsWith","toLowerCase","map","total","totalErrors","errors","_updateEmailTemplateE","id","hasOwnProperty","call","importFirstEmailTemplateFromFile","_error$response2","_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 importEmailTemplates,\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 const filePath = getFilePath(file);\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing email templates from ${filePath}...`\n );\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importEmailTemplates(fileData);\n stopProgressIndicator(\n indicatorId,\n `Successfully imported email templates from ${filePath}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing email templates from ${filePath}.`,\n 'fail'\n );\n printMessage(error.response?.data || 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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { frodo
|
|
1
|
+
import { frodo } from '@rockcarver/frodo-lib';
|
|
2
2
|
import fs from 'fs';
|
|
3
3
|
import fse from 'fs-extra';
|
|
4
4
|
import path from 'path';
|
|
@@ -13,13 +13,15 @@ const {
|
|
|
13
13
|
areScriptHooksValid,
|
|
14
14
|
getFilePath,
|
|
15
15
|
getTypedFilename,
|
|
16
|
-
readFiles
|
|
16
|
+
readFiles,
|
|
17
|
+
getWorkingDirectory
|
|
17
18
|
} = frodo.utils;
|
|
18
19
|
const {
|
|
19
20
|
readConfigEntities,
|
|
20
21
|
readConfigEntity,
|
|
21
22
|
exportConfigEntities,
|
|
22
|
-
updateConfigEntity
|
|
23
|
+
updateConfigEntity,
|
|
24
|
+
importConfigEntities
|
|
23
25
|
} = frodo.idm.config;
|
|
24
26
|
const {
|
|
25
27
|
queryManagedObjects
|
|
@@ -190,114 +192,62 @@ export async function importConfigEntityFromFile(file, validate) {
|
|
|
190
192
|
|
|
191
193
|
/**
|
|
192
194
|
* Import all IDM configuration objects from separate JSON files in a directory specified by <directory>
|
|
193
|
-
* @param
|
|
195
|
+
* @param options import options
|
|
194
196
|
*/
|
|
195
|
-
export async function importAllRawConfigEntities(
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
}
|
|
197
|
+
export async function importAllRawConfigEntities(options = {
|
|
198
|
+
validate: false
|
|
199
|
+
}) {
|
|
200
|
+
const baseDirectory = getWorkingDirectory();
|
|
200
201
|
const files = await readFiles(baseDirectory);
|
|
201
|
-
const
|
|
202
|
+
const jsonObjects = files.filter(({
|
|
202
203
|
path
|
|
203
204
|
}) => path.toLowerCase().endsWith('.json')).map(({
|
|
204
|
-
path,
|
|
205
205
|
content
|
|
206
|
-
}) => (
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
everyScriptValid = false;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
if (validate && !everyScriptValid) {
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
createProgressIndicator('indeterminate', undefined, 'Importing config objects...');
|
|
225
|
-
const entityPromises = jsonFiles.map(file => {
|
|
226
|
-
return updateConfigEntity(file.entityId, JSON.parse(file.content));
|
|
227
|
-
});
|
|
228
|
-
const results = await Promise.allSettled(entityPromises);
|
|
229
|
-
const errors = results.filter(result => result.status === 'rejected');
|
|
230
|
-
if (errors.length > 0) {
|
|
231
|
-
printMessage(`Failed to import ${errors.length} config objects:`, 'error');
|
|
232
|
-
for (const error of errors) {
|
|
233
|
-
printMessage(`- ${error.reason}`, 'error');
|
|
234
|
-
}
|
|
235
|
-
stopProgressIndicator(`Failed to import ${errors.length} config objects`, 'error');
|
|
236
|
-
return;
|
|
206
|
+
}) => JSON.parse(content)).map(entity => [entity._id, entity]);
|
|
207
|
+
const importData = {
|
|
208
|
+
config: Object.fromEntries(jsonObjects)
|
|
209
|
+
};
|
|
210
|
+
const indicatorId = createProgressIndicator('indeterminate', 0, `Importing config entities from ${baseDirectory}...`);
|
|
211
|
+
try {
|
|
212
|
+
await importConfigEntities(importData, options);
|
|
213
|
+
stopProgressIndicator(indicatorId, `Imported ${jsonObjects.length} config entities`, 'success');
|
|
214
|
+
} catch (error) {
|
|
215
|
+
var _error$response;
|
|
216
|
+
stopProgressIndicator(indicatorId, `Error importing config entities from ${baseDirectory}.`, 'fail');
|
|
217
|
+
printMessage(((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data) || error, 'error');
|
|
237
218
|
}
|
|
238
|
-
stopProgressIndicator(`Imported ${results.length} config objects`, 'success');
|
|
239
219
|
}
|
|
240
220
|
|
|
241
221
|
/**
|
|
242
222
|
* Import all IDM configuration objects
|
|
243
223
|
* @param entitiesFile JSON file that specifies the config entities to export/import
|
|
244
224
|
* @param envFile File that defines environment specific variables for replacement during configuration export/import
|
|
245
|
-
* @param
|
|
225
|
+
* @param options import options
|
|
246
226
|
*/
|
|
247
|
-
export async function importAllConfigEntities(entitiesFile, envFile,
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
227
|
+
export async function importAllConfigEntities(entitiesFile, envFile, options = {
|
|
228
|
+
validate: false
|
|
229
|
+
}) {
|
|
252
230
|
const entriesToImport = JSON.parse(fs.readFileSync(entitiesFile, 'utf8')).idm;
|
|
253
231
|
const envReader = propertiesReader(envFile);
|
|
232
|
+
const baseDirectory = getWorkingDirectory();
|
|
254
233
|
const files = await readFiles(baseDirectory);
|
|
255
|
-
const
|
|
234
|
+
const jsonObjects = files.filter(({
|
|
256
235
|
path
|
|
257
236
|
}) => path.toLowerCase().endsWith('.json')).map(({
|
|
258
|
-
content,
|
|
259
|
-
path
|
|
260
|
-
}) => ({
|
|
261
|
-
// Remove .json extension
|
|
262
|
-
entityId: path.substring(0, path.length - 5),
|
|
263
|
-
content,
|
|
264
|
-
path
|
|
265
|
-
}));
|
|
266
|
-
let everyScriptValid = true;
|
|
267
|
-
for (const file of jsonFiles) {
|
|
268
|
-
const jsObject = JSON.parse(file.content);
|
|
269
|
-
const isScriptValid = areScriptHooksValid(jsObject);
|
|
270
|
-
if (!isScriptValid) {
|
|
271
|
-
printMessage(`Invalid script hook in ${file.path}`, 'error');
|
|
272
|
-
everyScriptValid = false;
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
if (validate && !everyScriptValid) {
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
createProgressIndicator('indeterminate', undefined, 'Importing config objects...');
|
|
279
|
-
const entityPromises = jsonFiles.filter(({
|
|
280
|
-
entityId
|
|
281
|
-
}) => {
|
|
282
|
-
return entriesToImport.includes(entityId);
|
|
283
|
-
}).map(({
|
|
284
|
-
entityId,
|
|
285
237
|
content
|
|
286
|
-
}) =>
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
}
|
|
290
|
-
const
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
return;
|
|
238
|
+
}) => JSON.parse(unSubstituteEnvParams(content, envReader))).filter(entity => entriesToImport.includes(entity._id)).map(entity => [entity._id, entity]);
|
|
239
|
+
const importData = {
|
|
240
|
+
config: Object.fromEntries(jsonObjects)
|
|
241
|
+
};
|
|
242
|
+
const indicatorId = createProgressIndicator('indeterminate', 0, `Importing config entities from ${baseDirectory}...`);
|
|
243
|
+
try {
|
|
244
|
+
await importConfigEntities(importData, options);
|
|
245
|
+
stopProgressIndicator(indicatorId, `Imported ${jsonObjects.length} config entities`, 'success');
|
|
246
|
+
} catch (error) {
|
|
247
|
+
var _error$response2;
|
|
248
|
+
stopProgressIndicator(indicatorId, `Error importing config entities from ${baseDirectory}.`, 'fail');
|
|
249
|
+
printMessage(((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data) || error, 'error');
|
|
299
250
|
}
|
|
300
|
-
stopProgressIndicator(`Imported ${results.length} config objects`, 'success');
|
|
301
251
|
}
|
|
302
252
|
|
|
303
253
|
/**
|
package/esm/ops/IdmOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdmOps.js","names":["frodo","state","fs","fse","path","propertiesReader","replaceall","createProgressIndicator","printMessage","stopProgressIndicator","stringify","utils","json","unSubstituteEnvParams","areScriptHooksValid","getFilePath","getTypedFilename","readFiles","readConfigEntities","readConfigEntity","exportConfigEntities","updateConfigEntity","idm","config","queryManagedObjects","managed","testConnectorServers","system","warnAboutOfflineConnectorServers","all","offline","filter","status","ok","map","name","length","join","error","message","listAllConfigEntities","configurations","configEntity","_id","readConfigEntitiesError","exportConfigEntity","id","file","fileName","writeFile","err","exportAllRawConfigEntities","exportedConfigurations","value","Object","entries","outputFile","exportAllConfigEntities","entitiesFile","envFile","entriesToExport","readFile","data","entriesData","JSON","parse","envParams","undefined","entityPromises","includes","push","results","Promise","item","configEntityString","each","key","importConfigEntityByIdFromFile","entityId","validate","fileData","readFileSync","resolve","process","cwd","entityData","isValid","updateConfigEntityError","importConfigEntityFromFile","importAllRawConfigEntities","baseDirectory","getDirectory","existsSync","files","jsonFiles","toLowerCase","endsWith","content","substring","everyScriptValid","jsObject","isScriptValid","allSettled","errors","result","reason","importAllConfigEntities","entriesToImport","envReader","unsubstituted","countManagedObjects","type","response"],"sources":["../../src/ops/IdmOps.ts"],"sourcesContent":["import { frodo, state } 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';\n\nconst { stringify } = frodo.utils.json;\n\nconst {\n unSubstituteEnvParams,\n areScriptHooksValid,\n getFilePath,\n getTypedFilename,\n readFiles,\n} = frodo.utils;\nconst {\n readConfigEntities,\n readConfigEntity,\n exportConfigEntities,\n updateConfigEntity,\n} = frodo.idm.config;\nconst { queryManagedObjects } = frodo.idm.managed;\nconst { testConnectorServers } = frodo.idm.system;\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(getFilePath(fileName, true), stringify(configEntity), (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 */\nexport async function exportAllRawConfigEntities() {\n const exportedConfigurations = await exportConfigEntities();\n for (const [id, value] of Object.entries(exportedConfigurations.config)) {\n if (value != null) {\n fse.outputFile(\n getFilePath(`${id}.json`, true),\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 }\n}\n\n/**\n * Export all IDM configuration objects\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(entitiesFile, envFile) {\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 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 = stringify(item);\n envParams.each((key, value) => {\n configEntityString = replaceall(\n value,\n `\\${${key}}`,\n configEntityString\n );\n });\n fse.outputFile(\n getFilePath(`${item._id}.json`, true),\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(\n path.resolve(process.cwd(), getFilePath(file)),\n 'utf8'\n );\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(\n path.resolve(process.cwd(), getFilePath(file)),\n 'utf8'\n );\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 validate validate script hooks\n */\nexport async function importAllRawConfigEntities(validate?: boolean) {\n const baseDirectory = state.getDirectory();\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 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 entitiesFile: string,\n envFile: string,\n validate?: boolean\n) {\n const baseDirectory = state.getDirectory();\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}`, 'data');\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","stringify","utils","json","unSubstituteEnvParams","areScriptHooksValid","getFilePath","getTypedFilename","readFiles","getWorkingDirectory","readConfigEntities","readConfigEntity","exportConfigEntities","updateConfigEntity","importConfigEntities","idm","config","queryManagedObjects","managed","testConnectorServers","system","warnAboutOfflineConnectorServers","all","offline","filter","status","ok","map","name","length","join","error","message","listAllConfigEntities","configurations","configEntity","_id","readConfigEntitiesError","exportConfigEntity","id","file","fileName","writeFile","err","exportAllRawConfigEntities","exportedConfigurations","value","Object","entries","outputFile","exportAllConfigEntities","entitiesFile","envFile","entriesToExport","readFile","data","entriesData","JSON","parse","envParams","undefined","entityPromises","includes","push","results","Promise","item","configEntityString","each","key","importConfigEntityByIdFromFile","entityId","validate","fileData","readFileSync","resolve","process","cwd","entityData","isValid","updateConfigEntityError","importConfigEntityFromFile","importAllRawConfigEntities","options","baseDirectory","files","jsonObjects","toLowerCase","endsWith","content","entity","importData","fromEntries","indicatorId","_error$response","response","importAllConfigEntities","entriesToImport","envReader","_error$response2","countManagedObjects","type","result"],"sources":["../../src/ops/IdmOps.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { type ConfigEntityImportOptions } from '@rockcarver/frodo-lib/types/ops/IdmConfigOps';\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';\n\nconst { stringify } = frodo.utils.json;\n\nconst {\n unSubstituteEnvParams,\n areScriptHooksValid,\n getFilePath,\n getTypedFilename,\n readFiles,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readConfigEntities,\n readConfigEntity,\n exportConfigEntities,\n updateConfigEntity,\n importConfigEntities,\n} = frodo.idm.config;\nconst { queryManagedObjects } = frodo.idm.managed;\nconst { testConnectorServers } = frodo.idm.system;\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(getFilePath(fileName, true), stringify(configEntity), (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 */\nexport async function exportAllRawConfigEntities() {\n const exportedConfigurations = await exportConfigEntities();\n for (const [id, value] of Object.entries(exportedConfigurations.config)) {\n if (value != null) {\n fse.outputFile(\n getFilePath(`${id}.json`, true),\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 }\n}\n\n/**\n * Export all IDM configuration objects\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(entitiesFile, envFile) {\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 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 = stringify(item);\n envParams.each((key, value) => {\n configEntityString = replaceall(\n value,\n `\\${${key}}`,\n configEntityString\n );\n });\n fse.outputFile(\n getFilePath(`${item._id}.json`, true),\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(\n path.resolve(process.cwd(), getFilePath(file)),\n 'utf8'\n );\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(\n path.resolve(process.cwd(), getFilePath(file)),\n 'utf8'\n );\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 options import options\n */\nexport async function importAllRawConfigEntities(\n options: ConfigEntityImportOptions = {\n validate: false,\n }\n) {\n const baseDirectory = getWorkingDirectory();\n const files = await readFiles(baseDirectory);\n const jsonObjects = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ content }) => JSON.parse(content))\n .map((entity) => [entity._id, entity]);\n const importData = {\n config: Object.fromEntries(jsonObjects),\n };\n\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing config entities from ${baseDirectory}...`\n );\n\n try {\n await importConfigEntities(importData, options);\n stopProgressIndicator(\n indicatorId,\n `Imported ${jsonObjects.length} config entities`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing config entities from ${baseDirectory}.`,\n 'fail'\n );\n printMessage(error.response?.data || error, 'error');\n }\n}\n\n/**\n * Import all IDM configuration objects\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 options import options\n */\nexport async function importAllConfigEntities(\n entitiesFile: string,\n envFile: string,\n options: ConfigEntityImportOptions = {\n validate: false,\n }\n) {\n const entriesToImport = JSON.parse(fs.readFileSync(entitiesFile, 'utf8')).idm;\n const envReader = propertiesReader(envFile);\n\n const baseDirectory = getWorkingDirectory();\n const files = await readFiles(baseDirectory);\n const jsonObjects = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ content }) => JSON.parse(unSubstituteEnvParams(content, envReader)))\n .filter((entity) => entriesToImport.includes(entity._id))\n .map((entity) => [entity._id, entity]);\n\n const importData = {\n config: Object.fromEntries(jsonObjects),\n };\n\n const indicatorId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Importing config entities from ${baseDirectory}...`\n );\n\n try {\n await importConfigEntities(importData, options);\n stopProgressIndicator(\n indicatorId,\n `Imported ${jsonObjects.length} config entities`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n indicatorId,\n `Error importing config entities from ${baseDirectory}.`,\n 'fail'\n );\n printMessage(error.response?.data || error, 'error');\n }\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}`, 'data');\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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"}
|