@rockcarver/frodo-cli 2.0.0-37 → 2.0.0-39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -1
- package/esm/cli/_template/something-else-export.js +1 -1
- package/esm/cli/_template/something-else-export.js.map +1 -1
- package/esm/cli/_template/something-export.js +1 -1
- package/esm/cli/_template/something-export.js.map +1 -1
- package/esm/cli/_template/something-other-export.js +1 -1
- package/esm/cli/_template/something-other-export.js.map +1 -1
- package/esm/cli/admin/admin-federation-export.js +4 -4
- package/esm/cli/admin/admin-federation-export.js.map +1 -1
- package/esm/cli/agent/agent-export.js +4 -4
- package/esm/cli/agent/agent-export.js.map +1 -1
- package/esm/cli/agent/agent-gateway-export.js +4 -4
- package/esm/cli/agent/agent-gateway-export.js.map +1 -1
- package/esm/cli/agent/agent-java-export.js +4 -4
- package/esm/cli/agent/agent-java-export.js.map +1 -1
- package/esm/cli/agent/agent-web-export.js +4 -4
- package/esm/cli/agent/agent-web-export.js.map +1 -1
- package/esm/cli/app/app-export.js +4 -4
- package/esm/cli/app/app-export.js.map +1 -1
- package/esm/cli/authn/authn-export.js +2 -2
- package/esm/cli/authn/authn-export.js.map +1 -1
- package/esm/cli/authz/authz-policy-export.js +6 -6
- package/esm/cli/authz/authz-policy-export.js.map +1 -1
- package/esm/cli/authz/authz-set-export.js +4 -4
- package/esm/cli/authz/authz-set-export.js.map +1 -1
- package/esm/cli/authz/authz-type-export.js +5 -5
- package/esm/cli/authz/authz-type-export.js.map +1 -1
- package/esm/cli/config/config-export.js +3 -3
- package/esm/cli/config/config-export.js.map +1 -1
- package/esm/cli/email/email-template-export.js +4 -4
- package/esm/cli/email/email-template-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-export.js +4 -4
- package/esm/cli/esv/esv-secret-export.js.map +1 -1
- package/esm/cli/esv/esv-secret-list.js +2 -2
- package/esm/cli/esv/esv-secret-list.js.map +1 -1
- package/esm/cli/esv/esv-variable-export.js +4 -4
- package/esm/cli/esv/esv-variable-export.js.map +1 -1
- package/esm/cli/esv/esv-variable-list.js +2 -2
- package/esm/cli/esv/esv-variable-list.js.map +1 -1
- package/esm/cli/idp/idp-export.js +4 -4
- package/esm/cli/idp/idp-export.js.map +1 -1
- package/esm/cli/journey/journey-describe.js +3 -1
- package/esm/cli/journey/journey-describe.js.map +1 -1
- package/esm/cli/journey/journey-export.js +4 -4
- package/esm/cli/journey/journey-export.js.map +1 -1
- package/esm/cli/oauth/oauth-client-export.js +4 -4
- package/esm/cli/oauth/oauth-client-export.js.map +1 -1
- package/esm/cli/saml/saml-cot-export.js +4 -4
- package/esm/cli/saml/saml-cot-export.js.map +1 -1
- package/esm/cli/saml/saml-export.js +4 -4
- package/esm/cli/saml/saml-export.js.map +1 -1
- package/esm/cli/script/script-export.js +4 -4
- package/esm/cli/script/script-export.js.map +1 -1
- package/esm/cli/script/script-list.js +2 -2
- package/esm/cli/script/script-list.js.map +1 -1
- package/esm/cli/service/service-export.js +4 -4
- package/esm/cli/service/service-export.js.map +1 -1
- package/esm/cli/theme/theme-export.js +5 -5
- package/esm/cli/theme/theme-export.js.map +1 -1
- package/esm/ops/AdminFederationOps.js +11 -7
- package/esm/ops/AdminFederationOps.js.map +1 -1
- package/esm/ops/AgentOps.js +39 -25
- package/esm/ops/AgentOps.js.map +1 -1
- package/esm/ops/ApplicationOps.js +11 -8
- package/esm/ops/ApplicationOps.js.map +1 -1
- package/esm/ops/AuthenticationSettingsOps.js +4 -3
- package/esm/ops/AuthenticationSettingsOps.js.map +1 -1
- package/esm/ops/CirclesOfTrustOps.js +12 -7
- package/esm/ops/CirclesOfTrustOps.js.map +1 -1
- package/esm/ops/ConfigOps.js +9 -7
- package/esm/ops/ConfigOps.js.map +1 -1
- package/esm/ops/EmailTemplateOps.js +11 -7
- package/esm/ops/EmailTemplateOps.js.map +1 -1
- package/esm/ops/IdmOps.js +3 -2
- package/esm/ops/IdmOps.js.map +1 -1
- package/esm/ops/IdpOps.js +14 -7
- package/esm/ops/IdpOps.js.map +1 -1
- package/esm/ops/JourneyOps.js +15 -6
- package/esm/ops/JourneyOps.js.map +1 -1
- package/esm/ops/OAuth2ClientOps.js +10 -7
- package/esm/ops/OAuth2ClientOps.js.map +1 -1
- package/esm/ops/PolicyOps.js +18 -11
- package/esm/ops/PolicyOps.js.map +1 -1
- package/esm/ops/PolicySetOps.js +12 -7
- package/esm/ops/PolicySetOps.js.map +1 -1
- package/esm/ops/ResourceTypeOps.js +15 -9
- package/esm/ops/ResourceTypeOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +10 -7
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/ops/ScriptOps.js +73 -36
- package/esm/ops/ScriptOps.js.map +1 -1
- package/esm/ops/SecretsOps.js +76 -48
- package/esm/ops/SecretsOps.js.map +1 -1
- package/esm/ops/ServiceOps.js +10 -9
- package/esm/ops/ServiceOps.js.map +1 -1
- package/esm/ops/ThemeOps.js +15 -9
- package/esm/ops/ThemeOps.js.map +1 -1
- package/esm/ops/VariablesOps.js +49 -23
- package/esm/ops/VariablesOps.js.map +1 -1
- package/esm/utils/Config.js +147 -1
- package/esm/utils/Config.js.map +1 -1
- package/package.json +2 -2
- package/esm/utils/ExportImportUtils.js +0 -48
- package/esm/utils/ExportImportUtils.js.map +0 -1
package/esm/ops/ScriptOps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScriptOps.js","names":["frodo","state","chokidar","fs","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","spinSpinner","stopProgressIndicator","succeedSpinner","updateProgressIndicator","getTypedFilename","isValidUrl","saveJsonToFile","saveTextToFile","titleCase","wordwrap","readScripts","exportScript","exportScriptByName","exportScripts","importScripts","deleteScript","deleteScriptByName","deleteScripts","script","isBase64Encoded","getFilePath","getWorkingDirectory","utils","getOneLineDescription","scriptObj","description","_id","context","name","getTableHeaderMd","markdown","getTableRowMd","langMap","JAVASCRIPT","GROOVY","language","split","join","listScripts","long","outcome","scripts","sort","a","b","localeCompare","table","forEach","push","toString","error","message","exportScriptToFile","scriptId","file","fileName","filePath","scriptExport","exportScriptByNameToFile","exportScriptsToFile","getRealm","exportScriptsToFiles","extract","scriptList","barId","length","fileBarId","extractScriptToFile","directory","scriptSkeleton","getScriptSkeleton","fileExtension","scriptFileName","scriptFilePath","scriptText","Array","isArray","isScriptExtracted","importData","extracted","Object","keys","importScriptsFromFile","reUuid","readFile","err","data","JSON","parse","handleScriptFileImport","importScriptsFromFiles","watch","validateScripts","onChange","path","_stats","watcher","persistent","on","close","scriptFile","getScriptFile","getScriptExportByScriptFile","imported","endsWith","replace","getScriptExport","extractFile","getExtractFile","scriptRaw","readFileSync","startsWith","scriptExportRaw","getScriptId","scriptIds","Error","deleteScriptId","id","spinnerId","undefined","deleteScriptName","deleteAllScripts"],"sources":["../../src/ops/ScriptOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type ScriptSkeleton } from '@rockcarver/frodo-lib/types/api/ScriptApi';\nimport { type ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport chokidar from 'chokidar';\nimport fs from 'fs';\n\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n spinSpinner,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressIndicator,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n isValidUrl,\n saveJsonToFile,\n saveTextToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n readScripts,\n exportScript,\n exportScriptByName,\n exportScripts,\n importScripts,\n deleteScript,\n deleteScriptByName,\n deleteScripts,\n} = frodo.script;\n\nconst { isBase64Encoded, getFilePath, getWorkingDirectory } = frodo.utils;\n\n/**\n * Get a one-line description of the script object\n * @param {ScriptSkeleton} scriptObj script object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(scriptObj: ScriptSkeleton): string {\n const description = `[${scriptObj._id['brightCyan']}] ${scriptObj.context} - ${scriptObj.name}`;\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 | Language | Type | Id |\\n';\n markdown += '| ---- | -------- | ---- | ---|';\n return markdown;\n}\n\n/**\n * Get a one-line description of the script object in markdown\n * @param {TypesRaw.ScriptSkeleton} scriptObj script object to describe\n * @returns {string} markdown table row\n */\nexport function getTableRowMd(scriptObj: ScriptSkeleton): string {\n const langMap = { JAVASCRIPT: 'JavaSscript', GROOVY: 'Groovy' };\n const description = `| ${scriptObj.name} | ${\n langMap[scriptObj.language]\n } | ${titleCase(scriptObj.context.split('_').join(' '))} | \\`${\n scriptObj._id\n }\\` |`;\n return description;\n}\n\n/**\n * List scripts\n * @param {boolean} long detail list\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function listScripts(long = false): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.listScripts: start`);\n try {\n const scripts = await readScripts();\n scripts.sort((a, b) => a.name.localeCompare(b.name));\n if (long) {\n const table = createTable([\n 'Name',\n 'UUID',\n 'Language',\n 'Context',\n 'Description',\n ]);\n const langMap = { JAVASCRIPT: 'JS', GROOVY: 'Groovy' };\n scripts.forEach((script) => {\n table.push([\n wordwrap(script.name, 25, ' '),\n script._id,\n langMap[script.language],\n wordwrap(titleCase(script.context.split('_').join(' ')), 25),\n wordwrap(script.description, 30),\n ]);\n });\n printMessage(table.toString(), 'data');\n } else {\n scripts.forEach((script) => {\n printMessage(`${script.name}`, 'data');\n });\n }\n } catch (error) {\n outcome = false;\n printMessage(`Error listing scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.listScripts: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Export script by id to file\n * @param {string} scriptId script uuid\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptToFile(\n scriptId: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptToFile: start`);\n try {\n showSpinner(`Exporting script '${scriptId}'...`);\n let fileName = getTypedFilename(scriptId, 'script');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n spinSpinner(`Exporting script '${scriptId}' to '${filePath}'...`);\n const scriptExport = await exportScript(scriptId);\n saveJsonToFile(scriptExport, filePath);\n succeedSpinner(`Exported script '${scriptId}' to '${filePath}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${scriptId}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [false]`);\n return false;\n}\n\n/**\n * Export script by name to file\n * @param {string} name script name\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptByNameToFile(\n name: string,\n file: string\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);\n try {\n showSpinner(`Exporting script '${name}'...`);\n let fileName = getTypedFilename(name, 'script');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n spinSpinner(`Exporting script '${name}' to '${filePath}'...`);\n const scriptExport = await exportScriptByName(name);\n saveJsonToFile(scriptExport, filePath);\n succeedSpinner(`Exported script '${name}' to '${filePath}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${name}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to single file\n * @param {string} file file name\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFile(file: string): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: start`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Scripts`,\n 'script'\n );\n if (file) {\n fileName = file;\n }\n const scriptExport = await exportScripts();\n saveJsonToFile(scriptExport, getFilePath(fileName, true));\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [true]`);\n return true;\n } catch (error) {\n printMessage(`Error exporting scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to individual files\n * @param extract Extracts the scripts from the exports into separate files if true\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFiles(extract = false): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);\n const scriptList = await readScripts();\n const barId = createProgressIndicator(\n 'determinate',\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n const fileBarId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting script ${script.name}...`\n );\n updateProgressIndicator(barId, `Reading script ${script.name}`);\n const file = getFilePath(getTypedFilename(script.name, 'script'), true);\n try {\n const scriptExport = await exportScriptByName(script.name);\n if (extract) extractScriptToFile(scriptExport);\n saveJsonToFile(scriptExport, file);\n updateProgressIndicator(fileBarId, `Saving ${script.name} to ${file}.`);\n stopProgressIndicator(fileBarId, `${script.name} saved to ${file}.`);\n } catch (error) {\n outcome = false;\n updateProgressIndicator(barId, `Error exporting ${script.name}.`);\n stopProgressIndicator(\n fileBarId,\n `Error saving ${script.name} to ${file}.`\n );\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressIndicator(\n barId,\n `Exported ${scriptList.length} scripts to individual files.`\n );\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Extracts a script from a script export into a separate file.\n * @param scriptExport The script export\n * @param scriptId The script id (optional if there is only one script in the export)\n * @param directory The directory within the base directory to save the script file\n */\nexport function extractScriptToFile(\n scriptExport: ScriptExportInterface,\n scriptId?: string,\n directory?: string\n) {\n const scriptSkeleton = scriptId\n ? scriptExport.script[scriptId]\n : getScriptSkeleton(scriptExport);\n const fileExtension =\n scriptSkeleton.language === 'JAVASCRIPT' ? 'js' : 'groovy';\n const scriptFileName = getTypedFilename(\n scriptSkeleton.name,\n 'script',\n fileExtension\n );\n const scriptFilePath = getFilePath(\n (directory ? `${directory}/` : '') + scriptFileName,\n true\n );\n const scriptText = Array.isArray(scriptSkeleton.script)\n ? scriptSkeleton.script.join('\\n')\n : scriptSkeleton.script;\n scriptSkeleton.script = `file://${scriptFilePath}`;\n saveTextToFile(scriptText, scriptFilePath);\n}\n\nfunction isScriptExtracted(importData: ScriptExportInterface): boolean {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: start`);\n let extracted = true;\n for (const scriptId of Object.keys(importData.script)) {\n const script = importData.script[scriptId].script;\n if (Array.isArray(script)) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is string array`);\n extracted = false;\n break;\n }\n if (isValidUrl(script as string)) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is extracted`);\n extracted = true;\n break;\n }\n if (isBase64Encoded) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is base64-encoded`);\n extracted = false;\n break;\n }\n break;\n }\n debugMessage(`Cli.ScriptOps.isScriptExtracted: end [extracted=${extracted}]`);\n return extracted;\n}\n\n/**\n * Import script(s) from file\n * @param {string} name Optional name of script. If supplied, only the script of that name is imported\n * @param {string} file file name\n * @param {boolean} reUuid true to generate a new uuid for each script on import, false otherwise\n * @returns {Promise<boolean>} true if no errors occurred during import, false otherwise\n */\nexport async function importScriptsFromFile(\n name: string,\n file: string,\n reUuid = false\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);\n fs.readFile(filePath, 'utf8', async (err, data) => {\n try {\n if (err) throw err;\n const importData: ScriptExportInterface = JSON.parse(data);\n if (isScriptExtracted(importData)) {\n await handleScriptFileImport(filePath, reUuid, false);\n } else {\n await importScripts(name, importData, reUuid);\n }\n outcome = true;\n } catch (error) {\n printMessage(\n `Error exporting script '${name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n });\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import extracted scripts.\n *\n * @param watch whether or not to watch for file changes\n */\nexport async function importScriptsFromFiles(\n watch: boolean,\n reUuid: boolean,\n validateScripts: boolean\n) {\n // If watch is true, it doesn't make sense to reUuid.\n reUuid = watch ? false : reUuid;\n\n /**\n * Run on file change detection, as well as on initial run.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async function onChange(path: string, _stats?: fs.Stats): Promise<void> {\n try {\n await handleScriptFileImport(path, reUuid, validateScripts);\n } catch (error) {\n printMessage(`${path}: ${error.message}`, 'error');\n }\n }\n\n // We watch json files and script files.\n const watcher = chokidar.watch(\n [\n `${getWorkingDirectory()}/**/*.script.json`,\n `${getWorkingDirectory()}/**/*.script.js`,\n `${getWorkingDirectory()}/**/*.script.groovy`,\n ],\n {\n persistent: watch,\n }\n );\n\n watcher\n .on('add', onChange)\n .on('change', onChange)\n .on('error', (error) => {\n printMessage(`Watcher error: ${error}`, 'error');\n watcher.close();\n })\n .on('ready', () => {\n if (watch) {\n printMessage('Watching for changes...');\n } else {\n watcher.close();\n printMessage('Done.');\n }\n });\n}\n\n/**\n * Handle a script file import.\n *\n * @param file Either a script file or an extract file\n * @param reUuid whether or not to generate a new uuid for each script on import\n */\nasync function handleScriptFileImport(\n file: string,\n reUuid: boolean,\n validateScripts: boolean\n) {\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: start`);\n const scriptFile = getScriptFile(file);\n const script = getScriptExportByScriptFile(scriptFile);\n\n const imported = await importScripts('', script, reUuid, validateScripts);\n if (imported) {\n printMessage(`Imported '${scriptFile}'`);\n }\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: end`);\n}\n\n/**\n * Get a script file from a file.\n *\n * @param file Either a script file or an extract file\n * @returns The script file\n */\nfunction getScriptFile(file: string) {\n if (file.endsWith('.script.json')) {\n return file;\n }\n return file.replace(/\\.script\\.(js|groovy)/, '.script.json');\n}\n\n/**\n * Get a script export from a script file.\n *\n * @param scriptFile The path to the script file\n * @returns The script export\n */\nfunction getScriptExportByScriptFile(\n scriptFile: string\n): ScriptExportInterface {\n const scriptExport = getScriptExport(scriptFile);\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const extractFile = getExtractFile(scriptSkeleton);\n if (!extractFile) {\n return scriptExport;\n }\n\n const scriptRaw = fs.readFileSync(extractFile, 'utf8');\n scriptSkeleton.script = scriptRaw.split('\\n');\n\n return scriptExport;\n}\n\n/**\n * Get an extract file from a script skeleton.\n *\n * @param scriptSkeleton The script skeleton\n * @returns The extract file or null if there is no extract file\n */\nfunction getExtractFile(scriptSkeleton: ScriptSkeleton): string | null {\n const extractFile = scriptSkeleton.script;\n if (Array.isArray(extractFile)) {\n return null;\n }\n if (\n extractFile.startsWith('file://') &&\n (extractFile.endsWith('.js') || extractFile.endsWith('.groovy'))\n ) {\n return extractFile.replace('file://', '');\n }\n return null;\n}\n\n/**\n * Get a script export from a file.\n *\n * @param file The path to a script export file\n * @returns The script export\n */\nfunction getScriptExport(file: string): ScriptExportInterface {\n const scriptExportRaw = fs.readFileSync(file, 'utf8');\n const scriptExport = JSON.parse(scriptExportRaw) as ScriptExportInterface;\n\n return scriptExport;\n}\n\n/**\n * Get the main script skeleton from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script Get the main script skeleton from a script export\n * @returns The main script skeleton\n */\nfunction getScriptSkeleton(script: ScriptExportInterface): ScriptSkeleton {\n const scriptId = getScriptId(script);\n return script.script[scriptId];\n}\n\n/**\n * Get the main script ID from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script The script export\n * @returns The main script ID\n */\nfunction getScriptId(script: ScriptExportInterface): string {\n const scriptIds = Object.keys(script.script);\n if (scriptIds.length !== 1) {\n throw new Error(`Expected 1 script, found ${scriptIds.length}`);\n }\n return scriptIds[0];\n}\n\n/**\n * Delete script by id\n * @param {String} id script id\n */\nexport async function deleteScriptId(id) {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n undefined,\n `Deleting ${id}...`\n );\n try {\n await deleteScript(id);\n stopProgressIndicator(spinnerId, `Deleted ${id}.`, 'success');\n } catch (error) {\n stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete script by name\n * @param {String} name script name\n */\nexport async function deleteScriptName(name) {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n undefined,\n `Deleting ${name}...`\n );\n try {\n await deleteScriptByName(name);\n stopProgressIndicator(spinnerId, `Deleted ${name}.`, 'success');\n } catch (error) {\n stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete all non-default scripts\n */\nexport async function deleteAllScripts() {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n undefined,\n `Deleting all non-default scripts...`\n );\n try {\n await deleteScripts();\n stopProgressIndicator(\n spinnerId,\n `Deleted all non-default scripts.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ScriptOps.js","names":["frodo","state","chokidar","fs","getFullExportConfig","isIdUsed","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","spinSpinner","stopProgressIndicator","succeedSpinner","updateProgressIndicator","wordwrap","getTypedFilename","isValidUrl","saveJsonToFile","saveTextToFile","titleCase","isBase64Encoded","getFilePath","getWorkingDirectory","utils","readScripts","exportScript","exportScriptByName","exportScripts","importScripts","deleteScript","deleteScriptByName","deleteScripts","script","getOneLineDescription","scriptObj","description","_id","context","name","getTableHeaderMd","markdown","getTableRowMd","langMap","JAVASCRIPT","GROOVY","language","split","join","listScripts","long","usage","file","spinnerId","scripts","sort","a","b","localeCompare","length","error","_error$response","response","data","message","forEach","fullExport","headers","_error$response2","push","table","values","isScriptUsed","used","location","toString","exportScriptToFile","scriptId","includeMeta","fileName","filePath","scriptExport","exportScriptByNameToFile","exportScriptsToFile","getRealm","exportScriptsToFiles","extract","outcome","scriptList","barId","fileBarId","extractScriptToFile","directory","scriptSkeleton","getScriptSkeleton","fileExtension","scriptFileName","scriptFilePath","scriptText","Array","isArray","isScriptExtracted","importData","extracted","Object","keys","importScriptsFromFile","reUuid","readFile","err","JSON","parse","handleScriptFileImport","importScriptsFromFiles","watch","validateScripts","onChange","path","_stats","watcher","persistent","on","close","scriptFile","getScriptFile","getScriptExportByScriptFile","imported","endsWith","replace","getScriptExport","extractFile","getExtractFile","scriptRaw","readFileSync","startsWith","scriptExportRaw","getScriptId","scriptIds","Error","deleteScriptId","id","undefined","deleteScriptName","deleteAllScripts"],"sources":["../../src/ops/ScriptOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { type ScriptSkeleton } from '@rockcarver/frodo-lib/types/api/ScriptApi';\nimport { type ScriptExportInterface } from '@rockcarver/frodo-lib/types/ops/ScriptOps';\nimport chokidar from 'chokidar';\nimport fs from 'fs';\n\nimport { getFullExportConfig, isIdUsed } from '../utils/Config';\nimport {\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n spinSpinner,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressIndicator,\n} from '../utils/Console';\nimport wordwrap from './utils/Wordwrap';\n\nconst {\n getTypedFilename,\n isValidUrl,\n saveJsonToFile,\n saveTextToFile,\n titleCase,\n isBase64Encoded,\n getFilePath,\n getWorkingDirectory,\n} = frodo.utils;\nconst {\n readScripts,\n exportScript,\n exportScriptByName,\n exportScripts,\n importScripts,\n deleteScript,\n deleteScriptByName,\n deleteScripts,\n} = frodo.script;\n\n/**\n * Get a one-line description of the script object\n * @param {ScriptSkeleton} scriptObj script object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(scriptObj: ScriptSkeleton): string {\n const description = `[${scriptObj._id['brightCyan']}] ${scriptObj.context} - ${scriptObj.name}`;\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 | Language | Type | Id |\\n';\n markdown += '| ---- | -------- | ---- | ---|';\n return markdown;\n}\n\n/**\n * Get a one-line description of the script object in markdown\n * @param {TypesRaw.ScriptSkeleton} scriptObj script object to describe\n * @returns {string} markdown table row\n */\nexport function getTableRowMd(scriptObj: ScriptSkeleton): string {\n const langMap = { JAVASCRIPT: 'JavaSscript', GROOVY: 'Groovy' };\n const description = `| ${scriptObj.name} | ${\n langMap[scriptObj.language]\n } | ${titleCase(scriptObj.context.split('_').join(' '))} | \\`${\n scriptObj._id\n }\\` |`;\n return description;\n}\n\n/**\n * List scripts\n * @param {boolean} long detail list\n * @param {boolean} usage display usage field\n * @param {String | null} file Optional filename to determine usage\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function listScripts(\n long: boolean = false,\n usage: boolean = false,\n file: string | null = null\n): Promise<boolean> {\n let spinnerId: string;\n let scripts: ScriptSkeleton[] = [];\n debugMessage(`Cli.ScriptOps.listScripts: start`);\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading scripts...`\n );\n scripts = await readScripts();\n scripts.sort((a, b) => a.name.localeCompare(b.name));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${scripts.length} scripts.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading scripts: ${error.response?.data || error.message}`,\n 'fail'\n );\n debugMessage(error);\n debugMessage(`Cli.ScriptOps.listScripts: end [false]`);\n return false;\n }\n if (!long && !usage) {\n scripts.forEach((script) => {\n printMessage(`${script.name}`, 'data');\n });\n debugMessage(`Cli.ScriptOps.listScripts: end [true]`);\n return true;\n }\n let fullExport = null;\n const headers = long\n ? ['Name', 'UUID', 'Language', 'Context', 'Description']\n : ['Name'];\n if (usage) {\n try {\n fullExport = await getFullExportConfig(file);\n } catch (error) {\n printMessage(\n `Error getting full export: ${error.response?.data || error.message}`,\n 'error'\n );\n debugMessage(`Cli.ScriptOps.listScripts: end [false]`);\n return false;\n }\n //Delete scripts from full export so they aren't mistakenly used for determining usage\n delete fullExport.script;\n headers.push('Used');\n }\n const table = createTable(headers);\n const langMap = { JAVASCRIPT: 'JS', GROOVY: 'Groovy' };\n scripts.forEach((script) => {\n const values = long\n ? [\n wordwrap(script.name, 25, ' '),\n script._id,\n langMap[script.language],\n wordwrap(titleCase(script.context.split('_').join(' ')), 25),\n wordwrap(script.description, 30),\n ]\n : [wordwrap(script.name, 25, ' ')];\n if (usage) {\n const isScriptUsed = isIdUsed(fullExport, script._id, false);\n values.push(\n isScriptUsed.used\n ? `${'yes'['brightGreen']} (at ${isScriptUsed.location})`\n : 'no'['brightRed']\n );\n }\n table.push(values);\n });\n printMessage(table.toString(), 'data');\n debugMessage(`Cli.ScriptOps.listScripts: end [true]`);\n return true;\n}\n\n/**\n * Export script by id to file\n * @param {string} scriptId script uuid\n * @param {string} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptToFile(\n scriptId: string,\n file: string,\n includeMeta = true\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptToFile: start`);\n try {\n showSpinner(`Exporting script '${scriptId}'...`);\n let fileName = getTypedFilename(scriptId, 'script');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n spinSpinner(`Exporting script '${scriptId}' to '${filePath}'...`);\n const scriptExport = await exportScript(scriptId);\n saveJsonToFile(scriptExport, filePath, includeMeta);\n succeedSpinner(`Exported script '${scriptId}' to '${filePath}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${scriptId}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptToFile: end [false]`);\n return false;\n}\n\n/**\n * Export script by name to file\n * @param {string} name script name\n * @param {string} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptByNameToFile(\n name: string,\n file: string,\n includeMeta = true\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: start`);\n try {\n showSpinner(`Exporting script '${name}'...`);\n let fileName = getTypedFilename(name, 'script');\n if (file) {\n fileName = file;\n }\n const filePath = getFilePath(fileName, true);\n spinSpinner(`Exporting script '${name}' to '${filePath}'...`);\n const scriptExport = await exportScriptByName(name);\n saveJsonToFile(scriptExport, filePath, includeMeta);\n succeedSpinner(`Exported script '${name}' to '${filePath}'.`);\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [true]`);\n return true;\n } catch (error) {\n failSpinner(`Error exporting script '${name}': ${error.message}`);\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptByNameToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to single file\n * @param {string} file file name\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFile(\n file: string,\n includeMeta = true\n): Promise<boolean> {\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: start`);\n try {\n let fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Scripts`,\n 'script'\n );\n if (file) {\n fileName = file;\n }\n const scriptExport = await exportScripts();\n saveJsonToFile(scriptExport, getFilePath(fileName, true), includeMeta);\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [true]`);\n return true;\n } catch (error) {\n printMessage(`Error exporting scripts: ${error.message}`, 'error');\n debugMessage(error);\n }\n debugMessage(`Cli.ScriptOps.exportScriptsToFile: end [false]`);\n return false;\n}\n\n/**\n * Export all scripts to individual 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 * @returns {Promise<boolean>} true if no errors occurred during export, false otherwise\n */\nexport async function exportScriptsToFiles(\n extract = false,\n includeMeta = true\n): Promise<boolean> {\n let outcome = true;\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: start`);\n const scriptList = await readScripts();\n const barId = createProgressIndicator(\n 'determinate',\n scriptList.length,\n 'Exporting scripts to individual files...'\n );\n for (const script of scriptList) {\n const fileBarId = createProgressIndicator(\n 'determinate',\n 1,\n `Exporting script ${script.name}...`\n );\n updateProgressIndicator(barId, `Reading script ${script.name}`);\n const file = getFilePath(getTypedFilename(script.name, 'script'), true);\n try {\n const scriptExport = await exportScriptByName(script.name);\n if (extract) extractScriptToFile(scriptExport);\n saveJsonToFile(scriptExport, file, includeMeta);\n updateProgressIndicator(fileBarId, `Saving ${script.name} to ${file}.`);\n stopProgressIndicator(fileBarId, `${script.name} saved to ${file}.`);\n } catch (error) {\n outcome = false;\n updateProgressIndicator(barId, `Error exporting ${script.name}.`);\n stopProgressIndicator(\n fileBarId,\n `Error saving ${script.name} to ${file}.`\n );\n printMessage(\n `Error exporting script '${script.name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n }\n stopProgressIndicator(\n barId,\n `Exported ${scriptList.length} scripts to individual files.`\n );\n debugMessage(`Cli.ScriptOps.exportScriptsToFiles: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Extracts a script from a script export into a separate file.\n * @param scriptExport The script export\n * @param scriptId The script id (optional if there is only one script in the export)\n * @param directory The directory within the base directory to save the script file\n */\nexport function extractScriptToFile(\n scriptExport: ScriptExportInterface,\n scriptId?: string,\n directory?: string\n) {\n const scriptSkeleton = scriptId\n ? scriptExport.script[scriptId]\n : getScriptSkeleton(scriptExport);\n const fileExtension =\n scriptSkeleton.language === 'JAVASCRIPT' ? 'js' : 'groovy';\n const scriptFileName = getTypedFilename(\n scriptSkeleton.name,\n 'script',\n fileExtension\n );\n const scriptFilePath = getFilePath(\n (directory ? `${directory}/` : '') + scriptFileName,\n true\n );\n const scriptText = Array.isArray(scriptSkeleton.script)\n ? scriptSkeleton.script.join('\\n')\n : scriptSkeleton.script;\n scriptSkeleton.script = `file://${scriptFilePath}`;\n saveTextToFile(scriptText, scriptFilePath);\n}\n\nfunction isScriptExtracted(importData: ScriptExportInterface): boolean {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: start`);\n let extracted = true;\n for (const scriptId of Object.keys(importData.script)) {\n const script = importData.script[scriptId].script;\n if (Array.isArray(script)) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is string array`);\n extracted = false;\n break;\n }\n if (isValidUrl(script as string)) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is extracted`);\n extracted = true;\n break;\n }\n if (isBase64Encoded) {\n debugMessage(`Cli.ScriptOps.isScriptExtracted: script is base64-encoded`);\n extracted = false;\n break;\n }\n break;\n }\n debugMessage(`Cli.ScriptOps.isScriptExtracted: end [extracted=${extracted}]`);\n return extracted;\n}\n\n/**\n * Import script(s) from file\n * @param {string} name Optional name of script. If supplied, only the script of that name is imported\n * @param {string} file file name\n * @param {boolean} reUuid true to generate a new uuid for each script on import, false otherwise\n * @returns {Promise<boolean>} true if no errors occurred during import, false otherwise\n */\nexport async function importScriptsFromFile(\n name: string,\n file: string,\n reUuid = false\n): Promise<boolean> {\n let outcome = false;\n const filePath = getFilePath(file);\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: start`);\n fs.readFile(filePath, 'utf8', async (err, data) => {\n try {\n if (err) throw err;\n const importData: ScriptExportInterface = JSON.parse(data);\n if (isScriptExtracted(importData)) {\n await handleScriptFileImport(filePath, reUuid, false);\n } else {\n await importScripts(name, importData, reUuid);\n }\n outcome = true;\n } catch (error) {\n printMessage(\n `Error exporting script '${name}': ${error.message}`,\n 'error'\n );\n debugMessage(error);\n }\n });\n debugMessage(`Cli.ScriptOps.importScriptsFromFile: end [${outcome}]`);\n return outcome;\n}\n\n/**\n * Import extracted scripts.\n *\n * @param watch whether or not to watch for file changes\n */\nexport async function importScriptsFromFiles(\n watch: boolean,\n reUuid: boolean,\n validateScripts: boolean\n) {\n // If watch is true, it doesn't make sense to reUuid.\n reUuid = watch ? false : reUuid;\n\n /**\n * Run on file change detection, as well as on initial run.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async function onChange(path: string, _stats?: fs.Stats): Promise<void> {\n try {\n await handleScriptFileImport(path, reUuid, validateScripts);\n } catch (error) {\n printMessage(`${path}: ${error.message}`, 'error');\n }\n }\n\n // We watch json files and script files.\n const watcher = chokidar.watch(\n [\n `${getWorkingDirectory()}/**/*.script.json`,\n `${getWorkingDirectory()}/**/*.script.js`,\n `${getWorkingDirectory()}/**/*.script.groovy`,\n ],\n {\n persistent: watch,\n }\n );\n\n watcher\n .on('add', onChange)\n .on('change', onChange)\n .on('error', (error) => {\n printMessage(`Watcher error: ${error}`, 'error');\n watcher.close();\n })\n .on('ready', () => {\n if (watch) {\n printMessage('Watching for changes...');\n } else {\n watcher.close();\n printMessage('Done.');\n }\n });\n}\n\n/**\n * Handle a script file import.\n *\n * @param file Either a script file or an extract file\n * @param reUuid whether or not to generate a new uuid for each script on import\n */\nasync function handleScriptFileImport(\n file: string,\n reUuid: boolean,\n validateScripts: boolean\n) {\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: start`);\n const scriptFile = getScriptFile(file);\n const script = getScriptExportByScriptFile(scriptFile);\n\n const imported = await importScripts('', script, reUuid, validateScripts);\n if (imported) {\n printMessage(`Imported '${scriptFile}'`);\n }\n debugMessage(`Cli.ScriptOps.handleScriptFileImport: end`);\n}\n\n/**\n * Get a script file from a file.\n *\n * @param file Either a script file or an extract file\n * @returns The script file\n */\nfunction getScriptFile(file: string) {\n if (file.endsWith('.script.json')) {\n return file;\n }\n return file.replace(/\\.script\\.(js|groovy)/, '.script.json');\n}\n\n/**\n * Get a script export from a script file.\n *\n * @param scriptFile The path to the script file\n * @returns The script export\n */\nfunction getScriptExportByScriptFile(\n scriptFile: string\n): ScriptExportInterface {\n const scriptExport = getScriptExport(scriptFile);\n const scriptSkeleton = getScriptSkeleton(scriptExport);\n\n const extractFile = getExtractFile(scriptSkeleton);\n if (!extractFile) {\n return scriptExport;\n }\n\n const scriptRaw = fs.readFileSync(extractFile, 'utf8');\n scriptSkeleton.script = scriptRaw.split('\\n');\n\n return scriptExport;\n}\n\n/**\n * Get an extract file from a script skeleton.\n *\n * @param scriptSkeleton The script skeleton\n * @returns The extract file or null if there is no extract file\n */\nfunction getExtractFile(scriptSkeleton: ScriptSkeleton): string | null {\n const extractFile = scriptSkeleton.script;\n if (Array.isArray(extractFile)) {\n return null;\n }\n if (\n extractFile.startsWith('file://') &&\n (extractFile.endsWith('.js') || extractFile.endsWith('.groovy'))\n ) {\n return extractFile.replace('file://', '');\n }\n return null;\n}\n\n/**\n * Get a script export from a file.\n *\n * @param file The path to a script export file\n * @returns The script export\n */\nfunction getScriptExport(file: string): ScriptExportInterface {\n const scriptExportRaw = fs.readFileSync(file, 'utf8');\n const scriptExport = JSON.parse(scriptExportRaw) as ScriptExportInterface;\n\n return scriptExport;\n}\n\n/**\n * Get the main script skeleton from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script Get the main script skeleton from a script export\n * @returns The main script skeleton\n */\nfunction getScriptSkeleton(script: ScriptExportInterface): ScriptSkeleton {\n const scriptId = getScriptId(script);\n return script.script[scriptId];\n}\n\n/**\n * Get the main script ID from a script export. If there is more than one\n * script, an error is thrown.\n *\n * @param script The script export\n * @returns The main script ID\n */\nfunction getScriptId(script: ScriptExportInterface): string {\n const scriptIds = Object.keys(script.script);\n if (scriptIds.length !== 1) {\n throw new Error(`Expected 1 script, found ${scriptIds.length}`);\n }\n return scriptIds[0];\n}\n\n/**\n * Delete script by id\n * @param {String} id script id\n */\nexport async function deleteScriptId(id) {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n undefined,\n `Deleting ${id}...`\n );\n try {\n await deleteScript(id);\n stopProgressIndicator(spinnerId, `Deleted ${id}.`, 'success');\n } catch (error) {\n stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete script by name\n * @param {String} name script name\n */\nexport async function deleteScriptName(name) {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n undefined,\n `Deleting ${name}...`\n );\n try {\n await deleteScriptByName(name);\n stopProgressIndicator(spinnerId, `Deleted ${name}.`, 'success');\n } catch (error) {\n stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');\n }\n}\n\n/**\n * Delete all non-default scripts\n */\nexport async function deleteAllScripts() {\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n undefined,\n `Deleting all non-default scripts...`\n );\n try {\n await deleteScripts();\n stopProgressIndicator(\n spinnerId,\n `Deleted all non-default scripts.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(spinnerId, `Error: ${error.message}`, 'fail');\n }\n}\n"],"mappings":"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"}
|
package/esm/ops/SecretsOps.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { frodo, state } from '@rockcarver/frodo-lib';
|
|
2
|
+
import { getFullExportConfig, isIdUsed } from '../utils/Config';
|
|
2
3
|
import { createKeyValueTable, createProgressIndicator, createTable, debugMessage, printMessage, stopProgressIndicator, updateProgressIndicator } from '../utils/Console';
|
|
3
|
-
import { getTypedFilename, saveJsonToFile, saveToFile, titleCase } from '../utils/ExportImportUtils';
|
|
4
4
|
import wordwrap from './utils/Wordwrap';
|
|
5
5
|
const {
|
|
6
6
|
resolveUserName
|
|
@@ -20,16 +20,21 @@ const {
|
|
|
20
20
|
deleteVersionOfSecret: _deleteVersionOfSecret
|
|
21
21
|
} = frodo.cloud.secret;
|
|
22
22
|
const {
|
|
23
|
-
getFilePath
|
|
23
|
+
getFilePath,
|
|
24
|
+
getTypedFilename,
|
|
25
|
+
saveJsonToFile,
|
|
26
|
+
saveToFile,
|
|
27
|
+
titleCase
|
|
24
28
|
} = frodo.utils;
|
|
25
29
|
|
|
26
30
|
/**
|
|
27
31
|
* List secrets
|
|
28
|
-
* @param {boolean} long Long version, all the fields
|
|
32
|
+
* @param {boolean} long Long version, all the fields besides usage
|
|
33
|
+
* @param {boolean} usage Display usage field
|
|
34
|
+
* @param {String | null} file Optional filename to determine usage
|
|
29
35
|
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
30
36
|
*/
|
|
31
|
-
export async function listSecrets(long) {
|
|
32
|
-
let outcome = false;
|
|
37
|
+
export async function listSecrets(long = false, usage = false, file = null) {
|
|
33
38
|
let spinnerId;
|
|
34
39
|
let secrets = [];
|
|
35
40
|
try {
|
|
@@ -40,39 +45,59 @@ export async function listSecrets(long) {
|
|
|
40
45
|
} catch (error) {
|
|
41
46
|
var _error$response;
|
|
42
47
|
stopProgressIndicator(spinnerId, `Error reading secrets: ${((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data) || error.message}`, 'fail');
|
|
48
|
+
return false;
|
|
43
49
|
}
|
|
44
|
-
if (long) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
if (!long && !usage) {
|
|
51
|
+
secrets.forEach(variable => {
|
|
52
|
+
printMessage(variable._id, 'data');
|
|
53
|
+
});
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
let fullExport = null;
|
|
57
|
+
const headers = long ? ['Id'['brightCyan'], {
|
|
58
|
+
hAlign: 'right',
|
|
59
|
+
content: 'Active\nVersion'['brightCyan']
|
|
60
|
+
}, {
|
|
61
|
+
hAlign: 'right',
|
|
62
|
+
content: 'Loaded\nVersion'['brightCyan']
|
|
63
|
+
}, 'Status'['brightCyan'], 'Description'['brightCyan'], 'Modifier'['brightCyan'], 'Modified (UTC)'['brightCyan']] : ['Id'['brightCyan']];
|
|
64
|
+
if (usage) {
|
|
65
|
+
try {
|
|
66
|
+
fullExport = await getFullExportConfig(file);
|
|
67
|
+
} catch (error) {
|
|
68
|
+
var _error$response2;
|
|
69
|
+
printMessage(`Error getting full export: ${((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data) || error.message}`, 'error');
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
//Delete secrets from full export so they aren't mistakenly used for determining usage
|
|
73
|
+
delete fullExport.secrets;
|
|
74
|
+
headers.push('Used'['brightCyan']);
|
|
75
|
+
}
|
|
76
|
+
const table = createTable(headers);
|
|
77
|
+
for (const secret of secrets) {
|
|
78
|
+
let lastChangedBy = secret.lastChangedBy;
|
|
79
|
+
if (long) {
|
|
54
80
|
try {
|
|
55
81
|
lastChangedBy = state.getUseBearerTokenForAmApis() ? secret.lastChangedBy : await resolveUserName('teammember', secret.lastChangedBy);
|
|
56
82
|
} catch (error) {
|
|
57
83
|
// ignore
|
|
58
84
|
}
|
|
59
|
-
table.push([secret._id, {
|
|
60
|
-
hAlign: 'right',
|
|
61
|
-
content: secret.activeVersion
|
|
62
|
-
}, {
|
|
63
|
-
hAlign: 'right',
|
|
64
|
-
content: secret.loadedVersion
|
|
65
|
-
}, secret.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'], wordwrap(secret.description, 40), lastChangedBy, new Date(secret.lastChangeDate).toUTCString()]);
|
|
66
85
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
86
|
+
const values = long ? [secret._id, {
|
|
87
|
+
hAlign: 'right',
|
|
88
|
+
content: secret.activeVersion
|
|
89
|
+
}, {
|
|
90
|
+
hAlign: 'right',
|
|
91
|
+
content: secret.loadedVersion
|
|
92
|
+
}, secret.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'], wordwrap(secret.description, 40), lastChangedBy, new Date(secret.lastChangeDate).toUTCString()] : [secret._id];
|
|
93
|
+
if (usage) {
|
|
94
|
+
const isEsvUsed = isIdUsed(fullExport, secret._id, true);
|
|
95
|
+
values.push(isEsvUsed.used ? `${'yes'['brightGreen']} (at ${isEsvUsed.location})` : 'no'['brightRed']);
|
|
96
|
+
}
|
|
97
|
+
table.push(values);
|
|
74
98
|
}
|
|
75
|
-
|
|
99
|
+
printMessage(table.toString(), 'data');
|
|
100
|
+
return true;
|
|
76
101
|
}
|
|
77
102
|
|
|
78
103
|
/**
|
|
@@ -147,8 +172,8 @@ export async function deleteSecrets() {
|
|
|
147
172
|
secrets.sort((a, b) => a._id.localeCompare(b._id));
|
|
148
173
|
stopProgressIndicator(spinnerId, `Successfully read ${secrets.length} secrets.`, 'success');
|
|
149
174
|
} catch (error) {
|
|
150
|
-
var _error$
|
|
151
|
-
stopProgressIndicator(spinnerId, `Error reading secrets: ${((_error$
|
|
175
|
+
var _error$response3;
|
|
176
|
+
stopProgressIndicator(spinnerId, `Error reading secrets: ${((_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data) || error.message}`, 'fail');
|
|
152
177
|
}
|
|
153
178
|
const indicatorId = createProgressIndicator('determinate', secrets.length, `Deleting secrets...`);
|
|
154
179
|
try {
|
|
@@ -182,8 +207,8 @@ export async function listSecretVersions(secretId) {
|
|
|
182
207
|
versions = await readVersionsOfSecret(secretId);
|
|
183
208
|
stopProgressIndicator(spinnerId, `Successfully read ${versions.length} secret versions.`, 'success');
|
|
184
209
|
} catch (error) {
|
|
185
|
-
var _error$
|
|
186
|
-
stopProgressIndicator(spinnerId, `Error reading secret versions: ${((_error$
|
|
210
|
+
var _error$response4;
|
|
211
|
+
stopProgressIndicator(spinnerId, `Error reading secret versions: ${((_error$response4 = error.response) === null || _error$response4 === void 0 ? void 0 : _error$response4.data) || error.message}`, 'fail');
|
|
187
212
|
}
|
|
188
213
|
const table = createTable([{
|
|
189
214
|
hAlign: 'right',
|
|
@@ -219,8 +244,8 @@ export async function describeSecret(secretId) {
|
|
|
219
244
|
secret = await readSecret(secretId);
|
|
220
245
|
stopProgressIndicator(spinnerId, `Successfully read secret ${secretId}.`, 'success');
|
|
221
246
|
} catch (error) {
|
|
222
|
-
var _error$
|
|
223
|
-
stopProgressIndicator(spinnerId, `Error reading secret ${secretId}: ${((_error$
|
|
247
|
+
var _error$response5;
|
|
248
|
+
stopProgressIndicator(spinnerId, `Error reading secret ${secretId}: ${((_error$response5 = error.response) === null || _error$response5 === void 0 ? void 0 : _error$response5.data) || error.message}`, 'fail');
|
|
224
249
|
}
|
|
225
250
|
const table = createKeyValueTable();
|
|
226
251
|
table.push(['Name'['brightCyan'], secret._id]);
|
|
@@ -250,9 +275,10 @@ export async function describeSecret(secretId) {
|
|
|
250
275
|
* Export a single secret to file
|
|
251
276
|
* @param {String} secretId Secret id
|
|
252
277
|
* @param {String} file Optional filename
|
|
278
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
253
279
|
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
254
280
|
*/
|
|
255
|
-
export async function exportSecretToFile(secretId, file) {
|
|
281
|
+
export async function exportSecretToFile(secretId, file, includeMeta) {
|
|
256
282
|
debugMessage(`Cli.SecretsOps.exportSecretToFile: start [secretId=${secretId}, file=${file}]`);
|
|
257
283
|
let outcome = false;
|
|
258
284
|
let fileName = file;
|
|
@@ -264,12 +290,12 @@ export async function exportSecretToFile(secretId, file) {
|
|
|
264
290
|
try {
|
|
265
291
|
spinnerId = createProgressIndicator('indeterminate', 0, `Exporting secret ${secretId}`);
|
|
266
292
|
const fileData = await exportSecret(secretId);
|
|
267
|
-
saveJsonToFile(fileData, filePath);
|
|
293
|
+
saveJsonToFile(fileData, filePath, includeMeta);
|
|
268
294
|
stopProgressIndicator(spinnerId, `Exported ${secretId['brightCyan']} to ${filePath['brightCyan']}.`, 'success');
|
|
269
295
|
outcome = true;
|
|
270
296
|
} catch (error) {
|
|
271
|
-
var _error$
|
|
272
|
-
stopProgressIndicator(spinnerId, `Error exporting secret: ${((_error$
|
|
297
|
+
var _error$response6;
|
|
298
|
+
stopProgressIndicator(spinnerId, `Error exporting secret: ${((_error$response6 = error.response) === null || _error$response6 === void 0 ? void 0 : _error$response6.data) || error.message}`, 'fail');
|
|
273
299
|
}
|
|
274
300
|
debugMessage(`Cli.SecretsOps.exportSecretToFile: end [outcome=${outcome}, secretId=${secretId}, file=${file}]`);
|
|
275
301
|
return outcome;
|
|
@@ -278,9 +304,10 @@ export async function exportSecretToFile(secretId, file) {
|
|
|
278
304
|
/**
|
|
279
305
|
* Export all secrets to single file
|
|
280
306
|
* @param {string} file Optional filename
|
|
307
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
281
308
|
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
282
309
|
*/
|
|
283
|
-
export async function exportSecretsToFile(file) {
|
|
310
|
+
export async function exportSecretsToFile(file, includeMeta) {
|
|
284
311
|
debugMessage(`Cli.SecretsOps.exportSecretsToFile: start [file=${file}]`);
|
|
285
312
|
let outcome = false;
|
|
286
313
|
let fileName = file;
|
|
@@ -289,12 +316,12 @@ export async function exportSecretsToFile(file) {
|
|
|
289
316
|
}
|
|
290
317
|
try {
|
|
291
318
|
const secretsExport = await exportSecrets();
|
|
292
|
-
saveJsonToFile(secretsExport, getFilePath(fileName, true));
|
|
319
|
+
saveJsonToFile(secretsExport, getFilePath(fileName, true), includeMeta);
|
|
293
320
|
outcome = true;
|
|
294
321
|
} catch (error) {
|
|
295
|
-
var _error$
|
|
322
|
+
var _error$response7;
|
|
296
323
|
printMessage(error.message, 'error');
|
|
297
|
-
printMessage(`exportSecretsToFile: ${(_error$
|
|
324
|
+
printMessage(`exportSecretsToFile: ${(_error$response7 = error.response) === null || _error$response7 === void 0 ? void 0 : _error$response7.status}`, 'error');
|
|
298
325
|
}
|
|
299
326
|
debugMessage(`Cli.SecretsOps.exportSecretsToFile: end [file=${file}]`);
|
|
300
327
|
return outcome;
|
|
@@ -302,9 +329,10 @@ export async function exportSecretsToFile(file) {
|
|
|
302
329
|
|
|
303
330
|
/**
|
|
304
331
|
* Export all secrets to individual files
|
|
332
|
+
* @param {boolean} includeMeta true to include metadata, false otherwise. Default: true
|
|
305
333
|
* @returns {Promise<boolean>} true if successful, false otherwise
|
|
306
334
|
*/
|
|
307
|
-
export async function exportSecretsToFiles() {
|
|
335
|
+
export async function exportSecretsToFiles(includeMeta) {
|
|
308
336
|
let outcome = false;
|
|
309
337
|
let secrets = [];
|
|
310
338
|
const spinnerId = createProgressIndicator('indeterminate', 0, `Reading secrets...`);
|
|
@@ -313,14 +341,14 @@ export async function exportSecretsToFiles() {
|
|
|
313
341
|
secrets.sort((a, b) => a._id.localeCompare(b._id));
|
|
314
342
|
stopProgressIndicator(spinnerId, `Successfully read ${secrets.length} secrets.`, 'success');
|
|
315
343
|
} catch (error) {
|
|
316
|
-
var _error$
|
|
317
|
-
stopProgressIndicator(spinnerId, `Error reading secrets: ${((_error$
|
|
344
|
+
var _error$response8;
|
|
345
|
+
stopProgressIndicator(spinnerId, `Error reading secrets: ${((_error$response8 = error.response) === null || _error$response8 === void 0 ? void 0 : _error$response8.data) || error.message}`, 'fail');
|
|
318
346
|
}
|
|
319
347
|
const indicatorId = createProgressIndicator('determinate', secrets.length, 'Exporting secrets');
|
|
320
348
|
for (const secret of secrets) {
|
|
321
349
|
updateProgressIndicator(indicatorId, `Writing secret ${secret._id}`);
|
|
322
350
|
const fileName = getTypedFilename(secret._id, 'secret');
|
|
323
|
-
saveToFile('secret', secret, '_id', getFilePath(fileName, true));
|
|
351
|
+
saveToFile('secret', secret, '_id', getFilePath(fileName, true), includeMeta);
|
|
324
352
|
}
|
|
325
353
|
stopProgressIndicator(indicatorId, `${secrets.length} secrets exported.`);
|
|
326
354
|
outcome = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecretsOps.js","names":["frodo","state","createKeyValueTable","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","getTypedFilename","saveJsonToFile","saveToFile","titleCase","wordwrap","resolveUserName","idm","managed","readSecrets","createSecret","_createSecret","readVersionsOfSecret","readSecret","exportSecret","exportSecrets","enableVersionOfSecret","disableVersionOfSecret","createVersionOfSecret","_createVersionOfSecret","updateSecretDescription","deleteSecret","_deleteSecret","deleteVersionOfSecret","_deleteVersionOfSecret","cloud","secret","getFilePath","utils","listSecrets","long","outcome","spinnerId","secrets","sort","a","b","_id","localeCompare","length","error","_error$response","response","data","message","table","hAlign","content","lastChangedBy","getUseBearerTokenForAmApis","push","activeVersion","loadedVersion","loaded","description","Date","lastChangeDate","toUTCString","toString","forEach","id","value","encoding","useInPlaceholders","code","setSecretDescription","secretId","deleteSecrets","_error$response2","indicatorId","listSecretVersions","versions","_error$response3","statusMap","ENABLED","DISABLED","DESTROYED","version","status","createDate","toLocaleString","describeSecret","_error$response4","exportSecretToFile","file","fileName","filePath","fileData","_error$response5","exportSecretsToFile","getRealm","secretsExport","_error$response6","exportSecretsToFiles","_error$response7","activateVersionOfSecret","deactivateVersionOfSecret"],"sources":["../../src/ops/SecretsOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n SecretEncodingType,\n SecretSkeleton,\n VersionOfSecretSkeleton,\n} from '@rockcarver/frodo-lib/types/api/cloud/SecretsApi';\n\nimport {\n createKeyValueTable,\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n saveToFile,\n titleCase,\n} from '../utils/ExportImportUtils';\nimport wordwrap from './utils/Wordwrap';\n\nconst { resolveUserName } = frodo.idm.managed;\nconst {\n readSecrets,\n createSecret: _createSecret,\n readVersionsOfSecret,\n readSecret,\n exportSecret,\n exportSecrets,\n enableVersionOfSecret,\n disableVersionOfSecret,\n createVersionOfSecret: _createVersionOfSecret,\n updateSecretDescription,\n deleteSecret: _deleteSecret,\n deleteVersionOfSecret: _deleteVersionOfSecret,\n} = frodo.cloud.secret;\n\nconst { getFilePath } = frodo.utils;\n\n/**\n * List secrets\n * @param {boolean} long Long version, all the fields\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listSecrets(long: boolean): Promise<boolean> {\n let outcome = false;\n let spinnerId: string;\n let secrets: SecretSkeleton[] = [];\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secrets...`\n );\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${secrets.length} secrets.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secrets: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n if (long) {\n const table = createTable([\n 'Id'['brightCyan'],\n { hAlign: 'right', content: 'Active\\nVersion'['brightCyan'] },\n { hAlign: 'right', content: 'Loaded\\nVersion'['brightCyan'] },\n 'Status'['brightCyan'],\n 'Description'['brightCyan'],\n 'Modifier'['brightCyan'],\n 'Modified (UTC)'['brightCyan'],\n ]);\n for (const secret of secrets) {\n let lastChangedBy = secret.lastChangedBy;\n try {\n lastChangedBy = state.getUseBearerTokenForAmApis()\n ? secret.lastChangedBy\n : await resolveUserName('teammember', secret.lastChangedBy);\n } catch (error) {\n // ignore\n }\n table.push([\n secret._id,\n { hAlign: 'right', content: secret.activeVersion },\n { hAlign: 'right', content: secret.loadedVersion },\n secret.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n wordwrap(secret.description, 40),\n lastChangedBy,\n new Date(secret.lastChangeDate).toUTCString(),\n ]);\n }\n printMessage(table.toString(), 'data');\n outcome = true;\n } else {\n secrets.forEach((secret) => {\n printMessage(secret._id, 'data');\n });\n outcome = true;\n }\n return outcome;\n}\n\n/**\n * Create secret\n * @param {string} id secret id\n * @param {string} value secret value\n * @param {string} description secret description\n * @param {SecretEncodingType} encoding secret encoding\n * @param {boolean} useInPlaceholders use secret in placeholders\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function createSecret(\n id: string,\n value: string,\n description: string,\n encoding: SecretEncodingType,\n useInPlaceholders: boolean\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Creating secret ${id}...`\n );\n try {\n await _createSecret(id, value, description, encoding, useInPlaceholders);\n stopProgressIndicator(spinnerId, `Created secret ${id}`, 'success');\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n error.response\n ? `Error: ${error.response.data.code} - ${error.response.data.message}`\n : error,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Set description of secret\n * @param {string} secretId secret id\n * @param {string} description secret description\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function setSecretDescription(\n secretId: string,\n description: string\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Setting description of secret ${secretId}...`\n );\n try {\n await updateSecretDescription(secretId, description);\n stopProgressIndicator(\n spinnerId,\n `Set description of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete a secret\n * @param {string} secretId secret id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteSecret(secretId: string): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Deleting secret ${secretId}...`\n );\n try {\n await _deleteSecret(secretId);\n stopProgressIndicator(spinnerId, `Deleted secret ${secretId}`, 'success');\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete all secrets\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteSecrets(): Promise<boolean> {\n let outcome = false;\n let secrets: SecretSkeleton[] = [];\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secrets...`\n );\n try {\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${secrets.length} secrets.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secrets: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n const indicatorId = createProgressIndicator(\n 'determinate',\n secrets.length,\n `Deleting secrets...`\n );\n try {\n for (const secret of secrets) {\n try {\n await _deleteSecret(secret._id);\n updateProgressIndicator(indicatorId, `Deleted secret ${secret._id}`);\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n }\n stopProgressIndicator(indicatorId, `Secrets deleted.`);\n outcome = true;\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n return outcome;\n}\n\n/**\n * List all the versions of the secret\n * @param {String} secretId secret id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listSecretVersions(secretId): Promise<boolean> {\n let outcome = false;\n let spinnerId: string;\n let versions: VersionOfSecretSkeleton[] = [];\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secret versions...`\n );\n versions = await readVersionsOfSecret(secretId);\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${versions.length} secret versions.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secret versions: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n const table = createTable([\n { hAlign: 'right', content: 'Version'['brightCyan'] },\n 'Status'['brightCyan'],\n 'Loaded'['brightCyan'],\n 'Created'['brightCyan'],\n ]);\n const statusMap = {\n ENABLED: 'active'['brightGreen'],\n DISABLED: 'inactive'['brightRed'],\n DESTROYED: 'deleted'['brightRed'],\n };\n for (const version of versions) {\n table.push([\n { hAlign: 'right', content: version.version },\n statusMap[version.status],\n version.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n new Date(version.createDate).toLocaleString(),\n ]);\n }\n printMessage(table.toString(), 'data');\n outcome = true;\n return outcome;\n}\n\n/**\n * Describe a secret\n * @param {string} secretId Secret id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeSecret(secretId: string): Promise<boolean> {\n let outcome = false;\n let spinnerId: string;\n let secret: SecretSkeleton = null;\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secret ${secretId}...`\n );\n secret = await readSecret(secretId);\n stopProgressIndicator(\n spinnerId,\n `Successfully read secret ${secretId}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secret ${secretId}: ${\n error.response?.data || error.message\n }`,\n 'fail'\n );\n }\n const table = createKeyValueTable();\n table.push(['Name'['brightCyan'], secret._id]);\n table.push(['Active Version'['brightCyan'], secret.activeVersion]);\n table.push(['Loaded Version'['brightCyan'], secret.loadedVersion]);\n table.push([\n 'Status'['brightCyan'],\n secret.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n ]);\n table.push(['Description'['brightCyan'], wordwrap(secret.description, 60)]);\n table.push([\n 'Modified'['brightCyan'],\n new Date(secret.lastChangeDate).toLocaleString(),\n ]);\n let lastChangedBy = secret.lastChangedBy;\n try {\n lastChangedBy = state.getUseBearerTokenForAmApis()\n ? secret.lastChangedBy\n : await resolveUserName('teammember', secret.lastChangedBy);\n } catch (error) {\n // ignore\n }\n table.push(['Modifier'['brightCyan'], lastChangedBy]);\n table.push(['Modifier UUID'['brightCyan'], secret.lastChangedBy]);\n table.push(['Encoding'['brightCyan'], secret.encoding]);\n table.push(['Use In Placeholders'['brightCyan'], secret.useInPlaceholders]);\n printMessage(table.toString(), 'data');\n printMessage('\\nSecret Versions:', 'data');\n await listSecretVersions(secretId);\n outcome = true;\n return outcome;\n}\n\n/**\n * Export a single secret to file\n * @param {String} secretId Secret id\n * @param {String} file Optional filename\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportSecretToFile(\n secretId: string,\n file: string | null\n): Promise<boolean> {\n debugMessage(\n `Cli.SecretsOps.exportSecretToFile: start [secretId=${secretId}, file=${file}]`\n );\n let outcome = false;\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(secretId, 'secret');\n }\n const filePath = getFilePath(fileName, true);\n let spinnerId: string;\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Exporting secret ${secretId}`\n );\n const fileData = await exportSecret(secretId);\n saveJsonToFile(fileData, filePath);\n stopProgressIndicator(\n spinnerId,\n `Exported ${secretId['brightCyan']} to ${filePath['brightCyan']}.`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error exporting secret: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n debugMessage(\n `Cli.SecretsOps.exportSecretToFile: end [outcome=${outcome}, secretId=${secretId}, file=${file}]`\n );\n return outcome;\n}\n\n/**\n * Export all secrets to single file\n * @param {string} file Optional filename\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportSecretsToFile(file: string): Promise<boolean> {\n debugMessage(`Cli.SecretsOps.exportSecretsToFile: start [file=${file}]`);\n let outcome = false;\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Secrets`,\n 'secret'\n );\n }\n try {\n const secretsExport = await exportSecrets();\n saveJsonToFile(secretsExport, getFilePath(fileName, true));\n outcome = true;\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(`exportSecretsToFile: ${error.response?.status}`, 'error');\n }\n debugMessage(`Cli.SecretsOps.exportSecretsToFile: end [file=${file}]`);\n return outcome;\n}\n\n/**\n * Export all secrets to individual files\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportSecretsToFiles(): Promise<boolean> {\n let outcome = false;\n let secrets: SecretSkeleton[] = [];\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secrets...`\n );\n try {\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${secrets.length} secrets.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secrets: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n const indicatorId = createProgressIndicator(\n 'determinate',\n secrets.length,\n 'Exporting secrets'\n );\n for (const secret of secrets) {\n updateProgressIndicator(indicatorId, `Writing secret ${secret._id}`);\n const fileName = getTypedFilename(secret._id, 'secret');\n saveToFile('secret', secret, '_id', getFilePath(fileName, true));\n }\n stopProgressIndicator(indicatorId, `${secrets.length} secrets exported.`);\n outcome = true;\n return outcome;\n}\n\n/**\n * Create new version of secret\n * @param {string} secretId secret id\n * @param {string} value secret value\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function createVersionOfSecret(\n secretId: string,\n value: string\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Creating new version of secret ${secretId}...`\n );\n try {\n const version = await _createVersionOfSecret(secretId, value);\n stopProgressIndicator(\n spinnerId,\n `Created version ${version.version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Activate a version of a secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function activateVersionOfSecret(\n secretId,\n version\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Activating version ${version} of secret ${secretId}...`\n );\n try {\n await enableVersionOfSecret(secretId, version);\n stopProgressIndicator(\n spinnerId,\n `Activated version ${version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Deactivate a version of a secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deactivateVersionOfSecret(\n secretId,\n version\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Deactivating version ${version} of secret ${secretId}...`\n );\n try {\n await disableVersionOfSecret(secretId, version);\n stopProgressIndicator(\n spinnerId,\n `Deactivated version ${version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete version of secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteVersionOfSecret(\n secretId,\n version\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Deleting version ${version} of secret ${secretId}...`\n );\n try {\n await _deleteVersionOfSecret(secretId, version);\n stopProgressIndicator(\n spinnerId,\n `Deleted version ${version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SecretsOps.js","names":["frodo","state","getFullExportConfig","isIdUsed","createKeyValueTable","createProgressIndicator","createTable","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","wordwrap","resolveUserName","idm","managed","readSecrets","createSecret","_createSecret","readVersionsOfSecret","readSecret","exportSecret","exportSecrets","enableVersionOfSecret","disableVersionOfSecret","createVersionOfSecret","_createVersionOfSecret","updateSecretDescription","deleteSecret","_deleteSecret","deleteVersionOfSecret","_deleteVersionOfSecret","cloud","secret","getFilePath","getTypedFilename","saveJsonToFile","saveToFile","titleCase","utils","listSecrets","long","usage","file","spinnerId","secrets","sort","a","b","_id","localeCompare","length","error","_error$response","response","data","message","forEach","variable","fullExport","headers","hAlign","content","_error$response2","push","table","lastChangedBy","getUseBearerTokenForAmApis","values","activeVersion","loadedVersion","loaded","description","Date","lastChangeDate","toUTCString","isEsvUsed","used","location","toString","id","value","encoding","useInPlaceholders","outcome","code","setSecretDescription","secretId","deleteSecrets","_error$response3","indicatorId","listSecretVersions","versions","_error$response4","statusMap","ENABLED","DISABLED","DESTROYED","version","status","createDate","toLocaleString","describeSecret","_error$response5","exportSecretToFile","includeMeta","fileName","filePath","fileData","_error$response6","exportSecretsToFile","getRealm","secretsExport","_error$response7","exportSecretsToFiles","_error$response8","activateVersionOfSecret","deactivateVersionOfSecret"],"sources":["../../src/ops/SecretsOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport {\n SecretEncodingType,\n SecretSkeleton,\n VersionOfSecretSkeleton,\n} from '@rockcarver/frodo-lib/types/api/cloud/SecretsApi';\n\nimport { getFullExportConfig, isIdUsed } from '../utils/Config';\nimport {\n createKeyValueTable,\n createProgressIndicator,\n createTable,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n} from '../utils/Console';\nimport wordwrap from './utils/Wordwrap';\n\nconst { resolveUserName } = frodo.idm.managed;\nconst {\n readSecrets,\n createSecret: _createSecret,\n readVersionsOfSecret,\n readSecret,\n exportSecret,\n exportSecrets,\n enableVersionOfSecret,\n disableVersionOfSecret,\n createVersionOfSecret: _createVersionOfSecret,\n updateSecretDescription,\n deleteSecret: _deleteSecret,\n deleteVersionOfSecret: _deleteVersionOfSecret,\n} = frodo.cloud.secret;\n\nconst { getFilePath, getTypedFilename, saveJsonToFile, saveToFile, titleCase } =\n frodo.utils;\n\n/**\n * List secrets\n * @param {boolean} long Long version, all the fields besides usage\n * @param {boolean} usage Display usage field\n * @param {String | null} file Optional filename to determine usage\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listSecrets(\n long: boolean = false,\n usage: boolean = false,\n file: string | null = null\n): Promise<boolean> {\n let spinnerId: string;\n let secrets: SecretSkeleton[] = [];\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secrets...`\n );\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${secrets.length} secrets.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secrets: ${error.response?.data || error.message}`,\n 'fail'\n );\n return false;\n }\n if (!long && !usage) {\n secrets.forEach((variable) => {\n printMessage(variable._id, 'data');\n });\n return true;\n }\n let fullExport = null;\n const headers = long\n ? [\n 'Id'['brightCyan'],\n { hAlign: 'right', content: 'Active\\nVersion'['brightCyan'] },\n { hAlign: 'right', content: 'Loaded\\nVersion'['brightCyan'] },\n 'Status'['brightCyan'],\n 'Description'['brightCyan'],\n 'Modifier'['brightCyan'],\n 'Modified (UTC)'['brightCyan'],\n ]\n : ['Id'['brightCyan']];\n if (usage) {\n try {\n fullExport = await getFullExportConfig(file);\n } catch (error) {\n printMessage(\n `Error getting full export: ${error.response?.data || error.message}`,\n 'error'\n );\n return false;\n }\n //Delete secrets from full export so they aren't mistakenly used for determining usage\n delete fullExport.secrets;\n headers.push('Used'['brightCyan']);\n }\n const table = createTable(headers);\n for (const secret of secrets) {\n let lastChangedBy = secret.lastChangedBy;\n if (long) {\n try {\n lastChangedBy = state.getUseBearerTokenForAmApis()\n ? secret.lastChangedBy\n : await resolveUserName('teammember', secret.lastChangedBy);\n } catch (error) {\n // ignore\n }\n }\n const values = long\n ? [\n secret._id,\n { hAlign: 'right', content: secret.activeVersion },\n { hAlign: 'right', content: secret.loadedVersion },\n secret.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n wordwrap(secret.description, 40),\n lastChangedBy,\n new Date(secret.lastChangeDate).toUTCString(),\n ]\n : [secret._id];\n if (usage) {\n const isEsvUsed = isIdUsed(fullExport, secret._id, true);\n values.push(\n isEsvUsed.used\n ? `${'yes'['brightGreen']} (at ${isEsvUsed.location})`\n : 'no'['brightRed']\n );\n }\n table.push(values);\n }\n printMessage(table.toString(), 'data');\n return true;\n}\n\n/**\n * Create secret\n * @param {string} id secret id\n * @param {string} value secret value\n * @param {string} description secret description\n * @param {SecretEncodingType} encoding secret encoding\n * @param {boolean} useInPlaceholders use secret in placeholders\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function createSecret(\n id: string,\n value: string,\n description: string,\n encoding: SecretEncodingType,\n useInPlaceholders: boolean\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Creating secret ${id}...`\n );\n try {\n await _createSecret(id, value, description, encoding, useInPlaceholders);\n stopProgressIndicator(spinnerId, `Created secret ${id}`, 'success');\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n error.response\n ? `Error: ${error.response.data.code} - ${error.response.data.message}`\n : error,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Set description of secret\n * @param {string} secretId secret id\n * @param {string} description secret description\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function setSecretDescription(\n secretId: string,\n description: string\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Setting description of secret ${secretId}...`\n );\n try {\n await updateSecretDescription(secretId, description);\n stopProgressIndicator(\n spinnerId,\n `Set description of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete a secret\n * @param {string} secretId secret id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteSecret(secretId: string): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Deleting secret ${secretId}...`\n );\n try {\n await _deleteSecret(secretId);\n stopProgressIndicator(spinnerId, `Deleted secret ${secretId}`, 'success');\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete all secrets\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteSecrets(): Promise<boolean> {\n let outcome = false;\n let secrets: SecretSkeleton[] = [];\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secrets...`\n );\n try {\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${secrets.length} secrets.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secrets: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n const indicatorId = createProgressIndicator(\n 'determinate',\n secrets.length,\n `Deleting secrets...`\n );\n try {\n for (const secret of secrets) {\n try {\n await _deleteSecret(secret._id);\n updateProgressIndicator(indicatorId, `Deleted secret ${secret._id}`);\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n }\n stopProgressIndicator(indicatorId, `Secrets deleted.`);\n outcome = true;\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n return outcome;\n}\n\n/**\n * List all the versions of the secret\n * @param {String} secretId secret id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function listSecretVersions(secretId): Promise<boolean> {\n let outcome = false;\n let spinnerId: string;\n let versions: VersionOfSecretSkeleton[] = [];\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secret versions...`\n );\n versions = await readVersionsOfSecret(secretId);\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${versions.length} secret versions.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secret versions: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n const table = createTable([\n { hAlign: 'right', content: 'Version'['brightCyan'] },\n 'Status'['brightCyan'],\n 'Loaded'['brightCyan'],\n 'Created'['brightCyan'],\n ]);\n const statusMap = {\n ENABLED: 'active'['brightGreen'],\n DISABLED: 'inactive'['brightRed'],\n DESTROYED: 'deleted'['brightRed'],\n };\n for (const version of versions) {\n table.push([\n { hAlign: 'right', content: version.version },\n statusMap[version.status],\n version.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n new Date(version.createDate).toLocaleString(),\n ]);\n }\n printMessage(table.toString(), 'data');\n outcome = true;\n return outcome;\n}\n\n/**\n * Describe a secret\n * @param {string} secretId Secret id\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function describeSecret(secretId: string): Promise<boolean> {\n let outcome = false;\n let spinnerId: string;\n let secret: SecretSkeleton = null;\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secret ${secretId}...`\n );\n secret = await readSecret(secretId);\n stopProgressIndicator(\n spinnerId,\n `Successfully read secret ${secretId}.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secret ${secretId}: ${\n error.response?.data || error.message\n }`,\n 'fail'\n );\n }\n const table = createKeyValueTable();\n table.push(['Name'['brightCyan'], secret._id]);\n table.push(['Active Version'['brightCyan'], secret.activeVersion]);\n table.push(['Loaded Version'['brightCyan'], secret.loadedVersion]);\n table.push([\n 'Status'['brightCyan'],\n secret.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n ]);\n table.push(['Description'['brightCyan'], wordwrap(secret.description, 60)]);\n table.push([\n 'Modified'['brightCyan'],\n new Date(secret.lastChangeDate).toLocaleString(),\n ]);\n let lastChangedBy = secret.lastChangedBy;\n try {\n lastChangedBy = state.getUseBearerTokenForAmApis()\n ? secret.lastChangedBy\n : await resolveUserName('teammember', secret.lastChangedBy);\n } catch (error) {\n // ignore\n }\n table.push(['Modifier'['brightCyan'], lastChangedBy]);\n table.push(['Modifier UUID'['brightCyan'], secret.lastChangedBy]);\n table.push(['Encoding'['brightCyan'], secret.encoding]);\n table.push(['Use In Placeholders'['brightCyan'], secret.useInPlaceholders]);\n printMessage(table.toString(), 'data');\n printMessage('\\nSecret Versions:', 'data');\n await listSecretVersions(secretId);\n outcome = true;\n return outcome;\n}\n\n/**\n * Export a single secret to file\n * @param {String} secretId Secret id\n * @param {String} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportSecretToFile(\n secretId: string,\n file: string | null,\n includeMeta: boolean\n): Promise<boolean> {\n debugMessage(\n `Cli.SecretsOps.exportSecretToFile: start [secretId=${secretId}, file=${file}]`\n );\n let outcome = false;\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(secretId, 'secret');\n }\n const filePath = getFilePath(fileName, true);\n let spinnerId: string;\n try {\n spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Exporting secret ${secretId}`\n );\n const fileData = await exportSecret(secretId);\n saveJsonToFile(fileData, filePath, includeMeta);\n stopProgressIndicator(\n spinnerId,\n `Exported ${secretId['brightCyan']} to ${filePath['brightCyan']}.`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error exporting secret: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n debugMessage(\n `Cli.SecretsOps.exportSecretToFile: end [outcome=${outcome}, secretId=${secretId}, file=${file}]`\n );\n return outcome;\n}\n\n/**\n * Export all secrets to single file\n * @param {string} file Optional filename\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportSecretsToFile(\n file: string,\n includeMeta: boolean\n): Promise<boolean> {\n debugMessage(`Cli.SecretsOps.exportSecretsToFile: start [file=${file}]`);\n let outcome = false;\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Secrets`,\n 'secret'\n );\n }\n try {\n const secretsExport = await exportSecrets();\n saveJsonToFile(secretsExport, getFilePath(fileName, true), includeMeta);\n outcome = true;\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(`exportSecretsToFile: ${error.response?.status}`, 'error');\n }\n debugMessage(`Cli.SecretsOps.exportSecretsToFile: end [file=${file}]`);\n return outcome;\n}\n\n/**\n * Export all secrets to individual files\n * @param {boolean} includeMeta true to include metadata, false otherwise. Default: true\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function exportSecretsToFiles(\n includeMeta: boolean\n): Promise<boolean> {\n let outcome = false;\n let secrets: SecretSkeleton[] = [];\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Reading secrets...`\n );\n try {\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n stopProgressIndicator(\n spinnerId,\n `Successfully read ${secrets.length} secrets.`,\n 'success'\n );\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error reading secrets: ${error.response?.data || error.message}`,\n 'fail'\n );\n }\n const indicatorId = createProgressIndicator(\n 'determinate',\n secrets.length,\n 'Exporting secrets'\n );\n for (const secret of secrets) {\n updateProgressIndicator(indicatorId, `Writing secret ${secret._id}`);\n const fileName = getTypedFilename(secret._id, 'secret');\n saveToFile(\n 'secret',\n secret,\n '_id',\n getFilePath(fileName, true),\n includeMeta\n );\n }\n stopProgressIndicator(indicatorId, `${secrets.length} secrets exported.`);\n outcome = true;\n return outcome;\n}\n\n/**\n * Create new version of secret\n * @param {string} secretId secret id\n * @param {string} value secret value\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function createVersionOfSecret(\n secretId: string,\n value: string\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Creating new version of secret ${secretId}...`\n );\n try {\n const version = await _createVersionOfSecret(secretId, value);\n stopProgressIndicator(\n spinnerId,\n `Created version ${version.version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Activate a version of a secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function activateVersionOfSecret(\n secretId,\n version\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Activating version ${version} of secret ${secretId}...`\n );\n try {\n await enableVersionOfSecret(secretId, version);\n stopProgressIndicator(\n spinnerId,\n `Activated version ${version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Deactivate a version of a secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deactivateVersionOfSecret(\n secretId,\n version\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Deactivating version ${version} of secret ${secretId}...`\n );\n try {\n await disableVersionOfSecret(secretId, version);\n stopProgressIndicator(\n spinnerId,\n `Deactivated version ${version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n\n/**\n * Delete version of secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n * @returns {Promise<boolean>} true if successful, false otherwise\n */\nexport async function deleteVersionOfSecret(\n secretId,\n version\n): Promise<boolean> {\n let outcome = false;\n const spinnerId = createProgressIndicator(\n 'indeterminate',\n 0,\n `Deleting version ${version} of secret ${secretId}...`\n );\n try {\n await _deleteVersionOfSecret(secretId, version);\n stopProgressIndicator(\n spinnerId,\n `Deleted version ${version} of secret ${secretId}`,\n 'success'\n );\n outcome = true;\n } catch (error) {\n stopProgressIndicator(\n spinnerId,\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'fail'\n );\n }\n return outcome;\n}\n"],"mappings":"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"}
|