@rockcarver/frodo-cli 0.21.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -9
- package/esm/cli/conn/conn-save.js +39 -8
- package/esm/cli/conn/conn-save.js.map +1 -1
- package/esm/cli/conn/conn.js +0 -3
- package/esm/cli/conn/conn.js.map +1 -1
- package/esm/cli/logging/logs-fetch.js +1 -1
- package/esm/cli/logging/logs-fetch.js.map +1 -1
- package/esm/cli/logging/logs-list.js +1 -1
- package/esm/cli/logging/logs-list.js.map +1 -1
- package/esm/cli/logging/logs-tail.js +1 -1
- package/esm/cli/logging/logs-tail.js.map +1 -1
- package/esm/ops/ConnectionProfileOps.js +0 -1
- package/esm/ops/ConnectionProfileOps.js.map +1 -1
- package/esm/ops/Saml2Ops.js +3 -1
- package/esm/ops/Saml2Ops.js.map +1 -1
- package/esm/utils/Console.js +11 -4
- package/esm/utils/Console.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,14 +7,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.22.0] - 2023-02-13
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- The `frodo conn save` command now supports the following new options to manage log API keys:
|
|
15
|
+
1. `--log-api-key [key]` Log API key. If specified, must also include `--log-api-secret`. Ignored with `--no-log-api`.
|
|
16
|
+
2. `--log-api-secret [secret]` Log API secret. If specified, must also include `--log-api-key`. Ignored with `--no-log-api`.
|
|
17
|
+
3. `--no-log-api` Do not create and add log API key and secret.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Update to frodo-lib 0.18.4
|
|
22
|
+
- The `frodo conn save` command no longer supports providing log API key and secret as arguments but requires the use of the new options `--log-api-key` and `--log-api-secret`.
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- \#195: Frodo again creates log API keys on first use of any of the `frodo logs` sub-commands `list`, `tail`, or `fetch` and a connection profile without an API key.
|
|
27
|
+
|
|
28
|
+
## [0.21.1] - 2023-01-27
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- Update to frodo-lib 0.18.3
|
|
33
|
+
- \#192: Better error handling and reporting in frodo-cli
|
|
34
|
+
|
|
10
35
|
## [0.21.0] - 2023-01-25
|
|
11
36
|
|
|
12
37
|
### Added
|
|
13
38
|
|
|
14
39
|
- \#52: Added new developer options for `script export` and `script import` commands:
|
|
40
|
+
|
|
15
41
|
- `frodo script export`:
|
|
16
42
|
- `-x`, `--extract`: Extract the script from the exported file, and save it to a separate file. Ignored with `-n` or `-a`.
|
|
17
43
|
- `frodo script import`:
|
|
44
|
+
|
|
18
45
|
- `-w`, `--watch`: Watch for changes to the script files and import the scripts automatically when the file changes. Can only be used with `-A`. (default: false)
|
|
19
46
|
|
|
20
47
|
**_Note:_** This new option only applies if the export was generated with the new `--extract` option!
|
|
@@ -71,15 +98,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
71
98
|
% frodo info service-accounts
|
|
72
99
|
Connected to https://openam-service-accounts.forgeblocks.com/am [alpha] as service account Frodo-SA-1673586189578 [99c04bba-7213-463b-9a27-ceafa8a95734]
|
|
73
100
|
|
|
74
|
-
Host URL │https://openam-service-accounts.forgeblocks.com/am
|
|
101
|
+
Host URL │https://openam-service-accounts.forgeblocks.com/am
|
|
75
102
|
AM Version │7.3.0-2022-10-SNAPSHOT Build 9a1793c301ef579705e59b66ce57587f553e915f (2022-December-13 10:05)
|
|
76
|
-
Subject (Type) │Frodo-SA-1673586189578 [99c04bba-7213-463b-9a27-ceafa8a95734] (Service Account)
|
|
77
|
-
Deployment Type│cloud
|
|
78
|
-
Cookie Name │e8b2bd07d5440d3
|
|
79
|
-
Immutable │false
|
|
80
|
-
Locked │false
|
|
81
|
-
Region │us-west1
|
|
82
|
-
Tier │other
|
|
103
|
+
Subject (Type) │Frodo-SA-1673586189578 [99c04bba-7213-463b-9a27-ceafa8a95734] (Service Account)
|
|
104
|
+
Deployment Type│cloud
|
|
105
|
+
Cookie Name │e8b2bd07d5440d3
|
|
106
|
+
Immutable │false
|
|
107
|
+
Locked │false
|
|
108
|
+
Region │us-west1
|
|
109
|
+
Tier │other
|
|
83
110
|
|
|
84
111
|
Bearer token:
|
|
85
112
|
eyJ0eXAiOiJKV1QiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..JD1iu64iGZZoGNwEr-iF2w.af-0-UDDOdusAETjw9YE3YnjOPr6TrdQrBLcl1lxf5RpNThfRhD08xvu1WtJbUZgvjbWdajECEFJfnEinnrUdpe9l0tHU6gAxDrRmu9hAjt0AB3PFSk9BE5SlwvaGoW5vrF4oH0IYtuv4899hFF8KGNYUtou143xmSrsLH37862YiAeiRKtjaQsVUrdbDPAFnKgGRxJIiXp-UE0ZCQQGSqm-Gj0AqVvo-Piib9THrEbbJCzdc00RPaCU2Ra1DH9PDid7ix-zfuind5IgEXxA8XwBM7kSEkiDLUWZ8EaFhn6YXwIHjXetacgYvvDaUav2Fq5baIitnG_LIrCm32XzcDkVnph4mVklBwfbQbWE6BGXEVLK-QLdDupaQw-bic-yVs2d7PBk2y70gbChHCQOm6-MepkYznP4wKoRR1gkqCdl51QIp-tsFB5K2plrKXiwsfHlHKfFKmsbdQUmH7xJFZQRhAtR_pKm-vHPOrPfBh0VbAdLRSkSeOZUABFH56X3gwXIpG_zuH42bQQkM9AlkB-lZrLf4jN0zFq-2ZN-zDgRR9h6qiiD3p9BDmFfaorUDTfFSrfaKas7OIp5ooW8Kqpv28RRtRtvfex0vT_kRbWl5R08MPWZDKZbx4IMyuun-2pYJ-F2-dvfA4A-jRvWIvC6jTUTu-RZZ0Yw1F2lgwFOVbmpMmG2uGHp5GceWePsZ34FVtJuaTd5D-uq_FoAb3HQ7FGEgUMJN_q82hCCX3URv_ocbFMjYwctdUqV_Ed-__A_9lbHHr8D2Uw_Qo0mwku7qwNBTS0-OcrwDvBOJohzRbpbfim-Sq2UzV9SBzzXNK7sMft1pNfu2-saOwPfy6SE0u42-HDqxE9t4MkklSroPY0oDUxO58ET8LXnewGhC9Tt0XTk6WA2rNLcNirhFqdmtKgfrSMQ_t22_DQEDwXpXqtHGmDoltJe7x_6Ofh0W5l7_A71MoHeFpVa_AHpHybnaF4fvUbD284wOV8i22SqrUKuHoJ3o6_g5JlhvMCvb4OZQ-ltxSf98aPsB9nCSthYg5-GkiR_r5mK1w9gZkBTXfYs0qC8-zYEQb4WNiI9.2JGMj9iW6YD-RE_dGkL7_w
|
|
@@ -998,7 +1025,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
998
1025
|
- Fixed problem with adding connection profiles
|
|
999
1026
|
- Miscellaneous bug fixes
|
|
1000
1027
|
|
|
1001
|
-
[Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v0.
|
|
1028
|
+
[Unreleased]: https://github.com/rockcarver/frodo-cli/compare/v0.22.0...HEAD
|
|
1029
|
+
|
|
1030
|
+
[0.22.0]: https://github.com/rockcarver/frodo-cli/compare/v0.21.1...v0.22.0
|
|
1031
|
+
|
|
1032
|
+
[0.21.1]: https://github.com/rockcarver/frodo-cli/compare/v0.21.0...v0.21.1
|
|
1002
1033
|
|
|
1003
1034
|
[0.21.0]: https://github.com/rockcarver/frodo-cli/compare/v0.20.2-0...v0.21.0
|
|
1004
1035
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { FrodoCommand } from '../FrodoCommand';
|
|
2
2
|
import { Option } from 'commander';
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import { Authenticate, ConnectionProfile, Log, ServiceAccount, state, constants } from '@rockcarver/frodo-lib';
|
|
4
|
+
const {
|
|
5
|
+
provisionCreds
|
|
6
|
+
} = Log;
|
|
5
7
|
import { verboseMessage, printMessage } from '../../utils/Console';
|
|
6
8
|
import { addExistingServiceAccount } from '../../ops/ConnectionProfileOps.js';
|
|
7
9
|
const {
|
|
@@ -15,19 +17,20 @@ const {
|
|
|
15
17
|
isServiceAccountsFeatureAvailable
|
|
16
18
|
} = ServiceAccount;
|
|
17
19
|
const program = new FrodoCommand('frodo conn save', ['realm']);
|
|
18
|
-
program.alias('add').description('Save connection profiles.').
|
|
20
|
+
program.alias('add').description('Save connection profiles.').addOption(new Option('--sa-id <uuid>', "Service account's uuid. If specified, must also include --sa-jwk-file. Ignored with --no-sa.")).addOption(new Option('--sa-jwk-file <file>', "File containing the service account's java web key (jwk). Jwk must contain private key! If specified, must also include --sa-id. Ignored with --no-sa.")).addOption(new Option('--no-sa', 'Do not create and add service account.')).addOption(new Option('--log-api-key [key]', 'Log API key. If specified, must also include --log-api-secret. Ignored with --no-log-api.')).addOption(new Option('--log-api-secret [secret]', 'Log API secret. If specified, must also include --log-api-key. Ignored with --no-log-api.')).addOption(new Option('--no-log-api', 'Do not create and add log API key and secret.')).addOption(new Option('--no-validate', 'Do not validate connection.')).addOption(new Option('--authentication-service [service]', 'Name of the authentication service/tree to use.')).addOption(new Option('--authentication-header-overrides [headers]', 'Map of headers: {"host":"am.example.com:8081"}.')).action(
|
|
19
21
|
// implement command logic inside action handler
|
|
20
|
-
async (host, user, password,
|
|
21
|
-
command.handleDefaultArgsAndOpts(host, user, password,
|
|
22
|
-
state.setLogApiKey(
|
|
23
|
-
state.setLogApiSecret(
|
|
22
|
+
async (host, user, password, options, command) => {
|
|
23
|
+
command.handleDefaultArgsAndOpts(host, user, password, options, command);
|
|
24
|
+
state.setLogApiKey(options.logApiKey);
|
|
25
|
+
state.setLogApiSecret(options.logApiSecret);
|
|
24
26
|
if (options.authenticationService) {
|
|
25
27
|
state.setAuthenticationService(options.authenticationService);
|
|
26
28
|
}
|
|
27
29
|
if (options.authenticationHeaderOverrides) {
|
|
28
30
|
state.setAuthenticationHeaderOverrides(JSON.parse(options.authenticationHeaderOverrides));
|
|
29
31
|
}
|
|
30
|
-
|
|
32
|
+
const forceLoginAsUser = !options.sa || (state.getLogApiKey() && state.getLogApiSecret() ? false : true);
|
|
33
|
+
if (options.validate && (await getTokens(forceLoginAsUser)) || !options.validate) {
|
|
31
34
|
verboseMessage(`Saving connection profile for tenant ${state.getHost()}...`);
|
|
32
35
|
// if cloud deployment add service account
|
|
33
36
|
if (options.validate && state.getDeploymentType() === constants.CLOUD_DEPLOYMENT_TYPE_KEY && options.sa && (await isServiceAccountsFeatureAvailable())) {
|
|
@@ -56,6 +59,34 @@ async (host, user, password, key, secret, options, command) => {
|
|
|
56
59
|
else if (!options.validate && options.saId && options.saJwkFile && options.sa) {
|
|
57
60
|
addExistingServiceAccount(options.saId, options.saJwkFile, options.validate);
|
|
58
61
|
}
|
|
62
|
+
// if cloud deployment add log api key and secret
|
|
63
|
+
verboseMessage(options);
|
|
64
|
+
verboseMessage(state);
|
|
65
|
+
if (options.validate && state.getDeploymentType() === constants.CLOUD_DEPLOYMENT_TYPE_KEY && options.logApi) {
|
|
66
|
+
// validate and add existing log api key and secret
|
|
67
|
+
if (options.logApiKey && options.logApiSecret) {
|
|
68
|
+
verboseMessage(`Validating and adding log api key and secret...`);
|
|
69
|
+
if (await addExistingServiceAccount(options.logApiKey, options.logApiSecret, options.validate)) {
|
|
70
|
+
printMessage(`Added log API key ${options.logApiKey} to profile.`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// add new log api key and secret if none already exists in the profile
|
|
74
|
+
else if (!state.getLogApiKey()) {
|
|
75
|
+
try {
|
|
76
|
+
const creds = await provisionCreds();
|
|
77
|
+
state.setLogApiKey(creds.api_key_id);
|
|
78
|
+
state.setLogApiSecret(creds.api_key_secret);
|
|
79
|
+
printMessage(`Created log API key ${creds.api_key_id} and secret.`);
|
|
80
|
+
} catch (error) {
|
|
81
|
+
var _error$response3, _error$response4, _error$response4$data;
|
|
82
|
+
printMessage((_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data, 'error');
|
|
83
|
+
printMessage(`Error creating log API key and secret: ${(_error$response4 = error.response) === null || _error$response4 === void 0 ? void 0 : (_error$response4$data = _error$response4.data) === null || _error$response4$data === void 0 ? void 0 : _error$response4$data.message}`, 'error');
|
|
84
|
+
process.exitCode = 1;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// add existing log api key and secret without validation
|
|
89
|
+
// storing log API key and secret in the connection profile is happening default, therefore no code required here
|
|
59
90
|
if (await saveConnectionProfile(host)) {
|
|
60
91
|
printMessage(`Saved connection profile ${state.getHost()}`);
|
|
61
92
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conn-save.js","names":["FrodoCommand","Option","apiKeyArgument","apiSecretArgument","Authenticate","ConnectionProfile","ServiceAccount","state","constants","verboseMessage","printMessage","addExistingServiceAccount","getTokens","saveConnectionProfile","addNewServiceAccount","isServiceAccountsFeatureAvailable","program","alias","description","addArgument","addOption","action","host","user","password","key","secret","options","command","handleDefaultArgsAndOpts","setLogApiKey","setLogApiSecret","authenticationService","setAuthenticationService","authenticationHeaderOverrides","setAuthenticationHeaderOverrides","JSON","parse","validate","getHost","getDeploymentType","CLOUD_DEPLOYMENT_TYPE_KEY","sa","saId","saJwkFile","getServiceAccountId","name","_id","error","response","data","message","process","exitCode"],"sources":["cli/conn/conn-save.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport { apiKeyArgument, apiSecretArgument } from './conn';\nimport {\n Authenticate,\n ConnectionProfile,\n ServiceAccount,\n state,\n constants,\n} from '@rockcarver/frodo-lib';\nimport { verboseMessage, printMessage } from '../../utils/Console';\nimport { addExistingServiceAccount } from '../../ops/ConnectionProfileOps.js';\n\nconst { getTokens } = Authenticate;\nconst { saveConnectionProfile, addNewServiceAccount } = ConnectionProfile;\nconst { isServiceAccountsFeatureAvailable } = ServiceAccount;\n\nconst program = new FrodoCommand('frodo conn save', ['realm']);\n\nprogram\n .alias('add')\n .description('Save connection profiles.')\n .addArgument(apiKeyArgument)\n .addArgument(apiSecretArgument)\n .addOption(\n new Option(\n '--sa-id <uuid>',\n \"Service account's uuid. If specified, must also include --sa-jwk-file. Ignored with --no-sa.\"\n )\n )\n .addOption(\n new Option(\n '--sa-jwk-file <file>',\n \"File containing the service account's java web key (jwk). Jwk must contain private key! If specified, must also include --sa-id. Ignored with --no-sa.\"\n )\n )\n .addOption(new Option('--no-sa', 'Do not add service account.'))\n .addOption(new Option('--no-validate', 'Do not validate connection.'))\n .addOption(\n new Option(\n '--authentication-service [service]',\n 'Name of the authentication service/tree to use.'\n )\n )\n .addOption(\n new Option(\n '--authentication-header-overrides [headers]',\n 'Map of headers: {\"host\":\"am.example.com:8081\"}.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, user, password, key, secret, options, command) => {\n command.handleDefaultArgsAndOpts(\n host,\n user,\n password,\n key,\n secret,\n options,\n command\n );\n state.setLogApiKey(key);\n state.setLogApiSecret(secret);\n if (options.authenticationService) {\n state.setAuthenticationService(options.authenticationService);\n }\n if (options.authenticationHeaderOverrides) {\n state.setAuthenticationHeaderOverrides(\n JSON.parse(options.authenticationHeaderOverrides)\n );\n }\n if ((options.validate && (await getTokens())) || !options.validate) {\n verboseMessage(\n `Saving connection profile for tenant ${state.getHost()}...`\n );\n // if cloud deployment add service account\n if (\n options.validate &&\n state.getDeploymentType() === constants.CLOUD_DEPLOYMENT_TYPE_KEY &&\n options.sa &&\n (await isServiceAccountsFeatureAvailable())\n ) {\n // validate and add existing service account\n if (options.saId && options.saJwkFile) {\n verboseMessage(`Validating and adding service account...`);\n if (\n await addExistingServiceAccount(\n options.saId,\n options.saJwkFile,\n options.validate\n )\n ) {\n printMessage(\n `Validated and added service account with id ${options.saId} to profile.`\n );\n }\n }\n // add new service account if none already exists in the profile\n else if (!state.getServiceAccountId()) {\n try {\n verboseMessage(`Creating service account...`);\n const sa = await addNewServiceAccount();\n printMessage(\n `Created and added service account ${sa.name} with id ${sa._id} to profile.`\n );\n } catch (error) {\n printMessage(error.response?.data, 'error');\n printMessage(\n `Error creating service account: ${error.response?.data?.message}`,\n 'error'\n );\n process.exitCode = 1;\n }\n }\n }\n // add existing service account without validation\n else if (\n !options.validate &&\n options.saId &&\n options.saJwkFile &&\n options.sa\n ) {\n addExistingServiceAccount(\n options.saId,\n options.saJwkFile,\n options.validate\n );\n }\n if (await saveConnectionProfile(host)) {\n printMessage(`Saved connection profile ${state.getHost()}`);\n } else {\n process.exitCode = 1;\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":"conn-save.js","names":["FrodoCommand","Option","Authenticate","ConnectionProfile","Log","ServiceAccount","state","constants","provisionCreds","verboseMessage","printMessage","addExistingServiceAccount","getTokens","saveConnectionProfile","addNewServiceAccount","isServiceAccountsFeatureAvailable","program","alias","description","addOption","action","host","user","password","options","command","handleDefaultArgsAndOpts","setLogApiKey","logApiKey","setLogApiSecret","logApiSecret","authenticationService","setAuthenticationService","authenticationHeaderOverrides","setAuthenticationHeaderOverrides","JSON","parse","forceLoginAsUser","sa","getLogApiKey","getLogApiSecret","validate","getHost","getDeploymentType","CLOUD_DEPLOYMENT_TYPE_KEY","saId","saJwkFile","getServiceAccountId","name","_id","error","response","data","message","process","exitCode","logApi","creds","api_key_id","api_key_secret"],"sources":["cli/conn/conn-save.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { Option } from 'commander';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n ServiceAccount,\n state,\n constants,\n} from '@rockcarver/frodo-lib';\nconst { provisionCreds } = Log;\nimport { verboseMessage, printMessage } from '../../utils/Console';\nimport { addExistingServiceAccount } from '../../ops/ConnectionProfileOps.js';\n\nconst { getTokens } = Authenticate;\nconst { saveConnectionProfile, addNewServiceAccount } = ConnectionProfile;\nconst { isServiceAccountsFeatureAvailable } = ServiceAccount;\n\nconst program = new FrodoCommand('frodo conn save', ['realm']);\n\nprogram\n .alias('add')\n .description('Save connection profiles.')\n .addOption(\n new Option(\n '--sa-id <uuid>',\n \"Service account's uuid. If specified, must also include --sa-jwk-file. Ignored with --no-sa.\"\n )\n )\n .addOption(\n new Option(\n '--sa-jwk-file <file>',\n \"File containing the service account's java web key (jwk). Jwk must contain private key! If specified, must also include --sa-id. Ignored with --no-sa.\"\n )\n )\n .addOption(new Option('--no-sa', 'Do not create and add service account.'))\n .addOption(\n new Option(\n '--log-api-key [key]',\n 'Log API key. If specified, must also include --log-api-secret. Ignored with --no-log-api.'\n )\n )\n .addOption(\n new Option(\n '--log-api-secret [secret]',\n 'Log API secret. If specified, must also include --log-api-key. Ignored with --no-log-api.'\n )\n )\n .addOption(\n new Option('--no-log-api', 'Do not create and add log API key and secret.')\n )\n .addOption(new Option('--no-validate', 'Do not validate connection.'))\n .addOption(\n new Option(\n '--authentication-service [service]',\n 'Name of the authentication service/tree to use.'\n )\n )\n .addOption(\n new Option(\n '--authentication-header-overrides [headers]',\n 'Map of headers: {\"host\":\"am.example.com:8081\"}.'\n )\n )\n .action(\n // implement command logic inside action handler\n async (host, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(host, user, password, options, command);\n state.setLogApiKey(options.logApiKey);\n state.setLogApiSecret(options.logApiSecret);\n if (options.authenticationService) {\n state.setAuthenticationService(options.authenticationService);\n }\n if (options.authenticationHeaderOverrides) {\n state.setAuthenticationHeaderOverrides(\n JSON.parse(options.authenticationHeaderOverrides)\n );\n }\n const forceLoginAsUser =\n !options.sa ||\n (state.getLogApiKey() && state.getLogApiSecret() ? false : true);\n if (\n (options.validate && (await getTokens(forceLoginAsUser))) ||\n !options.validate\n ) {\n verboseMessage(\n `Saving connection profile for tenant ${state.getHost()}...`\n );\n // if cloud deployment add service account\n if (\n options.validate &&\n state.getDeploymentType() === constants.CLOUD_DEPLOYMENT_TYPE_KEY &&\n options.sa &&\n (await isServiceAccountsFeatureAvailable())\n ) {\n // validate and add existing service account\n if (options.saId && options.saJwkFile) {\n verboseMessage(`Validating and adding service account...`);\n if (\n await addExistingServiceAccount(\n options.saId,\n options.saJwkFile,\n options.validate\n )\n ) {\n printMessage(\n `Validated and added service account with id ${options.saId} to profile.`\n );\n }\n }\n // add new service account if none already exists in the profile\n else if (!state.getServiceAccountId()) {\n try {\n verboseMessage(`Creating service account...`);\n const sa = await addNewServiceAccount();\n printMessage(\n `Created and added service account ${sa.name} with id ${sa._id} to profile.`\n );\n } catch (error) {\n printMessage(error.response?.data, 'error');\n printMessage(\n `Error creating service account: ${error.response?.data?.message}`,\n 'error'\n );\n process.exitCode = 1;\n }\n }\n }\n // add existing service account without validation\n else if (\n !options.validate &&\n options.saId &&\n options.saJwkFile &&\n options.sa\n ) {\n addExistingServiceAccount(\n options.saId,\n options.saJwkFile,\n options.validate\n );\n }\n // if cloud deployment add log api key and secret\n verboseMessage(options);\n verboseMessage(state);\n if (\n options.validate &&\n state.getDeploymentType() === constants.CLOUD_DEPLOYMENT_TYPE_KEY &&\n options.logApi\n ) {\n // validate and add existing log api key and secret\n if (options.logApiKey && options.logApiSecret) {\n verboseMessage(`Validating and adding log api key and secret...`);\n if (\n await addExistingServiceAccount(\n options.logApiKey,\n options.logApiSecret,\n options.validate\n )\n ) {\n printMessage(\n `Added log API key ${options.logApiKey} to profile.`\n );\n }\n }\n // add new log api key and secret if none already exists in the profile\n else if (!state.getLogApiKey()) {\n try {\n const creds = await provisionCreds();\n state.setLogApiKey(creds.api_key_id);\n state.setLogApiSecret(creds.api_key_secret);\n printMessage(\n `Created log API key ${creds.api_key_id} and secret.`\n );\n } catch (error) {\n printMessage(error.response?.data, 'error');\n printMessage(\n `Error creating log API key and secret: ${error.response?.data?.message}`,\n 'error'\n );\n process.exitCode = 1;\n }\n }\n }\n // add existing log api key and secret without validation\n // storing log API key and secret in the connection profile is happening default, therefore no code required here\n if (await saveConnectionProfile(host)) {\n printMessage(`Saved connection profile ${state.getHost()}`);\n } else {\n process.exitCode = 1;\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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"}
|
package/esm/cli/conn/conn.js
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { FrodoStubCommand } from '../FrodoCommand';
|
|
2
|
-
import { Argument } from 'commander';
|
|
3
2
|
import path from 'path';
|
|
4
3
|
import { fileURLToPath } from 'url';
|
|
5
4
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
6
|
-
export const apiKeyArgument = new Argument('[key]', 'API key for logging API.');
|
|
7
|
-
export const apiSecretArgument = new Argument('[secret]', 'API secret for logging API.');
|
|
8
5
|
export default function setup() {
|
|
9
6
|
const program = new FrodoStubCommand('conn').alias('connection')
|
|
10
7
|
// for backwards compatibility
|
package/esm/cli/conn/conn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conn.js","names":["FrodoStubCommand","
|
|
1
|
+
{"version":3,"file":"conn.js","names":["FrodoStubCommand","path","fileURLToPath","__dirname","dirname","import","meta","url","setup","program","alias","description","executableDir","command"],"sources":["cli/conn/conn.ts"],"sourcesContent":["import { FrodoStubCommand } from '../FrodoCommand';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nexport default function setup() {\n const program = new FrodoStubCommand('conn')\n .alias('connection')\n // for backwards compatibility\n .alias('connections')\n .description('Manage connection profiles.')\n .executableDir(__dirname);\n\n program.command('save', 'Save connection profiles.').alias('add');\n\n program.command('delete', 'Delete connection profiles.');\n\n program.command('describe', 'Describe connection profiles.');\n\n program.command('list', 'List connection profiles.');\n\n return program;\n}\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,iBAAiB;AAClD,OAAOC,IAAI,MAAM,MAAM;AACvB,SAASC,aAAa,QAAQ,KAAK;AAEnC,MAAMC,SAAS,GAAGF,IAAI,CAACG,OAAO,CAACF,aAAa,CAACG,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC,CAAC;AAE9D,eAAe,SAASC,KAAK,GAAG;EAC9B,MAAMC,OAAO,GAAG,IAAIT,gBAAgB,CAAC,MAAM,CAAC,CACzCU,KAAK,CAAC,YAAY;EACnB;EAAA,CACCA,KAAK,CAAC,aAAa,CAAC,CACpBC,WAAW,CAAC,6BAA6B,CAAC,CAC1CC,aAAa,CAACT,SAAS,CAAC;EAE3BM,OAAO,CAACI,OAAO,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAACH,KAAK,CAAC,KAAK,CAAC;EAEjED,OAAO,CAACI,OAAO,CAAC,QAAQ,EAAE,6BAA6B,CAAC;EAExDJ,OAAO,CAACI,OAAO,CAAC,UAAU,EAAE,+BAA+B,CAAC;EAE5DJ,OAAO,CAACI,OAAO,CAAC,MAAM,EAAE,2BAA2B,CAAC;EAEpD,OAAOJ,OAAO;AAChB"}
|
|
@@ -49,7 +49,7 @@ Cannot be more than 30 days in the past. If not specified, logs from one hour ag
|
|
|
49
49
|
state.setUsername(conn.username);
|
|
50
50
|
state.setPassword(conn.password);
|
|
51
51
|
}
|
|
52
|
-
if (await getTokens()) {
|
|
52
|
+
if (await getTokens(true)) {
|
|
53
53
|
const creds = await provisionCreds();
|
|
54
54
|
state.setLogApiKey(creds.api_key_id);
|
|
55
55
|
state.setLogApiSecret(creds.api_key_secret);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs-fetch.js","names":["FrodoCommand","sourcesOptionM","Option","Authenticate","ConnectionProfile","Log","state","config","printMessage","provisionCreds","fetchLogs","resolveLevel","getConnectionProfile","saveConnectionProfile","getTokens","SECONDS_IN_30_DAYS","SECONDS_IN_1_HOUR","LOG_TIME_WINDOW_MAX","LOG_TIME_WINDOW_INCREMENT","program","description","addOption","default","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","handleDefaultArgsAndOpts","credsFromParameters","conn","setHost","tenant","logApiKey","logApiSecret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","setUsername","setPassword","creds","api_key_id","api_key_secret","now","Date","nowString","toISOString","beginTimestamp","tempStartDate","setTime","tempEndDate","endTimestamp","beginTs","parse","intermediateEndTs","opts","sources","level","transactionId","searchString","getNoiseFilters","defaults"],"sources":["cli/logging/logs-fetch.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { sourcesOptionM } from './logs';\nimport { Option } from 'commander';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\n\nconst { provisionCreds, fetchLogs, resolveLevel } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst SECONDS_IN_30_DAYS = 2592000;\nconst SECONDS_IN_1_HOUR = 3600;\nconst LOG_TIME_WINDOW_MAX = SECONDS_IN_30_DAYS;\nconst LOG_TIME_WINDOW_INCREMENT = 1;\n\nconst program = new FrodoCommand('frodo logs fetch', ['realm', 'type']);\nprogram\n .description(\n 'Fetch Identity Cloud logs between a specified begin and end time period.\\\n WARNING: depending on filters and time period specified, this could take substantial time to complete.'\n )\n .addOption(sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option(\n '-b, --begin-timestamp <beginTs>',\n 'Begin timestamp for period (in ISO8601, example: \"2022-10-13T19:06:28Z\", or \"2022-09.30\". \\\nCannot be more than 30 days in the past. If not specified, logs from one hour ago are fetched \\\n(-e is ignored)'\n )\n )\n .addOption(\n new Option(\n '-e, --end-timestamp <endTs>',\n 'End timestamp for period. Default: \"now\"'\n )\n )\n .addOption(\n new Option(\n '-s, --search-string <ss>',\n 'Filter by a specific string (ANDed with transactionID filter)'\n )\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in $HOME/${config.FRODO_LOG_NOISEFILTER_FILENAME}`\n )\n )\n .action(async (host, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(host, user, password, options, command);\n let credsFromParameters = true;\n const conn = await getConnectionProfile();\n if (conn) {\n state.setHost(conn.tenant);\n if (conn.logApiKey != null && conn.logApiSecret != null) {\n credsFromParameters = false;\n state.setLogApiKey(conn.logApiKey);\n state.setLogApiSecret(conn.logApiSecret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (!state.getUsername() && !state.getPassword()) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.setUsername(conn.username);\n state.setPassword(conn.password);\n }\n if (await getTokens()) {\n const creds = await provisionCreds();\n state.setLogApiKey(creds.api_key_id);\n state.setLogApiSecret(creds.api_key_secret);\n }\n }\n const now = Date.now() / 1000;\n const nowString = new Date(now * 1000).toISOString();\n if (\n typeof options.beginTimestamp === 'undefined' ||\n !options.beginTimestamp\n ) {\n // no beginTimestamp value specified, default is 1 hour ago\n const tempStartDate = new Date();\n tempStartDate.setTime((now - SECONDS_IN_1_HOUR) * 1000);\n options.beginTimestamp = tempStartDate.toISOString();\n // also override endTimestamp to now\n const tempEndDate = new Date();\n tempEndDate.setTime(now * 1000);\n options.endTimestamp = tempEndDate;\n printMessage(\n 'No timestamps specified, defaulting to logs from 1 hour ago',\n 'info'\n );\n }\n if (\n typeof options.endTimestamp === 'undefined' ||\n !options.endTimestamp\n ) {\n // no endTimestamp value specified, default is now\n options.endTimestamp = nowString;\n printMessage(\n 'No end timestamp specified, defaulting end timestamp to \"now\"',\n 'info'\n );\n }\n let beginTs = Date.parse(options.beginTimestamp) / 1000;\n if (Date.parse(options.endTimestamp) / 1000 < beginTs) {\n printMessage(\n 'End timestamp can not be before begin timestamp',\n 'error'\n );\n return;\n }\n if (now - beginTs > LOG_TIME_WINDOW_MAX) {\n printMessage(\n 'Begin timestamp can not be more than 30 days in the past',\n 'error'\n );\n return;\n }\n let intermediateEndTs = 0;\n printMessage(\n `Fetching ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${resolveLevel(command.opts().level)}] of ${\n conn.tenant\n }...`\n );\n if (credsFromParameters) await saveConnectionProfile(host); // save new values if they were specified on CLI\n\n do {\n intermediateEndTs = beginTs + LOG_TIME_WINDOW_INCREMENT;\n await fetchLogs(\n command.opts().sources,\n new Date(beginTs * 1000).toISOString(),\n new Date(intermediateEndTs * 1000).toISOString(),\n resolveLevel(command.opts().level),\n command.opts().transactionId,\n command.opts().searchString,\n null,\n config.getNoiseFilters(options.defaults)\n );\n beginTs = intermediateEndTs;\n } while (intermediateEndTs < Date.parse(options.endTimestamp) / 1000);\n }\n });\n\nprogram.parse();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logs-fetch.js","names":["FrodoCommand","sourcesOptionM","Option","Authenticate","ConnectionProfile","Log","state","config","printMessage","provisionCreds","fetchLogs","resolveLevel","getConnectionProfile","saveConnectionProfile","getTokens","SECONDS_IN_30_DAYS","SECONDS_IN_1_HOUR","LOG_TIME_WINDOW_MAX","LOG_TIME_WINDOW_INCREMENT","program","description","addOption","default","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","handleDefaultArgsAndOpts","credsFromParameters","conn","setHost","tenant","logApiKey","logApiSecret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","setUsername","setPassword","creds","api_key_id","api_key_secret","now","Date","nowString","toISOString","beginTimestamp","tempStartDate","setTime","tempEndDate","endTimestamp","beginTs","parse","intermediateEndTs","opts","sources","level","transactionId","searchString","getNoiseFilters","defaults"],"sources":["cli/logging/logs-fetch.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { sourcesOptionM } from './logs';\nimport { Option } from 'commander';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\n\nconst { provisionCreds, fetchLogs, resolveLevel } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst SECONDS_IN_30_DAYS = 2592000;\nconst SECONDS_IN_1_HOUR = 3600;\nconst LOG_TIME_WINDOW_MAX = SECONDS_IN_30_DAYS;\nconst LOG_TIME_WINDOW_INCREMENT = 1;\n\nconst program = new FrodoCommand('frodo logs fetch', ['realm', 'type']);\nprogram\n .description(\n 'Fetch Identity Cloud logs between a specified begin and end time period.\\\n WARNING: depending on filters and time period specified, this could take substantial time to complete.'\n )\n .addOption(sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option(\n '-b, --begin-timestamp <beginTs>',\n 'Begin timestamp for period (in ISO8601, example: \"2022-10-13T19:06:28Z\", or \"2022-09.30\". \\\nCannot be more than 30 days in the past. If not specified, logs from one hour ago are fetched \\\n(-e is ignored)'\n )\n )\n .addOption(\n new Option(\n '-e, --end-timestamp <endTs>',\n 'End timestamp for period. Default: \"now\"'\n )\n )\n .addOption(\n new Option(\n '-s, --search-string <ss>',\n 'Filter by a specific string (ANDed with transactionID filter)'\n )\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in $HOME/${config.FRODO_LOG_NOISEFILTER_FILENAME}`\n )\n )\n .action(async (host, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(host, user, password, options, command);\n let credsFromParameters = true;\n const conn = await getConnectionProfile();\n if (conn) {\n state.setHost(conn.tenant);\n if (conn.logApiKey != null && conn.logApiSecret != null) {\n credsFromParameters = false;\n state.setLogApiKey(conn.logApiKey);\n state.setLogApiSecret(conn.logApiSecret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (!state.getUsername() && !state.getPassword()) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.setUsername(conn.username);\n state.setPassword(conn.password);\n }\n if (await getTokens(true)) {\n const creds = await provisionCreds();\n state.setLogApiKey(creds.api_key_id);\n state.setLogApiSecret(creds.api_key_secret);\n }\n }\n const now = Date.now() / 1000;\n const nowString = new Date(now * 1000).toISOString();\n if (\n typeof options.beginTimestamp === 'undefined' ||\n !options.beginTimestamp\n ) {\n // no beginTimestamp value specified, default is 1 hour ago\n const tempStartDate = new Date();\n tempStartDate.setTime((now - SECONDS_IN_1_HOUR) * 1000);\n options.beginTimestamp = tempStartDate.toISOString();\n // also override endTimestamp to now\n const tempEndDate = new Date();\n tempEndDate.setTime(now * 1000);\n options.endTimestamp = tempEndDate;\n printMessage(\n 'No timestamps specified, defaulting to logs from 1 hour ago',\n 'info'\n );\n }\n if (\n typeof options.endTimestamp === 'undefined' ||\n !options.endTimestamp\n ) {\n // no endTimestamp value specified, default is now\n options.endTimestamp = nowString;\n printMessage(\n 'No end timestamp specified, defaulting end timestamp to \"now\"',\n 'info'\n );\n }\n let beginTs = Date.parse(options.beginTimestamp) / 1000;\n if (Date.parse(options.endTimestamp) / 1000 < beginTs) {\n printMessage(\n 'End timestamp can not be before begin timestamp',\n 'error'\n );\n return;\n }\n if (now - beginTs > LOG_TIME_WINDOW_MAX) {\n printMessage(\n 'Begin timestamp can not be more than 30 days in the past',\n 'error'\n );\n return;\n }\n let intermediateEndTs = 0;\n printMessage(\n `Fetching ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${resolveLevel(command.opts().level)}] of ${\n conn.tenant\n }...`\n );\n if (credsFromParameters) await saveConnectionProfile(host); // save new values if they were specified on CLI\n\n do {\n intermediateEndTs = beginTs + LOG_TIME_WINDOW_INCREMENT;\n await fetchLogs(\n command.opts().sources,\n new Date(beginTs * 1000).toISOString(),\n new Date(intermediateEndTs * 1000).toISOString(),\n resolveLevel(command.opts().level),\n command.opts().transactionId,\n command.opts().searchString,\n null,\n config.getNoiseFilters(options.defaults)\n );\n beginTs = intermediateEndTs;\n } while (intermediateEndTs < Date.parse(options.endTimestamp) / 1000);\n }\n });\n\nprogram.parse();\n"],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ program.description('List available ID Cloud log sources.').action(async (host,
|
|
|
35
35
|
state.setUsername(conn.username);
|
|
36
36
|
state.setPassword(conn.password);
|
|
37
37
|
}
|
|
38
|
-
if (await getTokens()) {
|
|
38
|
+
if (await getTokens(true)) {
|
|
39
39
|
const creds = await provisionCreds();
|
|
40
40
|
state.setLogApiKey(creds.api_key_id);
|
|
41
41
|
state.setLogApiSecret(creds.api_key_secret);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs-list.js","names":["FrodoCommand","Authenticate","ConnectionProfile","Log","state","printMessage","verboseMessage","provisionCreds","getLogSources","getConnectionProfile","saveConnectionProfile","getTokens","program","description","action","host","user","password","options","command","handleDefaultArgsAndOpts","credsFromParameters","conn","setHost","tenant","logApiKey","logApiSecret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","setUsername","setPassword","creds","api_key_id","api_key_secret","sources","length","forEach","source","parse"],"sources":["cli/logging/logs-list.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport { printMessage, verboseMessage } from '../../utils/Console';\n\nconst { provisionCreds, getLogSources } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst program = new FrodoCommand('frodo logs list', ['realm', 'type']);\nprogram\n .description('List available ID Cloud log sources.')\n .action(async (host, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(host, user, password, options, command);\n let credsFromParameters = true;\n verboseMessage('Listing available ID Cloud log sources...');\n const conn = await getConnectionProfile();\n if (conn) {\n state.setHost(conn.tenant);\n if (conn.logApiKey != null && conn.logApiSecret != null) {\n credsFromParameters = false;\n state.setLogApiKey(conn.logApiKey);\n state.setLogApiSecret(conn.logApiSecret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (!state.getUsername() && !state.getPassword()) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.setUsername(conn.username);\n state.setPassword(conn.password);\n }\n if (await getTokens()) {\n const creds = await provisionCreds();\n state.setLogApiKey(creds.api_key_id);\n state.setLogApiSecret(creds.api_key_secret);\n }\n }\n\n const sources = await getLogSources();\n if (sources.length === 0) {\n printMessage(\n \"Can't get sources, possible cause - wrong API key or secret\",\n 'error'\n );\n } else {\n if (credsFromParameters) await saveConnectionProfile(host); // save new values if they were specified on CLI\n printMessage(`Log sources from ${conn.tenant}`);\n sources.forEach((source) => {\n printMessage(`${source}`, 'data');\n });\n printMessage(\n 'Use any combination of comma separated sources, example:',\n 'info'\n );\n printMessage(`$ frodo logs tail -c am-core,idm-core ${host}`, 'text');\n }\n }\n });\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SACEC,YAAY,EACZC,iBAAiB,EACjBC,GAAG,EACHC,KAAK,QACA,uBAAuB;AAC9B,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAElE,MAAM;EAAEC,cAAc;EAAEC;AAAc,CAAC,GAAGL,GAAG;AAC7C,MAAM;EAAEM,oBAAoB;EAAEC;AAAsB,CAAC,GAAGR,iBAAiB;AACzE,MAAM;EAAES;AAAU,CAAC,GAAGV,YAAY;AAElC,MAAMW,OAAO,GAAG,IAAIZ,YAAY,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtEY,OAAO,CACJC,WAAW,CAAC,sCAAsC,CAAC,CACnDC,MAAM,CAAC,OAAOC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACxDA,OAAO,CAACC,wBAAwB,CAACL,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,CAAC;EACxE,IAAIE,mBAAmB,GAAG,IAAI;EAC9Bf,cAAc,CAAC,2CAA2C,CAAC;EAC3D,MAAMgB,IAAI,GAAG,MAAMb,oBAAoB,EAAE;EACzC,IAAIa,IAAI,EAAE;IACRlB,KAAK,CAACmB,OAAO,CAACD,IAAI,CAACE,MAAM,CAAC;IAC1B,IAAIF,IAAI,CAACG,SAAS,IAAI,IAAI,IAAIH,IAAI,CAACI,YAAY,IAAI,IAAI,EAAE;MACvDL,mBAAmB,GAAG,KAAK;MAC3BjB,KAAK,CAACuB,YAAY,CAACL,IAAI,CAACG,SAAS,CAAC;MAClCrB,KAAK,CAACwB,eAAe,CAACN,IAAI,CAACI,YAAY,CAAC;IAC1C,CAAC,MAAM;MACL,IAAIJ,IAAI,CAACO,QAAQ,IAAI,IAAI,IAAIP,IAAI,CAACL,QAAQ,IAAI,IAAI,EAAE;QAClD,IAAI,CAACb,KAAK,CAAC0B,WAAW,EAAE,IAAI,CAAC1B,KAAK,CAAC2B,WAAW,EAAE,EAAE;UAChDV,mBAAmB,GAAG,KAAK;UAC3BhB,YAAY,CACV,qFAAqF,EACrF,MAAM,CACP;UACD;QACF;MACF,CAAC,MAAM;QACLD,KAAK,CAAC4B,WAAW,CAACV,IAAI,CAACO,QAAQ,CAAC;QAChCzB,KAAK,CAAC6B,WAAW,CAACX,IAAI,CAACL,QAAQ,CAAC;MAClC;MACA,IAAI,MAAMN,SAAS,
|
|
1
|
+
{"version":3,"file":"logs-list.js","names":["FrodoCommand","Authenticate","ConnectionProfile","Log","state","printMessage","verboseMessage","provisionCreds","getLogSources","getConnectionProfile","saveConnectionProfile","getTokens","program","description","action","host","user","password","options","command","handleDefaultArgsAndOpts","credsFromParameters","conn","setHost","tenant","logApiKey","logApiSecret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","setUsername","setPassword","creds","api_key_id","api_key_secret","sources","length","forEach","source","parse"],"sources":["cli/logging/logs-list.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport { printMessage, verboseMessage } from '../../utils/Console';\n\nconst { provisionCreds, getLogSources } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst program = new FrodoCommand('frodo logs list', ['realm', 'type']);\nprogram\n .description('List available ID Cloud log sources.')\n .action(async (host, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(host, user, password, options, command);\n let credsFromParameters = true;\n verboseMessage('Listing available ID Cloud log sources...');\n const conn = await getConnectionProfile();\n if (conn) {\n state.setHost(conn.tenant);\n if (conn.logApiKey != null && conn.logApiSecret != null) {\n credsFromParameters = false;\n state.setLogApiKey(conn.logApiKey);\n state.setLogApiSecret(conn.logApiSecret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (!state.getUsername() && !state.getPassword()) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.setUsername(conn.username);\n state.setPassword(conn.password);\n }\n if (await getTokens(true)) {\n const creds = await provisionCreds();\n state.setLogApiKey(creds.api_key_id);\n state.setLogApiSecret(creds.api_key_secret);\n }\n }\n\n const sources = await getLogSources();\n if (sources.length === 0) {\n printMessage(\n \"Can't get sources, possible cause - wrong API key or secret\",\n 'error'\n );\n } else {\n if (credsFromParameters) await saveConnectionProfile(host); // save new values if they were specified on CLI\n printMessage(`Log sources from ${conn.tenant}`);\n sources.forEach((source) => {\n printMessage(`${source}`, 'data');\n });\n printMessage(\n 'Use any combination of comma separated sources, example:',\n 'info'\n );\n printMessage(`$ frodo logs tail -c am-core,idm-core ${host}`, 'text');\n }\n }\n });\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SACEC,YAAY,EACZC,iBAAiB,EACjBC,GAAG,EACHC,KAAK,QACA,uBAAuB;AAC9B,SAASC,YAAY,EAAEC,cAAc,QAAQ,qBAAqB;AAElE,MAAM;EAAEC,cAAc;EAAEC;AAAc,CAAC,GAAGL,GAAG;AAC7C,MAAM;EAAEM,oBAAoB;EAAEC;AAAsB,CAAC,GAAGR,iBAAiB;AACzE,MAAM;EAAES;AAAU,CAAC,GAAGV,YAAY;AAElC,MAAMW,OAAO,GAAG,IAAIZ,YAAY,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtEY,OAAO,CACJC,WAAW,CAAC,sCAAsC,CAAC,CACnDC,MAAM,CAAC,OAAOC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACxDA,OAAO,CAACC,wBAAwB,CAACL,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,CAAC;EACxE,IAAIE,mBAAmB,GAAG,IAAI;EAC9Bf,cAAc,CAAC,2CAA2C,CAAC;EAC3D,MAAMgB,IAAI,GAAG,MAAMb,oBAAoB,EAAE;EACzC,IAAIa,IAAI,EAAE;IACRlB,KAAK,CAACmB,OAAO,CAACD,IAAI,CAACE,MAAM,CAAC;IAC1B,IAAIF,IAAI,CAACG,SAAS,IAAI,IAAI,IAAIH,IAAI,CAACI,YAAY,IAAI,IAAI,EAAE;MACvDL,mBAAmB,GAAG,KAAK;MAC3BjB,KAAK,CAACuB,YAAY,CAACL,IAAI,CAACG,SAAS,CAAC;MAClCrB,KAAK,CAACwB,eAAe,CAACN,IAAI,CAACI,YAAY,CAAC;IAC1C,CAAC,MAAM;MACL,IAAIJ,IAAI,CAACO,QAAQ,IAAI,IAAI,IAAIP,IAAI,CAACL,QAAQ,IAAI,IAAI,EAAE;QAClD,IAAI,CAACb,KAAK,CAAC0B,WAAW,EAAE,IAAI,CAAC1B,KAAK,CAAC2B,WAAW,EAAE,EAAE;UAChDV,mBAAmB,GAAG,KAAK;UAC3BhB,YAAY,CACV,qFAAqF,EACrF,MAAM,CACP;UACD;QACF;MACF,CAAC,MAAM;QACLD,KAAK,CAAC4B,WAAW,CAACV,IAAI,CAACO,QAAQ,CAAC;QAChCzB,KAAK,CAAC6B,WAAW,CAACX,IAAI,CAACL,QAAQ,CAAC;MAClC;MACA,IAAI,MAAMN,SAAS,CAAC,IAAI,CAAC,EAAE;QACzB,MAAMuB,KAAK,GAAG,MAAM3B,cAAc,EAAE;QACpCH,KAAK,CAACuB,YAAY,CAACO,KAAK,CAACC,UAAU,CAAC;QACpC/B,KAAK,CAACwB,eAAe,CAACM,KAAK,CAACE,cAAc,CAAC;MAC7C;IACF;IAEA,MAAMC,OAAO,GAAG,MAAM7B,aAAa,EAAE;IACrC,IAAI6B,OAAO,CAACC,MAAM,KAAK,CAAC,EAAE;MACxBjC,YAAY,CACV,6DAA6D,EAC7D,OAAO,CACR;IACH,CAAC,MAAM;MACL,IAAIgB,mBAAmB,EAAE,MAAMX,qBAAqB,CAACK,IAAI,CAAC,CAAC,CAAC;MAC5DV,YAAY,CAAE,oBAAmBiB,IAAI,CAACE,MAAO,EAAC,CAAC;MAC/Ca,OAAO,CAACE,OAAO,CAAEC,MAAM,IAAK;QAC1BnC,YAAY,CAAE,GAAEmC,MAAO,EAAC,EAAE,MAAM,CAAC;MACnC,CAAC,CAAC;MACFnC,YAAY,CACV,0DAA0D,EAC1D,MAAM,CACP;MACDA,YAAY,CAAE,yCAAwCU,IAAK,EAAC,EAAE,MAAM,CAAC;IACvE;EACF;AACF,CAAC,CAAC;AAEJH,OAAO,CAAC6B,KAAK,EAAE"}
|
|
@@ -42,7 +42,7 @@ Following values are possible (values on the same line are equivalent): \
|
|
|
42
42
|
state.setUsername(conn.username);
|
|
43
43
|
state.setPassword(conn.password);
|
|
44
44
|
}
|
|
45
|
-
if (await getTokens()) {
|
|
45
|
+
if (await getTokens(true)) {
|
|
46
46
|
const creds = await provisionCreds();
|
|
47
47
|
state.setLogApiKey(creds.api_key_id);
|
|
48
48
|
state.setLogApiSecret(creds.api_key_secret);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs-tail.js","names":["FrodoCommand","sourcesOptionM","Option","Authenticate","ConnectionProfile","Log","state","config","printMessage","provisionCreds","tailLogs","resolveLevel","getConnectionProfile","saveConnectionProfile","getTokens","program","description","addOption","default","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","handleDefaultArgsAndOpts","credsFromParameters","conn","setHost","tenant","logApiKey","logApiSecret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","setUsername","setPassword","creds","api_key_id","api_key_secret","opts","sources","level","transactionId","getNoiseFilters","defaults","parse"],"sources":["cli/logging/logs-tail.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { sourcesOptionM } from './logs';\nimport { Option } from 'commander';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\n\nconst { provisionCreds, tailLogs, resolveLevel } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst program = new FrodoCommand('frodo logs tail', ['realm', 'type']);\nprogram\n .description('Tail Identity Cloud logs.')\n .addOption(sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in $HOME/${config.FRODO_LOG_NOISEFILTER_FILENAME}`\n )\n )\n .action(async (host, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(host, user, password, options, command);\n let credsFromParameters = true;\n const conn = await getConnectionProfile();\n if (conn) {\n state.setHost(conn.tenant);\n if (conn.logApiKey != null && conn.logApiSecret != null) {\n credsFromParameters = false;\n state.setLogApiKey(conn.logApiKey);\n state.setLogApiSecret(conn.logApiSecret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (!state.getUsername() && !state.getPassword()) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.setUsername(conn.username);\n state.setPassword(conn.password);\n }\n if (await getTokens()) {\n const creds = await provisionCreds();\n state.setLogApiKey(creds.api_key_id);\n state.setLogApiSecret(creds.api_key_secret);\n }\n }\n printMessage(\n `Tailing ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${resolveLevel(command.opts().level)}] of ${\n conn.tenant\n }...`\n );\n if (credsFromParameters) await saveConnectionProfile(host); // save new values if they were specified on CLI\n await tailLogs(\n command.opts().sources,\n resolveLevel(command.opts().level),\n command.opts().transactionId,\n null,\n config.getNoiseFilters(options.defaults)\n );\n }\n });\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,cAAc,QAAQ,QAAQ;AACvC,SAASC,MAAM,QAAQ,WAAW;AAClC,SACEC,YAAY,EACZC,iBAAiB,EACjBC,GAAG,EACHC,KAAK,QACA,uBAAuB;AAC9B,OAAO,KAAKC,MAAM,MAAM,oBAAoB;AAC5C,SAASC,YAAY,QAAQ,qBAAqB;AAElD,MAAM;EAAEC,cAAc;EAAEC,QAAQ;EAAEC;AAAa,CAAC,GAAGN,GAAG;AACtD,MAAM;EAAEO,oBAAoB;EAAEC;AAAsB,CAAC,GAAGT,iBAAiB;AACzE,MAAM;EAAEU;AAAU,CAAC,GAAGX,YAAY;AAElC,MAAMY,OAAO,GAAG,IAAIf,YAAY,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtEe,OAAO,CACJC,WAAW,CAAC,2BAA2B,CAAC,CACxCC,SAAS,CAAChB,cAAc,CAAC,CACzBgB,SAAS,CACR,IAAIf,MAAM,CACR,qBAAqB,EACrB;AACN;AACA;AACA;AACA,WAAW,CACN,CAACgB,OAAO,CAAC,OAAO,EAAG,GAAEP,YAAY,CAAC,OAAO,CAAE,EAAC,CAAC,CAC/C,CACAM,SAAS,CACR,IAAIf,MAAM,CAAC,6BAA6B,EAAE,yBAAyB,CAAC,CACrE,CACAe,SAAS,CACR,IAAIf,MAAM,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAACgB,OAAO,CACvE,KAAK,EACJ,qDAAoDX,MAAM,CAACY,8BAA+B,EAAC,CAC7F,CACF,CACAC,MAAM,CAAC,OAAOC,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,KAAK;EACxDA,OAAO,CAACC,wBAAwB,CAACL,IAAI,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,EAAEC,OAAO,CAAC;EACxE,IAAIE,mBAAmB,GAAG,IAAI;EAC9B,MAAMC,IAAI,GAAG,MAAMhB,oBAAoB,EAAE;EACzC,IAAIgB,IAAI,EAAE;IACRtB,KAAK,CAACuB,OAAO,CAACD,IAAI,CAACE,MAAM,CAAC;IAC1B,IAAIF,IAAI,CAACG,SAAS,IAAI,IAAI,IAAIH,IAAI,CAACI,YAAY,IAAI,IAAI,EAAE;MACvDL,mBAAmB,GAAG,KAAK;MAC3BrB,KAAK,CAAC2B,YAAY,CAACL,IAAI,CAACG,SAAS,CAAC;MAClCzB,KAAK,CAAC4B,eAAe,CAACN,IAAI,CAACI,YAAY,CAAC;IAC1C,CAAC,MAAM;MACL,IAAIJ,IAAI,CAACO,QAAQ,IAAI,IAAI,IAAIP,IAAI,CAACL,QAAQ,IAAI,IAAI,EAAE;QAClD,IAAI,CAACjB,KAAK,CAAC8B,WAAW,EAAE,IAAI,CAAC9B,KAAK,CAAC+B,WAAW,EAAE,EAAE;UAChDV,mBAAmB,GAAG,KAAK;UAC3BnB,YAAY,CACV,qFAAqF,EACrF,MAAM,CACP;UACD;QACF;MACF,CAAC,MAAM;QACLF,KAAK,CAACgC,WAAW,CAACV,IAAI,CAACO,QAAQ,CAAC;QAChC7B,KAAK,CAACiC,WAAW,CAACX,IAAI,CAACL,QAAQ,CAAC;MAClC;MACA,IAAI,MAAMT,SAAS,
|
|
1
|
+
{"version":3,"file":"logs-tail.js","names":["FrodoCommand","sourcesOptionM","Option","Authenticate","ConnectionProfile","Log","state","config","printMessage","provisionCreds","tailLogs","resolveLevel","getConnectionProfile","saveConnectionProfile","getTokens","program","description","addOption","default","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","handleDefaultArgsAndOpts","credsFromParameters","conn","setHost","tenant","logApiKey","logApiSecret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","setUsername","setPassword","creds","api_key_id","api_key_secret","opts","sources","level","transactionId","getNoiseFilters","defaults","parse"],"sources":["cli/logging/logs-tail.ts"],"sourcesContent":["import { FrodoCommand } from '../FrodoCommand';\nimport { sourcesOptionM } from './logs';\nimport { Option } from 'commander';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\n\nconst { provisionCreds, tailLogs, resolveLevel } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst program = new FrodoCommand('frodo logs tail', ['realm', 'type']);\nprogram\n .description('Tail Identity Cloud logs.')\n .addOption(sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in $HOME/${config.FRODO_LOG_NOISEFILTER_FILENAME}`\n )\n )\n .action(async (host, user, password, options, command) => {\n command.handleDefaultArgsAndOpts(host, user, password, options, command);\n let credsFromParameters = true;\n const conn = await getConnectionProfile();\n if (conn) {\n state.setHost(conn.tenant);\n if (conn.logApiKey != null && conn.logApiSecret != null) {\n credsFromParameters = false;\n state.setLogApiKey(conn.logApiKey);\n state.setLogApiSecret(conn.logApiSecret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (!state.getUsername() && !state.getPassword()) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.setUsername(conn.username);\n state.setPassword(conn.password);\n }\n if (await getTokens(true)) {\n const creds = await provisionCreds();\n state.setLogApiKey(creds.api_key_id);\n state.setLogApiSecret(creds.api_key_secret);\n }\n }\n printMessage(\n `Tailing ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${resolveLevel(command.opts().level)}] of ${\n conn.tenant\n }...`\n );\n if (credsFromParameters) await saveConnectionProfile(host); // save new values if they were specified on CLI\n await tailLogs(\n command.opts().sources,\n resolveLevel(command.opts().level),\n command.opts().transactionId,\n null,\n config.getNoiseFilters(options.defaults)\n );\n }\n });\n\nprogram.parse();\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionProfileOps.js","names":["fs","Authenticate","state","failSpinner","showSpinner","succeedSpinner","getAccessTokenForServiceAccount","addExistingServiceAccount","serviceAccountId","privateKeyFile","validate","data","readFileSync","jwk","JSON","parse","toString","token","default","session","setServiceAccountId","setServiceAccountJwk","err"],"sources":["ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { Authenticate, state } from '@rockcarver/frodo-lib';\nimport { failSpinner, showSpinner, succeedSpinner } from '../utils/Console';\n\nconst { getAccessTokenForServiceAccount } = Authenticate;\n\nexport async function addExistingServiceAccount(\n serviceAccountId: string,\n privateKeyFile: string,\n validate: boolean\n): Promise<boolean> {\n try {\n const data = fs.readFileSync(privateKeyFile);\n const jwk = JSON.parse(data.toString());\n if (validate) {\n showSpinner(`Validating service account ${serviceAccountId}...`);\n const token = await getAccessTokenForServiceAccount(\n serviceAccountId,\n jwk\n );\n if (token === null) {\n failSpinner(`Failed to validate service account ${serviceAccountId}.`);\n return false;\n } else {\n succeedSpinner(\n `Successfully validated service account ${serviceAccountId}.`\n );\n }\n }\n state.default.session.setServiceAccountId(serviceAccountId);\n state.default.session.setServiceAccountJwk(jwk);\n return true;\n } catch (err) {\n failSpinner(\n `Failed to validate service account ${serviceAccountId}: ${err}.`\n );\n
|
|
1
|
+
{"version":3,"file":"ConnectionProfileOps.js","names":["fs","Authenticate","state","failSpinner","showSpinner","succeedSpinner","getAccessTokenForServiceAccount","addExistingServiceAccount","serviceAccountId","privateKeyFile","validate","data","readFileSync","jwk","JSON","parse","toString","token","default","session","setServiceAccountId","setServiceAccountJwk","err"],"sources":["ops/ConnectionProfileOps.ts"],"sourcesContent":["import fs from 'fs';\nimport { Authenticate, state } from '@rockcarver/frodo-lib';\nimport { failSpinner, showSpinner, succeedSpinner } from '../utils/Console';\n\nconst { getAccessTokenForServiceAccount } = Authenticate;\n\nexport async function addExistingServiceAccount(\n serviceAccountId: string,\n privateKeyFile: string,\n validate: boolean\n): Promise<boolean> {\n try {\n const data = fs.readFileSync(privateKeyFile);\n const jwk = JSON.parse(data.toString());\n if (validate) {\n showSpinner(`Validating service account ${serviceAccountId}...`);\n const token = await getAccessTokenForServiceAccount(\n serviceAccountId,\n jwk\n );\n if (token === null) {\n failSpinner(`Failed to validate service account ${serviceAccountId}.`);\n return false;\n } else {\n succeedSpinner(\n `Successfully validated service account ${serviceAccountId}.`\n );\n }\n }\n state.default.session.setServiceAccountId(serviceAccountId);\n state.default.session.setServiceAccountJwk(jwk);\n return true;\n } catch (err) {\n failSpinner(\n `Failed to validate service account ${serviceAccountId}: ${err}.`\n );\n }\n return false;\n}\n"],"mappings":"AAAA,OAAOA,EAAE,MAAM,IAAI;AACnB,SAASC,YAAY,EAAEC,KAAK,QAAQ,uBAAuB;AAC3D,SAASC,WAAW,EAAEC,WAAW,EAAEC,cAAc,QAAQ,kBAAkB;AAE3E,MAAM;EAAEC;AAAgC,CAAC,GAAGL,YAAY;AAExD,OAAO,eAAeM,yBAAyB,CAC7CC,gBAAwB,EACxBC,cAAsB,EACtBC,QAAiB,EACC;EAClB,IAAI;IACF,MAAMC,IAAI,GAAGX,EAAE,CAACY,YAAY,CAACH,cAAc,CAAC;IAC5C,MAAMI,GAAG,GAAGC,IAAI,CAACC,KAAK,CAACJ,IAAI,CAACK,QAAQ,EAAE,CAAC;IACvC,IAAIN,QAAQ,EAAE;MACZN,WAAW,CAAE,8BAA6BI,gBAAiB,KAAI,CAAC;MAChE,MAAMS,KAAK,GAAG,MAAMX,+BAA+B,CACjDE,gBAAgB,EAChBK,GAAG,CACJ;MACD,IAAII,KAAK,KAAK,IAAI,EAAE;QAClBd,WAAW,CAAE,sCAAqCK,gBAAiB,GAAE,CAAC;QACtE,OAAO,KAAK;MACd,CAAC,MAAM;QACLH,cAAc,CACX,0CAAyCG,gBAAiB,GAAE,CAC9D;MACH;IACF;IACAN,KAAK,CAACgB,OAAO,CAACC,OAAO,CAACC,mBAAmB,CAACZ,gBAAgB,CAAC;IAC3DN,KAAK,CAACgB,OAAO,CAACC,OAAO,CAACE,oBAAoB,CAACR,GAAG,CAAC;IAC/C,OAAO,IAAI;EACb,CAAC,CAAC,OAAOS,GAAG,EAAE;IACZnB,WAAW,CACR,sCAAqCK,gBAAiB,KAAIc,GAAI,GAAE,CAClE;EACH;EACA,OAAO,KAAK;AACd"}
|
package/esm/ops/Saml2Ops.js
CHANGED
|
@@ -130,6 +130,7 @@ export async function exportSaml2MetadataToFile(entityId, file = null) {
|
|
|
130
130
|
updateProgressBar(`Writing file ${fileName}`);
|
|
131
131
|
const metaData = await getProviderMetadata(entityId);
|
|
132
132
|
saveTextToFile(metaData, fileName);
|
|
133
|
+
updateProgressBar(`Exported provider ${entityId}`);
|
|
133
134
|
stopProgressBar(`Exported ${entityId.brightCyan} metadata to ${fileName.brightCyan}.`);
|
|
134
135
|
} catch (error) {
|
|
135
136
|
stopProgressBar(`${error}`);
|
|
@@ -152,6 +153,7 @@ export async function exportSaml2ProviderToFile(entityId, file = null) {
|
|
|
152
153
|
createProgressBar(1, `Exporting provider ${entityId}`);
|
|
153
154
|
const fileData = await exportSaml2Provider(entityId);
|
|
154
155
|
saveJsonToFile(fileData, fileName);
|
|
156
|
+
updateProgressBar(`Exported provider ${entityId}`);
|
|
155
157
|
stopProgressBar(`Exported ${entityId.brightCyan} to ${fileName.brightCyan}.`);
|
|
156
158
|
} catch (err) {
|
|
157
159
|
stopProgressBar(`${err}`);
|
|
@@ -189,10 +191,10 @@ export async function exportSaml2ProvidersToFiles() {
|
|
|
189
191
|
if (stubs.length > 0) {
|
|
190
192
|
createProgressBar(stubs.length, 'Exporting providers');
|
|
191
193
|
for (const stub of stubs) {
|
|
192
|
-
updateProgressBar(`Exporting provider ${stub.entityId}`);
|
|
193
194
|
const fileName = getTypedFilename(stub.entityId, 'saml');
|
|
194
195
|
const fileData = await exportSaml2Provider(stub.entityId);
|
|
195
196
|
saveJsonToFile(fileData, fileName);
|
|
197
|
+
updateProgressBar(`Exported provider ${stub.entityId}`);
|
|
196
198
|
}
|
|
197
199
|
stopProgressBar(`${stubs.length} providers exported.`);
|
|
198
200
|
} else {
|
package/esm/ops/Saml2Ops.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Saml2Ops.js","names":["fs","path","Saml2","ExportImportUtils","Base64","createObjectTable","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","saveTextToFile","roleMap","exportSaml2Provider","exportSaml2Providers","getSaml2ProviderStubs","getProviderByLocationAndId","getProviderMetadata","getProviderMetadataUrl","getSaml2ProviderStub","getRawSaml2Providers","getRawSaml2Provider","importSaml2Provider","importSaml2Providers","putRawSaml2Provider","getTypedFilename","saveJsonToFile","getRealmString","saveToFile","validateImport","getOneLineDescription","saml2ProviderObj","roles","key","value","Object","entries","push","description","entityId","entityLocation","length","join","getTableHeaderMd","markdown","getTableRowMd","row","listSaml2Providers","long","providerList","sort","a","b","_id","localeCompare","provider","table","location","map","role","toString","describeSaml2Provider","stub","id","rawProviderData","_rev","metadataUrl","error","message","exportSaml2MetadataToFile","file","fileName","metaData","brightCyan","exportSaml2ProviderToFile","fileData","err","exportSaml2ProvidersToFile","exportData","response","status","exportSaml2ProvidersToFiles","stubs","importSaml2ProviderFromFile","readFile","data","JSON","parse","importFirstSaml2ProviderFromFile","entityId64","keys","saml","remote","hosted","decode","importSaml2ProvidersFromFile","meta","importSaml2ProvidersFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","totalStatus","total","successes","warnings","failures","readFileSync","myStatus","listRawSaml2Providers","result","exportRawSaml2ProviderToFile","rawData","stringify","exportRawSaml2ProvidersToFile","samlApplicationList","exportRawSaml2ProvidersToFiles","hasError","exportedAmount","item","samlApplicationData","importRawSaml2ProviderFromFile","indexOf","samlEntityData","application","importFirstRawSaml2ProviderFromFile","importRawSaml2ProvidersFromFile","amountOfEntities","then","importRawSaml2ProvidersFromFiles","directory","files","filesToImport","forEach","filePathAbsolute"],"sources":["ops/Saml2Ops.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { Saml2ProviderSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { Saml2, ExportImportUtils, Base64 } from '@rockcarver/frodo-lib';\nimport {\n MultiOpStatusInterface,\n Saml2ExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/OpsTypes';\nimport {\n createObjectTable,\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport { saveTextToFile } from '../utils/ExportImportUtils';\n\nconst {\n roleMap,\n exportSaml2Provider,\n exportSaml2Providers,\n getSaml2ProviderStubs,\n getProviderByLocationAndId,\n getProviderMetadata,\n getProviderMetadataUrl,\n getSaml2ProviderStub,\n getRawSaml2Providers,\n getRawSaml2Provider,\n importSaml2Provider,\n importSaml2Providers,\n putRawSaml2Provider,\n} = Saml2;\nconst {\n getTypedFilename,\n saveJsonToFile,\n getRealmString,\n saveToFile,\n validateImport,\n} = ExportImportUtils;\n\n/**\n * Get a one-line description of the saml2 provider object\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n saml2ProviderObj: Saml2ProviderSkeleton\n): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const description = `[${saml2ProviderObj.entityId['brightCyan']}]${\n ' (' + saml2ProviderObj.entityLocation\n }${roles.length ? ' ' + roles.join(', ') + ')' : ')'}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Entity Id | Location | Role(s) |\\n';\n markdown += '| --------- | -------- | ------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the saml2 provider in markdown\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a table-row of the saml2 provider in markdown\n */\nexport function getTableRowMd(saml2ProviderObj: Saml2ProviderSkeleton): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const row = `| ${saml2ProviderObj.entityId} | ${\n saml2ProviderObj.entityLocation\n } | ${roles.length ? roles.join(', ') : ''} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {boolean} long Long list format with details\n */\nexport async function listSaml2Providers(long = false) {\n const providerList = await getSaml2ProviderStubs();\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const provider of providerList) {\n printMessage(`${provider.entityId}`, 'data');\n }\n } else {\n const table = createTable([\n 'Entity Id'['brightCyan'],\n 'Location'['brightCyan'],\n 'Role(s)'['brightCyan'],\n ]);\n for (const provider of providerList) {\n table.push([\n provider.entityId,\n provider.location,\n provider.roles.map((role) => roleMap[role]).join(', '),\n ]);\n }\n printMessage(table.toString());\n }\n}\n\n/**\n * Describe an entity provider's configuration\n * @param {String} entityId Provider entity id\n */\nexport async function describeSaml2Provider(entityId) {\n try {\n const stub = await getSaml2ProviderStub(entityId);\n printMessage(stub);\n const { location } = stub;\n const id = stub._id;\n const roles = stub.roles.map((role: string) => roleMap[role]).join(', ');\n const rawProviderData = await getProviderByLocationAndId(location, id);\n delete rawProviderData._id;\n delete rawProviderData._rev;\n rawProviderData.location = location;\n rawProviderData.roles = roles;\n rawProviderData.metadataUrl = getProviderMetadataUrl(entityId);\n const table = createObjectTable(rawProviderData);\n printMessage(table.toString());\n } catch (error) {\n printMessage(error.message, 'error');\n }\n}\n\n/**\n * Export provider metadata to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2MetadataToFile(entityId, file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'metadata', 'xml');\n }\n createProgressBar(1, `Exporting metadata for: ${entityId}`);\n try {\n updateProgressBar(`Writing file ${fileName}`);\n const metaData = await getProviderMetadata(entityId);\n saveTextToFile(metaData, fileName);\n stopProgressBar(\n `Exported ${entityId.brightCyan} metadata to ${fileName.brightCyan}.`\n );\n } catch (error) {\n stopProgressBar(`${error}`);\n printMessage(error, 'error');\n }\n}\n\n/**\n * Export a single entity provider to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProviderToFile(entityId, file = null) {\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`\n );\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'saml');\n }\n try {\n createProgressBar(1, `Exporting provider ${entityId}`);\n const fileData = await exportSaml2Provider(entityId);\n saveJsonToFile(fileData, fileName);\n stopProgressBar(\n `Exported ${entityId.brightCyan} to ${fileName.brightCyan}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: end [entityId=${entityId}, file=${fileName}]`\n );\n}\n\n/**\n * Export all entity providers to one file\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProvidersToFile(file = null) {\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`all${getRealmString()}Providers`, 'saml');\n }\n try {\n const exportData = await exportSaml2Providers();\n saveJsonToFile(exportData, fileName);\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [file=${file}]`);\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportSaml2ProvidersToFiles() {\n const stubs = await getSaml2ProviderStubs();\n if (stubs.length > 0) {\n createProgressBar(stubs.length, 'Exporting providers');\n for (const stub of stubs) {\n updateProgressBar(`Exporting provider ${stub.entityId}`);\n const fileName = getTypedFilename(stub.entityId, 'saml');\n const fileData = await exportSaml2Provider(stub.entityId);\n saveJsonToFile(fileData, fileName);\n }\n stopProgressBar(`${stubs.length} providers exported.`);\n } else {\n printMessage('No entity providers found.', 'info');\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} entityId Provider entity id\n * @param {String} file Import file name\n */\nexport async function importSaml2ProviderFromFile(\n entityId: string,\n file: string\n) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n succeedSpinner(`Imported ${entityId}.`);\n } catch (error) {\n failSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n });\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} file Import file name\n */\nexport async function importFirstSaml2ProviderFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data) as Saml2ExportInterface;\n // pick the first provider and run with it\n const entityId64 =\n Object.keys(fileData.saml.remote)[0] ||\n Object.keys(fileData.saml.hosted)[0];\n const entityId = Base64.decode(entityId64);\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n succeedSpinner(`Imported ${entityId}.`);\n } catch (error) {\n failSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n });\n}\n\n/**\n * Import all SAML entity providers from file\n * @param {String} file Import file name\n */\nexport async function importSaml2ProvidersFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n await importSaml2Providers(fileData);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML entity providers from all *.saml.json files in the current directory\n */\nexport async function importSaml2ProvidersFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.saml.json')\n );\n createProgressBar(jsonFiles.length, 'Importing providers...');\n const totalStatus: MultiOpStatusInterface = {\n total: 0,\n successes: 0,\n warnings: 0,\n failures: 0,\n };\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n const myStatus = await importSaml2Providers(fileData);\n totalStatus.total += myStatus.total;\n totalStatus.successes += myStatus.successes;\n totalStatus.warnings += myStatus.warnings;\n totalStatus.failures += myStatus.failures;\n updateProgressBar(\n `Imported ${myStatus.successes}/${myStatus.total} provider(s) from ${file}.`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressBar(\n `Imported ${totalStatus.successes} of ${totalStatus.total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n\n/**\n * List entity providers\n */\nexport async function listRawSaml2Providers() {\n const providerList = (await getRawSaml2Providers()).result;\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n for (const provider of providerList) {\n printMessage(`${provider._id}`, 'data');\n }\n}\n\n/**\n * Exports a RAW SAML entity, which means the raw xml is included.\n * @param {string} entityId Reference to the entity for export\n * @param {string} file Optional filename for the exported file\n */\nexport async function exportRawSaml2ProviderToFile(entityId, file = null) {\n printMessage(`Exporting raw SAML entity provider ${entityId}`, 'info');\n let fileName = file;\n if (!file) {\n fileName = getTypedFilename(`${entityId}`, 'raw.saml');\n }\n createProgressBar(1, `Exporting raw entity provider: ${entityId}`);\n try {\n const rawData = await getRawSaml2Provider(entityId);\n updateProgressBar(`Writing file ${fileName}`);\n saveTextToFile(JSON.stringify(rawData, null, 2), fileName);\n stopProgressBar(`Exported raw entity provider ${entityId} to ${fileName}.`);\n } catch (error) {\n stopProgressBar(`Error exporting raw entity ${entityId}: ${error.message}`);\n printMessage(error.response?.data, 'error');\n }\n}\n\n/**\n * Export all entity providers raw to one file\n * @param {String} file Optional filename\n */\nexport async function exportRawSaml2ProvidersToFile(file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${getRealmString()}ProvidersRaw`,\n 'raw.saml'\n );\n }\n try {\n const samlApplicationList = (await getRawSaml2Providers()).result;\n\n saveToFile('application', samlApplicationList, '_id', fileName);\n printMessage(\n `All RAW saml entity providers exported to: ${fileName}`,\n 'info'\n );\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportRawSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportRawSaml2ProvidersToFiles() {\n const samlApplicationList = (await getRawSaml2Providers()).result;\n let hasError = false;\n createProgressBar(samlApplicationList.length, 'Exporting RAW providers');\n let exportedAmount = 0;\n for (const item of samlApplicationList) {\n updateProgressBar(`Exporting provider ${item.entityId}`);\n try {\n const samlApplicationData = await getRawSaml2Provider(item._id);\n const fileName = getTypedFilename(\n `${item._id}${getRealmString()}ProviderRaw`,\n 'raw.saml'\n );\n saveToFile('application', [samlApplicationData], '_id', fileName);\n exportedAmount++;\n } catch (error) {\n hasError = true;\n printMessage(`Unable to export: ${item._id}`, 'error');\n }\n }\n stopProgressBar(`${exportedAmount} providers exported.`);\n if (!hasError) {\n printMessage('All entities exported.', 'info');\n } else {\n printMessage('All other entities exported.', 'info');\n }\n}\n\n/**\n * Imports a raw SAML export file (containing one entity).\n * @param {string} file The import file\n */\nexport async function importRawSaml2ProviderFromFile(\n // entityId: string,\n file: string\n) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawSaml2Provider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Import first raw SAML entity provider from file\n * @param {String} file Import file name\n */\nexport async function importFirstRawSaml2ProviderFromFile(file) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawSaml2Provider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n return;\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Imports the RAW provider info from a single file.\n * @param file Import file name\n */\nexport async function importRawSaml2ProvidersFromFile(file: string) {\n fs.readFile(file, 'utf8', async function (err, data) {\n if (err) throw err;\n const samlEntityData = JSON.parse(data);\n let amountOfEntities = 0;\n for (const id in samlEntityData.application) {\n if (id.length) {\n amountOfEntities++;\n }\n }\n if (validateImport(samlEntityData.meta)) {\n createProgressBar(amountOfEntities, 'Importing providers...');\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawSaml2Provider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n stopProgressBar(`Import done`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Whenever the SAML RAW file were exported using the exportRAW functionality this function\n * is used to read them back in. Only files with the .samlRaw.json extension will be imported.\n * @param {string} directory The directory from which to import the files\n */\nexport async function importRawSaml2ProvidersFromFiles(directory) {\n const files = fs.readdirSync(directory);\n const filesToImport = files.filter(\n (file) => file.indexOf('.samlRaw.json') > -1\n );\n\n if (filesToImport.length > 0) {\n createProgressBar(filesToImport.length, 'Importing providers...');\n filesToImport.forEach(async (file) => {\n const filePathAbsolute = path.join(directory, file);\n filesToImport.push(file);\n const samlEntityData = JSON.parse(\n fs.readFileSync(filePathAbsolute, 'utf8')\n );\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawSaml2Provider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n stopProgressBar(`Import done`);\n } else {\n printMessage(\n 'Import failed, no files to import. (check extension to be .samlRaw.json)',\n 'warn'\n );\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Saml2Ops.js","names":["fs","path","Saml2","ExportImportUtils","Base64","createObjectTable","createProgressBar","createTable","debugMessage","failSpinner","printMessage","showSpinner","stopProgressBar","succeedSpinner","updateProgressBar","saveTextToFile","roleMap","exportSaml2Provider","exportSaml2Providers","getSaml2ProviderStubs","getProviderByLocationAndId","getProviderMetadata","getProviderMetadataUrl","getSaml2ProviderStub","getRawSaml2Providers","getRawSaml2Provider","importSaml2Provider","importSaml2Providers","putRawSaml2Provider","getTypedFilename","saveJsonToFile","getRealmString","saveToFile","validateImport","getOneLineDescription","saml2ProviderObj","roles","key","value","Object","entries","push","description","entityId","entityLocation","length","join","getTableHeaderMd","markdown","getTableRowMd","row","listSaml2Providers","long","providerList","sort","a","b","_id","localeCompare","provider","table","location","map","role","toString","describeSaml2Provider","stub","id","rawProviderData","_rev","metadataUrl","error","message","exportSaml2MetadataToFile","file","fileName","metaData","brightCyan","exportSaml2ProviderToFile","fileData","err","exportSaml2ProvidersToFile","exportData","response","status","exportSaml2ProvidersToFiles","stubs","importSaml2ProviderFromFile","readFile","data","JSON","parse","importFirstSaml2ProviderFromFile","entityId64","keys","saml","remote","hosted","decode","importSaml2ProvidersFromFile","meta","importSaml2ProvidersFromFiles","names","readdirSync","jsonFiles","filter","name","toLowerCase","endsWith","totalStatus","total","successes","warnings","failures","readFileSync","myStatus","listRawSaml2Providers","result","exportRawSaml2ProviderToFile","rawData","stringify","exportRawSaml2ProvidersToFile","samlApplicationList","exportRawSaml2ProvidersToFiles","hasError","exportedAmount","item","samlApplicationData","importRawSaml2ProviderFromFile","indexOf","samlEntityData","application","importFirstRawSaml2ProviderFromFile","importRawSaml2ProvidersFromFile","amountOfEntities","then","importRawSaml2ProvidersFromFiles","directory","files","filesToImport","forEach","filePathAbsolute"],"sources":["ops/Saml2Ops.ts"],"sourcesContent":["import fs from 'fs';\nimport path from 'path';\nimport { Saml2ProviderSkeleton } from '@rockcarver/frodo-lib/types/api/ApiTypes';\nimport { Saml2, ExportImportUtils, Base64 } from '@rockcarver/frodo-lib';\nimport {\n MultiOpStatusInterface,\n Saml2ExportInterface,\n} from '@rockcarver/frodo-lib/types/ops/OpsTypes';\nimport {\n createObjectTable,\n createProgressBar,\n createTable,\n debugMessage,\n failSpinner,\n printMessage,\n showSpinner,\n stopProgressBar,\n succeedSpinner,\n updateProgressBar,\n} from '../utils/Console';\nimport { saveTextToFile } from '../utils/ExportImportUtils';\n\nconst {\n roleMap,\n exportSaml2Provider,\n exportSaml2Providers,\n getSaml2ProviderStubs,\n getProviderByLocationAndId,\n getProviderMetadata,\n getProviderMetadataUrl,\n getSaml2ProviderStub,\n getRawSaml2Providers,\n getRawSaml2Provider,\n importSaml2Provider,\n importSaml2Providers,\n putRawSaml2Provider,\n} = Saml2;\nconst {\n getTypedFilename,\n saveJsonToFile,\n getRealmString,\n saveToFile,\n validateImport,\n} = ExportImportUtils;\n\n/**\n * Get a one-line description of the saml2 provider object\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a one-line description\n */\nexport function getOneLineDescription(\n saml2ProviderObj: Saml2ProviderSkeleton\n): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const description = `[${saml2ProviderObj.entityId['brightCyan']}]${\n ' (' + saml2ProviderObj.entityLocation\n }${roles.length ? ' ' + roles.join(', ') + ')' : ')'}`;\n return description;\n}\n\n/**\n * Get markdown table header\n * @returns {string} markdown table header\n */\nexport function getTableHeaderMd(): string {\n let markdown = '';\n markdown += '| Entity Id | Location | Role(s) |\\n';\n markdown += '| --------- | -------- | ------- |';\n return markdown;\n}\n\n/**\n * Get a table-row of the saml2 provider in markdown\n * @param {Saml2ProviderSkeleton} saml2ProviderObj saml2 provider object to describe\n * @returns {string} a table-row of the saml2 provider in markdown\n */\nexport function getTableRowMd(saml2ProviderObj: Saml2ProviderSkeleton): string {\n const roles: string[] = [];\n for (const [key, value] of Object.entries(roleMap)) {\n if (saml2ProviderObj[key]) {\n roles.push(value);\n }\n }\n const row = `| ${saml2ProviderObj.entityId} | ${\n saml2ProviderObj.entityLocation\n } | ${roles.length ? roles.join(', ') : ''} |`;\n return row;\n}\n\n/**\n * List entity providers\n * @param {boolean} long Long list format with details\n */\nexport async function listSaml2Providers(long = false) {\n const providerList = await getSaml2ProviderStubs();\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n if (!long) {\n for (const provider of providerList) {\n printMessage(`${provider.entityId}`, 'data');\n }\n } else {\n const table = createTable([\n 'Entity Id'['brightCyan'],\n 'Location'['brightCyan'],\n 'Role(s)'['brightCyan'],\n ]);\n for (const provider of providerList) {\n table.push([\n provider.entityId,\n provider.location,\n provider.roles.map((role) => roleMap[role]).join(', '),\n ]);\n }\n printMessage(table.toString());\n }\n}\n\n/**\n * Describe an entity provider's configuration\n * @param {String} entityId Provider entity id\n */\nexport async function describeSaml2Provider(entityId) {\n try {\n const stub = await getSaml2ProviderStub(entityId);\n printMessage(stub);\n const { location } = stub;\n const id = stub._id;\n const roles = stub.roles.map((role: string) => roleMap[role]).join(', ');\n const rawProviderData = await getProviderByLocationAndId(location, id);\n delete rawProviderData._id;\n delete rawProviderData._rev;\n rawProviderData.location = location;\n rawProviderData.roles = roles;\n rawProviderData.metadataUrl = getProviderMetadataUrl(entityId);\n const table = createObjectTable(rawProviderData);\n printMessage(table.toString());\n } catch (error) {\n printMessage(error.message, 'error');\n }\n}\n\n/**\n * Export provider metadata to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2MetadataToFile(entityId, file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'metadata', 'xml');\n }\n createProgressBar(1, `Exporting metadata for: ${entityId}`);\n try {\n updateProgressBar(`Writing file ${fileName}`);\n const metaData = await getProviderMetadata(entityId);\n saveTextToFile(metaData, fileName);\n updateProgressBar(`Exported provider ${entityId}`);\n stopProgressBar(\n `Exported ${entityId.brightCyan} metadata to ${fileName.brightCyan}.`\n );\n } catch (error) {\n stopProgressBar(`${error}`);\n printMessage(error, 'error');\n }\n}\n\n/**\n * Export a single entity provider to file\n * @param {String} entityId Provider entity id\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProviderToFile(entityId, file = null) {\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: start [entityId=${entityId}, file=${file}]`\n );\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(entityId, 'saml');\n }\n try {\n createProgressBar(1, `Exporting provider ${entityId}`);\n const fileData = await exportSaml2Provider(entityId);\n saveJsonToFile(fileData, fileName);\n updateProgressBar(`Exported provider ${entityId}`);\n stopProgressBar(\n `Exported ${entityId.brightCyan} to ${fileName.brightCyan}.`\n );\n } catch (err) {\n stopProgressBar(`${err}`);\n printMessage(err, 'error');\n }\n debugMessage(\n `cli.Saml2Ops.exportSaml2ProviderToFile: end [entityId=${entityId}, file=${fileName}]`\n );\n}\n\n/**\n * Export all entity providers to one file\n * @param {String} file Optional filename\n */\nexport async function exportSaml2ProvidersToFile(file = null) {\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: start [file=${file}]`);\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(`all${getRealmString()}Providers`, 'saml');\n }\n try {\n const exportData = await exportSaml2Providers();\n saveJsonToFile(exportData, fileName);\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n debugMessage(`cli.Saml2Ops.exportSaml2ProviderToFile: end [file=${file}]`);\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportSaml2ProvidersToFiles() {\n const stubs = await getSaml2ProviderStubs();\n if (stubs.length > 0) {\n createProgressBar(stubs.length, 'Exporting providers');\n for (const stub of stubs) {\n const fileName = getTypedFilename(stub.entityId, 'saml');\n const fileData = await exportSaml2Provider(stub.entityId);\n saveJsonToFile(fileData, fileName);\n updateProgressBar(`Exported provider ${stub.entityId}`);\n }\n stopProgressBar(`${stubs.length} providers exported.`);\n } else {\n printMessage('No entity providers found.', 'info');\n }\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} entityId Provider entity id\n * @param {String} file Import file name\n */\nexport async function importSaml2ProviderFromFile(\n entityId: string,\n file: string\n) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n succeedSpinner(`Imported ${entityId}.`);\n } catch (error) {\n failSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n });\n}\n\n/**\n * Import a SAML entity provider by entity id from file\n * @param {String} file Import file name\n */\nexport async function importFirstSaml2ProviderFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data) as Saml2ExportInterface;\n // pick the first provider and run with it\n const entityId64 =\n Object.keys(fileData.saml.remote)[0] ||\n Object.keys(fileData.saml.hosted)[0];\n const entityId = Base64.decode(entityId64);\n showSpinner(`Importing ${entityId}...`);\n try {\n await importSaml2Provider(entityId, fileData);\n succeedSpinner(`Imported ${entityId}.`);\n } catch (error) {\n failSpinner(`Error importing ${entityId}: ${error.message}`);\n }\n });\n}\n\n/**\n * Import all SAML entity providers from file\n * @param {String} file Import file name\n */\nexport async function importSaml2ProvidersFromFile(file: string) {\n fs.readFile(file, 'utf8', async (err, data) => {\n if (err) throw err;\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n await importSaml2Providers(fileData);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Import all SAML entity providers from all *.saml.json files in the current directory\n */\nexport async function importSaml2ProvidersFromFiles() {\n const names = fs.readdirSync('.');\n const jsonFiles = names.filter((name) =>\n name.toLowerCase().endsWith('.saml.json')\n );\n createProgressBar(jsonFiles.length, 'Importing providers...');\n const totalStatus: MultiOpStatusInterface = {\n total: 0,\n successes: 0,\n warnings: 0,\n failures: 0,\n };\n for (const file of jsonFiles) {\n const data = fs.readFileSync(file, 'utf8');\n const fileData = JSON.parse(data);\n if (validateImport(fileData.meta)) {\n const myStatus = await importSaml2Providers(fileData);\n totalStatus.total += myStatus.total;\n totalStatus.successes += myStatus.successes;\n totalStatus.warnings += myStatus.warnings;\n totalStatus.failures += myStatus.failures;\n updateProgressBar(\n `Imported ${myStatus.successes}/${myStatus.total} provider(s) from ${file}.`\n );\n } else {\n printMessage(`Validation of ${file} failed!`, 'error');\n }\n }\n stopProgressBar(\n `Imported ${totalStatus.successes} of ${totalStatus.total} provider(s) from ${jsonFiles.length} file(s).`\n );\n}\n\n/**\n * List entity providers\n */\nexport async function listRawSaml2Providers() {\n const providerList = (await getRawSaml2Providers()).result;\n providerList.sort((a, b) => a._id.localeCompare(b._id));\n for (const provider of providerList) {\n printMessage(`${provider._id}`, 'data');\n }\n}\n\n/**\n * Exports a RAW SAML entity, which means the raw xml is included.\n * @param {string} entityId Reference to the entity for export\n * @param {string} file Optional filename for the exported file\n */\nexport async function exportRawSaml2ProviderToFile(entityId, file = null) {\n printMessage(`Exporting raw SAML entity provider ${entityId}`, 'info');\n let fileName = file;\n if (!file) {\n fileName = getTypedFilename(`${entityId}`, 'raw.saml');\n }\n createProgressBar(1, `Exporting raw entity provider: ${entityId}`);\n try {\n const rawData = await getRawSaml2Provider(entityId);\n updateProgressBar(`Writing file ${fileName}`);\n saveTextToFile(JSON.stringify(rawData, null, 2), fileName);\n stopProgressBar(`Exported raw entity provider ${entityId} to ${fileName}.`);\n } catch (error) {\n stopProgressBar(`Error exporting raw entity ${entityId}: ${error.message}`);\n printMessage(error.response?.data, 'error');\n }\n}\n\n/**\n * Export all entity providers raw to one file\n * @param {String} file Optional filename\n */\nexport async function exportRawSaml2ProvidersToFile(file = null) {\n let fileName = file;\n if (!fileName) {\n fileName = getTypedFilename(\n `all${getRealmString()}ProvidersRaw`,\n 'raw.saml'\n );\n }\n try {\n const samlApplicationList = (await getRawSaml2Providers()).result;\n\n saveToFile('application', samlApplicationList, '_id', fileName);\n printMessage(\n `All RAW saml entity providers exported to: ${fileName}`,\n 'info'\n );\n } catch (error) {\n printMessage(error.message, 'error');\n printMessage(\n `exportRawSaml2ProvidersToFile: ${error.response?.status}`,\n 'error'\n );\n }\n}\n\n/**\n * Export all entity providers to individual files\n */\nexport async function exportRawSaml2ProvidersToFiles() {\n const samlApplicationList = (await getRawSaml2Providers()).result;\n let hasError = false;\n createProgressBar(samlApplicationList.length, 'Exporting RAW providers');\n let exportedAmount = 0;\n for (const item of samlApplicationList) {\n updateProgressBar(`Exporting provider ${item.entityId}`);\n try {\n const samlApplicationData = await getRawSaml2Provider(item._id);\n const fileName = getTypedFilename(\n `${item._id}${getRealmString()}ProviderRaw`,\n 'raw.saml'\n );\n saveToFile('application', [samlApplicationData], '_id', fileName);\n exportedAmount++;\n } catch (error) {\n hasError = true;\n printMessage(`Unable to export: ${item._id}`, 'error');\n }\n }\n stopProgressBar(`${exportedAmount} providers exported.`);\n if (!hasError) {\n printMessage('All entities exported.', 'info');\n } else {\n printMessage('All other entities exported.', 'info');\n }\n}\n\n/**\n * Imports a raw SAML export file (containing one entity).\n * @param {string} file The import file\n */\nexport async function importRawSaml2ProviderFromFile(\n // entityId: string,\n file: string\n) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawSaml2Provider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Import first raw SAML entity provider from file\n * @param {String} file Import file name\n */\nexport async function importFirstRawSaml2ProviderFromFile(file) {\n printMessage(`Importing SAML Entity ${file}...`, 'info');\n if (file.indexOf('.raw.saml.json') > -1) {\n const samlEntityData = JSON.parse(fs.readFileSync(file, 'utf8'));\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n try {\n await putRawSaml2Provider(id, samlEntityData.application[id]);\n } catch (error) {\n printMessage(`Unable to import: ${id}`, 'error');\n }\n printMessage(`Imported ${id}`, 'info');\n return;\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n }\n}\n\n/**\n * Imports the RAW provider info from a single file.\n * @param file Import file name\n */\nexport async function importRawSaml2ProvidersFromFile(file: string) {\n fs.readFile(file, 'utf8', async function (err, data) {\n if (err) throw err;\n const samlEntityData = JSON.parse(data);\n let amountOfEntities = 0;\n for (const id in samlEntityData.application) {\n if (id.length) {\n amountOfEntities++;\n }\n }\n if (validateImport(samlEntityData.meta)) {\n createProgressBar(amountOfEntities, 'Importing providers...');\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawSaml2Provider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n stopProgressBar(`Import done`);\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n}\n\n/**\n * Whenever the SAML RAW file were exported using the exportRAW functionality this function\n * is used to read them back in. Only files with the .samlRaw.json extension will be imported.\n * @param {string} directory The directory from which to import the files\n */\nexport async function importRawSaml2ProvidersFromFiles(directory) {\n const files = fs.readdirSync(directory);\n const filesToImport = files.filter(\n (file) => file.indexOf('.samlRaw.json') > -1\n );\n\n if (filesToImport.length > 0) {\n createProgressBar(filesToImport.length, 'Importing providers...');\n filesToImport.forEach(async (file) => {\n const filePathAbsolute = path.join(directory, file);\n filesToImport.push(file);\n const samlEntityData = JSON.parse(\n fs.readFileSync(filePathAbsolute, 'utf8')\n );\n if (validateImport(samlEntityData.meta)) {\n for (const id in samlEntityData.application) {\n // remove the \"_rev\" data before PUT\n delete samlEntityData.application[id]._rev;\n await putRawSaml2Provider(id, samlEntityData.application[id]).then(\n (result) => {\n if (result === null) {\n printMessage(`Import validation failed for ${id}`, 'error');\n }\n }\n );\n updateProgressBar(`Imported ${id}...`);\n }\n } else {\n printMessage('Import validation failed...', 'error');\n }\n });\n stopProgressBar(`Import done`);\n } else {\n printMessage(\n 'Import failed, no files to import. (check extension to be .samlRaw.json)',\n 'warn'\n );\n }\n}\n"],"mappings":"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"}
|
package/esm/utils/Console.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable no-console */
|
|
2
|
-
import {
|
|
2
|
+
import { MultiBar, Presets } from 'cli-progress';
|
|
3
3
|
import { createSpinner } from 'nanospinner';
|
|
4
4
|
import Table from 'cli-table3';
|
|
5
5
|
import { ExportImportUtils, state } from '@rockcarver/frodo-lib';
|
|
@@ -8,6 +8,7 @@ Color.enable();
|
|
|
8
8
|
const {
|
|
9
9
|
appendTextToFile
|
|
10
10
|
} = ExportImportUtils;
|
|
11
|
+
let multiBarContainer = null;
|
|
11
12
|
let progressBar = null;
|
|
12
13
|
let spinner = null;
|
|
13
14
|
|
|
@@ -216,8 +217,12 @@ export function createProgressBar(total, message = null, options = {
|
|
|
216
217
|
noTTYOutput: true
|
|
217
218
|
};
|
|
218
219
|
}
|
|
219
|
-
progressBar = new SingleBar(opt, Presets.legacy); // create only when needed
|
|
220
|
-
progressBar.start(total, 0, {
|
|
220
|
+
// progressBar = new SingleBar(opt, Presets.legacy); // create only when needed
|
|
221
|
+
// progressBar.start(total, 0, {
|
|
222
|
+
// data: message,
|
|
223
|
+
// });
|
|
224
|
+
multiBarContainer = new MultiBar(opt, Presets.legacy);
|
|
225
|
+
progressBar = multiBarContainer.create(total, 0, {
|
|
221
226
|
data: message
|
|
222
227
|
});
|
|
223
228
|
}
|
|
@@ -241,7 +246,9 @@ export function stopProgressBar(message = null) {
|
|
|
241
246
|
if (message) progressBar.update({
|
|
242
247
|
data: message
|
|
243
248
|
});
|
|
244
|
-
progressBar.stop();
|
|
249
|
+
// progressBar.stop();
|
|
250
|
+
multiBarContainer.stop();
|
|
251
|
+
multiBarContainer = null;
|
|
245
252
|
}
|
|
246
253
|
|
|
247
254
|
/**
|
package/esm/utils/Console.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Console.js","names":["SingleBar","Presets","createSpinner","Table","ExportImportUtils","state","Color","enable","appendTextToFile","progressBar","spinner","data","message","newline","getOutputFile","JSON","stringify","console","dir","depth","log","process","stdout","write","text","error","stderr","info","warn","debug","curlirize","verboseMessage","getVerbose","debugMessage","getDebug","curlirizeMessage","getCurlirize","printMessage","type","createProgressBar","total","options","format","noTTYOutput","opt","legacy","start","updateProgressBar","increment","stopProgressBar","update","stop","showSpinner","stopSpinner","succeedSpinner","success","warnSpinner","failSpinner","spinSpinner","spin","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","status","createTable","head","table","chars","top","bottom","left","mid","right","style","createKeyValueTable","wordWrap","getObjectDepth","object","Object","Math","max","values","map","hasValues","has","keys","key","addRows","level","keyMap","space","push","brightCyan","hAlign","content","gray","indention","Array","fill","join","concat","createObjectTable"],"sources":["utils/Console.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { SingleBar, Presets } from 'cli-progress';\nimport { createSpinner } from 'nanospinner';\nimport Table from 'cli-table3';\nimport { ExportImportUtils, state } from '@rockcarver/frodo-lib';\nimport Color from 'colors';\n\nColor.enable();\n\nconst { appendTextToFile } = ExportImportUtils;\n\nlet progressBar = null;\nlet spinner = null;\n\n/**\n * Output a message in default color to stdout or append to `state.getOutputFile()`\n * @param {string | object} message the message\n */\nfunction data(message: string | object, newline = true) {\n if (!message) return;\n if (state.getOutputFile()) {\n if (typeof message === 'object') {\n message = JSON.stringify(message, null, 2);\n }\n if (newline) {\n message += '\\n';\n }\n appendTextToFile(message, state.getOutputFile());\n } else if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.log(message);\n } else {\n process.stdout.write(message);\n }\n}\n\n/**\n * Output a default color message to stderr\n * @param {Object} message the message\n */\nfunction text(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message);\n } else {\n process.stderr.write(message);\n }\n}\n\n/**\n * Output a message in bright cyan to stderr\n * @param {Object} message the message\n */\nfunction info(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['brightCyan']);\n } else {\n process.stderr.write(message['brightCyan']);\n }\n}\n\n/**\n * Output a message in yellow to stderr\n * @param {Object} message the message\n */\nfunction warn(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['yellow']);\n } else {\n process.stderr.write(message['yellow']);\n }\n}\n\n/**\n * Output a message in bright red to stderr\n * @param {Object} message the message\n */\nfunction error(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['brightRed']);\n } else {\n process.stderr.write(message['brightRed']);\n }\n}\n\n/**\n * Output a debug message\n * @param {string | object} message the message\n */\nfunction debug(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 6 });\n } else if (newline) {\n console.error(message['brightMagenta']);\n } else {\n process.stderr.write(message['brightMagenta']);\n }\n}\n\n/**\n * Output a curlirize message\n * @param {string} message the message\n */\nfunction curlirize(message: string) {\n if (!message) return;\n console.error(message['brightBlue']);\n}\n\n/**\n * Output a message in default color to stderr\n * @param {Object} message the message\n */\nexport function verboseMessage(message) {\n if (!message) return;\n if (state.getVerbose()) {\n text(message);\n }\n}\n\n/**\n * Output a debug message\n * @param {Object} message the message\n */\nexport function debugMessage(message) {\n if (!message) return;\n if (state.getDebug()) {\n debug(message);\n }\n}\n\n/**\n * Output a curlirize message\n * @param {Object} message the message\n */\nexport function curlirizeMessage(message) {\n if (!message) return;\n if (state.getCurlirize()) {\n curlirize(message);\n }\n}\n\n/**\n * Prints a string message to console\n *\n * @param {string} message The string message to print\n * @param {string} [type=text] \"text\", \"info\", \"warn\", \"error\" or \"data\". All but\n * type=\"data\" will be written to stderr.\n * @param {boolean} [newline=true] Whether to add a newline at the end of message\n *\n */\nexport function printMessage(message, type = 'text', newline = true) {\n switch (type) {\n case 'data':\n data(message, newline);\n break;\n case 'text':\n text(message, newline);\n break;\n case 'info':\n info(message, newline);\n break;\n case 'warn':\n warn(message, newline);\n break;\n case 'error':\n error(message, newline);\n break;\n default:\n text(message, newline);\n }\n}\n\n/**\n * Creates a progress bar on stderr\n *\n * Example:\n * [========================================] 100% | 49/49 | Analyzing journey - transactional_auth\n *\n * @param {Number} total The total number of entries to track progress for\n * @param {String} message optional progress bar message\n * @param {Object} options progress bar configuration options\n *\n */\nexport function createProgressBar(\n total,\n message = null,\n options = {\n format: '[{bar}] {percentage}% | {value}/{total} | {data}',\n noTTYOutput: true,\n }\n) {\n let opt = options;\n if (message == null) {\n opt = {\n format: '[{bar}] {percentage}% | {value}/{total}',\n noTTYOutput: true,\n };\n }\n progressBar = new SingleBar(opt, Presets.legacy); // create only when needed\n progressBar.start(total, 0, {\n data: message,\n });\n}\n\n/**\n * Updates the progress bar by 1\n * @param {string} message optional message to update the progress bar\n *\n */\nexport function updateProgressBar(message = null) {\n if (message)\n progressBar.increment({\n data: message,\n });\n else progressBar.increment();\n}\n\n/**\n * Stop and hide the progress bar\n * @param {*} message optional message to update the progress bar\n */\nexport function stopProgressBar(message = null) {\n if (message)\n progressBar.update({\n data: message,\n });\n progressBar.stop();\n}\n\n/**\n * Create the spinner\n * @param {String} message optional spinner message\n */\nexport function showSpinner(message) {\n spinner = createSpinner(message).start();\n}\n\n/**\n * Stop the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function stopSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.stop(options);\n }\n}\n\n/**\n * Succeed the spinner. Stop and render success checkmark with optional message.\n * @param {String} message optional message to update the spinner\n */\nexport function succeedSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.success(options);\n }\n}\n\n/**\n * Warn the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function warnSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.warn(options);\n }\n}\n\n/**\n * Fail the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function failSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.error(options);\n }\n}\n\n/**\n * Spin the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function spinSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.update(options);\n spinner.spin();\n }\n}\n\nexport function createProgressIndicator(\n type = 'determinate',\n total = 0,\n message = null\n) {\n if (type === 'determinate') {\n createProgressBar(total, message);\n } else {\n showSpinner(message);\n }\n}\n\nexport function updateProgressIndicator(message) {\n if (!progressBar) {\n spinSpinner(message);\n } else {\n updateProgressBar(message);\n }\n}\n\nexport function stopProgressIndicator(message, status = 'none') {\n if (!progressBar) {\n switch (status) {\n case 'none':\n stopSpinner(message);\n break;\n case 'success':\n succeedSpinner(message);\n break;\n case 'warn':\n warnSpinner(message);\n break;\n case 'fail':\n failSpinner(message);\n break;\n default:\n stopSpinner(message);\n break;\n }\n } else {\n stopProgressBar(message);\n }\n}\n\n/**\n * Create an empty table\n * @param {string[]} head header row as an array of strings\n * @returns {any} an empty table\n */\nexport function createTable(head) {\n const table = new Table({\n head,\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, head: ['brightCyan'] },\n });\n return table;\n}\n\n/**\n * Create a new key/value table\n * @returns {any} an empty key/value table\n */\nexport function createKeyValueTable() {\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 return table;\n}\n\n/**\n * Helper function to determine the total depth of an object\n * @param {Object} object input object\n * @returns {Number} total depth of the input object\n */\nfunction getObjectDepth(object) {\n return Object(object) === object\n ? 1 + Math.max(-1, ...Object.values(object).map(getObjectDepth))\n : 0;\n}\n\n/**\n * Helper function to determine if an object has values\n * @param {Object} object input object\n * @returns {boolean} true of the object or any of its sub-objects contain values, false otherwise\n */\nfunction hasValues(object) {\n let has = false;\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n return true;\n }\n has = has || hasValues(object[key]);\n }\n return has;\n}\n\n/**\n * Helper function (recursive) to add rows to an object table\n * @param {object} object object to render\n * @param {number} depth total depth of initial object\n * @param {number} level current level\n * @param {any} table the object table to add the rows to\n * @returns the updated object table\n */\nfunction addRows(object, depth, level, table, keyMap) {\n const space = ' ';\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n if (level === 1) {\n table.push([\n keyMap[key] ? keyMap[key].brightCyan : key['brightCyan'],\n object[key],\n ]);\n } else {\n table.push([\n {\n hAlign: 'right',\n content: keyMap[key] ? keyMap[key].gray : key.gray,\n },\n object[key],\n ]);\n }\n }\n }\n for (const key of keys) {\n if (Object(object[key]) === object[key]) {\n // only print header if there are any values below\n if (hasValues(object[key])) {\n let indention = new Array(level).fill(space).join('');\n if (level < 3) indention = `\\n${indention}`;\n table.push([\n indention.concat(\n keyMap[key] ? keyMap[key].brightCyan : key['brightCyan']\n ),\n '',\n ]);\n }\n // eslint-disable-next-line no-param-reassign\n table = addRows(object[key], depth, level + 1, table, keyMap);\n }\n }\n return table;\n}\n\n/**\n * Create and populate an object table from any JSON object. Use for describe commands.\n * @param {Object} object JSON object to create\n * @returns {any} a table that can be printed to the console\n */\nexport function createObjectTable(object, keyMap = {}) {\n // eslint-disable-next-line no-param-reassign\n const depth = getObjectDepth(object);\n // eslint-disable-next-line no-param-reassign\n const level = 0;\n // eslint-disable-next-line no-param-reassign\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, head: ['brightCyan'] },\n });\n addRows(object, depth, level + 1, table, keyMap);\n return table;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Console.js","names":["MultiBar","Presets","createSpinner","Table","ExportImportUtils","state","Color","enable","appendTextToFile","multiBarContainer","progressBar","spinner","data","message","newline","getOutputFile","JSON","stringify","console","dir","depth","log","process","stdout","write","text","error","stderr","info","warn","debug","curlirize","verboseMessage","getVerbose","debugMessage","getDebug","curlirizeMessage","getCurlirize","printMessage","type","createProgressBar","total","options","format","noTTYOutput","opt","legacy","create","updateProgressBar","increment","stopProgressBar","update","stop","showSpinner","start","stopSpinner","succeedSpinner","success","warnSpinner","failSpinner","spinSpinner","spin","createProgressIndicator","updateProgressIndicator","stopProgressIndicator","status","createTable","head","table","chars","top","bottom","left","mid","right","style","createKeyValueTable","wordWrap","getObjectDepth","object","Object","Math","max","values","map","hasValues","has","keys","key","addRows","level","keyMap","space","push","brightCyan","hAlign","content","gray","indention","Array","fill","join","concat","createObjectTable"],"sources":["utils/Console.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { MultiBar, Presets } from 'cli-progress';\nimport { createSpinner } from 'nanospinner';\nimport Table from 'cli-table3';\nimport { ExportImportUtils, state } from '@rockcarver/frodo-lib';\nimport Color from 'colors';\n\nColor.enable();\n\nconst { appendTextToFile } = ExportImportUtils;\n\nlet multiBarContainer = null;\nlet progressBar = null;\nlet spinner = null;\n\n/**\n * Output a message in default color to stdout or append to `state.getOutputFile()`\n * @param {string | object} message the message\n */\nfunction data(message: string | object, newline = true) {\n if (!message) return;\n if (state.getOutputFile()) {\n if (typeof message === 'object') {\n message = JSON.stringify(message, null, 2);\n }\n if (newline) {\n message += '\\n';\n }\n appendTextToFile(message, state.getOutputFile());\n } else if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.log(message);\n } else {\n process.stdout.write(message);\n }\n}\n\n/**\n * Output a default color message to stderr\n * @param {Object} message the message\n */\nfunction text(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message);\n } else {\n process.stderr.write(message);\n }\n}\n\n/**\n * Output a message in bright cyan to stderr\n * @param {Object} message the message\n */\nfunction info(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['brightCyan']);\n } else {\n process.stderr.write(message['brightCyan']);\n }\n}\n\n/**\n * Output a message in yellow to stderr\n * @param {Object} message the message\n */\nfunction warn(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['yellow']);\n } else {\n process.stderr.write(message['yellow']);\n }\n}\n\n/**\n * Output a message in bright red to stderr\n * @param {Object} message the message\n */\nfunction error(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 3 });\n } else if (newline) {\n console.error(message['brightRed']);\n } else {\n process.stderr.write(message['brightRed']);\n }\n}\n\n/**\n * Output a debug message\n * @param {string | object} message the message\n */\nfunction debug(message: string | object, newline = true) {\n if (!message) return;\n if (typeof message === 'object') {\n console.dir(message, { depth: 6 });\n } else if (newline) {\n console.error(message['brightMagenta']);\n } else {\n process.stderr.write(message['brightMagenta']);\n }\n}\n\n/**\n * Output a curlirize message\n * @param {string} message the message\n */\nfunction curlirize(message: string) {\n if (!message) return;\n console.error(message['brightBlue']);\n}\n\n/**\n * Output a message in default color to stderr\n * @param {Object} message the message\n */\nexport function verboseMessage(message) {\n if (!message) return;\n if (state.getVerbose()) {\n text(message);\n }\n}\n\n/**\n * Output a debug message\n * @param {Object} message the message\n */\nexport function debugMessage(message) {\n if (!message) return;\n if (state.getDebug()) {\n debug(message);\n }\n}\n\n/**\n * Output a curlirize message\n * @param {Object} message the message\n */\nexport function curlirizeMessage(message) {\n if (!message) return;\n if (state.getCurlirize()) {\n curlirize(message);\n }\n}\n\n/**\n * Prints a string message to console\n *\n * @param {string} message The string message to print\n * @param {string} [type=text] \"text\", \"info\", \"warn\", \"error\" or \"data\". All but\n * type=\"data\" will be written to stderr.\n * @param {boolean} [newline=true] Whether to add a newline at the end of message\n *\n */\nexport function printMessage(message, type = 'text', newline = true) {\n switch (type) {\n case 'data':\n data(message, newline);\n break;\n case 'text':\n text(message, newline);\n break;\n case 'info':\n info(message, newline);\n break;\n case 'warn':\n warn(message, newline);\n break;\n case 'error':\n error(message, newline);\n break;\n default:\n text(message, newline);\n }\n}\n\n/**\n * Creates a progress bar on stderr\n *\n * Example:\n * [========================================] 100% | 49/49 | Analyzing journey - transactional_auth\n *\n * @param {Number} total The total number of entries to track progress for\n * @param {String} message optional progress bar message\n * @param {Object} options progress bar configuration options\n *\n */\nexport function createProgressBar(\n total,\n message = null,\n options = {\n format: '[{bar}] {percentage}% | {value}/{total} | {data}',\n noTTYOutput: true,\n }\n) {\n let opt = options;\n if (message == null) {\n opt = {\n format: '[{bar}] {percentage}% | {value}/{total}',\n noTTYOutput: true,\n };\n }\n // progressBar = new SingleBar(opt, Presets.legacy); // create only when needed\n // progressBar.start(total, 0, {\n // data: message,\n // });\n multiBarContainer = new MultiBar(opt, Presets.legacy);\n progressBar = multiBarContainer.create(total, 0, {\n data: message,\n });\n}\n\n/**\n * Updates the progress bar by 1\n * @param {string} message optional message to update the progress bar\n *\n */\nexport function updateProgressBar(message = null) {\n if (message)\n progressBar.increment({\n data: message,\n });\n else progressBar.increment();\n}\n\n/**\n * Stop and hide the progress bar\n * @param {*} message optional message to update the progress bar\n */\nexport function stopProgressBar(message = null) {\n if (message)\n progressBar.update({\n data: message,\n });\n // progressBar.stop();\n multiBarContainer.stop();\n multiBarContainer = null;\n}\n\n/**\n * Create the spinner\n * @param {String} message optional spinner message\n */\nexport function showSpinner(message) {\n spinner = createSpinner(message).start();\n}\n\n/**\n * Stop the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function stopSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.stop(options);\n }\n}\n\n/**\n * Succeed the spinner. Stop and render success checkmark with optional message.\n * @param {String} message optional message to update the spinner\n */\nexport function succeedSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.success(options);\n }\n}\n\n/**\n * Warn the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function warnSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.warn(options);\n }\n}\n\n/**\n * Fail the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function failSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.error(options);\n }\n}\n\n/**\n * Spin the spinner\n * @param {String} message optional message to update the spinner\n */\nexport function spinSpinner(message = null) {\n if (spinner) {\n let options = {};\n if (message) options = { text: message };\n spinner.update(options);\n spinner.spin();\n }\n}\n\nexport function createProgressIndicator(\n type = 'determinate',\n total = 0,\n message = null\n) {\n if (type === 'determinate') {\n createProgressBar(total, message);\n } else {\n showSpinner(message);\n }\n}\n\nexport function updateProgressIndicator(message) {\n if (!progressBar) {\n spinSpinner(message);\n } else {\n updateProgressBar(message);\n }\n}\n\nexport function stopProgressIndicator(message, status = 'none') {\n if (!progressBar) {\n switch (status) {\n case 'none':\n stopSpinner(message);\n break;\n case 'success':\n succeedSpinner(message);\n break;\n case 'warn':\n warnSpinner(message);\n break;\n case 'fail':\n failSpinner(message);\n break;\n default:\n stopSpinner(message);\n break;\n }\n } else {\n stopProgressBar(message);\n }\n}\n\n/**\n * Create an empty table\n * @param {string[]} head header row as an array of strings\n * @returns {any} an empty table\n */\nexport function createTable(head) {\n const table = new Table({\n head,\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, head: ['brightCyan'] },\n });\n return table;\n}\n\n/**\n * Create a new key/value table\n * @returns {any} an empty key/value table\n */\nexport function createKeyValueTable() {\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 return table;\n}\n\n/**\n * Helper function to determine the total depth of an object\n * @param {Object} object input object\n * @returns {Number} total depth of the input object\n */\nfunction getObjectDepth(object) {\n return Object(object) === object\n ? 1 + Math.max(-1, ...Object.values(object).map(getObjectDepth))\n : 0;\n}\n\n/**\n * Helper function to determine if an object has values\n * @param {Object} object input object\n * @returns {boolean} true of the object or any of its sub-objects contain values, false otherwise\n */\nfunction hasValues(object) {\n let has = false;\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n return true;\n }\n has = has || hasValues(object[key]);\n }\n return has;\n}\n\n/**\n * Helper function (recursive) to add rows to an object table\n * @param {object} object object to render\n * @param {number} depth total depth of initial object\n * @param {number} level current level\n * @param {any} table the object table to add the rows to\n * @returns the updated object table\n */\nfunction addRows(object, depth, level, table, keyMap) {\n const space = ' ';\n const keys = Object.keys(object);\n for (const key of keys) {\n if (Object(object[key]) !== object[key]) {\n if (level === 1) {\n table.push([\n keyMap[key] ? keyMap[key].brightCyan : key['brightCyan'],\n object[key],\n ]);\n } else {\n table.push([\n {\n hAlign: 'right',\n content: keyMap[key] ? keyMap[key].gray : key.gray,\n },\n object[key],\n ]);\n }\n }\n }\n for (const key of keys) {\n if (Object(object[key]) === object[key]) {\n // only print header if there are any values below\n if (hasValues(object[key])) {\n let indention = new Array(level).fill(space).join('');\n if (level < 3) indention = `\\n${indention}`;\n table.push([\n indention.concat(\n keyMap[key] ? keyMap[key].brightCyan : key['brightCyan']\n ),\n '',\n ]);\n }\n // eslint-disable-next-line no-param-reassign\n table = addRows(object[key], depth, level + 1, table, keyMap);\n }\n }\n return table;\n}\n\n/**\n * Create and populate an object table from any JSON object. Use for describe commands.\n * @param {Object} object JSON object to create\n * @returns {any} a table that can be printed to the console\n */\nexport function createObjectTable(object, keyMap = {}) {\n // eslint-disable-next-line no-param-reassign\n const depth = getObjectDepth(object);\n // eslint-disable-next-line no-param-reassign\n const level = 0;\n // eslint-disable-next-line no-param-reassign\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, head: ['brightCyan'] },\n });\n addRows(object, depth, level + 1, table, keyMap);\n return table;\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,OAAO,QAAQ,cAAc;AAChD,SAASC,aAAa,QAAQ,aAAa;AAC3C,OAAOC,KAAK,MAAM,YAAY;AAC9B,SAASC,iBAAiB,EAAEC,KAAK,QAAQ,uBAAuB;AAChE,OAAOC,KAAK,MAAM,QAAQ;AAE1BA,KAAK,CAACC,MAAM,EAAE;AAEd,MAAM;EAAEC;AAAiB,CAAC,GAAGJ,iBAAiB;AAE9C,IAAIK,iBAAiB,GAAG,IAAI;AAC5B,IAAIC,WAAW,GAAG,IAAI;AACtB,IAAIC,OAAO,GAAG,IAAI;;AAElB;AACA;AACA;AACA;AACA,SAASC,IAAI,CAACC,OAAwB,EAAEC,OAAO,GAAG,IAAI,EAAE;EACtD,IAAI,CAACD,OAAO,EAAE;EACd,IAAIR,KAAK,CAACU,aAAa,EAAE,EAAE;IACzB,IAAI,OAAOF,OAAO,KAAK,QAAQ,EAAE;MAC/BA,OAAO,GAAGG,IAAI,CAACC,SAAS,CAACJ,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C;IACA,IAAIC,OAAO,EAAE;MACXD,OAAO,IAAI,IAAI;IACjB;IACAL,gBAAgB,CAACK,OAAO,EAAER,KAAK,CAACU,aAAa,EAAE,CAAC;EAClD,CAAC,MAAM,IAAI,OAAOF,OAAO,KAAK,QAAQ,EAAE;IACtCK,OAAO,CAACC,GAAG,CAACN,OAAO,EAAE;MAAEO,KAAK,EAAE;IAAE,CAAC,CAAC;EACpC,CAAC,MAAM,IAAIN,OAAO,EAAE;IAClBI,OAAO,CAACG,GAAG,CAACR,OAAO,CAAC;EACtB,CAAC,MAAM;IACLS,OAAO,CAACC,MAAM,CAACC,KAAK,CAACX,OAAO,CAAC;EAC/B;AACF;;AAEA;AACA;AACA;AACA;AACA,SAASY,IAAI,CAACZ,OAAwB,EAAEC,OAAO,GAAG,IAAI,EAAE;EACtD,IAAI,CAACD,OAAO,EAAE;EACd,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;IAC/BK,OAAO,CAACC,GAAG,CAACN,OAAO,EAAE;MAAEO,KAAK,EAAE;IAAE,CAAC,CAAC;EACpC,CAAC,MAAM,IAAIN,OAAO,EAAE;IAClBI,OAAO,CAACQ,KAAK,CAACb,OAAO,CAAC;EACxB,CAAC,MAAM;IACLS,OAAO,CAACK,MAAM,CAACH,KAAK,CAACX,OAAO,CAAC;EAC/B;AACF;;AAEA;AACA;AACA;AACA;AACA,SAASe,IAAI,CAACf,OAAwB,EAAEC,OAAO,GAAG,IAAI,EAAE;EACtD,IAAI,CAACD,OAAO,EAAE;EACd,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;IAC/BK,OAAO,CAACC,GAAG,CAACN,OAAO,EAAE;MAAEO,KAAK,EAAE;IAAE,CAAC,CAAC;EACpC,CAAC,MAAM,IAAIN,OAAO,EAAE;IAClBI,OAAO,CAACQ,KAAK,CAACb,OAAO,CAAC,YAAY,CAAC,CAAC;EACtC,CAAC,MAAM;IACLS,OAAO,CAACK,MAAM,CAACH,KAAK,CAACX,OAAO,CAAC,YAAY,CAAC,CAAC;EAC7C;AACF;;AAEA;AACA;AACA;AACA;AACA,SAASgB,IAAI,CAAChB,OAAwB,EAAEC,OAAO,GAAG,IAAI,EAAE;EACtD,IAAI,CAACD,OAAO,EAAE;EACd,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;IAC/BK,OAAO,CAACC,GAAG,CAACN,OAAO,EAAE;MAAEO,KAAK,EAAE;IAAE,CAAC,CAAC;EACpC,CAAC,MAAM,IAAIN,OAAO,EAAE;IAClBI,OAAO,CAACQ,KAAK,CAACb,OAAO,CAAC,QAAQ,CAAC,CAAC;EAClC,CAAC,MAAM;IACLS,OAAO,CAACK,MAAM,CAACH,KAAK,CAACX,OAAO,CAAC,QAAQ,CAAC,CAAC;EACzC;AACF;;AAEA;AACA;AACA;AACA;AACA,SAASa,KAAK,CAACb,OAAwB,EAAEC,OAAO,GAAG,IAAI,EAAE;EACvD,IAAI,CAACD,OAAO,EAAE;EACd,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;IAC/BK,OAAO,CAACC,GAAG,CAACN,OAAO,EAAE;MAAEO,KAAK,EAAE;IAAE,CAAC,CAAC;EACpC,CAAC,MAAM,IAAIN,OAAO,EAAE;IAClBI,OAAO,CAACQ,KAAK,CAACb,OAAO,CAAC,WAAW,CAAC,CAAC;EACrC,CAAC,MAAM;IACLS,OAAO,CAACK,MAAM,CAACH,KAAK,CAACX,OAAO,CAAC,WAAW,CAAC,CAAC;EAC5C;AACF;;AAEA;AACA;AACA;AACA;AACA,SAASiB,KAAK,CAACjB,OAAwB,EAAEC,OAAO,GAAG,IAAI,EAAE;EACvD,IAAI,CAACD,OAAO,EAAE;EACd,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;IAC/BK,OAAO,CAACC,GAAG,CAACN,OAAO,EAAE;MAAEO,KAAK,EAAE;IAAE,CAAC,CAAC;EACpC,CAAC,MAAM,IAAIN,OAAO,EAAE;IAClBI,OAAO,CAACQ,KAAK,CAACb,OAAO,CAAC,eAAe,CAAC,CAAC;EACzC,CAAC,MAAM;IACLS,OAAO,CAACK,MAAM,CAACH,KAAK,CAACX,OAAO,CAAC,eAAe,CAAC,CAAC;EAChD;AACF;;AAEA;AACA;AACA;AACA;AACA,SAASkB,SAAS,CAAClB,OAAe,EAAE;EAClC,IAAI,CAACA,OAAO,EAAE;EACdK,OAAO,CAACQ,KAAK,CAACb,OAAO,CAAC,YAAY,CAAC,CAAC;AACtC;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASmB,cAAc,CAACnB,OAAO,EAAE;EACtC,IAAI,CAACA,OAAO,EAAE;EACd,IAAIR,KAAK,CAAC4B,UAAU,EAAE,EAAE;IACtBR,IAAI,CAACZ,OAAO,CAAC;EACf;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASqB,YAAY,CAACrB,OAAO,EAAE;EACpC,IAAI,CAACA,OAAO,EAAE;EACd,IAAIR,KAAK,CAAC8B,QAAQ,EAAE,EAAE;IACpBL,KAAK,CAACjB,OAAO,CAAC;EAChB;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASuB,gBAAgB,CAACvB,OAAO,EAAE;EACxC,IAAI,CAACA,OAAO,EAAE;EACd,IAAIR,KAAK,CAACgC,YAAY,EAAE,EAAE;IACxBN,SAAS,CAAClB,OAAO,CAAC;EACpB;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASyB,YAAY,CAACzB,OAAO,EAAE0B,IAAI,GAAG,MAAM,EAAEzB,OAAO,GAAG,IAAI,EAAE;EACnE,QAAQyB,IAAI;IACV,KAAK,MAAM;MACT3B,IAAI,CAACC,OAAO,EAAEC,OAAO,CAAC;MACtB;IACF,KAAK,MAAM;MACTW,IAAI,CAACZ,OAAO,EAAEC,OAAO,CAAC;MACtB;IACF,KAAK,MAAM;MACTc,IAAI,CAACf,OAAO,EAAEC,OAAO,CAAC;MACtB;IACF,KAAK,MAAM;MACTe,IAAI,CAAChB,OAAO,EAAEC,OAAO,CAAC;MACtB;IACF,KAAK,OAAO;MACVY,KAAK,CAACb,OAAO,EAAEC,OAAO,CAAC;MACvB;IACF;MACEW,IAAI,CAACZ,OAAO,EAAEC,OAAO,CAAC;EAAC;AAE7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS0B,iBAAiB,CAC/BC,KAAK,EACL5B,OAAO,GAAG,IAAI,EACd6B,OAAO,GAAG;EACRC,MAAM,EAAE,kDAAkD;EAC1DC,WAAW,EAAE;AACf,CAAC,EACD;EACA,IAAIC,GAAG,GAAGH,OAAO;EACjB,IAAI7B,OAAO,IAAI,IAAI,EAAE;IACnBgC,GAAG,GAAG;MACJF,MAAM,EAAE,yCAAyC;MACjDC,WAAW,EAAE;IACf,CAAC;EACH;EACA;EACA;EACA;EACA;EACAnC,iBAAiB,GAAG,IAAIT,QAAQ,CAAC6C,GAAG,EAAE5C,OAAO,CAAC6C,MAAM,CAAC;EACrDpC,WAAW,GAAGD,iBAAiB,CAACsC,MAAM,CAACN,KAAK,EAAE,CAAC,EAAE;IAC/C7B,IAAI,EAAEC;EACR,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASmC,iBAAiB,CAACnC,OAAO,GAAG,IAAI,EAAE;EAChD,IAAIA,OAAO,EACTH,WAAW,CAACuC,SAAS,CAAC;IACpBrC,IAAI,EAAEC;EACR,CAAC,CAAC,CAAC,KACAH,WAAW,CAACuC,SAAS,EAAE;AAC9B;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAe,CAACrC,OAAO,GAAG,IAAI,EAAE;EAC9C,IAAIA,OAAO,EACTH,WAAW,CAACyC,MAAM,CAAC;IACjBvC,IAAI,EAAEC;EACR,CAAC,CAAC;EACJ;EACAJ,iBAAiB,CAAC2C,IAAI,EAAE;EACxB3C,iBAAiB,GAAG,IAAI;AAC1B;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAAS4C,WAAW,CAACxC,OAAO,EAAE;EACnCF,OAAO,GAAGT,aAAa,CAACW,OAAO,CAAC,CAACyC,KAAK,EAAE;AAC1C;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,WAAW,CAAC1C,OAAO,GAAG,IAAI,EAAE;EAC1C,IAAIF,OAAO,EAAE;IACX,IAAI+B,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI7B,OAAO,EAAE6B,OAAO,GAAG;MAAEjB,IAAI,EAAEZ;IAAQ,CAAC;IACxCF,OAAO,CAACyC,IAAI,CAACV,OAAO,CAAC;EACvB;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASc,cAAc,CAAC3C,OAAO,GAAG,IAAI,EAAE;EAC7C,IAAIF,OAAO,EAAE;IACX,IAAI+B,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI7B,OAAO,EAAE6B,OAAO,GAAG;MAAEjB,IAAI,EAAEZ;IAAQ,CAAC;IACxCF,OAAO,CAAC8C,OAAO,CAACf,OAAO,CAAC;EAC1B;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASgB,WAAW,CAAC7C,OAAO,GAAG,IAAI,EAAE;EAC1C,IAAIF,OAAO,EAAE;IACX,IAAI+B,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI7B,OAAO,EAAE6B,OAAO,GAAG;MAAEjB,IAAI,EAAEZ;IAAQ,CAAC;IACxCF,OAAO,CAACkB,IAAI,CAACa,OAAO,CAAC;EACvB;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASiB,WAAW,CAAC9C,OAAO,GAAG,IAAI,EAAE;EAC1C,IAAIF,OAAO,EAAE;IACX,IAAI+B,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI7B,OAAO,EAAE6B,OAAO,GAAG;MAAEjB,IAAI,EAAEZ;IAAQ,CAAC;IACxCF,OAAO,CAACe,KAAK,CAACgB,OAAO,CAAC;EACxB;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASkB,WAAW,CAAC/C,OAAO,GAAG,IAAI,EAAE;EAC1C,IAAIF,OAAO,EAAE;IACX,IAAI+B,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI7B,OAAO,EAAE6B,OAAO,GAAG;MAAEjB,IAAI,EAAEZ;IAAQ,CAAC;IACxCF,OAAO,CAACwC,MAAM,CAACT,OAAO,CAAC;IACvB/B,OAAO,CAACkD,IAAI,EAAE;EAChB;AACF;AAEA,OAAO,SAASC,uBAAuB,CACrCvB,IAAI,GAAG,aAAa,EACpBE,KAAK,GAAG,CAAC,EACT5B,OAAO,GAAG,IAAI,EACd;EACA,IAAI0B,IAAI,KAAK,aAAa,EAAE;IAC1BC,iBAAiB,CAACC,KAAK,EAAE5B,OAAO,CAAC;EACnC,CAAC,MAAM;IACLwC,WAAW,CAACxC,OAAO,CAAC;EACtB;AACF;AAEA,OAAO,SAASkD,uBAAuB,CAAClD,OAAO,EAAE;EAC/C,IAAI,CAACH,WAAW,EAAE;IAChBkD,WAAW,CAAC/C,OAAO,CAAC;EACtB,CAAC,MAAM;IACLmC,iBAAiB,CAACnC,OAAO,CAAC;EAC5B;AACF;AAEA,OAAO,SAASmD,qBAAqB,CAACnD,OAAO,EAAEoD,MAAM,GAAG,MAAM,EAAE;EAC9D,IAAI,CAACvD,WAAW,EAAE;IAChB,QAAQuD,MAAM;MACZ,KAAK,MAAM;QACTV,WAAW,CAAC1C,OAAO,CAAC;QACpB;MACF,KAAK,SAAS;QACZ2C,cAAc,CAAC3C,OAAO,CAAC;QACvB;MACF,KAAK,MAAM;QACT6C,WAAW,CAAC7C,OAAO,CAAC;QACpB;MACF,KAAK,MAAM;QACT8C,WAAW,CAAC9C,OAAO,CAAC;QACpB;MACF;QACE0C,WAAW,CAAC1C,OAAO,CAAC;QACpB;IAAM;EAEZ,CAAC,MAAM;IACLqC,eAAe,CAACrC,OAAO,CAAC;EAC1B;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASqD,WAAW,CAACC,IAAI,EAAE;EAChC,MAAMC,KAAK,GAAG,IAAIjE,KAAK,CAAC;IACtBgE,IAAI;IACJE,KAAK,EAAE;MACLC,GAAG,EAAE,EAAE;MACP,SAAS,EAAE,EAAE;MACb,UAAU,EAAE,EAAE;MACd,WAAW,EAAE,EAAE;MACfC,MAAM,EAAE,EAAE;MACV,YAAY,EAAE,EAAE;MAChB,aAAa,EAAE,EAAE;MACjB,cAAc,EAAE,EAAE;MAClBC,IAAI,EAAE,EAAE;MACR,UAAU,EAAE,EAAE;MACdC,GAAG,EAAE,EAAE;MACP,SAAS,EAAE,EAAE;MACbC,KAAK,EAAE,EAAE;MACT,WAAW,EAAE;IACf,CAAC;IACDC,KAAK,EAAE;MAAE,cAAc,EAAE,CAAC;MAAE,eAAe,EAAE,CAAC;MAAER,IAAI,EAAE,CAAC,YAAY;IAAE;EACvE,CAAC,CAAC;EACF,OAAOC,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASQ,mBAAmB,GAAG;EACpC,MAAMR,KAAK,GAAG,IAAIjE,KAAK,CAAC;IACtBkE,KAAK,EAAE;MACLC,GAAG,EAAE,EAAE;MACP,SAAS,EAAE,EAAE;MACb,UAAU,EAAE,EAAE;MACd,WAAW,EAAE,EAAE;MACfC,MAAM,EAAE,EAAE;MACV,YAAY,EAAE,EAAE;MAChB,aAAa,EAAE,EAAE;MACjB,cAAc,EAAE,EAAE;MAClBC,IAAI,EAAE,EAAE;MACR,UAAU,EAAE,EAAE;MACdC,GAAG,EAAE,EAAE;MACP,SAAS,EAAE,EAAE;MACbC,KAAK,EAAE,EAAE;MACT,WAAW,EAAE;IACf,CAAC;IACDC,KAAK,EAAE;MAAE,cAAc,EAAE,CAAC;MAAE,eAAe,EAAE;IAAE,CAAC;IAChDE,QAAQ,EAAE;EACZ,CAAC,CAAC;EACF,OAAOT,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASU,cAAc,CAACC,MAAM,EAAE;EAC9B,OAAOC,MAAM,CAACD,MAAM,CAAC,KAAKA,MAAM,GAC5B,CAAC,GAAGE,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAGF,MAAM,CAACG,MAAM,CAACJ,MAAM,CAAC,CAACK,GAAG,CAACN,cAAc,CAAC,CAAC,GAC9D,CAAC;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASO,SAAS,CAACN,MAAM,EAAE;EACzB,IAAIO,GAAG,GAAG,KAAK;EACf,MAAMC,IAAI,GAAGP,MAAM,CAACO,IAAI,CAACR,MAAM,CAAC;EAChC,KAAK,MAAMS,GAAG,IAAID,IAAI,EAAE;IACtB,IAAIP,MAAM,CAACD,MAAM,CAACS,GAAG,CAAC,CAAC,KAAKT,MAAM,CAACS,GAAG,CAAC,EAAE;MACvC,OAAO,IAAI;IACb;IACAF,GAAG,GAAGA,GAAG,IAAID,SAAS,CAACN,MAAM,CAACS,GAAG,CAAC,CAAC;EACrC;EACA,OAAOF,GAAG;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASG,OAAO,CAACV,MAAM,EAAE3D,KAAK,EAAEsE,KAAK,EAAEtB,KAAK,EAAEuB,MAAM,EAAE;EACpD,MAAMC,KAAK,GAAG,IAAI;EAClB,MAAML,IAAI,GAAGP,MAAM,CAACO,IAAI,CAACR,MAAM,CAAC;EAChC,KAAK,MAAMS,GAAG,IAAID,IAAI,EAAE;IACtB,IAAIP,MAAM,CAACD,MAAM,CAACS,GAAG,CAAC,CAAC,KAAKT,MAAM,CAACS,GAAG,CAAC,EAAE;MACvC,IAAIE,KAAK,KAAK,CAAC,EAAE;QACftB,KAAK,CAACyB,IAAI,CAAC,CACTF,MAAM,CAACH,GAAG,CAAC,GAAGG,MAAM,CAACH,GAAG,CAAC,CAACM,UAAU,GAAGN,GAAG,CAAC,YAAY,CAAC,EACxDT,MAAM,CAACS,GAAG,CAAC,CACZ,CAAC;MACJ,CAAC,MAAM;QACLpB,KAAK,CAACyB,IAAI,CAAC,CACT;UACEE,MAAM,EAAE,OAAO;UACfC,OAAO,EAAEL,MAAM,CAACH,GAAG,CAAC,GAAGG,MAAM,CAACH,GAAG,CAAC,CAACS,IAAI,GAAGT,GAAG,CAACS;QAChD,CAAC,EACDlB,MAAM,CAACS,GAAG,CAAC,CACZ,CAAC;MACJ;IACF;EACF;EACA,KAAK,MAAMA,GAAG,IAAID,IAAI,EAAE;IACtB,IAAIP,MAAM,CAACD,MAAM,CAACS,GAAG,CAAC,CAAC,KAAKT,MAAM,CAACS,GAAG,CAAC,EAAE;MACvC;MACA,IAAIH,SAAS,CAACN,MAAM,CAACS,GAAG,CAAC,CAAC,EAAE;QAC1B,IAAIU,SAAS,GAAG,IAAIC,KAAK,CAACT,KAAK,CAAC,CAACU,IAAI,CAACR,KAAK,CAAC,CAACS,IAAI,CAAC,EAAE,CAAC;QACrD,IAAIX,KAAK,GAAG,CAAC,EAAEQ,SAAS,GAAI,KAAIA,SAAU,EAAC;QAC3C9B,KAAK,CAACyB,IAAI,CAAC,CACTK,SAAS,CAACI,MAAM,CACdX,MAAM,CAACH,GAAG,CAAC,GAAGG,MAAM,CAACH,GAAG,CAAC,CAACM,UAAU,GAAGN,GAAG,CAAC,YAAY,CAAC,CACzD,EACD,EAAE,CACH,CAAC;MACJ;MACA;MACApB,KAAK,GAAGqB,OAAO,CAACV,MAAM,CAACS,GAAG,CAAC,EAAEpE,KAAK,EAAEsE,KAAK,GAAG,CAAC,EAAEtB,KAAK,EAAEuB,MAAM,CAAC;IAC/D;EACF;EACA,OAAOvB,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASmC,iBAAiB,CAACxB,MAAM,EAAEY,MAAM,GAAG,CAAC,CAAC,EAAE;EACrD;EACA,MAAMvE,KAAK,GAAG0D,cAAc,CAACC,MAAM,CAAC;EACpC;EACA,MAAMW,KAAK,GAAG,CAAC;EACf;EACA,MAAMtB,KAAK,GAAG,IAAIjE,KAAK,CAAC;IACtBkE,KAAK,EAAE;MACLC,GAAG,EAAE,EAAE;MACP,SAAS,EAAE,EAAE;MACb,UAAU,EAAE,EAAE;MACd,WAAW,EAAE,EAAE;MACfC,MAAM,EAAE,EAAE;MACV,YAAY,EAAE,EAAE;MAChB,aAAa,EAAE,EAAE;MACjB,cAAc,EAAE,EAAE;MAClBC,IAAI,EAAE,EAAE;MACR,UAAU,EAAE,EAAE;MACdC,GAAG,EAAE,EAAE;MACP,SAAS,EAAE,EAAE;MACbC,KAAK,EAAE,EAAE;MACT,WAAW,EAAE;IACf,CAAC;IACDC,KAAK,EAAE;MAAE,cAAc,EAAE,CAAC;MAAE,eAAe,EAAE,CAAC;MAAER,IAAI,EAAE,CAAC,YAAY;IAAE;EACvE,CAAC,CAAC;EACFsB,OAAO,CAACV,MAAM,EAAE3D,KAAK,EAAEsE,KAAK,GAAG,CAAC,EAAEtB,KAAK,EAAEuB,MAAM,CAAC;EAChD,OAAOvB,KAAK;AACd"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rockcarver/frodo-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A command line interface to manage ForgeRock Identity Cloud tenants, ForgeOps deployments, and classic deployments.",
|
|
6
6
|
"keywords": [
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
]
|
|
105
105
|
},
|
|
106
106
|
"dependencies": {
|
|
107
|
-
"@rockcarver/frodo-lib": "0.18.
|
|
107
|
+
"@rockcarver/frodo-lib": "0.18.4",
|
|
108
108
|
"chokidar": "^3.5.3",
|
|
109
109
|
"cli-progress": "^3.11.2",
|
|
110
110
|
"cli-table3": "^0.6.3",
|