@rockcarver/frodo-cli 2.0.0-32 → 2.0.0-33
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/FrodoCommand.js +8 -1
- package/esm/cli/FrodoCommand.js.map +1 -1
- package/esm/cli/admin/admin-export-full-cloud-config.js +44 -0
- package/esm/cli/admin/admin-export-full-cloud-config.js.map +1 -0
- package/esm/cli/admin/admin.js +1 -0
- package/esm/cli/admin/admin.js.map +1 -1
- package/esm/cli/authz/authz-policy-export.js +1 -1
- package/esm/cli/authz/authz-policy-export.js.map +1 -1
- package/esm/cli/authz/authz-policy-import.js +1 -1
- package/esm/cli/authz/authz-policy-import.js.map +1 -1
- package/esm/cli/authz/authz-policy-list.js +2 -2
- package/esm/cli/authz/authz-policy-list.js.map +1 -1
- package/esm/cli/authz/authz-set-delete.js +2 -2
- package/esm/cli/authz/authz-set-delete.js.map +1 -1
- package/esm/cli/authz/authz-set-export.js +1 -1
- package/esm/cli/authz/authz-set-export.js.map +1 -1
- package/esm/cli/authz/authz-set-import.js +1 -1
- package/esm/cli/authz/authz-set-import.js.map +1 -1
- package/esm/cli/authz/authz-set-list.js +1 -1
- package/esm/cli/authz/authz-set-list.js.map +1 -1
- package/esm/cli/authz/authz-type-delete.js +3 -3
- package/esm/cli/authz/authz-type-delete.js.map +1 -1
- package/esm/cli/authz/authz-type-export.js +2 -2
- package/esm/cli/authz/authz-type-export.js.map +1 -1
- package/esm/cli/authz/authz-type-import.js +2 -2
- package/esm/cli/authz/authz-type-import.js.map +1 -1
- package/esm/cli/authz/authz-type-list.js +1 -1
- package/esm/cli/authz/authz-type-list.js.map +1 -1
- package/esm/cli/email/email-template-export.js +3 -3
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/email/email-template-import.js +4 -4
- package/esm/cli/email/email-template-import.js.map +1 -1
- package/esm/cli/email/email-template-list.js +1 -1
- package/esm/cli/email/email-template-list.js.map +1 -1
- package/esm/cli/idm/idm-count.js +1 -1
- package/esm/cli/idm/idm-count.js.map +1 -1
- package/esm/cli/idm/idm-export.js +3 -3
- package/esm/cli/idm/idm-export.js.map +1 -1
- package/esm/cli/idm/idm-list.js +2 -2
- package/esm/cli/idm/idm-list.js.map +1 -1
- package/esm/cli/idp/idp-export.js +3 -3
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/idp/idp-import.js +4 -4
- package/esm/cli/idp/idp-import.js.map +1 -1
- package/esm/cli/idp/idp-list.js +1 -1
- package/esm/cli/idp/idp-list.js.map +1 -1
- package/esm/cli/journey/journey-delete.js +6 -2
- package/esm/cli/journey/journey-delete.js.map +1 -1
- package/esm/cli/journey/journey-disable.js +4 -10
- package/esm/cli/journey/journey-disable.js.map +1 -1
- package/esm/cli/journey/journey-enable.js +4 -10
- package/esm/cli/journey/journey-enable.js.map +1 -1
- package/esm/cli/journey/journey-import.js +4 -4
- package/esm/cli/journey/journey-import.js.map +1 -1
- package/esm/cli/journey/journey-list.js +1 -1
- package/esm/cli/journey/journey-list.js.map +1 -1
- package/esm/cli/saml/saml-cot-export.js +3 -3
- package/esm/cli/saml/saml-cot-export.js.map +1 -1
- package/esm/cli/saml/saml-cot-list.js +1 -1
- package/esm/cli/saml/saml-cot-list.js.map +1 -1
- package/esm/cli/saml/saml-describe.js +1 -1
- package/esm/cli/saml/saml-describe.js.map +1 -1
- package/esm/cli/saml/saml-import.js +4 -4
- package/esm/cli/saml/saml-import.js.map +1 -1
- package/esm/cli/saml/saml-list.js +1 -1
- package/esm/cli/saml/saml-list.js.map +1 -1
- package/esm/cli/saml/saml-metadata-export.js +1 -1
- package/esm/cli/saml/saml-metadata-export.js.map +1 -1
- package/esm/cli/script/script-export.js +2 -6
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/theme/theme-delete.js +3 -3
- package/esm/cli/theme/theme-delete.js.map +1 -1
- package/esm/cli/theme/theme-export.js +4 -4
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/cli/theme/theme-import.js +4 -4
- package/esm/cli/theme/theme-import.js.map +1 -1
- package/esm/cli/theme/theme-list.js +1 -1
- package/esm/cli/theme/theme-list.js.map +1 -1
- package/esm/ops/AdminFederationOps.js +28 -26
- package/esm/ops/AdminFederationOps.js.map +1 -1
- package/esm/ops/AdminOps.js +112 -0
- package/esm/ops/AdminOps.js.map +1 -0
- package/esm/ops/AgentOps.js +59 -51
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/ApplicationOps.js +19 -13
- package/esm/ops/ApplicationOps.js.map +1 -1
- package/esm/ops/CirclesOfTrustOps.js +28 -26
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +78 -94
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +8 -31
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +49 -54
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +91 -70
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +13 -11
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/PolicyOps.js +31 -26
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +42 -39
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +19 -16
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +49 -45
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ScriptOps.js +36 -55
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/SecretsOps.js +13 -11
- package/esm/ops/SecretsOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +111 -130
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/VariablesOps.js +14 -12
- package/esm/ops/VariablesOps.js.map +1 -1
- package/esm/utils/Console.js +68 -30
- package/esm/utils/Console.js.map +1 -1
- package/esm/utils/ExportImportUtils.js +4 -12
- package/esm/utils/ExportImportUtils.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplicationOps.js","names":["frodo","state","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","saveJsonToFile","wordwrap","getTypedFilename","titleCase","getFilePath","getWorkingDirectory","utils","readApplications","_readApplications","deleteApplicationByName","_deleteApplicationByName","deleteApplications","_deleteApplications","exportApplication","_exportApplication","exportApplicationByName","_exportApplicationByName","exportApplications","_exportApplications","importApplicationByName","_importApplicationByName","importFirstApplication","_importFirstApplication","importApplications","_importApplications","app","listApplications","long","applications","sort","a","b","name","localeCompare","table","hAlign","content","forEach","push","_id","templateName","templateVersion","authoritative","description","toString","error","deleteApplication","applicationName","deep","outcome","message","deleted","length","exportApplicationToFile","file","options","useStringArrays","deps","fileName","filePath","exportData","exportApplicationsToFile","getRealmName","getRealm","exportApplicationsToFiles","errors","application","importApplicationFromFile","data","readFileSync","fileData","JSON","parse","importFirstApplicationFromFile","importApplicationsFromFile","applicationData","importApplicationsFromFiles","names","readdirSync","files","filter","toLowerCase","endsWith","map","total","count","Object","keys"],"sources":["../../src/ops/ApplicationOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport type {\n ApplicationExportInterface,\n ApplicationExportOptions,\n ApplicationImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/ApplicationOps';\nimport fs from 'fs';\n\nimport {\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport { saveJsonToFile } from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst { getTypedFilename, titleCase, getFilePath, getWorkingDirectory } =\n frodo.utils;\nconst {\n readApplications: _readApplications,\n deleteApplicationByName: _deleteApplicationByName,\n deleteApplications: _deleteApplications,\n exportApplication: _exportApplication,\n exportApplicationByName: _exportApplicationByName,\n exportApplications: _exportApplications,\n importApplicationByName: _importApplicationByName,\n importFirstApplication: _importFirstApplication,\n importApplications: _importApplications,\n} = frodo.app;\n\n/**\n * List applications\n */\nexport async function listApplications(long = false) {\n try {\n const applications = await _readApplications();\n applications.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable([\n 'Name',\n 'Id',\n 'Template',\n {\n hAlign: 'right',\n content: 'Version',\n },\n {\n hAlign: 'right',\n content: 'Authoritative',\n },\n 'Description',\n ]);\n applications.forEach((app) => {\n table.push([\n app.name,\n app._id,\n app.templateName,\n {\n hAlign: 'right',\n content: app.templateVersion,\n },\n {\n hAlign: 'right',\n content: app.authoritative,\n },\n wordwrap(app.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n applications.forEach((app) => {\n printMessage(`${app.name}`, 'data');\n });\n }\n } catch (error) {\n printMessage(`Error listing applications - ${error}`, 'error');\n }\n}\n\n/**\n * Delete application\n * @param {string} applicationName application name\n * @param {boolean} deep deep delete (include dependencies)\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteApplication(\n applicationName: string,\n deep: boolean\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.deleteApplication: begin`);\n showSpinner(`Deleting ${applicationName}...`);\n try {\n await _deleteApplicationByName(applicationName, deep);\n outcome = true;\n succeedSpinner(`Deleted ${applicationName}`);\n } catch (error) {\n failSpinner(`Error deleting ${applicationName}: ${error.message}`);\n }\n debugMessage(`cli.ApplicationOps.deleteApplication: end`);\n return outcome;\n}\n\n/**\n * Delete all applications\n * @param {boolean} deep deep delete (include dependencies)\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteApplications(deep: boolean): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.deleteApplications: begin`);\n showSpinner(`Deleting all applications...`);\n try {\n const deleted = await _deleteApplications(deep);\n outcome = true;\n succeedSpinner(`Deleted ${deleted.length} applications`);\n } catch (error) {\n failSpinner(`Error deleting applications: ${error.message}`);\n }\n debugMessage(`cli.ApplicationOps.deleteApplications: end`);\n return outcome;\n}\n\n/**\n * Export application to file\n * @param {string} applicationName application name\n * @param {string} file file name\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportApplicationToFile(\n applicationName: string,\n file: string,\n options: ApplicationExportOptions = { useStringArrays: true, deps: true }\n) {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.exportApplicationToFile: begin`);\n showSpinner(`Exporting ${applicationName}...`);\n try {\n let fileName = getTypedFilename(applicationName, 'application');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await _exportApplicationByName(applicationName, options);\n saveJsonToFile(exportData, filePath);\n succeedSpinner(`Exported ${applicationName} to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${applicationName}: ${error.message}`);\n }\n debugMessage(`cli.ApplicationOps.exportApplicationToFile: end`);\n return outcome;\n}\n\n/**\n * Export all applications to file\n * @param {string} file file name\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportApplicationsToFile(\n file: string,\n options: ApplicationExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.exportApplicationsToFile: begin`);\n showSpinner(`Exporting all applications...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(frodo.utils.getRealmName(state.getRealm()))}Applications`,\n 'application'\n );\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await _exportApplications(options);\n saveJsonToFile(exportData, filePath);\n succeedSpinner(`Exported all applications to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting all applications`);\n printMessage(`${error.message}`, 'error');\n }\n debugMessage(`cli.ApplicationOps.exportApplicationsToFile: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Export all applications to separate files\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportApplicationsToFiles(\n options: ApplicationExportOptions = { useStringArrays: true, deps: true }\n) {\n debugMessage(`cli.ApplicationOps.exportApplicationsToFiles: begin`);\n const errors = [];\n try {\n const applications = await _readApplications();\n createProgressBar(applications.length, 'Exporting applications...');\n for (const application of applications) {\n const file = getTypedFilename(application.name, 'application');\n try {\n const exportData = await _exportApplication(application._id, options);\n saveJsonToFile(exportData, getFilePath(file, true));\n updateProgressBar(`Exported ${application._id}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${application._id}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting applications(s) to file(s)`);\n }\n debugMessage(`cli.ApplicationOps.exportApplicationsToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import application from file\n * @param {string} applicationName client id\n * @param {string} file file name\n * @param {ApplicationImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importApplicationFromFile(\n applicationName: string,\n file: string,\n options: ApplicationImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.importApplicationFromFile: begin`);\n showSpinner(`Importing ${applicationName}...`);\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n await _importApplicationByName(applicationName, fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${applicationName}.`);\n } catch (error) {\n failSpinner(`Error importing ${applicationName}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ApplicationOps.importApplicationFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first application from file\n * @param {string} file file name\n * @param {ApplicationImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstApplicationFromFile(\n file: string,\n options: ApplicationImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.importFirstApplicationFromFile: begin`);\n const filePath = getFilePath(file);\n showSpinner(`Importing ${filePath}...`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await _importFirstApplication(fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${filePath}.`);\n } catch (error) {\n failSpinner(`Error importing ${filePath}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ApplicationOps.importFirstApplicationFromFile: end`);\n return outcome;\n}\n\n/**\n * Import applications from file\n * @param {string} file file name\n * @param {ApplicationImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importApplicationsFromFile(\n file: string,\n options: ApplicationImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.importApplicationsFromFile: begin`);\n const filePath = getFilePath(file);\n showSpinner(`Importing ${filePath}...`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const applicationData = JSON.parse(data);\n await _importApplications(applicationData, options);\n outcome = true;\n succeedSpinner(`Imported ${filePath}.`);\n } catch (error) {\n failSpinner(`Error importing ${filePath}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ApplicationOps.importApplicationsFromFile: end`);\n return outcome;\n}\n\n/**\n * Import applications from files\n * @param {ApplicationImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importApplicationsFromFiles(\n options: ApplicationImportOptions = { deps: true }\n): Promise<boolean> {\n const errors = [];\n try {\n debugMessage(`cli.ApplicationOps.importApplicationsFromFiles: begin`);\n const names = fs.readdirSync(getWorkingDirectory());\n const files = names\n .filter((name) => name.toLowerCase().endsWith('.application.json'))\n .map((name) => getFilePath(name));\n createProgressBar(files.length, 'Importing applications...');\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: ApplicationExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.application).length;\n total += count;\n await _importApplications(fileData, options);\n updateProgressBar(`Imported ${count} application(s) from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing application(s) from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Finished importing ${total} application(s) from ${files.length} file(s).`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing application(s) from file(s).`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ApplicationOps.importApplicationsFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ApplicationOps.js","names":["frodo","state","fs","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressIndicator","succeedSpinner","updateProgressIndicator","saveJsonToFile","wordwrap","getTypedFilename","titleCase","getFilePath","getWorkingDirectory","utils","readApplications","_readApplications","deleteApplicationByName","_deleteApplicationByName","deleteApplications","_deleteApplications","exportApplication","_exportApplication","exportApplicationByName","_exportApplicationByName","exportApplications","_exportApplications","importApplicationByName","_importApplicationByName","importFirstApplication","_importFirstApplication","importApplications","_importApplications","app","listApplications","long","applications","sort","a","b","name","localeCompare","table","hAlign","content","forEach","push","_id","templateName","templateVersion","authoritative","description","toString","error","deleteApplication","applicationName","deep","outcome","message","deleted","length","exportApplicationToFile","file","options","useStringArrays","deps","fileName","filePath","exportData","exportApplicationsToFile","getRealmName","getRealm","exportApplicationsToFiles","errors","barId","application","fileBarId","importApplicationFromFile","data","readFileSync","fileData","JSON","parse","importFirstApplicationFromFile","importApplicationsFromFile","applicationData","importApplicationsFromFiles","names","readdirSync","files","filter","toLowerCase","endsWith","map","total","count","Object","keys"],"sources":["../../src/ops/ApplicationOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport type {\n ApplicationExportInterface,\n ApplicationExportOptions,\n ApplicationImportOptions,\n} from '@rockcarver/frodo-lib/types/ops/ApplicationOps';\nimport fs from 'fs';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressIndicator,\n} from '../utils/Console';\nimport { saveJsonToFile } from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst { getTypedFilename, titleCase, getFilePath, getWorkingDirectory } =\n frodo.utils;\nconst {\n readApplications: _readApplications,\n deleteApplicationByName: _deleteApplicationByName,\n deleteApplications: _deleteApplications,\n exportApplication: _exportApplication,\n exportApplicationByName: _exportApplicationByName,\n exportApplications: _exportApplications,\n importApplicationByName: _importApplicationByName,\n importFirstApplication: _importFirstApplication,\n importApplications: _importApplications,\n} = frodo.app;\n\n/**\n * List applications\n */\nexport async function listApplications(long = false) {\n try {\n const applications = await _readApplications();\n applications.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable([\n 'Name',\n 'Id',\n 'Template',\n {\n hAlign: 'right',\n content: 'Version',\n },\n {\n hAlign: 'right',\n content: 'Authoritative',\n },\n 'Description',\n ]);\n applications.forEach((app) => {\n table.push([\n app.name,\n app._id,\n app.templateName,\n {\n hAlign: 'right',\n content: app.templateVersion,\n },\n {\n hAlign: 'right',\n content: app.authoritative,\n },\n wordwrap(app.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n applications.forEach((app) => {\n printMessage(`${app.name}`, 'data');\n });\n }\n } catch (error) {\n printMessage(`Error listing applications - ${error}`, 'error');\n }\n}\n\n/**\n * Delete application\n * @param {string} applicationName application name\n * @param {boolean} deep deep delete (include dependencies)\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteApplication(\n applicationName: string,\n deep: boolean\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.deleteApplication: begin`);\n showSpinner(`Deleting ${applicationName}...`);\n try {\n await _deleteApplicationByName(applicationName, deep);\n outcome = true;\n succeedSpinner(`Deleted ${applicationName}`);\n } catch (error) {\n failSpinner(`Error deleting ${applicationName}: ${error.message}`);\n }\n debugMessage(`cli.ApplicationOps.deleteApplication: end`);\n return outcome;\n}\n\n/**\n * Delete all applications\n * @param {boolean} deep deep delete (include dependencies)\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteApplications(deep: boolean): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.deleteApplications: begin`);\n showSpinner(`Deleting all applications...`);\n try {\n const deleted = await _deleteApplications(deep);\n outcome = true;\n succeedSpinner(`Deleted ${deleted.length} applications`);\n } catch (error) {\n failSpinner(`Error deleting applications: ${error.message}`);\n }\n debugMessage(`cli.ApplicationOps.deleteApplications: end`);\n return outcome;\n}\n\n/**\n * Export application to file\n * @param {string} applicationName application name\n * @param {string} file file name\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportApplicationToFile(\n applicationName: string,\n file: string,\n options: ApplicationExportOptions = { useStringArrays: true, deps: true }\n) {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.exportApplicationToFile: begin`);\n showSpinner(`Exporting ${applicationName}...`);\n try {\n let fileName = getTypedFilename(applicationName, 'application');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await _exportApplicationByName(applicationName, options);\n saveJsonToFile(exportData, filePath);\n succeedSpinner(`Exported ${applicationName} to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${applicationName}: ${error.message}`);\n }\n debugMessage(`cli.ApplicationOps.exportApplicationToFile: end`);\n return outcome;\n}\n\n/**\n * Export all applications to file\n * @param {string} file file name\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportApplicationsToFile(\n file: string,\n options: ApplicationExportOptions = { useStringArrays: true, deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.exportApplicationsToFile: begin`);\n showSpinner(`Exporting all applications...`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(frodo.utils.getRealmName(state.getRealm()))}Applications`,\n 'application'\n );\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n const exportData = await _exportApplications(options);\n saveJsonToFile(exportData, filePath);\n succeedSpinner(`Exported all applications to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting all applications`);\n printMessage(`${error.message}`, 'error');\n }\n debugMessage(`cli.ApplicationOps.exportApplicationsToFile: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Export all applications to separate files\n * @param {ApplicationExportOptions} options export options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportApplicationsToFiles(\n options: ApplicationExportOptions = { useStringArrays: true, deps: true }\n) {\n debugMessage(`cli.ApplicationOps.exportApplicationsToFiles: begin`);\n const errors = [];\n let barId: string;\n try {\n const applications = await _readApplications();\n barId = createProgressIndicator(\n 'determinate',\n applications.length,\n 'Exporting applications...'\n );\n for (const application of applications) {\n const fileBarId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting application ${application.name}...`\n );\n const file = getFilePath(\n getTypedFilename(application.name, 'application'),\n true\n );\n try {\n updateProgressIndicator(barId, `Exporting ${application.name}.`);\n const exportData = await _exportApplication(application._id, options);\n saveJsonToFile(exportData, file);\n updateProgressIndicator(\n fileBarId,\n `Saving ${application.name} to ${file}.`\n );\n stopProgressIndicator(\n fileBarId,\n `${application.name} saved to ${file}.`\n );\n } catch (error) {\n errors.push(error);\n updateProgressIndicator(barId, `Error exporting ${application.name}.`);\n stopProgressIndicator(\n fileBarId,\n `Error saving ${application.name} to ${file}.`\n );\n }\n }\n stopProgressIndicator(barId, `Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressIndicator(barId, `Error exporting applications(s) to file(s)`);\n }\n debugMessage(`cli.ApplicationOps.exportApplicationsToFiles: end`);\n return 0 === errors.length;\n}\n\n/**\n * Import application from file\n * @param {string} applicationName client id\n * @param {string} file file name\n * @param {ApplicationImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importApplicationFromFile(\n applicationName: string,\n file: string,\n options: ApplicationImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.importApplicationFromFile: begin`);\n showSpinner(`Importing ${applicationName}...`);\n try {\n const data = fs.readFileSync(getFilePath(file), 'utf8');\n const fileData = JSON.parse(data);\n await _importApplicationByName(applicationName, fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${applicationName}.`);\n } catch (error) {\n failSpinner(`Error importing ${applicationName}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ApplicationOps.importApplicationFromFile: end`);\n return outcome;\n}\n\n/**\n * Import first application from file\n * @param {string} file file name\n * @param {ApplicationImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importFirstApplicationFromFile(\n file: string,\n options: ApplicationImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.importFirstApplicationFromFile: begin`);\n const filePath = getFilePath(file);\n showSpinner(`Importing ${filePath}...`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await _importFirstApplication(fileData, options);\n outcome = true;\n succeedSpinner(`Imported ${filePath}.`);\n } catch (error) {\n failSpinner(`Error importing ${filePath}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ApplicationOps.importFirstApplicationFromFile: end`);\n return outcome;\n}\n\n/**\n * Import applications from file\n * @param {string} file file name\n * @param {ApplicationImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importApplicationsFromFile(\n file: string,\n options: ApplicationImportOptions = { deps: true }\n): Promise<boolean> {\n let outcome = false;\n debugMessage(`cli.ApplicationOps.importApplicationsFromFile: begin`);\n const filePath = getFilePath(file);\n showSpinner(`Importing ${filePath}...`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const applicationData = JSON.parse(data);\n await _importApplications(applicationData, options);\n outcome = true;\n succeedSpinner(`Imported ${filePath}.`);\n } catch (error) {\n failSpinner(`Error importing ${filePath}.`);\n printMessage(error, 'error');\n }\n debugMessage(`cli.ApplicationOps.importApplicationsFromFile: end`);\n return outcome;\n}\n\n/**\n * Import applications from files\n * @param {ApplicationImportOptions} options import options\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function importApplicationsFromFiles(\n options: ApplicationImportOptions = { deps: true }\n): Promise<boolean> {\n const errors = [];\n let barId: string;\n try {\n debugMessage(`cli.ApplicationOps.importApplicationsFromFiles: begin`);\n const names = fs.readdirSync(getWorkingDirectory());\n const files = names\n .filter((name) => name.toLowerCase().endsWith('.application.json'))\n .map((name) => getFilePath(name));\n barId = createProgressIndicator(\n 'determinate',\n files.length,\n 'Importing applications...'\n );\n let total = 0;\n for (const file of files) {\n try {\n const data = fs.readFileSync(file, 'utf8');\n const fileData: ApplicationExportInterface = JSON.parse(data);\n const count = Object.keys(fileData.application).length;\n total += count;\n await _importApplications(fileData, options);\n updateProgressIndicator(\n barId,\n `Imported ${count} application(s) from ${file}`\n );\n } catch (error) {\n errors.push(error);\n updateProgressIndicator(\n barId,\n `Error importing application(s) from ${file}`\n );\n printMessage(error, 'error');\n }\n }\n stopProgressIndicator(\n barId,\n `Finished importing ${total} application(s) from ${files.length} file(s).`\n );\n } catch (error) {\n errors.push(error);\n stopProgressIndicator(\n barId,\n `Error importing application(s) from file(s).`\n );\n printMessage(error, 'error');\n }\n debugMessage(`cli.ApplicationOps.importApplicationsFromFiles: end`);\n return 0 === errors.length;\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
2
2
|
import fs from 'fs';
|
|
3
|
-
import {
|
|
3
|
+
import { createProgressIndicator, createTable, debugMessage, printMessage, stopProgressIndicator, updateProgressIndicator } from '../utils/Console';
|
|
4
4
|
import { getTypedFilename, saveJsonToFile, titleCase } from '../utils/ExportImportUtils';
|
|
5
5
|
const {
|
|
6
6
|
getRealmName,
|
|
@@ -85,7 +85,7 @@ export async function listCirclesOfTrust(long = false) {
|
|
|
85
85
|
export async function exportCircleOfTrustToFile(cotId, file = null) {
|
|
86
86
|
let outcome = false;
|
|
87
87
|
debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: begin`);
|
|
88
|
-
|
|
88
|
+
const indicatorId = createProgressIndicator('indeterminate', 0, `Exporting ${cotId}...`);
|
|
89
89
|
try {
|
|
90
90
|
let fileName = getTypedFilename(cotId, 'cot.saml');
|
|
91
91
|
if (file) {
|
|
@@ -94,10 +94,10 @@ export async function exportCircleOfTrustToFile(cotId, file = null) {
|
|
|
94
94
|
const filePath = getFilePath(fileName, true);
|
|
95
95
|
const exportData = await exportCircleOfTrust(cotId);
|
|
96
96
|
saveJsonToFile(exportData, filePath);
|
|
97
|
-
|
|
97
|
+
stopProgressIndicator(indicatorId, `Exported ${cotId} to ${filePath}.`, 'success');
|
|
98
98
|
outcome = true;
|
|
99
99
|
} catch (error) {
|
|
100
|
-
|
|
100
|
+
stopProgressIndicator(indicatorId, `Error exporting ${cotId}: ${error.message}`, 'fail');
|
|
101
101
|
}
|
|
102
102
|
debugMessage(`cli.CirclesOfTrustOps.exportCircleOfTrustToFile: end`);
|
|
103
103
|
return outcome;
|
|
@@ -110,7 +110,7 @@ export async function exportCircleOfTrustToFile(cotId, file = null) {
|
|
|
110
110
|
export async function exportCirclesOfTrustToFile(file = null) {
|
|
111
111
|
let outcome = false;
|
|
112
112
|
debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: begin`);
|
|
113
|
-
|
|
113
|
+
const indicatorId = createProgressIndicator('indeterminate', 0, `Exporting all circles of trust...`);
|
|
114
114
|
try {
|
|
115
115
|
let fileName = getTypedFilename(`all${titleCase(getRealmName(state.getRealm()))}CirclesOfTrust`, 'cot.saml');
|
|
116
116
|
if (file) {
|
|
@@ -119,10 +119,10 @@ export async function exportCirclesOfTrustToFile(file = null) {
|
|
|
119
119
|
const filePath = getFilePath(fileName, true);
|
|
120
120
|
const exportData = await exportCirclesOfTrust();
|
|
121
121
|
saveJsonToFile(exportData, filePath);
|
|
122
|
-
|
|
122
|
+
stopProgressIndicator(indicatorId, `Exported all circles of trust to ${filePath}.`, 'success');
|
|
123
123
|
outcome = true;
|
|
124
124
|
} catch (error) {
|
|
125
|
-
|
|
125
|
+
stopProgressIndicator(indicatorId, `Error exporting circles of trust: ${error.message}`, 'fail');
|
|
126
126
|
}
|
|
127
127
|
debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFile: end`);
|
|
128
128
|
return outcome;
|
|
@@ -134,24 +134,25 @@ export async function exportCirclesOfTrustToFile(file = null) {
|
|
|
134
134
|
export async function exportCirclesOfTrustToFiles() {
|
|
135
135
|
debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: begin`);
|
|
136
136
|
const errors = [];
|
|
137
|
+
let indicatorId;
|
|
137
138
|
try {
|
|
138
139
|
const cots = await readCirclesOfTrust();
|
|
139
|
-
|
|
140
|
+
indicatorId = createProgressIndicator('determinate', cots.length, 'Exporting circles of trust...');
|
|
140
141
|
for (const cot of cots) {
|
|
141
142
|
const file = getTypedFilename(cot._id, 'cot.saml');
|
|
142
143
|
try {
|
|
143
144
|
const exportData = await exportCircleOfTrust(cot._id);
|
|
144
145
|
saveJsonToFile(exportData, getFilePath(file, true));
|
|
145
|
-
|
|
146
|
+
updateProgressIndicator(indicatorId, `Exported ${cot.name}.`);
|
|
146
147
|
} catch (error) {
|
|
147
148
|
errors.push(error);
|
|
148
|
-
|
|
149
|
+
updateProgressIndicator(indicatorId, `Error exporting ${cot.name}.`);
|
|
149
150
|
}
|
|
150
151
|
}
|
|
151
|
-
|
|
152
|
+
stopProgressIndicator(indicatorId, `Export complete.`);
|
|
152
153
|
} catch (error) {
|
|
153
154
|
errors.push(error);
|
|
154
|
-
|
|
155
|
+
stopProgressIndicator(indicatorId, `Error exporting circles of trust to files`);
|
|
155
156
|
}
|
|
156
157
|
debugMessage(`cli.CirclesOfTrustOps.exportCirclesOfTrustToFiles: end`);
|
|
157
158
|
return 0 === errors.length;
|
|
@@ -165,16 +166,16 @@ export async function exportCirclesOfTrustToFiles() {
|
|
|
165
166
|
export async function importCircleOfTrustFromFile(cotId, file) {
|
|
166
167
|
let outcome = false;
|
|
167
168
|
const filePath = getFilePath(file);
|
|
168
|
-
|
|
169
|
+
const indicatorId = createProgressIndicator('indeterminate', 0, `Importing circle of trust ${cotId} from ${filePath}...`);
|
|
169
170
|
try {
|
|
170
171
|
const data = fs.readFileSync(filePath, 'utf8');
|
|
171
172
|
const fileData = JSON.parse(data);
|
|
172
173
|
await importCircleOfTrust(cotId, fileData);
|
|
173
174
|
outcome = true;
|
|
174
|
-
|
|
175
|
+
stopProgressIndicator(indicatorId, `Imported circle of trust ${cotId} from ${filePath}.`, 'success');
|
|
175
176
|
} catch (error) {
|
|
176
177
|
var _error$response;
|
|
177
|
-
|
|
178
|
+
stopProgressIndicator(indicatorId, `Error importing circle of trust ${cotId} from ${filePath}.`, 'fail');
|
|
178
179
|
printMessage(((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data) || error, 'error');
|
|
179
180
|
}
|
|
180
181
|
return outcome;
|
|
@@ -187,16 +188,16 @@ export async function importCircleOfTrustFromFile(cotId, file) {
|
|
|
187
188
|
export async function importFirstCircleOfTrustFromFile(file) {
|
|
188
189
|
let outcome = false;
|
|
189
190
|
const filePath = getFilePath(file);
|
|
190
|
-
|
|
191
|
+
const indicatorId = createProgressIndicator('indeterminate', 0, `Importing first circle of trust from ${filePath}...`);
|
|
191
192
|
try {
|
|
192
193
|
const data = fs.readFileSync(filePath, 'utf8');
|
|
193
194
|
const fileData = JSON.parse(data);
|
|
194
195
|
await importFirstCircleOfTrust(fileData);
|
|
195
196
|
outcome = true;
|
|
196
|
-
|
|
197
|
+
stopProgressIndicator(indicatorId, `Imported first circle of trust from ${filePath}.`, 'success');
|
|
197
198
|
} catch (error) {
|
|
198
199
|
var _error$response2;
|
|
199
|
-
|
|
200
|
+
stopProgressIndicator(indicatorId, `Error importing first circle of trust from ${filePath}.`, 'fail');
|
|
200
201
|
printMessage(((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data) || error, 'error');
|
|
201
202
|
}
|
|
202
203
|
return outcome;
|
|
@@ -209,16 +210,16 @@ export async function importFirstCircleOfTrustFromFile(file) {
|
|
|
209
210
|
export async function importCirclesOfTrustFromFile(file) {
|
|
210
211
|
let outcome = false;
|
|
211
212
|
const filePath = getFilePath(file);
|
|
212
|
-
|
|
213
|
+
const indicatorId = createProgressIndicator('indeterminate', 0, `Importing circles of trust from ${filePath}...`);
|
|
213
214
|
try {
|
|
214
215
|
const data = fs.readFileSync(filePath, 'utf8');
|
|
215
216
|
const fileData = JSON.parse(data);
|
|
216
217
|
await importCirclesOfTrust(fileData);
|
|
217
218
|
outcome = true;
|
|
218
|
-
|
|
219
|
+
stopProgressIndicator(indicatorId, `Imported circles of trust from ${filePath}.`, 'success');
|
|
219
220
|
} catch (error) {
|
|
220
221
|
var _error$response3;
|
|
221
|
-
|
|
222
|
+
stopProgressIndicator(indicatorId, `Error importing circles of trust from ${filePath}.`, 'fail');
|
|
222
223
|
printMessage(((_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data) || error, 'error');
|
|
223
224
|
}
|
|
224
225
|
return outcome;
|
|
@@ -229,11 +230,12 @@ export async function importCirclesOfTrustFromFile(file) {
|
|
|
229
230
|
*/
|
|
230
231
|
export async function importCirclesOfTrustFromFiles() {
|
|
231
232
|
const errors = [];
|
|
233
|
+
let indicatorId;
|
|
232
234
|
try {
|
|
233
235
|
debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: begin`);
|
|
234
236
|
const names = fs.readdirSync(getWorkingDirectory());
|
|
235
237
|
const files = names.filter(name => name.toLowerCase().endsWith('.cot.saml.json')).map(name => getFilePath(name));
|
|
236
|
-
|
|
238
|
+
indicatorId = createProgressIndicator('determinate', files.length, 'Importing circles of trust...');
|
|
237
239
|
let total = 0;
|
|
238
240
|
for (const file of files) {
|
|
239
241
|
try {
|
|
@@ -242,17 +244,17 @@ export async function importCirclesOfTrustFromFiles() {
|
|
|
242
244
|
const count = Object.keys(fileData.saml.cot).length;
|
|
243
245
|
total += count;
|
|
244
246
|
await importCirclesOfTrust(fileData);
|
|
245
|
-
|
|
247
|
+
updateProgressIndicator(indicatorId, `Imported ${count} circles of trust from ${file}`);
|
|
246
248
|
} catch (error) {
|
|
247
249
|
errors.push(error);
|
|
248
|
-
|
|
250
|
+
updateProgressIndicator(indicatorId, `Error importing circles of trust from ${file}`);
|
|
249
251
|
printMessage(error, 'error');
|
|
250
252
|
}
|
|
251
253
|
}
|
|
252
|
-
|
|
254
|
+
stopProgressIndicator(indicatorId, `Imported ${total} circles of trust from ${files.length} files.`);
|
|
253
255
|
} catch (error) {
|
|
254
256
|
errors.push(error);
|
|
255
|
-
|
|
257
|
+
stopProgressIndicator(indicatorId, `Error importing circles of trust from files.`);
|
|
256
258
|
printMessage(error, 'error');
|
|
257
259
|
}
|
|
258
260
|
debugMessage(`cli.CirclesOfTrustOps.importCirclesOfTrustFromFiles: end`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CirclesOfTrustOps.js","names":["frodo","state","fs","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","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","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 createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\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 showSpinner(`Exporting ${cotId}...`);\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 succeedSpinner(`Exported ${cotId} to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting ${cotId}: ${error.message}`);\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 showSpinner(`Exporting all circles of trust...`);\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 succeedSpinner(`Exported all circles of trust to ${filePath}.`);\n outcome = true;\n } catch (error) {\n failSpinner(`Error exporting circles of trust: ${error.message}`);\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 try {\n const cots: CircleOfTrustSkeleton[] = await readCirclesOfTrust();\n createProgressBar(cots.length, 'Exporting circles of trust...');\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 updateProgressBar(`Exported ${cot.name}.`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error exporting ${cot.name}.`);\n }\n }\n stopProgressBar(`Export complete.`);\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error exporting circles of trust to files`);\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 showSpinner(`Importing circle of trust ${cotId} from ${filePath}...`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importCircleOfTrust(cotId, fileData);\n outcome = true;\n succeedSpinner(`Imported circle of trust ${cotId} from ${filePath}.`);\n } catch (error) {\n failSpinner(`Error importing circle of trust ${cotId} from ${filePath}.`);\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 showSpinner(`Importing first circle of trust from ${filePath}...`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importFirstCircleOfTrust(fileData);\n outcome = true;\n succeedSpinner(`Imported first circle of trust from ${filePath}.`);\n } catch (error) {\n failSpinner(`Error importing first circle of trust from ${filePath}.`);\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 showSpinner(`Importing circles of trust from ${filePath}...`);\n try {\n const data = fs.readFileSync(filePath, 'utf8');\n const fileData = JSON.parse(data);\n await importCirclesOfTrust(fileData);\n outcome = true;\n succeedSpinner(`Imported circles of trust from ${filePath}.`);\n } catch (error) {\n failSpinner(`Error importing circles of trust from ${filePath}.`);\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 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 createProgressBar(files.length, 'Importing circles of trust...');\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 updateProgressBar(`Imported ${count} circles of trust from ${file}`);\n } catch (error) {\n errors.push(error);\n updateProgressBar(`Error importing circles of trust from ${file}`);\n printMessage(error, 'error');\n }\n }\n stopProgressBar(\n `Imported ${total} circles of trust from ${files.length} files.`\n );\n } catch (error) {\n errors.push(error);\n stopProgressBar(`Error importing circles of trust from files.`);\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","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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"}
|