@rockcarver/frodo-cli 2.0.0-14 → 2.0.0-16

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.
Files changed (65) hide show
  1. package/CHANGELOG.md +13 -1
  2. package/esm/app.js +2 -0
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/FrodoCommand.js +11 -1
  5. package/esm/cli/FrodoCommand.js.map +1 -1
  6. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js +1 -1
  7. package/esm/cli/admin/admin-create-oauth2-client-with-admin-privileges.js.map +1 -1
  8. package/esm/cli/admin/admin-get-access-token.js +1 -1
  9. package/esm/cli/admin/admin-get-access-token.js.map +1 -1
  10. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js +2 -2
  11. package/esm/cli/admin/admin-grant-oauth2-client-admin-privileges.js.map +1 -1
  12. package/esm/cli/admin/admin-remove-static-user-mapping.js +3 -2
  13. package/esm/cli/admin/admin-remove-static-user-mapping.js.map +1 -1
  14. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js +2 -2
  15. package/esm/cli/admin/admin-revoke-oauth2-client-admin-privileges.js.map +1 -1
  16. package/esm/cli/app/app-delete.js +21 -5
  17. package/esm/cli/app/app-delete.js.map +1 -1
  18. package/esm/cli/app/app-describe.js +2 -1
  19. package/esm/cli/app/app-describe.js.map +1 -1
  20. package/esm/cli/app/app-export.js +8 -7
  21. package/esm/cli/app/app-export.js.map +1 -1
  22. package/esm/cli/app/app-import.js +11 -10
  23. package/esm/cli/app/app-import.js.map +1 -1
  24. package/esm/cli/app/app-list.js +5 -4
  25. package/esm/cli/app/app-list.js.map +1 -1
  26. package/esm/cli/app/app.js +6 -10
  27. package/esm/cli/app/app.js.map +1 -1
  28. package/esm/cli/conn/conn-save.js +4 -4
  29. package/esm/cli/conn/conn-save.js.map +1 -1
  30. package/esm/cli/info/info.js +1 -1
  31. package/esm/cli/info/info.js.map +1 -1
  32. package/esm/cli/oauth/oauth-client-delete.js +22 -0
  33. package/esm/cli/oauth/oauth-client-delete.js.map +1 -0
  34. package/esm/cli/oauth/oauth-client-describe.js +22 -0
  35. package/esm/cli/oauth/oauth-client-describe.js.map +1 -0
  36. package/esm/cli/oauth/oauth-client-export.js +52 -0
  37. package/esm/cli/oauth/oauth-client-export.js.map +1 -0
  38. package/esm/cli/oauth/oauth-client-import.js +57 -0
  39. package/esm/cli/oauth/oauth-client-import.js.map +1 -0
  40. package/esm/cli/oauth/oauth-client-list.js +25 -0
  41. package/esm/cli/oauth/oauth-client-list.js.map +1 -0
  42. package/esm/cli/oauth/oauth-client.js +14 -0
  43. package/esm/cli/oauth/oauth-client.js.map +1 -0
  44. package/esm/cli/oauth/oauth.js +13 -0
  45. package/esm/cli/oauth/oauth.js.map +1 -0
  46. package/esm/cli/shell/shell.js.map +1 -1
  47. package/esm/ops/ApplicationOps.js +309 -0
  48. package/esm/ops/ApplicationOps.js.map +1 -0
  49. package/esm/ops/IdmOps.js +11 -11
  50. package/esm/ops/IdmOps.js.map +1 -1
  51. package/esm/ops/JourneyOps.js +2 -2
  52. package/esm/ops/JourneyOps.js.map +1 -1
  53. package/esm/ops/OAuth2ClientOps.js +3 -3
  54. package/esm/ops/OAuth2ClientOps.js.map +1 -1
  55. package/esm/ops/PolicyOps.js.map +1 -1
  56. package/esm/ops/PolicySetOps.js.map +1 -1
  57. package/esm/ops/ResourceTypeOps.js +8 -8
  58. package/esm/ops/ResourceTypeOps.js.map +1 -1
  59. package/esm/ops/ScriptOps.js +8 -8
  60. package/esm/ops/ScriptOps.js.map +1 -1
  61. package/esm/ops/ServiceOps.js +8 -8
  62. package/esm/ops/ServiceOps.js.map +1 -1
  63. package/esm/utils/ExportImportUtils.js +8 -2
  64. package/esm/utils/ExportImportUtils.js.map +1 -1
  65. package/package.json +11 -11
package/CHANGELOG.md CHANGED
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.0.0-15] - 2023-08-17
11
+
12
+ ### Fixed
13
+
14
+ - \#276: `frodo script import -A --watch <tenant>` (preceeded by `frodo script export -A --extract <tenant>`) now properly reports errors like scripts not compiling or any REST errors but won't exit the watch thread but keep on watching and pushing local changes to `<tenant>`.
15
+
16
+ ## [2.0.0-14] - 2023-08-16
17
+
10
18
  ### Changed
11
19
 
12
20
  - Update to frodo-lib 2.0.0-21
@@ -1337,7 +1345,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1337
1345
  - Fixed problem with adding connection profiles
1338
1346
  - Miscellaneous bug fixes
1339
1347
 
1340
- [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-13...HEAD
1348
+ [Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-15...HEAD
1349
+
1350
+ [2.0.0-15]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-14...v2.0.0-15
1351
+
1352
+ [2.0.0-14]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-13...v2.0.0-14
1341
1353
 
1342
1354
  [2.0.0-13]: https://github.com/rockcarver/frodo-cli/compare/v2.0.0-12...v2.0.0-13
1343
1355
 
package/esm/app.js CHANGED
@@ -14,6 +14,7 @@ import idp from './cli/idp/idp';
14
14
  import info from './cli/info/info';
15
15
  import journey from './cli/journey/journey';
16
16
  import log from './cli/log/log';
17
+ import oauth from './cli/oauth/oauth';
17
18
  import realm from './cli/realm/realm';
18
19
  import saml from './cli/saml/saml';
19
20
  import script from './cli/script/script';
@@ -44,6 +45,7 @@ const {
44
45
  program.addCommand(info());
45
46
  program.addCommand(journey());
46
47
  program.addCommand(log());
48
+ program.addCommand(oauth());
47
49
  program.addCommand(realm());
48
50
  program.addCommand(saml());
49
51
  program.addCommand(script());
package/esm/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","names":["frodo","Command","admin","agent","app","authz","conn","email","esv","idm","idp","info","journey","log","realm","saml","script","service","shell","theme","printMessage","getVersions","initConnectionProfiles","program","version","addCommand","showHelpAfterError","enablePositionalOptions","parse","e","process","exitCode","stack"],"sources":["../src/app.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Command } from 'commander';\n\n// commands\nimport admin from './cli/admin/admin';\nimport agent from './cli/agent/agent';\nimport app from './cli/app/app';\nimport authz from './cli/authz/authz';\nimport conn from './cli/conn/conn';\nimport email from './cli/email/email';\nimport esv from './cli/esv/esv';\nimport idm from './cli/idm/idm';\nimport idp from './cli/idp/idp';\nimport info from './cli/info/info';\nimport journey from './cli/journey/journey';\nimport log from './cli/log/log';\nimport realm from './cli/realm/realm';\nimport saml from './cli/saml/saml';\nimport script from './cli/script/script';\nimport service from './cli/service/service';\nimport shell from './cli/shell/shell';\n// enable sample command template.\n// import something from './cli/_template/something';\nimport theme from './cli/theme/theme';\nimport { printMessage } from './utils/Console';\nimport { getVersions } from './utils/Version';\n\nconst { initConnectionProfiles } = frodo.conn;\n\n(async () => {\n try {\n const program = new Command('frodo').version(\n await getVersions(false),\n '-v, --version'\n );\n\n printMessage(await getVersions(true), 'text', false);\n\n await initConnectionProfiles();\n\n program.addCommand(admin());\n program.addCommand(agent());\n program.addCommand(authz());\n program.addCommand(app());\n program.addCommand(conn());\n program.addCommand(email());\n program.addCommand(esv());\n program.addCommand(idm());\n program.addCommand(idp());\n program.addCommand(info());\n program.addCommand(journey());\n program.addCommand(log());\n program.addCommand(realm());\n program.addCommand(saml());\n program.addCommand(script());\n program.addCommand(service());\n program.addCommand(shell());\n program.addCommand(theme());\n // enable sample command template.\n // program.addCommand(something());\n\n program.showHelpAfterError();\n program.enablePositionalOptions();\n program.parse();\n } catch (e) {\n process.exitCode = 1;\n printMessage(`ERROR: exception running frodo - ${e}`, 'error');\n printMessage(e.stack, 'error');\n }\n})();\n"],"mappings":"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"}
1
+ {"version":3,"file":"app.js","names":["frodo","Command","admin","agent","app","authz","conn","email","esv","idm","idp","info","journey","log","oauth","realm","saml","script","service","shell","theme","printMessage","getVersions","initConnectionProfiles","program","version","addCommand","showHelpAfterError","enablePositionalOptions","parse","e","process","exitCode","stack"],"sources":["../src/app.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Command } from 'commander';\n\n// commands\nimport admin from './cli/admin/admin';\nimport agent from './cli/agent/agent';\nimport app from './cli/app/app';\nimport authz from './cli/authz/authz';\nimport conn from './cli/conn/conn';\nimport email from './cli/email/email';\nimport esv from './cli/esv/esv';\nimport idm from './cli/idm/idm';\nimport idp from './cli/idp/idp';\nimport info from './cli/info/info';\nimport journey from './cli/journey/journey';\nimport log from './cli/log/log';\nimport oauth from './cli/oauth/oauth';\nimport realm from './cli/realm/realm';\nimport saml from './cli/saml/saml';\nimport script from './cli/script/script';\nimport service from './cli/service/service';\nimport shell from './cli/shell/shell';\n// enable sample command template.\n// import something from './cli/_template/something';\nimport theme from './cli/theme/theme';\nimport { printMessage } from './utils/Console';\nimport { getVersions } from './utils/Version';\n\nconst { initConnectionProfiles } = frodo.conn;\n\n(async () => {\n try {\n const program = new Command('frodo').version(\n await getVersions(false),\n '-v, --version'\n );\n\n printMessage(await getVersions(true), 'text', false);\n\n await initConnectionProfiles();\n\n program.addCommand(admin());\n program.addCommand(agent());\n program.addCommand(authz());\n program.addCommand(app());\n program.addCommand(conn());\n program.addCommand(email());\n program.addCommand(esv());\n program.addCommand(idm());\n program.addCommand(idp());\n program.addCommand(info());\n program.addCommand(journey());\n program.addCommand(log());\n program.addCommand(oauth());\n program.addCommand(realm());\n program.addCommand(saml());\n program.addCommand(script());\n program.addCommand(service());\n program.addCommand(shell());\n program.addCommand(theme());\n // enable sample command template.\n // program.addCommand(something());\n\n program.showHelpAfterError();\n program.enablePositionalOptions();\n program.parse();\n } catch (e) {\n process.exitCode = 1;\n printMessage(`ERROR: exception running frodo - ${e}`, 'error');\n printMessage(e.stack, 'error');\n }\n})();\n"],"mappings":"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"}
@@ -58,6 +58,16 @@ export class FrodoStubCommand extends Command {
58
58
  constructor(name) {
59
59
  super(name);
60
60
 
61
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
62
+ process.on('unhandledRejection', error => {
63
+ var _error$config, _error$config2, _error$response;
64
+ printMessage(`${(_error$config = error.config) !== null && _error$config !== void 0 && _error$config.method ? error.config.method + ' ' : ''}${(_error$config2 = error.config) !== null && _error$config2 !== void 0 && _error$config2.url ? error.config.url : ''}`, 'error');
65
+ printMessage((_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data, 'error');
66
+ printMessage(error.stack, 'error');
67
+ printMessage(`Please report this unhandled error here: https://github.com/rockcarver/frodo-cli/issues`, 'error');
68
+ process.exitCode = 1;
69
+ });
70
+
61
71
  // other default settings
62
72
  this.helpOption('-h, --help', 'Help');
63
73
  this.showHelpAfterError();
@@ -100,7 +110,7 @@ export class FrodoCommand extends FrodoStubCommand {
100
110
  }
101
111
 
102
112
  // additional help
103
- this.addHelpText('after', `\nEvironment Variables:\n` + ` FRODO_HOST: Access Management base URL. Overrides 'host' argument.\n` + ` FRODO_REALM: Realm. Overrides 'realm' argument.\n` + ` FRODO_USERNAME: Username. Overrides 'username' argument.\n` + ` FRODO_PASSWORD: Password. Overrides 'password' argument.\n` + ` FRODO_SA_ID: Service account uuid. Overrides '--sa-id' option.\n` + ` FRODO_SA_JWK: Service account JWK. Overrides '--sa-jwk-file' option but takes the actual JWK as a value, not a file name.\n` + ('frodo conn save' === this.name() ? ` FRODO_LOG_KEY: Log API key. Overrides '--log-api-key' option.\n` + ` FRODO_LOG_SECRET: Log API secret. Overrides '--log-api-secret' option.\n` : ``) + (this.name().startsWith('frodo logs') ? ` FRODO_LOG_KEY: Log API key. Overrides 'username' argument.\n` + ` FRODO_LOG_SECRET: Log API secret. Overrides 'password' argument.\n` : ``) + ` FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use.\n` + ` FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'.\n`);
113
+ this.addHelpText('after', `\nEvironment Variables:\n` + ` FRODO_HOST: Access Management base URL. Overrides 'host' argument.\n` + ` FRODO_REALM: Realm. Overrides 'realm' argument.\n` + ` FRODO_USERNAME: Username. Overrides 'username' argument.\n` + ` FRODO_PASSWORD: Password. Overrides 'password' argument.\n` + ` FRODO_SA_ID: Service account uuid. Overrides '--sa-id' option.\n` + ` FRODO_SA_JWK: Service account JWK. Overrides '--sa-jwk-file' option but takes the actual JWK as a value, not a file name.\n` + ('frodo conn save' === this.name() ? ` FRODO_LOG_KEY: Log API key. Overrides '--log-api-key' option.\n` + ` FRODO_LOG_SECRET: Log API secret. Overrides '--log-api-secret' option.\n` : ``) + (this.name().startsWith('frodo logs') ? ` FRODO_LOG_KEY: Log API key. Overrides 'username' argument.\n` + ` FRODO_LOG_SECRET: Log API secret. Overrides 'password' argument.\n` : ``) + ` FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use.\n` + ` FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'.\n` + ` FRODO_MASTER_KEY_PATH: Use this master key file instead of '~/.frodo/masterkey.key' file.\n` + ` FRODO_MASTER_KEY: Use this master key instead of '~/.frodo/masterkey.key' file. Takes precedence over FRODO_MASTER_KEY_PATH.\n`);
104
114
  }
105
115
 
106
116
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"FrodoCommand.js","names":["state","Argument","Command","Option","fs","globalConfig","createProgressIndicator","curlirizeMessage","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","verboseMessage","hostArgument","realmArgument","default","process","env","FRODO_REALM","DEFAULT_REALM_KEY","usernameArgument","passwordArgument","serviceAccountIdOption","serviceAccountJwkFileOption","deploymentOption","choices","DEPLOYMENT_TYPES","insecureOption","verboseOption","debugOption","curlirizeOption","defaultArgs","defaultOpts","stateMap","name","host","setHost","realm","setRealm","username","setUsername","password","setPassword","attributeName","saId","setServiceAccountId","file","data","readFileSync","jwk","JSON","parse","toString","setServiceAccountJwk","error","message","type","setDeploymentType","insecure","setAllowInsecureConnection","verbose","setVerbose","debug","setDebug","curlirize","setCurlirize","FrodoStubCommand","constructor","helpOption","showHelpAfterError","configureHelp","sortSubcommands","sortOptions","setPrintHandler","setVerboseHandler","setDebugHandler","setCurlirizeHandler","setCreateProgressHandler","setUpdateProgressHandler","setStopProgressHandler","FrodoCommand","omits","arg","includes","addArgument","opt","addOption","addHelpText","startsWith","handleDefaultArgsAndOpts","args","command","pop","options","i","v","entries","_args","length","Object","keys","handler","k"],"sources":["../../src/cli/FrodoCommand.ts"],"sourcesContent":["import { state } from '@rockcarver/frodo-lib';\nimport { Argument, Command, Option } from 'commander';\nimport fs from 'fs';\n\nimport * as globalConfig from '../storage/StaticStorage';\nimport {\n createProgressIndicator,\n curlirizeMessage,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n verboseMessage,\n} from '../utils/Console.js';\n\nconst hostArgument = new Argument(\n '[host]',\n 'Access Management base URL, e.g.: https://cdk.iam.example.com/am. To use a connection profile, just specify a unique substring.'\n);\n\nconst realmArgument = new Argument(\n '[realm]',\n \"Realm. Specify realm as '/' for the root realm or 'realm' or '/parent/child' otherwise.\"\n).default(\n // must check for FRODO_REALM env variable here because otherwise cli will overwrite realm with default value\n process.env.FRODO_REALM || globalConfig.DEFAULT_REALM_KEY,\n '\"alpha\" for Identity Cloud tenants, \"/\" otherwise.'\n);\n\nconst usernameArgument = new Argument(\n '[username]',\n 'Username to login with. Must be an admin user with appropriate rights to manage authentication journeys/trees.'\n);\n\nconst passwordArgument = new Argument('[password]', 'Password.');\n\nconst serviceAccountIdOption = new Option(\n '--sa-id <sa-id>',\n 'Service account id.'\n);\n\nconst serviceAccountJwkFileOption = new Option(\n '--sa-jwk-file <file>',\n 'File containing the JSON Web Key (JWK) associated with the the service account.'\n);\n\nconst deploymentOption = new Option(\n '-m, --type <type>',\n 'Override auto-detected deployment type. Valid values for type: \\n\\\nclassic: A classic Access Management-only deployment with custom layout and configuration. \\n\\\ncloud: A ForgeRock Identity Cloud environment. \\n\\\nforgeops: A ForgeOps CDK or CDM deployment. \\n\\\nThe detected or provided deployment type controls certain behavior like obtaining an Identity \\\nManagement admin token or not and whether to export/import referenced email templates or how \\\nto walk through the tenant admin login flow of Identity Cloud and handle MFA'\n).choices(globalConfig.DEPLOYMENT_TYPES);\n\nconst insecureOption = new Option(\n '-k, --insecure',\n 'Allow insecure connections when using SSL/TLS. Has no effect when using a network proxy for https (HTTPS_PROXY=http://<host>:<port>), in that case the proxy must provide this capability.'\n).default(false, \"Don't allow insecure connections\");\n\nconst verboseOption = new Option(\n '--verbose',\n 'Verbose output during command execution. If specified, may or may not produce additional output.'\n);\n\nconst debugOption = new Option(\n '--debug',\n 'Debug output during command execution. If specified, may or may not produce additional output helpful for troubleshooting.'\n);\n\nconst curlirizeOption = new Option(\n '--curlirize',\n 'Output all network calls in curl format.'\n);\n\nconst defaultArgs = [\n hostArgument,\n realmArgument,\n usernameArgument,\n passwordArgument,\n];\n\nconst defaultOpts = [\n serviceAccountIdOption,\n serviceAccountJwkFileOption,\n deploymentOption,\n insecureOption,\n verboseOption,\n debugOption,\n curlirizeOption,\n];\n\nconst stateMap = {\n [hostArgument.name()]: (host: string) => state.setHost(host),\n [realmArgument.name()]: (realm: string) => state.setRealm(realm),\n [usernameArgument.name()]: (username: string) => state.setUsername(username),\n [passwordArgument.name()]: (password: string) => state.setPassword(password),\n [serviceAccountIdOption.attributeName()]: (saId: string) =>\n state.setServiceAccountId(saId),\n [serviceAccountJwkFileOption.attributeName()]: (file: string) => {\n try {\n const data = fs.readFileSync(file);\n const jwk = JSON.parse(data.toString());\n state.setServiceAccountJwk(jwk);\n } catch (error) {\n printMessage(\n `Error parsing JWK from file ${file}: ${error.message}`,\n 'error'\n );\n }\n },\n [deploymentOption.attributeName()]: (type: string) =>\n state.setDeploymentType(type),\n [insecureOption.attributeName()]: (insecure: boolean) =>\n state.setAllowInsecureConnection(insecure),\n [verboseOption.attributeName()]: (verbose: boolean) =>\n state.setVerbose(verbose),\n [debugOption.attributeName()]: (debug: boolean) => state.setDebug(debug),\n [curlirizeOption.attributeName()]: (curlirize: boolean) =>\n state.setCurlirize(curlirize),\n};\n\n/**\n * Command with default options\n */\nexport class FrodoStubCommand extends Command {\n /**\n * Creates a new FrodoCommand instance\n * @param name Name of the command\n * @param omits Array of default argument names and default option names that should not be added to this command\n */\n constructor(name: string) {\n super(name);\n\n // other default settings\n this.helpOption('-h, --help', 'Help');\n this.showHelpAfterError();\n this.configureHelp({\n sortSubcommands: true,\n sortOptions: true,\n });\n\n // register default handlers\n state.setPrintHandler(printMessage);\n state.setVerboseHandler(verboseMessage);\n state.setDebugHandler(debugMessage);\n state.setCurlirizeHandler(curlirizeMessage);\n state.setCreateProgressHandler(createProgressIndicator);\n state.setUpdateProgressHandler(updateProgressIndicator);\n state.setStopProgressHandler(stopProgressIndicator);\n }\n}\n\n/**\n * Command with default options\n */\nexport class FrodoCommand extends FrodoStubCommand {\n /**\n * Creates a new FrodoCommand instance\n * @param name Name of the command\n * @param omits Array of default argument names and default option names that should not be added to this command\n */\n constructor(name: string, omits: string[] = []) {\n super(name);\n\n // register default arguments\n for (const arg of defaultArgs) {\n if (!omits.includes(arg.name())) this.addArgument(arg);\n }\n\n // register default options\n for (const opt of defaultOpts) {\n if (!omits.includes(opt.name())) this.addOption(opt);\n }\n\n // additional help\n this.addHelpText(\n 'after',\n `\\nEvironment Variables:\\n` +\n ` FRODO_HOST: Access Management base URL. Overrides 'host' argument.\\n` +\n ` FRODO_REALM: Realm. Overrides 'realm' argument.\\n` +\n ` FRODO_USERNAME: Username. Overrides 'username' argument.\\n` +\n ` FRODO_PASSWORD: Password. Overrides 'password' argument.\\n` +\n ` FRODO_SA_ID: Service account uuid. Overrides '--sa-id' option.\\n` +\n ` FRODO_SA_JWK: Service account JWK. Overrides '--sa-jwk-file' option but takes the actual JWK as a value, not a file name.\\n` +\n ('frodo conn save' === this.name()\n ? ` FRODO_LOG_KEY: Log API key. Overrides '--log-api-key' option.\\n` +\n ` FRODO_LOG_SECRET: Log API secret. Overrides '--log-api-secret' option.\\n`\n : ``) +\n (this.name().startsWith('frodo logs')\n ? ` FRODO_LOG_KEY: Log API key. Overrides 'username' argument.\\n` +\n ` FRODO_LOG_SECRET: Log API secret. Overrides 'password' argument.\\n`\n : ``) +\n ` FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use.\\n` +\n ` FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'.\\n`\n );\n }\n\n /**\n *\n * @param args\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleDefaultArgsAndOpts(...args: any) {\n const command = args.pop();\n const options = args.pop();\n\n // handle arguments first\n for (const [i, v] of command.args.entries()) {\n if (!command._args[i]) {\n printMessage(\n `${command.args.length} arguments supplied but command only supports ${command._args.length}.`,\n 'warn'\n );\n break;\n }\n const arg = command._args[i].name();\n // handle only default arguments\n if (Object.keys(stateMap).includes(arg)) {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Handling default argument '${arg}'.`\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: any = stateMap[arg];\n handler(v);\n } else {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Ignoring non-default argument '${arg}'.`\n );\n }\n }\n\n // handle options\n for (const [k, v] of Object.entries(options)) {\n // handle only default options\n if (Object.keys(stateMap).includes(k)) {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Handling default option '${k}'.`\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: any = stateMap[k];\n handler(v);\n } else {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Ignoring non-default option '${k}'.`\n );\n }\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"FrodoCommand.js","names":["state","Argument","Command","Option","fs","globalConfig","createProgressIndicator","curlirizeMessage","debugMessage","printMessage","stopProgressIndicator","updateProgressIndicator","verboseMessage","hostArgument","realmArgument","default","process","env","FRODO_REALM","DEFAULT_REALM_KEY","usernameArgument","passwordArgument","serviceAccountIdOption","serviceAccountJwkFileOption","deploymentOption","choices","DEPLOYMENT_TYPES","insecureOption","verboseOption","debugOption","curlirizeOption","defaultArgs","defaultOpts","stateMap","name","host","setHost","realm","setRealm","username","setUsername","password","setPassword","attributeName","saId","setServiceAccountId","file","data","readFileSync","jwk","JSON","parse","toString","setServiceAccountJwk","error","message","type","setDeploymentType","insecure","setAllowInsecureConnection","verbose","setVerbose","debug","setDebug","curlirize","setCurlirize","FrodoStubCommand","constructor","on","_error$config","_error$config2","_error$response","config","method","url","response","stack","exitCode","helpOption","showHelpAfterError","configureHelp","sortSubcommands","sortOptions","setPrintHandler","setVerboseHandler","setDebugHandler","setCurlirizeHandler","setCreateProgressHandler","setUpdateProgressHandler","setStopProgressHandler","FrodoCommand","omits","arg","includes","addArgument","opt","addOption","addHelpText","startsWith","handleDefaultArgsAndOpts","args","command","pop","options","i","v","entries","_args","length","Object","keys","handler","k"],"sources":["../../src/cli/FrodoCommand.ts"],"sourcesContent":["import { state } from '@rockcarver/frodo-lib';\nimport { Argument, Command, Option } from 'commander';\nimport fs from 'fs';\n\nimport * as globalConfig from '../storage/StaticStorage';\nimport {\n createProgressIndicator,\n curlirizeMessage,\n debugMessage,\n printMessage,\n stopProgressIndicator,\n updateProgressIndicator,\n verboseMessage,\n} from '../utils/Console.js';\n\nconst hostArgument = new Argument(\n '[host]',\n 'Access Management base URL, e.g.: https://cdk.iam.example.com/am. To use a connection profile, just specify a unique substring.'\n);\n\nconst realmArgument = new Argument(\n '[realm]',\n \"Realm. Specify realm as '/' for the root realm or 'realm' or '/parent/child' otherwise.\"\n).default(\n // must check for FRODO_REALM env variable here because otherwise cli will overwrite realm with default value\n process.env.FRODO_REALM || globalConfig.DEFAULT_REALM_KEY,\n '\"alpha\" for Identity Cloud tenants, \"/\" otherwise.'\n);\n\nconst usernameArgument = new Argument(\n '[username]',\n 'Username to login with. Must be an admin user with appropriate rights to manage authentication journeys/trees.'\n);\n\nconst passwordArgument = new Argument('[password]', 'Password.');\n\nconst serviceAccountIdOption = new Option(\n '--sa-id <sa-id>',\n 'Service account id.'\n);\n\nconst serviceAccountJwkFileOption = new Option(\n '--sa-jwk-file <file>',\n 'File containing the JSON Web Key (JWK) associated with the the service account.'\n);\n\nconst deploymentOption = new Option(\n '-m, --type <type>',\n 'Override auto-detected deployment type. Valid values for type: \\n\\\nclassic: A classic Access Management-only deployment with custom layout and configuration. \\n\\\ncloud: A ForgeRock Identity Cloud environment. \\n\\\nforgeops: A ForgeOps CDK or CDM deployment. \\n\\\nThe detected or provided deployment type controls certain behavior like obtaining an Identity \\\nManagement admin token or not and whether to export/import referenced email templates or how \\\nto walk through the tenant admin login flow of Identity Cloud and handle MFA'\n).choices(globalConfig.DEPLOYMENT_TYPES);\n\nconst insecureOption = new Option(\n '-k, --insecure',\n 'Allow insecure connections when using SSL/TLS. Has no effect when using a network proxy for https (HTTPS_PROXY=http://<host>:<port>), in that case the proxy must provide this capability.'\n).default(false, \"Don't allow insecure connections\");\n\nconst verboseOption = new Option(\n '--verbose',\n 'Verbose output during command execution. If specified, may or may not produce additional output.'\n);\n\nconst debugOption = new Option(\n '--debug',\n 'Debug output during command execution. If specified, may or may not produce additional output helpful for troubleshooting.'\n);\n\nconst curlirizeOption = new Option(\n '--curlirize',\n 'Output all network calls in curl format.'\n);\n\nconst defaultArgs = [\n hostArgument,\n realmArgument,\n usernameArgument,\n passwordArgument,\n];\n\nconst defaultOpts = [\n serviceAccountIdOption,\n serviceAccountJwkFileOption,\n deploymentOption,\n insecureOption,\n verboseOption,\n debugOption,\n curlirizeOption,\n];\n\nconst stateMap = {\n [hostArgument.name()]: (host: string) => state.setHost(host),\n [realmArgument.name()]: (realm: string) => state.setRealm(realm),\n [usernameArgument.name()]: (username: string) => state.setUsername(username),\n [passwordArgument.name()]: (password: string) => state.setPassword(password),\n [serviceAccountIdOption.attributeName()]: (saId: string) =>\n state.setServiceAccountId(saId),\n [serviceAccountJwkFileOption.attributeName()]: (file: string) => {\n try {\n const data = fs.readFileSync(file);\n const jwk = JSON.parse(data.toString());\n state.setServiceAccountJwk(jwk);\n } catch (error) {\n printMessage(\n `Error parsing JWK from file ${file}: ${error.message}`,\n 'error'\n );\n }\n },\n [deploymentOption.attributeName()]: (type: string) =>\n state.setDeploymentType(type),\n [insecureOption.attributeName()]: (insecure: boolean) =>\n state.setAllowInsecureConnection(insecure),\n [verboseOption.attributeName()]: (verbose: boolean) =>\n state.setVerbose(verbose),\n [debugOption.attributeName()]: (debug: boolean) => state.setDebug(debug),\n [curlirizeOption.attributeName()]: (curlirize: boolean) =>\n state.setCurlirize(curlirize),\n};\n\n/**\n * Command with default options\n */\nexport class FrodoStubCommand extends Command {\n /**\n * Creates a new FrodoCommand instance\n * @param name Name of the command\n * @param omits Array of default argument names and default option names that should not be added to this command\n */\n constructor(name: string) {\n super(name);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.on('unhandledRejection', (error: any) => {\n printMessage(\n `${error.config?.method ? error.config.method + ' ' : ''}${\n error.config?.url ? error.config.url : ''\n }`,\n 'error'\n );\n printMessage(error.response?.data, 'error');\n printMessage(error.stack, 'error');\n printMessage(\n `Please report this unhandled error here: https://github.com/rockcarver/frodo-cli/issues`,\n 'error'\n );\n process.exitCode = 1;\n });\n\n // other default settings\n this.helpOption('-h, --help', 'Help');\n this.showHelpAfterError();\n this.configureHelp({\n sortSubcommands: true,\n sortOptions: true,\n });\n\n // register default handlers\n state.setPrintHandler(printMessage);\n state.setVerboseHandler(verboseMessage);\n state.setDebugHandler(debugMessage);\n state.setCurlirizeHandler(curlirizeMessage);\n state.setCreateProgressHandler(createProgressIndicator);\n state.setUpdateProgressHandler(updateProgressIndicator);\n state.setStopProgressHandler(stopProgressIndicator);\n }\n}\n\n/**\n * Command with default options\n */\nexport class FrodoCommand extends FrodoStubCommand {\n /**\n * Creates a new FrodoCommand instance\n * @param name Name of the command\n * @param omits Array of default argument names and default option names that should not be added to this command\n */\n constructor(name: string, omits: string[] = []) {\n super(name);\n\n // register default arguments\n for (const arg of defaultArgs) {\n if (!omits.includes(arg.name())) this.addArgument(arg);\n }\n\n // register default options\n for (const opt of defaultOpts) {\n if (!omits.includes(opt.name())) this.addOption(opt);\n }\n\n // additional help\n this.addHelpText(\n 'after',\n `\\nEvironment Variables:\\n` +\n ` FRODO_HOST: Access Management base URL. Overrides 'host' argument.\\n` +\n ` FRODO_REALM: Realm. Overrides 'realm' argument.\\n` +\n ` FRODO_USERNAME: Username. Overrides 'username' argument.\\n` +\n ` FRODO_PASSWORD: Password. Overrides 'password' argument.\\n` +\n ` FRODO_SA_ID: Service account uuid. Overrides '--sa-id' option.\\n` +\n ` FRODO_SA_JWK: Service account JWK. Overrides '--sa-jwk-file' option but takes the actual JWK as a value, not a file name.\\n` +\n ('frodo conn save' === this.name()\n ? ` FRODO_LOG_KEY: Log API key. Overrides '--log-api-key' option.\\n` +\n ` FRODO_LOG_SECRET: Log API secret. Overrides '--log-api-secret' option.\\n`\n : ``) +\n (this.name().startsWith('frodo logs')\n ? ` FRODO_LOG_KEY: Log API key. Overrides 'username' argument.\\n` +\n ` FRODO_LOG_SECRET: Log API secret. Overrides 'password' argument.\\n`\n : ``) +\n ` FRODO_AUTHENTICATION_SERVICE: Name of a login journey to use.\\n` +\n ` FRODO_DEBUG: Set to any value to enable debug output. Same as '--debug'.\\n` +\n ` FRODO_MASTER_KEY_PATH: Use this master key file instead of '~/.frodo/masterkey.key' file.\\n` +\n ` FRODO_MASTER_KEY: Use this master key instead of '~/.frodo/masterkey.key' file. Takes precedence over FRODO_MASTER_KEY_PATH.\\n`\n );\n }\n\n /**\n *\n * @param args\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleDefaultArgsAndOpts(...args: any) {\n const command = args.pop();\n const options = args.pop();\n\n // handle arguments first\n for (const [i, v] of command.args.entries()) {\n if (!command._args[i]) {\n printMessage(\n `${command.args.length} arguments supplied but command only supports ${command._args.length}.`,\n 'warn'\n );\n break;\n }\n const arg = command._args[i].name();\n // handle only default arguments\n if (Object.keys(stateMap).includes(arg)) {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Handling default argument '${arg}'.`\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: any = stateMap[arg];\n handler(v);\n } else {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Ignoring non-default argument '${arg}'.`\n );\n }\n }\n\n // handle options\n for (const [k, v] of Object.entries(options)) {\n // handle only default options\n if (Object.keys(stateMap).includes(k)) {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Handling default option '${k}'.`\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler: any = stateMap[k];\n handler(v);\n } else {\n debugMessage(\n `FrodoCommand.handleDefaultArgsAndOpts: Ignoring non-default option '${k}'.`\n );\n }\n }\n }\n}\n"],"mappings":"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"}
@@ -59,7 +59,7 @@ async (host, realm, user, password, options, command) => {
59
59
  table.push(['Client Secret'['brightCyan'], clientSecret]);
60
60
  if (options.llt) {
61
61
  try {
62
- const response = await createLongLivedToken(clientId, clientSecret, options.scope, options.lltEsv, options.lltTtl);
62
+ const response = await createLongLivedToken(clientId, clientSecret, options.lltScope, options.lltEsv, options.lltTtl);
63
63
  if (options.lltEsv) table.push(['Secret Name'['brightCyan'], response.secret]);
64
64
  table.push(['Scope'['brightCyan'], response.scope]);
65
65
  table.push(['Expires'['brightCyan'], response.expires_on]);
@@ -1 +1 @@
1
- {"version":3,"file":"admin-create-oauth2-client-with-admin-privileges.js","names":["frodo","state","Table","Option","v4","uuidv4","printMessage","FrodoCommand","getTokens","login","createOAuth2ClientWithAdminPrivileges","createLongLivedToken","admin","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","getRealm","clientId","clientSecret","error","process","exitCode","table","chars","top","bottom","left","mid","right","style","wordWrap","push","llt","response","scope","lltEsv","lltTtl","secret","expires_on","toString","access_token","parse"],"sources":["../../../src/cli/admin/admin-create-oauth2-client-with-admin-privileges.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport Table from 'cli-table3';\nimport { Option } from 'commander';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { printMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\nconst { createOAuth2ClientWithAdminPrivileges, createLongLivedToken } =\n frodo.admin;\n\nconst program = new FrodoCommand(\n 'frodo admin create-oauth2-client-with-admin-privileges'\n);\n\nprogram\n .description('Create an oauth2 client with admin privileges.')\n .addOption(new Option('--client-id [id]', 'Client id.'))\n .addOption(new Option('--client-secret [secret]', 'Client secret.'))\n .addOption(\n new Option(\n '--llt',\n 'Create a long-lived token and store it in a secret. The default secret name is esv-admin-token and the default token lifetime is 315,360,000 seconds (10 years). Both can be overwritten with the --llt-esv and --llt-ttl options.'\n )\n )\n .addOption(\n new Option(\n '--llt-scope [scope]',\n 'Request the following scope(s). This option only applies if used with the --llt option.'\n ).default('fr:idm:*', 'fr:idm:*')\n )\n .addOption(\n new Option(\n '--llt-esv [esv]',\n 'Name of the secret to store the token in. This option only applies if used with the --llt option.'\n ).default('esv-admin-token', 'esv-admin-token')\n )\n .addOption(\n new Option(\n '--no-llt-esv',\n \"Don't store the token in a secret and output to console instead. This option only applies if used with the --llt option.\"\n )\n )\n .addOption(\n new Option(\n '--llt-ttl [ttl]',\n 'Token lifetime (seconds). This option only applies if used with the --llt option.'\n ).default(315360000, '315,360,000 seconds (10 years)')\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n printMessage(\n `Creating oauth2 client with admin privileges in realm \"${state.getRealm()}\"...`\n );\n let clientId = uuidv4();\n let clientSecret = uuidv4();\n if (options.clientId) {\n clientId = options.clientId;\n }\n if (options.clientSecret) {\n clientSecret = options.clientSecret;\n }\n try {\n await createOAuth2ClientWithAdminPrivileges(clientId, clientSecret);\n } catch (error) {\n printMessage(error, 'error');\n process.exitCode = 1;\n }\n const table = new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0 },\n wordWrap: true,\n });\n table.push(['Client ID'['brightCyan'], clientId]);\n table.push(['Client Secret'['brightCyan'], clientSecret]);\n if (options.llt) {\n try {\n const response = await createLongLivedToken(\n clientId,\n clientSecret,\n options.scope,\n options.lltEsv,\n options.lltTtl\n );\n if (options.lltEsv)\n table.push(['Secret Name'['brightCyan'], response.secret]);\n table.push(['Scope'['brightCyan'], response.scope]);\n table.push(['Expires'['brightCyan'], response.expires_on]);\n printMessage(table.toString());\n if (options.lltEsv === false) {\n printMessage(`\\nBearer token:`, 'info');\n printMessage(`${response.access_token}`, 'data');\n }\n } catch (error) {\n printMessage(error, 'error');\n process.exitCode = 1;\n }\n } else {\n printMessage(table.toString());\n }\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
1
+ {"version":3,"file":"admin-create-oauth2-client-with-admin-privileges.js","names":["frodo","state","Table","Option","v4","uuidv4","printMessage","FrodoCommand","getTokens","login","createOAuth2ClientWithAdminPrivileges","createLongLivedToken","admin","program","description","addOption","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","getRealm","clientId","clientSecret","error","process","exitCode","table","chars","top","bottom","left","mid","right","style","wordWrap","push","llt","response","lltScope","lltEsv","lltTtl","secret","scope","expires_on","toString","access_token","parse"],"sources":["../../../src/cli/admin/admin-create-oauth2-client-with-admin-privileges.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport Table from 'cli-table3';\nimport { Option } from 'commander';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { printMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\nconst { createOAuth2ClientWithAdminPrivileges, createLongLivedToken } =\n frodo.admin;\n\nconst program = new FrodoCommand(\n 'frodo admin create-oauth2-client-with-admin-privileges'\n);\n\nprogram\n .description('Create an oauth2 client with admin privileges.')\n .addOption(new Option('--client-id [id]', 'Client id.'))\n .addOption(new Option('--client-secret [secret]', 'Client secret.'))\n .addOption(\n new Option(\n '--llt',\n 'Create a long-lived token and store it in a secret. The default secret name is esv-admin-token and the default token lifetime is 315,360,000 seconds (10 years). Both can be overwritten with the --llt-esv and --llt-ttl options.'\n )\n )\n .addOption(\n new Option(\n '--llt-scope [scope]',\n 'Request the following scope(s). This option only applies if used with the --llt option.'\n ).default('fr:idm:*', 'fr:idm:*')\n )\n .addOption(\n new Option(\n '--llt-esv [esv]',\n 'Name of the secret to store the token in. This option only applies if used with the --llt option.'\n ).default('esv-admin-token', 'esv-admin-token')\n )\n .addOption(\n new Option(\n '--no-llt-esv',\n \"Don't store the token in a secret and output to console instead. This option only applies if used with the --llt option.\"\n )\n )\n .addOption(\n new Option(\n '--llt-ttl [ttl]',\n 'Token lifetime (seconds). This option only applies if used with the --llt option.'\n ).default(315360000, '315,360,000 seconds (10 years)')\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n printMessage(\n `Creating oauth2 client with admin privileges in realm \"${state.getRealm()}\"...`\n );\n let clientId = uuidv4();\n let clientSecret = uuidv4();\n if (options.clientId) {\n clientId = options.clientId;\n }\n if (options.clientSecret) {\n clientSecret = options.clientSecret;\n }\n try {\n await createOAuth2ClientWithAdminPrivileges(clientId, clientSecret);\n } catch (error) {\n printMessage(error, 'error');\n process.exitCode = 1;\n }\n const table = new Table({\n chars: {\n top: '',\n 'top-mid': '',\n 'top-left': '',\n 'top-right': '',\n bottom: '',\n 'bottom-mid': '',\n 'bottom-left': '',\n 'bottom-right': '',\n left: '',\n 'left-mid': '',\n mid: '',\n 'mid-mid': '',\n right: '',\n 'right-mid': '',\n },\n style: { 'padding-left': 0, 'padding-right': 0 },\n wordWrap: true,\n });\n table.push(['Client ID'['brightCyan'], clientId]);\n table.push(['Client Secret'['brightCyan'], clientSecret]);\n if (options.llt) {\n try {\n const response = await createLongLivedToken(\n clientId,\n clientSecret,\n options.lltScope,\n options.lltEsv,\n options.lltTtl\n );\n if (options.lltEsv)\n table.push(['Secret Name'['brightCyan'], response.secret]);\n table.push(['Scope'['brightCyan'], response.scope]);\n table.push(['Expires'['brightCyan'], response.expires_on]);\n printMessage(table.toString());\n if (options.lltEsv === false) {\n printMessage(`\\nBearer token:`, 'info');\n printMessage(`${response.access_token}`, 'data');\n }\n } catch (error) {\n printMessage(error, 'error');\n process.exitCode = 1;\n }\n } else {\n printMessage(table.toString());\n }\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
@@ -9,7 +9,7 @@ const {
9
9
  clientCredentialsGrant
10
10
  } = frodo.oauth2oidc.endpoint;
11
11
  const program = new FrodoCommand('frodo admin get-access-token');
12
- program.description('Get an access token using client credentials grant type.').addOption(new Option('--client-id [id]', 'Client id.').makeOptionMandatory()).addOption(new Option('--client-secret [secret]', 'Client secret.').makeOptionMandatory()).addOption(new Option('--scope [scope]', 'Request the following scope(s).').default('fr:idm:*', 'fr:idm:*')).action(
12
+ program.description('Get an access token using client credentials grant type.').addOption(new Option('-i, --client-id [id]', 'Client id.').makeOptionMandatory()).addOption(new Option('-s, --client-secret [secret]', 'Client secret.').makeOptionMandatory()).addOption(new Option('--scope [scope]', 'Request the following scope(s).').default('fr:idm:*', 'fr:idm:*')).action(
13
13
  // implement command logic inside action handler
14
14
  async (host, realm, user, password, options, command) => {
15
15
  command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
@@ -1 +1 @@
1
- {"version":3,"file":"admin-get-access-token.js","names":["frodo","state","Option","printMessage","FrodoCommand","getTokens","login","clientCredentialsGrant","oauth2oidc","endpoint","program","description","addOption","makeOptionMandatory","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","clientId","response","getHost","clientSecret","scope","data","access_token","process","exitCode","parse"],"sources":["../../../src/cli/admin/admin-get-access-token.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { printMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\nconst { clientCredentialsGrant } = frodo.oauth2oidc.endpoint;\n\nconst program = new FrodoCommand('frodo admin get-access-token');\n\nprogram\n .description('Get an access token using client credentials grant type.')\n .addOption(new Option('--client-id [id]', 'Client id.').makeOptionMandatory())\n .addOption(\n new Option(\n '--client-secret [secret]',\n 'Client secret.'\n ).makeOptionMandatory()\n )\n .addOption(\n new Option('--scope [scope]', 'Request the following scope(s).').default(\n 'fr:idm:*',\n 'fr:idm:*'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n printMessage(\n `Getting an access token using client \"${options.clientId}\"...`\n );\n const response = (\n await clientCredentialsGrant(\n state.getHost(),\n options.clientId,\n options.clientSecret,\n options.scope\n )\n ).data;\n printMessage(`Token: ${response.access_token}`);\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGL,KAAK,CAACM,KAAK;AACjC,MAAM;EAAEC;AAAuB,CAAC,GAAGP,KAAK,CAACQ,UAAU,CAACC,QAAQ;AAE5D,MAAMC,OAAO,GAAG,IAAIN,YAAY,CAAC,8BAA8B,CAAC;AAEhEM,OAAO,CACJC,WAAW,CAAC,0DAA0D,CAAC,CACvEC,SAAS,CAAC,IAAIV,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAACW,mBAAmB,CAAC,CAAC,CAAC,CAC7ED,SAAS,CACR,IAAIV,MAAM,CACR,0BAA0B,EAC1B,gBACF,CAAC,CAACW,mBAAmB,CAAC,CACxB,CAAC,CACAD,SAAS,CACR,IAAIV,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC,CAACY,OAAO,CACtE,UAAU,EACV,UACF,CACF,CAAC,CACAC,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMhB,SAAS,CAAC,CAAC,EAAE;IACrBF,YAAY,CACT,yCAAwCiB,OAAO,CAACG,QAAS,MAC5D,CAAC;IACD,MAAMC,QAAQ,GAAG,CACf,MAAMjB,sBAAsB,CAC1BN,KAAK,CAACwB,OAAO,CAAC,CAAC,EACfL,OAAO,CAACG,QAAQ,EAChBH,OAAO,CAACM,YAAY,EACpBN,OAAO,CAACO,KACV,CAAC,EACDC,IAAI;IACNzB,YAAY,CAAE,UAASqB,QAAQ,CAACK,YAAa,EAAC,CAAC;EACjD,CAAC,MAAM;IACLC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHrB,OAAO,CAACsB,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"admin-get-access-token.js","names":["frodo","state","Option","printMessage","FrodoCommand","getTokens","login","clientCredentialsGrant","oauth2oidc","endpoint","program","description","addOption","makeOptionMandatory","default","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","clientId","response","getHost","clientSecret","scope","data","access_token","process","exitCode","parse"],"sources":["../../../src/cli/admin/admin-get-access-token.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { printMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\nconst { clientCredentialsGrant } = frodo.oauth2oidc.endpoint;\n\nconst program = new FrodoCommand('frodo admin get-access-token');\n\nprogram\n .description('Get an access token using client credentials grant type.')\n .addOption(\n new Option('-i, --client-id [id]', 'Client id.').makeOptionMandatory()\n )\n .addOption(\n new Option(\n '-s, --client-secret [secret]',\n 'Client secret.'\n ).makeOptionMandatory()\n )\n .addOption(\n new Option('--scope [scope]', 'Request the following scope(s).').default(\n 'fr:idm:*',\n 'fr:idm:*'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n printMessage(\n `Getting an access token using client \"${options.clientId}\"...`\n );\n const response = (\n await clientCredentialsGrant(\n state.getHost(),\n options.clientId,\n options.clientSecret,\n options.scope\n )\n ).data;\n printMessage(`Token: ${response.access_token}`);\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGL,KAAK,CAACM,KAAK;AACjC,MAAM;EAAEC;AAAuB,CAAC,GAAGP,KAAK,CAACQ,UAAU,CAACC,QAAQ;AAE5D,MAAMC,OAAO,GAAG,IAAIN,YAAY,CAAC,8BAA8B,CAAC;AAEhEM,OAAO,CACJC,WAAW,CAAC,0DAA0D,CAAC,CACvEC,SAAS,CACR,IAAIV,MAAM,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAACW,mBAAmB,CAAC,CACvE,CAAC,CACAD,SAAS,CACR,IAAIV,MAAM,CACR,8BAA8B,EAC9B,gBACF,CAAC,CAACW,mBAAmB,CAAC,CACxB,CAAC,CACAD,SAAS,CACR,IAAIV,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,CAAC,CAACY,OAAO,CACtE,UAAU,EACV,UACF,CACF,CAAC,CACAC,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMhB,SAAS,CAAC,CAAC,EAAE;IACrBF,YAAY,CACT,yCAAwCiB,OAAO,CAACG,QAAS,MAC5D,CAAC;IACD,MAAMC,QAAQ,GAAG,CACf,MAAMjB,sBAAsB,CAC1BN,KAAK,CAACwB,OAAO,CAAC,CAAC,EACfL,OAAO,CAACG,QAAQ,EAChBH,OAAO,CAACM,YAAY,EACpBN,OAAO,CAACO,KACV,CAAC,EACDC,IAAI;IACNzB,YAAY,CAAE,UAASqB,QAAQ,CAACK,YAAa,EAAC,CAAC;EACjD,CAAC,MAAM;IACLC,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHrB,OAAO,CAACsB,KAAK,CAAC,CAAC"}
@@ -9,13 +9,13 @@ const {
9
9
  grantOAuth2ClientAdminPrivileges
10
10
  } = frodo.admin;
11
11
  const program = new FrodoCommand('frodo admin grant-oauth2-client-admin-privileges');
12
- program.description('Grant an oauth2 client admin privileges.').addOption(new Option('-t, --target <target name or id>', 'Name of the oauth2 client.')).action(
12
+ program.description('Grant an oauth2 client admin privileges.').addOption(new Option('-i, --client-id <id>', 'OAuth2 client id.')).addOption(new Option('-t, --target <target name or id>', 'Name of the oauth2 client.').hideHelp()).action(
13
13
  // implement command logic inside action handler
14
14
  async (host, realm, user, password, options, command) => {
15
15
  command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
16
16
  if (await getTokens()) {
17
17
  printMessage(`Granting oauth2 client "${options.target}" in realm "${state.getRealm()}" admin privileges...`);
18
- await grantOAuth2ClientAdminPrivileges(options.target);
18
+ await grantOAuth2ClientAdminPrivileges(options.clientId || options.target);
19
19
  printMessage('Done.');
20
20
  } else {
21
21
  process.exitCode = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"admin-grant-oauth2-client-admin-privileges.js","names":["frodo","state","Option","printMessage","FrodoCommand","getTokens","login","grantOAuth2ClientAdminPrivileges","admin","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","target","getRealm","process","exitCode","parse"],"sources":["../../../src/cli/admin/admin-grant-oauth2-client-admin-privileges.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { printMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\nconst { grantOAuth2ClientAdminPrivileges } = frodo.admin;\n\nconst program = new FrodoCommand(\n 'frodo admin grant-oauth2-client-admin-privileges'\n);\n\nprogram\n .description('Grant an oauth2 client admin privileges.')\n .addOption(\n new Option('-t, --target <target name or id>', 'Name of the oauth2 client.')\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n printMessage(\n `Granting oauth2 client \"${\n options.target\n }\" in realm \"${state.getRealm()}\" admin privileges...`\n );\n await grantOAuth2ClientAdminPrivileges(options.target);\n printMessage('Done.');\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGL,KAAK,CAACM,KAAK;AACjC,MAAM;EAAEC;AAAiC,CAAC,GAAGP,KAAK,CAACQ,KAAK;AAExD,MAAMC,OAAO,GAAG,IAAIL,YAAY,CAC9B,kDACF,CAAC;AAEDK,OAAO,CACJC,WAAW,CAAC,0CAA0C,CAAC,CACvDC,SAAS,CACR,IAAIT,MAAM,CAAC,kCAAkC,EAAE,4BAA4B,CAC7E,CAAC,CACAU,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMb,SAAS,CAAC,CAAC,EAAE;IACrBF,YAAY,CACT,2BACCc,OAAO,CAACG,MACT,eAAcnB,KAAK,CAACoB,QAAQ,CAAC,CAAE,uBAClC,CAAC;IACD,MAAMd,gCAAgC,CAACU,OAAO,CAACG,MAAM,CAAC;IACtDjB,YAAY,CAAC,OAAO,CAAC;EACvB,CAAC,MAAM;IACLmB,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHd,OAAO,CAACe,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"admin-grant-oauth2-client-admin-privileges.js","names":["frodo","state","Option","printMessage","FrodoCommand","getTokens","login","grantOAuth2ClientAdminPrivileges","admin","program","description","addOption","hideHelp","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","target","getRealm","clientId","process","exitCode","parse"],"sources":["../../../src/cli/admin/admin-grant-oauth2-client-admin-privileges.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { printMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\nconst { grantOAuth2ClientAdminPrivileges } = frodo.admin;\n\nconst program = new FrodoCommand(\n 'frodo admin grant-oauth2-client-admin-privileges'\n);\n\nprogram\n .description('Grant an oauth2 client admin privileges.')\n .addOption(new Option('-i, --client-id <id>', 'OAuth2 client id.'))\n .addOption(\n new Option(\n '-t, --target <target name or id>',\n 'Name of the oauth2 client.'\n ).hideHelp()\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n printMessage(\n `Granting oauth2 client \"${\n options.target\n }\" in realm \"${state.getRealm()}\" admin privileges...`\n );\n await grantOAuth2ClientAdminPrivileges(\n options.clientId || options.target\n );\n printMessage('Done.');\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGL,KAAK,CAACM,KAAK;AACjC,MAAM;EAAEC;AAAiC,CAAC,GAAGP,KAAK,CAACQ,KAAK;AAExD,MAAMC,OAAO,GAAG,IAAIL,YAAY,CAC9B,kDACF,CAAC;AAEDK,OAAO,CACJC,WAAW,CAAC,0CAA0C,CAAC,CACvDC,SAAS,CAAC,IAAIT,MAAM,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC,CAClES,SAAS,CACR,IAAIT,MAAM,CACR,kCAAkC,EAClC,4BACF,CAAC,CAACU,QAAQ,CAAC,CACb,CAAC,CACAC,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMd,SAAS,CAAC,CAAC,EAAE;IACrBF,YAAY,CACT,2BACCe,OAAO,CAACG,MACT,eAAcpB,KAAK,CAACqB,QAAQ,CAAC,CAAE,uBAClC,CAAC;IACD,MAAMf,gCAAgC,CACpCW,OAAO,CAACK,QAAQ,IAAIL,OAAO,CAACG,MAC9B,CAAC;IACDlB,YAAY,CAAC,OAAO,CAAC;EACvB,CAAC,MAAM;IACLqB,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHhB,OAAO,CAACiB,KAAK,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { frodo } from '@rockcarver/frodo-lib';
2
+ import { Option } from 'commander';
2
3
  import { printMessage } from '../../utils/Console.js';
3
4
  import { FrodoCommand } from '../FrodoCommand';
4
5
  const {
@@ -8,13 +9,13 @@ const {
8
9
  removeStaticUserMapping
9
10
  } = frodo.admin;
10
11
  const program = new FrodoCommand('frodo admin remove-static-user-mapping');
11
- program.description("Remove a subject's static user mapping.").action(
12
+ program.description("Remove a subject's static user mapping.").addOption(new Option('-i, --sub-id <id>', 'Subject identifier.')).action(
12
13
  // implement command logic inside action handler
13
14
  async (host, realm, user, password, options, command) => {
14
15
  command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
15
16
  if (await getTokens()) {
16
17
  printMessage("Removing a subject's static user mapping...");
17
- await removeStaticUserMapping(options.subject);
18
+ await removeStaticUserMapping(options.subId);
18
19
  printMessage('Done.');
19
20
  } else {
20
21
  process.exitCode = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"admin-remove-static-user-mapping.js","names":["frodo","printMessage","FrodoCommand","getTokens","login","removeStaticUserMapping","admin","program","description","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","subject","process","exitCode","parse"],"sources":["../../../src/cli/admin/admin-remove-static-user-mapping.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\n\nimport { printMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\nconst { removeStaticUserMapping } = frodo.admin;\n\nconst program = new FrodoCommand('frodo admin remove-static-user-mapping');\n\nprogram.description(\"Remove a subject's static user mapping.\").action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n printMessage(\"Removing a subject's static user mapping...\");\n await removeStaticUserMapping(options.subject);\n printMessage('Done.');\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n);\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAE7C,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGH,KAAK,CAACI,KAAK;AACjC,MAAM;EAAEC;AAAwB,CAAC,GAAGL,KAAK,CAACM,KAAK;AAE/C,MAAMC,OAAO,GAAG,IAAIL,YAAY,CAAC,wCAAwC,CAAC;AAE1EK,OAAO,CAACC,WAAW,CAAC,yCAAyC,CAAC,CAACC,MAAM;AACnE;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMZ,SAAS,CAAC,CAAC,EAAE;IACrBF,YAAY,CAAC,6CAA6C,CAAC;IAC3D,MAAMI,uBAAuB,CAACS,OAAO,CAACG,OAAO,CAAC;IAC9ChB,YAAY,CAAC,OAAO,CAAC;EACvB,CAAC,MAAM;IACLiB,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEDZ,OAAO,CAACa,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"admin-remove-static-user-mapping.js","names":["frodo","Option","printMessage","FrodoCommand","getTokens","login","removeStaticUserMapping","admin","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","subId","process","exitCode","parse"],"sources":["../../../src/cli/admin/admin-remove-static-user-mapping.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { printMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\nconst { removeStaticUserMapping } = frodo.admin;\n\nconst program = new FrodoCommand('frodo admin remove-static-user-mapping');\n\nprogram\n .description(\"Remove a subject's static user mapping.\")\n .addOption(new Option('-i, --sub-id <id>', 'Subject identifier.'))\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n printMessage(\"Removing a subject's static user mapping...\");\n await removeStaticUserMapping(options.subId);\n printMessage('Done.');\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGJ,KAAK,CAACK,KAAK;AACjC,MAAM;EAAEC;AAAwB,CAAC,GAAGN,KAAK,CAACO,KAAK;AAE/C,MAAMC,OAAO,GAAG,IAAIL,YAAY,CAAC,wCAAwC,CAAC;AAE1EK,OAAO,CACJC,WAAW,CAAC,yCAAyC,CAAC,CACtDC,SAAS,CAAC,IAAIT,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC,CACjEU,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMb,SAAS,CAAC,CAAC,EAAE;IACrBF,YAAY,CAAC,6CAA6C,CAAC;IAC3D,MAAMI,uBAAuB,CAACU,OAAO,CAACG,KAAK,CAAC;IAC5CjB,YAAY,CAAC,OAAO,CAAC;EACvB,CAAC,MAAM;IACLkB,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHb,OAAO,CAACc,KAAK,CAAC,CAAC"}
@@ -9,13 +9,13 @@ const {
9
9
  revokeOAuth2ClientAdminPrivileges
10
10
  } = frodo.admin;
11
11
  const program = new FrodoCommand('frodo admin revoke-oauth2-client-admin-privileges');
12
- program.description('Revoke admin privileges from an oauth2 client.').addOption(new Option('-t, --target <target name or id>', 'Name of the oauth2 client.')).action(
12
+ program.description('Revoke admin privileges from an oauth2 client.').addOption(new Option('-i, --client-id <id>', 'OAuth2 client id.')).addOption(new Option('-t, --target <target name or id>', 'Name of the oauth2 client.').hideHelp()).action(
13
13
  // implement command logic inside action handler
14
14
  async (host, realm, user, password, options, command) => {
15
15
  command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
16
16
  if (await getTokens()) {
17
17
  printMessage(`Revoking admin privileges from oauth2 client "${options.target}" in realm "${state.getRealm()}"...`);
18
- await revokeOAuth2ClientAdminPrivileges(options.target);
18
+ await revokeOAuth2ClientAdminPrivileges(options.clientId || options.target);
19
19
  printMessage('Done.');
20
20
  } else {
21
21
  process.exitCode = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"admin-revoke-oauth2-client-admin-privileges.js","names":["frodo","state","Option","printMessage","FrodoCommand","getTokens","login","revokeOAuth2ClientAdminPrivileges","admin","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","target","getRealm","process","exitCode","parse"],"sources":["../../../src/cli/admin/admin-revoke-oauth2-client-admin-privileges.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { printMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\nconst { revokeOAuth2ClientAdminPrivileges } = frodo.admin;\n\nconst program = new FrodoCommand(\n 'frodo admin revoke-oauth2-client-admin-privileges'\n);\n\nprogram\n .description('Revoke admin privileges from an oauth2 client.')\n .addOption(\n new Option('-t, --target <target name or id>', 'Name of the oauth2 client.')\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n printMessage(\n `Revoking admin privileges from oauth2 client \"${\n options.target\n }\" in realm \"${state.getRealm()}\"...`\n );\n await revokeOAuth2ClientAdminPrivileges(options.target);\n printMessage('Done.');\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGL,KAAK,CAACM,KAAK;AACjC,MAAM;EAAEC;AAAkC,CAAC,GAAGP,KAAK,CAACQ,KAAK;AAEzD,MAAMC,OAAO,GAAG,IAAIL,YAAY,CAC9B,mDACF,CAAC;AAEDK,OAAO,CACJC,WAAW,CAAC,gDAAgD,CAAC,CAC7DC,SAAS,CACR,IAAIT,MAAM,CAAC,kCAAkC,EAAE,4BAA4B,CAC7E,CAAC,CACAU,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMb,SAAS,CAAC,CAAC,EAAE;IACrBF,YAAY,CACT,iDACCc,OAAO,CAACG,MACT,eAAcnB,KAAK,CAACoB,QAAQ,CAAC,CAAE,MAClC,CAAC;IACD,MAAMd,iCAAiC,CAACU,OAAO,CAACG,MAAM,CAAC;IACvDjB,YAAY,CAAC,OAAO,CAAC;EACvB,CAAC,MAAM;IACLmB,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHd,OAAO,CAACe,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"admin-revoke-oauth2-client-admin-privileges.js","names":["frodo","state","Option","printMessage","FrodoCommand","getTokens","login","revokeOAuth2ClientAdminPrivileges","admin","program","description","addOption","hideHelp","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","target","getRealm","clientId","process","exitCode","parse"],"sources":["../../../src/cli/admin/admin-revoke-oauth2-client-admin-privileges.ts"],"sourcesContent":["import { frodo, state } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { printMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\nconst { revokeOAuth2ClientAdminPrivileges } = frodo.admin;\n\nconst program = new FrodoCommand(\n 'frodo admin revoke-oauth2-client-admin-privileges'\n);\n\nprogram\n .description('Revoke admin privileges from an oauth2 client.')\n .addOption(new Option('-i, --client-id <id>', 'OAuth2 client id.'))\n .addOption(\n new Option(\n '-t, --target <target name or id>',\n 'Name of the oauth2 client.'\n ).hideHelp()\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n printMessage(\n `Revoking admin privileges from oauth2 client \"${\n options.target\n }\" in realm \"${state.getRealm()}\"...`\n );\n await revokeOAuth2ClientAdminPrivileges(\n options.clientId || options.target\n );\n printMessage('Done.');\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,EAAEC,KAAK,QAAQ,uBAAuB;AACpD,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,QAAQ,wBAAwB;AACrD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGL,KAAK,CAACM,KAAK;AACjC,MAAM;EAAEC;AAAkC,CAAC,GAAGP,KAAK,CAACQ,KAAK;AAEzD,MAAMC,OAAO,GAAG,IAAIL,YAAY,CAC9B,mDACF,CAAC;AAEDK,OAAO,CACJC,WAAW,CAAC,gDAAgD,CAAC,CAC7DC,SAAS,CAAC,IAAIT,MAAM,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC,CAClES,SAAS,CACR,IAAIT,MAAM,CACR,kCAAkC,EAClC,4BACF,CAAC,CAACU,QAAQ,CAAC,CACb,CAAC,CACAC,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMd,SAAS,CAAC,CAAC,EAAE;IACrBF,YAAY,CACT,iDACCe,OAAO,CAACG,MACT,eAAcpB,KAAK,CAACqB,QAAQ,CAAC,CAAE,MAClC,CAAC;IACD,MAAMf,iCAAiC,CACrCW,OAAO,CAACK,QAAQ,IAAIL,OAAO,CAACG,MAC9B,CAAC;IACDlB,YAAY,CAAC,OAAO,CAAC;EACvB,CAAC,MAAM;IACLqB,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHhB,OAAO,CAACiB,KAAK,CAAC,CAAC"}
@@ -1,17 +1,33 @@
1
1
  import { frodo } from '@rockcarver/frodo-lib';
2
2
  import { Option } from 'commander';
3
+ import * as s from '../../help/SampleData';
4
+ import { deleteApplication, deleteApplications } from '../../ops/ApplicationOps';
5
+ import { verboseMessage } from '../../utils/Console';
3
6
  import { FrodoCommand } from '../FrodoCommand';
4
7
  const {
5
8
  getTokens
6
9
  } = frodo.login;
7
- const program = new FrodoCommand('frodo cmd delete');
8
- program.description('Cmd delete.').addOption(new Option('-i, --app-id <id>', 'OAuth2 application id/name. If specified, -a and -A are ignored.')).addOption(new Option('-a, --all', 'Delete all cmds in a realm. Ignored with -i.')).addOption(new Option('--no-deep', 'No deep delete. This leaves orphaned configuration artifacts behind.')).action(
10
+ const program = new FrodoCommand('frodo app delete');
11
+ program.description('Delete applications.').addOption(new Option('-i, --app-id <id>', 'Application name. If specified, -a and -A are ignored.')).addOption(new Option('-a, --all', 'Delete all applications. Ignored with -i.')).addOption(new Option('--no-deep', 'No deep delete. This leaves orphaned configuration artifacts behind.')).addHelpText('after', `Important Note:\n`['brightYellow'] + ` The ${'frodo app'['brightCyan']} command to manage OAuth2 clients in v1.x has been renamed to ${'frodo oauth client'['brightCyan']} in v2.x\n` + ` The ${'frodo app'['brightCyan']} command in v2.x manages the new applications created using the new application templates in ForgeRock Identity Cloud. To manage oauth clients, use the ${'frodo oauth client'['brightCyan']} command.\n\n` + `Usage Examples:\n` + ` Delete application 'myApp':\n` + ` $ frodo app delete -i 'myApp' ${s.amBaseUrl}\n`['brightCyan'] + ` Delete all applications:\n` + ` $ frodo app delete -a ${s.connId}\n`['brightCyan']).action(
9
12
  // implement command logic inside action handler
10
13
  async (host, realm, user, password, options, command) => {
11
14
  command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
12
- if (await getTokens()) {
13
- // code goes here
14
- } else {
15
+ // delete app by name
16
+ if (options.appId && (await getTokens())) {
17
+ verboseMessage('Deleting application...');
18
+ const status = await deleteApplication(options.appId, options.deep);
19
+ if (!status) process.exitCode = 1;
20
+ }
21
+ // -a/--all
22
+ else if (options.all && (await getTokens())) {
23
+ verboseMessage('Deleting all applications...');
24
+ const status = await deleteApplications(options.deep);
25
+ if (!status) process.exitCode = 1;
26
+ }
27
+ // unrecognized combination of options or no options
28
+ else {
29
+ verboseMessage('Unrecognized combination of options or no options...');
30
+ program.help();
15
31
  process.exitCode = 1;
16
32
  }
17
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"app-delete.js","names":["frodo","Option","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","process","exitCode","parse"],"sources":["../../../src/cli/app/app-delete.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo cmd delete');\n\nprogram\n .description('Cmd delete.')\n .addOption(\n new Option(\n '-i, --app-id <id>',\n 'OAuth2 application id/name. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option('-a, --all', 'Delete all cmds in a realm. Ignored with -i.')\n )\n .addOption(\n new Option(\n '--no-deep',\n 'No deep delete. This leaves orphaned configuration artifacts behind.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n // code goes here\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGH,KAAK,CAACI,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,kBAAkB,CAAC;AAEpDG,OAAO,CACJC,WAAW,CAAC,aAAa,CAAC,CAC1BC,SAAS,CACR,IAAIN,MAAM,CACR,mBAAmB,EACnB,kEACF,CACF,CAAC,CACAM,SAAS,CACR,IAAIN,MAAM,CAAC,WAAW,EAAE,8CAA8C,CACxE,CAAC,CACAM,SAAS,CACR,IAAIN,MAAM,CACR,WAAW,EACX,sEACF,CACF,CAAC,CACAO,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMX,SAAS,CAAC,CAAC,EAAE;IACrB;EAAA,CACD,MAAM;IACLa,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHZ,OAAO,CAACa,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"app-delete.js","names":["frodo","Option","s","deleteApplication","deleteApplications","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","addHelpText","amBaseUrl","connId","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","appId","status","deep","process","exitCode","all","help","parse"],"sources":["../../../src/cli/app/app-delete.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport * as s from '../../help/SampleData';\nimport {\n deleteApplication,\n deleteApplications,\n} from '../../ops/ApplicationOps';\nimport { verboseMessage } from '../../utils/Console';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo app delete');\n\nprogram\n .description('Delete applications.')\n .addOption(\n new Option(\n '-i, --app-id <id>',\n 'Application name. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option('-a, --all', 'Delete all applications. Ignored with -i.')\n )\n .addOption(\n new Option(\n '--no-deep',\n 'No deep delete. This leaves orphaned configuration artifacts behind.'\n )\n )\n .addHelpText(\n 'after',\n `Important Note:\\n`['brightYellow'] +\n ` The ${\n 'frodo app'['brightCyan']\n } command to manage OAuth2 clients in v1.x has been renamed to ${\n 'frodo oauth client'['brightCyan']\n } in v2.x\\n` +\n ` The ${\n 'frodo app'['brightCyan']\n } command in v2.x manages the new applications created using the new application templates in ForgeRock Identity Cloud. To manage oauth clients, use the ${\n 'frodo oauth client'['brightCyan']\n } command.\\n\\n` +\n `Usage Examples:\\n` +\n ` Delete application 'myApp':\\n` +\n ` $ frodo app delete -i 'myApp' ${s.amBaseUrl}\\n`['brightCyan'] +\n ` Delete all applications:\\n` +\n ` $ frodo app delete -a ${s.connId}\\n`['brightCyan']\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n // delete app by name\n if (options.appId && (await getTokens())) {\n verboseMessage('Deleting application...');\n const status = await deleteApplication(options.appId, options.deep);\n if (!status) process.exitCode = 1;\n }\n // -a/--all\n else if (options.all && (await getTokens())) {\n verboseMessage('Deleting all applications...');\n const status = await deleteApplications(options.deep);\n if (!status) process.exitCode = 1;\n }\n // unrecognized combination of options or no options\n else {\n verboseMessage('Unrecognized combination of options or no options...');\n program.help();\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,MAAM,QAAQ,WAAW;AAElC,OAAO,KAAKC,CAAC,MAAM,uBAAuB;AAC1C,SACEC,iBAAiB,EACjBC,kBAAkB,QACb,0BAA0B;AACjC,SAASC,cAAc,QAAQ,qBAAqB;AACpD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGP,KAAK,CAACQ,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,kBAAkB,CAAC;AAEpDG,OAAO,CACJC,WAAW,CAAC,sBAAsB,CAAC,CACnCC,SAAS,CACR,IAAIV,MAAM,CACR,mBAAmB,EACnB,wDACF,CACF,CAAC,CACAU,SAAS,CACR,IAAIV,MAAM,CAAC,WAAW,EAAE,2CAA2C,CACrE,CAAC,CACAU,SAAS,CACR,IAAIV,MAAM,CACR,WAAW,EACX,sEACF,CACF,CAAC,CACAW,WAAW,CACV,OAAO,EACN,mBAAkB,CAAC,cAAc,CAAC,GAChC,SACC,WAAW,CAAC,YAAY,CACzB,iEACC,oBAAoB,CAAC,YAAY,CAClC,YAAW,GACX,SACC,WAAW,CAAC,YAAY,CACzB,2JACC,oBAAoB,CAAC,YAAY,CAClC,eAAc,GACd,mBAAkB,GAClB,iCAAgC,GAChC,mCAAkCV,CAAC,CAACW,SAAU,IAAG,CAAC,YAAY,CAAC,GAC/D,8BAA6B,GAC7B,2BAA0BX,CAAC,CAACY,MAAO,IAAG,CAAC,YAAY,CACxD,CAAC,CACAC,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD;EACA,IAAID,OAAO,CAACG,KAAK,KAAK,MAAMhB,SAAS,CAAC,CAAC,CAAC,EAAE;IACxCF,cAAc,CAAC,yBAAyB,CAAC;IACzC,MAAMmB,MAAM,GAAG,MAAMrB,iBAAiB,CAACiB,OAAO,CAACG,KAAK,EAAEH,OAAO,CAACK,IAAI,CAAC;IACnE,IAAI,CAACD,MAAM,EAAEE,OAAO,CAACC,QAAQ,GAAG,CAAC;EACnC;EACA;EAAA,KACK,IAAIP,OAAO,CAACQ,GAAG,KAAK,MAAMrB,SAAS,CAAC,CAAC,CAAC,EAAE;IAC3CF,cAAc,CAAC,8BAA8B,CAAC;IAC9C,MAAMmB,MAAM,GAAG,MAAMpB,kBAAkB,CAACgB,OAAO,CAACK,IAAI,CAAC;IACrD,IAAI,CAACD,MAAM,EAAEE,OAAO,CAACC,QAAQ,GAAG,CAAC;EACnC;EACA;EAAA,KACK;IACHtB,cAAc,CAAC,sDAAsD,CAAC;IACtEI,OAAO,CAACoB,IAAI,CAAC,CAAC;IACdH,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHlB,OAAO,CAACqB,KAAK,CAAC,CAAC"}
@@ -1,11 +1,12 @@
1
1
  import { frodo } from '@rockcarver/frodo-lib';
2
2
  import { Option } from 'commander';
3
+ import * as s from '../../help/SampleData';
3
4
  import { FrodoCommand } from '../FrodoCommand';
4
5
  const {
5
6
  getTokens
6
7
  } = frodo.login;
7
8
  const program = new FrodoCommand('frodo app describe');
8
- program.description('Describe OAuth2 application.').addOption(new Option('-i, --app-id <id>', 'OAuth2 application id/name.')).action(
9
+ program.description('Describe application.').addOption(new Option('-i, --app-id <id>', 'Application name.')).addHelpText('after', `Important Note:\n`['brightYellow'] + ` The ${'frodo app'['brightCyan']} command to manage OAuth2 clients in v1.x has been renamed to ${'frodo oauth client'['brightCyan']} in v2.x\n` + ` The ${'frodo app'['brightCyan']} command in v2.x manages the new applications created using the new application templates in ForgeRock Identity Cloud. To manage oauth clients, use the ${'frodo oauth client'['brightCyan']} command.\n\n` + `Usage Examples:\n` + ` Describe application 'myApp':\n` + ` $ frodo app describe -i myApp ${s.connId}\n`['brightCyan'] + ` Describe application 'myApp' in raw JSON:\n` + ` $ frodo app describe -i myApp --json ${s.connId}\n`['brightCyan']).action(
9
10
  // implement command logic inside action handler
10
11
  async (host, realm, user, password, options, command) => {
11
12
  command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
@@ -1 +1 @@
1
- {"version":3,"file":"app-describe.js","names":["frodo","Option","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","process","exitCode","parse"],"sources":["../../../src/cli/app/app-describe.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo app describe');\n\nprogram\n .description('Describe OAuth2 application.')\n .addOption(new Option('-i, --app-id <id>', 'OAuth2 application id/name.'))\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n // code goes here\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,MAAM,QAAQ,WAAW;AAElC,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGH,KAAK,CAACI,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,oBAAoB,CAAC;AAEtDG,OAAO,CACJC,WAAW,CAAC,8BAA8B,CAAC,CAC3CC,SAAS,CAAC,IAAIN,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,CAAC,CAAC,CACzEO,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMX,SAAS,CAAC,CAAC,EAAE;IACrB;EAAA,CACD,MAAM;IACLa,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHZ,OAAO,CAACa,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"app-describe.js","names":["frodo","Option","s","FrodoCommand","getTokens","login","program","description","addOption","addHelpText","connId","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","process","exitCode","parse"],"sources":["../../../src/cli/app/app-describe.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport * as s from '../../help/SampleData';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo app describe');\n\nprogram\n .description('Describe application.')\n .addOption(new Option('-i, --app-id <id>', 'Application name.'))\n .addHelpText(\n 'after',\n `Important Note:\\n`['brightYellow'] +\n ` The ${\n 'frodo app'['brightCyan']\n } command to manage OAuth2 clients in v1.x has been renamed to ${\n 'frodo oauth client'['brightCyan']\n } in v2.x\\n` +\n ` The ${\n 'frodo app'['brightCyan']\n } command in v2.x manages the new applications created using the new application templates in ForgeRock Identity Cloud. To manage oauth clients, use the ${\n 'frodo oauth client'['brightCyan']\n } command.\\n\\n` +\n `Usage Examples:\\n` +\n ` Describe application 'myApp':\\n` +\n ` $ frodo app describe -i myApp ${s.connId}\\n`['brightCyan'] +\n ` Describe application 'myApp' in raw JSON:\\n` +\n ` $ frodo app describe -i myApp --json ${s.connId}\\n`['brightCyan']\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n if (await getTokens()) {\n // code goes here\n } else {\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,MAAM,QAAQ,WAAW;AAElC,OAAO,KAAKC,CAAC,MAAM,uBAAuB;AAC1C,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGJ,KAAK,CAACK,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,oBAAoB,CAAC;AAEtDG,OAAO,CACJC,WAAW,CAAC,uBAAuB,CAAC,CACpCC,SAAS,CAAC,IAAIP,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC,CAC/DQ,WAAW,CACV,OAAO,EACN,mBAAkB,CAAC,cAAc,CAAC,GAChC,SACC,WAAW,CAAC,YAAY,CACzB,iEACC,oBAAoB,CAAC,YAAY,CAClC,YAAW,GACX,SACC,WAAW,CAAC,YAAY,CACzB,2JACC,oBAAoB,CAAC,YAAY,CAClC,eAAc,GACd,mBAAkB,GAClB,mCAAkC,GAClC,mCAAkCP,CAAC,CAACQ,MAAO,IAAG,CAAC,YAAY,CAAC,GAC5D,+CAA8C,GAC9C,0CAAyCR,CAAC,CAACQ,MAAO,IAAG,CAAC,YAAY,CACvE,CAAC,CACAC,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD,IAAI,MAAMb,SAAS,CAAC,CAAC,EAAE;IACrB;EAAA,CACD,MAAM;IACLe,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHd,OAAO,CAACe,KAAK,CAAC,CAAC"}
@@ -1,20 +1,21 @@
1
1
  import { frodo } from '@rockcarver/frodo-lib';
2
2
  import { Option } from 'commander';
3
- import { exportOAuth2ClientsToFile, exportOAuth2ClientsToFiles, exportOAuth2ClientToFile } from '../../ops/OAuth2ClientOps';
3
+ import * as s from '../../help/SampleData';
4
+ import { exportApplicationsToFile, exportApplicationsToFiles, exportApplicationToFile } from '../../ops/ApplicationOps';
4
5
  import { verboseMessage } from '../../utils/Console.js';
5
6
  import { FrodoCommand } from '../FrodoCommand';
6
7
  const {
7
8
  getTokens
8
9
  } = frodo.login;
9
10
  const program = new FrodoCommand('frodo app export');
10
- program.description('Export OAuth2 applications.').addOption(new Option('-i, --app-id <app-id>', 'App id. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file <file>', 'Name of the export file.')).addOption(new Option('-a, --all', 'Export all OAuth2 apps to a single file. Ignored with -i.')).addOption(new Option('-A, --all-separate', 'Export all OAuth2 apps to separate files (*.oauth2.app.json) in the current directory. Ignored with -i or -a.')).addOption(new Option('--no-deps', 'Do not include any dependencies (scripts).')).action(
11
+ program.description('Export applications.').addOption(new Option('-i, --app-id <app-id>', 'Application name. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file <file>', 'Name of the export file.')).addOption(new Option('-a, --all', 'Export all applications to a single file. Ignored with -i.')).addOption(new Option('-A, --all-separate', 'Export all applications to separate files (*.application.json) in the current directory. Ignored with -i or -a.')).addOption(new Option('--no-deps', 'Do not include any dependencies (scripts).')).addHelpText('after', `Important Note:\n`['brightYellow'] + ` The ${'frodo app'['brightCyan']} command to manage OAuth2 clients in v1.x has been renamed to ${'frodo oauth client'['brightCyan']} in v2.x\n` + ` The ${'frodo app'['brightCyan']} command in v2.x manages the new applications created using the new application templates in ForgeRock Identity Cloud. To manage oauth clients, use the ${'frodo oauth client'['brightCyan']} command.\n\n` + `Usage Examples:\n` + ` Export all applications to a single export file with an auto-generated filename using a connection profile:\n` + ` $ frodo app export -a ${s.connId}\n`['brightCyan'] + ` Export the first application to a single export file with a custom filename:\n` + ` $ frodo app export -f ./allMyApplications.application.json ${s.connId}\n`['brightCyan'] + ` Export all applications to separate export files with an auto-generated filenames:\n` + ` $ frodo app export -A ${s.connId}\n`['brightCyan'] + ` Export all applications without dependencies to a single export file:\n` + ` $ frodo app export --no-deps -a ${s.connId}\n`['brightCyan'] + ` Export the application 'myApp' to a file with an auto-generated filename of 'myApp.application.json':\n` + ` $ frodo app export -i myApp ${s.connId}\n`['brightCyan']).action(
11
12
  // implement command logic inside action handler
12
13
  async (host, realm, user, password, options, command) => {
13
14
  command.handleDefaultArgsAndOpts(host, realm, user, password, options, command);
14
15
  // export
15
16
  if (options.appId && (await getTokens())) {
16
- verboseMessage('Exporting OAuth2 application...');
17
- const status = await exportOAuth2ClientToFile(options.appId, options.file, {
17
+ verboseMessage('Exporting application...');
18
+ const status = await exportApplicationToFile(options.appId, options.file, {
18
19
  useStringArrays: true,
19
20
  deps: options.deps
20
21
  });
@@ -22,8 +23,8 @@ async (host, realm, user, password, options, command) => {
22
23
  }
23
24
  // -a/--all
24
25
  else if (options.all && (await getTokens())) {
25
- verboseMessage('Exporting all OAuth2 applications to file...');
26
- const status = await exportOAuth2ClientsToFile(options.file, {
26
+ verboseMessage('Exporting all applications to file...');
27
+ const status = await exportApplicationsToFile(options.file, {
27
28
  useStringArrays: true,
28
29
  deps: options.deps
29
30
  });
@@ -32,7 +33,7 @@ async (host, realm, user, password, options, command) => {
32
33
  // -A/--all-separate
33
34
  else if (options.allSeparate && (await getTokens())) {
34
35
  verboseMessage('Exporting all applications to separate files...');
35
- const status = await exportOAuth2ClientsToFiles({
36
+ const status = await exportApplicationsToFiles({
36
37
  useStringArrays: true,
37
38
  deps: options.deps
38
39
  });
@@ -1 +1 @@
1
- {"version":3,"file":"app-export.js","names":["frodo","Option","exportOAuth2ClientsToFile","exportOAuth2ClientsToFiles","exportOAuth2ClientToFile","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","appId","status","file","useStringArrays","deps","process","exitCode","all","allSeparate","help","parse"],"sources":["../../../src/cli/app/app-export.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport {\n exportOAuth2ClientsToFile,\n exportOAuth2ClientsToFiles,\n exportOAuth2ClientToFile,\n} from '../../ops/OAuth2ClientOps';\nimport { verboseMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo app export');\n\nprogram\n .description('Export OAuth2 applications.')\n .addOption(\n new Option(\n '-i, --app-id <app-id>',\n 'App id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Export all OAuth2 apps to a single file. Ignored with -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all OAuth2 apps to separate files (*.oauth2.app.json) in the current directory. Ignored with -i or -a.'\n )\n )\n .addOption(\n new Option('--no-deps', 'Do not include any dependencies (scripts).')\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n // export\n if (options.appId && (await getTokens())) {\n verboseMessage('Exporting OAuth2 application...');\n const status = await exportOAuth2ClientToFile(\n options.appId,\n options.file,\n {\n useStringArrays: true,\n deps: options.deps,\n }\n );\n if (!status) process.exitCode = 1;\n }\n // -a/--all\n else if (options.all && (await getTokens())) {\n verboseMessage('Exporting all OAuth2 applications to file...');\n const status = await exportOAuth2ClientsToFile(options.file, {\n useStringArrays: true,\n deps: options.deps,\n });\n if (!status) process.exitCode = 1;\n }\n // -A/--all-separate\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Exporting all applications to separate files...');\n const status = await exportOAuth2ClientsToFiles({\n useStringArrays: true,\n deps: options.deps,\n });\n if (!status) process.exitCode = 1;\n }\n // unrecognized combination of options or no options\n else {\n verboseMessage('Unrecognized combination of options or no options...');\n program.help();\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,uBAAuB;AAC7C,SAASC,MAAM,QAAQ,WAAW;AAElC,SACEC,yBAAyB,EACzBC,0BAA0B,EAC1BC,wBAAwB,QACnB,2BAA2B;AAClC,SAASC,cAAc,QAAQ,wBAAwB;AACvD,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAM;EAAEC;AAAU,CAAC,GAAGP,KAAK,CAACQ,KAAK;AAEjC,MAAMC,OAAO,GAAG,IAAIH,YAAY,CAAC,kBAAkB,CAAC;AAEpDG,OAAO,CACJC,WAAW,CAAC,6BAA6B,CAAC,CAC1CC,SAAS,CACR,IAAIV,MAAM,CACR,uBAAuB,EACvB,8CACF,CACF,CAAC,CACAU,SAAS,CAAC,IAAIV,MAAM,CAAC,mBAAmB,EAAE,0BAA0B,CAAC,CAAC,CACtEU,SAAS,CACR,IAAIV,MAAM,CACR,WAAW,EACX,2DACF,CACF,CAAC,CACAU,SAAS,CACR,IAAIV,MAAM,CACR,oBAAoB,EACpB,+GACF,CACF,CAAC,CACAU,SAAS,CACR,IAAIV,MAAM,CAAC,WAAW,EAAE,4CAA4C,CACtE,CAAC,CACAW,MAAM;AACL;AACA,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACvDA,OAAO,CAACC,wBAAwB,CAC9BN,IAAI,EACJC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,OAAO,EACPC,OACF,CAAC;EACD;EACA,IAAID,OAAO,CAACG,KAAK,KAAK,MAAMb,SAAS,CAAC,CAAC,CAAC,EAAE;IACxCF,cAAc,CAAC,iCAAiC,CAAC;IACjD,MAAMgB,MAAM,GAAG,MAAMjB,wBAAwB,CAC3Ca,OAAO,CAACG,KAAK,EACbH,OAAO,CAACK,IAAI,EACZ;MACEC,eAAe,EAAE,IAAI;MACrBC,IAAI,EAAEP,OAAO,CAACO;IAChB,CACF,CAAC;IACD,IAAI,CAACH,MAAM,EAAEI,OAAO,CAACC,QAAQ,GAAG,CAAC;EACnC;EACA;EAAA,KACK,IAAIT,OAAO,CAACU,GAAG,KAAK,MAAMpB,SAAS,CAAC,CAAC,CAAC,EAAE;IAC3CF,cAAc,CAAC,8CAA8C,CAAC;IAC9D,MAAMgB,MAAM,GAAG,MAAMnB,yBAAyB,CAACe,OAAO,CAACK,IAAI,EAAE;MAC3DC,eAAe,EAAE,IAAI;MACrBC,IAAI,EAAEP,OAAO,CAACO;IAChB,CAAC,CAAC;IACF,IAAI,CAACH,MAAM,EAAEI,OAAO,CAACC,QAAQ,GAAG,CAAC;EACnC;EACA;EAAA,KACK,IAAIT,OAAO,CAACW,WAAW,KAAK,MAAMrB,SAAS,CAAC,CAAC,CAAC,EAAE;IACnDF,cAAc,CAAC,iDAAiD,CAAC;IACjE,MAAMgB,MAAM,GAAG,MAAMlB,0BAA0B,CAAC;MAC9CoB,eAAe,EAAE,IAAI;MACrBC,IAAI,EAAEP,OAAO,CAACO;IAChB,CAAC,CAAC;IACF,IAAI,CAACH,MAAM,EAAEI,OAAO,CAACC,QAAQ,GAAG,CAAC;EACnC;EACA;EAAA,KACK;IACHrB,cAAc,CAAC,sDAAsD,CAAC;IACtEI,OAAO,CAACoB,IAAI,CAAC,CAAC;IACdJ,OAAO,CAACC,QAAQ,GAAG,CAAC;EACtB;AACF;AACA;AACF,CAAC;;AAEHjB,OAAO,CAACqB,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"app-export.js","names":["frodo","Option","s","exportApplicationsToFile","exportApplicationsToFiles","exportApplicationToFile","verboseMessage","FrodoCommand","getTokens","login","program","description","addOption","addHelpText","connId","action","host","realm","user","password","options","command","handleDefaultArgsAndOpts","appId","status","file","useStringArrays","deps","process","exitCode","all","allSeparate","help","parse"],"sources":["../../../src/cli/app/app-export.ts"],"sourcesContent":["import { frodo } from '@rockcarver/frodo-lib';\nimport { Option } from 'commander';\n\nimport * as s from '../../help/SampleData';\nimport {\n exportApplicationsToFile,\n exportApplicationsToFiles,\n exportApplicationToFile,\n} from '../../ops/ApplicationOps';\nimport { verboseMessage } from '../../utils/Console.js';\nimport { FrodoCommand } from '../FrodoCommand';\n\nconst { getTokens } = frodo.login;\n\nconst program = new FrodoCommand('frodo app export');\n\nprogram\n .description('Export applications.')\n .addOption(\n new Option(\n '-i, --app-id <app-id>',\n 'Application name. If specified, -a and -A are ignored.'\n )\n )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(\n new Option(\n '-a, --all',\n 'Export all applications to a single file. Ignored with -i.'\n )\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all applications to separate files (*.application.json) in the current directory. Ignored with -i or -a.'\n )\n )\n .addOption(\n new Option('--no-deps', 'Do not include any dependencies (scripts).')\n )\n .addHelpText(\n 'after',\n `Important Note:\\n`['brightYellow'] +\n ` The ${\n 'frodo app'['brightCyan']\n } command to manage OAuth2 clients in v1.x has been renamed to ${\n 'frodo oauth client'['brightCyan']\n } in v2.x\\n` +\n ` The ${\n 'frodo app'['brightCyan']\n } command in v2.x manages the new applications created using the new application templates in ForgeRock Identity Cloud. To manage oauth clients, use the ${\n 'frodo oauth client'['brightCyan']\n } command.\\n\\n` +\n `Usage Examples:\\n` +\n ` Export all applications to a single export file with an auto-generated filename using a connection profile:\\n` +\n ` $ frodo app export -a ${s.connId}\\n`['brightCyan'] +\n ` Export the first application to a single export file with a custom filename:\\n` +\n ` $ frodo app export -f ./allMyApplications.application.json ${s.connId}\\n`[\n 'brightCyan'\n ] +\n ` Export all applications to separate export files with an auto-generated filenames:\\n` +\n ` $ frodo app export -A ${s.connId}\\n`['brightCyan'] +\n ` Export all applications without dependencies to a single export file:\\n` +\n ` $ frodo app export --no-deps -a ${s.connId}\\n`['brightCyan'] +\n ` Export the application 'myApp' to a file with an auto-generated filename of 'myApp.application.json':\\n` +\n ` $ frodo app export -i myApp ${s.connId}\\n`['brightCyan']\n )\n .action(\n // implement command logic inside action handler\n async (host, realm, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n realm,\n user,\n password,\n options,\n command\n );\n // export\n if (options.appId && (await getTokens())) {\n verboseMessage('Exporting application...');\n const status = await exportApplicationToFile(\n options.appId,\n options.file,\n {\n useStringArrays: true,\n deps: options.deps,\n }\n );\n if (!status) process.exitCode = 1;\n }\n // -a/--all\n else if (options.all && (await getTokens())) {\n verboseMessage('Exporting all applications to file...');\n const status = await exportApplicationsToFile(options.file, {\n useStringArrays: true,\n deps: options.deps,\n });\n if (!status) process.exitCode = 1;\n }\n // -A/--all-separate\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Exporting all applications to separate files...');\n const status = await exportApplicationsToFiles({\n useStringArrays: true,\n deps: options.deps,\n });\n if (!status) process.exitCode = 1;\n }\n // unrecognized combination of options or no options\n else {\n verboseMessage('Unrecognized combination of options or no options...');\n program.help();\n process.exitCode = 1;\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}