port: [#4465][#6560] Allow TokenCredential authentication in CosmosDbPartitionedStorage (#4473)

* add tokenCredential authentication to cosmosDB

* fix ts issues with new version

* fix pipelines issues

* add EOF

---------

Co-authored-by: JhontSouth <jhonatan.sandoval@southworks.com>
This commit is contained in:
Cecilia Avila 2023-05-08 11:31:09 -03:00 коммит произвёл GitHub
Родитель b110344e62
Коммит 192d4b2498
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
13 изменённых файлов: 159 добавлений и 39 удалений

Просмотреть файл

@ -19,7 +19,7 @@ export type IgnoreError = (err: Error) => boolean;
export async function ignoreError<T>(promise: Promise<T>, ignore: IgnoreError): Promise<T | null> {
try {
return await promise;
} catch (err) {
} catch (err: any) {
if (!ignore(err)) {
throw err;
} else {

Просмотреть файл

@ -9,6 +9,7 @@ import { CosmosClientOptions } from '@azure/cosmos';
import { PagedResult } from 'botbuilder';
import { Storage as Storage_2 } from 'botbuilder';
import { StoreItems } from 'botbuilder';
import { TokenCredential } from '@azure/core-auth';
import { TranscriptInfo } from 'botbuilder';
import { TranscriptStore } from 'botbuilder';
@ -64,6 +65,7 @@ export interface CosmosDbPartitionedStorageOptions {
cosmosDbEndpoint?: string;
databaseId: string;
keySuffix?: string;
tokenCredential?: TokenCredential;
}
// @public (undocumented)

Просмотреть файл

@ -28,7 +28,8 @@
}
},
"dependencies": {
"@azure/cosmos": "^3.3.1",
"@azure/cosmos": "3.10.0",
"@azure/core-auth": "^1.1.3",
"azure-storage": "2.10.7",
"botbuilder": "4.1.6",
"lodash": "^4.17.20",

Просмотреть файл

@ -11,6 +11,7 @@ import { Container, CosmosClient, CosmosClientOptions } from '@azure/cosmos';
import { CosmosDbKeyEscape } from './cosmosDbKeyEscape';
import { DoOnce } from './doOnce';
import { Storage, StoreItems } from 'botbuilder';
import { TokenCredential } from '@azure/core-auth';
// eslint-disable-next-line @typescript-eslint/no-var-requires
const pjson: Record<'name' | 'version', string> = require('../package.json');
@ -67,6 +68,10 @@ export interface CosmosDbPartitionedStorageOptions {
* compatibilityMode cannot be true if keySuffix is used.
*/
compatibilityMode?: boolean;
/**
* The authentication tokenCredential for Cosmos DB.
*/
tokenCredential?: TokenCredential;
}
//Internal data structure for storing items in a CosmosDB Collection.
@ -143,8 +148,12 @@ export class CosmosDbPartitionedStorage implements Storage {
throw new ReferenceError('cosmosDbEndpoint for CosmosDB is required.');
}
cosmosDbStorageOptions.authKey ??= cosmosClientOptions?.key;
if (!cosmosDbStorageOptions.authKey && !cosmosClientOptions?.tokenProvider) {
throw new ReferenceError('authKey for CosmosDB is required.');
if (
!cosmosDbStorageOptions.authKey &&
!cosmosClientOptions?.tokenProvider &&
!cosmosDbStorageOptions.tokenCredential
) {
throw new ReferenceError('authKey or tokenCredential for CosmosDB is required.');
}
if (!cosmosDbStorageOptions.databaseId) {
throw new ReferenceError('databaseId is for CosmosDB required.');
@ -322,12 +331,21 @@ export class CosmosDbPartitionedStorage implements Storage {
async initialize(): Promise<void> {
if (!this.container) {
if (!this.client) {
this.client = new CosmosClient({
endpoint: this.cosmosDbStorageOptions.cosmosDbEndpoint,
key: this.cosmosDbStorageOptions.authKey,
userAgentSuffix: `${pjson.name} ${pjson.version}`,
...this.cosmosDbStorageOptions.cosmosClientOptions,
});
if (this.cosmosDbStorageOptions.tokenCredential) {
this.client = new CosmosClient({
endpoint: this.cosmosDbStorageOptions.cosmosDbEndpoint,
aadCredentials: this.cosmosDbStorageOptions.tokenCredential,
userAgentSuffix: `${pjson.name} ${pjson.version}`,
...this.cosmosDbStorageOptions.cosmosClientOptions,
});
} else {
this.client = new CosmosClient({
endpoint: this.cosmosDbStorageOptions.cosmosDbEndpoint,
key: this.cosmosDbStorageOptions.authKey,
userAgentSuffix: `${pjson.name} ${pjson.version}`,
...this.cosmosDbStorageOptions.cosmosClientOptions,
});
}
}
const dbAndContainerKey = `${this.cosmosDbStorageOptions.databaseId}-${this.cosmosDbStorageOptions.containerId}`;
this.container = await _doOnce.waitFor(

Просмотреть файл

@ -146,12 +146,12 @@ describe('CosmosDbPartitionedStorage - Constructor Tests', function () {
);
});
it('throws when no authKey provided', function () {
it('throws when no authKey or tokenCredential provided', function () {
const noAuthKey = getSettings();
noAuthKey.authKey = null;
assert.throws(
() => new CosmosDbPartitionedStorage(noAuthKey),
ReferenceError('authKey for CosmosDB is required.')
ReferenceError('authKey or tokenCredential for CosmosDB is required.')
);
});

Просмотреть файл

@ -57,7 +57,7 @@ describe('ServiceCollection', function () {
services.addFactory<number[]>('values', (values = [1]) => values.concat(2));
services.composeFactory<number[]>('values', (values) => values.concat(3));
const { values } = services.makeInstances();
const { values } = services.makeInstances<{ values: number[] }>();
assert.deepStrictEqual(values, [1, 2, 3]);
});
@ -69,7 +69,7 @@ describe('ServiceCollection', function () {
services.composeFactory<number[]>('values', (values) => values.concat(2));
services.composeFactory<number[]>('values', (values) => values.concat(3));
const { values } = services.makeInstances();
const { values } = services.makeInstances<{ values: number[] }>();
assert.deepStrictEqual(values, [1, 2, 3]);
});
});
@ -95,8 +95,7 @@ describe('ServiceCollection', function () {
it('optionally fully reconstructs dependencies', function () {
const services = makeServiceCollection();
const { foo, bar, baz } = services.makeInstances();
const { foo, bar, baz } = services.makeInstances<{ foo: Foo; bar: Bar; baz: Baz }>();
assert.ok(foo);
assert.ok(bar);
assert.ok(baz);

Просмотреть файл

@ -209,7 +209,7 @@ export function makeTriggers(
res.status(200);
res.set('Content-Type', contentType);
res.end(contents);
} catch (err) {
} catch (err: any) {
if (err.message.includes('ENOENT')) {
return res.status(404).end();
}

Просмотреть файл

@ -144,7 +144,7 @@ export async function makeApp(
await adapter.process(req, res, async (turnContext) => {
await bot.run(turnContext);
});
} catch (err) {
} catch (err: any) {
return errorHandler(err, res);
}
});
@ -173,7 +173,7 @@ export async function makeApp(
await adapter.process(req, res, async (turnContext) => {
await bot.run(turnContext);
});
} catch (err) {
} catch (err: any) {
return errorHandler(err, res);
}
});
@ -200,7 +200,7 @@ export async function makeApp(
await adapter.process(req, socket, head, async (context) => {
await bot.run(context);
});
} catch (err) {
} catch (err: any) {
return errorHandler(err);
}
});

Просмотреть файл

@ -140,7 +140,7 @@ export async function makeServer(
await adapter.process(req, res, async (turnContext) => {
await bot.run(turnContext);
});
} catch (err) {
} catch (err: any) {
return errorHandler(err, res);
}
});
@ -169,7 +169,7 @@ export async function makeServer(
await adapter.process(req, res, async (turnContext) => {
await bot.run(turnContext);
});
} catch (err) {
} catch (err: any) {
return errorHandler(err, res);
}
});
@ -197,7 +197,7 @@ export async function makeServer(
await adapter.process(req, socket, head, async (context) => {
await bot.run(context);
});
} catch (err) {
} catch (err: any) {
return errorHandler(err);
}
});

Просмотреть файл

@ -442,7 +442,7 @@ async function addSettingsBotComponents(services: ServiceCollection, configurati
const botComponent = await loadBotComponent(name);
botComponent.configureServices(services, configuration.bind([settingsPrefix ?? name]));
} catch (error) {
} catch (error: any) {
loadErrors.push({ error, name });
}
}

Просмотреть файл

@ -25,7 +25,7 @@ export async function retry<T>(
try {
// Note: return await intentional so we can catch errors
return await promise(n);
} catch (err) {
} catch (err: any) {
maybeError = err;
await new Promise((resolve) => setTimeout(resolve, delay));

Просмотреть файл

@ -91,11 +91,11 @@
"source-map-support": "^0.5.19",
"sponge": "^0.1.0",
"tinyify": "^3.0.0",
"ts-node": "^9.0.0",
"ts-node": "^10.0.0",
"typedoc": "^0.19.2",
"typedoc-plugin-external-module-name": "^4.0.3",
"typedoc-plugin-markdown": "^3.0.11",
"typescript": "^4.0.5",
"typescript": "^4.1.0",
"wsrun": "^5.2.4"
},
"nyc": {

124
yarn.lock
Просмотреть файл

@ -40,6 +40,14 @@
"@azure/abort-controller" "^1.0.0"
tslib "^2.2.0"
"@azure/core-auth@^1.2.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.4.0.tgz#6fa9661c1705857820dbc216df5ba5665ac36a9e"
integrity sha512-HFrcTgmuSuukRf/EdPmqBrc5l6Q5Uu+2TbuhaKbgaCpP2TfAeiNaQPAadxO+CYBRHGUzIDteMAjFspFLDLnKVQ==
dependencies:
"@azure/abort-controller" "^1.0.0"
tslib "^2.2.0"
"@azure/core-client@^1.4.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.5.0.tgz#7aabb87d20e08db3683a117191c844bc19adb74e"
@ -175,11 +183,12 @@
dependencies:
tslib "^2.0.0"
"@azure/cosmos@^3.3.1":
version "3.9.2"
resolved "https://registry.yarnpkg.com/@azure/cosmos/-/cosmos-3.9.2.tgz#2d4ca87bdef5fa1358f022a13305510691147ab0"
integrity sha512-nS02/LyjE22osouSJGWw6DqJ34tbkEgAcysrbKyDzyiqdDKNprP8sAU43WGVr6Jxjw8jGBzg6rkHz9A+IvPcdg==
"@azure/cosmos@3.10.0":
version "3.10.0"
resolved "https://registry.yarnpkg.com/@azure/cosmos/-/cosmos-3.10.0.tgz#ec11828e380a656f689357b51e8f3f451d78640d"
integrity sha512-B0cVMLy7XvsaL6t2AKn/1KDLfEctnH4AZAqkoDLR3Q+IXWHoZ5BxDWm5URr7PY2tW8igfWWMSiXxStBi6BWuVQ==
dependencies:
"@azure/core-auth" "^1.2.0"
"@types/debug" "^4.1.4"
debug "^4.1.1"
fast-json-stable-stringify "^2.0.0"
@ -190,7 +199,7 @@
semaphore "^1.0.5"
tslib "^2.0.0"
universal-user-agent "^6.0.0"
uuid "^8.1.0"
uuid "^8.3.0"
"@azure/functions@^1.2.3":
version "1.2.3"
@ -1298,6 +1307,13 @@
"@babel/helper-validator-identifier" "^7.14.5"
to-fast-properties "^2.0.0"
"@cspotcode/source-map-support@^0.8.0":
version "0.8.1"
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
dependencies:
"@jridgewell/trace-mapping" "0.3.9"
"@eslint/eslintrc@^0.4.0":
version "0.4.0"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547"
@ -1357,6 +1373,24 @@
"@types/istanbul-reports" "^1.1.1"
"@types/yargs" "^13.0.0"
"@jridgewell/resolve-uri@^3.0.3":
version "3.1.1"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
"@jridgewell/sourcemap-codec@^1.4.10":
version "1.4.15"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
"@jridgewell/trace-mapping@0.3.9":
version "0.3.9"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
dependencies:
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
"@mapbox/node-pre-gyp@^1.0.10":
version "1.0.10"
resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz#8e6735ccebbb1581e5a7e652244cadc8a844d03c"
@ -1683,6 +1717,26 @@
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
"@tsconfig/node10@^1.0.7":
version "1.0.9"
resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
"@tsconfig/node12@^1.0.7":
version "1.0.11"
resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
"@tsconfig/node14@^1.0.0":
version "1.0.3"
resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
"@tsconfig/node16@^1.0.2":
version "1.0.3"
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e"
integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==
"@types/anymatch@*":
version "1.3.1"
resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
@ -1743,9 +1797,11 @@
"@types/node" "*"
"@types/debug@^4.1.4":
version "4.1.5"
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd"
integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==
version "4.1.7"
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82"
integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==
dependencies:
"@types/ms" "*"
"@types/events@*":
version "3.0.0"
@ -1904,6 +1960,11 @@
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.0.tgz#3eb56d13a1de1d347ecb1957c6860c911704bc44"
integrity sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ==
"@types/ms@*":
version "0.7.31"
resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
"@types/nconf@0.10.0":
version "0.10.0"
resolved "https://registry.yarnpkg.com/@types/nconf/-/nconf-0.10.0.tgz#a5c9753a09c59d44c8e6dc94b57d73f70eb12ebe"
@ -2444,7 +2505,7 @@ acorn-walk@^7.0.0:
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
acorn-walk@^8.2.0:
acorn-walk@^8.1.1, acorn-walk@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
@ -2464,6 +2525,11 @@ acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
acorn@^8.4.1:
version "8.8.2"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
acorn@^8.7.0:
version "8.8.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8"
@ -4249,6 +4315,11 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
create-require@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
cross-fetch@^3.0.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
@ -9216,9 +9287,9 @@ nock@^11.9.1:
propagate "^2.0.0"
node-abort-controller@^1.0.4:
version "1.1.0"
resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-1.1.0.tgz#8a734a631b022af29963be7245c1483cbb9e070d"
integrity sha512-dEYmUqjtbivotqjraOe8UvhT/poFfog1BQRNsZm/MSEDDESk2cQ1tvD8kGyuN07TM/zoW+n42odL8zTeJupYdQ==
version "1.2.1"
resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-1.2.1.tgz#1eddb57eb8fea734198b11b28857596dc6165708"
integrity sha512-79PYeJuj6S9+yOHirR0JBLFOgjB6sQCir10uN6xRx25iD+ZD4ULqgRn3MwWBRaQGB0vEgReJzWwJo42T1R6YbQ==
node-addon-api@^3.1.0:
version "3.1.0"
@ -12468,6 +12539,25 @@ ts-loader@^7.0.5:
micromatch "^4.0.0"
semver "^6.0.0"
ts-node@^10.0.0:
version "10.9.1"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
dependencies:
"@cspotcode/source-map-support" "^0.8.0"
"@tsconfig/node10" "^1.0.7"
"@tsconfig/node12" "^1.0.7"
"@tsconfig/node14" "^1.0.0"
"@tsconfig/node16" "^1.0.2"
acorn "^8.4.1"
acorn-walk "^8.1.1"
arg "^4.1.0"
create-require "^1.1.0"
diff "^4.0.1"
make-error "^1.1.1"
v8-compile-cache-lib "^3.0.1"
yn "3.1.1"
ts-node@^9.0.0:
version "9.0.0"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.0.0.tgz#e7699d2a110cc8c0d3b831715e417688683460b3"
@ -12649,6 +12739,11 @@ typescript@^4.0.5:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389"
integrity sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ==
typescript@^4.1.0:
version "4.9.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
typescript@^4.1.0-dev.20201026:
version "4.1.0-dev.20201102"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.0-dev.20201102.tgz#e1978890ac063bb3f13d067067905b312c1e0897"
@ -12940,6 +13035,11 @@ uuid@^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-lib@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1:
version "2.2.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132"