@rockcarver/frodo-cli 0.18.2-12 → 0.18.2-14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/esm/app.js +1 -1
  3. package/esm/app.js.map +1 -1
  4. package/esm/cli/conn/conn-save.js +78 -0
  5. package/esm/cli/conn/conn-save.js.map +1 -0
  6. package/esm/cli/conn/conn.js +1 -1
  7. package/esm/cli/conn/conn.js.map +1 -1
  8. package/esm/cli/idm/idm-count.js +4 -6
  9. package/esm/cli/idm/idm-count.js.map +1 -1
  10. package/esm/cli/idm/idm-export.js +2 -6
  11. package/esm/cli/idm/idm-export.js.map +1 -1
  12. package/esm/cli/idm/idm-import.js +2 -6
  13. package/esm/cli/idm/idm-import.js.map +1 -1
  14. package/esm/cli/idm/idm-list.js +2 -4
  15. package/esm/cli/idm/idm-list.js.map +1 -1
  16. package/esm/cli/info/info.js +35 -17
  17. package/esm/cli/info/info.js.map +1 -1
  18. package/esm/cli/logging/logs-fetch.js +5 -5
  19. package/esm/cli/logging/logs-fetch.js.map +1 -1
  20. package/esm/cli/logging/logs-list.js +4 -4
  21. package/esm/cli/logging/logs-list.js.map +1 -1
  22. package/esm/cli/logging/logs-tail.js +5 -5
  23. package/esm/cli/logging/logs-tail.js.map +1 -1
  24. package/esm/cli/service/service-delete.js +4 -3
  25. package/esm/cli/service/service-delete.js.map +1 -1
  26. package/esm/cli/service/service-export.js +6 -4
  27. package/esm/cli/service/service-export.js.map +1 -1
  28. package/esm/cli/service/service-import.js +6 -5
  29. package/esm/cli/service/service-import.js.map +1 -1
  30. package/esm/cli/service/service-list.js +2 -2
  31. package/esm/cli/service/service-list.js.map +1 -1
  32. package/esm/ops/ConnectionProfileOps.js +30 -0
  33. package/esm/ops/ConnectionProfileOps.js.map +1 -0
  34. package/esm/ops/IdmOps.js +317 -0
  35. package/esm/ops/IdmOps.js.map +1 -0
  36. package/esm/ops/ServiceOps.js +20 -20
  37. package/esm/ops/ServiceOps.js.map +1 -1
  38. package/package.json +5 -3
  39. package/esm/cli/conn/conn-add.js +0 -40
  40. package/esm/cli/conn/conn-add.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"logs-fetch.js","names":["Command","Option","Authenticate","ConnectionProfile","Log","state","common","config","printMessage","provisionCreds","fetchLogs","resolveLevel","getConnectionProfile","saveConnectionProfile","getTokens","SECONDS_IN_30_DAYS","SECONDS_IN_1_HOUR","LOG_TIME_WINDOW_MAX","LOG_TIME_WINDOW_INCREMENT","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","userArgument","passwordArgument","addOption","insecureOption","verboseOption","debugOption","curlirizeOption","sourcesOptionM","default","getConfigPath","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","credsFromParameters","session","setTenant","setUsername","setPassword","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","conn","tenant","key","secret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","creds","api_key_id","api_key_secret","now","Date","beginTimestamp","tempStartDate","setTime","toISOString","tempEndDate","endTimestamp","beginTs","parse","intermediateEndTs","opts","sources","level","transactionId","searchString","getNoiseFilters","defaults"],"sources":["cli/logging/logs-fetch.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\n\nconst { provisionCreds, fetchLogs, resolveLevel } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst SECONDS_IN_30_DAYS = 2592000;\nconst SECONDS_IN_1_HOUR = 3600;\nconst LOG_TIME_WINDOW_MAX = SECONDS_IN_30_DAYS;\nconst LOG_TIME_WINDOW_INCREMENT = SECONDS_IN_1_HOUR;\n\nconst program = new Command('frodo logs fetch');\nprogram\n .description(\n 'Fetch Identity Cloud logs between a specified begin and end time period.\\\n WARNING: depending on filters and time period specified, this could take substantial time to complete.'\n )\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(common.sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option(\n '-b, --begin-timestamp <beginTs>',\n 'Begin timestamp for period (in ISO8601, example: \"2022-10-13T19:06:28Z\", or \"2022-09.30\". \\\nCannot be more than 30 days in the past. If not specified, logs from one hour ago are fetched \\\n(-e is ignored)'\n )\n )\n .addOption(\n new Option(\n '-e, --end-timestamp <endTs>',\n 'End timestamp for period. Default: \"now\"'\n )\n )\n .addOption(\n new Option(\n '-s, --search-string <ss>',\n 'Filter by a specific string (ANDed with transactionID filter)'\n )\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in ${config.getConfigPath()}/${\n config.FRODO_LOG_NOISEFILTER_FILENAME\n }`\n )\n )\n .action(async (host, user, password, options, command) => {\n let credsFromParameters = true;\n state.default.session.setTenant(host);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n const conn = await getConnectionProfile();\n state.default.session.setTenant(conn.tenant);\n if (conn.key != null && conn.secret != null) {\n credsFromParameters = false;\n state.default.session.setLogApiKey(conn.key);\n state.default.session.setLogApiSecret(conn.secret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (\n !state.default.session.getUsername() &&\n !state.default.session.getPassword()\n ) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.default.session.setUsername(conn.username);\n state.default.session.setPassword(conn.password);\n }\n if (await getTokens()) {\n const creds = await provisionCreds();\n state.default.session.setLogApiKey(creds.api_key_id);\n state.default.session.setLogApiSecret(creds.api_key_secret);\n }\n }\n const now = Date.now() / 1000;\n if (\n typeof options.beginTimestamp === 'undefined' ||\n !options.beginTimestamp\n ) {\n // no beginTimestamp value specified, default is 1 hour ago\n const tempStartDate = new Date();\n tempStartDate.setTime((now - SECONDS_IN_1_HOUR) * 1000);\n options.beginTimestamp = tempStartDate.toISOString();\n // also override endTimestamp to now\n const tempEndDate = new Date();\n tempEndDate.setTime(now * 1000);\n options.endTimestamp = tempEndDate;\n printMessage(\n 'No timestamps specified, defaulting to logs from 1 hour ago',\n 'info'\n );\n }\n if (typeof options.endTimestamp === 'undefined' || !options.endTimestamp) {\n // no endTimestamp value specified, default is now\n options.endTimestamp = now * 1000;\n printMessage(\n 'No end timestamp specified, defaulting end timestamp to \"now\"',\n 'info'\n );\n }\n let beginTs = Date.parse(options.beginTimestamp) / 1000;\n if (Date.parse(options.endTimestamp) / 1000 < beginTs) {\n printMessage('End timestamp can not be before begin timestamp', 'error');\n return;\n }\n if (now - beginTs > LOG_TIME_WINDOW_MAX) {\n printMessage(\n 'Begin timestamp can not be more than 30 days in the past',\n 'error'\n );\n return;\n }\n let intermediateEndTs = 0;\n printMessage(\n `Fetching ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${resolveLevel(command.opts().level)}]...`\n );\n if (credsFromParameters) await saveConnectionProfile(); // save new values if they were specified on CLI\n\n do {\n intermediateEndTs = beginTs + LOG_TIME_WINDOW_INCREMENT;\n await fetchLogs(\n command.opts().sources,\n new Date(beginTs * 1000).toISOString(),\n new Date(intermediateEndTs * 1000).toISOString(),\n resolveLevel(command.opts().level),\n command.opts().transactionId,\n command.opts().searchString,\n null,\n config.getNoiseFilters(options.defaults)\n );\n beginTs = intermediateEndTs;\n } while (intermediateEndTs < Date.parse(options.endTimestamp) / 1000);\n });\n\nprogram.parse();\n"],"mappings":"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"}
1
+ {"version":3,"file":"logs-fetch.js","names":["Command","Option","Authenticate","ConnectionProfile","Log","state","common","config","printMessage","provisionCreds","fetchLogs","resolveLevel","getConnectionProfile","saveConnectionProfile","getTokens","SECONDS_IN_30_DAYS","SECONDS_IN_1_HOUR","LOG_TIME_WINDOW_MAX","LOG_TIME_WINDOW_INCREMENT","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","userArgument","passwordArgument","addOption","insecureOption","verboseOption","debugOption","curlirizeOption","sourcesOptionM","default","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","credsFromParameters","session","setTenant","setUsername","setPassword","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","conn","tenant","logApiKey","logApiSecret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","creds","api_key_id","api_key_secret","now","Date","beginTimestamp","tempStartDate","setTime","toISOString","tempEndDate","endTimestamp","beginTs","parse","intermediateEndTs","opts","sources","level","transactionId","searchString","getNoiseFilters","defaults"],"sources":["cli/logging/logs-fetch.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\n\nconst { provisionCreds, fetchLogs, resolveLevel } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst SECONDS_IN_30_DAYS = 2592000;\nconst SECONDS_IN_1_HOUR = 3600;\nconst LOG_TIME_WINDOW_MAX = SECONDS_IN_30_DAYS;\nconst LOG_TIME_WINDOW_INCREMENT = SECONDS_IN_1_HOUR;\n\nconst program = new Command('frodo logs fetch');\nprogram\n .description(\n 'Fetch Identity Cloud logs between a specified begin and end time period.\\\n WARNING: depending on filters and time period specified, this could take substantial time to complete.'\n )\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(common.sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option(\n '-b, --begin-timestamp <beginTs>',\n 'Begin timestamp for period (in ISO8601, example: \"2022-10-13T19:06:28Z\", or \"2022-09.30\". \\\nCannot be more than 30 days in the past. If not specified, logs from one hour ago are fetched \\\n(-e is ignored)'\n )\n )\n .addOption(\n new Option(\n '-e, --end-timestamp <endTs>',\n 'End timestamp for period. Default: \"now\"'\n )\n )\n .addOption(\n new Option(\n '-s, --search-string <ss>',\n 'Filter by a specific string (ANDed with transactionID filter)'\n )\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in $HOME/${config.FRODO_LOG_NOISEFILTER_FILENAME}`\n )\n )\n .action(async (host, user, password, options, command) => {\n let credsFromParameters = true;\n state.default.session.setTenant(host);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n const conn = await getConnectionProfile();\n state.default.session.setTenant(conn.tenant);\n if (conn.logApiKey != null && conn.logApiSecret != null) {\n credsFromParameters = false;\n state.default.session.setLogApiKey(conn.logApiKey);\n state.default.session.setLogApiSecret(conn.logApiSecret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (\n !state.default.session.getUsername() &&\n !state.default.session.getPassword()\n ) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.default.session.setUsername(conn.username);\n state.default.session.setPassword(conn.password);\n }\n if (await getTokens()) {\n const creds = await provisionCreds();\n state.default.session.setLogApiKey(creds.api_key_id);\n state.default.session.setLogApiSecret(creds.api_key_secret);\n }\n }\n const now = Date.now() / 1000;\n if (\n typeof options.beginTimestamp === 'undefined' ||\n !options.beginTimestamp\n ) {\n // no beginTimestamp value specified, default is 1 hour ago\n const tempStartDate = new Date();\n tempStartDate.setTime((now - SECONDS_IN_1_HOUR) * 1000);\n options.beginTimestamp = tempStartDate.toISOString();\n // also override endTimestamp to now\n const tempEndDate = new Date();\n tempEndDate.setTime(now * 1000);\n options.endTimestamp = tempEndDate;\n printMessage(\n 'No timestamps specified, defaulting to logs from 1 hour ago',\n 'info'\n );\n }\n if (typeof options.endTimestamp === 'undefined' || !options.endTimestamp) {\n // no endTimestamp value specified, default is now\n options.endTimestamp = now * 1000;\n printMessage(\n 'No end timestamp specified, defaulting end timestamp to \"now\"',\n 'info'\n );\n }\n let beginTs = Date.parse(options.beginTimestamp) / 1000;\n if (Date.parse(options.endTimestamp) / 1000 < beginTs) {\n printMessage('End timestamp can not be before begin timestamp', 'error');\n return;\n }\n if (now - beginTs > LOG_TIME_WINDOW_MAX) {\n printMessage(\n 'Begin timestamp can not be more than 30 days in the past',\n 'error'\n );\n return;\n }\n let intermediateEndTs = 0;\n printMessage(\n `Fetching ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${resolveLevel(command.opts().level)}]...`\n );\n if (credsFromParameters) await saveConnectionProfile(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\nprogram.parse();\n"],"mappings":"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"}
@@ -26,10 +26,10 @@ program.description('List available ID Cloud log sources.').helpOption('-h, --he
26
26
  printMessage('Listing available ID Cloud log sources...');
27
27
  const conn = await getConnectionProfile();
28
28
  state.default.session.setTenant(conn.tenant);
29
- if (conn.key != null && conn.secret != null) {
29
+ if (conn.logApiKey != null && conn.logApiSecret != null) {
30
30
  credsFromParameters = false;
31
- state.default.session.setLogApiKey(conn.key);
32
- state.default.session.setLogApiSecret(conn.secret);
31
+ state.default.session.setLogApiKey(conn.logApiKey);
32
+ state.default.session.setLogApiSecret(conn.logApiSecret);
33
33
  } else {
34
34
  if (conn.username == null && conn.password == null) {
35
35
  if (!state.default.session.getUsername() && !state.default.session.getPassword()) {
@@ -51,7 +51,7 @@ program.description('List available ID Cloud log sources.').helpOption('-h, --he
51
51
  if (sources.length === 0) {
52
52
  printMessage("Can't get sources, possible cause - wrong API key or secret", 'error');
53
53
  } else {
54
- if (credsFromParameters) await saveConnectionProfile(); // save new values if they were specified on CLI
54
+ if (credsFromParameters) await saveConnectionProfile(host); // save new values if they were specified on CLI
55
55
  printMessage('Available log sources:');
56
56
  sources.forEach(source => {
57
57
  printMessage(`${source}`, 'info');
@@ -1 +1 @@
1
- {"version":3,"file":"logs-list.js","names":["Authenticate","ConnectionProfile","Log","state","Command","printMessage","common","provisionCreds","getLogSources","getConnectionProfile","saveConnectionProfile","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","userArgument","passwordArgument","addOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","user","password","options","credsFromParameters","default","session","setTenant","setUsername","setPassword","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","conn","tenant","key","secret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","creds","api_key_id","api_key_secret","sources","length","forEach","source","parse"],"sources":["cli/logging/logs-list.ts"],"sourcesContent":["import {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport { Command } from 'commander';\nimport { printMessage } from '../../utils/Console';\nimport * as common from '../cmd_common';\n\nconst { provisionCreds, getLogSources } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo logs list');\nprogram\n .description('List available ID Cloud log sources.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .action(async (host, user, password, options) => {\n let credsFromParameters = true;\n state.default.session.setTenant(host);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n printMessage('Listing available ID Cloud log sources...');\n const conn = await getConnectionProfile();\n state.default.session.setTenant(conn.tenant);\n if (conn.key != null && conn.secret != null) {\n credsFromParameters = false;\n state.default.session.setLogApiKey(conn.key);\n state.default.session.setLogApiSecret(conn.secret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (\n !state.default.session.getUsername() &&\n !state.default.session.getPassword()\n ) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.default.session.setUsername(conn.username);\n state.default.session.setPassword(conn.password);\n }\n if (await getTokens()) {\n const creds = await provisionCreds();\n state.default.session.setLogApiKey(creds.api_key_id);\n state.default.session.setLogApiSecret(creds.api_key_secret);\n }\n }\n\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(); // save new values if they were specified on CLI\n printMessage('Available log sources:');\n sources.forEach((source) => {\n printMessage(`${source}`, 'info');\n });\n printMessage('You can use any combination of comma separated sources.');\n printMessage('For example:');\n printMessage(`$ frodo logs tail -c am-core,idm-core ${host}`, 'info');\n }\n });\n\nprogram.parse();\n"],"mappings":"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"}
1
+ {"version":3,"file":"logs-list.js","names":["Authenticate","ConnectionProfile","Log","state","Command","printMessage","common","provisionCreds","getLogSources","getConnectionProfile","saveConnectionProfile","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","userArgument","passwordArgument","addOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","user","password","options","credsFromParameters","default","session","setTenant","setUsername","setPassword","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","conn","tenant","logApiKey","logApiSecret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","creds","api_key_id","api_key_secret","sources","length","forEach","source","parse"],"sources":["cli/logging/logs-list.ts"],"sourcesContent":["import {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport { Command } from 'commander';\nimport { printMessage } from '../../utils/Console';\nimport * as common from '../cmd_common';\n\nconst { provisionCreds, getLogSources } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo logs list');\nprogram\n .description('List available ID Cloud log sources.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .action(async (host, user, password, options) => {\n let credsFromParameters = true;\n state.default.session.setTenant(host);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n printMessage('Listing available ID Cloud log sources...');\n const conn = await getConnectionProfile();\n state.default.session.setTenant(conn.tenant);\n if (conn.logApiKey != null && conn.logApiSecret != null) {\n credsFromParameters = false;\n state.default.session.setLogApiKey(conn.logApiKey);\n state.default.session.setLogApiSecret(conn.logApiSecret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (\n !state.default.session.getUsername() &&\n !state.default.session.getPassword()\n ) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.default.session.setUsername(conn.username);\n state.default.session.setPassword(conn.password);\n }\n if (await getTokens()) {\n const creds = await provisionCreds();\n state.default.session.setLogApiKey(creds.api_key_id);\n state.default.session.setLogApiSecret(creds.api_key_secret);\n }\n }\n\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('Available log sources:');\n sources.forEach((source) => {\n printMessage(`${source}`, 'info');\n });\n printMessage('You can use any combination of comma separated sources.');\n printMessage('For example:');\n printMessage(`$ frodo logs tail -c am-core,idm-core ${host}`, 'info');\n }\n });\n\nprogram.parse();\n"],"mappings":"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"}
@@ -20,7 +20,7 @@ program.description('Tail Identity Cloud logs.').helpOption('-h, --help', 'Help'
20
20
  Following values are possible (values on the same line are equivalent): \
21
21
  \n0, SEVERE, FATAL, or ERROR\n1, WARNING, WARN or CONFIG\
22
22
  \n2, INFO or INFORMATION\n3, DEBUG, FINE, FINER or FINEST\
23
- \n4 or ALL').default('ERROR', `${resolveLevel('ERROR')}`)).addOption(new Option('-t, --transaction-id <txid>', 'Filter by transactionId')).addOption(new Option('-d, --defaults', 'Use default logging noise filters').default(false, `Use custom logging noise filters defined in ${config.getConfigPath()}/${config.FRODO_LOG_NOISEFILTER_FILENAME}`)).action(async (host, user, password, options, command) => {
23
+ \n4 or ALL').default('ERROR', `${resolveLevel('ERROR')}`)).addOption(new Option('-t, --transaction-id <txid>', 'Filter by transactionId')).addOption(new Option('-d, --defaults', 'Use default logging noise filters').default(false, `Use custom logging noise filters defined in $HOME/${config.FRODO_LOG_NOISEFILTER_FILENAME}`)).action(async (host, user, password, options, command) => {
24
24
  let credsFromParameters = true;
25
25
  state.default.session.setTenant(host);
26
26
  state.default.session.setUsername(user);
@@ -31,10 +31,10 @@ Following values are possible (values on the same line are equivalent): \
31
31
  state.default.session.setCurlirize(options.curlirize);
32
32
  const conn = await getConnectionProfile();
33
33
  state.default.session.setTenant(conn.tenant);
34
- if (conn.key != null && conn.secret != null) {
34
+ if (conn.logApiKey != null && conn.logApiSecret != null) {
35
35
  credsFromParameters = false;
36
- state.default.session.setLogApiKey(conn.key);
37
- state.default.session.setLogApiSecret(conn.secret);
36
+ state.default.session.setLogApiKey(conn.logApiKey);
37
+ state.default.session.setLogApiSecret(conn.logApiSecret);
38
38
  } else {
39
39
  if (conn.username == null && conn.password == null) {
40
40
  if (!state.default.session.getUsername() && !state.default.session.getPassword()) {
@@ -53,7 +53,7 @@ Following values are possible (values on the same line are equivalent): \
53
53
  }
54
54
  }
55
55
  printMessage(`Tailing ID Cloud logs from the following sources: ${command.opts().sources} and levels [${resolveLevel(command.opts().level)}]...`);
56
- if (credsFromParameters) await saveConnectionProfile(); // save new values if they were specified on CLI
56
+ if (credsFromParameters) await saveConnectionProfile(host); // save new values if they were specified on CLI
57
57
  await tailLogs(command.opts().sources, resolveLevel(command.opts().level), command.opts().transactionId, null, config.getNoiseFilters(options.defaults));
58
58
  });
59
59
  program.parse();
@@ -1 +1 @@
1
- {"version":3,"file":"logs-tail.js","names":["Command","Option","Authenticate","ConnectionProfile","Log","state","common","config","printMessage","provisionCreds","tailLogs","resolveLevel","getConnectionProfile","saveConnectionProfile","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","userArgument","passwordArgument","addOption","insecureOption","verboseOption","debugOption","curlirizeOption","sourcesOptionM","default","getConfigPath","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","credsFromParameters","session","setTenant","setUsername","setPassword","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","conn","tenant","key","secret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","creds","api_key_id","api_key_secret","opts","sources","level","transactionId","getNoiseFilters","defaults","parse"],"sources":["cli/logging/logs-tail.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\n\nconst { provisionCreds, tailLogs, resolveLevel } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo logs tail');\nprogram\n .description('Tail Identity Cloud logs.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(common.sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in ${config.getConfigPath()}/${\n config.FRODO_LOG_NOISEFILTER_FILENAME\n }`\n )\n )\n .action(async (host, user, password, options, command) => {\n let credsFromParameters = true;\n state.default.session.setTenant(host);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n const conn = await getConnectionProfile();\n state.default.session.setTenant(conn.tenant);\n if (conn.key != null && conn.secret != null) {\n credsFromParameters = false;\n state.default.session.setLogApiKey(conn.key);\n state.default.session.setLogApiSecret(conn.secret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (\n !state.default.session.getUsername() &&\n !state.default.session.getPassword()\n ) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.default.session.setUsername(conn.username);\n state.default.session.setPassword(conn.password);\n }\n if (await getTokens()) {\n const creds = await provisionCreds();\n state.default.session.setLogApiKey(creds.api_key_id);\n state.default.session.setLogApiSecret(creds.api_key_secret);\n }\n }\n printMessage(\n `Tailing ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${resolveLevel(command.opts().level)}]...`\n );\n if (credsFromParameters) await saveConnectionProfile(); // save new values if they were specified on CLI\n await tailLogs(\n command.opts().sources,\n resolveLevel(command.opts().level),\n command.opts().transactionId,\n null,\n config.getNoiseFilters(options.defaults)\n );\n });\n\nprogram.parse();\n"],"mappings":"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"}
1
+ {"version":3,"file":"logs-tail.js","names":["Command","Option","Authenticate","ConnectionProfile","Log","state","common","config","printMessage","provisionCreds","tailLogs","resolveLevel","getConnectionProfile","saveConnectionProfile","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","userArgument","passwordArgument","addOption","insecureOption","verboseOption","debugOption","curlirizeOption","sourcesOptionM","default","FRODO_LOG_NOISEFILTER_FILENAME","action","host","user","password","options","command","credsFromParameters","session","setTenant","setUsername","setPassword","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","conn","tenant","logApiKey","logApiSecret","setLogApiKey","setLogApiSecret","username","getUsername","getPassword","creds","api_key_id","api_key_secret","opts","sources","level","transactionId","getNoiseFilters","defaults","parse"],"sources":["cli/logging/logs-tail.ts"],"sourcesContent":["import { Command, Option } from 'commander';\nimport {\n Authenticate,\n ConnectionProfile,\n Log,\n state,\n} from '@rockcarver/frodo-lib';\nimport * as common from '../cmd_common';\nimport * as config from '../../utils/Config';\nimport { printMessage } from '../../utils/Console';\n\nconst { provisionCreds, tailLogs, resolveLevel } = Log;\nconst { getConnectionProfile, saveConnectionProfile } = ConnectionProfile;\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo logs tail');\nprogram\n .description('Tail Identity Cloud logs.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(common.sourcesOptionM)\n .addOption(\n new Option(\n '-l, --level <level>',\n 'Set log level filter. You can specify the level as a number or a string. \\\nFollowing values are possible (values on the same line are equivalent): \\\n\\n0, SEVERE, FATAL, or ERROR\\n1, WARNING, WARN or CONFIG\\\n\\n2, INFO or INFORMATION\\n3, DEBUG, FINE, FINER or FINEST\\\n\\n4 or ALL'\n ).default('ERROR', `${resolveLevel('ERROR')}`)\n )\n .addOption(\n new Option('-t, --transaction-id <txid>', 'Filter by transactionId')\n )\n .addOption(\n new Option('-d, --defaults', 'Use default logging noise filters').default(\n false,\n `Use custom logging noise filters defined in $HOME/${config.FRODO_LOG_NOISEFILTER_FILENAME}`\n )\n )\n .action(async (host, user, password, options, command) => {\n let credsFromParameters = true;\n state.default.session.setTenant(host);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n const conn = await getConnectionProfile();\n state.default.session.setTenant(conn.tenant);\n if (conn.logApiKey != null && conn.logApiSecret != null) {\n credsFromParameters = false;\n state.default.session.setLogApiKey(conn.logApiKey);\n state.default.session.setLogApiSecret(conn.logApiSecret);\n } else {\n if (conn.username == null && conn.password == null) {\n if (\n !state.default.session.getUsername() &&\n !state.default.session.getPassword()\n ) {\n credsFromParameters = false;\n printMessage(\n 'User credentials not specified as parameters and no saved API key and secret found!',\n 'warn'\n );\n return;\n }\n } else {\n state.default.session.setUsername(conn.username);\n state.default.session.setPassword(conn.password);\n }\n if (await getTokens()) {\n const creds = await provisionCreds();\n state.default.session.setLogApiKey(creds.api_key_id);\n state.default.session.setLogApiSecret(creds.api_key_secret);\n }\n }\n printMessage(\n `Tailing ID Cloud logs from the following sources: ${\n command.opts().sources\n } and levels [${resolveLevel(command.opts().level)}]...`\n );\n if (credsFromParameters) await saveConnectionProfile(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\nprogram.parse();\n"],"mappings":"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"}
@@ -6,7 +6,7 @@ const {
6
6
  getTokens
7
7
  } = Authenticate;
8
8
  const program = new Command('frodo service delete');
9
- program.description('Delete AM services.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-i, --id <id>', 'Id of Service to be deleted.')).addOption(new Option('-a, --all', 'Delete all services. Ignored with -i.')).action(async (host, realm, user, password, options) => {
9
+ program.description('Delete AM services.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-i, --id <id>', 'Id of Service to be deleted.')).addOption(new Option('-a, --all', 'Delete all services. Ignored with -i.')).addOption(new Option('-g, --global', 'List global services.')).action(async (host, realm, user, password, options) => {
10
10
  state.default.session.setTenant(host);
11
11
  state.default.session.setRealm(realm);
12
12
  state.default.session.setUsername(user);
@@ -16,10 +16,11 @@ program.description('Delete AM services.').helpOption('-h, --help', 'Help').show
16
16
  state.default.session.setVerbose(options.verbose);
17
17
  state.default.session.setDebug(options.debug);
18
18
  state.default.session.setCurlirize(options.curlirize);
19
+ const globalConfig = options.global ?? false;
19
20
  if (options.id && (await getTokens())) {
20
- await deleteService(options.id);
21
+ await deleteService(options.id, globalConfig);
21
22
  } else if (options.all && (await getTokens())) {
22
- await deleteServices();
23
+ await deleteServices(globalConfig);
23
24
  } else {
24
25
  program.help();
25
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"service-delete.js","names":["Authenticate","state","Command","Option","deleteService","deleteServices","common","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","id","all","help","parse"],"sources":["cli/service/service-delete.ts"],"sourcesContent":["import { Authenticate, state } from '@rockcarver/frodo-lib';\nimport { Command, Option } from 'commander';\nimport { deleteService, deleteServices } from '../../ops/ServiceOps.js';\nimport * as common from '../cmd_common.js';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo service delete');\n\ninterface ServiceDeleteOptions {\n id?: string;\n type?: string;\n insecure?: boolean;\n verbose?: boolean;\n debug?: boolean;\n curlirize?: boolean;\n all?: boolean;\n}\n\nprogram\n .description('Delete AM services.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(new Option('-i, --id <id>', 'Id of Service to be deleted.'))\n .addOption(new Option('-a, --all', 'Delete all services. Ignored with -i.'))\n .action(\n async (\n host: string,\n realm: string,\n user: string,\n password: string,\n options: ServiceDeleteOptions\n ) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n if (options.id && (await getTokens())) {\n await deleteService(options.id);\n } else if (options.all && (await getTokens())) {\n await deleteServices();\n } else {\n program.help();\n }\n }\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,EAAEC,KAAK,QAAQ,uBAAuB;AAC3D,SAASC,OAAO,EAAEC,MAAM,QAAQ,WAAW;AAC3C,SAASC,aAAa,EAAEC,cAAc,QAAQ,yBAAyB;AACvE,OAAO,KAAKC,MAAM,MAAM,kBAAkB;AAE1C,MAAM;EAAEC;AAAU,CAAC,GAAGP,YAAY;AAElC,MAAMQ,OAAO,GAAG,IAAIN,OAAO,CAAC,sBAAsB,CAAC;AAYnDM,OAAO,CACJC,WAAW,CAAC,qBAAqB,CAAC,CAClCC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAChCC,kBAAkB,EAAE,CACpBC,WAAW,CAACN,MAAM,CAACO,aAAa,CAAC,CACjCD,WAAW,CAACN,MAAM,CAACQ,aAAa,CAAC,CACjCF,WAAW,CAACN,MAAM,CAACS,YAAY,CAAC,CAChCH,WAAW,CAACN,MAAM,CAACU,gBAAgB,CAAC,CACpCC,SAAS,CAACX,MAAM,CAACY,gBAAgB,CAAC,CAClCD,SAAS,CAACX,MAAM,CAACa,cAAc,CAAC,CAChCF,SAAS,CAACX,MAAM,CAACc,aAAa,CAAC,CAC/BH,SAAS,CAACX,MAAM,CAACe,WAAW,CAAC,CAC7BJ,SAAS,CAACX,MAAM,CAACgB,eAAe,CAAC,CACjCL,SAAS,CAAC,IAAId,MAAM,CAAC,eAAe,EAAE,8BAA8B,CAAC,CAAC,CACtEc,SAAS,CAAC,IAAId,MAAM,CAAC,WAAW,EAAE,uCAAuC,CAAC,CAAC,CAC3EoB,MAAM,CACL,OACEC,IAAY,EACZC,KAAa,EACbC,IAAY,EACZC,QAAgB,EAChBC,OAA6B,KAC1B;EACH3B,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACC,SAAS,CAACP,IAAI,CAAC;EACrCvB,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACE,QAAQ,CAACP,KAAK,CAAC;EACrCxB,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACG,WAAW,CAACP,IAAI,CAAC;EACvCzB,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACI,WAAW,CAACP,QAAQ,CAAC;EAC3C1B,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACK,iBAAiB,CAACP,OAAO,CAACQ,IAAI,CAAC;EACrDnC,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACO,0BAA0B,CAACT,OAAO,CAACU,QAAQ,CAAC;EAClErC,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACS,UAAU,CAACX,OAAO,CAACY,OAAO,CAAC;EACjDvC,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACW,QAAQ,CAACb,OAAO,CAACc,KAAK,CAAC;EAC7CzC,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACa,YAAY,CAACf,OAAO,CAACgB,SAAS,CAAC;EACrD,IAAIhB,OAAO,CAACiB,EAAE,KAAK,MAAMtC,SAAS,EAAE,CAAC,EAAE;IACrC,MAAMH,aAAa,CAACwB,OAAO,CAACiB,EAAE,CAAC;EACjC,CAAC,MAAM,IAAIjB,OAAO,CAACkB,GAAG,KAAK,MAAMvC,SAAS,EAAE,CAAC,EAAE;IAC7C,MAAMF,cAAc,EAAE;EACxB,CAAC,MAAM;IACLG,OAAO,CAACuC,IAAI,EAAE;EAChB;AACF,CAAC,CACF;AAEHvC,OAAO,CAACwC,KAAK,EAAE"}
1
+ {"version":3,"file":"service-delete.js","names":["Authenticate","state","Command","Option","deleteService","deleteServices","common","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","globalConfig","global","id","all","help","parse"],"sources":["cli/service/service-delete.ts"],"sourcesContent":["import { Authenticate, state } from '@rockcarver/frodo-lib';\nimport { Command, Option } from 'commander';\nimport { deleteService, deleteServices } from '../../ops/ServiceOps.js';\nimport * as common from '../cmd_common.js';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo service delete');\n\ninterface ServiceDeleteOptions {\n id?: string;\n type?: string;\n insecure?: boolean;\n verbose?: boolean;\n debug?: boolean;\n curlirize?: boolean;\n all?: boolean;\n global?: boolean;\n}\n\nprogram\n .description('Delete AM services.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(new Option('-i, --id <id>', 'Id of Service to be deleted.'))\n .addOption(new Option('-a, --all', 'Delete all services. Ignored with -i.'))\n .addOption(new Option('-g, --global', 'List global services.'))\n .action(\n async (\n host: string,\n realm: string,\n user: string,\n password: string,\n options: ServiceDeleteOptions\n ) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n\n const globalConfig = options.global ?? false;\n\n if (options.id && (await getTokens())) {\n await deleteService(options.id, globalConfig);\n } else if (options.all && (await getTokens())) {\n await deleteServices(globalConfig);\n } else {\n program.help();\n }\n }\n );\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,EAAEC,KAAK,QAAQ,uBAAuB;AAC3D,SAASC,OAAO,EAAEC,MAAM,QAAQ,WAAW;AAC3C,SAASC,aAAa,EAAEC,cAAc,QAAQ,yBAAyB;AACvE,OAAO,KAAKC,MAAM,MAAM,kBAAkB;AAE1C,MAAM;EAAEC;AAAU,CAAC,GAAGP,YAAY;AAElC,MAAMQ,OAAO,GAAG,IAAIN,OAAO,CAAC,sBAAsB,CAAC;AAanDM,OAAO,CACJC,WAAW,CAAC,qBAAqB,CAAC,CAClCC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAChCC,kBAAkB,EAAE,CACpBC,WAAW,CAACN,MAAM,CAACO,aAAa,CAAC,CACjCD,WAAW,CAACN,MAAM,CAACQ,aAAa,CAAC,CACjCF,WAAW,CAACN,MAAM,CAACS,YAAY,CAAC,CAChCH,WAAW,CAACN,MAAM,CAACU,gBAAgB,CAAC,CACpCC,SAAS,CAACX,MAAM,CAACY,gBAAgB,CAAC,CAClCD,SAAS,CAACX,MAAM,CAACa,cAAc,CAAC,CAChCF,SAAS,CAACX,MAAM,CAACc,aAAa,CAAC,CAC/BH,SAAS,CAACX,MAAM,CAACe,WAAW,CAAC,CAC7BJ,SAAS,CAACX,MAAM,CAACgB,eAAe,CAAC,CACjCL,SAAS,CAAC,IAAId,MAAM,CAAC,eAAe,EAAE,8BAA8B,CAAC,CAAC,CACtEc,SAAS,CAAC,IAAId,MAAM,CAAC,WAAW,EAAE,uCAAuC,CAAC,CAAC,CAC3Ec,SAAS,CAAC,IAAId,MAAM,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC,CAC9DoB,MAAM,CACL,OACEC,IAAY,EACZC,KAAa,EACbC,IAAY,EACZC,QAAgB,EAChBC,OAA6B,KAC1B;EACH3B,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACC,SAAS,CAACP,IAAI,CAAC;EACrCvB,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACE,QAAQ,CAACP,KAAK,CAAC;EACrCxB,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACG,WAAW,CAACP,IAAI,CAAC;EACvCzB,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACI,WAAW,CAACP,QAAQ,CAAC;EAC3C1B,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACK,iBAAiB,CAACP,OAAO,CAACQ,IAAI,CAAC;EACrDnC,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACO,0BAA0B,CAACT,OAAO,CAACU,QAAQ,CAAC;EAClErC,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACS,UAAU,CAACX,OAAO,CAACY,OAAO,CAAC;EACjDvC,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACW,QAAQ,CAACb,OAAO,CAACc,KAAK,CAAC;EAC7CzC,KAAK,CAAC4B,OAAO,CAACC,OAAO,CAACa,YAAY,CAACf,OAAO,CAACgB,SAAS,CAAC;EAErD,MAAMC,YAAY,GAAGjB,OAAO,CAACkB,MAAM,IAAI,KAAK;EAE5C,IAAIlB,OAAO,CAACmB,EAAE,KAAK,MAAMxC,SAAS,EAAE,CAAC,EAAE;IACrC,MAAMH,aAAa,CAACwB,OAAO,CAACmB,EAAE,EAAEF,YAAY,CAAC;EAC/C,CAAC,MAAM,IAAIjB,OAAO,CAACoB,GAAG,KAAK,MAAMzC,SAAS,EAAE,CAAC,EAAE;IAC7C,MAAMF,cAAc,CAACwC,YAAY,CAAC;EACpC,CAAC,MAAM;IACLrC,OAAO,CAACyC,IAAI,EAAE;EAChB;AACF,CAAC,CACF;AAEHzC,OAAO,CAAC0C,KAAK,EAAE"}
@@ -7,7 +7,7 @@ const {
7
7
  getTokens
8
8
  } = Authenticate;
9
9
  const program = new Command('frodo service export');
10
- program.description('Export AM services.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-i, --service-id <service-id>', 'Service id. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file <file>', 'Name of the export file.')).addOption(new Option('-a, --all', 'Export all services to a single file.')).addOption(new Option('-A, --all-separate', 'Export all services to separate files (*.service.json) in the current directory. Ignored with -a.')).action(async (host, realm, user, password, options) => {
10
+ program.description('Export AM services.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-i, --service-id <service-id>', 'Service id. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file <file>', 'Name of the export file.')).addOption(new Option('-a, --all', 'Export all services to a single file.')).addOption(new Option('-A, --all-separate', 'Export all services to separate files (*.service.json) in the current directory. Ignored with -a.')).addOption(new Option('-g, --global', 'List global services.')).action(async (host, realm, user, password, options) => {
11
11
  state.default.session.setTenant(host);
12
12
  state.default.session.setRealm(realm);
13
13
  state.default.session.setUsername(user);
@@ -17,20 +17,22 @@ program.description('Export AM services.').helpOption('-h, --help', 'Help').show
17
17
  state.default.session.setVerbose(options.verbose);
18
18
  state.default.session.setDebug(options.debug);
19
19
  state.default.session.setCurlirize(options.curlirize);
20
+ const globalConfig = options.global ?? false;
21
+
20
22
  // export by name
21
23
  if (options.serviceId && (await getTokens())) {
22
24
  verboseMessage('Exporting service...');
23
- await exportServiceToFile(options.serviceId, options.file);
25
+ await exportServiceToFile(options.serviceId, options.file, globalConfig);
24
26
  }
25
27
  // -a / --all
26
28
  else if (options.all && (await getTokens())) {
27
29
  verboseMessage('Exporting all services to a single file...');
28
- await exportServicesToFile(options.file);
30
+ await exportServicesToFile(options.file, globalConfig);
29
31
  }
30
32
  // -A / --all-separate
31
33
  else if (options.allSeparate && (await getTokens())) {
32
34
  verboseMessage('Exporting all services to separate files...');
33
- await exportServicesToFiles();
35
+ await exportServicesToFiles(globalConfig);
34
36
  }
35
37
  // unrecognized combination of options or no options
36
38
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"service-export.js","names":["Authenticate","state","Command","Option","exportServicesToFile","exportServicesToFiles","exportServiceToFile","printMessage","verboseMessage","common","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","serviceId","file","all","allSeparate","help","parse"],"sources":["cli/service/service-export.ts"],"sourcesContent":["import { Authenticate, state } from '@rockcarver/frodo-lib';\nimport { Command, Option } from 'commander';\nimport {\n exportServicesToFile,\n exportServicesToFiles,\n exportServiceToFile,\n} from '../../ops/ServiceOps.js';\nimport { printMessage, verboseMessage } from '../../utils/Console.js';\nimport * as common from '../cmd_common.js';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo service export');\n\ninterface ServiceExportOptions {\n file?: string;\n all?: boolean;\n serviceId?: string;\n allSeparate?: boolean;\n type?: string;\n insecure?: boolean;\n verbose?: boolean;\n debug?: boolean;\n curlirize?: boolean;\n}\n\nprogram\n .description('Export AM services.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option(\n '-i, --service-id <service-id>',\n 'Service id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(new Option('-a, --all', 'Export all services to a single file.'))\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all services to separate files (*.service.json) in the current directory. Ignored with -a.'\n )\n )\n .action(\n async (\n host: string,\n realm: string,\n user: string,\n password: string,\n options: ServiceExportOptions\n ) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n // export by name\n if (options.serviceId && (await getTokens())) {\n verboseMessage('Exporting service...');\n await exportServiceToFile(options.serviceId, options.file);\n }\n // -a / --all\n else if (options.all && (await getTokens())) {\n verboseMessage('Exporting all services to a single file...');\n await exportServicesToFile(options.file);\n }\n // -A / --all-separate\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Exporting all services to separate files...');\n await exportServicesToFiles();\n }\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
1
+ {"version":3,"file":"service-export.js","names":["Authenticate","state","Command","Option","exportServicesToFile","exportServicesToFiles","exportServiceToFile","printMessage","verboseMessage","common","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","globalConfig","global","serviceId","file","all","allSeparate","help","parse"],"sources":["cli/service/service-export.ts"],"sourcesContent":["import { Authenticate, state } from '@rockcarver/frodo-lib';\nimport { Command, Option } from 'commander';\nimport {\n exportServicesToFile,\n exportServicesToFiles,\n exportServiceToFile,\n} from '../../ops/ServiceOps.js';\nimport { printMessage, verboseMessage } from '../../utils/Console.js';\nimport * as common from '../cmd_common.js';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo service export');\n\ninterface ServiceExportOptions {\n file?: string;\n all?: boolean;\n serviceId?: string;\n allSeparate?: boolean;\n type?: string;\n insecure?: boolean;\n verbose?: boolean;\n debug?: boolean;\n curlirize?: boolean;\n global?: boolean;\n}\n\nprogram\n .description('Export AM services.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option(\n '-i, --service-id <service-id>',\n 'Service id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(new Option('-f, --file <file>', 'Name of the export file.'))\n .addOption(new Option('-a, --all', 'Export all services to a single file.'))\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Export all services to separate files (*.service.json) in the current directory. Ignored with -a.'\n )\n )\n .addOption(new Option('-g, --global', 'List global services.'))\n .action(\n async (\n host: string,\n realm: string,\n user: string,\n password: string,\n options: ServiceExportOptions\n ) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n\n const globalConfig = options.global ?? false;\n\n // export by name\n if (options.serviceId && (await getTokens())) {\n verboseMessage('Exporting service...');\n await exportServiceToFile(\n options.serviceId,\n options.file,\n globalConfig\n );\n }\n // -a / --all\n else if (options.all && (await getTokens())) {\n verboseMessage('Exporting all services to a single file...');\n await exportServicesToFile(options.file, globalConfig);\n }\n // -A / --all-separate\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Exporting all services to separate files...');\n await exportServicesToFiles(globalConfig);\n }\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
@@ -7,7 +7,7 @@ const {
7
7
  getTokens
8
8
  } = Authenticate;
9
9
  const program = new Command('frodo service import');
10
- program.description('Import AM services.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-i, --service-id <service-id>', 'Service id. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file <file>', 'Name of the file to import SAML Entity(s) from. Ignored with -A.')).addOption(new Option('-a, --all', 'Import all services from a single file.')).addOption(new Option('-C, --clean', 'Remove existing service(s) before importing.')).addOption(new Option('-A, --all-separate', 'Import all services from separate files <id>.service.json.')).addOption(new Option('-D, --directory <directory>', 'Working directory.')).action(async (host, realm, user, password, options) => {
10
+ program.description('Import AM services.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-i, --service-id <service-id>', 'Service id. If specified, -a and -A are ignored.')).addOption(new Option('-f, --file <file>', 'Name of the file to import SAML Entity(s) from. Ignored with -A.')).addOption(new Option('-a, --all', 'Import all services from a single file.')).addOption(new Option('-C, --clean', 'Remove existing service(s) before importing.')).addOption(new Option('-A, --all-separate', 'Import all services from separate files <id>.service.json.')).addOption(new Option('-D, --directory <directory>', 'Working directory.')).addOption(new Option('-g, --global', 'List global services.')).action(async (host, realm, user, password, options) => {
11
11
  state.default.session.setTenant(host);
12
12
  state.default.session.setRealm(realm);
13
13
  state.default.session.setUsername(user);
@@ -19,26 +19,27 @@ program.description('Import AM services.').helpOption('-h, --help', 'Help').show
19
19
  state.default.session.setCurlirize(options.curlirize);
20
20
  state.default.session.setDirectory(options.directory || '.');
21
21
  const clean = options.clean ?? false;
22
+ const globalConfig = options.global ?? false;
22
23
 
23
24
  // import by id
24
25
  if (options.serviceId && options.file && (await getTokens())) {
25
26
  verboseMessage('Importing service...');
26
- await importServiceFromFile(options.serviceId, options.file, clean);
27
+ await importServiceFromFile(options.serviceId, options.file, clean, globalConfig);
27
28
  }
28
29
  // -a / --all
29
30
  else if (options.all && options.file && (await getTokens())) {
30
31
  verboseMessage('Importing all services from a single file...');
31
- await importServicesFromFile(options.file, clean);
32
+ await importServicesFromFile(options.file, clean, globalConfig);
32
33
  }
33
34
  // -A / --all-separate
34
35
  else if (options.allSeparate && (await getTokens())) {
35
36
  verboseMessage('Importing all services from separate files...');
36
- await importServicesFromFiles(clean);
37
+ await importServicesFromFiles(clean, globalConfig);
37
38
  }
38
39
  // import file
39
40
  else if (options.file && (await getTokens())) {
40
41
  verboseMessage('Importing service...');
41
- await importFirstServiceFromFile(options.file, clean);
42
+ await importFirstServiceFromFile(options.file, clean, globalConfig);
42
43
  }
43
44
  // unrecognized combination of options or no options
44
45
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"service-import.js","names":["Authenticate","state","Command","Option","importFirstServiceFromFile","importServiceFromFile","importServicesFromFile","importServicesFromFiles","printMessage","verboseMessage","common","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","setDirectory","directory","clean","serviceId","file","all","allSeparate","help","parse"],"sources":["cli/service/service-import.ts"],"sourcesContent":["import { Authenticate, state } from '@rockcarver/frodo-lib';\nimport { Command, Option } from 'commander';\nimport {\n importFirstServiceFromFile,\n importServiceFromFile,\n importServicesFromFile,\n importServicesFromFiles,\n} from '../../ops/ServiceOps.js';\nimport { printMessage, verboseMessage } from '../../utils/Console.js';\nimport * as common from '../cmd_common.js';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo service import');\n\ninterface ServiceImportOptions {\n file?: string;\n all?: boolean;\n serviceId?: string;\n allSeparate?: boolean;\n type?: string;\n insecure?: boolean;\n clean?: boolean;\n directory?: string;\n verbose?: boolean;\n debug?: boolean;\n curlirize?: boolean;\n}\n\nprogram\n .description('Import AM services.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option(\n '-i, --service-id <service-id>',\n 'Service id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '-f, --file <file>',\n 'Name of the file to import SAML Entity(s) from. Ignored with -A.'\n )\n )\n .addOption(new Option('-a, --all', 'Import all services from a single file.'))\n .addOption(\n new Option('-C, --clean', 'Remove existing service(s) before importing.')\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Import all services from separate files <id>.service.json.'\n )\n )\n .addOption(new Option('-D, --directory <directory>', 'Working directory.'))\n .action(\n async (\n host: string,\n realm: string,\n user: string,\n password: string,\n options: ServiceImportOptions\n ) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n state.default.session.setDirectory(options.directory || '.');\n\n const clean = options.clean ?? false;\n\n // import by id\n if (options.serviceId && options.file && (await getTokens())) {\n verboseMessage('Importing service...');\n await importServiceFromFile(options.serviceId, options.file, clean);\n }\n // -a / --all\n else if (options.all && options.file && (await getTokens())) {\n verboseMessage('Importing all services from a single file...');\n await importServicesFromFile(options.file, clean);\n }\n // -A / --all-separate\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Importing all services from separate files...');\n await importServicesFromFiles(clean);\n }\n // import file\n else if (options.file && (await getTokens())) {\n verboseMessage('Importing service...');\n await importFirstServiceFromFile(options.file, clean);\n }\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
1
+ {"version":3,"file":"service-import.js","names":["Authenticate","state","Command","Option","importFirstServiceFromFile","importServiceFromFile","importServicesFromFile","importServicesFromFiles","printMessage","verboseMessage","common","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","action","host","realm","user","password","options","default","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","setDirectory","directory","clean","globalConfig","global","serviceId","file","all","allSeparate","help","parse"],"sources":["cli/service/service-import.ts"],"sourcesContent":["import { Authenticate, state } from '@rockcarver/frodo-lib';\nimport { Command, Option } from 'commander';\nimport {\n importFirstServiceFromFile,\n importServiceFromFile,\n importServicesFromFile,\n importServicesFromFiles,\n} from '../../ops/ServiceOps.js';\nimport { printMessage, verboseMessage } from '../../utils/Console.js';\nimport * as common from '../cmd_common.js';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo service import');\n\ninterface ServiceImportOptions {\n file?: string;\n all?: boolean;\n serviceId?: string;\n allSeparate?: boolean;\n type?: string;\n insecure?: boolean;\n clean?: boolean;\n directory?: string;\n verbose?: boolean;\n debug?: boolean;\n curlirize?: boolean;\n global?: boolean;\n}\n\nprogram\n .description('Import AM services.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option(\n '-i, --service-id <service-id>',\n 'Service id. If specified, -a and -A are ignored.'\n )\n )\n .addOption(\n new Option(\n '-f, --file <file>',\n 'Name of the file to import SAML Entity(s) from. Ignored with -A.'\n )\n )\n .addOption(new Option('-a, --all', 'Import all services from a single file.'))\n .addOption(\n new Option('-C, --clean', 'Remove existing service(s) before importing.')\n )\n .addOption(\n new Option(\n '-A, --all-separate',\n 'Import all services from separate files <id>.service.json.'\n )\n )\n .addOption(new Option('-D, --directory <directory>', 'Working directory.'))\n .addOption(new Option('-g, --global', 'List global services.'))\n .action(\n async (\n host: string,\n realm: string,\n user: string,\n password: string,\n options: ServiceImportOptions\n ) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n state.default.session.setDirectory(options.directory || '.');\n\n const clean = options.clean ?? false;\n const globalConfig = options.global ?? false;\n\n // import by id\n if (options.serviceId && options.file && (await getTokens())) {\n verboseMessage('Importing service...');\n await importServiceFromFile(\n options.serviceId,\n options.file,\n clean,\n globalConfig\n );\n }\n // -a / --all\n else if (options.all && options.file && (await getTokens())) {\n verboseMessage('Importing all services from a single file...');\n await importServicesFromFile(options.file, clean, globalConfig);\n }\n // -A / --all-separate\n else if (options.allSeparate && (await getTokens())) {\n verboseMessage('Importing all services from separate files...');\n await importServicesFromFiles(clean, globalConfig);\n }\n // import file\n else if (options.file && (await getTokens())) {\n verboseMessage('Importing service...');\n await importFirstServiceFromFile(options.file, clean, globalConfig);\n }\n // unrecognized combination of options or no options\n else {\n printMessage(\n 'Unrecognized combination of options or no options...',\n 'error'\n );\n program.help();\n }\n }\n // end command logic inside action handler\n );\n\nprogram.parse();\n"],"mappings":"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"}
@@ -7,7 +7,7 @@ const {
7
7
  getTokens
8
8
  } = Authenticate;
9
9
  const program = new Command('frodo service list');
10
- program.description('List AM services.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-l, --long', 'Long with all fields.').default(false, 'false')).action(async (host, realm, user, password, options) => {
10
+ program.description('List AM services.').helpOption('-h, --help', 'Help').showHelpAfterError().addArgument(common.hostArgumentM).addArgument(common.realmArgument).addArgument(common.userArgument).addArgument(common.passwordArgument).addOption(common.deploymentOption).addOption(common.insecureOption).addOption(common.verboseOption).addOption(common.debugOption).addOption(common.curlirizeOption).addOption(new Option('-l, --long', 'Long with all fields.').default(false, 'false')).addOption(new Option('-g, --global', 'List global services.')).action(async (host, realm, user, password, options) => {
11
11
  state.default.session.setTenant(host);
12
12
  state.default.session.setRealm(realm);
13
13
  state.default.session.setUsername(user);
@@ -19,7 +19,7 @@ program.description('List AM services.').helpOption('-h, --help', 'Help').showHe
19
19
  state.default.session.setCurlirize(options.curlirize);
20
20
  if (await getTokens()) {
21
21
  verboseMessage(`Listing all AM services for realm: ${realm}`);
22
- await listServices(options.long);
22
+ await listServices(options.long, options.global);
23
23
  }
24
24
  });
25
25
  program.parse();
@@ -1 +1 @@
1
- {"version":3,"file":"service-list.js","names":["Authenticate","state","Command","Option","listServices","verboseMessage","common","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","default","action","host","realm","user","password","options","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","long","parse"],"sources":["cli/service/service-list.ts"],"sourcesContent":["import { Authenticate, state } from '@rockcarver/frodo-lib';\nimport { Command, Option } from 'commander';\nimport { listServices } from '../../ops/ServiceOps.js';\nimport { verboseMessage } from '../../utils/Console.js';\nimport * as common from '../cmd_common.js';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo service list');\n\nprogram\n .description('List AM services.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option('-l, --long', 'Long with all fields.').default(false, 'false')\n )\n .action(async (host, realm, user, password, options) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n if (await getTokens()) {\n verboseMessage(`Listing all AM services for realm: ${realm}`);\n await listServices(options.long);\n }\n });\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,EAAEC,KAAK,QAAQ,uBAAuB;AAC3D,SAASC,OAAO,EAAEC,MAAM,QAAQ,WAAW;AAC3C,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,cAAc,QAAQ,wBAAwB;AACvD,OAAO,KAAKC,MAAM,MAAM,kBAAkB;AAE1C,MAAM;EAAEC;AAAU,CAAC,GAAGP,YAAY;AAElC,MAAMQ,OAAO,GAAG,IAAIN,OAAO,CAAC,oBAAoB,CAAC;AAEjDM,OAAO,CACJC,WAAW,CAAC,mBAAmB,CAAC,CAChCC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAChCC,kBAAkB,EAAE,CACpBC,WAAW,CAACN,MAAM,CAACO,aAAa,CAAC,CACjCD,WAAW,CAACN,MAAM,CAACQ,aAAa,CAAC,CACjCF,WAAW,CAACN,MAAM,CAACS,YAAY,CAAC,CAChCH,WAAW,CAACN,MAAM,CAACU,gBAAgB,CAAC,CACpCC,SAAS,CAACX,MAAM,CAACY,gBAAgB,CAAC,CAClCD,SAAS,CAACX,MAAM,CAACa,cAAc,CAAC,CAChCF,SAAS,CAACX,MAAM,CAACc,aAAa,CAAC,CAC/BH,SAAS,CAACX,MAAM,CAACe,WAAW,CAAC,CAC7BJ,SAAS,CAACX,MAAM,CAACgB,eAAe,CAAC,CACjCL,SAAS,CACR,IAAId,MAAM,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAACoB,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAC1E,CACAC,MAAM,CAAC,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,KAAK;EACtD5B,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACC,SAAS,CAACN,IAAI,CAAC;EACrCxB,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACE,QAAQ,CAACN,KAAK,CAAC;EACrCzB,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACG,WAAW,CAACN,IAAI,CAAC;EACvC1B,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACI,WAAW,CAACN,QAAQ,CAAC;EAC3C3B,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACK,iBAAiB,CAACN,OAAO,CAACO,IAAI,CAAC;EACrDnC,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACO,0BAA0B,CAACR,OAAO,CAACS,QAAQ,CAAC;EAClErC,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACS,UAAU,CAACV,OAAO,CAACW,OAAO,CAAC;EACjDvC,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACW,QAAQ,CAACZ,OAAO,CAACa,KAAK,CAAC;EAC7CzC,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACa,YAAY,CAACd,OAAO,CAACe,SAAS,CAAC;EACrD,IAAI,MAAMrC,SAAS,EAAE,EAAE;IACrBF,cAAc,CAAE,sCAAqCqB,KAAM,EAAC,CAAC;IAC7D,MAAMtB,YAAY,CAACyB,OAAO,CAACgB,IAAI,CAAC;EAClC;AACF,CAAC,CAAC;AAEJrC,OAAO,CAACsC,KAAK,EAAE"}
1
+ {"version":3,"file":"service-list.js","names":["Authenticate","state","Command","Option","listServices","verboseMessage","common","getTokens","program","description","helpOption","showHelpAfterError","addArgument","hostArgumentM","realmArgument","userArgument","passwordArgument","addOption","deploymentOption","insecureOption","verboseOption","debugOption","curlirizeOption","default","action","host","realm","user","password","options","session","setTenant","setRealm","setUsername","setPassword","setDeploymentType","type","setAllowInsecureConnection","insecure","setVerbose","verbose","setDebug","debug","setCurlirize","curlirize","long","global","parse"],"sources":["cli/service/service-list.ts"],"sourcesContent":["import { Authenticate, state } from '@rockcarver/frodo-lib';\nimport { Command, Option } from 'commander';\nimport { listServices } from '../../ops/ServiceOps.js';\nimport { verboseMessage } from '../../utils/Console.js';\nimport * as common from '../cmd_common.js';\n\nconst { getTokens } = Authenticate;\n\nconst program = new Command('frodo service list');\n\nprogram\n .description('List AM services.')\n .helpOption('-h, --help', 'Help')\n .showHelpAfterError()\n .addArgument(common.hostArgumentM)\n .addArgument(common.realmArgument)\n .addArgument(common.userArgument)\n .addArgument(common.passwordArgument)\n .addOption(common.deploymentOption)\n .addOption(common.insecureOption)\n .addOption(common.verboseOption)\n .addOption(common.debugOption)\n .addOption(common.curlirizeOption)\n .addOption(\n new Option('-l, --long', 'Long with all fields.').default(false, 'false')\n )\n .addOption(new Option('-g, --global', 'List global services.'))\n .action(async (host, realm, user, password, options) => {\n state.default.session.setTenant(host);\n state.default.session.setRealm(realm);\n state.default.session.setUsername(user);\n state.default.session.setPassword(password);\n state.default.session.setDeploymentType(options.type);\n state.default.session.setAllowInsecureConnection(options.insecure);\n state.default.session.setVerbose(options.verbose);\n state.default.session.setDebug(options.debug);\n state.default.session.setCurlirize(options.curlirize);\n if (await getTokens()) {\n verboseMessage(`Listing all AM services for realm: ${realm}`);\n await listServices(options.long, options.global);\n }\n });\n\nprogram.parse();\n"],"mappings":"AAAA,SAASA,YAAY,EAAEC,KAAK,QAAQ,uBAAuB;AAC3D,SAASC,OAAO,EAAEC,MAAM,QAAQ,WAAW;AAC3C,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,cAAc,QAAQ,wBAAwB;AACvD,OAAO,KAAKC,MAAM,MAAM,kBAAkB;AAE1C,MAAM;EAAEC;AAAU,CAAC,GAAGP,YAAY;AAElC,MAAMQ,OAAO,GAAG,IAAIN,OAAO,CAAC,oBAAoB,CAAC;AAEjDM,OAAO,CACJC,WAAW,CAAC,mBAAmB,CAAC,CAChCC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,CAChCC,kBAAkB,EAAE,CACpBC,WAAW,CAACN,MAAM,CAACO,aAAa,CAAC,CACjCD,WAAW,CAACN,MAAM,CAACQ,aAAa,CAAC,CACjCF,WAAW,CAACN,MAAM,CAACS,YAAY,CAAC,CAChCH,WAAW,CAACN,MAAM,CAACU,gBAAgB,CAAC,CACpCC,SAAS,CAACX,MAAM,CAACY,gBAAgB,CAAC,CAClCD,SAAS,CAACX,MAAM,CAACa,cAAc,CAAC,CAChCF,SAAS,CAACX,MAAM,CAACc,aAAa,CAAC,CAC/BH,SAAS,CAACX,MAAM,CAACe,WAAW,CAAC,CAC7BJ,SAAS,CAACX,MAAM,CAACgB,eAAe,CAAC,CACjCL,SAAS,CACR,IAAId,MAAM,CAAC,YAAY,EAAE,uBAAuB,CAAC,CAACoB,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAC1E,CACAN,SAAS,CAAC,IAAId,MAAM,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC,CAC9DqB,MAAM,CAAC,OAAOC,IAAI,EAAEC,KAAK,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,OAAO,KAAK;EACtD5B,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACC,SAAS,CAACN,IAAI,CAAC;EACrCxB,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACE,QAAQ,CAACN,KAAK,CAAC;EACrCzB,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACG,WAAW,CAACN,IAAI,CAAC;EACvC1B,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACI,WAAW,CAACN,QAAQ,CAAC;EAC3C3B,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACK,iBAAiB,CAACN,OAAO,CAACO,IAAI,CAAC;EACrDnC,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACO,0BAA0B,CAACR,OAAO,CAACS,QAAQ,CAAC;EAClErC,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACS,UAAU,CAACV,OAAO,CAACW,OAAO,CAAC;EACjDvC,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACW,QAAQ,CAACZ,OAAO,CAACa,KAAK,CAAC;EAC7CzC,KAAK,CAACsB,OAAO,CAACO,OAAO,CAACa,YAAY,CAACd,OAAO,CAACe,SAAS,CAAC;EACrD,IAAI,MAAMrC,SAAS,EAAE,EAAE;IACrBF,cAAc,CAAE,sCAAqCqB,KAAM,EAAC,CAAC;IAC7D,MAAMtB,YAAY,CAACyB,OAAO,CAACgB,IAAI,EAAEhB,OAAO,CAACiB,MAAM,CAAC;EAClD;AACF,CAAC,CAAC;AAEJtC,OAAO,CAACuC,KAAK,EAAE"}
@@ -0,0 +1,30 @@
1
+ import fs from 'fs';
2
+ import { Authenticate, state } from '@rockcarver/frodo-lib';
3
+ import { failSpinner, showSpinner, succeedSpinner } from '../utils/Console';
4
+ const {
5
+ getAccessTokenForServiceAccount
6
+ } = Authenticate;
7
+ export async function addExistingServiceAccount(serviceAccountId, privateKeyFile, validate) {
8
+ try {
9
+ const data = fs.readFileSync(privateKeyFile);
10
+ const jwk = JSON.parse(data.toString());
11
+ if (validate) {
12
+ showSpinner(`Validating service account ${serviceAccountId}...`);
13
+ const token = await getAccessTokenForServiceAccount(serviceAccountId, jwk);
14
+ if (token === null) {
15
+ failSpinner(`Failed to validate service account ${serviceAccountId}.`);
16
+ return false;
17
+ } else {
18
+ succeedSpinner(`Successfully validated service account ${serviceAccountId}.`);
19
+ }
20
+ }
21
+ state.default.session.setServiceAccountId(serviceAccountId);
22
+ state.default.session.setServiceAccountJwk(jwk);
23
+ return true;
24
+ } catch (err) {
25
+ failSpinner(`Failed to validate service account ${serviceAccountId}: ${err}.`);
26
+ return false;
27
+ }
28
+ return false;
29
+ }
30
+ //# sourceMappingURL=ConnectionProfileOps.js.map
@@ -0,0 +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 return false;\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;IACD,OAAO,KAAK;EACd;EACA,OAAO,KAAK;AACd"}