@rockcarver/frodo-cli 2.0.0-26 → 2.0.0-28

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 CHANGED
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.0.0-27] - 2023-10-22
11
+
12
+ ## [2.0.0-26] - 2023-10-19
13
+
10
14
  ## [2.0.0-25] - 2023-10-19
11
15
 
12
16
  ## [2.0.0-24] - 2023-10-15
@@ -1365,7 +1369,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1365
1369
  - Fixed problem with adding connection profiles
1366
1370
  - Miscellaneous bug fixes
1367
1371
 
1368
- [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-25...HEAD
1372
+ [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-27...HEAD
1373
+
1374
+ [2.0.0-27]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-26...v2.0.0-27
1375
+
1376
+ [2.0.0-26]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-25...v2.0.0-26
1369
1377
 
1370
1378
  [2.0.0-25]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-24...v2.0.0-25
1371
1379
 
@@ -1,5 +1,7 @@
1
- import { frodo } from '@rockcarver/frodo-lib';
1
+ import { frodo, state } from '@rockcarver/frodo-lib';
2
2
  import { Option } from 'commander';
3
+ import { exportSecretsToFile, exportSecretsToFiles, exportSecretToFile } from '../../ops/SecretsOps';
4
+ import { printMessage, verboseMessage } from '../../utils/Console';
3
5
  import { FrodoCommand } from '../FrodoCommand';
4
6
  const {
5
7
  getTokens
@@ -9,9 +11,18 @@ program.description('Export secrets.').addOption(new Option('-i, --secret-id <se
9
11
  // implement command logic inside action handler
10
12
  async (host, realm, user, password, options, command) => {
11
13
  command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
12
- if (await getTokens()) {
13
- // code goes here
14
+ if (options.secretId && (await getTokens())) {
15
+ verboseMessage(`Exporting secret "${options.secretId}" from realm "${state.getRealm()}"...`);
16
+ await exportSecretToFile(options.secretId, options.file);
17
+ } else if (options.all && (await getTokens())) {
18
+ verboseMessage('Exporting all secrets to a single file...');
19
+ await exportSecretsToFile(options.file);
20
+ } else if (options.allSeparate && (await getTokens())) {
21
+ verboseMessage('Exporting all secrets to separate files...');
22
+ await exportSecretsToFiles();
14
23
  } else {
24
+ printMessage('Unrecognized combination of options or no options...', 'error');
25
+ program.help();
15
26
  process.exitCode = 1;
16
27
  }
17
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"esv-secret-export.js","names":["frodo","Option","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","process","exitCode","parse"],"sources":["../../../src/cli/esv/esv-secret-export.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo esv secret export');\n\nprogram\n .description('Export secrets.')\n .addOption(\n new Option(\n '-i, --secret-id <secret-id>',\n 'Secret id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Export all secrets to a single file. Ignored with -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all sub1s to separate files (*.secret.json) in the current directory. Ignored with -i or -a.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n // code goes here\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGH,KAAK,CAACI,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,yBAAyB,CAAC;AAE3DG,OAAO,CACJC,WAAW,CAAC,iBAAiB,CAAC,CAC9BC,SAAS,CACR,IAAIN,MAAM,CACR,6BAA6B,EAC7B,iDACF,CACF,CAAC,CACAM,SAAS,CAAC,IAAIN,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAAC,CACtEM,SAAS,CACR,IAAIN,MAAM,CACR,WAAW,EACX,uDACF,CACF,CAAC,CACAM,SAAS,CACR,IAAIN,MAAM,CACR,oBAAoB,EACpB,qGACF,CACF,CAAC,CACAO,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMX,SAAS,CAAC,CAAC,EAAE;IACrB;EAAA,CACD,MAAM;IACLa,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHZ,OAAO,CAACa,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"esv-secret-export.js","names":["frodo","state","Option","exportSecretsToFile","exportSecretsToFiles","exportSecretToFile","printMessage","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","secretId","getRealm","file","all","allSeparate","help","process","exitCode","parse"],"sources":["../../../src/cli/esv/esv-secret-export.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n exportSecretsToFile,\n exportSecretsToFiles,\n exportSecretToFile,\n} from '../../ops/SecretsOps';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo esv secret export');\n\nprogram\n .description('Export secrets.')\n .addOption(\n new Option(\n '-i, --secret-id <secret-id>',\n 'Secret id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Export all secrets to a single file. Ignored with -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all sub1s to separate files (*.secret.json) in the current directory. Ignored with -i or -a.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (options.secretId && (await getTokens())) {\n verboseMessage(\n `Exporting secret \"${\n options.secretId\n }\" from realm \"${state.getRealm()}\"...`\n );\n await exportSecretToFile(options.secretId, options.file);\n } else if (options.all && (await getTokens())) {\n verboseMessage('Exporting all secrets to a single file...');\n await exportSecretsToFile(options.file);\n } else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Exporting all secrets to separate files...');\n await exportSecretsToFiles();\n } else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SACEC,mBAAmB,EACnBC,oBAAoB,EACpBC,kBAAkB,QACb,sBAAsB;AAC7B,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGT,KAAK,CAACU,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,yBAAyB,CAAC;AAE3DG,OAAO,CACJC,WAAW,CAAC,iBAAiB,CAAC,CAC9BC,SAAS,CACR,IAAIX,MAAM,CACR,6BAA6B,EAC7B,iDACF,CACF,CAAC,CACAW,SAAS,CAAC,IAAIX,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAAC,CACtEW,SAAS,CACR,IAAIX,MAAM,CACR,WAAW,EACX,uDACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,oBAAoB,EACpB,qGACF,CACF,CAAC,CACAY,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAID,OAAO,CAACG,QAAQ,KAAK,MAAMb,SAAS,CAAC,CAAC,CAAC,EAAE;IAC3CF,cAAc,CACX,qBACCY,OAAO,CAACG,QACT,iBAAgBrB,KAAK,CAACsB,QAAQ,CAAC,CAAE,MACpC,CAAC;IACD,MAAMlB,kBAAkB,CAACc,OAAO,CAACG,QAAQ,EAAEH,OAAO,CAACK,IAAI,CAAC;EAC1D,CAAC,MAAM,IAAIL,OAAO,CAACM,GAAG,KAAK,MAAMhB,SAAS,CAAC,CAAC,CAAC,EAAE;IAC7CF,cAAc,CAAC,2CAA2C,CAAC;IAC3D,MAAMJ,mBAAmB,CAACgB,OAAO,CAACK,IAAI,CAAC;EACzC,CAAC,MAAM,IAAIL,OAAO,CAACO,WAAW,KAAK,MAAMjB,SAAS,CAAC,CAAC,CAAC,EAAE;IACrDF,cAAc,CAAC,4CAA4C,CAAC;IAC5D,MAAMH,oBAAoB,CAAC,CAAC;EAC9B,CAAC,MAAM;IACLE,YAAY,CACV,sDAAsD,EACtD,OACF,CAAC;IACDK,OAAO,CAACgB,IAAI,CAAC,CAAC;IACdC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHlB,OAAO,CAACmB,KAAK,CAAC,CAAC"}
@@ -4,8 +4,7 @@ program.description('Manages secrets.');
4
4
  program.command('create', 'Create secrets.');
5
5
  program.command('delete', 'Delete secrets.');
6
6
  program.command('describe', 'Describe secret.');
7
-
8
- // program.command('export', 'Export secrets.');
7
+ program.command('export', 'Export secrets.');
9
8
 
10
9
  // program.command('import', 'Import secrets.');
11
10
 
@@ -1 +1 @@
1
- {"version":3,"file":"esv-secret.js","names":["FrodoStubCommand","program","description","command","parse"],"sources":["../../../src/cli/esv/esv-secret.ts"],"sourcesContent":["import { FrodoStubCommand } from '../FrodoCommand';\n\nconst program = new FrodoStubCommand('frodo esv secret');\n\nprogram.description('Manages secrets.');\n\nprogram.command('create', 'Create secrets.');\n\nprogram.command('delete', 'Delete secrets.');\n\nprogram.command('describe', 'Describe secret.');\n\n// program.command('export', 'Export secrets.');\n\n// program.command('import', 'Import secrets.');\n\nprogram.command('list', 'List secrets.');\n\nprogram.command('set', 'Set secret descriptions.');\n\nprogram.command('version', 'Manage secret versions.');\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,iBAAiB;AAElD,MAAMC,OAAO,GAAG,IAAID,gBAAgB,CAAC,kBAAkB,CAAC;AAExDC,OAAO,CAACC,WAAW,CAAC,kBAAkB,CAAC;AAEvCD,OAAO,CAACE,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC;AAE5CF,OAAO,CAACE,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC;AAE5CF,OAAO,CAACE,OAAO,CAAC,UAAU,EAAE,kBAAkB,CAAC;;AAE/C;;AAEA;;AAEAF,OAAO,CAACE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC;AAExCF,OAAO,CAACE,OAAO,CAAC,KAAK,EAAE,0BAA0B,CAAC;AAElDF,OAAO,CAACE,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC;AAErDF,OAAO,CAACG,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"esv-secret.js","names":["FrodoStubCommand","program","description","command","parse"],"sources":["../../../src/cli/esv/esv-secret.ts"],"sourcesContent":["import { FrodoStubCommand } from '../FrodoCommand';\n\nconst program = new FrodoStubCommand('frodo esv secret');\n\nprogram.description('Manages secrets.');\n\nprogram.command('create', 'Create secrets.');\n\nprogram.command('delete', 'Delete secrets.');\n\nprogram.command('describe', 'Describe secret.');\n\nprogram.command('export', 'Export secrets.');\n\n// program.command('import', 'Import secrets.');\n\nprogram.command('list', 'List secrets.');\n\nprogram.command('set', 'Set secret descriptions.');\n\nprogram.command('version', 'Manage secret versions.');\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,iBAAiB;AAElD,MAAMC,OAAO,GAAG,IAAID,gBAAgB,CAAC,kBAAkB,CAAC;AAExDC,OAAO,CAACC,WAAW,CAAC,kBAAkB,CAAC;AAEvCD,OAAO,CAACE,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC;AAE5CF,OAAO,CAACE,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC;AAE5CF,OAAO,CAACE,OAAO,CAAC,UAAU,EAAE,kBAAkB,CAAC;AAE/CF,OAAO,CAACE,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC;;AAE5C;;AAEAF,OAAO,CAACE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC;AAExCF,OAAO,CAACE,OAAO,CAAC,KAAK,EAAE,0BAA0B,CAAC;AAElDF,OAAO,CAACE,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC;AAErDF,OAAO,CAACG,KAAK,CAAC,CAAC"}
@@ -1,17 +1,28 @@
1
- import { frodo } from '@rockcarver/frodo-lib';
1
+ import { frodo, state } from '@rockcarver/frodo-lib';
2
2
  import { Option } from 'commander';
3
+ import { exportVariablesToFile, exportVariablesToFiles, exportVariableToFile } from '../../ops/VariablesOps';
4
+ import { printMessage, verboseMessage } from '../../utils/Console';
3
5
  import { FrodoCommand } from '../FrodoCommand';
4
6
  const {
5
7
  getTokens
6
8
  } = frodo.login;
7
9
  const program = new FrodoCommand('frodo esv variable export');
8
- program.description('Export variables.').addOption(new Option('-i, --variable-id <variable-id>', 'Variable id. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file <file>', 'Name of the export file.')).addOption(new Option('-a, --all', 'Export all variables to a single file. Ignored with -i.')).addOption(new Option('-A, --all-separate', 'Export all variables to separate files (*.variable.json) in the current directory. Ignored with -i or -a.')).action(
10
+ program.description('Export variables.').addOption(new Option('-i, --variable-id <variable-id>', 'Variable id. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file <file>', 'Name of the export file.')).addOption(new Option('-a, --all', 'Export all variables to a single file. Ignored with -i.')).addOption(new Option('-A, --all-separate', 'Export all variables to separate files (*.variable.json) in the current directory. Ignored with -i or -a.')).addOption(new Option('--no-decode', 'Do not include decoded variable value in export').default(false, 'false')).action(
9
11
  // implement command logic inside action handler
10
12
  async (host, realm, user, password, options, command) => {
11
13
  command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
12
- if (await getTokens()) {
13
- // code goes here
14
+ if (options.variableId && (await getTokens())) {
15
+ verboseMessage(`Exporting variable "${options.variableId}" from realm "${state.getRealm()}"...`);
16
+ await exportVariableToFile(options.variableId, options.file, options.decode);
17
+ } else if (options.all && (await getTokens())) {
18
+ verboseMessage('Exporting all variables to a single file...');
19
+ await exportVariablesToFile(options.file, options.decode);
20
+ } else if (options.allSeparate && (await getTokens())) {
21
+ verboseMessage('Exporting all variables to separate files...');
22
+ await exportVariablesToFiles(options.decode);
14
23
  } else {
24
+ printMessage('Unrecognized combination of options or no options...', 'error');
25
+ program.help();
15
26
  process.exitCode = 1;
16
27
  }
17
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"esv-variable-export.js","names":["frodo","Option","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","process","exitCode","parse"],"sources":["../../../src/cli/esv/esv-variable-export.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo esv variable export');\n\nprogram\n .description('Export variables.')\n .addOption(\n new Option(\n '-i, --variable-id <variable-id>',\n 'Variable id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Export all variables to a single file. Ignored with -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all variables to separate files (*.variable.json) in the current directory. Ignored with -i or -a.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n // code goes here\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGH,KAAK,CAACI,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,2BAA2B,CAAC;AAE7DG,OAAO,CACJC,WAAW,CAAC,mBAAmB,CAAC,CAChCC,SAAS,CACR,IAAIN,MAAM,CACR,iCAAiC,EACjC,mDACF,CACF,CAAC,CACAM,SAAS,CAAC,IAAIN,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAAC,CACtEM,SAAS,CACR,IAAIN,MAAM,CACR,WAAW,EACX,yDACF,CACF,CAAC,CACAM,SAAS,CACR,IAAIN,MAAM,CACR,oBAAoB,EACpB,2GACF,CACF,CAAC,CACAO,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMX,SAAS,CAAC,CAAC,EAAE;IACrB;EAAA,CACD,MAAM;IACLa,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHZ,OAAO,CAACa,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"esv-variable-export.js","names":["frodo","state","Option","exportVariablesToFile","exportVariablesToFiles","exportVariableToFile","printMessage","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","variableId","getRealm","file","decode","all","allSeparate","help","process","exitCode","parse"],"sources":["../../../src/cli/esv/esv-variable-export.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n exportVariablesToFile,\n exportVariablesToFiles,\n exportVariableToFile,\n} from '../../ops/VariablesOps';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo esv variable export');\n\nprogram\n .description('Export variables.')\n .addOption(\n new Option(\n '-i, --variable-id <variable-id>',\n 'Variable id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Export all variables to a single file. Ignored with -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all variables to separate files (*.variable.json) in the current directory. Ignored with -i or -a.'\n )\n )\n .addOption(\n new Option(\n '--no-decode',\n 'Do not include decoded variable value in export'\n ).default(false, 'false')\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (options.variableId && (await getTokens())) {\n verboseMessage(\n `Exporting variable \"${\n options.variableId\n }\" from realm \"${state.getRealm()}\"...`\n );\n await exportVariableToFile(\n options.variableId,\n options.file,\n options.decode\n );\n } else if (options.all && (await getTokens())) {\n verboseMessage('Exporting all variables to a single file...');\n await exportVariablesToFile(options.file, options.decode);\n } else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Exporting all variables to separate files...');\n await exportVariablesToFiles(options.decode);\n } else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SACEC,qBAAqB,EACrBC,sBAAsB,EACtBC,oBAAoB,QACf,wBAAwB;AAC/B,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAClE,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGT,KAAK,CAACU,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,2BAA2B,CAAC;AAE7DG,OAAO,CACJC,WAAW,CAAC,mBAAmB,CAAC,CAChCC,SAAS,CACR,IAAIX,MAAM,CACR,iCAAiC,EACjC,mDACF,CACF,CAAC,CACAW,SAAS,CAAC,IAAIX,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAAC,CACtEW,SAAS,CACR,IAAIX,MAAM,CACR,WAAW,EACX,yDACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,oBAAoB,EACpB,2GACF,CACF,CAAC,CACAW,SAAS,CACR,IAAIX,MAAM,CACR,aAAa,EACb,iDACF,CAAC,CAACY,OAAO,CAAC,KAAK,EAAE,OAAO,CAC1B,CAAC,CACAC,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAID,OAAO,CAACG,UAAU,KAAK,MAAMd,SAAS,CAAC,CAAC,CAAC,EAAE;IAC7CF,cAAc,CACX,uBACCa,OAAO,CAACG,UACT,iBAAgBtB,KAAK,CAACuB,QAAQ,CAAC,CAAE,MACpC,CAAC;IACD,MAAMnB,oBAAoB,CACxBe,OAAO,CAACG,UAAU,EAClBH,OAAO,CAACK,IAAI,EACZL,OAAO,CAACM,MACV,CAAC;EACH,CAAC,MAAM,IAAIN,OAAO,CAACO,GAAG,KAAK,MAAMlB,SAAS,CAAC,CAAC,CAAC,EAAE;IAC7CF,cAAc,CAAC,6CAA6C,CAAC;IAC7D,MAAMJ,qBAAqB,CAACiB,OAAO,CAACK,IAAI,EAAEL,OAAO,CAACM,MAAM,CAAC;EAC3D,CAAC,MAAM,IAAIN,OAAO,CAACQ,WAAW,KAAK,MAAMnB,SAAS,CAAC,CAAC,CAAC,EAAE;IACrDF,cAAc,CAAC,8CAA8C,CAAC;IAC9D,MAAMH,sBAAsB,CAACgB,OAAO,CAACM,MAAM,CAAC;EAC9C,CAAC,MAAM;IACLpB,YAAY,CACV,sDAAsD,EACtD,OACF,CAAC;IACDK,OAAO,CAACkB,IAAI,CAAC,CAAC;IACdC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHpB,OAAO,CAACqB,KAAK,CAAC,CAAC"}
@@ -4,8 +4,7 @@ program.description('Manage variables.');
4
4
  program.command('create', 'Create variables.');
5
5
  program.command('delete', 'Delete variables.');
6
6
  program.command('describe', 'Describe variables.');
7
-
8
- // program.command('export', 'Export variables.');
7
+ program.command('export', 'Export variables.');
9
8
 
10
9
  // program.command('import', 'Import variables.');
11
10
 
@@ -1 +1 @@
1
- {"version":3,"file":"esv-variable.js","names":["FrodoStubCommand","program","description","command","parse"],"sources":["../../../src/cli/esv/esv-variable.ts"],"sourcesContent":["import { FrodoStubCommand } from '../FrodoCommand';\n\nconst program = new FrodoStubCommand('frodo esv variable');\n\nprogram.description('Manage variables.');\n\nprogram.command('create', 'Create variables.');\n\nprogram.command('delete', 'Delete variables.');\n\nprogram.command('describe', 'Describe variables.');\n\n// program.command('export', 'Export variables.');\n\n// program.command('import', 'Import variables.');\n\nprogram.command('list', 'List variables.');\n\nprogram.command('set', 'Set variable descriptions.');\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,iBAAiB;AAElD,MAAMC,OAAO,GAAG,IAAID,gBAAgB,CAAC,oBAAoB,CAAC;AAE1DC,OAAO,CAACC,WAAW,CAAC,mBAAmB,CAAC;AAExCD,OAAO,CAACE,OAAO,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AAE9CF,OAAO,CAACE,OAAO,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AAE9CF,OAAO,CAACE,OAAO,CAAC,UAAU,EAAE,qBAAqB,CAAC;;AAElD;;AAEA;;AAEAF,OAAO,CAACE,OAAO,CAAC,MAAM,EAAE,iBAAiB,CAAC;AAE1CF,OAAO,CAACE,OAAO,CAAC,KAAK,EAAE,4BAA4B,CAAC;AAEpDF,OAAO,CAACG,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"esv-variable.js","names":["FrodoStubCommand","program","description","command","parse"],"sources":["../../../src/cli/esv/esv-variable.ts"],"sourcesContent":["import { FrodoStubCommand } from '../FrodoCommand';\n\nconst program = new FrodoStubCommand('frodo esv variable');\n\nprogram.description('Manage variables.');\n\nprogram.command('create', 'Create variables.');\n\nprogram.command('delete', 'Delete variables.');\n\nprogram.command('describe', 'Describe variables.');\n\nprogram.command('export', 'Export variables.');\n\n// program.command('import', 'Import variables.');\n\nprogram.command('list', 'List variables.');\n\nprogram.command('set', 'Set variable descriptions.');\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,iBAAiB;AAElD,MAAMC,OAAO,GAAG,IAAID,gBAAgB,CAAC,oBAAoB,CAAC;AAE1DC,OAAO,CAACC,WAAW,CAAC,mBAAmB,CAAC;AAExCD,OAAO,CAACE,OAAO,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AAE9CF,OAAO,CAACE,OAAO,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AAE9CF,OAAO,CAACE,OAAO,CAAC,UAAU,EAAE,qBAAqB,CAAC;AAElDF,OAAO,CAACE,OAAO,CAAC,QAAQ,EAAE,mBAAmB,CAAC;;AAE9C;;AAEAF,OAAO,CAACE,OAAO,CAAC,MAAM,EAAE,iBAAiB,CAAC;AAE1CF,OAAO,CAACE,OAAO,CAAC,KAAK,EAAE,4BAA4B,CAAC;AAEpDF,OAAO,CAACG,KAAK,CAAC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { frodo, state } from '@rockcarver/frodo-lib';
2
- import { createKeyValueTable, createProgressBar, createTable, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
2
+ import { createKeyValueTable, createProgressBar, createTable, debugMessage, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
3
+ import { getTypedFilename, saveJsonToFile, saveToFile, titleCase } from '../utils/ExportImportUtils';
3
4
  import wordwrap from './utils/Wordwrap';
4
5
  const {
5
6
  resolveUserName
@@ -9,6 +10,8 @@ const {
9
10
  createSecret: _createSecret,
10
11
  readVersionsOfSecret,
11
12
  readSecret,
13
+ exportSecret,
14
+ exportSecrets,
12
15
  enableVersionOfSecret,
13
16
  disableVersionOfSecret,
14
17
  createVersionOfSecret: _createVersionOfSecret,
@@ -16,6 +19,9 @@ const {
16
19
  deleteSecret: _deleteSecret,
17
20
  deleteVersionOfSecret: _deleteVersionOfSecret
18
21
  } = frodo.cloud.secret;
22
+ const {
23
+ getFilePath
24
+ } = frodo.utils;
19
25
 
20
26
  /**
21
27
  * List secrets
@@ -176,6 +182,68 @@ export async function describeSecret(secretId) {
176
182
  await listSecretVersions(secretId);
177
183
  }
178
184
 
185
+ /**
186
+ * Export a single secret to file
187
+ * @param {String} secretId Secret id
188
+ * @param {String} file Optional filename
189
+ */
190
+ export async function exportSecretToFile(secretId, file) {
191
+ debugMessage(`Cli.SecretsOps.exportSecretToFile: start [secretId=${secretId}, file=${file}]`);
192
+ let fileName = file;
193
+ if (!fileName) {
194
+ fileName = getTypedFilename(secretId, 'secret');
195
+ }
196
+ const filePath = getFilePath(fileName, true);
197
+ try {
198
+ createProgressBar(1, `Exporting secret ${secretId}`);
199
+ const fileData = await exportSecret(secretId);
200
+ saveJsonToFile(fileData, filePath);
201
+ updateProgressBar(`Exported secret ${secretId}`);
202
+ stopProgressBar(
203
+ // @ts-expect-error - brightCyan colors the string, even though it is not a property of string
204
+ `Exported ${secretId.brightCyan} to ${filePath.brightCyan}.`);
205
+ } catch (err) {
206
+ stopProgressBar(`${err}`);
207
+ printMessage(err, 'error');
208
+ }
209
+ debugMessage(`Cli.SecretsOps.exportSecretToFile: end [secretId=${secretId}, file=${file}]`);
210
+ }
211
+
212
+ /**
213
+ * Export all secrets to single file
214
+ * @param {string} file Optional filename
215
+ */
216
+ export async function exportSecretsToFile(file) {
217
+ debugMessage(`Cli.SecretsOps.exportSecretsToFile: start [file=${file}]`);
218
+ let fileName = file;
219
+ if (!fileName) {
220
+ fileName = getTypedFilename(`all${titleCase(state.getRealm())}Secrets`, 'secret');
221
+ }
222
+ try {
223
+ const secretsExport = await exportSecrets();
224
+ saveJsonToFile(secretsExport, getFilePath(fileName, true));
225
+ } catch (error) {
226
+ var _error$response;
227
+ printMessage(error.message, 'error');
228
+ printMessage(`exportSecretsToFile: ${(_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status}`, 'error');
229
+ }
230
+ debugMessage(`Cli.SecretsOps.exportSecretsToFile: end [file=${file}]`);
231
+ }
232
+
233
+ /**
234
+ * Export all secrets to individual files
235
+ */
236
+ export async function exportSecretsToFiles() {
237
+ const allSecretsData = await readSecrets();
238
+ createProgressBar(allSecretsData.length, 'Exporting secrets');
239
+ for (const secret of allSecretsData) {
240
+ updateProgressBar(`Writing secret ${secret._id}`);
241
+ const fileName = getTypedFilename(secret._id, 'secret');
242
+ saveToFile('secret', secret, '_id', getFilePath(fileName, true));
243
+ }
244
+ stopProgressBar(`${allSecretsData.length} secrets exported.`);
245
+ }
246
+
179
247
  /**
180
248
  * Create new version of secret
181
249
  * @param {String} secretId secret id
@@ -1 +1 @@
1
- {"version":3,"file":"SecretsOps.js","names":["frodo","state","createKeyValueTable","createProgressBar","createTable","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","wordwrap","resolveUserName","idm","managed","readSecrets","createSecret","_createSecret","readVersionsOfSecret","readSecret","enableVersionOfSecret","disableVersionOfSecret","createVersionOfSecret","_createVersionOfSecret","updateSecretDescription","deleteSecret","_deleteSecret","deleteVersionOfSecret","_deleteVersionOfSecret","cloud","secret","listSecrets","long","secrets","sort","a","b","_id","localeCompare","error","message","response","data","table","hAlign","content","push","activeVersion","loadedVersion","loaded","description","getUseBearerTokenForAmApis","lastChangedBy","Date","lastChangeDate","toUTCString","toString","forEach","id","value","encoding","useInPlaceholders","code","setSecretDescription","secretId","deleteSecrets","length","listSecretVersions","versions","statusMap","ENABLED","DISABLED","DESTROYED","version","status","createDate","toLocaleString","describeSecret","activateVersionOfSecret","deactivateVersionOfSecret"],"sources":["../../src/ops/SecretsOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\n\nimport {\n createKeyValueTable,\n createProgressBar,\n createTable,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\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 enableVersionOfSecret,\n disableVersionOfSecret,\n createVersionOfSecret: _createVersionOfSecret,\n updateSecretDescription,\n deleteSecret: _deleteSecret,\n deleteVersionOfSecret: _deleteVersionOfSecret,\n} = frodo.cloud.secret;\n\n/**\n * List secrets\n * @param {boolean} long Long version, all the fields\n */\nexport async function listSecrets(long) {\n let secrets = [];\n try {\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n printMessage(error.response.data, 'error');\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 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 state.getUseBearerTokenForAmApis()\n ? secret.lastChangedBy\n : await resolveUserName('teammember', secret.lastChangedBy),\n new Date(secret.lastChangeDate).toUTCString(),\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n secrets.forEach((secret) => {\n printMessage(secret._id, 'data');\n });\n }\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 {String} encoding secret encoding\n * @param {boolean} useInPlaceholders use secret in placeholders\n */\nexport async function createSecret(\n id,\n value,\n description,\n encoding,\n useInPlaceholders\n) {\n showSpinner(`Creating secret ${id}...`);\n try {\n await _createSecret(id, value, description, encoding, useInPlaceholders);\n succeedSpinner(`Created secret ${id}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Set description of secret\n * @param {String} secretId secret id\n * @param {String} description secret description\n */\nexport async function setSecretDescription(secretId, description) {\n showSpinner(`Setting description of secret ${secretId}...`);\n try {\n await updateSecretDescription(secretId, description);\n succeedSpinner(`Set description of secret ${secretId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete a secret\n * @param {String} secretId secret id\n */\nexport async function deleteSecret(secretId) {\n showSpinner(`Deleting secret ${secretId}...`);\n try {\n await _deleteSecret(secretId);\n succeedSpinner(`Deleted secret ${secretId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete all secrets\n */\nexport async function deleteSecrets() {\n try {\n const secrets = await readSecrets();\n createProgressBar(secrets.length, `Deleting secrets...`);\n for (const secret of secrets) {\n try {\n await _deleteSecret(secret._id);\n updateProgressBar(`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 stopProgressBar(`Secrets deleted.`);\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n}\n\n/**\n * List all the versions of the secret\n * @param {String} secretId secret id\n */\nexport async function listSecretVersions(secretId) {\n let versions = [];\n try {\n versions = await readVersionsOfSecret(secretId);\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n printMessage(error.response.data, 'error');\n }\n const table = createTable([\n { hAlign: 'right', content: 'Version'['brightCyan'] },\n 'Status'['brightCyan'],\n 'Loaded'['brightCyan'],\n 'Created'['brightCyan'],\n ]);\n // versions.sort((a, b) => a._id.localeCompare(b._id));\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());\n}\n\n/**\n * Describe a secret\n * @param {String} secretId Secret id\n */\nexport async function describeSecret(secretId) {\n const secret = await readSecret(secretId);\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 table.push([\n 'Modifier'['brightCyan'],\n await resolveUserName('teammember', secret.lastChangedBy),\n ]);\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());\n printMessage('\\nSecret Versions:');\n await listSecretVersions(secretId);\n}\n\n/**\n * Create new version of secret\n * @param {String} secretId secret id\n * @param {String} value secret value\n */\nexport async function createVersionOfSecret(secretId, value) {\n showSpinner(`Creating new version of secret ${secretId}...`);\n try {\n const version = await _createVersionOfSecret(secretId, value);\n succeedSpinner(`Created version ${version.version} of secret ${secretId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Activate a version of a secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n */\nexport async function activateVersionOfSecret(secretId, version) {\n showSpinner(`Activating version ${version} of secret ${secretId}...`);\n try {\n await enableVersionOfSecret(secretId, version);\n succeedSpinner(`Activated version ${version} of secret ${secretId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Deactivate a version of a secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n */\nexport async function deactivateVersionOfSecret(secretId, version) {\n showSpinner(`Deactivating version ${version} of secret ${secretId}...`);\n try {\n await disableVersionOfSecret(secretId, version);\n succeedSpinner(`Deactivated version ${version} of secret ${secretId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete version of secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n */\nexport async function deleteVersionOfSecret(secretId, version) {\n showSpinner(`Deleting version ${version} of secret ${secretId}...`);\n try {\n await _deleteVersionOfSecret(secretId, version);\n succeedSpinner(`Deleted version ${version} of secret ${secretId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SecretsOps.js","names":["frodo","state","createKeyValueTable","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","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","secrets","sort","a","b","_id","localeCompare","error","message","response","data","table","hAlign","content","push","activeVersion","loadedVersion","loaded","description","getUseBearerTokenForAmApis","lastChangedBy","Date","lastChangeDate","toUTCString","toString","forEach","id","value","encoding","useInPlaceholders","code","setSecretDescription","secretId","deleteSecrets","length","listSecretVersions","versions","statusMap","ENABLED","DISABLED","DESTROYED","version","status","createDate","toLocaleString","describeSecret","exportSecretToFile","file","fileName","filePath","fileData","brightCyan","err","exportSecretsToFile","getRealm","secretsExport","_error$response","exportSecretsToFiles","allSecretsData","activateVersionOfSecret","deactivateVersionOfSecret"],"sources":["../../src/ops/SecretsOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\n\nimport {\n createKeyValueTable,\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport {\n getTypedFilename,\n saveJsonToFile,\n 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 */\nexport async function listSecrets(long) {\n let secrets = [];\n try {\n secrets = await readSecrets();\n secrets.sort((a, b) => a._id.localeCompare(b._id));\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n printMessage(error.response.data, 'error');\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 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 state.getUseBearerTokenForAmApis()\n ? secret.lastChangedBy\n : await resolveUserName('teammember', secret.lastChangedBy),\n new Date(secret.lastChangeDate).toUTCString(),\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n secrets.forEach((secret) => {\n printMessage(secret._id, 'data');\n });\n }\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 {String} encoding secret encoding\n * @param {boolean} useInPlaceholders use secret in placeholders\n */\nexport async function createSecret(\n id,\n value,\n description,\n encoding,\n useInPlaceholders\n) {\n showSpinner(`Creating secret ${id}...`);\n try {\n await _createSecret(id, value, description, encoding, useInPlaceholders);\n succeedSpinner(`Created secret ${id}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Set description of secret\n * @param {String} secretId secret id\n * @param {String} description secret description\n */\nexport async function setSecretDescription(secretId, description) {\n showSpinner(`Setting description of secret ${secretId}...`);\n try {\n await updateSecretDescription(secretId, description);\n succeedSpinner(`Set description of secret ${secretId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete a secret\n * @param {String} secretId secret id\n */\nexport async function deleteSecret(secretId) {\n showSpinner(`Deleting secret ${secretId}...`);\n try {\n await _deleteSecret(secretId);\n succeedSpinner(`Deleted secret ${secretId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete all secrets\n */\nexport async function deleteSecrets() {\n try {\n const secrets = await readSecrets();\n createProgressBar(secrets.length, `Deleting secrets...`);\n for (const secret of secrets) {\n try {\n await _deleteSecret(secret._id);\n updateProgressBar(`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 stopProgressBar(`Secrets deleted.`);\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n}\n\n/**\n * List all the versions of the secret\n * @param {String} secretId secret id\n */\nexport async function listSecretVersions(secretId) {\n let versions = [];\n try {\n versions = await readVersionsOfSecret(secretId);\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n printMessage(error.response.data, 'error');\n }\n const table = createTable([\n { hAlign: 'right', content: 'Version'['brightCyan'] },\n 'Status'['brightCyan'],\n 'Loaded'['brightCyan'],\n 'Created'['brightCyan'],\n ]);\n // versions.sort((a, b) => a._id.localeCompare(b._id));\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());\n}\n\n/**\n * Describe a secret\n * @param {String} secretId Secret id\n */\nexport async function describeSecret(secretId) {\n const secret = await readSecret(secretId);\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 table.push([\n 'Modifier'['brightCyan'],\n await resolveUserName('teammember', secret.lastChangedBy),\n ]);\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());\n printMessage('\\nSecret Versions:');\n await listSecretVersions(secretId);\n}\n\n/**\n * Export a single secret to file\n * @param {String} secretId Secret id\n * @param {String} file Optional filename\n */\nexport async function exportSecretToFile(\n secretId: string,\n file: string | null\n) {\n debugMessage(\n `Cli.SecretsOps.exportSecretToFile: start [secretId=${secretId}, file=${file}]`\n );\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(secretId, 'secret');\n }\n const filePath = getFilePath(fileName, true);\n try {\n createProgressBar(1, `Exporting secret ${secretId}`);\n const fileData = await exportSecret(secretId);\n saveJsonToFile(fileData, filePath);\n updateProgressBar(`Exported secret ${secretId}`);\n stopProgressBar(\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${secretId.brightCyan} to ${filePath.brightCyan}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `Cli.SecretsOps.exportSecretToFile: end [secretId=${secretId}, file=${file}]`\n );\n}\n\n/**\n * Export all secrets to single file\n * @param {string} file Optional filename\n */\nexport async function exportSecretsToFile(file: string) {\n debugMessage(`Cli.SecretsOps.exportSecretsToFile: start [file=${file}]`);\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 } catch (error) {\n printMessage(error.message, 'error');\n printMessage(`exportSecretsToFile: ${error.response?.status}`, 'error');\n }\n debugMessage(`Cli.SecretsOps.exportSecretsToFile: end [file=${file}]`);\n}\n\n/**\n * Export all secrets to individual files\n */\nexport async function exportSecretsToFiles() {\n const allSecretsData = await readSecrets();\n createProgressBar(allSecretsData.length, 'Exporting secrets');\n for (const secret of allSecretsData) {\n updateProgressBar(`Writing secret ${secret._id}`);\n const fileName = getTypedFilename(secret._id, 'secret');\n saveToFile('secret', secret, '_id', getFilePath(fileName, true));\n }\n stopProgressBar(`${allSecretsData.length} secrets exported.`);\n}\n\n/**\n * Create new version of secret\n * @param {String} secretId secret id\n * @param {String} value secret value\n */\nexport async function createVersionOfSecret(secretId, value) {\n showSpinner(`Creating new version of secret ${secretId}...`);\n try {\n const version = await _createVersionOfSecret(secretId, value);\n succeedSpinner(`Created version ${version.version} of secret ${secretId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Activate a version of a secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n */\nexport async function activateVersionOfSecret(secretId, version) {\n showSpinner(`Activating version ${version} of secret ${secretId}...`);\n try {\n await enableVersionOfSecret(secretId, version);\n succeedSpinner(`Activated version ${version} of secret ${secretId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Deactivate a version of a secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n */\nexport async function deactivateVersionOfSecret(secretId, version) {\n showSpinner(`Deactivating version ${version} of secret ${secretId}...`);\n try {\n await disableVersionOfSecret(secretId, version);\n succeedSpinner(`Deactivated version ${version} of secret ${secretId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete version of secret\n * @param {String} secretId secret id\n * @param {Number} version version of secret\n */\nexport async function deleteVersionOfSecret(secretId, version) {\n showSpinner(`Deleting version ${version} of secret ${secretId}...`);\n try {\n await _deleteVersionOfSecret(secretId, version);\n succeedSpinner(`Deleted version ${version} of secret ${secretId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n"],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  import { frodo, state } from '@rockcarver/frodo-lib';
2
- import { createKeyValueTable, createProgressBar, createTable, failSpinner, printMessage, showSpinner, stopProgressBar, succeedSpinner, updateProgressBar } from '../utils/Console';
2
+ import { createKeyValueTable, createProgressBar, createProgressIndicator, createTable, debugMessage, failSpinner, printMessage, showSpinner, stopProgressBar, stopProgressIndicator, succeedSpinner, updateProgressBar, updateProgressIndicator } from '../utils/Console';
3
+ import { getTypedFilename, saveJsonToFile, saveToFile, titleCase } from '../utils/ExportImportUtils';
3
4
  import wordwrap from './utils/Wordwrap';
4
5
  const {
5
- decodeBase64
6
+ decodeBase64,
7
+ getFilePath
6
8
  } = frodo.utils;
7
9
  const {
8
10
  resolveUserName
@@ -10,6 +12,8 @@ const {
10
12
  const {
11
13
  readVariables,
12
14
  readVariable,
15
+ exportVariable,
16
+ exportVariables,
13
17
  updateVariable: _updateVariable
14
18
  } = frodo.cloud.variable;
15
19
 
@@ -33,8 +37,8 @@ export async function listVariables(long) {
33
37
  }
34
38
  printMessage(table.toString(), 'data');
35
39
  } else {
36
- variables.forEach(secret => {
37
- printMessage(secret._id, 'data');
40
+ variables.forEach(variable => {
41
+ printMessage(variable._id, 'data');
38
42
  });
39
43
  }
40
44
  }
@@ -139,4 +143,72 @@ export async function describeVariable(variableId) {
139
143
  table.push(['Modifier UUID'['brightCyan'], variable.lastChangedBy]);
140
144
  printMessage(table.toString());
141
145
  }
146
+
147
+ /**
148
+ * Export a single variable to file
149
+ * @param {String} variableId Variable id
150
+ * @param {String} file Optional filename
151
+ * @param {boolean} noDecode Do not include decoded variable value in export
152
+ */
153
+ export async function exportVariableToFile(variableId, file, noDecode) {
154
+ debugMessage(`Cli.VariablesOps.exportVariableToFile: start [variableId=${variableId}, file=${file}]`);
155
+ let fileName = file;
156
+ if (!fileName) {
157
+ fileName = getTypedFilename(variableId, 'variable');
158
+ }
159
+ const filePath = getFilePath(fileName, true);
160
+ try {
161
+ createProgressBar(1, `Exporting variable ${variableId}`);
162
+ const fileData = await exportVariable(variableId, noDecode);
163
+ saveJsonToFile(fileData, filePath);
164
+ updateProgressBar(`Exported variable ${variableId}`);
165
+ stopProgressBar(
166
+ // @ts-expect-error - brightCyan colors the string, even though it is not a property of string
167
+ `Exported ${variableId.brightCyan} to ${filePath.brightCyan}.`);
168
+ } catch (err) {
169
+ stopProgressBar(`${err}`);
170
+ printMessage(err, 'error');
171
+ }
172
+ debugMessage(`Cli.VariablesOps.exportVariableToFile: end [variableId=${variableId}, file=${file}]`);
173
+ }
174
+
175
+ /**
176
+ * Export all variables to single file
177
+ * @param {string} file Optional filename
178
+ * @param {boolean} noDecode Do not include decoded variable value in export
179
+ */
180
+ export async function exportVariablesToFile(file, noDecode) {
181
+ debugMessage(`Cli.VariablesOps.exportVariablesToFile: start [file=${file}]`);
182
+ let fileName = file;
183
+ if (!fileName) {
184
+ fileName = getTypedFilename(`all${titleCase(state.getRealm())}Variables`, 'variable');
185
+ }
186
+ try {
187
+ const variablesExport = await exportVariables(noDecode);
188
+ saveJsonToFile(variablesExport, getFilePath(fileName, true));
189
+ } catch (error) {
190
+ var _error$response;
191
+ printMessage(error.message, 'error');
192
+ printMessage(`exportVariablesToFile: ${(_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status}`, 'error');
193
+ }
194
+ debugMessage(`Cli.VariablesOps.exportVariablesToFile: end [file=${file}]`);
195
+ }
196
+
197
+ /**
198
+ * Export all variables to seperate files
199
+ * @param {boolean} noDecode Do not include decoded variable value in export
200
+ */
201
+ export async function exportVariablesToFiles(noDecode) {
202
+ const variableList = await readVariables();
203
+ createProgressIndicator('determinate', variableList.length, 'Exporting variables');
204
+ for (const variable of variableList) {
205
+ if (!noDecode) {
206
+ variable.value = decodeBase64(variable.valueBase64);
207
+ }
208
+ updateProgressIndicator(`Writing variable ${variable._id}`);
209
+ const fileName = getTypedFilename(variable._id, 'variable');
210
+ saveToFile('variable', variable, '_id', getFilePath(fileName, true));
211
+ }
212
+ stopProgressIndicator(`${variableList.length} variables exported`);
213
+ }
142
214
  //# sourceMappingURL=VariablesOps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VariablesOps.js","names":["frodo","state","createKeyValueTable","createProgressBar","createTable","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","wordwrap","decodeBase64","utils","resolveUserName","idm","managed","readVariables","readVariable","updateVariable","_updateVariable","cloud","variable","listVariables","long","variables","sort","a","b","_id","localeCompare","error","message","response","data","table","push","valueBase64","loaded","description","getUseBearerTokenForAmApis","lastChangedBy","Date","lastChangeDate","toUTCString","toString","forEach","secret","createVariable","variableId","value","type","code","setVariableDescription","deleteVariable","deleteVariables","length","describeVariable","toLocaleString"],"sources":["../../src/ops/VariablesOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { VariableExpressionType } from '@rockcarver/frodo-lib/types/api/cloud/VariablesApi';\n\nimport {\n createKeyValueTable,\n createProgressBar,\n createTable,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport wordwrap from './utils/Wordwrap';\n\nconst { decodeBase64 } = frodo.utils;\nconst { resolveUserName } = frodo.idm.managed;\nconst {\n readVariables,\n readVariable,\n updateVariable: _updateVariable,\n} = frodo.cloud.variable;\n\n/**\n * List variables\n * @param {boolean} long Long version, all the fields\n */\nexport async function listVariables(long) {\n let variables = [];\n try {\n variables = await readVariables();\n variables.sort((a, b) => a._id.localeCompare(b._id));\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n printMessage(error.response.data, 'error');\n }\n if (long) {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Value'['brightCyan'],\n 'Status'['brightCyan'],\n 'Description'['brightCyan'],\n 'Modifier'['brightCyan'],\n 'Modified (UTC)'['brightCyan'],\n ]);\n for (const variable of variables) {\n table.push([\n variable._id,\n wordwrap(decodeBase64(variable.valueBase64), 40),\n variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n wordwrap(variable.description, 40),\n state.getUseBearerTokenForAmApis()\n ? variable.lastChangedBy\n : await resolveUserName('teammember', variable.lastChangedBy),\n new Date(variable.lastChangeDate).toUTCString(),\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n variables.forEach((secret) => {\n printMessage(secret._id, 'data');\n });\n }\n}\n\n/**\n * Create variable\n * @param {string} variableId variable id\n * @param {string} value variable value\n * @param {string} description variable description\n * @param {VariableExpressionType} type variable type\n */\nexport async function createVariable(\n variableId: string,\n value: string,\n description: string,\n type: VariableExpressionType = 'string'\n) {\n showSpinner(`Creating variable ${variableId}...`);\n try {\n await _updateVariable(variableId, value, description, type);\n succeedSpinner(`Created variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Update variable\n * @param {string} variableId variable id\n * @param {string} value variable value\n * @param {string} description variable description\n */\nexport async function updateVariable(variableId, value, description) {\n showSpinner(`Updating variable ${variableId}...`);\n try {\n await _updateVariable(variableId, value, description);\n succeedSpinner(`Updated variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Set description of variable\n * @param {string} variableId variable id\n * @param {string} description variable description\n */\nexport async function setVariableDescription(variableId, description) {\n showSpinner(`Setting description of variable ${variableId}...`);\n try {\n await setVariableDescription(variableId, description);\n succeedSpinner(`Set description of variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete a variable\n * @param {string} variableId variable id\n */\nexport async function deleteVariable(variableId) {\n showSpinner(`Deleting variable ${variableId}...`);\n try {\n await deleteVariable(variableId);\n succeedSpinner(`Deleted variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete all variables\n */\nexport async function deleteVariables() {\n try {\n const variables = await readVariables();\n createProgressBar(variables.length, `Deleting variable...`);\n for (const variable of variables) {\n try {\n await deleteVariable(variable._id);\n updateProgressBar(`Deleted variable ${variable._id}`);\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n }\n stopProgressBar(`Variables deleted.`);\n } catch (error) {\n stopProgressBar(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n}\n\n/**\n * Describe a variable\n * @param {string} variableId variable id\n */\nexport async function describeVariable(variableId) {\n const variable = await readVariable(variableId);\n const table = createKeyValueTable();\n table.push(['Name'['brightCyan'], variable._id]);\n table.push([\n 'Value'['brightCyan'],\n wordwrap(decodeBase64(variable.valueBase64), 40),\n ]);\n table.push([\n 'Status'['brightCyan'],\n variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n ]);\n table.push(['Description'['brightCyan'], wordwrap(variable.description, 60)]);\n table.push([\n 'Modified'['brightCyan'],\n new Date(variable.lastChangeDate).toLocaleString(),\n ]);\n table.push([\n 'Modifier'['brightCyan'],\n await resolveUserName('teammember', variable.lastChangedBy),\n ]);\n table.push(['Modifier UUID'['brightCyan'], variable.lastChangedBy]);\n printMessage(table.toString());\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"VariablesOps.js","names":["frodo","state","createKeyValueTable","createProgressBar","createProgressIndicator","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","stopProgressIndicator","succeedSpinner","updateProgressBar","updateProgressIndicator","getTypedFilename","saveJsonToFile","saveToFile","titleCase","wordwrap","decodeBase64","getFilePath","utils","resolveUserName","idm","managed","readVariables","readVariable","exportVariable","exportVariables","updateVariable","_updateVariable","cloud","variable","listVariables","long","variables","sort","a","b","_id","localeCompare","error","message","response","data","table","push","valueBase64","loaded","description","getUseBearerTokenForAmApis","lastChangedBy","Date","lastChangeDate","toUTCString","toString","forEach","createVariable","variableId","value","type","code","setVariableDescription","deleteVariable","deleteVariables","length","describeVariable","toLocaleString","exportVariableToFile","file","noDecode","fileName","filePath","fileData","brightCyan","err","exportVariablesToFile","getRealm","variablesExport","_error$response","status","exportVariablesToFiles","variableList"],"sources":["../../src/ops/VariablesOps.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { VariableExpressionType } from '@rockcarver/frodo-lib/types/api/cloud/VariablesApi';\n\nimport {\n createKeyValueTable,\n createProgressBar,\n createProgressIndicator,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n stopProgressIndicator,\n succeedSpinner,\n updateProgressBar,\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 { decodeBase64, getFilePath } = frodo.utils;\nconst { resolveUserName } = frodo.idm.managed;\nconst {\n readVariables,\n readVariable,\n exportVariable,\n exportVariables,\n updateVariable: _updateVariable,\n} = frodo.cloud.variable;\n\n/**\n * List variables\n * @param {boolean} long Long version, all the fields\n */\nexport async function listVariables(long) {\n let variables = [];\n try {\n variables = await readVariables();\n variables.sort((a, b) => a._id.localeCompare(b._id));\n } catch (error) {\n printMessage(`${error.message}`, 'error');\n printMessage(error.response.data, 'error');\n }\n if (long) {\n const table = createTable([\n 'Id'['brightCyan'],\n 'Value'['brightCyan'],\n 'Status'['brightCyan'],\n 'Description'['brightCyan'],\n 'Modifier'['brightCyan'],\n 'Modified (UTC)'['brightCyan'],\n ]);\n for (const variable of variables) {\n table.push([\n variable._id,\n wordwrap(decodeBase64(variable.valueBase64), 40),\n variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n wordwrap(variable.description, 40),\n state.getUseBearerTokenForAmApis()\n ? variable.lastChangedBy\n : await resolveUserName('teammember', variable.lastChangedBy),\n new Date(variable.lastChangeDate).toUTCString(),\n ]);\n }\n printMessage(table.toString(), 'data');\n } else {\n variables.forEach((variable) => {\n printMessage(variable._id, 'data');\n });\n }\n}\n\n/**\n * Create variable\n * @param {string} variableId variable id\n * @param {string} value variable value\n * @param {string} description variable description\n * @param {VariableExpressionType} type variable type\n */\nexport async function createVariable(\n variableId: string,\n value: string,\n description: string,\n type: VariableExpressionType = 'string'\n) {\n showSpinner(`Creating variable ${variableId}...`);\n try {\n await _updateVariable(variableId, value, description, type);\n succeedSpinner(`Created variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Update variable\n * @param {string} variableId variable id\n * @param {string} value variable value\n * @param {string} description variable description\n */\nexport async function updateVariable(variableId, value, description) {\n showSpinner(`Updating variable ${variableId}...`);\n try {\n await _updateVariable(variableId, value, description);\n succeedSpinner(`Updated variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Set description of variable\n * @param {string} variableId variable id\n * @param {string} description variable description\n */\nexport async function setVariableDescription(variableId, description) {\n showSpinner(`Setting description of variable ${variableId}...`);\n try {\n await setVariableDescription(variableId, description);\n succeedSpinner(`Set description of variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete a variable\n * @param {string} variableId variable id\n */\nexport async function deleteVariable(variableId) {\n showSpinner(`Deleting variable ${variableId}...`);\n try {\n await deleteVariable(variableId);\n succeedSpinner(`Deleted variable ${variableId}`);\n } catch (error) {\n failSpinner(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n }\n}\n\n/**\n * Delete all variables\n */\nexport async function deleteVariables() {\n try {\n const variables = await readVariables();\n createProgressBar(variables.length, `Deleting variable...`);\n for (const variable of variables) {\n try {\n await deleteVariable(variable._id);\n updateProgressBar(`Deleted variable ${variable._id}`);\n } catch (error) {\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n }\n stopProgressBar(`Variables deleted.`);\n } catch (error) {\n stopProgressBar(\n `Error: ${error.response.data.code} - ${error.response.data.message}`\n );\n printMessage(\n `Error: ${error.response.data.code} - ${error.response.data.message}`,\n 'error'\n );\n }\n}\n\n/**\n * Describe a variable\n * @param {string} variableId variable id\n */\nexport async function describeVariable(variableId) {\n const variable = await readVariable(variableId);\n const table = createKeyValueTable();\n table.push(['Name'['brightCyan'], variable._id]);\n table.push([\n 'Value'['brightCyan'],\n wordwrap(decodeBase64(variable.valueBase64), 40),\n ]);\n table.push([\n 'Status'['brightCyan'],\n variable.loaded ? 'loaded'['brightGreen'] : 'unloaded'['brightRed'],\n ]);\n table.push(['Description'['brightCyan'], wordwrap(variable.description, 60)]);\n table.push([\n 'Modified'['brightCyan'],\n new Date(variable.lastChangeDate).toLocaleString(),\n ]);\n table.push([\n 'Modifier'['brightCyan'],\n await resolveUserName('teammember', variable.lastChangedBy),\n ]);\n table.push(['Modifier UUID'['brightCyan'], variable.lastChangedBy]);\n printMessage(table.toString());\n}\n\n/**\n * Export a single variable to file\n * @param {String} variableId Variable id\n * @param {String} file Optional filename\n * @param {boolean} noDecode Do not include decoded variable value in export\n */\nexport async function exportVariableToFile(\n variableId: string,\n file: string | null,\n noDecode: boolean\n) {\n debugMessage(\n `Cli.VariablesOps.exportVariableToFile: start [variableId=${variableId}, file=${file}]`\n );\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(variableId, 'variable');\n }\n const filePath = getFilePath(fileName, true);\n try {\n createProgressBar(1, `Exporting variable ${variableId}`);\n const fileData = await exportVariable(variableId, noDecode);\n saveJsonToFile(fileData, filePath);\n updateProgressBar(`Exported variable ${variableId}`);\n stopProgressBar(\n // @ts-expect-error - brightCyan colors the string, even though it is not a property of string\n `Exported ${variableId.brightCyan} to ${filePath.brightCyan}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `Cli.VariablesOps.exportVariableToFile: end [variableId=${variableId}, file=${file}]`\n );\n}\n\n/**\n * Export all variables to single file\n * @param {string} file Optional filename\n * @param {boolean} noDecode Do not include decoded variable value in export\n */\nexport async function exportVariablesToFile(\n file: string | null,\n noDecode: boolean\n) {\n debugMessage(`Cli.VariablesOps.exportVariablesToFile: start [file=${file}]`);\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${titleCase(state.getRealm())}Variables`,\n 'variable'\n );\n }\n try {\n const variablesExport = await exportVariables(noDecode);\n saveJsonToFile(variablesExport, getFilePath(fileName, true));\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(`exportVariablesToFile: ${error.response?.status}`, 'error');\n }\n debugMessage(`Cli.VariablesOps.exportVariablesToFile: end [file=${file}]`);\n}\n\n/**\n * Export all variables to seperate files\n * @param {boolean} noDecode Do not include decoded variable value in export\n */\nexport async function exportVariablesToFiles(noDecode: boolean) {\n const variableList = await readVariables();\n createProgressIndicator(\n 'determinate',\n variableList.length,\n 'Exporting variables'\n );\n for (const variable of variableList) {\n if (!noDecode) {\n variable.value = decodeBase64(variable.valueBase64);\n }\n updateProgressIndicator(`Writing variable ${variable._id}`);\n const fileName = getTypedFilename(variable._id, 'variable');\n saveToFile('variable', variable, '_id', getFilePath(fileName, true));\n }\n stopProgressIndicator(`${variableList.length} variables exported`);\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-cli",
3
- "version": "2.0.0-26",
3
+ "version": "2.0.0-28",
4
4
  "type": "module",
5
5
  "description": "A command line interface to manage ForgeRock Identity Cloud tenants, ForgeOps deployments, and classic deployments.",
6
6
  "keywords": [
@@ -107,7 +107,7 @@
107
107
  ]
108
108
  },
109
109
  "dependencies": {
110
- "@rockcarver/frodo-lib": "2.0.0-43",
110
+ "@rockcarver/frodo-lib": "2.0.0-46",
111
111
  "chokidar": "^3.5.3",
112
112
  "cli-progress": "^3.11.2",
113
113
  "cli-table3": "^0.6.3",