@rockcarver/frodo-cli 0.18.2-11 → 0.18.2-13

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
+ ## [0.18.2-13] - 2022-12-01
11
+
12
+ ## [0.18.2-12] - 2022-11-29
13
+
10
14
  ## [0.18.2-11] - 2022-11-26
11
15
 
12
16
  ## [0.18.2-10] - 2022-11-23
@@ -736,7 +740,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
736
740
  - Fixed problem with adding connection profiles
737
741
  - Miscellaneous bug fixes
738
742
 
739
- [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-11...HEAD
743
+ [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-13...HEAD
744
+
745
+ [0.18.2-13]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-12...v0.18.2-13
746
+
747
+ [0.18.2-12]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-11...v0.18.2-12
740
748
 
741
749
  [0.18.2-11]: https://github.com/rockcarver/frodo-cli/compare/v0.18.2-10...v0.18.2-11
742
750
 
@@ -1,13 +1,11 @@
1
1
  import { Command, Option } from 'commander';
2
- import { Authenticate, Idm, state } from '@rockcarver/frodo-lib';
3
- import * as common from '../cmd_common.js';
4
- import { verboseMessage } from '../../utils/Console.js';
2
+ import { Authenticate, state } from '@rockcarver/frodo-lib';
3
+ import * as common from '../cmd_common';
4
+ import { verboseMessage } from '../../utils/Console';
5
+ import { countManagedObjects } from '../../ops/IdmOps';
5
6
  const {
6
7
  getTokens
7
8
  } = Authenticate;
8
- const {
9
- countManagedObjects
10
- } = Idm;
11
9
  const program = new Command('frodo idm count');
12
10
  program.description('Count managed objects.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-m, --managed-object <type>', 'Type of managed object to count. E.g. "alpha_user", "alpha_role", "user", "role".')).action(
13
11
  // implement command logic inside action handler
@@ -1 +1 @@
1
- {"version":3,"file":"idm-count.js","names":["Command","Option","Authenticate","Idm","state","common","verboseMessage","getTokens","countManagedObjects","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","managedObject","parse"],"sources":["cli/idm/idm-count.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport { Authenticate, Idm, state } from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common.js';\nimport { verboseMessage } from '../../utils/Console.js';\n\nconst { getTokens } = Authenticate;\nconst { countManagedObjects } = Idm;\n\nconst program = new Command('frodo idm count');\n\nprogram\n .description('Count managed objects.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option(\n '-m, --managed-object <type>',\n 'Type of managed object to count. E.g. \"alpha_user\", \"alpha_role\", \"user\", \"role\".'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n if (await getTokens()) {\n verboseMessage(`Counting managed ${options.managedObject} objects...`);\n countManagedObjects(options.managedObject);\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,OAAO,EAAEC,MAAM,QAAQ,WAAW;AAC3C,SAASC,YAAY,EAAEC,GAAG,EAAEC,KAAK,QAAQ,uBAAuB;AAChE,OAAO,KAAKC,MAAM,MAAM,kBAAkB;AAC1C,SAASC,cAAc,QAAQ,wBAAwB;AAEvD,MAAM;EAAEC;AAAU,CAAC,GAAGL,YAAY;AAClC,MAAM;EAAEM;AAAoB,CAAC,GAAGL,GAAG;AAEnC,MAAMM,OAAO,GAAG,IAAIT,OAAO,CAAC,iBAAiB,CAAC;AAE9CS,OAAO,CACJC,WAAW,CAAC,wBAAwB,CAAC,CACrCC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAChCC,kBAAkB,EAAE,CACpBC,WAAW,CAACR,MAAM,CAACS,aAAa,CAAC,CACjCD,WAAW,CAACR,MAAM,CAACU,aAAa,CAAC,CACjCF,WAAW,CAACR,MAAM,CAACW,YAAY,CAAC,CAChCH,WAAW,CAACR,MAAM,CAACY,gBAAgB,CAAC,CACpCC,SAAS,CAACb,MAAM,CAACc,cAAc,CAAC,CAChCD,SAAS,CAACb,MAAM,CAACe,aAAa,CAAC,CAC/BF,SAAS,CAACb,MAAM,CAACgB,WAAW,CAAC,CAC7BH,SAAS,CAACb,MAAM,CAACiB,eAAe,CAAC,CACjCJ,SAAS,CACR,IAAIjB,MAAM,CACR,6BAA6B,EAC7B,mFAAmF,CACpF,CACF,CACAsB,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,KAAK;EAC9CxB,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACC,SAAS,CAACP,IAAI,CAAC;EACrCpB,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACE,QAAQ,CAACP,KAAK,CAAC;EACrCrB,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACG,WAAW,CAACP,IAAI,CAAC;EACvCtB,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACI,WAAW,CAACP,QAAQ,CAAC;EAC3CvB,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACK,iBAAiB,CAACP,OAAO,CAACQ,IAAI,CAAC;EACrDhC,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACO,0BAA0B,CAACT,OAAO,CAACU,QAAQ,CAAC;EAClElC,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACS,UAAU,CAACX,OAAO,CAACY,OAAO,CAAC;EACjDpC,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACW,QAAQ,CAACb,OAAO,CAACc,KAAK,CAAC;EAC7CtC,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACa,YAAY,CAACf,OAAO,CAACgB,SAAS,CAAC;EACrD,IAAI,MAAMrC,SAAS,EAAE,EAAE;IACrBD,cAAc,CAAE,oBAAmBsB,OAAO,CAACiB,aAAc,aAAY,CAAC;IACtErC,mBAAmB,CAACoB,OAAO,CAACiB,aAAa,CAAC;EAC5C;AACF;AACA;AAAA,CACD;;AAEHpC,OAAO,CAACqC,KAAK,EAAE"}
1
+ {"version":3,"file":"idm-count.js","names":["Command","Option","Authenticate","state","common","verboseMessage","countManagedObjects","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","managedObject","parse"],"sources":["cli/idm/idm-count.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport { Authenticate, state } from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport { verboseMessage } from '../../utils/Console';\nimport { countManagedObjects } from '../../ops/IdmOps';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo idm count');\n\nprogram\n .description('Count managed objects.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option(\n '-m, --managed-object <type>',\n 'Type of managed object to count. E.g. \"alpha_user\", \"alpha_role\", \"user\", \"role\".'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n if (await getTokens()) {\n verboseMessage(`Counting managed ${options.managedObject} objects...`);\n countManagedObjects(options.managedObject);\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,OAAO,EAAEC,MAAM,QAAQ,WAAW;AAC3C,SAASC,YAAY,EAAEC,KAAK,QAAQ,uBAAuB;AAC3D,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,cAAc,QAAQ,qBAAqB;AACpD,SAASC,mBAAmB,QAAQ,kBAAkB;AAEtD,MAAM;EAAEC;AAAU,CAAC,GAAGL,YAAY;AAElC,MAAMM,OAAO,GAAG,IAAIR,OAAO,CAAC,iBAAiB,CAAC;AAE9CQ,OAAO,CACJC,WAAW,CAAC,wBAAwB,CAAC,CACrCC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAChCC,kBAAkB,EAAE,CACpBC,WAAW,CAACR,MAAM,CAACS,aAAa,CAAC,CACjCD,WAAW,CAACR,MAAM,CAACU,aAAa,CAAC,CACjCF,WAAW,CAACR,MAAM,CAACW,YAAY,CAAC,CAChCH,WAAW,CAACR,MAAM,CAACY,gBAAgB,CAAC,CACpCC,SAAS,CAACb,MAAM,CAACc,cAAc,CAAC,CAChCD,SAAS,CAACb,MAAM,CAACe,aAAa,CAAC,CAC/BF,SAAS,CAACb,MAAM,CAACgB,WAAW,CAAC,CAC7BH,SAAS,CAACb,MAAM,CAACiB,eAAe,CAAC,CACjCJ,SAAS,CACR,IAAIhB,MAAM,CACR,6BAA6B,EAC7B,mFAAmF,CACpF,CACF,CACAqB,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,KAAK;EAC9CxB,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACC,SAAS,CAACP,IAAI,CAAC;EACrCpB,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACE,QAAQ,CAACP,KAAK,CAAC;EACrCrB,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACG,WAAW,CAACP,IAAI,CAAC;EACvCtB,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACI,WAAW,CAACP,QAAQ,CAAC;EAC3CvB,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACK,iBAAiB,CAACP,OAAO,CAACQ,IAAI,CAAC;EACrDhC,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACO,0BAA0B,CAACT,OAAO,CAACU,QAAQ,CAAC;EAClElC,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACS,UAAU,CAACX,OAAO,CAACY,OAAO,CAAC;EACjDpC,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACW,QAAQ,CAACb,OAAO,CAACc,KAAK,CAAC;EAC7CtC,KAAK,CAACyB,OAAO,CAACC,OAAO,CAACa,YAAY,CAACf,OAAO,CAACgB,SAAS,CAAC;EACrD,IAAI,MAAMpC,SAAS,EAAE,EAAE;IACrBF,cAAc,CAAE,oBAAmBsB,OAAO,CAACiB,aAAc,aAAY,CAAC;IACtEtC,mBAAmB,CAACqB,OAAO,CAACiB,aAAa,CAAC;EAC5C;AACF;AACA;AAAA,CACD;;AAEHpC,OAAO,CAACqC,KAAK,EAAE"}
@@ -1,15 +1,11 @@
1
1
  import { Command, Option } from 'commander';
2
- import { Authenticate, Idm, state } from '@rockcarver/frodo-lib';
2
+ import { Authenticate, state } from '@rockcarver/frodo-lib';
3
3
  import * as common from '../cmd_common';
4
4
  import { printMessage, verboseMessage } from '../../utils/Console';
5
+ import { exportAllConfigEntities, exportAllRawConfigEntities, exportConfigEntity } from '../../ops/IdmOps';
5
6
  const {
6
7
  getTokens
7
8
  } = Authenticate;
8
- const {
9
- exportAllConfigEntities,
10
- exportAllRawConfigEntities,
11
- exportConfigEntity
12
- } = Idm;
13
9
  const program = new Command('frodo idm export');
14
10
  program.description('Export IDM configuration objects.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-N, --name <name>', 'Config entity name. E.g. "managed", "sync", "provisioner-<connector-name>", etc.')).addOption(new Option('-f, --file [file]', 'Export file. Ignored with -A.')).addOption(new Option('-E, --entities-file [entities-file]', 'Name of the entity file. Ignored with -A.')).addOption(new Option('-e, --env-file [envfile]', 'Name of the env file. Ignored with -A.')).addOption(new Option('-a, --all', 'Export all IDM configuration objects into a single file in directory -D. Ignored with -N.')).addOption(new Option('-A, --all-separate', 'Export all IDM configuration objects into separate JSON files in directory -D. Ignored with -N, and -a.')).addOption(new Option('-D, --directory <directory>', 'Export directory. Required with and ignored without -a/-A.')).action(
15
11
  // implement command logic inside action handler
@@ -1 +1 @@
1
- {"version":3,"file":"idm-export.js","names":["Command","Option","Authenticate","Idm","state","common","printMessage","verboseMessage","getTokens","exportAllConfigEntities","exportAllRawConfigEntities","exportConfigEntity","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","name","getRealm","file","allSeparate","directory","entitiesFile","envFile","help","parse"],"sources":["cli/idm/idm-export.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport { Authenticate, Idm, state } from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport { printMessage, verboseMessage } from '../../utils/Console';\n\nconst { getTokens } = Authenticate;\nconst {\n exportAllConfigEntities,\n exportAllRawConfigEntities,\n exportConfigEntity,\n} = Idm;\n\nconst program = new Command('frodo idm export');\n\nprogram\n .description('Export IDM configuration objects.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option(\n '-N, --name <name>',\n 'Config entity name. E.g. \"managed\", \"sync\", \"provisioner-<connector-name>\", etc.'\n )\n )\n .addOption(new Option('-f, --file [file]', 'Export file. Ignored with -A.'))\n .addOption(\n new Option(\n '-E, --entities-file [entities-file]',\n 'Name of the entity file. Ignored with -A.'\n )\n )\n .addOption(\n new Option(\n '-e, --env-file [envfile]',\n 'Name of the env file. Ignored with -A.'\n )\n )\n .addOption(\n new Option(\n '-a, --all',\n 'Export all IDM configuration objects into a single file in directory -D. Ignored with -N.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all IDM configuration objects into separate JSON files in directory -D. Ignored with -N, and -a.'\n )\n )\n .addOption(\n new Option(\n '-D, --directory <directory>',\n 'Export directory. Required with and ignored without -a/-A.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n // export by id/name\n if (options.name && (await getTokens())) {\n verboseMessage(\n `Exporting object \"${\n options.name\n }\" from realm \"${state.default.session.getRealm()}\"...`\n );\n exportConfigEntity(options.name, options.file);\n }\n // --all-separate -A\n else if (\n options.allSeparate &&\n options.directory &&\n options.entitiesFile &&\n options.envFile &&\n (await getTokens())\n ) {\n verboseMessage(\n `Exporting IDM configuration objects specified in ${options.entitiesFile} into separate files in ${options.directory} using ${options.envFile} for variable replacement...`\n );\n exportAllConfigEntities(\n options.directory,\n options.entitiesFile,\n options.envFile\n );\n }\n // --all-separate -A without variable replacement\n else if (\n options.allSeparate &&\n options.directory &&\n (await getTokens())\n ) {\n verboseMessage(\n `Exporting all IDM configuration objects into separate files in ${options.directory}...`\n );\n exportAllRawConfigEntities(options.directory);\n }\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
1
+ {"version":3,"file":"idm-export.js","names":["Command","Option","Authenticate","state","common","printMessage","verboseMessage","exportAllConfigEntities","exportAllRawConfigEntities","exportConfigEntity","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","name","getRealm","file","allSeparate","directory","entitiesFile","envFile","help","parse"],"sources":["cli/idm/idm-export.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport { Authenticate, state } from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport {\n exportAllConfigEntities,\n exportAllRawConfigEntities,\n exportConfigEntity,\n} from '../../ops/IdmOps';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo idm export');\n\nprogram\n .description('Export IDM configuration objects.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option(\n '-N, --name <name>',\n 'Config entity name. E.g. \"managed\", \"sync\", \"provisioner-<connector-name>\", etc.'\n )\n )\n .addOption(new Option('-f, --file [file]', 'Export file. Ignored with -A.'))\n .addOption(\n new Option(\n '-E, --entities-file [entities-file]',\n 'Name of the entity file. Ignored with -A.'\n )\n )\n .addOption(\n new Option(\n '-e, --env-file [envfile]',\n 'Name of the env file. Ignored with -A.'\n )\n )\n .addOption(\n new Option(\n '-a, --all',\n 'Export all IDM configuration objects into a single file in directory -D. Ignored with -N.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all IDM configuration objects into separate JSON files in directory -D. Ignored with -N, and -a.'\n )\n )\n .addOption(\n new Option(\n '-D, --directory <directory>',\n 'Export directory. Required with and ignored without -a/-A.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n // export by id/name\n if (options.name && (await getTokens())) {\n verboseMessage(\n `Exporting object \"${\n options.name\n }\" from realm \"${state.default.session.getRealm()}\"...`\n );\n exportConfigEntity(options.name, options.file);\n }\n // --all-separate -A\n else if (\n options.allSeparate &&\n options.directory &&\n options.entitiesFile &&\n options.envFile &&\n (await getTokens())\n ) {\n verboseMessage(\n `Exporting IDM configuration objects specified in ${options.entitiesFile} into separate files in ${options.directory} using ${options.envFile} for variable replacement...`\n );\n exportAllConfigEntities(\n options.directory,\n options.entitiesFile,\n options.envFile\n );\n }\n // --all-separate -A without variable replacement\n else if (\n options.allSeparate &&\n options.directory &&\n (await getTokens())\n ) {\n verboseMessage(\n `Exporting all IDM configuration objects into separate files in ${options.directory}...`\n );\n exportAllRawConfigEntities(options.directory);\n }\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
@@ -1,15 +1,11 @@
1
1
  import { Command, Option } from 'commander';
2
- import { Authenticate, Idm, state } from '@rockcarver/frodo-lib';
2
+ import { Authenticate, state } from '@rockcarver/frodo-lib';
3
3
  import * as common from '../cmd_common';
4
4
  import { printMessage, verboseMessage } from '../../utils/Console';
5
+ import { importAllConfigEntities, importAllRawConfigEntities, importConfigEntity } from '../../ops/IdmOps';
5
6
  const {
6
7
  getTokens
7
8
  } = Authenticate;
8
- const {
9
- importAllConfigEntities,
10
- importAllRawConfigEntities,
11
- importConfigEntity
12
- } = Idm;
13
9
  const program = new Command('frodo idm import');
14
10
  program.description('Import IDM configuration objects.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-N, --name <name>', 'Config entity name. E.g. "managed", "sync", "provisioner-<connector-name>", etc.')).addOption(new Option('-f, --file [file]', 'Import file. Ignored with -A.')).addOption(new Option('-E, --entities-file [entities-file]', 'Name of the entity file. Ignored with -A.')).addOption(new Option('-e, --env-file [envfile]', 'Name of the env file. Ignored with -A.')).addOption(new Option('-A, --all-separate', 'Import all IDM configuration objects into separate JSON files in directory -D. Ignored with -N, and -a.')).addOption(new Option('-D, --directory <directory>', 'Import directory. Required with and ignored without -a/-A.')).action(
15
11
  // implement command logic inside action handler
@@ -1 +1 @@
1
- {"version":3,"file":"idm-import.js","names":["Command","Option","Authenticate","Idm","state","common","printMessage","verboseMessage","getTokens","importAllConfigEntities","importAllRawConfigEntities","importConfigEntity","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","name","getRealm","file","allSeparate","directory","entitiesFile","envFile","help","parse"],"sources":["cli/idm/idm-import.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport { Authenticate, Idm, state } from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport { printMessage, verboseMessage } from '../../utils/Console';\n\nconst { getTokens } = Authenticate;\nconst {\n importAllConfigEntities,\n importAllRawConfigEntities,\n importConfigEntity,\n} = Idm;\n\nconst program = new Command('frodo idm import');\n\ninterface IdmImportOptions {\n type?: string;\n insecure?: string;\n verbose?: boolean;\n debug?: boolean;\n curlirize?: boolean;\n name?: string;\n file?: string;\n entitiesFile?: string;\n envFile?: string;\n all?: string;\n allSeparate?: string;\n directory?: string;\n}\n\nprogram\n .description('Import IDM configuration objects.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option(\n '-N, --name <name>',\n 'Config entity name. E.g. \"managed\", \"sync\", \"provisioner-<connector-name>\", etc.'\n )\n )\n .addOption(new Option('-f, --file [file]', 'Import file. Ignored with -A.'))\n .addOption(\n new Option(\n '-E, --entities-file [entities-file]',\n 'Name of the entity file. Ignored with -A.'\n )\n )\n .addOption(\n new Option(\n '-e, --env-file [envfile]',\n 'Name of the env file. Ignored with -A.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Import all IDM configuration objects into separate JSON files in directory -D. Ignored with -N, and -a.'\n )\n )\n .addOption(\n new Option(\n '-D, --directory <directory>',\n 'Import directory. Required with and ignored without -a/-A.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (\n host: string,\n realm: string,\n user: string,\n password: string,\n options: IdmImportOptions\n ) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n // import by id/name\n if (options.name && (await getTokens())) {\n verboseMessage(\n `Importing object \"${\n options.name\n }\" to realm \"${state.default.session.getRealm()}\"...`\n );\n await importConfigEntity(options.name, options.file);\n }\n // --all-separate -A\n else if (\n options.allSeparate &&\n options.directory &&\n options.entitiesFile &&\n options.envFile &&\n (await getTokens())\n ) {\n verboseMessage(\n `Importing IDM configuration objects specified in ${options.entitiesFile} into separate files in ${options.directory} using ${options.envFile} for variable replacement...`\n );\n await importAllConfigEntities(\n options.directory,\n options.entitiesFile,\n options.envFile\n );\n }\n // --all-separate -A without variable replacement\n else if (\n options.allSeparate &&\n options.directory &&\n (await getTokens())\n ) {\n verboseMessage(\n `Importing all IDM configuration objects into separate files in ${options.directory}...`\n );\n await importAllRawConfigEntities(options.directory);\n }\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
1
+ {"version":3,"file":"idm-import.js","names":["Command","Option","Authenticate","state","common","printMessage","verboseMessage","importAllConfigEntities","importAllRawConfigEntities","importConfigEntity","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","name","getRealm","file","allSeparate","directory","entitiesFile","envFile","help","parse"],"sources":["cli/idm/idm-import.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport { Authenticate, state } from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport { printMessage, verboseMessage } from '../../utils/Console';\nimport {\n importAllConfigEntities,\n importAllRawConfigEntities,\n importConfigEntity,\n} from '../../ops/IdmOps';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo idm import');\n\ninterface IdmImportOptions {\n type?: string;\n insecure?: string;\n verbose?: boolean;\n debug?: boolean;\n curlirize?: boolean;\n name?: string;\n file?: string;\n entitiesFile?: string;\n envFile?: string;\n all?: string;\n allSeparate?: string;\n directory?: string;\n}\n\nprogram\n .description('Import IDM configuration objects.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option(\n '-N, --name <name>',\n 'Config entity name. E.g. \"managed\", \"sync\", \"provisioner-<connector-name>\", etc.'\n )\n )\n .addOption(new Option('-f, --file [file]', 'Import file. Ignored with -A.'))\n .addOption(\n new Option(\n '-E, --entities-file [entities-file]',\n 'Name of the entity file. Ignored with -A.'\n )\n )\n .addOption(\n new Option(\n '-e, --env-file [envfile]',\n 'Name of the env file. Ignored with -A.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Import all IDM configuration objects into separate JSON files in directory -D. Ignored with -N, and -a.'\n )\n )\n .addOption(\n new Option(\n '-D, --directory <directory>',\n 'Import directory. Required with and ignored without -a/-A.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (\n host: string,\n realm: string,\n user: string,\n password: string,\n options: IdmImportOptions\n ) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n // import by id/name\n if (options.name && (await getTokens())) {\n verboseMessage(\n `Importing object \"${\n options.name\n }\" to realm \"${state.default.session.getRealm()}\"...`\n );\n await importConfigEntity(options.name, options.file);\n }\n // --all-separate -A\n else if (\n options.allSeparate &&\n options.directory &&\n options.entitiesFile &&\n options.envFile &&\n (await getTokens())\n ) {\n verboseMessage(\n `Importing IDM configuration objects specified in ${options.entitiesFile} into separate files in ${options.directory} using ${options.envFile} for variable replacement...`\n );\n await importAllConfigEntities(\n options.directory,\n options.entitiesFile,\n options.envFile\n );\n }\n // --all-separate -A without variable replacement\n else if (\n options.allSeparate &&\n options.directory &&\n (await getTokens())\n ) {\n verboseMessage(\n `Importing all IDM configuration objects into separate files in ${options.directory}...`\n );\n await importAllRawConfigEntities(options.directory);\n }\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
@@ -1,13 +1,11 @@
1
1
  import { Command } from 'commander';
2
- import { Authenticate, Idm, state } from '@rockcarver/frodo-lib';
2
+ import { Authenticate, state } from '@rockcarver/frodo-lib';
3
3
  import * as common from '../cmd_common';
4
4
  import { verboseMessage } from '../../utils/Console';
5
+ import { listAllConfigEntities } from '../../ops/IdmOps';
5
6
  const {
6
7
  getTokens
7
8
  } = Authenticate;
8
- const {
9
- listAllConfigEntities
10
- } = Idm;
11
9
  const program = new Command('frodo idm list');
12
10
  program.description('List IDM configuration objects.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption)
13
11
  // .addOption(
@@ -1 +1 @@
1
- {"version":3,"file":"idm-list.js","names":["Command","Authenticate","Idm","state","common","verboseMessage","getTokens","listAllConfigEntities","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","parse"],"sources":["cli/idm/idm-list.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { Authenticate, Idm, state } from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport { verboseMessage } from '../../utils/Console';\n\nconst { getTokens } = Authenticate;\nconst { listAllConfigEntities } = Idm;\n\nconst program = new Command('frodo idm list');\n\nprogram\n .description('List IDM configuration objects.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n // .addOption(\n // new Option('-l, --long', 'Long with all fields.').default(false, 'false')\n // )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n if (await getTokens()) {\n verboseMessage('Listing all IDM configuration objects...');\n listAllConfigEntities();\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,WAAW;AACnC,SAASC,YAAY,EAAEC,GAAG,EAAEC,KAAK,QAAQ,uBAAuB;AAChE,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,cAAc,QAAQ,qBAAqB;AAEpD,MAAM;EAAEC;AAAU,CAAC,GAAGL,YAAY;AAClC,MAAM;EAAEM;AAAsB,CAAC,GAAGL,GAAG;AAErC,MAAMM,OAAO,GAAG,IAAIR,OAAO,CAAC,gBAAgB,CAAC;AAE7CQ,OAAO,CACJC,WAAW,CAAC,iCAAiC,CAAC,CAC9CC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAChCC,kBAAkB,EAAE,CACpBC,WAAW,CAACR,MAAM,CAACS,aAAa,CAAC,CACjCD,WAAW,CAACR,MAAM,CAACU,aAAa,CAAC,CACjCF,WAAW,CAACR,MAAM,CAACW,YAAY,CAAC,CAChCH,WAAW,CAACR,MAAM,CAACY,gBAAgB,CAAC,CACpCC,SAAS,CAACb,MAAM,CAACc,gBAAgB,CAAC,CAClCD,SAAS,CAACb,MAAM,CAACe,cAAc,CAAC,CAChCF,SAAS,CAACb,MAAM,CAACgB,aAAa,CAAC,CAC/BH,SAAS,CAACb,MAAM,CAACiB,WAAW,CAAC,CAC7BJ,SAAS,CAACb,MAAM,CAACkB,eAAe;AACjC;AACA;AACA;AAAA,CACCC,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,KAAK;EAC9CzB,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACC,SAAS,CAACP,IAAI,CAAC;EACrCrB,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACE,QAAQ,CAACP,KAAK,CAAC;EACrCtB,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACG,WAAW,CAACP,IAAI,CAAC;EACvCvB,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACI,WAAW,CAACP,QAAQ,CAAC;EAC3CxB,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACK,iBAAiB,CAACP,OAAO,CAACQ,IAAI,CAAC;EACrDjC,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACO,0BAA0B,CAACT,OAAO,CAACU,QAAQ,CAAC;EAClEnC,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACS,UAAU,CAACX,OAAO,CAACY,OAAO,CAAC;EACjDrC,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACW,QAAQ,CAACb,OAAO,CAACc,KAAK,CAAC;EAC7CvC,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACa,YAAY,CAACf,OAAO,CAACgB,SAAS,CAAC;EACrD,IAAI,MAAMtC,SAAS,EAAE,EAAE;IACrBD,cAAc,CAAC,0CAA0C,CAAC;IAC1DE,qBAAqB,EAAE;EACzB;AACF;AACA;AAAA,CACD;;AAEHC,OAAO,CAACqC,KAAK,EAAE"}
1
+ {"version":3,"file":"idm-list.js","names":["Command","Authenticate","state","common","verboseMessage","listAllConfigEntities","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","parse"],"sources":["cli/idm/idm-list.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { Authenticate, state } from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport { verboseMessage } from '../../utils/Console';\nimport { listAllConfigEntities } from '../../ops/IdmOps';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo idm list');\n\nprogram\n .description('List IDM configuration objects.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n // .addOption(\n // new Option('-l, --long', 'Long with all fields.').default(false, 'false')\n // )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n if (await getTokens()) {\n verboseMessage('Listing all IDM configuration objects...');\n listAllConfigEntities();\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,WAAW;AACnC,SAASC,YAAY,EAAEC,KAAK,QAAQ,uBAAuB;AAC3D,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,cAAc,QAAQ,qBAAqB;AACpD,SAASC,qBAAqB,QAAQ,kBAAkB;AAExD,MAAM;EAAEC;AAAU,CAAC,GAAGL,YAAY;AAElC,MAAMM,OAAO,GAAG,IAAIP,OAAO,CAAC,gBAAgB,CAAC;AAE7CO,OAAO,CACJC,WAAW,CAAC,iCAAiC,CAAC,CAC9CC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAChCC,kBAAkB,EAAE,CACpBC,WAAW,CAACR,MAAM,CAACS,aAAa,CAAC,CACjCD,WAAW,CAACR,MAAM,CAACU,aAAa,CAAC,CACjCF,WAAW,CAACR,MAAM,CAACW,YAAY,CAAC,CAChCH,WAAW,CAACR,MAAM,CAACY,gBAAgB,CAAC,CACpCC,SAAS,CAACb,MAAM,CAACc,gBAAgB,CAAC,CAClCD,SAAS,CAACb,MAAM,CAACe,cAAc,CAAC,CAChCF,SAAS,CAACb,MAAM,CAACgB,aAAa,CAAC,CAC/BH,SAAS,CAACb,MAAM,CAACiB,WAAW,CAAC,CAC7BJ,SAAS,CAACb,MAAM,CAACkB,eAAe;AACjC;AACA;AACA;AAAA,CACCC,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,KAAK;EAC9CzB,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACC,SAAS,CAACP,IAAI,CAAC;EACrCrB,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACE,QAAQ,CAACP,KAAK,CAAC;EACrCtB,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACG,WAAW,CAACP,IAAI,CAAC;EACvCvB,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACI,WAAW,CAACP,QAAQ,CAAC;EAC3CxB,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACK,iBAAiB,CAACP,OAAO,CAACQ,IAAI,CAAC;EACrDjC,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACO,0BAA0B,CAACT,OAAO,CAACU,QAAQ,CAAC;EAClEnC,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACS,UAAU,CAACX,OAAO,CAACY,OAAO,CAAC;EACjDrC,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACW,QAAQ,CAACb,OAAO,CAACc,KAAK,CAAC;EAC7CvC,KAAK,CAAC0B,OAAO,CAACC,OAAO,CAACa,YAAY,CAACf,OAAO,CAACgB,SAAS,CAAC;EACrD,IAAI,MAAMrC,SAAS,EAAE,EAAE;IACrBF,cAAc,CAAC,0CAA0C,CAAC;IAC1DC,qBAAqB,EAAE;EACzB;AACF;AACA;AAAA,CACD;;AAEHE,OAAO,CAACqC,KAAK,EAAE"}
@@ -27,7 +27,7 @@ Following values are possible (values on the same line are equivalent): \
27
27
  \n2, INFO or INFORMATION\n3, DEBUG, FINE, FINER or FINEST\
28
28
  \n4 or ALL').default('ERROR', `${resolveLevel('ERROR')}`)).addOption(new Option('-t, --transaction-id <txid>', 'Filter by transactionId')).addOption(new Option('-b, --begin-timestamp <beginTs>', 'Begin timestamp for period (in ISO8601, example: "2022-10-13T19:06:28Z", or "2022-09.30". \
29
29
  Cannot be more than 30 days in the past. If not specified, logs from one hour ago are fetched \
30
- (-e is ignored)')).addOption(new Option('-e, --end-timestamp <endTs>', 'End timestamp for period. Default: "now"')).addOption(new Option('-s, --search-string <ss>', 'Filter by a specific string (ANDed with transactionID filter)')).addOption(new Option('-d, --defaults', 'Use default logging noise filters').default(false, `Use custom logging noise filters defined in ${config.getConfigPath()}/${config.FRODO_LOG_NOISEFILTER_FILENAME}`)).action(async (host, user, password, options, command) => {
30
+ (-e is ignored)')).addOption(new Option('-e, --end-timestamp <endTs>', 'End timestamp for period. Default: "now"')).addOption(new Option('-s, --search-string <ss>', 'Filter by a specific string (ANDed with transactionID filter)')).addOption(new Option('-d, --defaults', 'Use default logging noise filters').default(false, `Use custom logging noise filters defined in $HOME/${config.FRODO_LOG_NOISEFILTER_FILENAME}`)).action(async (host, user, password, options, command) => {
31
31
  let credsFromParameters = true;
32
32
  state.default.session.setTenant(host);
33
33
  state.default.session.setUsername(user);
@@ -1 +1 @@
1
- {"version":3,"file":"logs-fetch.js","names":["Command","Option","Authenticate","ConnectionProfile","Log","state","common","config","printMessage","provisionCreds","fetchLogs","resolveLevel","getConnectionProfile","saveConnectionProfile","getTokens","SECONDS_IN_30_DAYS","SECONDS_IN_1_HOUR","LOG_TIME_WINDOW_MAX","LOG_TIME_WINDOW_INCREMENT","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","userArgument","passwordArgument","addOption","insecureOption","verboseOption","debugOption","curlirizeOption","sourcesOptionM","default","getConfigPath","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","credsFromParameters","session","setTenant","setUsername","setPassword","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","conn","tenant","key","secret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","creds","api_key_id","api_key_secret","now","Date","beginTimestamp","tempStartDate","setTime","toISOString","tempEndDate","endTimestamp","beginTs","parse","intermediateEndTs","opts","sources","level","transactionId","searchString","getNoiseFilters","defaults"],"sources":["cli/logging/logs-fetch.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\n\nconst { provisionCreds, fetchLogs, resolveLevel } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst SECONDS_IN_30_DAYS = 2592000;\nconst SECONDS_IN_1_HOUR = 3600;\nconst LOG_TIME_WINDOW_MAX = SECONDS_IN_30_DAYS;\nconst LOG_TIME_WINDOW_INCREMENT = SECONDS_IN_1_HOUR;\n\nconst program = new Command('frodo logs fetch');\nprogram\n .description(\n 'Fetch Identity Cloud logs between a specified begin and end time period.\\\n WARNING: depending on filters and time period specified, this could take substantial time to complete.'\n )\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(common.sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option(\n '-b, --begin-timestamp <beginTs>',\n 'Begin timestamp for period (in ISO8601, example: \"2022-10-13T19:06:28Z\", or \"2022-09.30\". \\\nCannot be more than 30 days in the past. If not specified, logs from one hour ago are fetched \\\n(-e is ignored)'\n )\n )\n .addOption(\n new Option(\n '-e, --end-timestamp <endTs>',\n 'End timestamp for period. Default: \"now\"'\n )\n )\n .addOption(\n new Option(\n '-s, --search-string <ss>',\n 'Filter by a specific string (ANDed with transactionID filter)'\n )\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in ${config.getConfigPath()}/${\n config.FRODO_LOG_NOISEFILTER_FILENAME\n }`\n )\n )\n .action(async (host, user, password, options, command) => {\n let credsFromParameters = true;\n state.default.session.setTenant(host);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n const conn = await getConnectionProfile();\n state.default.session.setTenant(conn.tenant);\n if (conn.key != null && conn.secret != null) {\n credsFromParameters = false;\n state.default.session.setLogApiKey(conn.key);\n state.default.session.setLogApiSecret(conn.secret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (\n !state.default.session.getUsername() &&\n !state.default.session.getPassword()\n ) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.default.session.setUsername(conn.username);\n state.default.session.setPassword(conn.password);\n }\n if (await getTokens()) {\n const creds = await provisionCreds();\n state.default.session.setLogApiKey(creds.api_key_id);\n state.default.session.setLogApiSecret(creds.api_key_secret);\n }\n }\n const now = Date.now() / 1000;\n if (\n typeof options.beginTimestamp === 'undefined' ||\n !options.beginTimestamp\n ) {\n // no beginTimestamp value specified, default is 1 hour ago\n const tempStartDate = new Date();\n tempStartDate.setTime((now - SECONDS_IN_1_HOUR) * 1000);\n options.beginTimestamp = tempStartDate.toISOString();\n // also override endTimestamp to now\n const tempEndDate = new Date();\n tempEndDate.setTime(now * 1000);\n options.endTimestamp = tempEndDate;\n printMessage(\n 'No timestamps specified, defaulting to logs from 1 hour ago',\n 'info'\n );\n }\n if (typeof options.endTimestamp === 'undefined' || !options.endTimestamp) {\n // no endTimestamp value specified, default is now\n options.endTimestamp = now * 1000;\n printMessage(\n 'No end timestamp specified, defaulting end timestamp to \"now\"',\n 'info'\n );\n }\n let beginTs = Date.parse(options.beginTimestamp) / 1000;\n if (Date.parse(options.endTimestamp) / 1000 < beginTs) {\n printMessage('End timestamp can not be before begin timestamp', 'error');\n return;\n }\n if (now - beginTs > LOG_TIME_WINDOW_MAX) {\n printMessage(\n 'Begin timestamp can not be more than 30 days in the past',\n 'error'\n );\n return;\n }\n let intermediateEndTs = 0;\n printMessage(\n `Fetching ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${resolveLevel(command.opts().level)}]...`\n );\n if (credsFromParameters) await saveConnectionProfile(); // save new values if they were specified on CLI\n\n do {\n intermediateEndTs = beginTs + LOG_TIME_WINDOW_INCREMENT;\n await fetchLogs(\n command.opts().sources,\n new Date(beginTs * 1000).toISOString(),\n new Date(intermediateEndTs * 1000).toISOString(),\n resolveLevel(command.opts().level),\n command.opts().transactionId,\n command.opts().searchString,\n null,\n config.getNoiseFilters(options.defaults)\n );\n beginTs = intermediateEndTs;\n } while (intermediateEndTs < Date.parse(options.endTimestamp) / 1000);\n });\n\nprogram.parse();\n"],"mappings":"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"}
1
+ {"version":3,"file":"logs-fetch.js","names":["Command","Option","Authenticate","ConnectionProfile","Log","state","common","config","printMessage","provisionCreds","fetchLogs","resolveLevel","getConnectionProfile","saveConnectionProfile","getTokens","SECONDS_IN_30_DAYS","SECONDS_IN_1_HOUR","LOG_TIME_WINDOW_MAX","LOG_TIME_WINDOW_INCREMENT","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","userArgument","passwordArgument","addOption","insecureOption","verboseOption","debugOption","curlirizeOption","sourcesOptionM","default","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","credsFromParameters","session","setTenant","setUsername","setPassword","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","conn","tenant","key","secret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","creds","api_key_id","api_key_secret","now","Date","beginTimestamp","tempStartDate","setTime","toISOString","tempEndDate","endTimestamp","beginTs","parse","intermediateEndTs","opts","sources","level","transactionId","searchString","getNoiseFilters","defaults"],"sources":["cli/logging/logs-fetch.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\n\nconst { provisionCreds, fetchLogs, resolveLevel } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst SECONDS_IN_30_DAYS = 2592000;\nconst SECONDS_IN_1_HOUR = 3600;\nconst LOG_TIME_WINDOW_MAX = SECONDS_IN_30_DAYS;\nconst LOG_TIME_WINDOW_INCREMENT = SECONDS_IN_1_HOUR;\n\nconst program = new Command('frodo logs fetch');\nprogram\n .description(\n 'Fetch Identity Cloud logs between a specified begin and end time period.\\\n WARNING: depending on filters and time period specified, this could take substantial time to complete.'\n )\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(common.sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option(\n '-b, --begin-timestamp <beginTs>',\n 'Begin timestamp for period (in ISO8601, example: \"2022-10-13T19:06:28Z\", or \"2022-09.30\". \\\nCannot be more than 30 days in the past. If not specified, logs from one hour ago are fetched \\\n(-e is ignored)'\n )\n )\n .addOption(\n new Option(\n '-e, --end-timestamp <endTs>',\n 'End timestamp for period. Default: \"now\"'\n )\n )\n .addOption(\n new Option(\n '-s, --search-string <ss>',\n 'Filter by a specific string (ANDed with transactionID filter)'\n )\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in $HOME/${config.FRODO_LOG_NOISEFILTER_FILENAME}`\n )\n )\n .action(async (host, user, password, options, command) => {\n let credsFromParameters = true;\n state.default.session.setTenant(host);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n const conn = await getConnectionProfile();\n state.default.session.setTenant(conn.tenant);\n if (conn.key != null && conn.secret != null) {\n credsFromParameters = false;\n state.default.session.setLogApiKey(conn.key);\n state.default.session.setLogApiSecret(conn.secret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (\n !state.default.session.getUsername() &&\n !state.default.session.getPassword()\n ) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.default.session.setUsername(conn.username);\n state.default.session.setPassword(conn.password);\n }\n if (await getTokens()) {\n const creds = await provisionCreds();\n state.default.session.setLogApiKey(creds.api_key_id);\n state.default.session.setLogApiSecret(creds.api_key_secret);\n }\n }\n const now = Date.now() / 1000;\n if (\n typeof options.beginTimestamp === 'undefined' ||\n !options.beginTimestamp\n ) {\n // no beginTimestamp value specified, default is 1 hour ago\n const tempStartDate = new Date();\n tempStartDate.setTime((now - SECONDS_IN_1_HOUR) * 1000);\n options.beginTimestamp = tempStartDate.toISOString();\n // also override endTimestamp to now\n const tempEndDate = new Date();\n tempEndDate.setTime(now * 1000);\n options.endTimestamp = tempEndDate;\n printMessage(\n 'No timestamps specified, defaulting to logs from 1 hour ago',\n 'info'\n );\n }\n if (typeof options.endTimestamp === 'undefined' || !options.endTimestamp) {\n // no endTimestamp value specified, default is now\n options.endTimestamp = now * 1000;\n printMessage(\n 'No end timestamp specified, defaulting end timestamp to \"now\"',\n 'info'\n );\n }\n let beginTs = Date.parse(options.beginTimestamp) / 1000;\n if (Date.parse(options.endTimestamp) / 1000 < beginTs) {\n printMessage('End timestamp can not be before begin timestamp', 'error');\n return;\n }\n if (now - beginTs > LOG_TIME_WINDOW_MAX) {\n printMessage(\n 'Begin timestamp can not be more than 30 days in the past',\n 'error'\n );\n return;\n }\n let intermediateEndTs = 0;\n printMessage(\n `Fetching ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${resolveLevel(command.opts().level)}]...`\n );\n if (credsFromParameters) await saveConnectionProfile(); // save new values if they were specified on CLI\n\n do {\n intermediateEndTs = beginTs + LOG_TIME_WINDOW_INCREMENT;\n await fetchLogs(\n command.opts().sources,\n new Date(beginTs * 1000).toISOString(),\n new Date(intermediateEndTs * 1000).toISOString(),\n resolveLevel(command.opts().level),\n command.opts().transactionId,\n command.opts().searchString,\n null,\n config.getNoiseFilters(options.defaults)\n );\n beginTs = intermediateEndTs;\n } while (intermediateEndTs < Date.parse(options.endTimestamp) / 1000);\n });\n\nprogram.parse();\n"],"mappings":"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"}
@@ -20,7 +20,7 @@ program.description('Tail Identity Cloud logs.').helpOption('-h, --help', 'Help'
20
20
  Following values are possible (values on the same line are equivalent): \
21
21
  \n0, SEVERE, FATAL, or ERROR\n1, WARNING, WARN or CONFIG\
22
22
  \n2, INFO or INFORMATION\n3, DEBUG, FINE, FINER or FINEST\
23
- \n4 or ALL').default('ERROR', `${resolveLevel('ERROR')}`)).addOption(new Option('-t, --transaction-id <txid>', 'Filter by transactionId')).addOption(new Option('-d, --defaults', 'Use default logging noise filters').default(false, `Use custom logging noise filters defined in ${config.getConfigPath()}/${config.FRODO_LOG_NOISEFILTER_FILENAME}`)).action(async (host, user, password, options, command) => {
23
+ \n4 or ALL').default('ERROR', `${resolveLevel('ERROR')}`)).addOption(new Option('-t, --transaction-id <txid>', 'Filter by transactionId')).addOption(new Option('-d, --defaults', 'Use default logging noise filters').default(false, `Use custom logging noise filters defined in $HOME/${config.FRODO_LOG_NOISEFILTER_FILENAME}`)).action(async (host, user, password, options, command) => {
24
24
  let credsFromParameters = true;
25
25
  state.default.session.setTenant(host);
26
26
  state.default.session.setUsername(user);
@@ -1 +1 @@
1
- {"version":3,"file":"logs-tail.js","names":["Command","Option","Authenticate","ConnectionProfile","Log","state","common","config","printMessage","provisionCreds","tailLogs","resolveLevel","getConnectionProfile","saveConnectionProfile","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","userArgument","passwordArgument","addOption","insecureOption","verboseOption","debugOption","curlirizeOption","sourcesOptionM","default","getConfigPath","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","credsFromParameters","session","setTenant","setUsername","setPassword","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","conn","tenant","key","secret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","creds","api_key_id","api_key_secret","opts","sources","level","transactionId","getNoiseFilters","defaults","parse"],"sources":["cli/logging/logs-tail.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\n\nconst { provisionCreds, tailLogs, resolveLevel } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo logs tail');\nprogram\n .description('Tail Identity Cloud logs.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(common.sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in ${config.getConfigPath()}/${\n config.FRODO_LOG_NOISEFILTER_FILENAME\n }`\n )\n )\n .action(async (host, user, password, options, command) => {\n let credsFromParameters = true;\n state.default.session.setTenant(host);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n const conn = await getConnectionProfile();\n state.default.session.setTenant(conn.tenant);\n if (conn.key != null && conn.secret != null) {\n credsFromParameters = false;\n state.default.session.setLogApiKey(conn.key);\n state.default.session.setLogApiSecret(conn.secret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (\n !state.default.session.getUsername() &&\n !state.default.session.getPassword()\n ) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.default.session.setUsername(conn.username);\n state.default.session.setPassword(conn.password);\n }\n if (await getTokens()) {\n const creds = await provisionCreds();\n state.default.session.setLogApiKey(creds.api_key_id);\n state.default.session.setLogApiSecret(creds.api_key_secret);\n }\n }\n printMessage(\n `Tailing ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${resolveLevel(command.opts().level)}]...`\n );\n if (credsFromParameters) await saveConnectionProfile(); // save new values if they were specified on CLI\n await tailLogs(\n command.opts().sources,\n resolveLevel(command.opts().level),\n command.opts().transactionId,\n null,\n config.getNoiseFilters(options.defaults)\n );\n });\n\nprogram.parse();\n"],"mappings":"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"}
1
+ {"version":3,"file":"logs-tail.js","names":["Command","Option","Authenticate","ConnectionProfile","Log","state","common","config","printMessage","provisionCreds","tailLogs","resolveLevel","getConnectionProfile","saveConnectionProfile","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","userArgument","passwordArgument","addOption","insecureOption","verboseOption","debugOption","curlirizeOption","sourcesOptionM","default","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","credsFromParameters","session","setTenant","setUsername","setPassword","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","conn","tenant","key","secret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","creds","api_key_id","api_key_secret","opts","sources","level","transactionId","getNoiseFilters","defaults","parse"],"sources":["cli/logging/logs-tail.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\n\nconst { provisionCreds, tailLogs, resolveLevel } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo logs tail');\nprogram\n .description('Tail Identity Cloud logs.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(common.sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in $HOME/${config.FRODO_LOG_NOISEFILTER_FILENAME}`\n )\n )\n .action(async (host, user, password, options, command) => {\n let credsFromParameters = true;\n state.default.session.setTenant(host);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n const conn = await getConnectionProfile();\n state.default.session.setTenant(conn.tenant);\n if (conn.key != null && conn.secret != null) {\n credsFromParameters = false;\n state.default.session.setLogApiKey(conn.key);\n state.default.session.setLogApiSecret(conn.secret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (\n !state.default.session.getUsername() &&\n !state.default.session.getPassword()\n ) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.default.session.setUsername(conn.username);\n state.default.session.setPassword(conn.password);\n }\n if (await getTokens()) {\n const creds = await provisionCreds();\n state.default.session.setLogApiKey(creds.api_key_id);\n state.default.session.setLogApiSecret(creds.api_key_secret);\n }\n }\n printMessage(\n `Tailing ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${resolveLevel(command.opts().level)}]...`\n );\n if (credsFromParameters) await saveConnectionProfile(); // save new values if they were specified on CLI\n await tailLogs(\n command.opts().sources,\n resolveLevel(command.opts().level),\n command.opts().transactionId,\n null,\n config.getNoiseFilters(options.defaults)\n );\n });\n\nprogram.parse();\n"],"mappings":"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"}
@@ -0,0 +1,317 @@
1
+ /* eslint-disable no-await-in-loop */
2
+ import fs from 'fs';
3
+ import fse from 'fs-extra';
4
+ import path from 'path';
5
+ import propertiesReader from 'properties-reader';
6
+ import replaceall from 'replaceall';
7
+ import { Idm, Utils, ValidationUtils } from '@rockcarver/frodo-lib';
8
+ import { createProgressIndicator, printMessage, stopProgressIndicator } from '../utils/Console';
9
+ import { getTypedFilename } from '../utils/ExportImportUtils';
10
+ const {
11
+ readFiles,
12
+ unSubstituteEnvParams
13
+ } = Utils;
14
+ const {
15
+ validateScriptHooks
16
+ } = ValidationUtils;
17
+ const {
18
+ getAllConfigEntities,
19
+ getConfigEntity,
20
+ putConfigEntity,
21
+ queryAllManagedObjectsByType
22
+ } = Idm;
23
+ /**
24
+ * List all IDM configuration objects
25
+ */
26
+ export async function listAllConfigEntities() {
27
+ try {
28
+ const {
29
+ configurations
30
+ } = await getAllConfigEntities();
31
+ for (const configEntity of configurations) {
32
+ printMessage(`${configEntity._id}`, 'data');
33
+ }
34
+ } catch (getAllConfigEntitiesError) {
35
+ printMessage(getAllConfigEntitiesError, 'error');
36
+ printMessage(`Error getting config entities: ${getAllConfigEntitiesError}`, 'error');
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Export an IDM configuration object.
42
+ * @param {String} id the desired configuration object
43
+ * @param {String} file optional export file
44
+ */
45
+ export async function exportConfigEntity(id, file) {
46
+ let fileName = file;
47
+ if (!fileName) {
48
+ fileName = getTypedFilename(`${id}`, 'idm');
49
+ }
50
+ const configEntity = await getConfigEntity(id);
51
+ fs.writeFile(fileName, JSON.stringify(configEntity, null, 2), err => {
52
+ if (err) {
53
+ return printMessage(`ERROR - can't save ${id} export to file`, 'error');
54
+ }
55
+ return '';
56
+ });
57
+ }
58
+
59
+ /**
60
+ * Export all IDM configuration objects into separate JSON files in a directory specified by <directory>
61
+ * @param {String} directory export directory
62
+ */
63
+ export async function exportAllRawConfigEntities(directory) {
64
+ try {
65
+ const {
66
+ configurations
67
+ } = await getAllConfigEntities();
68
+ if (!fs.existsSync(directory)) {
69
+ fs.mkdirSync(directory);
70
+ }
71
+ createProgressIndicator('indeterminate', undefined, 'Exporting config objects...');
72
+ const entityPromises = [];
73
+ for (const configEntity of configurations) {
74
+ entityPromises.push(getConfigEntity(configEntity._id).catch(getConfigEntityError => {
75
+ var _getConfigEntityError, _getConfigEntityError2, _getConfigEntityError3, _getConfigEntityError4, _getConfigEntityError5, _getConfigEntityError6;
76
+ if (!(((_getConfigEntityError = getConfigEntityError.response) === null || _getConfigEntityError === void 0 ? void 0 : _getConfigEntityError.status) === 403 && ((_getConfigEntityError2 = getConfigEntityError.response) === null || _getConfigEntityError2 === void 0 ? void 0 : (_getConfigEntityError3 = _getConfigEntityError2.data) === null || _getConfigEntityError3 === void 0 ? void 0 : _getConfigEntityError3.message) === 'This operation is not available in ForgeRock Identity Cloud.') &&
77
+ // https://bugster.forgerock.org/jira/browse/OPENIDM-18270
78
+ !(((_getConfigEntityError4 = getConfigEntityError.response) === null || _getConfigEntityError4 === void 0 ? void 0 : _getConfigEntityError4.status) === 404 && ((_getConfigEntityError5 = getConfigEntityError.response) === null || _getConfigEntityError5 === void 0 ? void 0 : (_getConfigEntityError6 = _getConfigEntityError5.data) === null || _getConfigEntityError6 === void 0 ? void 0 : _getConfigEntityError6.message) === 'No configuration exists for id org.apache.felix.fileinstall/openidm')) {
79
+ var _getConfigEntityError7;
80
+ printMessage((_getConfigEntityError7 = getConfigEntityError.response) === null || _getConfigEntityError7 === void 0 ? void 0 : _getConfigEntityError7.data, 'error');
81
+ printMessage(`Error getting config entity ${configEntity._id}: ${getConfigEntityError}`, 'error');
82
+ }
83
+ }));
84
+ }
85
+ const results = await Promise.all(entityPromises);
86
+ for (const item of results) {
87
+ if (item != null) {
88
+ fse.outputFile(`${directory}/${item._id}.json`, JSON.stringify(item, null, 2), err => {
89
+ if (err) {
90
+ return printMessage(`ERROR - can't save config ${item._id} to file - ${err}`, 'error');
91
+ }
92
+ });
93
+ }
94
+ }
95
+ stopProgressIndicator('Exported config objects.', 'success');
96
+ } catch (getAllConfigEntitiesError) {
97
+ printMessage(getAllConfigEntitiesError, 'error');
98
+ printMessage(`Error getting config entities: ${getAllConfigEntitiesError}`, 'error');
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Export all IDM configuration objects
104
+ * @param {String} directory export directory
105
+ * @param {String} entitiesFile JSON file that specifies the config entities to export/import
106
+ * @param {String} envFile File that defines environment specific variables for replacement during configuration export/import
107
+ */
108
+ export async function exportAllConfigEntities(directory, entitiesFile, envFile) {
109
+ let entriesToExport = [];
110
+ // read list of entities to export
111
+ fs.readFile(entitiesFile, 'utf8', async (err, data) => {
112
+ if (err) throw err;
113
+ const entriesData = JSON.parse(data);
114
+ entriesToExport = entriesData.idm;
115
+ // console.log(`entriesToExport ${entriesToExport}`);
116
+
117
+ // read list of configs to parameterize for environment specific values
118
+ const envParams = propertiesReader(envFile);
119
+ try {
120
+ const {
121
+ configurations
122
+ } = await getAllConfigEntities();
123
+ // create export directory if not exist
124
+ if (!fs.existsSync(directory)) {
125
+ fs.mkdirSync(directory);
126
+ }
127
+ createProgressIndicator('indeterminate', undefined, 'Exporting config objects...');
128
+ const entityPromises = [];
129
+ for (const configEntity of configurations) {
130
+ if (entriesToExport.includes(configEntity._id)) {
131
+ entityPromises.push(getConfigEntity(configEntity._id));
132
+ }
133
+ }
134
+ const results = await Promise.all(entityPromises);
135
+ for (const item of results) {
136
+ if (item != null) {
137
+ let configEntityString = JSON.stringify(item, null, 2);
138
+ envParams.each((key, value) => {
139
+ configEntityString = replaceall(value, `\${${key}}`, configEntityString);
140
+ });
141
+ fse.outputFile(`${directory}/${item._id}.json`, configEntityString, error => {
142
+ if (err) {
143
+ return printMessage(`ERROR - can't save config ${item._id} to file - ${error}`, 'error');
144
+ }
145
+ });
146
+ }
147
+ }
148
+ stopProgressIndicator(null, 'success');
149
+ } catch (getAllConfigEntitiesError) {
150
+ printMessage(getAllConfigEntitiesError, 'error');
151
+ printMessage(`Error getting config entities: ${getAllConfigEntitiesError}`, 'error');
152
+ }
153
+ });
154
+ }
155
+
156
+ /**
157
+ * Import an IDM configuration object.
158
+ * @param entityId the configuration object to import
159
+ * @param file optional file to import
160
+ */
161
+ export async function importConfigEntity(entityId, file, validate) {
162
+ if (!file) {
163
+ file = getTypedFilename(entityId, 'idm');
164
+ }
165
+ const entityData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');
166
+ const jsObject = JSON.parse(entityData);
167
+ const isValid = validateScriptHooks(jsObject);
168
+ if (validate && !isValid) {
169
+ printMessage('Invalid IDM configuration object', 'error');
170
+ return;
171
+ }
172
+ try {
173
+ await putConfigEntity(entityId, entityData);
174
+ } catch (putConfigEntityError) {
175
+ printMessage(putConfigEntityError, 'error');
176
+ printMessage(`Error: ${putConfigEntityError}`, 'error');
177
+ }
178
+ }
179
+
180
+ /**
181
+ * Import all IDM configuration objects from separate JSON files in a directory specified by <directory>
182
+ * @param baseDirectory export directory
183
+ * @param validate validate script hooks
184
+ */
185
+ export async function importAllRawConfigEntities(baseDirectory, validate) {
186
+ if (!fs.existsSync(baseDirectory)) {
187
+ return;
188
+ }
189
+ const files = await readFiles(baseDirectory);
190
+ const jsonFiles = files.filter(({
191
+ path
192
+ }) => path.toLowerCase().endsWith('.json')).map(({
193
+ path,
194
+ content
195
+ }) => ({
196
+ // Remove .json extension
197
+ entityId: path.substring(0, path.length - 5),
198
+ content,
199
+ path
200
+ }));
201
+ let everyScriptValid = true;
202
+ for (const file of jsonFiles) {
203
+ const jsObject = JSON.parse(file.content);
204
+ const isScriptValid = validateScriptHooks(jsObject);
205
+ if (!isScriptValid) {
206
+ printMessage(`Invalid script hook in ${file.path}`, 'error');
207
+ everyScriptValid = false;
208
+ }
209
+ }
210
+ if (validate && !everyScriptValid) {
211
+ return;
212
+ }
213
+ createProgressIndicator('indeterminate', undefined, 'Importing config objects...');
214
+ const entityPromises = jsonFiles.map(file => {
215
+ return putConfigEntity(file.entityId, file.content);
216
+ });
217
+ const results = await Promise.allSettled(entityPromises);
218
+ const errors = results.filter(result => result.status === 'rejected');
219
+ if (errors.length > 0) {
220
+ printMessage(`Failed to import ${errors.length} config objects:`, 'error');
221
+ for (const error of errors) {
222
+ printMessage(`- ${error.reason}`, 'error');
223
+ }
224
+ stopProgressIndicator(`Failed to import ${errors.length} config objects`, 'error');
225
+ return;
226
+ }
227
+ stopProgressIndicator(`Imported ${results.length} config objects`, 'success');
228
+ }
229
+
230
+ /**
231
+ * Import all IDM configuration objects
232
+ * @param baseDirectory import directory
233
+ * @param entitiesFile JSON file that specifies the config entities to export/import
234
+ * @param envFile File that defines environment specific variables for replacement during configuration export/import
235
+ * @param validate validate script hooks
236
+ */
237
+ export async function importAllConfigEntities(baseDirectory, entitiesFile, envFile, validate) {
238
+ if (!fs.existsSync(baseDirectory)) {
239
+ return;
240
+ }
241
+ const entriesToImport = JSON.parse(fs.readFileSync(entitiesFile, 'utf8')).idm;
242
+ const envReader = propertiesReader(envFile);
243
+ const files = await readFiles(baseDirectory);
244
+ const jsonFiles = files.filter(({
245
+ path
246
+ }) => path.toLowerCase().endsWith('.json')).map(({
247
+ content,
248
+ path
249
+ }) => ({
250
+ // Remove .json extension
251
+ entityId: path.substring(0, path.length - 5),
252
+ content,
253
+ path
254
+ }));
255
+ let everyScriptValid = true;
256
+ for (const file of jsonFiles) {
257
+ const jsObject = JSON.parse(file.content);
258
+ const isScriptValid = validateScriptHooks(jsObject);
259
+ if (!isScriptValid) {
260
+ printMessage(`Invalid script hook in ${file.path}`, 'error');
261
+ everyScriptValid = false;
262
+ }
263
+ }
264
+ if (validate && !everyScriptValid) {
265
+ return;
266
+ }
267
+ createProgressIndicator('indeterminate', undefined, 'Importing config objects...');
268
+ const entityPromises = jsonFiles.filter(({
269
+ entityId
270
+ }) => {
271
+ return entriesToImport.includes(entityId);
272
+ }).map(({
273
+ entityId,
274
+ content
275
+ }) => {
276
+ const unsubstituted = unSubstituteEnvParams(content, envReader);
277
+ return putConfigEntity(entityId, unsubstituted);
278
+ });
279
+ const results = await Promise.allSettled(entityPromises);
280
+ const errors = results.filter(result => result.status === 'rejected');
281
+ if (errors.length > 0) {
282
+ printMessage(`Failed to import ${errors.length} config objects:`, 'error');
283
+ for (const error of errors) {
284
+ printMessage(`- ${error.reason}`, 'error');
285
+ }
286
+ stopProgressIndicator(`Failed to import ${errors.length} config objects`, 'error');
287
+ return;
288
+ }
289
+ stopProgressIndicator(`Imported ${results.length} config objects`, 'success');
290
+ }
291
+
292
+ /**
293
+ * Count number of managed objects of a given type
294
+ * @param {String} type managed object type, e.g. alpha_user
295
+ */
296
+ export async function countManagedObjects(type) {
297
+ let count = 0;
298
+ let result = {
299
+ result: [],
300
+ resultCount: 0,
301
+ pagedResultsCookie: null,
302
+ totalPagedResultsPolicy: 'NONE',
303
+ totalPagedResults: -1,
304
+ remainingPagedResults: -1
305
+ };
306
+ try {
307
+ do {
308
+ result = await queryAllManagedObjectsByType(type, [], result.pagedResultsCookie);
309
+ count += result.resultCount;
310
+ } while (result.pagedResultsCookie);
311
+ printMessage(`${type}: ${count}`);
312
+ } catch (error) {
313
+ printMessage(error.response.data, 'error');
314
+ printMessage(`Error querying managed objects by type: ${error}`, 'error');
315
+ }
316
+ }
317
+ //# sourceMappingURL=IdmOps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdmOps.js","names":["fs","fse","path","propertiesReader","replaceall","Idm","Utils","ValidationUtils","createProgressIndicator","printMessage","stopProgressIndicator","getTypedFilename","readFiles","unSubstituteEnvParams","validateScriptHooks","getAllConfigEntities","getConfigEntity","putConfigEntity","queryAllManagedObjectsByType","listAllConfigEntities","configurations","configEntity","_id","getAllConfigEntitiesError","exportConfigEntity","id","file","fileName","writeFile","JSON","stringify","err","exportAllRawConfigEntities","directory","existsSync","mkdirSync","undefined","entityPromises","push","catch","getConfigEntityError","response","status","data","message","results","Promise","all","item","outputFile","exportAllConfigEntities","entitiesFile","envFile","entriesToExport","readFile","entriesData","parse","idm","envParams","includes","configEntityString","each","key","value","error","importConfigEntity","entityId","validate","entityData","readFileSync","resolve","process","cwd","jsObject","isValid","putConfigEntityError","importAllRawConfigEntities","baseDirectory","files","jsonFiles","filter","toLowerCase","endsWith","map","content","substring","length","everyScriptValid","isScriptValid","allSettled","errors","result","reason","importAllConfigEntities","entriesToImport","envReader","unsubstituted","countManagedObjects","type","count","resultCount","pagedResultsCookie","totalPagedResultsPolicy","totalPagedResults","remainingPagedResults"],"sources":["ops/IdmOps.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\nimport fs from 'fs';\nimport fse from 'fs-extra';\nimport path from 'path';\nimport propertiesReader from 'properties-reader';\nimport replaceall from 'replaceall';\n\nimport { Idm, Utils, ValidationUtils } from '@rockcarver/frodo-lib';\nimport {\n createProgressIndicator,\n printMessage,\n stopProgressIndicator,\n} from '../utils/Console';\nimport { getTypedFilename } from '../utils/ExportImportUtils';\n\nconst { readFiles, unSubstituteEnvParams } = Utils;\nconst { validateScriptHooks } = ValidationUtils;\nconst {\n getAllConfigEntities,\n getConfigEntity,\n putConfigEntity,\n queryAllManagedObjectsByType,\n} = Idm;\n/**\n * List all IDM configuration objects\n */\nexport async function listAllConfigEntities() {\n try {\n const { configurations } = await getAllConfigEntities();\n for (const configEntity of configurations) {\n printMessage(`${configEntity._id}`, 'data');\n }\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export an IDM configuration object.\n * @param {String} id the desired configuration object\n * @param {String} file optional export file\n */\nexport async function exportConfigEntity(id, file) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`${id}`, 'idm');\n }\n const configEntity = await getConfigEntity(id);\n fs.writeFile(fileName, JSON.stringify(configEntity, null, 2), (err) => {\n if (err) {\n return printMessage(`ERROR - can't save ${id} export to file`, 'error');\n }\n return '';\n });\n}\n\n/**\n * Export all IDM configuration objects into separate JSON files in a directory specified by <directory>\n * @param {String} directory export directory\n */\nexport async function exportAllRawConfigEntities(directory) {\n try {\n const { configurations } = await getAllConfigEntities();\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n entityPromises.push(\n getConfigEntity(configEntity._id).catch((getConfigEntityError) => {\n if (\n !(\n getConfigEntityError.response?.status === 403 &&\n getConfigEntityError.response?.data?.message ===\n 'This operation is not available in ForgeRock Identity Cloud.'\n ) &&\n // https://bugster.forgerock.org/jira/browse/OPENIDM-18270\n !(\n getConfigEntityError.response?.status === 404 &&\n getConfigEntityError.response?.data?.message ===\n 'No configuration exists for id org.apache.felix.fileinstall/openidm'\n )\n ) {\n printMessage(getConfigEntityError.response?.data, 'error');\n printMessage(\n `Error getting config entity ${configEntity._id}: ${getConfigEntityError}`,\n 'error'\n );\n }\n })\n );\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n fse.outputFile(\n `${directory}/${item._id}.json`,\n JSON.stringify(item, null, 2),\n (err) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${err}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator('Exported config objects.', 'success');\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all IDM configuration objects\n * @param {String} directory export directory\n * @param {String} entitiesFile JSON file that specifies the config entities to export/import\n * @param {String} envFile File that defines environment specific variables for replacement during configuration export/import\n */\nexport async function exportAllConfigEntities(\n directory,\n entitiesFile,\n envFile\n) {\n let entriesToExport = [];\n // read list of entities to export\n fs.readFile(entitiesFile, 'utf8', async (err, data) => {\n if (err) throw err;\n const entriesData = JSON.parse(data);\n entriesToExport = entriesData.idm;\n // console.log(`entriesToExport ${entriesToExport}`);\n\n // read list of configs to parameterize for environment specific values\n const envParams = propertiesReader(envFile);\n\n try {\n const { configurations } = await getAllConfigEntities();\n // create export directory if not exist\n if (!fs.existsSync(directory)) {\n fs.mkdirSync(directory);\n }\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Exporting config objects...'\n );\n const entityPromises = [];\n for (const configEntity of configurations) {\n if (entriesToExport.includes(configEntity._id)) {\n entityPromises.push(getConfigEntity(configEntity._id));\n }\n }\n const results = await Promise.all(entityPromises);\n for (const item of results) {\n if (item != null) {\n let configEntityString = JSON.stringify(item, null, 2);\n envParams.each((key, value) => {\n configEntityString = replaceall(\n value,\n `\\${${key}}`,\n configEntityString\n );\n });\n fse.outputFile(\n `${directory}/${item._id}.json`,\n configEntityString,\n (error) => {\n if (err) {\n return printMessage(\n `ERROR - can't save config ${item._id} to file - ${error}`,\n 'error'\n );\n }\n }\n );\n }\n }\n stopProgressIndicator(null, 'success');\n } catch (getAllConfigEntitiesError) {\n printMessage(getAllConfigEntitiesError, 'error');\n printMessage(\n `Error getting config entities: ${getAllConfigEntitiesError}`,\n 'error'\n );\n }\n });\n}\n\n/**\n * Import an IDM configuration object.\n * @param entityId the configuration object to import\n * @param file optional file to import\n */\nexport async function importConfigEntity(\n entityId: string,\n file?: string,\n validate?: boolean\n) {\n if (!file) {\n file = getTypedFilename(entityId, 'idm');\n }\n\n const entityData = fs.readFileSync(path.resolve(process.cwd(), file), 'utf8');\n\n const jsObject = JSON.parse(entityData);\n const isValid = validateScriptHooks(jsObject);\n if (validate && !isValid) {\n printMessage('Invalid IDM configuration object', 'error');\n return;\n }\n\n try {\n await putConfigEntity(entityId, entityData);\n } catch (putConfigEntityError) {\n printMessage(putConfigEntityError, 'error');\n printMessage(`Error: ${putConfigEntityError}`, 'error');\n }\n}\n\n/**\n * Import all IDM configuration objects from separate JSON files in a directory specified by <directory>\n * @param baseDirectory export directory\n * @param validate validate script hooks\n */\nexport async function importAllRawConfigEntities(\n baseDirectory: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ path, content }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = validateScriptHooks(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles.map((file) => {\n return putConfigEntity(file.entityId, file.content);\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Import all IDM configuration objects\n * @param baseDirectory import directory\n * @param entitiesFile JSON file that specifies the config entities to export/import\n * @param envFile File that defines environment specific variables for replacement during configuration export/import\n * @param validate validate script hooks\n */\nexport async function importAllConfigEntities(\n baseDirectory: string,\n entitiesFile: string,\n envFile: string,\n validate?: boolean\n) {\n if (!fs.existsSync(baseDirectory)) {\n return;\n }\n const entriesToImport = JSON.parse(fs.readFileSync(entitiesFile, 'utf8')).idm;\n\n const envReader = propertiesReader(envFile);\n\n const files = await readFiles(baseDirectory);\n const jsonFiles = files\n .filter(({ path }) => path.toLowerCase().endsWith('.json'))\n .map(({ content, path }) => ({\n // Remove .json extension\n entityId: path.substring(0, path.length - 5),\n content,\n path,\n }));\n\n let everyScriptValid = true;\n for (const file of jsonFiles) {\n const jsObject = JSON.parse(file.content);\n const isScriptValid = validateScriptHooks(jsObject);\n if (!isScriptValid) {\n printMessage(`Invalid script hook in ${file.path}`, 'error');\n everyScriptValid = false;\n }\n }\n\n if (validate && !everyScriptValid) {\n return;\n }\n\n createProgressIndicator(\n 'indeterminate',\n undefined,\n 'Importing config objects...'\n );\n\n const entityPromises = jsonFiles\n .filter(({ entityId }) => {\n return entriesToImport.includes(entityId);\n })\n .map(({ entityId, content }) => {\n const unsubstituted = unSubstituteEnvParams(content, envReader);\n return putConfigEntity(entityId, unsubstituted);\n });\n\n const results = await Promise.allSettled(entityPromises);\n const errors = results.filter(\n (result): result is PromiseRejectedResult => result.status === 'rejected'\n );\n\n if (errors.length > 0) {\n printMessage(`Failed to import ${errors.length} config objects:`, 'error');\n for (const error of errors) {\n printMessage(`- ${error.reason}`, 'error');\n }\n stopProgressIndicator(\n `Failed to import ${errors.length} config objects`,\n 'error'\n );\n return;\n }\n\n stopProgressIndicator(`Imported ${results.length} config objects`, 'success');\n}\n\n/**\n * Count number of managed objects of a given type\n * @param {String} type managed object type, e.g. alpha_user\n */\nexport async function countManagedObjects(type) {\n let count = 0;\n let result = {\n result: [],\n resultCount: 0,\n pagedResultsCookie: null,\n totalPagedResultsPolicy: 'NONE',\n totalPagedResults: -1,\n remainingPagedResults: -1,\n };\n try {\n do {\n result = await queryAllManagedObjectsByType(\n type,\n [],\n result.pagedResultsCookie\n );\n count += result.resultCount;\n } while (result.pagedResultsCookie);\n printMessage(`${type}: ${count}`);\n } catch (error) {\n printMessage(error.response.data, 'error');\n printMessage(`Error querying managed objects by type: ${error}`, 'error');\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rockcarver/frodo-cli",
3
- "version": "0.18.2-11",
3
+ "version": "0.18.2-13",
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": [
@@ -88,7 +88,7 @@
88
88
  ]
89
89
  },
90
90
  "dependencies": {
91
- "@rockcarver/frodo-lib": "0.16.2-13",
91
+ "@rockcarver/frodo-lib": "0.16.2-14",
92
92
  "cli-progress": "^3.11.2",
93
93
  "cli-table3": "^0.6.3",
94
94
  "colors": "^1.4.0",
@@ -96,8 +96,10 @@
96
96
  "compare-versions": "^5.0.1",
97
97
  "lodash": "^4.17.21",
98
98
  "nanospinner": "^1.1.0",
99
- "uuid": "^9.0.0",
99
+ "properties-reader": "^2.2.0",
100
+ "replaceall": "^0.1.6",
100
101
  "slugify": "^1.6.5",
102
+ "uuid": "^9.0.0",
101
103
  "yesno": "^0.4.0"
102
104
  },
103
105
  "devDependencies": {