diff --git a/packages/analytics/package.json b/packages/analytics/package.json index 9997d9990fc..6d6c0e72a47 100644 --- a/packages/analytics/package.json +++ b/packages/analytics/package.json @@ -93,18 +93,18 @@ ], "dependencies": { "tslib": "^2.5.0", - "uuid": "^9.0.0" + "uuid": "^9.0.0", + "@aws-sdk/client-kinesis": "3.398.0", + "@aws-sdk/client-firehose": "3.398.0", + "@aws-sdk/client-personalize-events": "3.398.0", + "@smithy/util-utf8": "2.0.0" }, "peerDependencies": { "@aws-amplify/core": "^6.0.0" }, "devDependencies": { "@aws-amplify/core": "6.0.0", - "@aws-sdk/client-kinesis": "3.398.0", - "@aws-sdk/client-firehose": "3.398.0", - "@aws-sdk/client-personalize-events": "3.398.0", "@aws-sdk/types": "3.398.0", - "@smithy/util-utf8": "2.0.0", "@types/uuid": "^9.0.0", "typescript": "5.0.2" }, diff --git a/packages/auth/__tests__/providers/cognito/tokenProvider.test.ts b/packages/auth/__tests__/providers/cognito/tokenProvider.test.ts index 01fe34ac919..2362637a649 100644 --- a/packages/auth/__tests__/providers/cognito/tokenProvider.test.ts +++ b/packages/auth/__tests__/providers/cognito/tokenProvider.test.ts @@ -78,6 +78,57 @@ describe('Loading tokens', () => { expect(result?.deviceMetadata?.randomPassword).toBe('random-password'); expect(result?.deviceMetadata?.deviceKey).toBe('device-key'); }); + + test('load device tokens from store', async () => { + const tokenStore = new DefaultTokenStore(); + const memoryStorage = new MemoryStorage(); + const userPoolClientId = 'userPoolClientId'; + const userSub1 = 'user1@email.com'; + const userSub1Encoded = 'user1%40email.com'; + const userSub2 = 'user2@email.com'; + + memoryStorage.setItem( + `CognitoIdentityServiceProvider.${userPoolClientId}.${userSub1Encoded}.deviceKey`, + 'user1-device-key' + ); + memoryStorage.setItem( + `CognitoIdentityServiceProvider.${userPoolClientId}.${userSub1Encoded}.deviceGroupKey`, + 'user1-device-group-key' + ); + memoryStorage.setItem( + `CognitoIdentityServiceProvider.${userPoolClientId}.${userSub1Encoded}.randomPasswordKey`, + 'user1-random-password' + ); + memoryStorage.setItem( + `CognitoIdentityServiceProvider.${userPoolClientId}.${userSub2}.deviceKey`, + 'user2-device-key' + ); + memoryStorage.setItem( + `CognitoIdentityServiceProvider.${userPoolClientId}.${userSub2}.deviceGroupKey`, + 'user2-device-group-key' + ); + memoryStorage.setItem( + `CognitoIdentityServiceProvider.${userPoolClientId}.${userSub2}.randomPasswordKey`, + 'user2-random-password' + ); + + tokenStore.setKeyValueStorage(memoryStorage); + tokenStore.setAuthConfig({ + Cognito: { + userPoolId: 'us-east-1:1111111', + userPoolClientId, + }, + }); + const user1DeviceMetadata = await tokenStore.getDeviceMetadata(userSub1); + expect(user1DeviceMetadata?.randomPassword).toBe('user1-random-password'); + expect(user1DeviceMetadata?.deviceGroupKey).toBe('user1-device-group-key'); + expect(user1DeviceMetadata?.deviceKey).toBe('user1-device-key'); + + const user2DeviceMetadata = await tokenStore.getDeviceMetadata(userSub2); + expect(user2DeviceMetadata?.randomPassword).toBe('user2-random-password'); + expect(user2DeviceMetadata?.deviceGroupKey).toBe('user2-device-group-key'); + expect(user2DeviceMetadata?.deviceKey).toBe('user2-device-key'); + }); }); describe('saving tokens', () => { diff --git a/packages/auth/src/providers/cognito/apis/signInWithRedirect.ts b/packages/auth/src/providers/cognito/apis/signInWithRedirect.ts index 6eeea966d87..d7bf6661660 100644 --- a/packages/auth/src/providers/cognito/apis/signInWithRedirect.ts +++ b/packages/auth/src/providers/cognito/apis/signInWithRedirect.ts @@ -160,10 +160,7 @@ async function handleCodeFlow({ } const code = url.searchParams.get('code'); - const currentUrlPathname = url.pathname ?? '/'; - const redirectUriPathname = new URL(redirectUri).pathname ?? '/'; - - if (!code || currentUrlPathname !== redirectUriPathname) { + if (!code) { return; } diff --git a/packages/auth/src/providers/cognito/tokenProvider/TokenOrchestrator.ts b/packages/auth/src/providers/cognito/tokenProvider/TokenOrchestrator.ts index f00e7a298f3..86483aee49f 100644 --- a/packages/auth/src/providers/cognito/tokenProvider/TokenOrchestrator.ts +++ b/packages/auth/src/providers/cognito/tokenProvider/TokenOrchestrator.ts @@ -150,10 +150,10 @@ export class TokenOrchestrator implements AuthTokenOrchestrator { return this.getTokenStore().clearTokens(); } - getDeviceMetadata(): Promise { - return this.getTokenStore().getDeviceMetadata(); + getDeviceMetadata(username?: string): Promise { + return this.getTokenStore().getDeviceMetadata(username); } - clearDeviceMetadata(): Promise { - return this.getTokenStore().clearDeviceMetadata(); + clearDeviceMetadata(username?: string): Promise { + return this.getTokenStore().clearDeviceMetadata(username); } } diff --git a/packages/auth/src/providers/cognito/tokenProvider/TokenStore.ts b/packages/auth/src/providers/cognito/tokenProvider/TokenStore.ts index c6ff9b100a8..7849b86a629 100644 --- a/packages/auth/src/providers/cognito/tokenProvider/TokenStore.ts +++ b/packages/auth/src/providers/cognito/tokenProvider/TokenStore.ts @@ -145,8 +145,8 @@ export class DefaultTokenStore implements AuthTokenStore { ]); } - async getDeviceMetadata(): Promise { - const authKeys = await this.getAuthKeys(); + async getDeviceMetadata(username?: string): Promise { + const authKeys = await this.getDeviceAuthKeys(username); const deviceKey = await this.getKeyValueStorage().getItem( authKeys.deviceKey ); @@ -165,8 +165,8 @@ export class DefaultTokenStore implements AuthTokenStore { } : null; } - async clearDeviceMetadata(): Promise { - const authKeys = await this.getAuthKeys(); + async clearDeviceMetadata(username?: string): Promise { + const authKeys = await this.getDeviceAuthKeys(username); await Promise.all([ this.getKeyValueStorage().removeItem(authKeys.deviceKey), this.getKeyValueStorage().removeItem(authKeys.deviceGroupKey), @@ -174,16 +174,34 @@ export class DefaultTokenStore implements AuthTokenStore { ]); } - private async getAuthKeys(): Promise< - AuthKeys - > { + private async getAuthKeys( + username?: string + ): Promise> { assertTokenProviderConfig(this.authConfig?.Cognito); - const lastAuthUser = await this.getLastAuthUser(); + const lastAuthUser = username ?? (await this.getLastAuthUser()); return createKeysForAuthStorage( this.name, `${this.authConfig.Cognito.userPoolClientId}.${lastAuthUser}` ); } + private async getDeviceAuthKeys( + username?: string + ): Promise> { + let authKeys: AuthKeys; + if (username) { + const authEncodedKeys = await this.getAuthKeys( + encodeURIComponent(username) + ); + const authNonEncodedKeys = await this.getAuthKeys(username); + const isEncodedKeysPresent = !!(await this.getKeyValueStorage().getItem( + authEncodedKeys.randomPasswordKey + )); + authKeys = isEncodedKeysPresent ? authEncodedKeys : authNonEncodedKeys; + } else { + authKeys = await this.getAuthKeys(); + } + return authKeys; + } private getLastAuthUserKey() { assertTokenProviderConfig(this.authConfig?.Cognito); diff --git a/packages/auth/src/providers/cognito/tokenProvider/types.ts b/packages/auth/src/providers/cognito/tokenProvider/types.ts index 36d3d96cd67..e88acd826dd 100644 --- a/packages/auth/src/providers/cognito/tokenProvider/types.ts +++ b/packages/auth/src/providers/cognito/tokenProvider/types.ts @@ -36,8 +36,8 @@ export interface AuthTokenStore { storeTokens(tokens: CognitoAuthTokens): Promise; clearTokens(): Promise; setKeyValueStorage(keyValueStorage: KeyValueStorageInterface): void; - getDeviceMetadata(): Promise; - clearDeviceMetadata(): Promise; + getDeviceMetadata(username?: string): Promise; + clearDeviceMetadata(username?: string): Promise; } export interface AuthTokenOrchestrator { @@ -46,8 +46,8 @@ export interface AuthTokenOrchestrator { getTokens: (options?: FetchAuthSessionOptions) => Promise; setTokens: ({ tokens }: { tokens: CognitoAuthTokens }) => Promise; clearTokens: () => Promise; - getDeviceMetadata(): Promise; - clearDeviceMetadata(): Promise; + getDeviceMetadata(username?: string): Promise; + clearDeviceMetadata(username?: string): Promise; } export interface CognitoUserPoolTokenProviderType extends TokenProvider { diff --git a/packages/auth/src/providers/cognito/utils/signInHelpers.ts b/packages/auth/src/providers/cognito/utils/signInHelpers.ts index b0e993dd622..dc64995c161 100644 --- a/packages/auth/src/providers/cognito/utils/signInHelpers.ts +++ b/packages/auth/src/providers/cognito/utils/signInHelpers.ts @@ -91,7 +91,7 @@ export async function handleCustomChallenge({ ANSWER: challengeResponse, }; - const deviceMetadata = await tokenOrchestrator?.getDeviceMetadata(); + const deviceMetadata = await tokenOrchestrator?.getDeviceMetadata(username); if (deviceMetadata && deviceMetadata.deviceKey) { challengeResponses['DEVICE_KEY'] = deviceMetadata.deviceKey; } @@ -267,7 +267,7 @@ export async function handleUserPasswordAuthFlow( USERNAME: username, PASSWORD: password, }; - const deviceMetadata = await tokenOrchestrator.getDeviceMetadata(); + const deviceMetadata = await tokenOrchestrator.getDeviceMetadata(username); if (deviceMetadata && deviceMetadata.deviceKey) { authParameters['DEVICE_KEY'] = deviceMetadata.deviceKey; @@ -310,7 +310,7 @@ export async function handleUserSRPAuthFlow( USERNAME: username, SRP_A: authenticationHelper.A.toString(16), }; - const deviceMetadata = await tokenOrchestrator.getDeviceMetadata(); + const deviceMetadata = await tokenOrchestrator.getDeviceMetadata(username); if (deviceMetadata && deviceMetadata.deviceKey) { authParameters['DEVICE_KEY'] = deviceMetadata.deviceKey; @@ -346,7 +346,7 @@ export async function handleCustomAuthFlowWithoutSRP( const authParameters: Record = { USERNAME: username, }; - const deviceMetadata = await tokenOrchestrator.getDeviceMetadata(); + const deviceMetadata = await tokenOrchestrator.getDeviceMetadata(username); if (deviceMetadata && deviceMetadata.deviceKey) { authParameters['DEVICE_KEY'] = deviceMetadata.deviceKey; @@ -386,7 +386,7 @@ export async function handleCustomSRPAuthFlow( const userPoolName = userPoolId?.split('_')[1] || ''; const authenticationHelper = await getAuthenticationHelper(userPoolName); - const deviceMetadata = await tokenOrchestrator.getDeviceMetadata(); + const deviceMetadata = await tokenOrchestrator.getDeviceMetadata(username); const authParameters: Record = { USERNAME: username, @@ -427,7 +427,7 @@ async function handleDeviceSRPAuth({ }: HandleDeviceSRPInput): Promise { const userPoolId = config.userPoolId; const clientId = config.userPoolClientId; - const deviceMetadata = await tokenOrchestrator?.getDeviceMetadata(); + const deviceMetadata = await tokenOrchestrator?.getDeviceMetadata(username); assertDeviceMetadata(deviceMetadata); const authenticationHelper = await getAuthenticationHelper( deviceMetadata.deviceGroupKey @@ -470,7 +470,7 @@ async function handleDevicePasswordVerifier( { userPoolId, userPoolClientId }: CognitoUserPoolConfig, tokenOrchestrator?: AuthTokenOrchestrator ): Promise { - const deviceMetadata = await tokenOrchestrator?.getDeviceMetadata(); + const deviceMetadata = await tokenOrchestrator?.getDeviceMetadata(username); assertDeviceMetadata(deviceMetadata); const serverBValue = new BigInteger(challengeParameters?.SRP_B, 16); @@ -554,7 +554,7 @@ export async function handlePasswordVerifierChallenge( }), } as { [key: string]: string }; - const deviceMetadata = await tokenOrchestrator.getDeviceMetadata(); + const deviceMetadata = await tokenOrchestrator.getDeviceMetadata(username); if (deviceMetadata && deviceMetadata.deviceKey) { challengeResponses['DEVICE_KEY'] = deviceMetadata.deviceKey; } diff --git a/yarn.lock b/yarn.lock index 56fa6855476..e52d50e4242 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3413,23 +3413,23 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" -"@smithy/config-resolver@^2.0.11", "@smithy/config-resolver@^2.0.5": - version "2.0.11" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.0.11.tgz#20c4711b4e80f94527ee9e4e092cf024471bb09d" - integrity sha512-q97FnlUmbai1c4JlQJgLVBsvSxgV/7Nvg/JK76E1nRq/U5UM56Eqo3dn2fY7JibqgJLg4LPsGdwtIyqyOk35CQ== +"@smithy/config-resolver@^2.0.12", "@smithy/config-resolver@^2.0.5": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.0.12.tgz#3d72e3805ad1ba8fc9df82415302d513312b5f98" + integrity sha512-ISGEdQTGV2p5x9UZzb9SX3Y2MySLi5r69+UtDgB4KvJitV+ys1ONKpsLshi22bvQTy1yAgfLjOj33K7mSJakpQ== dependencies: - "@smithy/node-config-provider" "^2.0.13" + "@smithy/node-config-provider" "^2.0.14" "@smithy/types" "^2.3.4" "@smithy/util-config-provider" "^2.0.0" "@smithy/util-middleware" "^2.0.3" tslib "^2.5.0" -"@smithy/credential-provider-imds@^2.0.0", "@smithy/credential-provider-imds@^2.0.13": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.13.tgz#9904912bc236d25d870add10b6eb138570bf5732" - integrity sha512-/xe3wNoC4j+BeTemH9t2gSKLBfyZmk8LXB2pQm/TOEYi+QhBgT+PSolNDfNAhrR68eggNE17uOimsrnwSkCt4w== +"@smithy/credential-provider-imds@^2.0.0", "@smithy/credential-provider-imds@^2.0.14": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.14.tgz#127c6d0c8503e074bbf81eab618c28f31abb1116" + integrity sha512-9dPBDuudRnrRuyKXdS4cn8A8FAOVVIgc+j3qC86c5xYnZ9Ykr7WKIl53OTQsZlEsiHC73d93YCA89KVhvGIlJg== dependencies: - "@smithy/node-config-provider" "^2.0.13" + "@smithy/node-config-provider" "^2.0.14" "@smithy/property-provider" "^2.0.11" "@smithy/types" "^2.3.4" "@smithy/url-parser" "^2.0.10" @@ -3546,11 +3546,11 @@ tslib "^2.5.0" "@smithy/middleware-retry@^2.0.5": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.0.13.tgz#ef33b1511a4b01a77e54567165b78e6d0c266e88" - integrity sha512-zuOva8xgWC7KYG8rEXyWIcZv2GWszO83DCTU6IKcf/FKu6OBmSE+EYv3EUcCGY+GfiwCX0EyJExC9Lpq9b0w5Q== + version "2.0.14" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.0.14.tgz#8b7ab9e22d0fdd72bef5ea3781c1ddc0161b7ebb" + integrity sha512-+1zHIfRyRcTpWnI2z4H6qLKiHQR011JVekSCKDMADwDpRpGUFj+JdCLwu2yEPOPd3MwHLylHBKV03Oooe2PkZQ== dependencies: - "@smithy/node-config-provider" "^2.0.13" + "@smithy/node-config-provider" "^2.0.14" "@smithy/protocol-http" "^3.0.6" "@smithy/service-error-classification" "^2.0.3" "@smithy/types" "^2.3.4" @@ -3575,13 +3575,13 @@ "@smithy/types" "^2.3.4" tslib "^2.5.0" -"@smithy/node-config-provider@^2.0.13", "@smithy/node-config-provider@^2.0.5": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.0.13.tgz#26c95cebbb8bf9ef5dd703ab4e00ff80de34e15f" - integrity sha512-pPpLqYuJcOq1sj1EGu+DoZK47DUS4gepqSTNgRezmrjnzNlSU2/Dcc9Ebzs+WZ0Z5vXKazuE+k+NksFLo07/AA== +"@smithy/node-config-provider@^2.0.14", "@smithy/node-config-provider@^2.0.5": + version "2.0.14" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.0.14.tgz#3850410c5fba4fb2032688f2536662073e9b6812" + integrity sha512-DXn0NXmprmhcK81AgYoRct11If3Fvyd9U/T0Bu8ZId/XKho0SGTPahWHI1cZBtPZoiZVeXv3PZAzx6v8kw/0pw== dependencies: "@smithy/property-provider" "^2.0.11" - "@smithy/shared-ini-file-loader" "^2.0.12" + "@smithy/shared-ini-file-loader" "^2.0.13" "@smithy/types" "^2.3.4" tslib "^2.5.0" @@ -3644,10 +3644,10 @@ dependencies: "@smithy/types" "^2.3.4" -"@smithy/shared-ini-file-loader@^2.0.0", "@smithy/shared-ini-file-loader@^2.0.12": - version "2.0.12" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.12.tgz#30c8a7a36f49734fde2f052bfaeaaf40c1980b55" - integrity sha512-umi0wc4UBGYullAgYNUVfGLgVpxQyES47cnomTqzCKeKO5oudO4hyDNj+wzrOjqDFwK2nWYGVgS8Y0JgGietrw== +"@smithy/shared-ini-file-loader@^2.0.0", "@smithy/shared-ini-file-loader@^2.0.13": + version "2.0.13" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.13.tgz#aee4b4db2c6fbaa9630b64cb78bfc9da237c8857" + integrity sha512-r6BlDQdYgqDo5xuOOKbmhJD5jylg2Lm1Q1eXZ2mM1kg64GVQ0bHScELEb4W5jl+LEwrU9yNEly6c6ErtU3TJxw== dependencies: "@smithy/types" "^2.3.4" tslib "^2.5.0" @@ -3741,13 +3741,13 @@ tslib "^2.5.0" "@smithy/util-defaults-mode-node@^2.0.5": - version "2.0.15" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.15.tgz#24f7b9de978206909ced7b522f24e7f450187372" - integrity sha512-g6J7MHAibVPMTlXyH3mL+Iet4lMJKFVhsOhJmn+IKG81uy9m42CkRSDlwdQSJAcprLQBIaOPdFxNXQvrg2w1Uw== + version "2.0.16" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.16.tgz#d7cc038cb166acf3f044a74d9d4c72206b1cb9fa" + integrity sha512-HYNqSVTYNGzJsxuhWwiew3zcJ2cDi3ZHz3M0km8ma01AdMd0pYFIGaN24rkXvEOAZPZGRg+3+Wefc3zv8ApRkw== dependencies: - "@smithy/config-resolver" "^2.0.11" - "@smithy/credential-provider-imds" "^2.0.13" - "@smithy/node-config-provider" "^2.0.13" + "@smithy/config-resolver" "^2.0.12" + "@smithy/credential-provider-imds" "^2.0.14" + "@smithy/node-config-provider" "^2.0.14" "@smithy/property-provider" "^2.0.11" "@smithy/smithy-client" "^2.1.9" "@smithy/types" "^2.3.4" @@ -4220,9 +4220,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.2.13": - version "18.2.24" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.24.tgz#3c7d68c02e0205a472f04abe4a0c1df35d995c05" - integrity sha512-Ee0Jt4sbJxMu1iDcetZEIKQr99J1Zfb6D4F3qfUWoR1JpInkY1Wdg4WwCyBjL257D0+jGqSl1twBjV8iCaC0Aw== + version "18.2.25" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.25.tgz#99fa44154132979e870ff409dc5b6e67f06f0199" + integrity sha512-24xqse6+VByVLIr+xWaQ9muX1B4bXJKXBbjszbld/UEDslGLY53+ZucF44HCmLbMPejTzGG9XgR+3m2/Wqu1kw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -5433,9 +5433,9 @@ camelcase@^6.0.0, camelcase@^6.2.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001406, caniuse-lite@^1.0.30001541: - version "1.0.30001543" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001543.tgz#478a3e9dddbb353c5ab214b0ecb0dbed529ed1d8" - integrity sha512-qxdO8KPWPQ+Zk6bvNpPeQIOH47qZSYdFZd6dXQzb2KzhnSXju4Kd7H1PkSJx6NICSMgo/IhRZRhhfPTHYpJUCA== + version "1.0.30001546" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz#10fdad03436cfe3cc632d3af7a99a0fb497407f0" + integrity sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw== capture-exit@^2.0.0: version "2.0.0" @@ -6447,9 +6447,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.4.535: - version "1.4.540" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.540.tgz#c685f2f035e93eb21dd6a9cfe2c735bad8f77401" - integrity sha512-aoCqgU6r9+o9/S7wkcSbmPRFi7OWZWiXS9rtjEd+Ouyu/Xyw5RSq2XN8s5Qp8IaFOLiRrhQCphCIjAxgG3eCAg== + version "1.4.543" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.543.tgz#51116ffc9fba1ee93514d6a40d34676aa6d7d1c4" + integrity sha512-t2ZP4AcGE0iKCCQCBx/K2426crYdxD3YU6l0uK2EO3FZH0pbC4pFz/sZm2ruZsND6hQBTcDWWlo/MLpiOdif5g== emoji-regex@^7.0.1: version "7.0.3" @@ -7143,9 +7143,9 @@ flow-enums-runtime@^0.0.5: integrity sha512-PSZF9ZuaZD03sT9YaIs0FrGJ7lSUw7rHZIex+73UYVXg46eL/wxN5PaVcPJFudE2cJu5f0fezitV5aBkLHPUOQ== flow-parser@0.*: - version "0.217.2" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.217.2.tgz#3a4aade40ea55a863295120a0b0da8a960967ad6" - integrity sha512-O+nt/FLXa1hTwtW0O9h36iZjbL84G8e1uByx5dDXMC97AJEbZXwJ4ohfaE8BNWrYFyYX0NGfz1o8AtLQvaaD/Q== + version "0.218.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.218.0.tgz#ec2e446b00eba373c661b4f5ccd9705996278c0a" + integrity sha512-mk4e7UK4P/W3tjrJyto6oxPuCjwvRMyzBh72hTl8T0dOcTzkP0M2JJHpncgyhKphMFi9pnjwHfc8e0oe4Uk3LA== flow-parser@^0.121.0: version "0.121.0" @@ -13905,9 +13905,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.15" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz#142460aabaca062bc7cd4cc87b7d50725ed6a4ba" - integrity sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ== + version "3.0.16" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0"