From dcc9bc8255a27a9ac6f1516f009ca8930bf5182e Mon Sep 17 00:00:00 2001 From: Christian Nuss Date: Wed, 8 Dec 2021 11:35:49 +0200 Subject: [PATCH] mvp --- .eslintrc.json | 8 +- .openapis | 4 +- .scaffoldly/live/services.json | 4 +- .vscode/settings.json | 3 + cli/index.ts | 6 +- dist/cli/index.d.ts | 3 + dist/cli/index.d.ts.map | 1 + dist/cli/index.js | 25 + dist/cli/index.js.map | 1 + dist/src/command.d.ts | 9 + dist/src/command.d.ts.map | 1 + dist/src/command.js | 105 +++ dist/src/command.js.map | 1 + dist/src/commands/assume.d.ts | 10 + dist/src/commands/assume.d.ts.map | 1 + dist/src/commands/assume.js | 100 +++ dist/src/commands/assume.js.map | 1 + dist/src/commands/github-login.d.ts | 15 + dist/src/commands/github-login.d.ts.map | 1 + dist/src/commands/github-login.js | 62 ++ dist/src/commands/github-login.js.map | 1 + dist/src/commands/index.d.ts | 1 + dist/src/commands/index.d.ts.map | 1 + dist/src/commands/index.js | 2 + dist/src/commands/index.js.map | 1 + dist/src/commands/list-roles.d.ts | 7 + dist/src/commands/list-roles.d.ts.map | 1 + dist/src/commands/list-roles.js | 27 + dist/src/commands/list-roles.js.map | 1 + dist/src/commands/login.d.ts | 5 + dist/src/commands/login.d.ts.map | 1 + dist/src/commands/login.js | 28 + dist/src/commands/login.js.map | 1 + dist/src/constants.d.ts | 1 + dist/src/constants.d.ts.map | 1 + dist/src/constants.js | 2 + dist/src/constants.js.map | 1 + dist/src/index.d.ts | 2 + dist/src/index.d.ts.map | 1 + dist/src/index.js | 8 + dist/src/index.js.map | 1 + dist/src/messages.d.ts | 6 + dist/src/messages.d.ts.map | 1 + dist/src/messages.js | 13 + dist/src/messages.js.map | 1 + dist/src/stores/scms.d.ts | 14 + dist/src/stores/scms.d.ts.map | 1 + dist/src/stores/scms.js | 60 ++ dist/src/stores/scms.js.map | 1 + dist/tsconfig.tsbuildinfo | 1 + package.json | 7 +- src/command.ts | 97 ++- src/commands/assume.ts | 119 ++++ src/commands/github-login.ts | 111 ++++ src/commands/index.ts | 0 src/commands/list-roles.ts | 28 + src/messages.ts | 12 + src/stores/scms.ts | 69 ++ tsconfig.json | 2 +- yarn.lock | 829 +++++++++++++++++++++++- 60 files changed, 1800 insertions(+), 27 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 dist/cli/index.d.ts create mode 100644 dist/cli/index.d.ts.map create mode 100644 dist/cli/index.js create mode 100644 dist/cli/index.js.map create mode 100644 dist/src/command.d.ts create mode 100644 dist/src/command.d.ts.map create mode 100644 dist/src/command.js create mode 100644 dist/src/command.js.map create mode 100644 dist/src/commands/assume.d.ts create mode 100644 dist/src/commands/assume.d.ts.map create mode 100644 dist/src/commands/assume.js create mode 100644 dist/src/commands/assume.js.map create mode 100644 dist/src/commands/github-login.d.ts create mode 100644 dist/src/commands/github-login.d.ts.map create mode 100644 dist/src/commands/github-login.js create mode 100644 dist/src/commands/github-login.js.map create mode 100644 dist/src/commands/index.d.ts create mode 100644 dist/src/commands/index.d.ts.map create mode 100644 dist/src/commands/index.js create mode 100644 dist/src/commands/index.js.map create mode 100644 dist/src/commands/list-roles.d.ts create mode 100644 dist/src/commands/list-roles.d.ts.map create mode 100644 dist/src/commands/list-roles.js create mode 100644 dist/src/commands/list-roles.js.map create mode 100644 dist/src/commands/login.d.ts create mode 100644 dist/src/commands/login.d.ts.map create mode 100644 dist/src/commands/login.js create mode 100644 dist/src/commands/login.js.map create mode 100644 dist/src/constants.d.ts create mode 100644 dist/src/constants.d.ts.map create mode 100644 dist/src/constants.js create mode 100644 dist/src/constants.js.map create mode 100644 dist/src/index.d.ts create mode 100644 dist/src/index.d.ts.map create mode 100644 dist/src/index.js create mode 100644 dist/src/index.js.map create mode 100644 dist/src/messages.d.ts create mode 100644 dist/src/messages.d.ts.map create mode 100644 dist/src/messages.js create mode 100644 dist/src/messages.js.map create mode 100644 dist/src/stores/scms.d.ts create mode 100644 dist/src/stores/scms.d.ts.map create mode 100644 dist/src/stores/scms.js create mode 100644 dist/src/stores/scms.js.map create mode 100644 dist/tsconfig.tsbuildinfo create mode 100644 src/commands/assume.ts create mode 100644 src/commands/github-login.ts create mode 100644 src/commands/index.ts create mode 100644 src/commands/list-roles.ts create mode 100644 src/messages.ts create mode 100644 src/stores/scms.ts diff --git a/.eslintrc.json b/.eslintrc.json index 82508fc..496dae9 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -16,7 +16,11 @@ "plugin:import/recommended" ], "rules": { - "no-console": "error" + "no-console": "off" }, - "ignorePatterns": "dist/**/*" + "ignorePatterns": [ + // Auto-generated files + "dist/**/*", + "api/**/*" + ] } diff --git a/.openapis b/.openapis index 8a07a27..71115c3 100644 --- a/.openapis +++ b/.openapis @@ -6,7 +6,7 @@ # This file is *safe* to add to source control and will increase the speed of builds --- - serviceName: auth-sls-rest-api - version: 1.0.0-68 + version: 1.0.0 - serviceName: github-sls-rest-api - version: 1.0.0-45 + version: 1.0.2-13 diff --git a/.scaffoldly/live/services.json b/.scaffoldly/live/services.json index cd72eab..4d57eb4 100644 --- a/.scaffoldly/live/services.json +++ b/.scaffoldly/live/services.json @@ -1,11 +1,11 @@ { "auth-sls-rest-api": { - "base-url": "https://api.saml.to/auth", + "base-url": "https://api-nonlive.saml.to/auth", "service-name": "auth-sls-rest-api", "service-slug": "auth" }, "github-sls-rest-api": { - "base-url": "https://api.saml.to/github", + "base-url": "https://api-nonlive.saml.to/github", "service-name": "github-sls-rest-api", "service-slug": "github" } diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..ad92582 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.formatOnSave": true +} diff --git a/cli/index.ts b/cli/index.ts index cef83a8..8162b13 100644 --- a/cli/index.ts +++ b/cli/index.ts @@ -1,17 +1,17 @@ #!/usr/bin/env node import log from 'loglevel'; -import { Commamd } from '../src/command'; +import { Command } from '../src/command'; (async () => { try { log.debug('Starting CLI'); - const command = new Commamd(); + const command = new Command('saml-to'); await command.run(process.argv); } catch (e) { if (e instanceof Error) { // eslint-disable-next-line no-console - console.error(`Exror: ${e.message}`); + console.error(`Error: ${e.message}`, e); process.exit(-1); } throw e; diff --git a/dist/cli/index.d.ts b/dist/cli/index.d.ts new file mode 100644 index 0000000..dc1ec89 --- /dev/null +++ b/dist/cli/index.d.ts @@ -0,0 +1,3 @@ +#!/usr/bin/env node +export {}; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/cli/index.d.ts.map b/dist/cli/index.d.ts.map new file mode 100644 index 0000000..d67eb88 --- /dev/null +++ b/dist/cli/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../cli/index.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/cli/index.js b/dist/cli/index.js new file mode 100644 index 0000000..f72b301 --- /dev/null +++ b/dist/cli/index.js @@ -0,0 +1,25 @@ +#!/usr/bin/env node +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const loglevel_1 = __importDefault(require("loglevel")); +const command_1 = require("../src/command"); +(async () => { + try { + loglevel_1.default.debug('Starting CLI'); + const command = new command_1.Command('saml-to'); + await command.run(process.argv); + } + catch (e) { + if (e instanceof Error) { + // eslint-disable-next-line no-console + console.error(`Error: ${e.message}`, e); + process.exit(-1); + } + throw e; + } + process.exit(0); +})(); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/cli/index.js.map b/dist/cli/index.js.map new file mode 100644 index 0000000..ff870f5 --- /dev/null +++ b/dist/cli/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../cli/index.ts"],"names":[],"mappings":";;;;;;AAEA,wDAA2B;AAC3B,4CAAyC;AAEzC,CAAC,KAAK,IAAI,EAAE;IACV,IAAI;QACF,kBAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACjC;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,CAAC,YAAY,KAAK,EAAE;YACtB,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SAClB;QACD,MAAM,CAAC,CAAC;KACT;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,EAAE,CAAC"} \ No newline at end of file diff --git a/dist/src/command.d.ts b/dist/src/command.d.ts new file mode 100644 index 0000000..4cfbb96 --- /dev/null +++ b/dist/src/command.d.ts @@ -0,0 +1,9 @@ +export declare class Command { + private name; + private listRoles; + private githubLogin; + private assume; + constructor(name: string); + run(argv: string[]): Promise; +} +//# sourceMappingURL=command.d.ts.map \ No newline at end of file diff --git a/dist/src/command.d.ts.map b/dist/src/command.d.ts.map new file mode 100644 index 0000000..e1c6903 --- /dev/null +++ b/dist/src/command.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/command.ts"],"names":[],"mappings":"AAYA,qBAAa,OAAO;IAON,OAAO,CAAC,IAAI;IANxB,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO,CAAC,WAAW,CAAc;IAEjC,OAAO,CAAC,MAAM,CAAS;gBAEH,IAAI,EAAE,MAAM;IAMnB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA6EhD"} \ No newline at end of file diff --git a/dist/src/command.js b/dist/src/command.js new file mode 100644 index 0000000..7a1d39c --- /dev/null +++ b/dist/src/command.js @@ -0,0 +1,105 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Command = void 0; +/* eslint-disable no-console */ +// import yargs from 'yargs'; +const helpers_1 = require("yargs/helpers"); +// import log from 'loglevel'; +const yargs_1 = __importDefault(require("yargs")); +const list_roles_1 = require("./commands/list-roles"); +const axios_1 = __importDefault(require("axios")); +const github_login_1 = require("./commands/github-login"); +const messages_1 = require("./messages"); +const assume_1 = require("./commands/assume"); +class Command { + name; + listRoles; + githubLogin; + assume; + constructor(name) { + this.name = name; + this.githubLogin = new github_login_1.GithubLogin(); + this.listRoles = new list_roles_1.ListRoles(); + this.assume = new assume_1.Assume(); + } + async run(argv) { + await yargs_1.default + .scriptName(this.name) + .command({ + command: 'login [scm]', + describe: 'Generate and locally store a token from the SCM (e.g. GitHub)', + handler: ({ scm }) => { + if (scm === 'github') { + return this.githubLogin.handle(); + } + else { + throw new Error(`Unknown scm provider: ${scm}`); + } + }, + builder: { + scm: { + demand: true, + choices: ['github'], + default: 'github', + }, + }, + }) + .command({ + command: 'list-roles', + describe: 'List available roles for assumption', + handler: () => this.listRoles.handle(), + }) + .command({ + command: 'assume [role]', + describe: 'Assume a role', + handler: ({ role }) => this.assume.handle(role), + builder: { + role: { + demand: true, + type: 'string', + }, + }, + }) + // .command({ + // command: 'generate [moduleType] [moduleNames...]', + // describe: 'Generates a resource', + // handler: (parsed) => console.log('your handler goes here', parsed), + // builder: { + // moduleType: { + // demand: true, + // choices: ['routed', 'stateful'] as const, + // default: 'routed', + // }, + // moduleNames: { + // demand: true, + // array: true, + // }, + // }, + // }) + .help() + .showHelpOnFail(true) + .strict() + .wrap(null) + .fail((_, error) => { + if (axios_1.default.isAxiosError(error)) { + if (error.response && error.response.status === 401) { + console.error(messages_1.NOT_LOGGED_IN); + } + else { + console.error(`API Error: ${(error.response && error.response.data && error.response.data.message) || + error.message}`); + } + } + else { + console.error(`Error: ${error.message}`); + } + process.exit(-1); + }) + .parse((0, helpers_1.hideBin)(argv)); + } +} +exports.Command = Command; +//# sourceMappingURL=command.js.map \ No newline at end of file diff --git a/dist/src/command.js.map b/dist/src/command.js.map new file mode 100644 index 0000000..a9556ff --- /dev/null +++ b/dist/src/command.js.map @@ -0,0 +1 @@ +{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/command.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/src/commands/assume.d.ts b/dist/src/commands/assume.d.ts new file mode 100644 index 0000000..392a73c --- /dev/null +++ b/dist/src/commands/assume.d.ts @@ -0,0 +1,10 @@ +import { Scms } from '../stores/scms'; +export declare class Assume { + scms: Scms; + constructor(); + handle(role: string, web?: boolean, org?: string, repo?: string, provider?: string): Promise; + private assumeTerminal; + private assumeAws; + private outputEnv; +} +//# sourceMappingURL=assume.d.ts.map \ No newline at end of file diff --git a/dist/src/commands/assume.d.ts.map b/dist/src/commands/assume.d.ts.map new file mode 100644 index 0000000..c7774eb --- /dev/null +++ b/dist/src/commands/assume.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"assume.d.ts","sourceRoot":"","sources":["../../../src/commands/assume.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAKtC,qBAAa,MAAM;IACjB,IAAI,EAAE,IAAI,CAAC;;IAML,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,GAAG,UAAQ,EACX,GAAG,CAAC,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;YAqCF,cAAc;YAUd,SAAS;IA0BvB,OAAO,CAAC,SAAS;CAelB"} \ No newline at end of file diff --git a/dist/src/commands/assume.js b/dist/src/commands/assume.js new file mode 100644 index 0000000..0668936 --- /dev/null +++ b/dist/src/commands/assume.js @@ -0,0 +1,100 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Assume = void 0; +const github_sls_rest_api_1 = require("../../api/github-sls-rest-api"); +const messages_1 = require("../messages"); +const scms_1 = require("../stores/scms"); +const axios_1 = __importDefault(require("axios")); +const client_sts_1 = require("@aws-sdk/client-sts"); +const loglevel_1 = __importDefault(require("loglevel")); +class Assume { + scms; + constructor() { + this.scms = new scms_1.Scms(); + } + async handle(role, web = false, org, repo, provider) { + loglevel_1.default.debug(`Assuming ${role} (web: ${web} org: ${org} repo: ${repo} provider: ${provider})`); + const token = this.scms.getGithubToken(); + if (!token) { + throw new Error(messages_1.NOT_LOGGED_IN); + } + const idpApi = new github_sls_rest_api_1.IDPApi(new github_sls_rest_api_1.Configuration({ + accessToken: token, + })); + try { + const { data: response } = await idpApi.assumeRole(role, org, repo, provider); + if (!web) { + await this.assumeTerminal(response); + } + else { + loglevel_1.default.debug(`TODO: Launch web`); + } + } + catch (e) { + if (axios_1.default.isAxiosError(e) && e.response) { + if (e.response.status === 403) { + throw new Error((0, messages_1.ERROR_ASSUMING_ROLE)(role, `Reason: ${e.response.data.message}`)); + } + else if (e.response.status === 409) { + throw new Error((0, messages_1.MULTIPLE_ROLES)(role, `Reason: ${e.response.data.message}`)); + } + else { + throw e; + } + } + throw e; + } + return; + } + async assumeTerminal(samlResponse) { + switch (samlResponse.recipient) { + case 'https://signin.aws.amazon.com/saml': + await this.assumeAws(samlResponse); + break; + default: + throw new Error((0, messages_1.TERMINAL_NOT_SUPPORTED)(samlResponse.provider, samlResponse.recipient)); + } + } + async assumeAws(samlResponse) { + loglevel_1.default.debug(`Assuming AWS role ${samlResponse.role}`); + const sts = new client_sts_1.STS({}); + const opts = samlResponse.sdkOptions; + if (!opts) { + throw new Error('Missing sdk options from saml response'); + } + const response = await sts.assumeRoleWithSAML({ + ...opts, + SAMLAssertion: samlResponse.samlResponse, + }); + if (!response.Credentials || + !response.Credentials.AccessKeyId || + !response.Credentials.SecretAccessKey || + !response.Credentials.SessionToken) { + throw new Error('Missing credentials'); + } + this.outputEnv({ + AWS_ACCESS_KEY_ID: response.Credentials.AccessKeyId, + AWS_SECRET_ACCESS_KEY: response.Credentials.SecretAccessKey, + AWS_SESSION_TOKEN: response.Credentials.SessionToken, + }); + } + outputEnv(vars) { + const { platform } = process; + let prefix = 'export'; + switch (platform) { + case 'win32': + prefix = 'setx'; + break; + default: + break; + } + Object.entries(vars).forEach(([key, value]) => { + console.log(`${prefix} ${key}="${value}"`); + }); + } +} +exports.Assume = Assume; +//# sourceMappingURL=assume.js.map \ No newline at end of file diff --git a/dist/src/commands/assume.js.map b/dist/src/commands/assume.js.map new file mode 100644 index 0000000..a5d6640 --- /dev/null +++ b/dist/src/commands/assume.js.map @@ -0,0 +1 @@ +{"version":3,"file":"assume.js","sourceRoot":"","sources":["../../../src/commands/assume.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/src/commands/github-login.d.ts b/dist/src/commands/github-login.d.ts new file mode 100644 index 0000000..de06923 --- /dev/null +++ b/dist/src/commands/github-login.d.ts @@ -0,0 +1,15 @@ +import { Scms } from '../stores/scms'; +export declare type AccessTokenResponse = { + error?: string; + error_description?: string; + access_token: string; + token_type: string; + scope: string; +}; +export declare class GithubLogin { + scms: Scms; + constructor(); + handle(): Promise; + private getAccessToken; +} +//# sourceMappingURL=github-login.d.ts.map \ No newline at end of file diff --git a/dist/src/commands/github-login.d.ts.map b/dist/src/commands/github-login.d.ts.map new file mode 100644 index 0000000..edb2f08 --- /dev/null +++ b/dist/src/commands/github-login.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"github-login.d.ts","sourceRoot":"","sources":["../../../src/commands/github-login.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAqBtC,oBAAY,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,WAAW;IACtB,IAAI,EAAE,IAAI,CAAC;;IAML,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B7B,OAAO,CAAC,cAAc;CA2CvB"} \ No newline at end of file diff --git a/dist/src/commands/github-login.js b/dist/src/commands/github-login.js new file mode 100644 index 0000000..a7de373 --- /dev/null +++ b/dist/src/commands/github-login.js @@ -0,0 +1,62 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.GithubLogin = void 0; +const auth_sls_rest_api_1 = require("../../api/auth-sls-rest-api"); +const axios_1 = __importDefault(require("axios")); +const moment_1 = __importDefault(require("moment")); +const scms_1 = require("../stores/scms"); +class GithubLogin { + scms; + constructor() { + this.scms = new scms_1.Scms(); + } + async handle() { + const api = new auth_sls_rest_api_1.JwtGithubApi(); + const { data: oauthDetail } = await api.getOauthDetail(); + const { clientId } = oauthDetail; + const response = await axios_1.default.post('https://github.com/login/device/code', { + client_id: clientId, + scope: 'user:email', + }, { headers: { Accept: 'application/json' } }); + const { verification_uri: verificationUri, user_code: userCode } = response.data; + console.log(`Open browser to ${verificationUri} and enter ${userCode}`); + const accessTokenResponse = await this.getAccessToken(clientId, response.data, (0, moment_1.default)().add(response.data.expires_in, 'second')); + const location = this.scms.saveGithubToken(accessTokenResponse.access_token); + console.log(`Saved GitHub credentials to ${location}`); + } + getAccessToken(clientId, deviceCodeResponse, tryUntil) { + console.log('Waiting for code entry...'); + return new Promise((resolve, reject) => { + const now = (0, moment_1.default)(); + if (now.isSameOrAfter(tryUntil)) { + reject(new Error('Access token request has expired. Please re-run the `login` command')); + return; + } + axios_1.default + .post('https://github.com/login/oauth/access_token', { + client_id: clientId, + device_code: deviceCodeResponse.device_code, + grant_type: 'urn:ietf:params:oauth:grant-type:device_code', + }, { headers: { Accept: 'application/json' } }) + .then(({ data: accessTokenResponse }) => { + if (accessTokenResponse.error) { + if (accessTokenResponse.error === 'authorization_pending') { + setTimeout(() => this.getAccessToken(clientId, deviceCodeResponse, tryUntil) + .then((response) => resolve(response)) + .catch((error) => reject(error)), deviceCodeResponse.interval * 1000); + return; + } + reject(new Error(accessTokenResponse.error_description)); + return; + } + resolve(accessTokenResponse); + }) + .catch((error) => reject(error)); + }); + } +} +exports.GithubLogin = GithubLogin; +//# sourceMappingURL=github-login.js.map \ No newline at end of file diff --git a/dist/src/commands/github-login.js.map b/dist/src/commands/github-login.js.map new file mode 100644 index 0000000..3a746dd --- /dev/null +++ b/dist/src/commands/github-login.js.map @@ -0,0 +1 @@ +{"version":3,"file":"github-login.js","sourceRoot":"","sources":["../../../src/commands/github-login.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/src/commands/index.d.ts b/dist/src/commands/index.d.ts new file mode 100644 index 0000000..f36479a --- /dev/null +++ b/dist/src/commands/index.d.ts @@ -0,0 +1 @@ +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/src/commands/index.d.ts.map b/dist/src/commands/index.d.ts.map new file mode 100644 index 0000000..66311af --- /dev/null +++ b/dist/src/commands/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/src/commands/index.js b/dist/src/commands/index.js new file mode 100644 index 0000000..fa69a5a --- /dev/null +++ b/dist/src/commands/index.js @@ -0,0 +1,2 @@ +"use strict"; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/src/commands/index.js.map b/dist/src/commands/index.js.map new file mode 100644 index 0000000..33c0fa7 --- /dev/null +++ b/dist/src/commands/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/index.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/src/commands/list-roles.d.ts b/dist/src/commands/list-roles.d.ts new file mode 100644 index 0000000..0f6d0b2 --- /dev/null +++ b/dist/src/commands/list-roles.d.ts @@ -0,0 +1,7 @@ +import { Scms } from '../stores/scms'; +export declare class ListRoles { + scms: Scms; + constructor(); + handle(): Promise; +} +//# sourceMappingURL=list-roles.d.ts.map \ No newline at end of file diff --git a/dist/src/commands/list-roles.d.ts.map b/dist/src/commands/list-roles.d.ts.map new file mode 100644 index 0000000..cc7b739 --- /dev/null +++ b/dist/src/commands/list-roles.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"list-roles.d.ts","sourceRoot":"","sources":["../../../src/commands/list-roles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAItC,qBAAa,SAAS;IACpB,IAAI,EAAE,IAAI,CAAC;;IAML,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB9B"} \ No newline at end of file diff --git a/dist/src/commands/list-roles.js b/dist/src/commands/list-roles.js new file mode 100644 index 0000000..ab8d7e5 --- /dev/null +++ b/dist/src/commands/list-roles.js @@ -0,0 +1,27 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ListRoles = void 0; +const scms_1 = require("../stores/scms"); +const github_sls_rest_api_1 = require("../../api/github-sls-rest-api"); +const messages_1 = require("../messages"); +class ListRoles { + scms; + constructor() { + this.scms = new scms_1.Scms(); + } + async handle() { + const accessToken = this.scms.getGithubToken(); + if (!accessToken) { + throw new Error(messages_1.NOT_LOGGED_IN); + } + const idpApi = new github_sls_rest_api_1.IDPApi(new github_sls_rest_api_1.Configuration({ + accessToken: accessToken, + })); + const { data: roles } = await idpApi.listRoles(); + roles.results.forEach((role) => { + console.log(`${role.role} [Provider: ${role.provider}] (Org: ${role.org})`); + }); + } +} +exports.ListRoles = ListRoles; +//# sourceMappingURL=list-roles.js.map \ No newline at end of file diff --git a/dist/src/commands/list-roles.js.map b/dist/src/commands/list-roles.js.map new file mode 100644 index 0000000..0933df7 --- /dev/null +++ b/dist/src/commands/list-roles.js.map @@ -0,0 +1 @@ +{"version":3,"file":"list-roles.js","sourceRoot":"","sources":["../../../src/commands/list-roles.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AACtC,uEAAsE;AACtE,0CAA4C;AAE5C,MAAa,SAAS;IACpB,IAAI,CAAO;IAEX;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,WAAI,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;QAC/C,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,wBAAa,CAAC,CAAC;SAChC;QAED,MAAM,MAAM,GAAG,IAAI,4BAAM,CACvB,IAAI,mCAAa,CAAC;YAChB,WAAW,EAAE,WAAW;SACzB,CAAC,CACH,CAAC;QACF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACjD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,QAAQ,WAAW,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAvBD,8BAuBC"} \ No newline at end of file diff --git a/dist/src/commands/login.d.ts b/dist/src/commands/login.d.ts new file mode 100644 index 0000000..8d28a18 --- /dev/null +++ b/dist/src/commands/login.d.ts @@ -0,0 +1,5 @@ +export declare class Login { + handle(): Promise; + private getAccessToken; +} +//# sourceMappingURL=login.d.ts.map \ No newline at end of file diff --git a/dist/src/commands/login.d.ts.map b/dist/src/commands/login.d.ts.map new file mode 100644 index 0000000..8d03456 --- /dev/null +++ b/dist/src/commands/login.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/login.ts"],"names":[],"mappings":"AAwBA,qBAAa,KAAK;IACV,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB7B,OAAO,CAAC,cAAc;CAKvB"} \ No newline at end of file diff --git a/dist/src/commands/login.js b/dist/src/commands/login.js new file mode 100644 index 0000000..a61a838 --- /dev/null +++ b/dist/src/commands/login.js @@ -0,0 +1,28 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Login = void 0; +const auth_sls_rest_api_1 = require("api/auth-sls-rest-api"); +const axios_1 = __importDefault(require("axios")); +class Login { + async handle() { + console.log('A basic GitHub token with access to your identity will be generated.'); + const api = new auth_sls_rest_api_1.JwtGithubApi(); + const { data: oauthDetail } = await api.getOauthDetail(); + const { clientId: client_id } = oauthDetail; + const { data: deviceCodeResponse } = await axios_1.default.post('https://github.com/login/device/code', { + client_id, + scope: 'user:email', + }); + const { verification_uri: verificationUri, user_code: userCode } = deviceCodeResponse; + console.log(`Open browser to ${verificationUri} and enter ${userCode}`); + } + getAccessToken(deviceCodeResponse) { + return new Promise((resolve, reject) => { + }); + } +} +exports.Login = Login; +//# sourceMappingURL=login.js.map \ No newline at end of file diff --git a/dist/src/commands/login.js.map b/dist/src/commands/login.js.map new file mode 100644 index 0000000..a8f0661 --- /dev/null +++ b/dist/src/commands/login.js.map @@ -0,0 +1 @@ +{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/login.ts"],"names":[],"mappings":";;;;;;AAAA,6DAAqD;AACrD,kDAA0B;AAuB1B,MAAa,KAAK;IAChB,KAAK,CAAC,MAAM;QACV,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;QACpF,MAAM,GAAG,GAAG,IAAI,gCAAY,EAAE,CAAC;QAC/B,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;QACzD,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC;QAE5C,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,MAAM,eAAK,CAAC,IAAI,CACnD,sCAAsC,EACtC;YACE,SAAS;YACT,KAAK,EAAE,YAAY;SACC,CACvB,CAAC;QAEF,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC;QAEtF,OAAO,CAAC,GAAG,CAAC,mBAAmB,eAAe,cAAc,QAAQ,EAAE,CAAC,CAAC;IAC1E,CAAC;IAEO,cAAc,CAAC,kBAAsC;QAC3D,OAAO,IAAI,OAAO,CAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAE5D,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAzBD,sBAyBC"} \ No newline at end of file diff --git a/dist/src/constants.d.ts b/dist/src/constants.d.ts new file mode 100644 index 0000000..1fea7a6 --- /dev/null +++ b/dist/src/constants.d.ts @@ -0,0 +1 @@ +//# sourceMappingURL=constants.d.ts.map \ No newline at end of file diff --git a/dist/src/constants.d.ts.map b/dist/src/constants.d.ts.map new file mode 100644 index 0000000..9693057 --- /dev/null +++ b/dist/src/constants.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/src/constants.js b/dist/src/constants.js new file mode 100644 index 0000000..83707d2 --- /dev/null +++ b/dist/src/constants.js @@ -0,0 +1,2 @@ +"use strict"; +//# sourceMappingURL=constants.js.map \ No newline at end of file diff --git a/dist/src/constants.js.map b/dist/src/constants.js.map new file mode 100644 index 0000000..61a83de --- /dev/null +++ b/dist/src/constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/src/index.d.ts b/dist/src/index.d.ts new file mode 100644 index 0000000..c2640cc --- /dev/null +++ b/dist/src/index.d.ts @@ -0,0 +1,2 @@ +export declare const comingSoon: () => string; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/src/index.d.ts.map b/dist/src/index.d.ts.map new file mode 100644 index 0000000..da5bd3d --- /dev/null +++ b/dist/src/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,QAAO,MAE7B,CAAC"} \ No newline at end of file diff --git a/dist/src/index.js b/dist/src/index.js new file mode 100644 index 0000000..0c54e68 --- /dev/null +++ b/dist/src/index.js @@ -0,0 +1,8 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.comingSoon = void 0; +const comingSoon = () => { + return 'The SAML.to CLI is coming soon!'; +}; +exports.comingSoon = comingSoon; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/src/index.js.map b/dist/src/index.js.map new file mode 100644 index 0000000..4e35e59 --- /dev/null +++ b/dist/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAO,MAAM,UAAU,GAAG,GAAW,EAAE;IACrC,OAAO,iCAAiC,CAAC;AAC3C,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB"} \ No newline at end of file diff --git a/dist/src/messages.d.ts b/dist/src/messages.d.ts new file mode 100644 index 0000000..eff7732 --- /dev/null +++ b/dist/src/messages.d.ts @@ -0,0 +1,6 @@ +export declare const NOT_LOGGED_IN = "To use this command, first use the `saml-to login` command."; +export declare const ERROR_LOADING_FILE: (file: string, error: Error) => string; +export declare const ERROR_ASSUMING_ROLE: (role: string, message: string) => string; +export declare const MULTIPLE_ROLES: (role: string, message: string) => string; +export declare const TERMINAL_NOT_SUPPORTED: (provider: string, recipient: string) => string; +//# sourceMappingURL=messages.d.ts.map \ No newline at end of file diff --git a/dist/src/messages.d.ts.map b/dist/src/messages.d.ts.map new file mode 100644 index 0000000..b0c2f91 --- /dev/null +++ b/dist/src/messages.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,gEAAgE,CAAC;AAC3F,eAAO,MAAM,kBAAkB,SAAU,MAAM,SAAS,KAAK,KAAG,MACd,CAAC;AACnD,eAAO,MAAM,mBAAmB,SAAU,MAAM,WAAW,MAAM,KAAG,MAC3B,CAAC;AAC1C,eAAO,MAAM,cAAc,SAAU,MAAM,WAAW,MAAM,KAAG,MAI5D,CAAC;AACJ,eAAO,MAAM,sBAAsB,aAAc,MAAM,aAAa,MAAM,KAAG,MACyF,CAAC"} \ No newline at end of file diff --git a/dist/src/messages.js b/dist/src/messages.js new file mode 100644 index 0000000..81c3974 --- /dev/null +++ b/dist/src/messages.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TERMINAL_NOT_SUPPORTED = exports.MULTIPLE_ROLES = exports.ERROR_ASSUMING_ROLE = exports.ERROR_LOADING_FILE = exports.NOT_LOGGED_IN = void 0; +exports.NOT_LOGGED_IN = 'To use this command, first use the `saml-to login` command.'; +const ERROR_LOADING_FILE = (file, error) => `Error loading file: ${file}: ${error.message}.`; +exports.ERROR_LOADING_FILE = ERROR_LOADING_FILE; +const ERROR_ASSUMING_ROLE = (role, message) => `Unable to assume ${role}. ${message}.`; +exports.ERROR_ASSUMING_ROLE = ERROR_ASSUMING_ROLE; +const MULTIPLE_ROLES = (role, message) => (0, exports.ERROR_ASSUMING_ROLE)(role, `${message}\n Tip: Use an exact role name, and/or the --provider and --org flags to narrow down to a specific role.`); +exports.MULTIPLE_ROLES = MULTIPLE_ROLES; +const TERMINAL_NOT_SUPPORTED = (provider, recipient) => `Role assumption using ${provider} (${recipient}) is not supported by this CLI yet. However, you may request it as a feature: https://github.com/saml-to/cli/issues`; +exports.TERMINAL_NOT_SUPPORTED = TERMINAL_NOT_SUPPORTED; +//# sourceMappingURL=messages.js.map \ No newline at end of file diff --git a/dist/src/messages.js.map b/dist/src/messages.js.map new file mode 100644 index 0000000..3c214df --- /dev/null +++ b/dist/src/messages.js.map @@ -0,0 +1 @@ +{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/messages.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,6DAA6D,CAAC;AACpF,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,KAAY,EAAU,EAAE,CACvE,uBAAuB,IAAI,KAAK,KAAK,CAAC,OAAO,GAAG,CAAC;AADtC,QAAA,kBAAkB,sBACoB;AAC5C,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,OAAe,EAAU,EAAE,CAC3E,oBAAoB,IAAI,KAAK,OAAO,GAAG,CAAC;AAD7B,QAAA,mBAAmB,uBACU;AACnC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,OAAe,EAAU,EAAE,CACtE,IAAA,2BAAmB,EACjB,IAAI,EACJ,GAAG,OAAO,0GAA0G,CACrH,CAAC;AAJS,QAAA,cAAc,kBAIvB;AACG,MAAM,sBAAsB,GAAG,CAAC,QAAgB,EAAE,SAAiB,EAAU,EAAE,CACpF,yBAAyB,QAAQ,KAAK,SAAS,qHAAqH,CAAC;AAD1J,QAAA,sBAAsB,0BACoI"} \ No newline at end of file diff --git a/dist/src/stores/scms.d.ts b/dist/src/stores/scms.d.ts new file mode 100644 index 0000000..45f118e --- /dev/null +++ b/dist/src/stores/scms.d.ts @@ -0,0 +1,14 @@ +import { Octokit } from '@octokit/rest'; +export declare type ScmClients = { + github?: Octokit; +}; +export declare class Scms { + configDir: string; + githubFile: string; + constructor(); + loadClients(): Promise; + saveGithubToken(token: string): string; + getGithubToken(): string | undefined; + private getOctokit; +} +//# sourceMappingURL=scms.d.ts.map \ No newline at end of file diff --git a/dist/src/stores/scms.d.ts.map b/dist/src/stores/scms.d.ts.map new file mode 100644 index 0000000..7aec7be --- /dev/null +++ b/dist/src/stores/scms.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"scms.d.ts","sourceRoot":"","sources":["../../../src/stores/scms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAWxC,oBAAY,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,qBAAa,IAAI;IACf,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,EAAE,MAAM,CAAC;;IAWb,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC;IAMjC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAKtC,cAAc,IAAI,MAAM,GAAG,SAAS;IAqB3C,OAAO,CAAC,UAAU;CAOnB"} \ No newline at end of file diff --git a/dist/src/stores/scms.js b/dist/src/stores/scms.js new file mode 100644 index 0000000..595a690 --- /dev/null +++ b/dist/src/stores/scms.js @@ -0,0 +1,60 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Scms = void 0; +const rest_1 = require("@octokit/rest"); +const os_1 = __importDefault(require("os")); +const path_1 = __importDefault(require("path")); +const fs_1 = __importDefault(require("fs")); +// import { env } from 'process'; +const messages_1 = require("../messages"); +class Scms { + configDir; + githubFile; + constructor() { + this.configDir = `${path_1.default.join(os_1.default.homedir(), '.saml-to')}`; + this.githubFile = path_1.default.join(this.configDir, 'github-token.json'); + if (!fs_1.default.existsSync(this.configDir)) { + fs_1.default.mkdirSync(this.configDir); + } + } + async loadClients() { + const clients = {}; + clients.github = this.getOctokit(); + return clients; + } + saveGithubToken(token) { + fs_1.default.writeFileSync(this.githubFile, JSON.stringify({ token })); + return this.githubFile; + } + getGithubToken() { + // if (env.GITHUB_TOKEN) { + // return env.GITHUB_TOKEN; + // } + if (!fs_1.default.existsSync(this.githubFile)) { + return; + } + try { + const { token } = JSON.parse(fs_1.default.readFileSync(this.githubFile).toString()); + return token; + } + catch (e) { + if (e instanceof Error) { + console.warn((0, messages_1.ERROR_LOADING_FILE)(this.githubFile, e)); + return; + } + throw e; + } + } + getOctokit() { + const token = this.getGithubToken(); + if (!token) { + return; + } + return new rest_1.Octokit({ auth: token }); + } +} +exports.Scms = Scms; +//# sourceMappingURL=scms.js.map \ No newline at end of file diff --git a/dist/src/stores/scms.js.map b/dist/src/stores/scms.js.map new file mode 100644 index 0000000..0c3da4d --- /dev/null +++ b/dist/src/stores/scms.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scms.js","sourceRoot":"","sources":["../../../src/stores/scms.ts"],"names":[],"mappings":";;;;;;AAAA,wCAAwC;AACxC,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,iCAAiC;AACjC,0CAAiD;AAUjD,MAAa,IAAI;IACf,SAAS,CAAS;IAElB,UAAU,CAAS;IAEnB;QACE,IAAI,CAAC,SAAS,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QAEjE,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAClC,YAAE,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC9B;IACH,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,eAAe,CAAC,KAAa;QAClC,YAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAgB,CAAC,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAEM,cAAc;QACnB,0BAA0B;QAC1B,6BAA6B;QAC7B,IAAI;QAEJ,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;YACnC,OAAO;SACR;QAED,IAAI;YACF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAe,CAAC;YACxF,OAAO,KAAK,CAAC;SACd;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,YAAY,KAAK,EAAE;gBACtB,OAAO,CAAC,IAAI,CAAC,IAAA,6BAAkB,EAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrD,OAAO;aACR;YACD,MAAM,CAAC,CAAC;SACT;IACH,CAAC;IAEO,UAAU;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;QACD,OAAO,IAAI,cAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtC,CAAC;CACF;AArDD,oBAqDC"} \ No newline at end of file diff --git a/dist/tsconfig.tsbuildinfo b/dist/tsconfig.tsbuildinfo new file mode 100644 index 0000000..5cf7fe4 --- /dev/null +++ b/dist/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.esnext.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.esnext.full.d.ts","../api/auth-sls-rest-api/configuration.ts","../node_modules/axios/index.d.ts","../api/auth-sls-rest-api/base.ts","../api/auth-sls-rest-api/common.ts","../api/auth-sls-rest-api/api.ts","../api/auth-sls-rest-api/index.ts","../api/github-sls-rest-api/configuration.ts","../api/github-sls-rest-api/base.ts","../api/github-sls-rest-api/common.ts","../api/github-sls-rest-api/api.ts","../api/github-sls-rest-api/index.ts","../node_modules/loglevel/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/helpers.d.ts","../node_modules/@types/yargs/index.d.ts","../node_modules/before-after-hook/index.d.ts","../node_modules/@octokit/types/dist-types/requestmethod.d.ts","../node_modules/@octokit/types/dist-types/url.d.ts","../node_modules/@octokit/types/dist-types/fetch.d.ts","../node_modules/@octokit/types/dist-types/signal.d.ts","../node_modules/@octokit/types/dist-types/requestrequestoptions.d.ts","../node_modules/@octokit/types/dist-types/requestheaders.d.ts","../node_modules/@octokit/types/dist-types/requestparameters.d.ts","../node_modules/@octokit/types/dist-types/endpointoptions.d.ts","../node_modules/@octokit/types/dist-types/responseheaders.d.ts","../node_modules/@octokit/types/dist-types/octokitresponse.d.ts","../node_modules/@octokit/types/dist-types/endpointdefaults.d.ts","../node_modules/@octokit/types/dist-types/requestoptions.d.ts","../node_modules/@octokit/types/dist-types/route.d.ts","../node_modules/@octokit/openapi-types/types.d.ts","../node_modules/@octokit/types/dist-types/generated/endpoints.d.ts","../node_modules/@octokit/types/dist-types/endpointinterface.d.ts","../node_modules/@octokit/types/dist-types/requestinterface.d.ts","../node_modules/@octokit/types/dist-types/authinterface.d.ts","../node_modules/@octokit/types/dist-types/requesterror.d.ts","../node_modules/@octokit/types/dist-types/strategyinterface.d.ts","../node_modules/@octokit/types/dist-types/version.d.ts","../node_modules/@octokit/types/dist-types/getresponsetypefromendpointmethod.d.ts","../node_modules/@octokit/types/dist-types/index.d.ts","../node_modules/@octokit/request/dist-types/index.d.ts","../node_modules/@octokit/graphql/dist-types/types.d.ts","../node_modules/@octokit/graphql/dist-types/error.d.ts","../node_modules/@octokit/graphql/dist-types/index.d.ts","../node_modules/@octokit/request-error/dist-types/types.d.ts","../node_modules/@octokit/request-error/dist-types/index.d.ts","../node_modules/@octokit/core/dist-types/types.d.ts","../node_modules/@octokit/core/dist-types/index.d.ts","../node_modules/@octokit/plugin-rest-endpoint-methods/dist-types/generated/parameters-and-response-types.d.ts","../node_modules/@octokit/plugin-rest-endpoint-methods/dist-types/generated/method-types.d.ts","../node_modules/@octokit/plugin-rest-endpoint-methods/dist-types/types.d.ts","../node_modules/@octokit/plugin-rest-endpoint-methods/dist-types/index.d.ts","../node_modules/@octokit/plugin-paginate-rest/dist-types/generated/paginating-endpoints.d.ts","../node_modules/@octokit/plugin-paginate-rest/dist-types/types.d.ts","../node_modules/@octokit/plugin-paginate-rest/dist-types/compose-paginate.d.ts","../node_modules/@octokit/plugin-paginate-rest/dist-types/paginating-endpoints.d.ts","../node_modules/@octokit/plugin-paginate-rest/dist-types/index.d.ts","../node_modules/@octokit/rest/dist-types/index.d.ts","../src/messages.ts","../src/stores/scms.ts","../src/commands/list-roles.ts","../node_modules/moment/ts3.1-typings/moment.d.ts","../src/commands/github-login.ts","../node_modules/@aws-sdk/types/dist-types/abort.d.ts","../node_modules/@aws-sdk/types/dist-types/logger.d.ts","../node_modules/@aws-sdk/types/dist-types/http.d.ts","../node_modules/@aws-sdk/types/dist-types/response.d.ts","../node_modules/@aws-sdk/types/dist-types/util.d.ts","../node_modules/@aws-sdk/types/dist-types/middleware.d.ts","../node_modules/@aws-sdk/types/dist-types/command.d.ts","../node_modules/@aws-sdk/types/dist-types/client.d.ts","../node_modules/@aws-sdk/types/dist-types/credentials.d.ts","../node_modules/@aws-sdk/types/dist-types/crypto.d.ts","../node_modules/@aws-sdk/types/dist-types/eventstream.d.ts","../node_modules/@aws-sdk/types/dist-types/pagination.d.ts","../node_modules/@aws-sdk/types/dist-types/transfer.d.ts","../node_modules/@aws-sdk/types/dist-types/serde.d.ts","../node_modules/@aws-sdk/types/dist-types/shapes.d.ts","../node_modules/@aws-sdk/types/dist-types/signature.d.ts","../node_modules/@aws-sdk/types/dist-types/waiter.d.ts","../node_modules/@aws-sdk/types/dist-types/index.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/client.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/command.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/constants.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/date-utils.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/emitwarningifunsupportedversion.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/extended-encode-uri-component.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/get-array-if-single-item.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/get-value-from-text-node.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/lazy-json.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/parse-utils.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/ser-utils.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/split-every.d.ts","../node_modules/@aws-sdk/smithy-client/dist-types/index.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/models/models_0.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@aws-sdk/node-config-provider/dist-types/fromenv.d.ts","../node_modules/@aws-sdk/shared-ini-file-loader/dist-types/index.d.ts","../node_modules/@aws-sdk/node-config-provider/dist-types/fromsharedconfigfiles.d.ts","../node_modules/@aws-sdk/node-config-provider/dist-types/fromstatic.d.ts","../node_modules/@aws-sdk/node-config-provider/dist-types/configloader.d.ts","../node_modules/@aws-sdk/node-config-provider/dist-types/index.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/endpointsconfig/nodeusedualstackendpointconfigoptions.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/endpointsconfig/nodeusefipsendpointconfigoptions.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/endpointsconfig/resolveendpointsconfig.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/endpointsconfig/resolvecustomendpointsconfig.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/endpointsconfig/index.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regionconfig/config.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regionconfig/resolveregionconfig.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regionconfig/index.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regioninfo/endpointvarianttag.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regioninfo/endpointvariant.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regioninfo/partitionhash.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regioninfo/regionhash.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regioninfo/getregioninfo.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/regioninfo/index.d.ts","../node_modules/@aws-sdk/config-resolver/dist-types/index.d.ts","../node_modules/@aws-sdk/middleware-host-header/dist-types/index.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/types.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/standardretrystrategy.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/adaptiveretrystrategy.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/defaultratelimiter.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/config.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/configurations.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/delaydecider.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/omitretryheadersmiddleware.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/retrydecider.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/retrymiddleware.d.ts","../node_modules/@aws-sdk/middleware-retry/dist-types/index.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/signaturev4.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/getcanonicalheaders.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/getcanonicalquery.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/getpayloadhash.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/moveheaderstoquery.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/preparerequest.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/normalizeprovider.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/credentialderivation.d.ts","../node_modules/@aws-sdk/signature-v4/dist-types/index.d.ts","../node_modules/@aws-sdk/middleware-signing/dist-types/configurations.d.ts","../node_modules/@aws-sdk/middleware-signing/dist-types/middleware.d.ts","../node_modules/@aws-sdk/middleware-signing/dist-types/index.d.ts","../node_modules/@aws-sdk/middleware-sdk-sts/dist-types/index.d.ts","../node_modules/@aws-sdk/middleware-user-agent/dist-types/configurations.d.ts","../node_modules/@aws-sdk/middleware-user-agent/dist-types/user-agent-middleware.d.ts","../node_modules/@aws-sdk/middleware-user-agent/dist-types/index.d.ts","../node_modules/@aws-sdk/protocol-http/dist-types/httprequest.d.ts","../node_modules/@aws-sdk/protocol-http/dist-types/httpresponse.d.ts","../node_modules/@aws-sdk/protocol-http/dist-types/httphandler.d.ts","../node_modules/@aws-sdk/protocol-http/dist-types/isvalidhostname.d.ts","../node_modules/@aws-sdk/protocol-http/dist-types/index.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/commands/assumerolewithsamlcommand.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/commands/assumerolewithwebidentitycommand.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/commands/decodeauthorizationmessagecommand.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/commands/getaccesskeyinfocommand.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/commands/getcalleridentitycommand.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/commands/getfederationtokencommand.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/commands/getsessiontokencommand.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/stsclient.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/commands/assumerolecommand.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/sts.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/commands/index.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/defaultstsroleassumers.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/defaultroleassumers.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/models/index.d.ts","../node_modules/@aws-sdk/client-sts/dist-types/index.d.ts","../src/commands/assume.ts","../src/command.ts","../cli/index.ts","../src/constants.ts","../src/index.ts","../src/commands/index.ts","../node_modules/@types/aws-lambda/handler.d.ts","../node_modules/@types/aws-lambda/common/api-gateway.d.ts","../node_modules/@types/aws-lambda/common/cloudfront.d.ts","../node_modules/@types/aws-lambda/trigger/alb.d.ts","../node_modules/@types/aws-lambda/trigger/api-gateway-authorizer.d.ts","../node_modules/@types/aws-lambda/trigger/api-gateway-proxy.d.ts","../node_modules/@types/aws-lambda/trigger/appsync-resolver.d.ts","../node_modules/@types/aws-lambda/trigger/cloudformation-custom-resource.d.ts","../node_modules/@types/aws-lambda/trigger/cdk-custom-resource.d.ts","../node_modules/@types/aws-lambda/trigger/cloudfront-request.d.ts","../node_modules/@types/aws-lambda/trigger/cloudfront-response.d.ts","../node_modules/@types/aws-lambda/trigger/eventbridge.d.ts","../node_modules/@types/aws-lambda/trigger/cloudwatch-events.d.ts","../node_modules/@types/aws-lambda/trigger/cloudwatch-logs.d.ts","../node_modules/@types/aws-lambda/trigger/codebuild-cloudwatch-state.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-action.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-pipeline.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch-stage.d.ts","../node_modules/@types/aws-lambda/trigger/codepipeline-cloudwatch.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/_common.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/create-auth-challenge.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-message.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/custom-email-sender.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/define-auth-challenge.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-authentication.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/post-confirmation.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-authentication.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-signup.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/pre-token-generation.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/user-migration.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/verify-auth-challenge-response.d.ts","../node_modules/@types/aws-lambda/trigger/cognito-user-pool-trigger/index.d.ts","../node_modules/@types/aws-lambda/trigger/connect-contact-flow.d.ts","../node_modules/@types/aws-lambda/trigger/dynamodb-stream.d.ts","../node_modules/@types/aws-lambda/trigger/iot.d.ts","../node_modules/@types/aws-lambda/trigger/kinesis-firehose-transformation.d.ts","../node_modules/@types/aws-lambda/trigger/kinesis-stream.d.ts","../node_modules/@types/aws-lambda/trigger/lex.d.ts","../node_modules/@types/aws-lambda/trigger/s3.d.ts","../node_modules/@types/aws-lambda/trigger/s3-batch.d.ts","../node_modules/@types/aws-lambda/trigger/ses.d.ts","../node_modules/@types/aws-lambda/trigger/sns.d.ts","../node_modules/@types/aws-lambda/trigger/sqs.d.ts","../node_modules/@types/aws-lambda/trigger/msk.d.ts","../node_modules/@types/aws-lambda/trigger/secretsmanager.d.ts","../node_modules/@types/aws-lambda/index.d.ts","../node_modules/@types/btoa-lite/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/json5/index.d.ts"],"fileInfos":[{"version":"6adbf5efd0e374ff5f427a4f26a5a413e9734eee5067a0e86da69aea41910b52","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9","5f4e733ced4e129482ae2186aae29fde948ab7182844c3a5a51dd346182c7b06","e6b724280c694a9f588847f754198fb96c43d805f065c3a5b28bbc9594541c84","e21c071ca3e1b4a815d5f04a7475adcaeea5d64367e840dd0154096d705c3940","746d62152361558ea6d6115cf0da4dd10ede041d14882ede3568bce5dc4b4f1f","2cc028cd0bdb35b1b5eb723d84666a255933fffbea607f72cbd0c7c7b4bee144",{"version":"abba1071bfd89e55e88a054b0c851ea3e8a494c340d0f3fab19eb18f6afb0c9e","affectsGlobalScope":true},{"version":"927cb2b60048e1395b183bf74b2b80a75bdb1dbe384e1d9fac654313ea2fb136","affectsGlobalScope":true},{"version":"7fac8cb5fc820bc2a59ae11ef1c5b38d3832c6d0dfaec5acdb5569137d09a481","affectsGlobalScope":true},{"version":"097a57355ded99c68e6df1b738990448e0bf170e606707df5a7c0481ff2427cd","affectsGlobalScope":true},{"version":"d8996609230d17e90484a2dd58f22668f9a05a3bfe00bfb1d6271171e54a31fb","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"4378fc8122ec9d1a685b01eb66c46f62aba6b239ca7228bb6483bcf8259ee493","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},{"version":"0eb85d6c590b0d577919a79e0084fa1744c1beba6fd0d4e951432fa1ede5510a","affectsGlobalScope":true},{"version":"da233fc1c8a377ba9e0bed690a73c290d843c2c3d23a7bd7ec5cd3d7d73ba1e0","affectsGlobalScope":true},{"version":"d154ea5bb7f7f9001ed9153e876b2d5b8f5c2bb9ec02b3ae0d239ec769f1f2ae","affectsGlobalScope":true},{"version":"bb2d3fb05a1d2ffbca947cc7cbc95d23e1d053d6595391bd325deb265a18d36c","affectsGlobalScope":true},{"version":"c80df75850fea5caa2afe43b9949338ce4e2de086f91713e9af1a06f973872b8","affectsGlobalScope":true},{"version":"9d57b2b5d15838ed094aa9ff1299eecef40b190722eb619bac4616657a05f951","affectsGlobalScope":true},{"version":"6c51b5dd26a2c31dbf37f00cfc32b2aa6a92e19c995aefb5b97a3a64f1ac99de","affectsGlobalScope":true},{"version":"6e7997ef61de3132e4d4b2250e75343f487903ddf5370e7ce33cf1b9db9a63ed","affectsGlobalScope":true},{"version":"2ad234885a4240522efccd77de6c7d99eecf9b4de0914adb9a35c0c22433f993","affectsGlobalScope":true},{"version":"1b3fe904465430e030c93239a348f05e1be80640d91f2f004c3512c2c2c89f34","affectsGlobalScope":true},{"version":"3787b83e297de7c315d55d4a7c546ae28e5f6c0a361b7a1dcec1f1f50a54ef11","affectsGlobalScope":true},{"version":"e7e8e1d368290e9295ef18ca23f405cf40d5456fa9f20db6373a61ca45f75f40","affectsGlobalScope":true},{"version":"faf0221ae0465363c842ce6aa8a0cbda5d9296940a8e26c86e04cc4081eea21e","affectsGlobalScope":true},{"version":"06393d13ea207a1bfe08ec8d7be562549c5e2da8983f2ee074e00002629d1871","affectsGlobalScope":true},{"version":"d071129cba6a5f2700be09c86c07ad2791ab67d4e5ed1eb301d6746c62745ea4","affectsGlobalScope":true},{"version":"6c55633c733c8378db65ac3da7a767c3cf2cf3057f0565a9124a16a3a2019e87","affectsGlobalScope":true},{"version":"fb4416144c1bf0323ccbc9afb0ab289c07312214e8820ad17d709498c865a3fe","affectsGlobalScope":true},{"version":"5b0ca94ec819d68d33da516306c15297acec88efeb0ae9e2b39f71dbd9685ef7","affectsGlobalScope":true},{"version":"e8c9f4e445a489991ca1a4232667de3ac36b07ba75ea335971fbeacf2d26fe67","affectsGlobalScope":true},{"version":"10bbdc1981b8d9310ee75bfac28ee0477bb2353e8529da8cff7cb26c409cb5e8","affectsGlobalScope":true},"d96fa8a56871904776165ceb8e00bd56127e1a017bb2664cae76223b5f815141",{"version":"20700c5594ab6ea3d0d05891a2115939fd6d3d6de3f4b3d634787c98fe60a313","signature":"6ce6833d4740a5222d12047f952abd756903505e35a16497a8144d6789aaf1f8"},"644c59289eb29590d65062c5b64dda9ef2797ce120071265a9099436f0d41a16",{"version":"63bc33201a4514d65fdf82843a7861b63ed19afa43e8b750b4a0ae9ae2052faa","signature":"7bf702d19e6af4d112a17e09f35a42e49e23292e9d084a92a8be738d36f7c0b8"},{"version":"542106f74fedd9e946bc21aa78f010d1c7a8346b53f8387b1607ae88101b9db9","signature":"d4c739eac08dc8ad05dda76680bd72bf52cc5079812d9bdd0003215580f5a004"},{"version":"b16647a4ca26a0a01798480af73497deb62e63d7684a4d0b35cc9e6fc5613e78","signature":"7869f1255165bfef044417d888acba0f53ed91ca7c377cb65d33a15b4fe7ed6e"},{"version":"66de50072ad1d963bb98147de5d60439bb75b7abde72ca1ac2e0034d6e48128c","signature":"59cd0219359cdf7e1f8bb676a6d07bc46ace2a71e1f325f763b3097989df71ae"},{"version":"73668b01ed7a8da6828f424bb85aa2b4c6d953c1a6f40c43e9b7b80ff6053a6f","signature":"1f5c2607b23afac6b7920e2fab49038c712bcc9157567172957ea63fc40a8c4a"},{"version":"408f3693d1f66111156711ac793bdf5f9bd4120fc7bd69b19a22021e02851a86","signature":"fdaf3df45f61812c4996351ed13f6f8af273f7c9752523f7e60384d098e96147"},{"version":"0c9459f8742562444fe3811d966d3f6e7edeabf0fccaa43c4546c55e79bb4837","signature":"94dabe6982fd39eeb97bc72410f7ab16e433bc17031b36b523e65256e65e4502"},{"version":"c1aff254463214570fd067467c695cfb0d1429245f772096d75353921224df90","signature":"b7b1e9ac9c6def4112faf4c982fe50b464d3ab3b9ce2670b7f52fff7020c5abf"},{"version":"05932d38d3bdcc3cfc6e8e000421c7f51899842a928262d12f7c7d5e3c5a497f","signature":"fed5c06553d507b6a3b0de297071543b8559533b5f6043dc86dc2cd0acd82ff9"},"34c7fb7e892ea21376cebad4c3c29bdb10324606d58af04bfc2c7b8c8d41af4d","f7e133b20ee2669b6c0e5d7f0cd510868c57cd64b283e68c7f598e30ce9d76d2","9cc884a6f8547dec935f930b8aad8212aaae876ebeaab5cd42d20b45251860e7","e8b8083042a5ae1536d815455fabd3873a8731a760b139723d7fc452bc9a954f","f4fc6f33af72add3d409feae7e6eb6fd48dd05a7fda785a832addafa4c7ce8a7","54160aaec4f72e2045e7341301c096344b9e5162a1e48333a531117af5938713","3f0d8705992ebf25221e0d3f72d496bbcebacb47c2b6ee90f4de66d760ee9152","af628c57e9826fbe767ae6afbffa7b197405a8c53ba6197bb32e806d35c1ca8f","76b87f8b5d13712d3fc53a231be1664c4071186120624f2ae1b5bf3db6c7b502","2c7742afcffed27fef8e373c7939f20b64b8783d37e737bba2b3e0d70899ee2c","a9cdd476c9e36aa3bf4212f4337254f2f2676506aabb6f7d8f6db50490d25c33","52c0780e990d8d2ef666d618a303bca67a5e968dbaa4e4eaaad4e415a7217fd1","80a16135e14ed2540f9687f4fb5daee3a4249126272a5a922a5a21ee3b7048c3","7f7aa3e938180da966143e16c4686c7eb2ab8d0f762f038648e1cc6577e1d52e","6e9413bf8a3ce70c3b7db79a29de97281576b731de079d0853f1de499304fbb3","f6aef032da1a16fa155757a6ee8a79c749e579a378d9ba54256d1cefc753d475","5f9c212f98b4df7d638dd9a8125c5e828acbf9710586cd8027e41e4e55819a37","2c574466b0d7ded0bfedaea3660d8f008cefa06db748d79274b4aaea46564763","445355550498225cbaa9f0f48b26eb0c1118699469207455a77f8449ff2fc695","1d3858dc75e7eba0255c36c4f60a781805646e7a42f5cf6bbebee831b3f8aba1","7e122724e79d97fc601b9517da07dacf9e8162f5d78ad5740b349e2065ded611","3c9c80b328558dde371257f1dec7ee2f26004c3497b3e302b94fc415b01c0190","3455a4c5f5feefa1f7062e4d8b00837e1edf7922b10cb50769b4ed3c5e37437f","74fd4b09963df6d2a1c94b653199c48d5a578164517a7ae27ff86771662f6764","6a6752f432019855ae0c882f1dd5b6ca11d4da35f2279e7efaa98caec41588af","a9682c0fdced5b7d5a5c19edbfe24590128fb70fed3ec6f2b368bccd275149bc","7a50f76e773ead4a34b5308879130da83192040ef6dafc5f18570ff6ad2bda61","70f53130d4dcf2f25b58eba7bb7ab4dd80994ad7dab46b37e60cd13a70761fd4","758e92a92871b11a9aede1787106be4764ae6a32f6c76bb29f072bfa28d9f69a","5c291d7429bff327ce5502221f1d2fea64277760793324e7419892e3af29dd63","126eb12a1d90e542ab5c67389bf04063eb0a6102450903a4e9a660fb1b1d2abe","a513bf738f28c66621a4c2c577d72f37b74175df5c645dc6df6befdd6b090044","6d575187149a38a8d06d986e6d8111aad796785dd57847672f01ba07987c8e3d","24a1a5007809de3b55b5f86ae8dac8a71f262d508595a04d8de76f692cd127b0","fa86e3bc784007bc882fae99c86e418a4a9cd7b04ed0a0cf7681dffc1691d457","63db3f21f835af9dfa90829a54ba11a5f34c9fb9f73a235d603d5705c126f7bb","784bc5b8e59656ba80407006462b711cc22c1a4af12ad208bbd3db6d0ca88985","ff401934e697ad0ed806d832f8da74a70b23710b867e6ef5fad660256701ec3a","c523378d3aa12273db8ccda1879bc645b76161b32bde7060c7381af113879312","0978a657928f15fd8da7e16de14d623e26adf33a576da06f3aa5bbf26feb58a4","620eb794284994dc6aaa3b79d8dd85b0864e2d1d27aea1031a92828c04abc2ff","bbb47b581e8e5495c1754b066202d24f762fd7fccfe1fcc443aec07c992cc229","0940279b6cdfb51032bd6bb0b02c3a4ac2b0a73e380d6c48bf8b503d0de08350","06ae8b7ddac3aff63085a4c6384557b36ef61075aa6c5173fdf3834b19a702d6","b5b49a989ba1e33c2d84afe92eb47029b57df7c14a226468ca0b34c65f995a91","123faae41302f418a4fb196c0f966869b09d9bd4193a2040f52f4c28132fbd2d",{"version":"20b3cef9057cbb84bc26e06a7fbc9d6758b9bfad19ce61f0dcd22deb4c823762","signature":"908e1de40e84c7fbdf44c0b80582041db4cbc7133915c3928cd75a726e858aff"},{"version":"00774c043f02ef2cf76ef9a2757b611848d81826d79c25ea95151792670a51dc","signature":"7d7a93dfef27cf7a6adfe1c0f1f7713ca88e6442abe07cf39dd6b7286e9b5133"},{"version":"8505fd6d34da482da39ed2d3f0b59c7769af1ea2df88dcacde4a1f14aa401467","signature":"fc0a6c67fb7f7bcb972d696e29391a931c09d4cc393290de377ad204a9fa283b"},"f97edc4d3b4dd0b32766e9633086497565c37657fb591cc84a35864db4bc2fc5",{"version":"ef72bceeaa54357b1486acf6f7c63ad04dbede4114636b1679bd908157dbbd4b","signature":"ef52b5aae21dfc9642e92dbbf9cea99719342945560fdf051dca83c023561125"},"4f1034eac6404cb69bedb8bb04cf246871d1aaebbb99d5617be54f54323464c7","724eb35fdcfa2ad686611b3a8a9d704ad0d478539a8cf0089176e0b8047f7190","d71be3ec7ca8cf9aaf6a8b68653dd3b7d988678edc120a640fc0307967486cc5","2e04271499caec54dea75e7061de06b2549efbe1d652b9bdab2f74fd2572f61f","1ff629fa3143ee21b79808fa332a1dda4821f466bf149f867de03b5f601d5b78","0b2fe702dda65d25d5e00ec95fc8952036e7e75870c376abeb2cd2150b0a3bed","a9367ec48d3b67800c69c890e616337935df67caad5bff99383949af561042a8","5c1a8d6754a7cceee2135728e8ce6a4f984966a2d16ff1cbed879f7527d55864","a99add785a8a06f19582501ca19e92949f6b840b3f91d880e73582c5efacccde","5a7bb8afd0a22b7754275793f5ca5aeea379a2aad6153a6d68af49a60a899f69","a604c1ae24a48ccdb36396f49a20677d32722f8fd461dfb47186a5b12fd88d60","259c58ced9d80f66a61362a8768529a2746a2bc80183cdb04726f610913bb5d5","b14456a54e15ce24ff9e5ad3b70675b104a36eb35886e3ffaae614292c0908c4","ed01aa50ff4fdbf0f6857596fc385587d87da4896c7980ea75527e098031c488","9e5aef3efc63316ce7aa61b137d354449f792ab92885d03c8894b239db75d90a","8a6c15bfa2a0a9e68005a53fb71b60f3769af0da81001b95e4861310e260b788","aaffeca0d82a3d862c5186af3ca707801e45cc8b2e7d31e430eb715648ffa839","b50ed094a883cb6ca89095696be30302a15d507f03fdbb902ba01b64c943092f","57b4808f1dbe3293850788ae24e6038a1018ece7a2a7e9ff6dd15a89a7db2878","2bb082ffba536b1b02ef29ab5d3e85475e07a36ad320445ab67771f086637009","f0dba83012330de335b3ce5dfd1dba0d7659969c7c71e512e9cdbc5e8089ecfb","5ee9c8269d8ed13f7ec399ba3944b0801c27a746fd8cc501a1490a3ace81bed2","101f51dddd02f4b6d6f0dfb9d23ac9ec106af7a0ff8023153fcfb5fac333e883","4ad326182c068487341311ac12c6a277f313a59914aefcc08beba6c49f2e6ff7","6543bbb0268634d506ba2390a8b2a572995133fff298c05f148d45b278395ec8","df63fd6feffe490dec868b47b8c5685aa3d67f6a38b0fee06041b18055c721aa","70c3f7d09710189ff7e62207efc405b2adde761f445e918f6fd65c744cac977a","a171ae4321e9267df3a86b743576a1ab59e35b5fa4e008be1a424c8301a34971","293481b9fbfc2f288c229e2c2a20e1714551635fd40fbcc73a3a11dcc7c4bbcd","b2e699380412968cc77a4a5887ec890aecb06d31ca74a83dbb29c4d538d6f8b8","d613b13bc2439d7e0928055e772527d5f9087888a0529277687c19e8605be727","1d8c28b0ee294d886eaefeeaca8d986e581f4057a1f08015a7d47e4eaf8cd78a","4c2c4f53e8eedd970f8afa369d7371544fb6231bf95e659f8602e09abe74d5a5",{"version":"dc5f6951bbf5b544349cbdef895c08dee6929818abd27d7d53c38cf1209091b3","affectsGlobalScope":true},"64e2803203b14d7f104f570f2152fde13abb6edc17b2ddb33d81ad86cf43d494","2c8d9e3331aec52d9a6d4040352c00282c3abaf48053ed0944528a4845c9caa3","9b2a8f604e7c0482a9061755f00b287cc99bd8718dc82d8207dd74c599b6dc43","d0fc76a91c828fbe3f0be5d683273634b7b101068333ceed975a8a9ac464137b",{"version":"1a048ff164b8d9609f5de3139d4e37f6e8a82af82087ac414b9208f52ef8aac7","affectsGlobalScope":true},"3111079f3cb5f2b9c812ca3f46161562bce5bfb355e915f46ed46c41714dc1c3","64576aba4ff801004122056ccd049f0597aa471dcfd7670a6a0b877ee8dd97c0","b32b6b16cb0bda68199582ad6f22242d07ee75fac9b1f28a98cd838afc5eea45","4441ee4119824bfaebc49308559edd7545978f9cb41a40f115074e1031dde75f",{"version":"60693a88462d0e97900123b5bf7c73e146ce0cc94da46a61fe6775b430d2ff05","affectsGlobalScope":true},{"version":"588c69eda58b9202676ec7ca11a72c3762819b46a0ed72462c769846153c447c","affectsGlobalScope":true},"cc829932ffaf5c49092f878bec18af1fa5d8591b45a45e2b7f757f793cb3b4ed","47db10fdc4e76c4f4598cf7c91ba6bfde6cf6d8082c51860fe751643bf359739","05d7d95e24bc2897bf20ce041c3dc3cca814e07148a93999145b1a0ad491094c","d1080e49778c0b2ce656042ebfa43f89dffb96ac00f86a34762188a21857ffd4","0ce99c641ea20b0c0c09d093fc28f18f5ab31dc80033707a1ac3154399de2559","f0c33a0b325d3499cc9aded7d32886f998c9a27b465097c6cc136944d0aafdaa","44e42ed6ec9c4451ebe89524e80ac8564e9dd0988c56e6c58f393c810730595d","03c91e8833eef54dc44db99d7deb469b5e3cec82f23054b4286a2380e0e00996","1606ea615c0a5ea9f5c1376a33e34c0e1112e8dee31a5b3b8a74ce781893aa6f","9fef9de633d01cb7f01f68195626a890ededd25cf96a1e785617d08c8668230d","4455c78d226d061b1203c7614c6c6eb5f4f9db5f00d44ff47d0112de8766fbc4",{"version":"bf89ceb26132596b859cd4d129ce3f447134b444dec87966ba65cd7e8e9e0cb0","affectsGlobalScope":true},"4465a636f5f6e9665a90e30691862c9e0a3ac2edc0e66296704f10865e924f2a","9af781f03d44f5635ed7844be0ce370d9d595d4b4ec67cad88f0fac03255257e","f9fd4c3ef6de27fa0e256f4e75b61711c4be05a3399f7714621d3edc832e36b0","e49290b7a927995c0d7e6b2b9c8296284b68a9036d9966531de65185269258d7","a11d4ba43bf0825d7285d54dec6cb951685cd458a4de3c5c1800f7cbf7799009","874ca809b79276460011480a2829f4c8d4db29416dd411f71efbf8f497f0ac09","82e1723b20fa0b15a7da0d1a03fec88348f82f640f7a2f308d6c0fac780cfc7c","e0202c3e09775b86b902f21623e55896cea98750efbdf0691ca7473af06fe551","23a28f834a078986bbf58f4e3705956983ff81c3c2493f3db3e5f0e8a9507779","4febdf7f3ec92706c58e0b4e8159cd6de718284ef384260b07c9641c13fc70ce","a2666b43d889b4882ac6ede1c48128bac351886854e94f832b20d3730e5062c5","7335933d9f30dcfd2c4b6080a8b78e81912a7fcefb1dafccb67ca4cb4b3ac23d","a6bfe9de9adef749010c118104b071d14943802ff0614732b47ce4f1c3e383cd","4c3d0e10396646db4a1e917fb852077ee77ae62e512913bef9cccc2bb0f8bd0e","3b220849d58140dcc6718f5b52dcd29fdb79c45bc28f561cbd29eb1cac6cce13","0ee22fce41f7417a24c808d266e91b850629113c104713a35854393d55994beb","22d1b1d965baba05766613e2e6c753bb005d4386c448cafd72c309ba689e8c24",{"version":"2708349d5a11a5c2e5f3a0765259ebe7ee00cdcc8161cb9990cb4910328442a1","affectsGlobalScope":true},"2a7d39ea70e483d3ebcde44031b6552940f295349bee8d486e8bdf6380162302","559c8c6979e9c6d649b26a0f56f0b6f1080606a0e8ea537a0099537c6b10584c","3b1c4e120e1050d6a4203fcdd82b561d9ce6cbf45d48d3837450a7b78919fd59","667c77aa756d8e4547eb170ccc0f2cb39852130c94eb299491b45008210ae681","126c87faf0c84b1326c3863ce2235b6a47dc2e548c3aba754c2d3eed16d7eee8","a63605647d8d06e31298d7e04ede8e4775f9b10c51955de611e7207681a39012","a11288edc8161f664148ea7d56101517e380335f5fa1a94408db86efce025bba","bf251d1b5d75808de56817d1e7171c41fc3ff6f0ec7ef26880b42718837f3269","83b664d4b744eebe3a9f2b89a087a101eab7716897fbe8d1573605c829d503b3","09b60809150198c82ef8403a224b3f42972e0cc0e602f23a039e67e0cc65395e","bca6a6dbd9b812c78412c99cdf95b1efeaf0a11a8bc7d1377b5975004b3c7461","ddbcf5d5e813c14aef7e7fd080a7ded8dd92f415f404e90db1e1ca26803a7fb8","38890097ed1f7a144f3843c8389225402880fad2b0bbc261b0009e08451e3e5e","3e90a5c7b3a5eb2fd4cca32800099b96c53975befcf531d22f58af0a349ca8fa","66df455ab2faa0297870ec4892d1d30a1f4dd2d916a71c31fedfc048bb6a46d3","6f084c9b51cf855fdc91b51391a6612c109129662aa14fbafb7576ddd240e5b1","82b1d07ae1b435ece4158b5e1aacedf6b87d831e86b502a3223c5c9d31a379e3","e2c5555bde2d5cfaf74be2dc95df124d31e07773c5f7b71ec00e59b1d83b317c","3b4e3028a3033b5313678a08b1318dcd67958c283795b11775bf652c81872aa3","0b71dca9b21ec57b772fbf3f92288b8e927369a695e4d2911872dd4b31e8f10d","35e5a424566d1feef9466f6548ba973dfb48e04bc84e60b2864c633871c8dcf7","3112732f672f111fb27a25e6f91e3244e4d2ba9fef0d78047af0f1962c1e5cf5","81880ef56f25ebe21bc424e58bcf26115c88ade92622712255db482e83fb857b","4fb207ffb1e31e797fc3624ff1b2d2e5d735bed27159569422d0c55d5b9d7e63","00fd710328ea09b37be5a89915c41f2441f510eb7a654493fdf192fa326a7934","81231616be6296afa6a0ef42d5d4b1d97cb12d03da179977ca53729b8067590e","3d73c0cceb85500f58a68fd612960de3fc02e29584a922d47fb90b25c545f59a","2ed55bebe5bd77bd9e833ee2a0ea3bd8e7f13912664970ca33576125b512518f","ebfb2377dfe2619b3ee174c50f3c2bd5992afe514196ae729e4036978167073f","603bafdacee4c8850ef5820f8642a817a3f0db6f76dda0474bcf3d17c2e15398","c9f3acafe93d87730f0eee0420fc3bad8ef81b39ddbfbf0cbfea203421d15daa","07fcb44ddde9ffcfe9513d738af55897cd600aa0a36f53ba07aa8b62aff18d68","cb5d1d79d134a5f61da67c4d391684fb470c0f09863ed72f3c634ae94b734b24","db28b18589edff23101c70b1968b03bcb21501fcbe57968cb91a0a296a7eb96d","3732d44d711dae672362bb2b8e2a80a559364de25bffed8515b58f60dfa640a0","ced773f978d3d11778cecf4b5437ace0c1d46d2cb5515a2c3f25ade4934586ae","715061f59d8ac60579d82f7721a437a27e9e7df50cfdc2ffed14a39708115b94","d765859f0b2d468824042353025437387d6bda1e3b12e9dc6e8ae35f67fd6764","b394feb35c3e72c0c2b84951ab0581ec9ba5e0ef0b8d4a5a049c820f609c75d0","f7aa5827bdbe877de2599d9ee72f39b2c6eca67b45c4e505d22d024de2c229ab","5ca55de2925267026b30bc897b76d7e046c242389fb5b4f9aa502db8e0ffd329","ba13a968b86a2b7ef873a877f9b4edeace565a1b3afcbe8d6f5c6e69af7e5153","b318839b121e9270b4fa612339e8b40c172075fbe14a3913218878bffb872940","f64e159e80bcc8fdcb26b7a77cde9e828ba8c8ad50c96799c8208334812c0d1a","906f0a7a17ba8c69d04365c03ff1564a7f044979fc9b73edd587b83b05773e0d","066be59745757a17fe356cafa61032fdacc68dd2cb6cb5fdd38944a94b195616","eaf657334c12912b4824dba19c77920dd48045b70db516824adcc38732493cd2","9a4632f4a3f753b6b79f2b44d80d941309f9ddfff00768897a5e1c9d96cdfefe","5159ebb099bc8c5e9a3e7f359614cfcb6f835fb865623ceba91ccc8cbc36fab7","82b4045609dc0918319f835de4f6cb6a931fd729602292921c443a732a6bb811","f10a176bcf3a0320f5137c6fc1da2d9b7347f8e2852a0ca5802a0ea9aac2df4c","dd5bab97b9f2d5dec2796fa4ff1b6db7221dfc9158f4e81cf9bcef8750dc32ba","1c33a2766d210aa58703a1fb9d51c0c49fb0f98495974847870f2f090df9e52a","d1f8a829c5e90734bb47a1d1941b8819aeee6e81a2a772c3c0f70b30e3693fa9","5b72289be070b453bd726f2c506b76c47d72a1367da4bd96e5934a768b25e72b","fa3557813cfdccc7bc9106c5ac4a2a576bb1527e1647feece720f2462b7cb471","2aecdf4c41fd1b41640056860143ff80e8b40260596816a90353e3241ec69459","694732c2d97482b4595329d4ab2db04523898344f3566d0b8d8fb60e87c7f199","c9550bd491ffe94f66d69691afe8ee365ed42ab95c88d302620d9535e63bfd03","7c824d189b60f30160e781ea02b7727f4d0a26bd91092f2b23076f0842894ce9","37697f4c9e03ee6abc33aa24d4cdba0cc753ae0484f805537733d726aed16dfc","822474a8bfb67ca638df2e50a8f6dc53556cb92d59e64a704f6f2c360f853cb2","cfbc8188baff08678daa48eebab228322e93233e7ff9d3c2bcdb6d39fb48fb2f","788818b442c6190918c77934e8f865ae6638d6542c6c4b214eb00a5443a1d1f6","84046aa78ecfa0dc6e4ff95d6fe2b074e1eb9beb365969a17390cd182668c73a","768b1b32a0873f577248ae195faead025047484d8e095c4b2ccc8158ff6bb27e","031aba977b343defcb2feb30d14ad412f7bac487f3efffa40c6c39f9b6e5aa6c","6d6f0cfc56416c833e6ad4f412a1317fcc7080a6a428404db874a0aad4ac0ae9","72be668a833df00839fc3be968c1f38e0503e7c867de89f2128bcc2883d90aee","f1f4ef3c826dde981a7c6f31e50d5dbb2f500618307e6bdd7441e77bda2b3e31",{"version":"65f19d5718e9f52fec632bd968e235a7d864f1d5ce5a0f677ebc9d35c17745f4","signature":"3dd568c4786d262686878339911d7b9b1efe57c9cc42fe9a9a3cab77d748b307"},{"version":"4e53b688fb3714c644db6a8f4b410dfa56a886d83ef2d9b39c1bdad838ec10ab","signature":"9f8f0f21b22a8d3c192278fdca2fb13ec43274e13edf06aa6ef47195ac491a76"},{"version":"7cabaf6c1295731331d91ec49658a3c7dcf3a9392a2851790077344e7168c03c","signature":"43e818adf60173644896298637f47b01d5819b17eda46eaa32d0c7d64724d012"},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","a00c25212ed7b455613fe17507ae3a30662ca2b51ab331bb54b28d803b652d8c","e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","a01a37a9992e93550d9d0b184eb6727b7fce8c11bb46878ad20cbf7f731e1e33","bc9d1a62f3ab938e3ac66b85363c8f1ec1c5b9cf32e5d393f7b14209b4811c48","429d2e0d28ec8be13ebc5e0b389f34e0622d435c88ec5efe408c4d82e17f37c9","6bb7cbba94c9a5c43add2e17d93d04da08e51a69d412e9d1afaf130f4624e91a","7b8f96d5fda0ce8ba9a9203090136175aeba9408eba089756c0b94c740c54429","67444330be1e766248afa0e4141b26174f774e6f44a361d7f880f70a31faa8c5","20a7c38106251e185b3a37d58586fbcd085f8b2d7c757727de8d50c219984b7b","004678b644cdb4615ac6cda7b2d285d0eb850e55eb53da47e8c1325cba362bb9","4205ae686b67d9dea3bff36ff28888ebfd278ca09ce45b66918a6420b26a09cc","d12b75f884942952f25c2e9d27d4ac149e518286167c78a292deb89b59f65b22","0dad26ffdf5cae28cb67ac9c0ce06c7ec732001b01046f47eeaa4ee5a3655f5d","a3083d0ef2ab7bd00f400ce61035ab38f211cd848ebca9164d7410afeed9fad7","4194cc6e823aa830a71c733b18d0de1c29323b102c6460e9fe835ac5f8b8a9ba","4ff4add7b8cf26df217f2c883292778205847aefb0fd2aee64f5a229d0ffd399","420878898a89ebc3515fb87bbfd6662f0432fe918652669414b584c2540e3bc8","c24e2fddbca24f0b63d0b82e5aca4da50c8c591566711be7260c900c97d7c9f2","f4922a1814e47fdb4d93c2cf27968ea30c174e04d4a3374774046a9307dbbaf0","bfff1bb349423cc262a88775d8233f7ea2b87d66ba1f0631eec0c30bea097dd5","a177f76c040e29b9c31adfc93225c273828ff784b592bf56c6131771e624f628","06236dfec90a14b0c3db8249831069ea3f90b004d73d496a559a4466e5a344a4","19c08e1ce502625c711682ec21495ca47ca893b21f346621e7a175bcd677335f","5d36c521b96ba0d4b98919ca833c8cc62f1f225d40467122ba561a2c5553ab80","ea79b4e194a5864c9540003c4eca742d5602ff1399e443a315e2789f39d8c8a3","2b3046d66390c6447811adc06be3b085a7f396c53a7a4670d11159672d5aeb15","0aaa0e1d10349bc24bdee9dd2bca420741f1deb7028c7a17a2b9d5df2f5d9d63","dd289cb306f619c7844ff82fec02badc571c6ed66c7da72815239647febee137","754fb3e7737eb1feb7fcf4902e925cae8c050dd134819deb25ae3ed6843b7dd1","f05c1be0c5bf0e983941f9f75a43297b04730393d0bdabc687066d8b1d6b8d16","a97972e1e9b4bc5d31380c695b7a827c014bd042ec17369bc4d920a1fab7d47b","b5740b8d4723dcdc408195835a52cc83501b1f44399e3104eb4677b082c8973e","feb17c6ab54766cb447ed7efa1da2eacfe289d024da02eb0171fc072704f9be7","dd50796be484a4f4f3733dd67d0a829d93c5b6dd678552d40683f89e6767706c","288fbc46929c0e9d9cab822bfcd1e6d7392baf211a067a349052a7a6fbc5a4ca","b12effb4e275d1e3516506c030f4046283cc7a4d7e2b4e316b4397446444aa22","c173eaede09d9f153a0cb1c51ffe5cba7408f46a4e1187095cbf20b8f68d1dbe","66738976a7aa2d5fb2770a1b689f8bc643af958f836b7bc08e412d4092de3ab9","0751ea9602b019c630c160aa81c6d59495f0119123d171f2351c9907cd3440d7","ea7abdaf48601d8d84e0962f628f61d3738637ff26f2362c90f514a337bc8305","3809c600654ed5b6bdce015f7110d40a75e402e59de80c12b622b925f44a8599","cec3cf5159f51f7725d5b06b631996fef4863d8f5c237b8a3f9a18f5570c8286","47ffa0bd85219fa1551c7cb128e3e1b44f980c9eb5baee26b0164db191ab917b","bb7de140ec25957e693e6b48de186b7229653d5c683fe7bbd1d24bcc66a86a15","33db1b492d92effbcc562388b6d448e28e8304d6a926f513dd760a6bc4cba2b3","1fb953457dd536fc72146ebcb0ccb0821cbb92c2287971efd2cf9fb39eafdf74","b7917163a8867f4c952a8968ae0157bb52461b739ae96727e36699715f9b014f","35c3631308ca05a1cac7a31b6a3d2a68442cdd2315adfb476d0461dea2cac030","9374467738dc5d3353795e0bd305b6b75479674f968c97f05e1eb60a16b52d9d","acbb182621c18e2bb48d82c5a4ee3a7d47b4f5db5c6986f8594fdd1432c88dd4","0359682c54e487c4cab2b53b2b4d35cc8dea4d9914bc6abcdb5701f8b8e745a4","96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538"],"options":{"declaration":true,"declarationMap":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"module":1,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","sourceMap":true,"strict":true,"strictNullChecks":true,"strictPropertyInitialization":true,"target":99},"fileIdsList":[[50,51,52,53],[50,51],[50,51,52],[50,54],[51,56,57,58],[51,56],[51,56,57],[56,59],[61,258],[129,142,143,249],[242,243,244,245,246,247,248,250],[249,253],[129,243,249,250],[249,251,252,254,255],[143],[129],[129,242,243,244,245,246,247,248,249,250],[129,142,208,209,220,233,236,241,242,243,244,245,246,247,248,250],[194,195,196,197],[193],[129,196],[198,201,207],[199,200],[202],[129,204,205],[204,205,206],[203],[129,210,211],[129,193],[210],[210,211,212,213,214,215,216,217,218,219],[129,215],[129,210],[129,232],[129,229],[230,231],[129,230],[234,235],[129,234],[129,188,190,191],[129,187],[129,189],[192],[129,237,238],[237,238,239,240],[221,222,223,224,225,226,227,228],[129,130,131,132,133,134,135,136,137,138,139,140,141],[115,117,118],[115,117],[116],[114,115,117],[112],[112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128],[113,116],[119],[114,116,124],[115],[114],[65,89,92,95],[88,94,96],[88,90],[89,90,91],[88],[102],[96,102,103,104],[101],[88,96,101],[88,97],[96,97,99],[88,98],[88,93],[95,96,98,99,100,105],[72,73,75,78,82],[66,67,71,72],[72,76,77,78,80],[66,67,72],[70,71,75,79],[66,67,68,69,70,71,72,73,74,75,76,77,78,80,81,82,83,84,85,86,87],[67,74],[72,75,78,80,81],[66,67,70,71],[67,70,71],[68,69],[83],[263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,295,296,297,298,299,300,301,302,303,304,305,306,307,308],[263],[263,264],[263,270],[263,265],[274],[263,279,280,281],[263,283],[263,284,285,286,287,288,289,290,291,292,293,294],[144],[146],[147],[148,156,157,164,173],[148,149,156,164],[150,180],[151,152,157,165],[152,173],[153,154,156,164],[154],[155,156],[156],[156,157,158,173,179],[157,158],[159,164,173,179],[156,157,159,160,164,173,176,179],[159,161,173,176,179],[144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186],[156,162],[163,179],[154,156,164,173],[165],[166],[146,167],[168,178],[169],[170],[156,171],[171,172,180,182],[156,173],[174],[175],[164,176],[177],[164,178],[170,179],[180],[173,181],[182],[183],[156,158,173,179,182,184],[173,185],[62],[51,63,64,107,109,111,257],[51,60,61,107,108,256],[51,55,108,110],[60,107,108],[106,107,157,165,166],[108],[106]],"referencedMap":[[54,1],[52,2],[53,3],[55,4],[59,5],[57,6],[58,7],[60,8],[259,9],[250,10],[242,10],[243,10],[244,10],[245,10],[246,10],[247,10],[248,10],[252,11],[254,12],[253,13],[256,14],[255,15],[143,16],[251,17],[249,18],[198,19],[194,20],[195,20],[197,21],[196,16],[208,22],[199,20],[201,23],[200,16],[203,24],[206,25],[207,26],[204,27],[205,27],[209,16],[212,28],[215,29],[213,30],[220,31],[217,16],[218,16],[219,32],[211,33],[210,16],[233,34],[230,35],[232,36],[231,37],[234,16],[236,38],[235,39],[192,40],[188,41],[190,42],[191,16],[193,43],[239,44],[237,16],[238,16],[241,45],[228,16],[222,16],[223,16],[224,16],[229,46],[225,16],[227,16],[226,16],[221,16],[130,16],[131,16],[142,47],[119,48],[118,49],[120,50],[122,51],[114,52],[129,53],[117,54],[123,55],[125,56],[126,57],[127,58],[116,51],[128,52],[96,59],[95,60],[91,61],[92,62],[90,63],[103,64],[101,63],[105,65],[104,66],[102,67],[98,68],[97,63],[100,69],[99,70],[94,71],[93,63],[89,63],[106,72],[83,73],[76,74],[81,75],[73,76],[80,77],[88,78],[75,79],[82,80],[77,81],[72,82],[70,83],[85,84],[309,85],[266,86],[267,87],[268,87],[269,86],[271,88],[270,86],[272,89],[273,89],[275,90],[276,86],[277,90],[279,86],[280,86],[281,86],[282,91],[278,86],[284,92],[286,92],[285,92],[287,92],[295,93],[288,92],[289,92],[290,92],[291,92],[292,92],[293,92],[294,92],[296,86],[297,86],[274,86],[298,86],[299,86],[300,86],[301,86],[307,86],[303,86],[302,86],[308,86],[304,86],[305,86],[306,86],[144,94],[146,95],[147,96],[148,97],[149,98],[150,99],[151,100],[152,101],[153,102],[154,103],[155,104],[156,105],[157,106],[158,107],[159,108],[160,109],[161,110],[187,111],[162,112],[163,113],[164,114],[165,115],[166,116],[167,117],[168,118],[169,119],[170,120],[171,121],[172,122],[173,123],[174,124],[175,125],[176,126],[177,127],[178,128],[179,129],[180,130],[181,131],[182,132],[183,133],[184,134],[185,135],[63,136],[64,136],[258,137],[257,138],[111,139],[109,140],[108,141]],"exportedModulesMap":[[54,3],[52,2],[53,3],[55,4],[59,7],[57,6],[58,7],[60,8],[250,10],[242,10],[243,10],[244,10],[245,10],[246,10],[247,10],[248,10],[252,11],[254,12],[253,13],[256,14],[255,15],[143,16],[251,17],[249,18],[198,19],[194,20],[195,20],[197,21],[196,16],[208,22],[199,20],[201,23],[200,16],[203,24],[206,25],[207,26],[204,27],[205,27],[209,16],[212,28],[215,29],[213,30],[220,31],[217,16],[218,16],[219,32],[211,33],[210,16],[233,34],[230,35],[232,36],[231,37],[234,16],[236,38],[235,39],[192,40],[188,41],[190,42],[191,16],[193,43],[239,44],[237,16],[238,16],[241,45],[228,16],[222,16],[223,16],[224,16],[229,46],[225,16],[227,16],[226,16],[221,16],[130,16],[131,16],[142,47],[119,48],[118,49],[120,50],[122,51],[114,52],[129,53],[117,54],[123,55],[125,56],[126,57],[127,58],[116,51],[128,52],[96,59],[95,60],[91,61],[92,62],[90,63],[103,64],[101,63],[105,65],[104,66],[102,67],[98,68],[97,63],[100,69],[99,70],[94,71],[93,63],[89,63],[106,72],[83,73],[76,74],[81,75],[73,76],[80,77],[88,78],[75,79],[82,80],[77,81],[72,82],[70,83],[85,84],[309,85],[266,86],[267,87],[268,87],[269,86],[271,88],[270,86],[272,89],[273,89],[275,90],[276,86],[277,90],[279,86],[280,86],[281,86],[282,91],[278,86],[284,92],[286,92],[285,92],[287,92],[295,93],[288,92],[289,92],[290,92],[291,92],[292,92],[293,92],[294,92],[296,86],[297,86],[274,86],[298,86],[299,86],[300,86],[301,86],[307,86],[303,86],[302,86],[308,86],[304,86],[305,86],[306,86],[144,94],[146,95],[147,96],[148,97],[149,98],[150,99],[151,100],[152,101],[153,102],[154,103],[155,104],[156,105],[157,106],[158,107],[159,108],[160,109],[161,110],[187,111],[162,112],[163,113],[164,114],[165,115],[166,116],[167,117],[168,118],[169,119],[170,120],[171,121],[172,122],[173,123],[174,124],[175,125],[176,126],[177,127],[178,128],[179,129],[180,130],[181,131],[182,132],[183,133],[184,134],[185,135],[63,136],[64,136],[257,142],[111,142],[109,142],[108,143]],"semanticDiagnosticsPerFile":[54,52,53,50,55,59,57,58,56,60,259,250,242,243,244,245,246,247,248,252,254,253,256,255,143,251,249,198,194,195,197,196,208,199,201,200,203,202,206,207,204,205,209,212,214,215,213,216,220,217,218,219,211,210,233,230,232,231,234,236,235,192,188,190,191,193,239,237,238,241,240,189,228,222,223,224,229,225,227,226,221,130,131,132,133,134,135,136,137,142,138,139,140,141,112,119,118,120,121,122,114,129,113,117,123,115,125,126,127,124,116,128,96,95,91,92,90,79,103,101,105,104,102,98,97,100,99,94,93,89,106,83,76,81,73,68,80,87,88,75,84,71,82,66,77,72,70,74,78,69,85,67,86,264,265,263,309,266,267,268,269,271,270,272,273,275,276,277,279,280,281,282,278,283,284,286,285,287,295,288,289,290,291,292,293,294,296,297,274,298,299,300,301,307,303,302,308,304,305,306,310,311,312,144,146,147,148,149,150,151,152,153,154,155,156,157,158,145,186,159,160,161,187,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,62,63,64,51,65,61,110,10,11,15,14,2,16,17,18,19,20,21,22,23,3,4,27,24,25,26,28,29,30,5,31,32,33,34,6,35,36,37,38,7,43,39,40,41,42,8,47,44,45,46,1,9,49,48,13,12,258,257,111,262,109,260,261,107,108]},"version":"4.5.2"} \ No newline at end of file diff --git a/package.json b/package.json index 09bab06..9a0d9f4 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,12 @@ "typescript" ], "dependencies": { + "@aws-sdk/client-sts": "^3.43.0", + "@octokit/oauth-app": "^3.6.0", + "@octokit/rest": "^18.12.0", + "axios": "^0.24.0", "loglevel": "^1.8.0", + "moment": "^2.29.1", "yargs": "^17.3.0" }, "devDependencies": { @@ -52,4 +57,4 @@ "ts-node": "^10.4.0", "typescript": "^4.4.4" } -} \ No newline at end of file +} diff --git a/src/command.ts b/src/command.ts index cae22ae..13825ef 100644 --- a/src/command.ts +++ b/src/command.ts @@ -1,32 +1,103 @@ /* eslint-disable no-console */ // import yargs from 'yargs'; -// import { hideBin } from 'yargs/helpers'; +import { hideBin } from 'yargs/helpers'; // import log from 'loglevel'; import yargs from 'yargs'; +import { ListRoles } from './commands/list-roles'; +import axios from 'axios'; +import { GithubLogin } from './commands/github-login'; +import { NOT_LOGGED_IN } from './messages'; +import { Assume } from './commands/assume'; + +export class Command { + private listRoles: ListRoles; + + private githubLogin: GithubLogin; + + private assume: Assume; + + constructor(private name: string) { + this.githubLogin = new GithubLogin(); + this.listRoles = new ListRoles(); + this.assume = new Assume(); + } -export class Commamd { public async run(argv: string[]): Promise { await yargs - .scriptName('framework') + .scriptName(this.name) .command({ - command: 'generate [moduleType] [moduleNames...]', - aliases: ['g'], - describe: 'Generates a resource', - handler: (parsed) => console.log('your handler goes here', parsed), + command: 'login [scm]', + describe: 'Generate and locally store a token from the SCM (e.g. GitHub)', + handler: ({ scm }) => { + if (scm === 'github') { + return this.githubLogin.handle(); + } else { + throw new Error(`Unknown scm provider: ${scm}`); + } + }, builder: { - moduleType: { + scm: { demand: true, - choices: ['routed', 'stateful'] as const, - default: 'routed', + choices: ['github'] as const, + default: 'github', }, - moduleNames: { + }, + }) + .command({ + command: 'list-roles', + describe: 'List available roles for assumption', + handler: () => this.listRoles.handle(), + }) + .command({ + command: 'assume [role]', + describe: 'Assume a role', + handler: ({ role }) => this.assume.handle(role as string), + builder: { + role: { demand: true, - array: true, + type: 'string', }, }, }) + // .command({ + // command: 'generate [moduleType] [moduleNames...]', + // describe: 'Generates a resource', + // handler: (parsed) => console.log('your handler goes here', parsed), + // builder: { + // moduleType: { + // demand: true, + // choices: ['routed', 'stateful'] as const, + // default: 'routed', + // }, + // moduleNames: { + // demand: true, + // array: true, + // }, + // }, + // }) .help() - .parse(argv); + .showHelpOnFail(true) + .strict() + .wrap(null) + .fail((_, error) => { + if (axios.isAxiosError(error)) { + if (error.response && error.response.status === 401) { + console.error(NOT_LOGGED_IN); + } else { + console.error( + `API Error: ${ + (error.response && error.response.data && error.response.data.message) || + error.message + }`, + // error, + ); + } + } else { + console.error(`Error: ${error.message}`); + } + process.exit(-1); + }) + .parse(hideBin(argv)); } } diff --git a/src/commands/assume.ts b/src/commands/assume.ts new file mode 100644 index 0000000..3b06f31 --- /dev/null +++ b/src/commands/assume.ts @@ -0,0 +1,119 @@ +import { + IDPApi, + Configuration, + GithubSlsRestApiSamlResponseContainer, + GithubSlsRestApiAwsAssumeSdkOptions, +} from '../../api/github-sls-rest-api'; +import { + ERROR_ASSUMING_ROLE, + MULTIPLE_ROLES, + NOT_LOGGED_IN, + TERMINAL_NOT_SUPPORTED, +} from '../messages'; +import { Scms } from '../stores/scms'; +import axios from 'axios'; +import { STS } from '@aws-sdk/client-sts'; +import log from 'loglevel'; + +export class Assume { + scms: Scms; + + constructor() { + this.scms = new Scms(); + } + + async handle( + role: string, + web = false, + org?: string, + repo?: string, + provider?: string, + ): Promise { + log.debug(`Assuming ${role} (web: ${web} org: ${org} repo: ${repo} provider: ${provider})`); + + const token = this.scms.getGithubToken(); + if (!token) { + throw new Error(NOT_LOGGED_IN); + } + + const idpApi = new IDPApi( + new Configuration({ + accessToken: token, + }), + ); + + try { + const { data: response } = await idpApi.assumeRole(role, org, repo, provider); + if (!web) { + await this.assumeTerminal(response); + } else { + log.debug(`TODO: Launch web`); + } + } catch (e) { + if (axios.isAxiosError(e) && e.response) { + if (e.response.status === 403) { + throw new Error(ERROR_ASSUMING_ROLE(role, `Reason: ${e.response.data.message}`)); + } else if (e.response.status === 409) { + throw new Error(MULTIPLE_ROLES(role, `Reason: ${e.response.data.message}`)); + } else { + throw e; + } + } + throw e; + } + + return; + } + + private async assumeTerminal(samlResponse: GithubSlsRestApiSamlResponseContainer): Promise { + switch (samlResponse.recipient) { + case 'https://signin.aws.amazon.com/saml': + await this.assumeAws(samlResponse); + break; + default: + throw new Error(TERMINAL_NOT_SUPPORTED(samlResponse.provider, samlResponse.recipient)); + } + } + + private async assumeAws(samlResponse: GithubSlsRestApiSamlResponseContainer): Promise { + log.debug(`Assuming AWS role ${samlResponse.role}`); + const sts = new STS({}); + const opts = samlResponse.sdkOptions as GithubSlsRestApiAwsAssumeSdkOptions; + if (!opts) { + throw new Error('Missing sdk options from saml response'); + } + const response = await sts.assumeRoleWithSAML({ + ...opts, + SAMLAssertion: samlResponse.samlResponse, + }); + if ( + !response.Credentials || + !response.Credentials.AccessKeyId || + !response.Credentials.SecretAccessKey || + !response.Credentials.SessionToken + ) { + throw new Error('Missing credentials'); + } + this.outputEnv({ + AWS_ACCESS_KEY_ID: response.Credentials.AccessKeyId, + AWS_SECRET_ACCESS_KEY: response.Credentials.SecretAccessKey, + AWS_SESSION_TOKEN: response.Credentials.SessionToken, + }); + } + + private outputEnv(vars: { [key: string]: string }): void { + const { platform } = process; + let prefix = 'export'; + switch (platform) { + case 'win32': + prefix = 'setx'; + break; + default: + break; + } + + Object.entries(vars).forEach(([key, value]) => { + console.log(`${prefix} ${key}="${value}"`); + }); + } +} diff --git a/src/commands/github-login.ts b/src/commands/github-login.ts new file mode 100644 index 0000000..0f79114 --- /dev/null +++ b/src/commands/github-login.ts @@ -0,0 +1,111 @@ +import { JwtGithubApi } from '../../api/auth-sls-rest-api'; +import axios from 'axios'; +import moment from 'moment'; +import { Scms } from '../stores/scms'; + +type DeviceCodeRequest = { + client_id: string; + scope: string; +}; + +type DeviceCodeResponse = { + device_code: string; + user_code: string; + verification_uri: string; + expires_in: number; + interval: number; +}; + +type AccessTokenRequest = { + client_id: string; + device_code: string; + grant_type: string; +}; + +export type AccessTokenResponse = { + error?: string; + error_description?: string; + access_token: string; + token_type: string; + scope: string; +}; + +export class GithubLogin { + scms: Scms; + + constructor() { + this.scms = new Scms(); + } + + async handle(): Promise { + const api = new JwtGithubApi(); + const { data: oauthDetail } = await api.getOauthDetail(); + const { clientId } = oauthDetail; + + const response = await axios.post( + 'https://github.com/login/device/code', + { + client_id: clientId, + scope: 'user:email', + } as DeviceCodeRequest, + { headers: { Accept: 'application/json' } }, + ); + + const { verification_uri: verificationUri, user_code: userCode } = response.data; + + console.log(`Open browser to ${verificationUri} and enter ${userCode}`); + + const accessTokenResponse = await this.getAccessToken( + clientId, + response.data, + moment().add(response.data.expires_in, 'second'), + ); + + const location = this.scms.saveGithubToken(accessTokenResponse.access_token); + console.log(`Saved GitHub credentials to ${location}`); + } + + private getAccessToken( + clientId: string, + deviceCodeResponse: DeviceCodeResponse, + tryUntil: moment.Moment, + ): Promise { + console.log('Waiting for code entry...'); + return new Promise((resolve, reject) => { + const now = moment(); + if (now.isSameOrAfter(tryUntil)) { + reject(new Error('Access token request has expired. Please re-run the `login` command')); + return; + } + + axios + .post( + 'https://github.com/login/oauth/access_token', + { + client_id: clientId, + device_code: deviceCodeResponse.device_code, + grant_type: 'urn:ietf:params:oauth:grant-type:device_code', + } as AccessTokenRequest, + { headers: { Accept: 'application/json' } }, + ) + .then(({ data: accessTokenResponse }) => { + if (accessTokenResponse.error) { + if (accessTokenResponse.error === 'authorization_pending') { + setTimeout( + () => + this.getAccessToken(clientId, deviceCodeResponse, tryUntil) + .then((response) => resolve(response)) + .catch((error) => reject(error)), + deviceCodeResponse.interval * 1000, + ); + return; + } + reject(new Error(accessTokenResponse.error_description)); + return; + } + resolve(accessTokenResponse); + }) + .catch((error) => reject(error)); + }); + } +} diff --git a/src/commands/index.ts b/src/commands/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/commands/list-roles.ts b/src/commands/list-roles.ts new file mode 100644 index 0000000..e74a28f --- /dev/null +++ b/src/commands/list-roles.ts @@ -0,0 +1,28 @@ +import { Scms } from '../stores/scms'; +import { IDPApi, Configuration } from '../../api/github-sls-rest-api'; +import { NOT_LOGGED_IN } from '../messages'; + +export class ListRoles { + scms: Scms; + + constructor() { + this.scms = new Scms(); + } + + async handle(): Promise { + const accessToken = this.scms.getGithubToken(); + if (!accessToken) { + throw new Error(NOT_LOGGED_IN); + } + + const idpApi = new IDPApi( + new Configuration({ + accessToken: accessToken, + }), + ); + const { data: roles } = await idpApi.listRoles(); + roles.results.forEach((role) => { + console.log(`${role.role} [Provider: ${role.provider}] (Org: ${role.org})`); + }); + } +} diff --git a/src/messages.ts b/src/messages.ts new file mode 100644 index 0000000..8d93940 --- /dev/null +++ b/src/messages.ts @@ -0,0 +1,12 @@ +export const NOT_LOGGED_IN = 'To use this command, first use the `saml-to login` command.'; +export const ERROR_LOADING_FILE = (file: string, error: Error): string => + `Error loading file: ${file}: ${error.message}.`; +export const ERROR_ASSUMING_ROLE = (role: string, message: string): string => + `Unable to assume ${role}. ${message}.`; +export const MULTIPLE_ROLES = (role: string, message: string): string => + ERROR_ASSUMING_ROLE( + role, + `${message}\n Tip: Use an exact role name, and/or the --provider and --org flags to narrow down to a specific role.`, + ); +export const TERMINAL_NOT_SUPPORTED = (provider: string, recipient: string): string => + `Role assumption using ${provider} (${recipient}) is not supported by this CLI yet. However, you may request it as a feature: https://github.com/saml-to/cli/issues`; diff --git a/src/stores/scms.ts b/src/stores/scms.ts new file mode 100644 index 0000000..5463b22 --- /dev/null +++ b/src/stores/scms.ts @@ -0,0 +1,69 @@ +import { Octokit } from '@octokit/rest'; +import os from 'os'; +import path from 'path'; +import fs from 'fs'; +// import { env } from 'process'; +import { ERROR_LOADING_FILE } from '../messages'; + +type GithubFile = { + token: string; +}; + +export type ScmClients = { + github?: Octokit; +}; + +export class Scms { + configDir: string; + + githubFile: string; + + constructor() { + this.configDir = `${path.join(os.homedir(), '.saml-to')}`; + this.githubFile = path.join(this.configDir, 'github-token.json'); + + if (!fs.existsSync(this.configDir)) { + fs.mkdirSync(this.configDir); + } + } + + async loadClients(): Promise { + const clients: ScmClients = {}; + clients.github = this.getOctokit(); + return clients; + } + + public saveGithubToken(token: string): string { + fs.writeFileSync(this.githubFile, JSON.stringify({ token } as GithubFile)); + return this.githubFile; + } + + public getGithubToken(): string | undefined { + // if (env.GITHUB_TOKEN) { + // return env.GITHUB_TOKEN; + // } + + if (!fs.existsSync(this.githubFile)) { + return; + } + + try { + const { token } = JSON.parse(fs.readFileSync(this.githubFile).toString()) as GithubFile; + return token; + } catch (e) { + if (e instanceof Error) { + console.warn(ERROR_LOADING_FILE(this.githubFile, e)); + return; + } + throw e; + } + } + + private getOctokit(): Octokit | undefined { + const token = this.getGithubToken(); + if (!token) { + return; + } + return new Octokit({ auth: token }); + } +} diff --git a/tsconfig.json b/tsconfig.json index 5a43205..b119de6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -39,5 +39,5 @@ /* Advanced Options */ "forceConsistentCasingInFileNames": true }, - "exclude": ["api/**/*", "dist/**/*"] + "exclude": ["dist/**/*"] } diff --git a/yarn.lock b/yarn.lock index 613ca7b..af4fcf8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,552 @@ # yarn lockfile v1 +"@aws-crypto/ie11-detection@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-2.0.0.tgz#bb6c2facf8f03457e949dcf0921477397ffa4c6e" + integrity sha512-pkVXf/dq6PITJ0jzYZ69VhL8VFOFoPZLZqtU/12SGnzYuJOOGNfF41q9GxdI1yqC8R13Rq3jOLKDFpUJFT5eTA== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz#741c9024df55ec59b51e5b1f5d806a4852699fb5" + integrity sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A== + dependencies: + "@aws-crypto/ie11-detection" "^2.0.0" + "@aws-crypto/sha256-js" "^2.0.0" + "@aws-crypto/supports-web-crypto" "^2.0.0" + "@aws-crypto/util" "^2.0.0" + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@2.0.0", "@aws-crypto/sha256-js@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz#f1f936039bdebd0b9e2dd834d65afdc2aac4efcb" + integrity sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig== + dependencies: + "@aws-crypto/util" "^2.0.0" + "@aws-sdk/types" "^3.1.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.0.tgz#fd6cde30b88f77d5a4f57b2c37c560d918014f9e" + integrity sha512-Ge7WQ3E0OC7FHYprsZV3h0QIcpdyJLvIeg+uTuHqRYm8D6qCFJoiC+edSzSyFiHtZf+NOQDJ1q46qxjtzIY2nA== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-2.0.0.tgz#17ba6f83c7e447b70fc24b84c5f6714d1e329f4a" + integrity sha512-YDooyH83m2P5A3h6lNH7hm6mIP93sU/dtzRmXIgtO4BCB7SvtX8ysVKQAE8tVky2DQ3HHxPCjNTuUe7YoAMrNQ== + dependencies: + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/abort-controller@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.40.0.tgz#e17299776782483835439d9b1b5300add24adc3f" + integrity sha512-S7LzLvNuwuf0q7r4q7zqGzxd/W2xYsn8cpZ90MMb3ObolhbkLySrikUJujmXae8k+2/KFCOr+FVC0YLrATSUgQ== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/client-sso@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.41.0.tgz#33d49e926ef6fff08278b256454241f1f982d8de" + integrity sha512-xDvcy7wv3KdHhOpl5fZN+Ydw+dHBmsCZwMFI1ZdJVCSGO+ZKgl5KVWi1LCif6vjZP1pUuGl44oDOZz1ACqOzTg== + dependencies: + "@aws-crypto/sha256-browser" "2.0.0" + "@aws-crypto/sha256-js" "2.0.0" + "@aws-sdk/config-resolver" "3.40.0" + "@aws-sdk/fetch-http-handler" "3.40.0" + "@aws-sdk/hash-node" "3.40.0" + "@aws-sdk/invalid-dependency" "3.40.0" + "@aws-sdk/middleware-content-length" "3.40.0" + "@aws-sdk/middleware-host-header" "3.40.0" + "@aws-sdk/middleware-logger" "3.40.0" + "@aws-sdk/middleware-retry" "3.40.0" + "@aws-sdk/middleware-serde" "3.40.0" + "@aws-sdk/middleware-stack" "3.40.0" + "@aws-sdk/middleware-user-agent" "3.40.0" + "@aws-sdk/node-config-provider" "3.40.0" + "@aws-sdk/node-http-handler" "3.40.0" + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/smithy-client" "3.41.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/url-parser" "3.40.0" + "@aws-sdk/util-base64-browser" "3.37.0" + "@aws-sdk/util-base64-node" "3.37.0" + "@aws-sdk/util-body-length-browser" "3.37.0" + "@aws-sdk/util-body-length-node" "3.37.0" + "@aws-sdk/util-user-agent-browser" "3.40.0" + "@aws-sdk/util-user-agent-node" "3.40.0" + "@aws-sdk/util-utf8-browser" "3.37.0" + "@aws-sdk/util-utf8-node" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/client-sts@^3.43.0": + version "3.43.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.43.0.tgz#c3d2dde8f3d3662235fd40f28cac249fa9247b2f" + integrity sha512-4CKYimjhIEixVtJH0Y8FR5FXc7zIepZtfScy8QHgH+DERXm/YL5cuUbkJiL6ZRTpek0vztVvE+mNSQU0z1eXag== + dependencies: + "@aws-crypto/sha256-browser" "2.0.0" + "@aws-crypto/sha256-js" "2.0.0" + "@aws-sdk/config-resolver" "3.40.0" + "@aws-sdk/credential-provider-node" "3.41.0" + "@aws-sdk/fetch-http-handler" "3.40.0" + "@aws-sdk/hash-node" "3.40.0" + "@aws-sdk/invalid-dependency" "3.40.0" + "@aws-sdk/middleware-content-length" "3.40.0" + "@aws-sdk/middleware-host-header" "3.40.0" + "@aws-sdk/middleware-logger" "3.40.0" + "@aws-sdk/middleware-retry" "3.40.0" + "@aws-sdk/middleware-sdk-sts" "3.40.0" + "@aws-sdk/middleware-serde" "3.40.0" + "@aws-sdk/middleware-signing" "3.40.0" + "@aws-sdk/middleware-stack" "3.40.0" + "@aws-sdk/middleware-user-agent" "3.40.0" + "@aws-sdk/node-config-provider" "3.40.0" + "@aws-sdk/node-http-handler" "3.40.0" + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/smithy-client" "3.41.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/url-parser" "3.40.0" + "@aws-sdk/util-base64-browser" "3.37.0" + "@aws-sdk/util-base64-node" "3.37.0" + "@aws-sdk/util-body-length-browser" "3.37.0" + "@aws-sdk/util-body-length-node" "3.37.0" + "@aws-sdk/util-user-agent-browser" "3.40.0" + "@aws-sdk/util-user-agent-node" "3.40.0" + "@aws-sdk/util-utf8-browser" "3.37.0" + "@aws-sdk/util-utf8-node" "3.37.0" + entities "2.2.0" + fast-xml-parser "3.19.0" + tslib "^2.3.0" + +"@aws-sdk/config-resolver@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.40.0.tgz#d7bd3180aebced797800661a2ed778a5db8ac7e5" + integrity sha512-QYy6J2k31QL6J74hPBfptnLW1kQYdN+xjwH4UQ1mv7EUhRoJN9ZY2soStJowFy4at6IIOOVWbyG5dyqvrbEovg== + dependencies: + "@aws-sdk/signature-v4" "3.40.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-config-provider" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-env@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.40.0.tgz#0ca7611f13520dd6654e8eac7fa3e767d027ede6" + integrity sha512-qHZdf2vxhzZkSygjw2I4SEYFL2dMZxxYvO4QlkqQouKY81OVxs/j69oiNCjPasQzGz5jaZZKI8xEAIfkSyr1lg== + dependencies: + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-imds@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.40.0.tgz#7c324eff731f85d4d40763c484e78673aa5dedfb" + integrity sha512-Ty/wVa+BQrCFrP06AGl5S1CeLifDt68YrlYXUnkRn603SX4DvxBgVO7XFeDH58G8ziDCiqxfmVl4yjbncPPeSw== + dependencies: + "@aws-sdk/node-config-provider" "3.40.0" + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/url-parser" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-ini@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.41.0.tgz#a212444f6e4d03c0683ed1b6479bca72eab782dd" + integrity sha512-98CGEHg7Tb6HxK5ZIdbAcijvD3IpLe0ddse1xMe/Ilhjz770FS/L2UNprOP6PZTqrSfBffiMrvfThUSuUaTlIQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.40.0" + "@aws-sdk/credential-provider-imds" "3.40.0" + "@aws-sdk/credential-provider-sso" "3.41.0" + "@aws-sdk/credential-provider-web-identity" "3.41.0" + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/shared-ini-file-loader" "3.37.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-credentials" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-node@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.41.0.tgz#ab4fc10ea6c7a2b42c903f4bdb68fea8ada5f5dd" + integrity sha512-5FW6+wNJgyDCsbAd+mLm/1DBTDkyIYOMVzcxbr6Vi3pM4UrMFdeLdAP62edYW8usg78Xg+c6vaAoEv/M3zkS0Q== + dependencies: + "@aws-sdk/credential-provider-env" "3.40.0" + "@aws-sdk/credential-provider-imds" "3.40.0" + "@aws-sdk/credential-provider-ini" "3.41.0" + "@aws-sdk/credential-provider-process" "3.40.0" + "@aws-sdk/credential-provider-sso" "3.41.0" + "@aws-sdk/credential-provider-web-identity" "3.41.0" + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/shared-ini-file-loader" "3.37.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-credentials" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-process@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.40.0.tgz#b4f16e43ca9c855002e833ac9dc8e409b3c7ca23" + integrity sha512-qsaNCDesW2GasDbzpeOA371gxugi05JWxt3EKonLbUfkGKBK7kmmL6EgLIxZuNm2/Ve4RS07PKp8yBGm4xIx9w== + dependencies: + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/shared-ini-file-loader" "3.37.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-credentials" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-sso@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.41.0.tgz#66c83a776ec42f08b4ea6d619351f0240d57f76a" + integrity sha512-9s7SWu3RVIQ/MTcBCt35EMzxNQm3avivrbpSOKfJwxR5L+oNKPsV+gSqMlkNZGwOVJyUicIsZGcq/4ON6CjrOg== + dependencies: + "@aws-sdk/client-sso" "3.41.0" + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/shared-ini-file-loader" "3.37.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-credentials" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/credential-provider-web-identity@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.41.0.tgz#7f0e9cc5650eaf6ac32ef359fb0e0dea2ca0ce78" + integrity sha512-VqvVoEh9C8xTXl4stKyJC5IKQhS8g1Gi5k6B9HPHLIxFRRfKxkE73DT4pMN6npnus7o0yi0MTFGQFQGYSrFO2g== + dependencies: + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/fetch-http-handler@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.40.0.tgz#5e6ecfb7fe1f32a5709e4e9c13b0536073477737" + integrity sha512-w1HiZromoU+/bbEo89uO81l6UO/M+c2uOMnXntZqe6t3ZHUUUo3AbvhKh0QGVFqRQa+Oi0+95KqWmTHa72/9Iw== + dependencies: + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/querystring-builder" "3.40.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-base64-browser" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/hash-node@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.40.0.tgz#bf4d31a41652cbc3c937055087c80096cfab67ae" + integrity sha512-yOXXK85DdGDktdnQtXgMdaVKii4wtMjEhJ1mrvx2A9nMFNaPhxvERkVVIUKSWlJRa9ZujOw5jWOx8d2R51/Kjg== + dependencies: + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-buffer-from" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/invalid-dependency@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.40.0.tgz#023e37abfb2882676c3cef02da630342634aa429" + integrity sha512-axIWtDwCBDDqEgAJipX1FB1ZNpWYXquVwKDMo+7G+ftPBZ4FEq4M1ELhXJL3hhNJ9ZmCQzv+4F6Wnt8dwuzUaQ== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/is-array-buffer@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.37.0.tgz#aa87619f8172b1a2a7ac8d573032025d98ae6c50" + integrity sha512-XLjA/a6AuGnCvcJZLsMTy2jxF2upgGhqCCkoIJgLlzzXHSihur13KcmPvW/zcaGnCRj0SvKWXiJHl4vDlW75VQ== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/middleware-content-length@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.40.0.tgz#affe235fc0eb43c7b8e21189f85a238fdd0b4c3f" + integrity sha512-sybAJb8v7I/vvL08R3+TI/XDAg9gybQTZ2treC24Ap4+jAOz4QBTHJPMKaUlEeFlMUcq4rj6/u2897ebYH6opw== + dependencies: + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-host-header@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.40.0.tgz#a6a1d52ab0da7f8e65a199c27d71750f8329eccc" + integrity sha512-/wocR7JFOLM7/+BQM1DgAd6KCFYcdxYu1P7AhI451GlVNuYa5f89zh7p0gt3SRC6monI5lXgpL7RudhDm8fTrA== + dependencies: + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-logger@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.40.0.tgz#29d9616bd39dafa1493cef333a32363e4df2c607" + integrity sha512-19kx0Xg5ymVRKoupmhdmfTBkROcv3DZj508agpyG2YAo0abOObMlIP4Jltg0VD4PhNjGzNh0jFGJnvhjdwv4/A== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-retry@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.40.0.tgz#5cffe046b1fd208a62a09495de6659be48ef86f3" + integrity sha512-SMUJrukugLL7YJE5X8B2ToukxMWMPwnf7jAFr84ptycCe8bdWv8x8klQ3EtVWpyqochtNlbTi6J/tTQBniUX7A== + dependencies: + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/service-error-classification" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + uuid "^8.3.2" + +"@aws-sdk/middleware-sdk-sts@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.40.0.tgz#3efefc29176d5078915b61d17105f8bbee86ff5e" + integrity sha512-TcrbCvj1PkabFZiNczT3yePZtuEm2fAIw1OVnQyLcF2KW+p62Hv5YkK4MPOfx3LA/0lzjOUO1RNl2x7gzV443Q== + dependencies: + "@aws-sdk/middleware-signing" "3.40.0" + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/signature-v4" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-serde@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.40.0.tgz#90124ff60a7f23963bbcd00a5cc95862b29dddd9" + integrity sha512-uOWfZjlAoBy6xPqp0d4ka83WNNbEVCWn9WwfqBUXThyoTdTooYSpXe5y2YzN0BJa8b+tEZTyWpgamnBpFLp47g== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-signing@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.40.0.tgz#bcbf5558a91db85a87918d5861ce98f306e40a88" + integrity sha512-RqK5nPbfma0qInMvjtpVkDYY/KkFS6EKlOv3DWTdxbXJ4YuOxgKiuUromhmBUoyjFag0JO7LUWod07H+/DawoA== + dependencies: + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/signature-v4" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/middleware-stack@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.40.0.tgz#5aa614e49a4fc76cc63986fb45302f7afab6db87" + integrity sha512-hby9HvESUYJxpdALX+6Dn2LPmS5jtMVurGB/+j3MWOvIcDYB4bcSXgVRvXzYnTKwbSupIdbX9zOE2ZAx2SJpUQ== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/middleware-user-agent@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.40.0.tgz#bf03d2deddc00689c85e7eadd9b4e02f24b61c08" + integrity sha512-dzC2fxWnanetFJ1oYgil8df3N36bR1yc/OCOpbdfQNiUk1FrXiCXqH5rHNO8zCvnwJAj8GHFwpFGd9a2Qube2w== + dependencies: + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/node-config-provider@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.40.0.tgz#54a8abc4f6d78503093b270e6dff3d6174c59f95" + integrity sha512-AmokjgUDECG8osoMfdRsPNweqI+L1pn4bYGk5iTLmzbBi0o4ot0U1FdX8Rf0qJZZwS4t1TXc3s8/PDVknmPxKg== + dependencies: + "@aws-sdk/property-provider" "3.40.0" + "@aws-sdk/shared-ini-file-loader" "3.37.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/node-http-handler@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.40.0.tgz#26491f11dabbd673c6318376d06af154adc123df" + integrity sha512-qjda6IbxDhbYr8NHmrMurKkbjgLUkfTMVgagDErDK24Nm3Dn5VaO6J4n6c0Q4OLHlmFaRcUfZSTrOo5DAubqCw== + dependencies: + "@aws-sdk/abort-controller" "3.40.0" + "@aws-sdk/protocol-http" "3.40.0" + "@aws-sdk/querystring-builder" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/property-provider@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.40.0.tgz#243cb1e87e36b1123ddc66d40d344e7580f80470" + integrity sha512-Mx4lkShjsYRwW9ujHA1pcnuubrWQ4kF5/DXWNfUiXuSIO/0Lojp1qTLheyBm4vzkJIlx5umyP6NvRAUkEHSN4Q== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/protocol-http@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.40.0.tgz#ce6c7170a59e0a0eb63df5cd7cec87fe05bae680" + integrity sha512-f4ea7/HZkjpvGBrnRIuzc/bhrExWrgDv7eulj4htPukZGHdTqSJD3Jk8lEXWvFuX2vUKQDGhEhCDsqup7YWJQQ== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/querystring-builder@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.40.0.tgz#f57212e60519d2d79ce6173cbe00fbe17a69bc0d" + integrity sha512-gO24oipnNaxJRBXB7lhLfa96vIMOd8gtMBqJTjelTjS2e1ZP1YY12CNKKTWwafSk8Ge021erZAG/YTOaXGpv+g== + dependencies: + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-uri-escape" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/querystring-parser@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.40.0.tgz#5a5ba9c095ad3125a0daf37c33ed1cc8a600d53e" + integrity sha512-XZIyaKQIiZAM6zelCBcsLHhVDOLafi7XIOd3jy6SymGN8ajj3HqUJ/vdQ5G6ISTk18OrqgqcCOI9oNzv+nrBcA== + dependencies: + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/service-error-classification@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.40.0.tgz#c98cbb781bd50e5d90649742ff954d754201c44d" + integrity sha512-c8btKmkvjXczWudXubGdbO3JgmjySBUVC/gCrZDNfwNGsG8RYJJQYYcnmt1gWjelUZsgMDl/2PIzxTlxVF91rA== + +"@aws-sdk/shared-ini-file-loader@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.37.0.tgz#ca595d9745150f46805f68be6a6c1607d618ad94" + integrity sha512-+vRBSlfa48R9KL7DpQt3dsu5/+5atjRgoCISblWo3SLpjrx41pKcjKneo7a1u0aP1Xc2oG2TfIyqTWZuOXsmEQ== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/signature-v4@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.40.0.tgz#9de1b4e1130f68394df3232882805896c2d20e45" + integrity sha512-Q1GNZJRCS3W2qsRtDsX/b6EOSfMXfr6TW46N3LnLTGYZ3KAN2SOSJ1DsW59AuGpEZyRmOhJ9L/Q5U403+bZMXQ== + dependencies: + "@aws-sdk/is-array-buffer" "3.37.0" + "@aws-sdk/types" "3.40.0" + "@aws-sdk/util-hex-encoding" "3.37.0" + "@aws-sdk/util-uri-escape" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/smithy-client@3.41.0": + version "3.41.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.41.0.tgz#61154b4813a01dc079e7083805a20e1bc05d3199" + integrity sha512-ldhS0Pf3v6yHCd//kk5DvKcdyeUkKEwxNDRanAp+ekTW68J3XcYgKaPC9sNDhVTDH1zrywTvtEz5zWHEvXjQow== + dependencies: + "@aws-sdk/middleware-stack" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/types@3.40.0", "@aws-sdk/types@^3.1.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.40.0.tgz#a9d7926fcb9b699bc46be975033559d2293e60d1" + integrity sha512-KpILcfvRaL88TLvo3SY4OuCCg90SvcNLPyjDwUuBqiOyWODjrKShHtAPJzej4CLp92lofh+ul0UnBfV9Jb/5PA== + +"@aws-sdk/url-parser@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.40.0.tgz#9ccd00a2026605d5eaef630e94b6632cc9598ec3" + integrity sha512-HwNV+HX7bHgLk5FzTOgdXANsC0SeVz5PMC4Nh+TLz2IoeQnrw4H8dsA4YNonncjern5oC5veKRjQeOoCL5SlSQ== + dependencies: + "@aws-sdk/querystring-parser" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/util-base64-browser@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-browser/-/util-base64-browser-3.37.0.tgz#4bf105de91e5e17ded644557dac6851c30e992d2" + integrity sha512-o4s/rHVm5k8eC/T7grJQINyYA/mKfDmEWKMA9wk5iBroXlI2rUm7x649TBk5hzoddufk/mffEeNz/1wM7yTmlg== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/util-base64-node@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64-node/-/util-base64-node-3.37.0.tgz#81ff164d227db8faeb910af33ff5f861269d6d67" + integrity sha512-1UPxly1GPrGZtlIWvbNCDIAund4Oyp8cFi9neA43TeNACvrmEQu/nG01pDbOoo0ENoVSVJrNAVBeqKEpqjH2GA== + dependencies: + "@aws-sdk/util-buffer-from" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/util-body-length-browser@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.37.0.tgz#2e3a375ac191a9bacd40a6b3479ee402dcb5769d" + integrity sha512-tClmH1uYelqWT43xxmnOsVFbCQJiIwizp6y4E109G2LIof07inxrO0L8nbwBpjhugVplx6NZr9IaqTFqbdM1gA== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/util-body-length-node@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.37.0.tgz#d6170dafd351799687d583f818a4a3924b61cbec" + integrity sha512-aY3mXdbEajruRi9CHgq/heM89R+Gectj/Xrs1naewmamaN8NJrvjDm3s+cw//lqqSOW903LYHXDgm7wvCzUnFA== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/util-buffer-from@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.37.0.tgz#298d4a925b9f0ca23f99617648cd9fb3896b573c" + integrity sha512-aa3SBwjLwImuJoE4+hxDIWQ9REz3UFb3p7KFPe9qopdXb/yB12RTcbrXVb4whUux4i4mO6KRij0ZNjFZrjrKPg== + dependencies: + "@aws-sdk/is-array-buffer" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/util-config-provider@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-config-provider/-/util-config-provider-3.40.0.tgz#acefff264d6650450a1f8b056a63830a454b756d" + integrity sha512-NjZGrA4mqhpr6gkVCAUweurP0Z9d3vFyXJCtulC0BFbpKAnKCf/crSK56NwUaNhAEMCkSuBvjRFzkbfT+HO8bA== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/util-credentials@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-credentials/-/util-credentials-3.37.0.tgz#76261c3d7c20bee5d28e5c17741adf19558b3b67" + integrity sha512-zcLhSZDKgBLhUjSU5HoQpuQiP3v8oE86NmV/tiZVPEaO6YVULEAB2Cfj1hpM/b/JXWzjSHfT06KXT7QUODKS+A== + dependencies: + "@aws-sdk/shared-ini-file-loader" "3.37.0" + tslib "^2.3.0" + +"@aws-sdk/util-hex-encoding@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.37.0.tgz#40ce21b5ff682e811e98ac7476692ee55ae61493" + integrity sha512-tn5UpfaeM+rZWqynoNqB8lwtcAXil5YYO3HLGH9himpWAdft/2Z7LK6bsYDpctaAI1WHgMDcL0bw3Id04ZUbhA== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.37.0.tgz#e041f411e5e6a235e5bcffacc4b7fa90f25d8d01" + integrity sha512-NvDCfOhLLVHp27oGUUs8EVirhz91aX5gdxGS7J/sh5PF0cNN8rwaR1vSLR7BxPmJHMO7NH7i9EwiELfLfYcq6g== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/util-uri-escape@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.37.0.tgz#42b8393a51dcc04f228e70d1c94c2fe38a738994" + integrity sha512-8pKf4YJTELP5lm/CEgYw2atyJBB1RWWqFa0sZx6YJmTlOtLF5G6raUdAi4iDa2hldGt2B6IAdIIyuusT8zeU8Q== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/util-user-agent-browser@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.40.0.tgz#d9f4f49af35895df260598a333a8b792b56e9f76" + integrity sha512-C69sTI26bV2EprTv3DTXu9XP7kD9Wu4YVPBzqztOYArd2GDYw3w+jS8SEg3XRbjAKY/mOPZ2Thw4StjpZlWZiA== + dependencies: + "@aws-sdk/types" "3.40.0" + bowser "^2.11.0" + tslib "^2.3.0" + +"@aws-sdk/util-user-agent-node@3.40.0": + version "3.40.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.40.0.tgz#76240a4ee05e409ad1267854761c53e746e9bcdf" + integrity sha512-cjIzd0hRZFTTh7iLJD6Bciu++Em1iaM1clyG02xRl0JD5DEtDSR1zO02uu+AeM7GSLGOxIvwOkK2j8ySPAOmBA== + dependencies: + "@aws-sdk/node-config-provider" "3.40.0" + "@aws-sdk/types" "3.40.0" + tslib "^2.3.0" + +"@aws-sdk/util-utf8-browser@3.37.0", "@aws-sdk/util-utf8-browser@^3.0.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.37.0.tgz#d896899f4c475ceeaf8b77c5d7cdc453e5fe6b83" + integrity sha512-tuiOxzfqet1kKGYzlgpMGfhr64AHJnYsFx2jZiH/O6Yq8XQg43ryjQlbJlim/K/XHGNzY0R+nabeJg34q3Ua1g== + dependencies: + tslib "^2.3.0" + +"@aws-sdk/util-utf8-node@3.37.0": + version "3.37.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-node/-/util-utf8-node-3.37.0.tgz#300912cce55d72c18213190237d6ab943e17b5bf" + integrity sha512-fUAgd7UTCULL36j9/vnXHxVhxvswnq23mYgTCIT8NQ7wHN30q2a89ym1e9DwGeQkJEBOkOcKLn6nsMsN7YQMDQ== + dependencies: + "@aws-sdk/util-buffer-from" "3.37.0" + tslib "^2.3.0" + "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" @@ -306,6 +852,181 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@octokit/auth-oauth-app@^4.0.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-app/-/auth-oauth-app-4.3.0.tgz#de02f184360ffd7cfccef861053784fc4410e7ea" + integrity sha512-cETmhmOQRHCz6cLP7StThlJROff3A/ln67Q961GuIr9zvyFXZ4lIJy9RE6Uw5O7D8IXWPU3jhDnG47FTSGQr8Q== + dependencies: + "@octokit/auth-oauth-device" "^3.1.1" + "@octokit/auth-oauth-user" "^1.2.1" + "@octokit/request" "^5.3.0" + "@octokit/types" "^6.0.3" + "@types/btoa-lite" "^1.0.0" + btoa-lite "^1.0.0" + universal-user-agent "^6.0.0" + +"@octokit/auth-oauth-device@^3.1.1": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-device/-/auth-oauth-device-3.1.2.tgz#d299f51f491669f37fe7af8738f5ac921e63973c" + integrity sha512-w7Po4Ck6N2aAn2VQyKLuojruiyKROTBv4qs6IwE5rbwF7HhBXXp4A/NKmkpoFIZkiXQtM+N8QtkSck4ApYWdGg== + dependencies: + "@octokit/oauth-methods" "^1.1.0" + "@octokit/request" "^5.4.14" + "@octokit/types" "^6.10.0" + universal-user-agent "^6.0.0" + +"@octokit/auth-oauth-user@^1.2.1", "@octokit/auth-oauth-user@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-user/-/auth-oauth-user-1.3.0.tgz#da4e4529145181a6aa717ae858afb76ebd6e3360" + integrity sha512-3QC/TAdk7onnxfyZ24BnJRfZv8TRzQK7SEFUS9vLng4Vv6Hv6I64ujdk/CUkREec8lhrwU764SZ/d+yrjjqhaQ== + dependencies: + "@octokit/auth-oauth-device" "^3.1.1" + "@octokit/oauth-methods" "^1.1.0" + "@octokit/request" "^5.4.14" + "@octokit/types" "^6.12.2" + btoa-lite "^1.0.0" + universal-user-agent "^6.0.0" + +"@octokit/auth-token@^2.4.4": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" + integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== + dependencies: + "@octokit/types" "^6.0.3" + +"@octokit/auth-unauthenticated@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-unauthenticated/-/auth-unauthenticated-2.1.0.tgz#ef97de366836e09f130de4e2205be955f9cf131c" + integrity sha512-+baofLfSL0CAv3CfGQ9rxiZZQEX8VNJMGuuS4PgrMRBUL52Ho5+hQYb63UJQshw7EXYMPDZxbXznc0y33cbPqw== + dependencies: + "@octokit/request-error" "^2.1.0" + "@octokit/types" "^6.0.3" + +"@octokit/core@^3.3.2", "@octokit/core@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.5.1.tgz#8601ceeb1ec0e1b1b8217b960a413ed8e947809b" + integrity sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw== + dependencies: + "@octokit/auth-token" "^2.4.4" + "@octokit/graphql" "^4.5.8" + "@octokit/request" "^5.6.0" + "@octokit/request-error" "^2.0.5" + "@octokit/types" "^6.0.3" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.12" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" + integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== + dependencies: + "@octokit/types" "^6.0.3" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^4.5.8": + version "4.8.0" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" + integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== + dependencies: + "@octokit/request" "^5.6.0" + "@octokit/types" "^6.0.3" + universal-user-agent "^6.0.0" + +"@octokit/oauth-app@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@octokit/oauth-app/-/oauth-app-3.6.0.tgz#36f660c7eb6b5a5cd23f6207a8d95e74b6834db0" + integrity sha512-OxPw4ItQXaC2GuEXyZB7EmZ2rHvNFX4y3yAsqdFIRW7qg2HyoEPxacxza6c8wqbEEvu84b98AJ5BXm+IjPWrww== + dependencies: + "@octokit/auth-oauth-app" "^4.0.0" + "@octokit/auth-oauth-user" "^1.3.0" + "@octokit/auth-unauthenticated" "^2.0.0" + "@octokit/core" "^3.3.2" + "@octokit/oauth-authorization-url" "^4.2.1" + "@octokit/oauth-methods" "^1.2.2" + "@types/aws-lambda" "^8.10.83" + fromentries "^1.3.1" + universal-user-agent "^6.0.0" + +"@octokit/oauth-authorization-url@^4.2.1", "@octokit/oauth-authorization-url@^4.3.1": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@octokit/oauth-authorization-url/-/oauth-authorization-url-4.3.3.tgz#6a6ef38f243086fec882b62744f39b517528dfb9" + integrity sha512-lhP/t0i8EwTmayHG4dqLXgU+uPVys4WD/qUNvC+HfB1S1dyqULm5Yx9uKc1x79aP66U1Cb4OZeW8QU/RA9A4XA== + +"@octokit/oauth-methods@^1.1.0", "@octokit/oauth-methods@^1.2.2": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@octokit/oauth-methods/-/oauth-methods-1.2.6.tgz#b9ac65e374b2cc55ee9dd8dcdd16558550438ea7" + integrity sha512-nImHQoOtKnSNn05uk2o76om1tJWiAo4lOu2xMAHYsNr0fwopP+Dv+2MlGvaMMlFjoqVd3fF3X5ZDTKCsqgmUaQ== + dependencies: + "@octokit/oauth-authorization-url" "^4.3.1" + "@octokit/request" "^5.4.14" + "@octokit/request-error" "^2.0.5" + "@octokit/types" "^6.12.2" + btoa-lite "^1.0.0" + +"@octokit/openapi-types@^11.2.0": + version "11.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-11.2.0.tgz#b38d7fc3736d52a1e96b230c1ccd4a58a2f400a6" + integrity sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA== + +"@octokit/plugin-paginate-rest@^2.16.8": + version "2.17.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz#32e9c7cab2a374421d3d0de239102287d791bce7" + integrity sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw== + dependencies: + "@octokit/types" "^6.34.0" + +"@octokit/plugin-request-log@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" + integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== + +"@octokit/plugin-rest-endpoint-methods@^5.12.0": + version "5.13.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz#8c46109021a3412233f6f50d28786f8e552427ba" + integrity sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA== + dependencies: + "@octokit/types" "^6.34.0" + deprecation "^2.3.1" + +"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" + integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== + dependencies: + "@octokit/types" "^6.0.3" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.3.0", "@octokit/request@^5.4.14", "@octokit/request@^5.6.0": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.2.tgz#1aa74d5da7b9e04ac60ef232edd9a7438dcf32d8" + integrity sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.1.0" + "@octokit/types" "^6.16.1" + is-plain-object "^5.0.0" + node-fetch "^2.6.1" + universal-user-agent "^6.0.0" + +"@octokit/rest@^18.12.0": + version "18.12.0" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" + integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== + dependencies: + "@octokit/core" "^3.5.1" + "@octokit/plugin-paginate-rest" "^2.16.8" + "@octokit/plugin-request-log" "^1.0.4" + "@octokit/plugin-rest-endpoint-methods" "^5.12.0" + +"@octokit/types@^6.0.3", "@octokit/types@^6.10.0", "@octokit/types@^6.12.2", "@octokit/types@^6.16.1", "@octokit/types@^6.34.0": + version "6.34.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.34.0.tgz#c6021333334d1ecfb5d370a8798162ddf1ae8218" + integrity sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw== + dependencies: + "@octokit/openapi-types" "^11.2.0" + "@scaffoldly/openapi-generator@^1.0.22": version "1.0.22" resolved "https://registry.yarnpkg.com/@scaffoldly/openapi-generator/-/openapi-generator-1.0.22.tgz#cb8b620c17e6272a29f7563d2759e8db38af7bae" @@ -338,6 +1059,16 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== +"@types/aws-lambda@^8.10.83": + version "8.10.86" + resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.86.tgz#f97d9e2f75f87b03401bcd19737b025ec08de200" + integrity sha512-CH7MtDqW8hAm05alc837XHvqKcrfx/kacc4EyUoyN5PoFK3D0lIfN0GK2WsV6YKU4tUsLTLAVLSyBrcFdHP9Bw== + +"@types/btoa-lite@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/btoa-lite/-/btoa-lite-1.0.0.tgz#e190a5a548e0b348adb0df9ac7fa5f1151c7cca4" + integrity sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg== + "@types/json-schema@^7.0.7": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" @@ -571,6 +1302,13 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" +axios@^0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" + integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== + dependencies: + follow-redirects "^1.14.4" + axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -581,6 +1319,16 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +before-after-hook@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" + integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== + +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -607,6 +1355,11 @@ browserslist@^4.17.5: node-releases "^2.0.1" picocolors "^1.0.0" +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -749,6 +1502,11 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -797,6 +1555,11 @@ enquirer@^2.3.5: dependencies: ansi-colors "^4.1.1" +entities@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + es-abstract@^1.19.0, es-abstract@^1.19.1: version "1.19.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" @@ -1095,6 +1858,11 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-xml-parser@3.19.0: + version "3.19.0" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz#cb637ec3f3999f51406dd8ff0e6fc4d83e520d01" + integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== + fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -1136,11 +1904,16 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== -follow-redirects@^1.14.0: +follow-redirects@^1.14.0, follow-redirects@^1.14.4: version "1.14.5" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.5.tgz#f09a5848981d3c772b5392309778523f8d85c381" integrity sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA== +fromentries@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1373,6 +2146,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -1554,6 +2332,11 @@ minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +moment@^2.29.1: + version "2.29.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -1574,6 +2357,13 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +node-fetch@^2.6.1: + version "2.6.6" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" + integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== + dependencies: + whatwg-url "^5.0.0" + node-releases@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" @@ -1617,7 +2407,7 @@ object.values@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" -once@^1.3.0: +once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -1963,6 +2753,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + ts-node@^10.4.0: version "10.4.0" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.4.0.tgz#680f88945885f4e6cf450e7f0d6223dd404895f7" @@ -1991,11 +2786,16 @@ tsconfig-paths@^3.11.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@^1.8.1: +tslib@^1.11.1, tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -2030,6 +2830,11 @@ unbox-primitive@^1.0.1: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -2037,11 +2842,29 @@ uri-js@^4.2.2, uri-js@^4.4.1: dependencies: punycode "^2.1.0" +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"