From da35ae3a0f5e24f622e578a9cd48f1bf076d9a74 Mon Sep 17 00:00:00 2001 From: Rezaan Syed Date: Thu, 7 Sep 2023 12:18:59 -0400 Subject: [PATCH 01/22] Add EmbeddedAuthStrategy class --- .../admin/embedded-authenticate.ts | 278 ++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts new file mode 100644 index 0000000000..1742517436 --- /dev/null +++ b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts @@ -0,0 +1,278 @@ +import {redirect} from '@remix-run/server-runtime'; +import { + JwtPayload, + Session, + Shopify, + ShopifyRestResources, +} from '@shopify/shopify-api'; + +import {adminClientFactory} from '../../clients/admin'; +import type {BasicParams} from '../../types'; +import type { + AdminApiContext, + AppConfig, + AppConfigArg, +} from '../../config-types'; +import { + getSessionTokenHeader, + validateSessionToken, + rejectBotRequest, + respondToOptionsRequest, + ensureCORSHeadersFactory, +} from '../helpers'; + +import type {BillingContext} from './billing/types'; +import { + cancelBillingFactory, + requestBillingFactory, + requireBillingFactory, +} from './billing'; +import type { + AdminContext, + EmbeddedAdminContext, + NonEmbeddedAdminContext, +} from './types'; +import { + handleClientErrorFactory, + redirectFactory, + renderAppBridge, +} from './helpers'; + +interface SessionContext { + session: Session; + token?: JwtPayload; +} + +const SESSION_TOKEN_PARAM = 'id_token'; + +export class EmbeddedAuthStrategy< + Config extends AppConfigArg, + Resources extends ShopifyRestResources = ShopifyRestResources, +> { + protected api: Shopify; + protected config: AppConfig; + protected logger: Shopify['logger']; + + public constructor({api, config, logger}: BasicParams) { + this.api = api; + this.config = config; + this.logger = logger; + } + + public async authenticateAdmin( + request: Request, + ): Promise> { + const {api, logger, config} = this; + logger.info('shopify-app-remix is local'); + + rejectBotRequest({api, logger, config}, request); + respondToOptionsRequest({api, logger, config}, request); + + const cors = ensureCORSHeadersFactory({api, logger, config}, request); + + let sessionContext: SessionContext; + try { + sessionContext = await this.authenticateAndGetSessionContext(request); + } catch (errorOrResponse) { + if (errorOrResponse instanceof Response) { + cors(errorOrResponse); + } + + throw errorOrResponse; + } + + const context: + | EmbeddedAdminContext + | NonEmbeddedAdminContext = { + admin: this.createAdminApiContext(request, sessionContext.session), + billing: this.createBillingContext(request, sessionContext.session), + session: sessionContext.session, + cors, + }; + + if (config.isEmbeddedApp) { + return { + ...context, + sessionToken: sessionContext!.token!, + redirect: redirectFactory({api, config, logger}, request), + } as AdminContext; + } else { + return context as AdminContext; + } + } + + private async authenticateAndGetSessionContext( + request: Request, + ): Promise { + const {api, logger, config} = this; + const params: BasicParams = {api, logger, config}; + + const url = new URL(request.url); + + const isPatchSessionToken = + url.pathname === config.auth.patchSessionTokenPath; + + if (isPatchSessionToken) { + logger.debug('Rendering bounce page'); + throw renderAppBridge(params, request); + } + + const sessionTokenHeader = getSessionTokenHeader(request); + const sessionTokenParam = url.searchParams.get(SESSION_TOKEN_PARAM)!; + const sessionTokenString = sessionTokenHeader || sessionTokenParam; + + logger.info('Authenticating admin request'); + + if (sessionTokenParam) { + await this.validateUrlParams(request); + await this.ensureAppIsEmbeddedIfRequired(request); + } + + if (sessionTokenString) { + const sessionToken = await validateSessionToken( + {api, logger, config}, + sessionTokenString, + ); + + return this.getAccessToken(request, sessionTokenString, sessionToken); + } else { + logger.debug( + 'Missing session token in search params, going to bounce page', + ); + throw this.redirectToBouncePage(url); + } + } + + private async validateUrlParams(request: Request) { + const {api, config, logger} = this; + + if (config.isEmbeddedApp) { + const url = new URL(request.url); + const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!); + if (!shop) { + logger.debug('Missing or invalid shop, redirecting to login path', { + shop, + }); + throw redirect(config.auth.loginPath); + } + + const host = api.utils.sanitizeHost(url.searchParams.get('host')!); + if (!host) { + logger.debug('Invalid host, redirecting to login path', { + host: url.searchParams.get('host'), + }); + throw redirect(config.auth.loginPath); + } + } + } + + private async ensureAppIsEmbeddedIfRequired(request: Request) { + const {logger} = this; + const url = new URL(request.url); + + const shop = url.searchParams.get('shop')!; + + if (url.searchParams.get('embedded') !== '1') { + logger.debug('App is not embedded, redirecting to Shopify', {shop}); + await this.redirectToShopifyOrAppRoot(request); + } + } + + private async getAccessToken( + request: Request, + sessionToken: string, + payload: JwtPayload, + ) { + const {config, logger, api} = this; + + const sessionId = await api.session.getCurrentId({ + isOnline: config.useOnlineTokens, + rawRequest: request, + }); + + if (sessionId) { + logger.debug(`SESSION ID: ${sessionId}`); + const persistedSession = await config.sessionStorage.loadSession( + sessionId, + ); + if (persistedSession) { + logger.debug(`Reusing existing token: ${persistedSession.accessToken}`); + return {session: persistedSession}; + } + } + + const dest = new URL(payload.dest); + const shop = dest.hostname; + + logger.debug('Requesting token exchange'); + + const {session} = await api.auth.tokenExchange({ + sessionToken, + shop, + isOnline: config.useOnlineTokens, + }); + + logger.debug(`RECEIVED TOKEN: ${session.accessToken}`); + + await config.sessionStorage.storeSession(session); + + return {session, token: payload}; + } + + private async redirectToShopifyOrAppRoot( + request: Request, + responseHeaders?: Headers, + ): Promise { + const {api} = this; + const redirectUrl = await api.auth.getEmbeddedAppUrl({rawRequest: request}); + + throw redirect(redirectUrl, {headers: responseHeaders}); + } + + private redirectToBouncePage(url: URL): never { + const {api, config} = this; + + // eslint-disable-next-line no-warning-comments + // TODO this is to work around a remix bug + // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650 + url.protocol = `${api.config.hostScheme}:`; + + const params = new URLSearchParams(url.search); + params.set('shopify-reload', url.href); + + // eslint-disable-next-line no-warning-comments + // TODO Make sure this works on chrome without a tunnel (weird HTTPS redirect issue) + // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650 + throw redirect(`${config.auth.patchSessionTokenPath}?${params.toString()}`); + } + + private createBillingContext( + request: Request, + session: Session, + ): BillingContext { + const {api, logger, config} = this; + + return { + require: requireBillingFactory({api, logger, config}, request, session), + request: requestBillingFactory({api, logger, config}, request, session), + cancel: cancelBillingFactory({api, logger, config}, request, session), + }; + } + + private createAdminApiContext( + request: Request, + session: Session, + ): AdminApiContext { + return adminClientFactory({ + session, + params: { + api: this.api, + config: this.config, + logger: this.logger, + }, + handleClientError: handleClientErrorFactory({ + request, + }), + }); + } +} From 5daf9cc4c30b4bc78807fccd42e8cea94fd957a5 Mon Sep 17 00:00:00 2001 From: Rezaan Syed Date: Thu, 7 Sep 2023 12:26:08 -0400 Subject: [PATCH 02/22] Update package.json files --- .../server/authenticate/admin/authenticate.ts | 1 + tsconfig.json | 8 - yarn.lock | 1629 +---------------- 3 files changed, 95 insertions(+), 1543 deletions(-) diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts index 6ec2a414c2..ee9ea23e75 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts @@ -67,6 +67,7 @@ export class AuthStrategy< request: Request, ): Promise> { const {api, logger, config} = this; + logger.info('shopify-app-remix is local'); rejectBotRequest({api, logger, config}, request); respondToOptionsRequest({api, logger, config}, request); diff --git a/tsconfig.json b/tsconfig.json index 69e8f27cfa..12ec76a85e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,16 +4,8 @@ "references": [ {"path": "./packages/shopify-app-session-storage"}, {"path": "./packages/shopify-app-session-storage-test-utils"}, - {"path": "./packages/shopify-app-session-storage-dynamodb"}, - {"path": "./packages/shopify-app-session-storage-memory"}, - {"path": "./packages/shopify-app-session-storage-mongodb"}, - {"path": "./packages/shopify-app-session-storage-mysql"}, - {"path": "./packages/shopify-app-session-storage-postgresql"}, {"path": "./packages/shopify-app-session-storage-prisma"}, - {"path": "./packages/shopify-app-session-storage-redis"}, {"path": "./packages/shopify-app-session-storage-sqlite"}, - {"path": "./packages/shopify-app-session-storage-kv"}, - {"path": "./packages/shopify-app-express"}, {"path": "./packages/shopify-app-remix"} ] } diff --git a/yarn.lock b/yarn.lock index bc16577c59..16f03cf560 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,741 +10,6 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.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@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/abort-controller@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.329.0.tgz#f311f79cad1040b84b853c5e9386ea2e069e571a" - integrity sha512-hzrjPNQcJoSPe0oS20V5i98oiEZSM3mKNiR6P3xHTHTPI/F23lyjGZ+/CSkCmJbSWfGZ5sHZZcU6AWuS7xBdTw== - dependencies: - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/client-dynamodb@^3.332.0": - version "3.332.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-dynamodb/-/client-dynamodb-3.332.0.tgz#ae141f8d6c98e460864c4d04e0766fff7bcb7b67" - integrity sha512-v+4a0drW4Q9IZDKbolteyQKbTt42cwbD9CVy2EISB0rThKJKwe/QSUWoeO/nUxmZ7Q4bB/r15Vga5r274FrQ4Q== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.332.0" - "@aws-sdk/config-resolver" "3.329.0" - "@aws-sdk/credential-provider-node" "3.332.0" - "@aws-sdk/fetch-http-handler" "3.329.0" - "@aws-sdk/hash-node" "3.329.0" - "@aws-sdk/invalid-dependency" "3.329.0" - "@aws-sdk/middleware-content-length" "3.329.0" - "@aws-sdk/middleware-endpoint" "3.329.0" - "@aws-sdk/middleware-endpoint-discovery" "3.329.0" - "@aws-sdk/middleware-host-header" "3.329.0" - "@aws-sdk/middleware-logger" "3.329.0" - "@aws-sdk/middleware-recursion-detection" "3.329.0" - "@aws-sdk/middleware-retry" "3.329.0" - "@aws-sdk/middleware-serde" "3.329.0" - "@aws-sdk/middleware-signing" "3.329.0" - "@aws-sdk/middleware-stack" "3.329.0" - "@aws-sdk/middleware-user-agent" "3.332.0" - "@aws-sdk/node-config-provider" "3.329.0" - "@aws-sdk/node-http-handler" "3.329.0" - "@aws-sdk/protocol-http" "3.329.0" - "@aws-sdk/smithy-client" "3.329.0" - "@aws-sdk/types" "3.329.0" - "@aws-sdk/url-parser" "3.329.0" - "@aws-sdk/util-base64" "3.310.0" - "@aws-sdk/util-body-length-browser" "3.310.0" - "@aws-sdk/util-body-length-node" "3.310.0" - "@aws-sdk/util-defaults-mode-browser" "3.329.0" - "@aws-sdk/util-defaults-mode-node" "3.329.0" - "@aws-sdk/util-endpoints" "3.332.0" - "@aws-sdk/util-retry" "3.329.0" - "@aws-sdk/util-user-agent-browser" "3.329.0" - "@aws-sdk/util-user-agent-node" "3.329.0" - "@aws-sdk/util-utf8" "3.310.0" - "@aws-sdk/util-waiter" "3.329.0" - tslib "^2.5.0" - uuid "^8.3.2" - -"@aws-sdk/client-sso-oidc@3.332.0": - version "3.332.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.332.0.tgz#8875ce4834d5d0decefadec828e32cbc0465fc30" - integrity sha512-tz8k8Yqm4TScIfit0Tum2zWAq1md+gZKr747CSixd4Zwcp7Vwh75cRoL7Rz1ZHSEn1Yo983MWREevVez3SubLw== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/config-resolver" "3.329.0" - "@aws-sdk/fetch-http-handler" "3.329.0" - "@aws-sdk/hash-node" "3.329.0" - "@aws-sdk/invalid-dependency" "3.329.0" - "@aws-sdk/middleware-content-length" "3.329.0" - "@aws-sdk/middleware-endpoint" "3.329.0" - "@aws-sdk/middleware-host-header" "3.329.0" - "@aws-sdk/middleware-logger" "3.329.0" - "@aws-sdk/middleware-recursion-detection" "3.329.0" - "@aws-sdk/middleware-retry" "3.329.0" - "@aws-sdk/middleware-serde" "3.329.0" - "@aws-sdk/middleware-stack" "3.329.0" - "@aws-sdk/middleware-user-agent" "3.332.0" - "@aws-sdk/node-config-provider" "3.329.0" - "@aws-sdk/node-http-handler" "3.329.0" - "@aws-sdk/protocol-http" "3.329.0" - "@aws-sdk/smithy-client" "3.329.0" - "@aws-sdk/types" "3.329.0" - "@aws-sdk/url-parser" "3.329.0" - "@aws-sdk/util-base64" "3.310.0" - "@aws-sdk/util-body-length-browser" "3.310.0" - "@aws-sdk/util-body-length-node" "3.310.0" - "@aws-sdk/util-defaults-mode-browser" "3.329.0" - "@aws-sdk/util-defaults-mode-node" "3.329.0" - "@aws-sdk/util-endpoints" "3.332.0" - "@aws-sdk/util-retry" "3.329.0" - "@aws-sdk/util-user-agent-browser" "3.329.0" - "@aws-sdk/util-user-agent-node" "3.329.0" - "@aws-sdk/util-utf8" "3.310.0" - tslib "^2.5.0" - -"@aws-sdk/client-sso@3.332.0": - version "3.332.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.332.0.tgz#e22fa9ded125cce75ca2cd63d3f3f9a6b8dfaa77" - integrity sha512-4q1Nko8M6YVANdEiLYvdv1qb00j4xN4ppE/6d4xpGp7DxHYlm0GA762h0/TR2dun+2I+SMnwj4Fv6BxOmzBaEw== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/config-resolver" "3.329.0" - "@aws-sdk/fetch-http-handler" "3.329.0" - "@aws-sdk/hash-node" "3.329.0" - "@aws-sdk/invalid-dependency" "3.329.0" - "@aws-sdk/middleware-content-length" "3.329.0" - "@aws-sdk/middleware-endpoint" "3.329.0" - "@aws-sdk/middleware-host-header" "3.329.0" - "@aws-sdk/middleware-logger" "3.329.0" - "@aws-sdk/middleware-recursion-detection" "3.329.0" - "@aws-sdk/middleware-retry" "3.329.0" - "@aws-sdk/middleware-serde" "3.329.0" - "@aws-sdk/middleware-stack" "3.329.0" - "@aws-sdk/middleware-user-agent" "3.332.0" - "@aws-sdk/node-config-provider" "3.329.0" - "@aws-sdk/node-http-handler" "3.329.0" - "@aws-sdk/protocol-http" "3.329.0" - "@aws-sdk/smithy-client" "3.329.0" - "@aws-sdk/types" "3.329.0" - "@aws-sdk/url-parser" "3.329.0" - "@aws-sdk/util-base64" "3.310.0" - "@aws-sdk/util-body-length-browser" "3.310.0" - "@aws-sdk/util-body-length-node" "3.310.0" - "@aws-sdk/util-defaults-mode-browser" "3.329.0" - "@aws-sdk/util-defaults-mode-node" "3.329.0" - "@aws-sdk/util-endpoints" "3.332.0" - "@aws-sdk/util-retry" "3.329.0" - "@aws-sdk/util-user-agent-browser" "3.329.0" - "@aws-sdk/util-user-agent-node" "3.329.0" - "@aws-sdk/util-utf8" "3.310.0" - tslib "^2.5.0" - -"@aws-sdk/client-sts@3.332.0": - version "3.332.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.332.0.tgz#15bb163319d3da69f152f80fb4583eabe73e0e30" - integrity sha512-uVobnXIzMcEhwBDyk6iOt36N/TRNI8hwq7MQugjYGj7Inma9g4vnR09hXJ24HxyKCoVUoIgMbEguQ43+/+uvDQ== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/config-resolver" "3.329.0" - "@aws-sdk/credential-provider-node" "3.332.0" - "@aws-sdk/fetch-http-handler" "3.329.0" - "@aws-sdk/hash-node" "3.329.0" - "@aws-sdk/invalid-dependency" "3.329.0" - "@aws-sdk/middleware-content-length" "3.329.0" - "@aws-sdk/middleware-endpoint" "3.329.0" - "@aws-sdk/middleware-host-header" "3.329.0" - "@aws-sdk/middleware-logger" "3.329.0" - "@aws-sdk/middleware-recursion-detection" "3.329.0" - "@aws-sdk/middleware-retry" "3.329.0" - "@aws-sdk/middleware-sdk-sts" "3.329.0" - "@aws-sdk/middleware-serde" "3.329.0" - "@aws-sdk/middleware-signing" "3.329.0" - "@aws-sdk/middleware-stack" "3.329.0" - "@aws-sdk/middleware-user-agent" "3.332.0" - "@aws-sdk/node-config-provider" "3.329.0" - "@aws-sdk/node-http-handler" "3.329.0" - "@aws-sdk/protocol-http" "3.329.0" - "@aws-sdk/smithy-client" "3.329.0" - "@aws-sdk/types" "3.329.0" - "@aws-sdk/url-parser" "3.329.0" - "@aws-sdk/util-base64" "3.310.0" - "@aws-sdk/util-body-length-browser" "3.310.0" - "@aws-sdk/util-body-length-node" "3.310.0" - "@aws-sdk/util-defaults-mode-browser" "3.329.0" - "@aws-sdk/util-defaults-mode-node" "3.329.0" - "@aws-sdk/util-endpoints" "3.332.0" - "@aws-sdk/util-retry" "3.329.0" - "@aws-sdk/util-user-agent-browser" "3.329.0" - "@aws-sdk/util-user-agent-node" "3.329.0" - "@aws-sdk/util-utf8" "3.310.0" - fast-xml-parser "4.1.2" - tslib "^2.5.0" - -"@aws-sdk/config-resolver@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.329.0.tgz#f4283c9c8e61752cecad8cfaebb4db52ac1bbf60" - integrity sha512-Oj6eiT3q+Jn685yvUrfRi8PhB3fb81hasJqdrsEivA8IP8qAgnVUTJzXsh8O2UX8UM2MF6A1gTgToSgneJuw2Q== - dependencies: - "@aws-sdk/types" "3.329.0" - "@aws-sdk/util-config-provider" "3.310.0" - "@aws-sdk/util-middleware" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-env@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.329.0.tgz#54bb313de01324e302b5927733083a4c93ed9962" - integrity sha512-B4orC9hMt9hG82vAR0TAnQqjk6cFDbO2S14RdzUj2n2NPlGWW4Blkv3NTo86K0lq011VRhtqaLcuTwn5EJD5Sg== - dependencies: - "@aws-sdk/property-provider" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-imds@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.329.0.tgz#566b21c37f5e89730ef3b4229f0824b4c455f669" - integrity sha512-ggPlnd7QROPTid0CwT01TYYGvstRRTpzTGsQ/B31wkh30IrRXE81W3S4xrOYuqQD3u0RnflSxnvhs+EayJEYjg== - dependencies: - "@aws-sdk/node-config-provider" "3.329.0" - "@aws-sdk/property-provider" "3.329.0" - "@aws-sdk/types" "3.329.0" - "@aws-sdk/url-parser" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-ini@3.332.0": - version "3.332.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.332.0.tgz#03c77480a94d07784c789eeca44ca67c0900ba4a" - integrity sha512-DTW6d6rcqizPVyvcIrwvxecQ7e5GONtVc5Wyf0RTfqf41sDOVZYmn6G+zEFSpBLW0975uZbJS0lyLWtJe2VujQ== - dependencies: - "@aws-sdk/credential-provider-env" "3.329.0" - "@aws-sdk/credential-provider-imds" "3.329.0" - "@aws-sdk/credential-provider-process" "3.329.0" - "@aws-sdk/credential-provider-sso" "3.332.0" - "@aws-sdk/credential-provider-web-identity" "3.329.0" - "@aws-sdk/property-provider" "3.329.0" - "@aws-sdk/shared-ini-file-loader" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-node@3.332.0": - version "3.332.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.332.0.tgz#bfd4fa8855dd3cf80f1e0d8d160966441e44c4a7" - integrity sha512-KkBayS9k4WyJTvC86ngeRM+RmWxNCS1BHvudkR6PLXfnsNPDzxySDVY0UgxVhbNYDYsO561fXZt9ccpKyVWjgg== - dependencies: - "@aws-sdk/credential-provider-env" "3.329.0" - "@aws-sdk/credential-provider-imds" "3.329.0" - "@aws-sdk/credential-provider-ini" "3.332.0" - "@aws-sdk/credential-provider-process" "3.329.0" - "@aws-sdk/credential-provider-sso" "3.332.0" - "@aws-sdk/credential-provider-web-identity" "3.329.0" - "@aws-sdk/property-provider" "3.329.0" - "@aws-sdk/shared-ini-file-loader" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-process@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.329.0.tgz#5c07b2f4c67cb97190c69d4af5890c9db3f8a31d" - integrity sha512-5oO220qoFc2pMdZDQa6XN/mVhp669I3+LqMbbscGtX/UgLJPSOb7YzPld9Wjv12L5rf+sD3G1PF3LZXO0vKLFA== - dependencies: - "@aws-sdk/property-provider" "3.329.0" - "@aws-sdk/shared-ini-file-loader" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-sso@3.332.0": - version "3.332.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.332.0.tgz#ed12b58d30b6ee359462c7e78672734af22fe713" - integrity sha512-SaKXl48af3n6LRitcaEqbeg1YDXwQ0A5QziC1xQyYPraEIj3IZ/GyTjx04Lo2jxNYHuEOE8u4aTw1+IK1GDKbg== - dependencies: - "@aws-sdk/client-sso" "3.332.0" - "@aws-sdk/property-provider" "3.329.0" - "@aws-sdk/shared-ini-file-loader" "3.329.0" - "@aws-sdk/token-providers" "3.332.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-web-identity@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.329.0.tgz#5610293c03bc4c323dfcae522c545c20e2d8dd86" - integrity sha512-lcEibZD7AlutCacpQ6DyNUqElZJDq+ylaIo5a8MH9jGh7Pg2WpDg0Sy+B6FbGCkVn4eIjdHxeX54JM245nhESg== - dependencies: - "@aws-sdk/property-provider" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/endpoint-cache@3.310.0": - version "3.310.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/endpoint-cache/-/endpoint-cache-3.310.0.tgz#e6f84bfcd55462966811390ef797145559bab15a" - integrity sha512-y3wipforet41EDTI0vnzxILqwAGll1KfI5qcdX9pXF/WF1f+3frcOtPiWtQEZQpy4czRogKm3BHo70QBYAZxlQ== - dependencies: - mnemonist "0.38.3" - tslib "^2.5.0" - -"@aws-sdk/fetch-http-handler@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.329.0.tgz#5aee0c9a32ad8ff4fa96c6869bba68c345818532" - integrity sha512-9jfIeJhYCcTX4ScXOueRTB3S/tVce0bRsKxKDP0PnTxnGYOwKXoM9lAPmiYItzYmQ/+QzjTI8xfkA9Usz2SK/Q== - dependencies: - "@aws-sdk/protocol-http" "3.329.0" - "@aws-sdk/querystring-builder" "3.329.0" - "@aws-sdk/types" "3.329.0" - "@aws-sdk/util-base64" "3.310.0" - tslib "^2.5.0" - -"@aws-sdk/hash-node@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.329.0.tgz#91ef8b1b55e1a438c367f63747673bf146a00499" - integrity sha512-6RmnWXNWpi7yAs0oRDQlkMn2wfXOStr/8kTCgiAiqrk1KopGSBkC2veKiKRSfv02FTd1yV/ISqYNIRqW1VLyxg== - dependencies: - "@aws-sdk/types" "3.329.0" - "@aws-sdk/util-buffer-from" "3.310.0" - "@aws-sdk/util-utf8" "3.310.0" - tslib "^2.5.0" - -"@aws-sdk/invalid-dependency@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.329.0.tgz#83dc33de710f80eba5e084a82aab656c1d240352" - integrity sha512-UXynGusDxN/HxLma5ByJ7u+XnuMd47NbHOjJgYsaAjb1CVZT7hEPXOB+mcZ+Ku7To5SCOKu2QbRn7m4bGespBg== - dependencies: - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/is-array-buffer@3.310.0": - version "3.310.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.310.0.tgz#f87a79f1b858c88744f07e8d8d0a791df204017e" - integrity sha512-urnbcCR+h9NWUnmOtet/s4ghvzsidFmspfhYaHAmSRdy9yDjdjBJMFjjsn85A1ODUktztm+cVncXjQ38WCMjMQ== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/middleware-content-length@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.329.0.tgz#cadd0c3ba7fe3d0b21812523bb7d7f7526c9c700" - integrity sha512-7kCd+CvY/4KbyXB0uyL7jCwPjMi2yERMALFdEH9dsUciwmxIQT6eSc4aF6wImC4UrbafaqmXvvHErABKMVBTKA== - dependencies: - "@aws-sdk/protocol-http" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-endpoint-discovery@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.329.0.tgz#495ddf8063d0a95b7fe133064d53623b2b86210b" - integrity sha512-gzzKuAqvnTSo2mLMpgxAwGB7bdoLMwpobqyoDVVOpGcRyZmffYq/MdaBLgjcGIvlyzFHhnTF3KKO83X0ufebaw== - dependencies: - "@aws-sdk/endpoint-cache" "3.310.0" - "@aws-sdk/protocol-http" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-endpoint@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.329.0.tgz#50c5f71afa3b6d3062d3b542279009454898314e" - integrity sha512-hdJRoNdCM0BT4W+rrtee+kfFRgGPGXQDgtbIQlf/FuuuYz2sdef7/SYWr0mxuncnVBW5WkYSPP8h6q07whSKbg== - dependencies: - "@aws-sdk/middleware-serde" "3.329.0" - "@aws-sdk/types" "3.329.0" - "@aws-sdk/url-parser" "3.329.0" - "@aws-sdk/util-middleware" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-host-header@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.329.0.tgz#22b1a6d91f3f281ef802f21f2ab0b426526d6066" - integrity sha512-JrHeUdTIpTCfXDo9JpbAbZTS1x4mt63CCytJRq0mpWp+FlP9hjckBcNxWdR/wSKEzP9pDRnTri638BOwWH7O8w== - dependencies: - "@aws-sdk/protocol-http" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-logger@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.329.0.tgz#fa8adc07928da24e713e384d4a32c8d0e36f96ee" - integrity sha512-lKeeTXsYC1NiwmxrXsZepcwNXPoQxTNNbeD1qaCELPGK2cJlrGoeAP2YRWzpwO2kNZWrDLaGAPT/EUEhqw+d1w== - dependencies: - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-recursion-detection@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.329.0.tgz#afa676f26f9a050cd3d57a2efa2b0247a6e1d614" - integrity sha512-0/TYOJwrj1Z8s+Y7thibD23hggBq/K/01NwPk32CwWG/G+1vWozs5DefknEl++w0vuV+39pkY4KHI8m/+wOCpg== - dependencies: - "@aws-sdk/protocol-http" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-retry@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.329.0.tgz#326fb0b7442d665689d311fba43eb49a510d2939" - integrity sha512-cB3D7GlhHUcHGOlygOYxD9cPhwsTYEAMcohK38An8+RHNp6VQEWezzLFCmHVKUSeCQ+wkjZfPA40jOG0rbjSgQ== - dependencies: - "@aws-sdk/protocol-http" "3.329.0" - "@aws-sdk/service-error-classification" "3.329.0" - "@aws-sdk/types" "3.329.0" - "@aws-sdk/util-middleware" "3.329.0" - "@aws-sdk/util-retry" "3.329.0" - tslib "^2.5.0" - uuid "^8.3.2" - -"@aws-sdk/middleware-sdk-sts@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.329.0.tgz#50056cca7688e708e3db6bd66203878bc373ff7d" - integrity sha512-bqtZuhkH8pANb2Gb4FEM1p27o+BoDBmVhEWm8sWH+APsyOor3jc6eUG2GxkfoO6D5tGNIuyCC/GuvW9XDIe4Kg== - dependencies: - "@aws-sdk/middleware-signing" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-serde@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.329.0.tgz#f822d7419953ba5d31104262724034340908dd28" - integrity sha512-tvM9NdPuRPCozPjTGNOeYZeLlyx3BcEyajrkRorCRf1YzG/mXdB6I1stote7i4q1doFtYTz0sYL8bqW3LUPn9A== - dependencies: - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-signing@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.329.0.tgz#25011abb0911c1a23840d8d228676758f5b55926" - integrity sha512-bL1nI+EUcF5B1ipwDXxiKL+Uw02Mbt/TNX54PbzunBGZIyO6DZG/H+M3U296bYbvPlwlZhp26O830g6K7VEWsA== - dependencies: - "@aws-sdk/property-provider" "3.329.0" - "@aws-sdk/protocol-http" "3.329.0" - "@aws-sdk/signature-v4" "3.329.0" - "@aws-sdk/types" "3.329.0" - "@aws-sdk/util-middleware" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-stack@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.329.0.tgz#745150a190cc025d0bd7a52c0db5580c05dbbb54" - integrity sha512-2huFLhJ45td2nuiIOjpc9JKJbFNn5CYmw9U8YDITTcydpteRN62CzCpeqroDvF89VOLWxh0ZFtuLCGUr7liSWQ== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/middleware-user-agent@3.332.0": - version "3.332.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.332.0.tgz#6f2de9579b09dd7feeab27ef8a18c236694ad903" - integrity sha512-rSL1xP4QmcMOsunN1p5ZDR9GT3vvoSCnYa4iPvMSjP8Jx7l4ff/aVctwfZkMs/up12+68Jqwj4TvtaCvCFXdUA== - dependencies: - "@aws-sdk/protocol-http" "3.329.0" - "@aws-sdk/types" "3.329.0" - "@aws-sdk/util-endpoints" "3.332.0" - tslib "^2.5.0" - -"@aws-sdk/node-config-provider@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.329.0.tgz#32666077565924354a2216a5343ee768d3107eea" - integrity sha512-hg9rGNlkzh8aeR/sQbijrkFx2BIO53j4Z6qDxPNWwSGpl05jri1VHxHx2HZMwgbY6Zy/DSguETN/BL8vdFqyLg== - dependencies: - "@aws-sdk/property-provider" "3.329.0" - "@aws-sdk/shared-ini-file-loader" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/node-http-handler@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.329.0.tgz#6dc721e6a9df7baebefd145295ef1a8bf1000a51" - integrity sha512-OrjaHjU2ZTPfoHa5DruRvTIbeHH/cc0wvh4ml+FwDpWaPaBpOhLiluhZ3anqX1l5QjrXNiQnL8FxSM5OV/zVCA== - dependencies: - "@aws-sdk/abort-controller" "3.329.0" - "@aws-sdk/protocol-http" "3.329.0" - "@aws-sdk/querystring-builder" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/property-provider@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.329.0.tgz#069dda84e132c9d4eca1a4ae37c62f7a650a0046" - integrity sha512-1cHLTV6yyMGaMSWWDW/p4vTkJ1cc5BOEO+A0eHuAcoSOk+LDe9IKhUG3/ZOvvYKQYcqIj5jjGSni/noXNCl/qw== - dependencies: - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/protocol-http@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.329.0.tgz#a8a7e01477831961f5f040fe607c3552f9ccb013" - integrity sha512-0rLEHY6QTHTUUcVxzGbPUSmCKlXWplxT/fcYRh0bcc5MBK4naKfcQft1O6Ajp8uqs/9YPZ7XCVCn90pDeJfeaw== - dependencies: - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/querystring-builder@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.329.0.tgz#c6e6dd03dcd4378d1fbee576ce2a81dd94ac46a6" - integrity sha512-UWgMKkS5trliaDJG4nPv3onu8Y0aBuwRo7RdIgggguOiU8pU6pq1I113nH2FBNWy+Me1bwf+bcviJh0pCo6bEg== - dependencies: - "@aws-sdk/types" "3.329.0" - "@aws-sdk/util-uri-escape" "3.310.0" - tslib "^2.5.0" - -"@aws-sdk/querystring-parser@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.329.0.tgz#dbbf2fd23ff0dfa2e4663fa414de1d5e60814896" - integrity sha512-9mkK+FB7snJ2G7H3CqtprDwYIRhzm6jEezffCwUWrC+lbqHBbErbhE9IeU/MKxILmf0RbC2riXEY1MHGspjRrQ== - dependencies: - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/service-error-classification@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.329.0.tgz#32db59091ff28f14e526cee738bc14e32a6850f6" - integrity sha512-TSNr0flOcCLe71aPp7MjblKNGsmxpTU4xR5772MDX9Cz9GUTNZCPFtvrcqd+wzEPP/AC7XwNXe8KjoXooZImUQ== - -"@aws-sdk/shared-ini-file-loader@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.329.0.tgz#190eb922860d49b4259b20ca6df4d20769544802" - integrity sha512-e0hyd75fbjMd4aCoRwpP2/HR+0oScwogErVArIkq3F42c/hyNCQP3sph4JImuXIjuo6HNnpKpf20CEPPhNna8A== - dependencies: - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/signature-v4@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.329.0.tgz#8d40683189678f49504169c923e8342247b1da70" - integrity sha512-9EnLoyOD5nFtCRAp+QRllDgQASCfY7jLHVhwht7jzwE80wE65Z9Ym5Z/mwTd4IyTz/xXfCvcE2VwClsBt0Ybdw== - dependencies: - "@aws-sdk/is-array-buffer" "3.310.0" - "@aws-sdk/types" "3.329.0" - "@aws-sdk/util-hex-encoding" "3.310.0" - "@aws-sdk/util-middleware" "3.329.0" - "@aws-sdk/util-uri-escape" "3.310.0" - "@aws-sdk/util-utf8" "3.310.0" - tslib "^2.5.0" - -"@aws-sdk/smithy-client@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.329.0.tgz#54705963939855c87ae6e6c88196d23e819d728e" - integrity sha512-7E0fGpBKxwFqHHAOqNbgNsHSEmCZLuvmU9yvG9DXKVzrS4P48O/PfOro123WpcFZs3STyOVgH8wjUPftHAVKmg== - dependencies: - "@aws-sdk/middleware-stack" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/token-providers@3.332.0": - version "3.332.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.332.0.tgz#d014556ad93c0e43bb20237a3c5e85e9eed612a2" - integrity sha512-fccbg6OSl0l658pxl2p1MoU9gEePo5B361+JNaN0zfRMu7c5HBXCpdl4djlFxAHjltrX9f1+BKqfGHYgI3h8SQ== - dependencies: - "@aws-sdk/client-sso-oidc" "3.332.0" - "@aws-sdk/property-provider" "3.329.0" - "@aws-sdk/shared-ini-file-loader" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/types@3.329.0", "@aws-sdk/types@^3.222.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.329.0.tgz#bc20659abfcd666954196c3a24ad47785db80dd3" - integrity sha512-wFBW4yciDfzQBSFmWNaEvHShnSGLMxSu9Lls6EUf6xDMavxSB36bsrVRX6CyAo/W0NeIIyEOW1LclGPgJV1okg== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/url-parser@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.329.0.tgz#a2862834a832ec1d379791f5233e378b75fc63ad" - integrity sha512-/VcfL7vNJKJGSjYYHVQF3bYCDFs4fSzB7j5qeVDwRdWr870gE7O1Dar+sLWBRKFF3AX+4VzplqzUfpu9t44JVA== - dependencies: - "@aws-sdk/querystring-parser" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/util-base64@3.310.0": - version "3.310.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64/-/util-base64-3.310.0.tgz#d0fd49aff358c5a6e771d0001c63b1f97acbe34c" - integrity sha512-v3+HBKQvqgdzcbL+pFswlx5HQsd9L6ZTlyPVL2LS9nNXnCcR3XgGz9jRskikRUuUvUXtkSG1J88GAOnJ/apTPg== - dependencies: - "@aws-sdk/util-buffer-from" "3.310.0" - tslib "^2.5.0" - -"@aws-sdk/util-body-length-browser@3.310.0": - version "3.310.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.310.0.tgz#3fca9d2f73c058edf1907e4a1d99a392fdd23eca" - integrity sha512-sxsC3lPBGfpHtNTUoGXMQXLwjmR0zVpx0rSvzTPAuoVILVsp5AU/w5FphNPxD5OVIjNbZv9KsKTuvNTiZjDp9g== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-body-length-node@3.310.0": - version "3.310.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.310.0.tgz#4846ae72834ab0636f29f89fc1878520f6543fed" - integrity sha512-2tqGXdyKhyA6w4zz7UPoS8Ip+7sayOg9BwHNidiGm2ikbDxm1YrCfYXvCBdwaJxa4hJfRVz+aL9e+d3GqPI9pQ== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-buffer-from@3.310.0": - version "3.310.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.310.0.tgz#7a72cb965984d3c6a7e256ae6cf1621f52e54a57" - integrity sha512-i6LVeXFtGih5Zs8enLrt+ExXY92QV25jtEnTKHsmlFqFAuL3VBeod6boeMXkN2p9lbSVVQ1sAOOYZOHYbYkntw== - dependencies: - "@aws-sdk/is-array-buffer" "3.310.0" - tslib "^2.5.0" - -"@aws-sdk/util-config-provider@3.310.0": - version "3.310.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-config-provider/-/util-config-provider-3.310.0.tgz#ff21f73d4774cfd7bd16ae56f905828600dda95f" - integrity sha512-xIBaYo8dwiojCw8vnUcIL4Z5tyfb1v3yjqyJKJWV/dqKUFOOS0U591plmXbM+M/QkXyML3ypon1f8+BoaDExrg== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-defaults-mode-browser@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.329.0.tgz#49fc6836e85968ff86917c56c82fc9ef595c0565" - integrity sha512-2iSiy/pzX3OXMhtSxtAzOiEFr3viQEFnYOTeZuiheuyS+cea2L79F6SlZ1110b/nOIU/UOrxxtz83HVad8YFMQ== - dependencies: - "@aws-sdk/property-provider" "3.329.0" - "@aws-sdk/types" "3.329.0" - bowser "^2.11.0" - tslib "^2.5.0" - -"@aws-sdk/util-defaults-mode-node@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.329.0.tgz#2296652bcacd56c6abe159194aae283738a796b2" - integrity sha512-7A6C7YKjkZtmKtH29isYEtOCbhd7IcXPP8lftN8WAWlLOiZE4gV7PHveagUj7QserJzgRKGwwTQbBj53n18HYg== - dependencies: - "@aws-sdk/config-resolver" "3.329.0" - "@aws-sdk/credential-provider-imds" "3.329.0" - "@aws-sdk/node-config-provider" "3.329.0" - "@aws-sdk/property-provider" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/util-dynamodb@^3.332.0": - version "3.332.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-dynamodb/-/util-dynamodb-3.332.0.tgz#11a4669cfca4cfc26a3c5f4f929a969582b8a2a9" - integrity sha512-2Z+L8w7VK6fY5qob6CT42fRy8qNXcaacvpBijjrjDknWHPSh+YSliGHrsLE/CcTEHzWSm5Sebjk+iuREMy064g== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-endpoints@3.332.0": - version "3.332.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.332.0.tgz#e360f65d240c97661988e20f15bb5bca160f773a" - integrity sha512-nQx7AiOroMU2hj6h+umWOSZ+WECwxupaxFUK/PPKGW6NY/VdQE6LluYnXOtF5awlr8w1nPksT0Lq05PZutMDLA== - dependencies: - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/util-hex-encoding@3.310.0": - version "3.310.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.310.0.tgz#19294c78986c90ae33f04491487863dc1d33bd87" - integrity sha512-sVN7mcCCDSJ67pI1ZMtk84SKGqyix6/0A1Ab163YKn+lFBQRMKexleZzpYzNGxYzmQS6VanP/cfU7NiLQOaSfA== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.292.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.292.0.tgz#cba0911be4fdf1db31a0b379cc6229a5a0ba1ae0" - integrity sha512-6xnFJXZI9pKw5lQCDvuWA5PnOaUtNRKWwdxvGkkLx5orboFaoVMS6zowjSQxwVNRjW82u6dYNkhmj9mZ8VSjWg== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-middleware@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-middleware/-/util-middleware-3.329.0.tgz#0d4056c8479d80760778928e807ff74c57fcead3" - integrity sha512-RhBOBaxzkTUghi4MSqr8S5qeeBCjgJ0XPJ6jIYkVkj1saCmqkuZCgl3zFaYdyhdxxPV6nflkFer+1HUoqT+Fqw== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-retry@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-retry/-/util-retry-3.329.0.tgz#20b71504dd907e70a457cd56dcd131d08d6de39c" - integrity sha512-+3VQ9HZLinysnmryUs9Xjt1YVh4TYYHLt30ilu4iUnIHFQoamdzIbRCWseSVFPCxGroen9M9qmAleAsytHEKuA== - dependencies: - "@aws-sdk/service-error-classification" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/util-uri-escape@3.310.0": - version "3.310.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.310.0.tgz#9f942f09a715d8278875013a416295746b6085ba" - integrity sha512-drzt+aB2qo2LgtDoiy/3sVG8w63cgLkqFIa2NFlGpUgHFWTXkqtbgf4L5QdjRGKWhmZsnqkbtL7vkSWEcYDJ4Q== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-user-agent-browser@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.329.0.tgz#6c3353a68f5d3d420156fabdcfab3bf4160f383b" - integrity sha512-8hLSmMCl8aw2++0Zuba8ELq8FkK6/VNyx470St201IpMn2GMbQMDl/rLolRKiTgji6wc+T3pOTidkJkz8/cIXA== - dependencies: - "@aws-sdk/types" "3.329.0" - bowser "^2.11.0" - tslib "^2.5.0" - -"@aws-sdk/util-user-agent-node@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.329.0.tgz#eb0930a1f3315fa6ea6f72e4007bbfce1202a3e5" - integrity sha512-C50Zaeodc0+psEP+L4WpElrH8epuLWJPVN4hDOTORcM0cSoU2o025Ost9mbcU7UdoHNxF9vitLnzORGN9SHolg== - dependencies: - "@aws-sdk/node-config-provider" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-utf8@3.310.0": - version "3.310.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8/-/util-utf8-3.310.0.tgz#4a7b9dcebb88e830d3811aeb21e9a6df4273afb4" - integrity sha512-DnLfFT8uCO22uOJc0pt0DsSNau1GTisngBCDw8jQuWT5CqogMJu4b/uXmwEqfj8B3GX6Xsz8zOd6JpRlPftQoA== - dependencies: - "@aws-sdk/util-buffer-from" "3.310.0" - tslib "^2.5.0" - -"@aws-sdk/util-waiter@3.329.0": - version "3.329.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-waiter/-/util-waiter-3.329.0.tgz#4e0d457548661e210cf716f8b18ff16a4dbd17c7" - integrity sha512-MIGs7snNL0ZV55zo1BDVPlrmbinUGV3260hp6HrW4zUbpYVoeIOGeewtrwAsF6FJ+vpZCxljPBB0X2jYR7Q7ZQ== - dependencies: - "@aws-sdk/abort-controller" "3.329.0" - "@aws-sdk/types" "3.329.0" - tslib "^2.5.0" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" @@ -2010,11 +1275,6 @@ human-id "^1.0.2" prettier "^2.7.1" -"@cloudflare/workers-types@^4.20230511.0": - version "4.20230511.0" - resolved "https://registry.yarnpkg.com/@cloudflare/workers-types/-/workers-types-4.20230511.0.tgz#48f187b35234b9be7c2c6303718584fce8243278" - integrity sha512-Br4i/8+t60HDJIo8o7O9Rrmp03bhdejRW9klb0bK9EfG5Ii7qz5G3PJO12gUz+Vu9m1v9tZ9KOh3Gg8oshXtug== - "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -2071,11 +1331,6 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@iarna/toml@^2.2.5": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" - integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== - "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -2610,172 +1865,6 @@ semver "^7.3.5" tar "^6.1.11" -"@miniflare/cache@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/cache/-/cache-2.14.0.tgz#77c6b7e1e58cbfbeebc88f0af25b886dbc624e8c" - integrity sha512-0mz0OCzTegiX75uMURLJpDo3DaOCSx9M0gv7NMFWDbK/XrvjoENiBZiKu98UBM5fts0qtK19a+MfB4aT0uBCFg== - dependencies: - "@miniflare/core" "2.14.0" - "@miniflare/shared" "2.14.0" - http-cache-semantics "^4.1.0" - undici "5.20.0" - -"@miniflare/cli-parser@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/cli-parser/-/cli-parser-2.14.0.tgz#1370f328e27a760b0c7ee16fcbe6a2f6ff6f1542" - integrity sha512-6Wb0jTMqwI7GRGAhz9WOF8AONUsXXPmwu+Qhg+tnRWtQpJ3DYd5dku1N04L9L1R7np/mD8RrycLyCdg3hLZ3aA== - dependencies: - "@miniflare/shared" "2.14.0" - kleur "^4.1.4" - -"@miniflare/core@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/core/-/core-2.14.0.tgz#daf1e844686722a0e2b9b0638358f663d0712cec" - integrity sha512-BjmV/ZDwsKvXnJntYHt3AQgzVKp/5ZzWPpYWoOnUSNxq6nnRCQyvFvjvBZKnhubcmJCLSqegvz0yHejMA90CTA== - dependencies: - "@iarna/toml" "^2.2.5" - "@miniflare/queues" "2.14.0" - "@miniflare/shared" "2.14.0" - "@miniflare/watcher" "2.14.0" - busboy "^1.6.0" - dotenv "^10.0.0" - kleur "^4.1.4" - set-cookie-parser "^2.4.8" - undici "5.20.0" - urlpattern-polyfill "^4.0.3" - -"@miniflare/d1@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/d1/-/d1-2.14.0.tgz#d384e486bee21d795956e53b255b173e48a7d1b7" - integrity sha512-9YoeLAkZuWGAu9BMsoctHoMue0xHzJYZigAJWGvWrqSFT1gBaT+RlUefQCHXggi8P7sOJ1+BKlsWAhkB5wfMWQ== - dependencies: - "@miniflare/core" "2.14.0" - "@miniflare/shared" "2.14.0" - -"@miniflare/durable-objects@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/durable-objects/-/durable-objects-2.14.0.tgz#1c913e774e949dfe82077cb82fe2ec6dd7bfb96a" - integrity sha512-P8eh1P62BPGpj+MCb1i1lj7Tlt/G3BMmnxHp9duyb0Wro/ILVGPQskZl+iq7DHq1w3C+n0+6/E1B44ff+qn0Mw== - dependencies: - "@miniflare/core" "2.14.0" - "@miniflare/shared" "2.14.0" - "@miniflare/storage-memory" "2.14.0" - undici "5.20.0" - -"@miniflare/html-rewriter@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/html-rewriter/-/html-rewriter-2.14.0.tgz#b3edb2c3889fb9da7d25517de33eaa50473beeef" - integrity sha512-7CJZk3xZkxK8tGNofnhgWcChZ8YLx6MhAdN2nn6ONSXrK/TevzEKdL8bnVv1OJ6J8Y23OxvfinOhufr33tMS8g== - dependencies: - "@miniflare/core" "2.14.0" - "@miniflare/shared" "2.14.0" - html-rewriter-wasm "^0.4.1" - undici "5.20.0" - -"@miniflare/http-server@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/http-server/-/http-server-2.14.0.tgz#5ea55ccbc48a1bc22c95dc7d26261bfd8119be4b" - integrity sha512-APaBlvGRAW+W18ph5ruPXX26/iKdByPz1tZH1OjPAKBDAiKFZSGek4QzUmQALBWLx5VMTMrt7QIe7KE4nM4sdw== - dependencies: - "@miniflare/core" "2.14.0" - "@miniflare/shared" "2.14.0" - "@miniflare/web-sockets" "2.14.0" - kleur "^4.1.4" - selfsigned "^2.0.0" - undici "5.20.0" - ws "^8.2.2" - youch "^2.2.2" - -"@miniflare/kv@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/kv/-/kv-2.14.0.tgz#c0f3043d981e58bed33629e42373b5335e79e5e5" - integrity sha512-FHAnVjmhV/VHxgjNf2whraz+k7kfMKlfM+5gO8WT6HrOsWxSdx8OueWVScnOuuDkSeUg5Ctrf5SuztTV8Uy1cg== - dependencies: - "@miniflare/shared" "2.14.0" - -"@miniflare/queues@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/queues/-/queues-2.14.0.tgz#925557d58520cbef21b66e94768e33dd0c376ef9" - integrity sha512-flS4MqlgBKyv6QBqKD0IofjmMDW9wP1prUNQy2wWPih9lA6bFKmml3VdFeDsPnWtE2J67K0vCTf5kj1Q0qdW1w== - dependencies: - "@miniflare/shared" "2.14.0" - -"@miniflare/r2@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/r2/-/r2-2.14.0.tgz#fd032cfaff3141a72e140fec741a8ac0cf8d0133" - integrity sha512-+WJJP4J0QzY69HPrG6g5OyW23lJ02WHpHZirCxwPSz8CajooqZCJVx+qvUcNmU8MyKASbUZMWnH79LysuBh+jA== - dependencies: - "@miniflare/core" "2.14.0" - "@miniflare/shared" "2.14.0" - undici "5.20.0" - -"@miniflare/runner-vm@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/runner-vm/-/runner-vm-2.14.0.tgz#cd4a61e7d81c4e2239f8c528c35abd7ed557ae5b" - integrity sha512-01CmNzv74u0RZgT/vjV/ggDzECXTG88ZJAKhXyhAx0s2DOLIXzsGHn6pUJIsfPCrtj8nfqtTCp1Vf0UMVWSpmw== - dependencies: - "@miniflare/shared" "2.14.0" - -"@miniflare/scheduler@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/scheduler/-/scheduler-2.14.0.tgz#01a5cfac61f3d31ef12b38c5d1d8c8960315e110" - integrity sha512-/D28OeY/HxcOyY0rkPc2qU/wzxCcUv3/F7NRpgDix37sMkYjAAS51ehVIAkPwAdFEMdantcyVuHNQ2kO1xbT+Q== - dependencies: - "@miniflare/core" "2.14.0" - "@miniflare/shared" "2.14.0" - cron-schedule "^3.0.4" - -"@miniflare/shared@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/shared/-/shared-2.14.0.tgz#bc625dc15bbb2f5b17a6a8ec65258faf61013bda" - integrity sha512-O0jAEdMkp8BzrdFCfMWZu76h4Cq+tt3/oDtcTFgzum3fRW5vUhIi/5f6bfndu6rkGbSlzxwor8CJWpzityXGug== - dependencies: - "@types/better-sqlite3" "^7.6.0" - kleur "^4.1.4" - npx-import "^1.1.4" - picomatch "^2.3.1" - -"@miniflare/sites@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/sites/-/sites-2.14.0.tgz#e2653b5e28828ae198948a00111f2980b8416438" - integrity sha512-qI8MFZpD1NV+g+HQ/qheDVwscKzwG58J+kAVTU/1fgub2lMLsxhE3Mmbi5AIpyIiJ7Q5Sezqga234CEkHkS7dA== - dependencies: - "@miniflare/kv" "2.14.0" - "@miniflare/shared" "2.14.0" - "@miniflare/storage-file" "2.14.0" - -"@miniflare/storage-file@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/storage-file/-/storage-file-2.14.0.tgz#5f8d7c5e9b744793e94b887dc78280c796ea0e75" - integrity sha512-Ps0wHhTO+ie33a58efI0p/ppFXSjlbYmykQXfYtMeVLD60CKl+4Lxor0+gD6uYDFbhMWL5/GMDvyr4AM87FA+Q== - dependencies: - "@miniflare/shared" "2.14.0" - "@miniflare/storage-memory" "2.14.0" - -"@miniflare/storage-memory@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/storage-memory/-/storage-memory-2.14.0.tgz#5fb0bf10194bbc370cb4640a14ca00a148f1e5a3" - integrity sha512-5aFjEiTSNrHJ+iAiGMCA/TVPnNMrnokG5r0vKrwj4knbf8pisgfP04x18zCgOlG7kaIWNmqdO/vtVT5BIioiSQ== - dependencies: - "@miniflare/shared" "2.14.0" - -"@miniflare/watcher@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/watcher/-/watcher-2.14.0.tgz#de8f2f1d51698f7e1fa57941607798f541f4a092" - integrity sha512-O8Abg2eHpGmcZb8WyUaA6Av1Mqt5bSrorzz4CrWwsvJHBdekZPIX0GihC9vn327d/1pKRs81YTiSAfBoSZpVIw== - dependencies: - "@miniflare/shared" "2.14.0" - -"@miniflare/web-sockets@2.14.0": - version "2.14.0" - resolved "https://registry.yarnpkg.com/@miniflare/web-sockets/-/web-sockets-2.14.0.tgz#1dd7b3694a280a526f8c6a960a8a3d26e979eded" - integrity sha512-lB1CB4rBq0mbCuh55WgIEH4L3c4/i4MNDBfrQL+6r+wGcr/BJUqF8BHpsfAt5yHWUJVtK5mlMeesS/xpg4Ao1w== - dependencies: - "@miniflare/core" "2.14.0" - "@miniflare/shared" "2.14.0" - undici "5.20.0" - ws "^8.2.2" - "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" @@ -2842,66 +1931,34 @@ resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.13.0.tgz#582a6b90b6efeb0f465984f1fe0e72a4afaaa5ae" integrity sha512-HrniowHRZXHuGT9XRgoXEaP2gJLXM5RMoItaY2PkjvuZ+iHc0Zjbm/302MB8YsPdWozAPHHn+jpFEcEn71OgPw== -"@redis/bloom@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.2.0.tgz#d3fd6d3c0af3ef92f26767b56414a370c7b63b71" - integrity sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg== - -"@redis/client@1.5.7": - version "1.5.7" - resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.5.7.tgz#92cc5c98c76f189e37d24f0e1e17e104c6af17d4" - integrity sha512-gaOBOuJPjK5fGtxSseaKgSvjiZXQCdLlGg9WYQst+/GRUjmXaiB5kVkeQMRtPc7Q2t93XZcJfBMSwzs/XS9UZw== +"@remix-run/react@^1.19.0": + version "1.19.0" + resolved "https://registry.yarnpkg.com/@remix-run/react/-/react-1.19.0.tgz#3fd54076e0aa315c67034b4071838762054f6c05" + integrity sha512-wZBNfA+wtX4GQ2xQyWefSpq45b9b+DydXq+mucog1jaR2OPFmSDjNzwp09Nc8G1TcpsvDH4CNgz4nsA94WvFmQ== dependencies: - cluster-key-slot "1.1.2" - generic-pool "3.9.0" - yallist "4.0.0" - -"@redis/graph@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@redis/graph/-/graph-1.1.0.tgz#cc2b82e5141a29ada2cce7d267a6b74baa6dd519" - integrity sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg== + "@remix-run/router" "1.7.2" + react-router-dom "6.14.2" -"@redis/json@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@redis/json/-/json-1.0.4.tgz#f372b5f93324e6ffb7f16aadcbcb4e5c3d39bda1" - integrity sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw== - -"@redis/search@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@redis/search/-/search-1.1.2.tgz#6a8f66ba90812d39c2457420f859ce8fbd8f3838" - integrity sha512-/cMfstG/fOh/SsE+4/BQGeuH/JJloeWuH+qJzM8dbxuWvdWibWAOAHHCZTMPhV3xIlH4/cUEIA8OV5QnYpaVoA== - -"@redis/time-series@1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.0.4.tgz#af85eb080f6934580e4d3b58046026b6c2b18717" - integrity sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng== - -"@remix-run/react@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@remix-run/react/-/react-2.0.0.tgz#da298be3165d356484adc64aa9fe10f41672170d" - integrity sha512-h/xXrwupxXoWGvEC1JnDeh9D7lfLTQNiKaEXvWKZwlfNuKeI8nIKXpy+JDDHhloUybe4tpMKztyCqdNCYqfKWQ== - dependencies: - "@remix-run/router" "1.9.0" - "@remix-run/server-runtime" "2.0.0" - react-router-dom "6.16.0" +"@remix-run/router@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.6.3.tgz#8205baf6e17ef93be35bf62c37d2d594e9be0dad" + integrity sha512-EXJysQ7J3veRECd0kZFQwYYd5sJMcq2O/m60zu1W2l3oVQ9xtub8jTOtYRE0+M2iomyG/W3Ps7+vp2kna0C27Q== -"@remix-run/router@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.9.0.tgz#9033238b41c4cbe1e961eccb3f79e2c588328cf6" - integrity sha512-bV63itrKBC0zdT27qYm6SDZHlkXwFL1xMBuhkn+X7l0+IIhNaH5wuuvZKp6eKhCD4KFhujhfhCT1YxXW6esUIA== +"@remix-run/router@1.7.2": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.7.2.tgz#cba1cf0a04bc04cb66027c51fa600e9cbc388bc8" + integrity sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A== -"@remix-run/server-runtime@2.0.0", "@remix-run/server-runtime@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@remix-run/server-runtime/-/server-runtime-2.0.0.tgz#d7d89e1d8b17ce599cabb14d1d0a87b4b833a2d6" - integrity sha512-HaNszj/mp/A1Qz5sVupVIXqDyeEni3nwW5iKDqGAqv0n8E6FRkzEhOtAJypRABcKWBq0M9VM3fm6IO0vaMti8Q== +"@remix-run/server-runtime@^1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@remix-run/server-runtime/-/server-runtime-1.17.1.tgz#620ac5eb514737f2937051f8d91c8d5a021f0beb" + integrity sha512-PuLDaf7WmrOaQzM70yCcM6Jm+g+UHzeBFvocxdqohJnO/8+/n5pFIKHwhooqcSq2TR0WtVpSVhCakdywiOH2mA== dependencies: - "@remix-run/router" "1.9.0" - "@types/cookie" "^0.4.1" + "@remix-run/router" "1.6.3" "@web3-storage/multipart-parser" "^1.0.0" cookie "^0.4.1" set-cookie-parser "^2.4.8" source-map "^0.7.3" - type-fest "^4.0.0" "@rollup/plugin-babel@^5.3.0": version "5.3.1" @@ -2997,10 +2054,10 @@ pkg-dir "^5.0.0" pluralize "^8.0.0" -"@shopify/generate-docs@^0.11.1": - version "0.11.1" - resolved "https://registry.yarnpkg.com/@shopify/generate-docs/-/generate-docs-0.11.1.tgz#4b4d159cb5578dc98fa4218bbc9edade1872d0f1" - integrity sha512-pZxCkUtO6MXJaetEdd4Tyk6t7tjJTUNd3VGCXyOeZqKAWrXEob+8gkost0x23EmuES4GGqQKSB9nnKdFvbdk1w== +"@shopify/generate-docs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@shopify/generate-docs/-/generate-docs-0.11.0.tgz#7a496a5e3328928ac58edb2c3f3ae0cc131e01ba" + integrity sha512-SufWSQXRqh6cCVd+H8c9cpXWKaBcRpcduIdVk3RkKV/PiD11WkUrHsdVFC1CZHWm1L7QYLaXBqwszFo1UvtYag== dependencies: "@types/react" "^18.0.21" globby "^11.1.0" @@ -3143,10 +2200,9 @@ jest-matcher-utils "^26.6.2" react-reconciler "^0.28.0" -"@shopify/shopify-api@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@shopify/shopify-api/-/shopify-api-8.0.2.tgz#765bf03cf0c953ca9c2cde0aae91fba45c6d5def" - integrity sha512-hvVLoEsYglE4GRqFhr9D6oMr2bV6tEdsD9PxuNZ6bYDptoD+kQFKsaP83jE1qtHhB3ve0DeevaVVYjS/2TU7MA== +"@shopify/shopify-api@^7.6.0", "@shopify/shopify-api@file:../shopify-api-js/shopify-shopify-api-7.6.0.tgz": + version "7.6.0" + resolved "file:../shopify-api-js/shopify-shopify-api-7.6.0.tgz#1da289ac41837b71dccbc6981a93fb2986ac4e91" dependencies: "@shopify/network" "^3.2.1" compare-versions "^5.0.3" @@ -3156,6 +2212,13 @@ tslib "^2.0.3" uuid "^9.0.0" +"@shopify/shopify-app-session-storage-memory@^1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@shopify/shopify-app-session-storage-memory/-/shopify-app-session-storage-memory-1.0.11.tgz#ad66305882614152b81bdd26bc8591199864ee7d" + integrity sha512-+IW81euic4Qb0AM8G7Y6xbrLnKqkn5FnQoF5CFwmQfmjAWnFYSFgvNQUSuk+53h1r+OO0CZGC/DY7oLFDd784w== + dependencies: + tslib "^2.4.0" + "@shopify/typescript-configs@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@shopify/typescript-configs/-/typescript-configs-5.1.0.tgz#f6e8fdd3291bf0a406578b2c6eb21f8c542d3c0a" @@ -3247,13 +2310,6 @@ dependencies: "@babel/types" "^7.3.0" -"@types/better-sqlite3@^7.6.0": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/better-sqlite3/-/better-sqlite3-7.6.4.tgz#102462611e67aadf950d3ccca10292de91e6f35b" - integrity sha512-dzrRZCYPXIXfSR1/surNbJ/grU3scTaygS0OMzjlGf71i9sc2fGyHPXXiXmEvNIoE0cGwsanEFMVJxPXmco9Eg== - dependencies: - "@types/node" "*" - "@types/body-parser@*": version "1.19.2" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" @@ -3263,31 +2319,26 @@ "@types/node" "*" "@types/compression@^1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@types/compression/-/compression-1.7.2.tgz#7cc1cdb01b4730eea284615a68fc70a2cdfd5e71" - integrity sha512-lwEL4M/uAGWngWFLSG87ZDr2kLrbuR8p7X+QZB1OQlT+qkHsCPDVFnHPyXf4Vyl4yDDorNY+mAhosxkCvppatg== + version "1.7.3" + resolved "https://registry.yarnpkg.com/@types/compression/-/compression-1.7.3.tgz#2dd34648fc3b71c95aacd63b3098b2192da33929" + integrity sha512-rKquEGjebqizyHNMOpaE/4FdYR5VQiWFeesqYfvJU0seSEyB4625UGhNOO/qIkH10S3wftiV7oefc8WdLZ/gCQ== dependencies: "@types/express" "*" "@types/connect@*": - version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + version "3.4.36" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" + integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== dependencies: "@types/node" "*" "@types/cookie-parser@^1.4.3": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@types/cookie-parser/-/cookie-parser-1.4.3.tgz#3a01df117c5705cf89a84c876b50c5a1fd427a21" - integrity sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w== + version "1.4.4" + resolved "https://registry.yarnpkg.com/@types/cookie-parser/-/cookie-parser-1.4.4.tgz#ca49273d838da2b08858e703943a71a460aa3af8" + integrity sha512-Var+aj5I6ZgIqsQ05N2V8q5OBrFfZXtIGWWDSrEYLIbMw758obagSwdGcLCjwh1Ga7M7+wj0SDIAaAC/WT7aaA== dependencies: "@types/express" "*" -"@types/cookie@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" - integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== - "@types/estree@*": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" @@ -3299,9 +2350,9 @@ integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/express-serve-static-core@^4.17.33": - version "4.17.34" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.34.tgz#c119e85b75215178bc127de588e93100698ab4cc" - integrity sha512-fvr49XlCGoUj2Pp730AItckfjat4WNb0lb3kfrLWffd+RLeoGAMsq7UOy04PAPtoL01uKwcp6u8nhzpgpDYr3w== + version "4.17.36" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz#baa9022119bdc05a4adfe740ffc97b5f9360e545" + integrity sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q== dependencies: "@types/node" "*" "@types/qs" "*" @@ -3340,6 +2391,11 @@ dependencies: "@types/node" "*" +"@types/http-errors@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" + integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== + "@types/is-ci@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/is-ci/-/is-ci-3.0.0.tgz#7e8910af6857601315592436f030aaa3ed9783c3" @@ -3439,15 +2495,6 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/pg@^8.6.6": - version "8.6.6" - resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.6.6.tgz#21cdf873a3e345a6e78f394677e3b3b1b543cb80" - integrity sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw== - dependencies: - "@types/node" "*" - pg-protocol "*" - pg-types "^2.2.0" - "@types/prettier@^2.1.5": version "2.7.2" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" @@ -3459,9 +2506,9 @@ integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== "@types/qs@*": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + version "6.9.8" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" + integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== "@types/range-parser@*": version "1.2.4" @@ -3545,10 +2592,11 @@ "@types/node" "*" "@types/serve-static@*": - version "1.15.1" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" - integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + version "1.15.2" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" + integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== dependencies: + "@types/http-errors" "*" "@types/mime" "*" "@types/node" "*" @@ -3564,29 +2612,11 @@ dependencies: "@types/node" "*" -"@types/stack-trace@0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/stack-trace/-/stack-trace-0.0.29.tgz#eb7a7c60098edb35630ed900742a5ecb20cfcb4d" - integrity sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g== - "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== -"@types/webidl-conversions@*": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz#2b8e60e33906459219aa587e9d1a612ae994cfe7" - integrity sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog== - -"@types/whatwg-url@^8.2.1": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63" - integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA== - dependencies: - "@types/node" "*" - "@types/webidl-conversions" "*" - "@types/yargs-parser@*": version "21.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" @@ -4141,11 +3171,6 @@ body-parser@1.20.1: type-is "~1.6.18" unpipe "1.0.0" -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" @@ -4204,11 +3229,6 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -bson@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/bson/-/bson-5.3.0.tgz#37b006df4cd91ed125cb686467c1dd6d4606b514" - integrity sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag== - buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -4219,30 +3239,11 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-writer@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" - integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== - builtin-modules@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -4437,11 +3438,6 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -cluster-key-slot@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" - integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -4619,11 +3615,6 @@ create-jest-runner@^0.11.2: jest-worker "^28.0.2" throat "^6.0.1" -cron-schedule@^3.0.4: - version "3.0.6" - resolved "https://registry.yarnpkg.com/cron-schedule/-/cron-schedule-3.0.6.tgz#7d0a3ad9154112fc3720fe43238a43d50e8465e7" - integrity sha512-izfGgKyzzIyLaeb1EtZ3KbglkS6AKp9cv7LxmiyoOu+fXfol1tQDC0Cof0enVZGNtudTHW+3lfuW9ZkLQss4Wg== - cross-fetch@^3.0.4: version "3.1.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" @@ -4813,11 +3804,6 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -denque@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" - integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== - depd@2.0.0, depd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -4917,11 +3903,6 @@ dot-prop@^5.3.0: dependencies: is-obj "^2.0.0" -dotenv@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" - integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== - eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -5453,21 +4434,6 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" - integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.1" - human-signals "^3.0.1" - is-stream "^3.0.0" - merge-stream "^2.0.0" - npm-run-path "^5.1.0" - onetime "^6.0.0" - signal-exit "^3.0.7" - strip-final-newline "^3.0.0" - exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -5581,13 +4547,6 @@ fast-safe-stringify@^2.1.1: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== -fast-xml-parser@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz#5a98c18238d28a57bbdfa9fe4cda01211fff8f4a" - integrity sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg== - dependencies: - strnum "^1.0.5" - fastq@^1.6.0: version "1.15.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" @@ -5829,18 +4788,6 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" -generate-function@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" - integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== - dependencies: - is-property "^1.0.2" - -generic-pool@3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" - integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -5872,7 +4819,7 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" -get-stream@^6.0.0, get-stream@^6.0.1: +get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -6056,11 +5003,6 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-rewriter-wasm@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/html-rewriter-wasm/-/html-rewriter-wasm-0.4.1.tgz#235e3d96c1aa4bfd2182661ee13881e290ff5ff2" - integrity sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q== - http-cache-semantics@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" @@ -6109,11 +5051,6 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -human-signals@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" - integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== - humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -6128,7 +5065,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2, iconv-lite@^0.6.3: +iconv-lite@^0.6.2: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -6354,11 +5291,6 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== -is-property@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== - is-reference@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" @@ -6391,11 +5323,6 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" - integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== - is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -7567,7 +6494,7 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -kleur@^4.1.4, kleur@^4.1.5: +kleur@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== @@ -7667,11 +6594,6 @@ lodash@^4.17.21, lodash@^4.7.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -long@^5.2.1: - version "5.2.3" - resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" - integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== - loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -7708,16 +6630,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.14.1: - version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== - -lru-cache@^8.0.0: - version "8.0.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e" - integrity sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA== - lru-cache@^9.0.0: version "9.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" @@ -7794,11 +6706,6 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memory-pager@^1.0.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" - integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== - meow@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467" @@ -7871,43 +6778,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -miniflare@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/miniflare/-/miniflare-2.14.0.tgz#cf68eff9dd130ad300b12758f363f0ec547e9558" - integrity sha512-xBOUccq1dm5riOfaqoMWCC1uCqT71EW0x4akQQuGYgm+Q44N1ETEmzXSbFVroJgOHe8Hwpqxo2D7OOFwqFevew== - dependencies: - "@miniflare/cache" "2.14.0" - "@miniflare/cli-parser" "2.14.0" - "@miniflare/core" "2.14.0" - "@miniflare/d1" "2.14.0" - "@miniflare/durable-objects" "2.14.0" - "@miniflare/html-rewriter" "2.14.0" - "@miniflare/http-server" "2.14.0" - "@miniflare/kv" "2.14.0" - "@miniflare/queues" "2.14.0" - "@miniflare/r2" "2.14.0" - "@miniflare/runner-vm" "2.14.0" - "@miniflare/scheduler" "2.14.0" - "@miniflare/shared" "2.14.0" - "@miniflare/sites" "2.14.0" - "@miniflare/storage-file" "2.14.0" - "@miniflare/storage-memory" "2.14.0" - "@miniflare/web-sockets" "2.14.0" - kleur "^4.1.4" - semiver "^1.1.0" - source-map-support "^0.5.20" - undici "5.20.0" - minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -8005,32 +6880,6 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mnemonist@0.38.3: - version "0.38.3" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.3.tgz#35ec79c1c1f4357cfda2fe264659c2775ccd7d9d" - integrity sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw== - dependencies: - obliterator "^1.6.1" - -mongodb-connection-string-url@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz#57901bf352372abdde812c81be47b75c6b2ec5cf" - integrity sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ== - dependencies: - "@types/whatwg-url" "^8.2.1" - whatwg-url "^11.0.0" - -mongodb@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-5.5.0.tgz#5d213ef68f6b48610909d98d537059f2d7f374a1" - integrity sha512-XgrkUgAAdfnZKQfk5AsYL8j7O99WHd4YXPxYxnh8dZxD+ekYWFRA3JktUsBnfg+455Smf75/+asoU/YLwNGoQQ== - dependencies: - bson "^5.3.0" - mongodb-connection-string-url "^2.6.0" - socks "^2.7.1" - optionalDependencies: - saslprep "^1.0.3" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -8046,32 +6895,6 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mustache@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" - integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== - -mysql2@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.3.1.tgz#b7e055812adeb46d96bc65a5b37fa57e70bc0388" - integrity sha512-UD84/AvLwO5qmSABEsBTZ7y7JKv3sM8JzWGhuL4tDkJwVsClVVAcelNSR5Unyhxj6/KHBAkjS7qe5/c+gEmNvA== - dependencies: - denque "^2.1.0" - generate-function "^2.3.1" - iconv-lite "^0.6.3" - long "^5.2.1" - lru-cache "^8.0.0" - named-placeholders "^1.1.3" - seq-queue "^0.0.5" - sqlstring "^2.3.2" - -named-placeholders@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.3.tgz#df595799a36654da55dda6152ba7a137ad1d9351" - integrity sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w== - dependencies: - lru-cache "^7.14.1" - natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -8114,11 +6937,6 @@ node-fetch@^2.6.1, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" -node-forge@^1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - node-gyp@8.x: version "8.4.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" @@ -8174,13 +6992,6 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npm-run-path@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" - integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== - dependencies: - path-key "^4.0.0" - npmlog@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" @@ -8201,16 +7012,6 @@ npmlog@^6.0.0: gauge "^4.0.3" set-blocking "^2.0.0" -npx-import@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/npx-import/-/npx-import-1.1.4.tgz#0ee9a27484c633255528f7ec2e4c2adeaa1fcda3" - integrity sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA== - dependencies: - execa "^6.1.0" - parse-package-name "^1.0.0" - semver "^7.3.7" - validate-npm-package-name "^4.0.0" - nwsapi@^2.2.0: version "2.2.4" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.4.tgz#fd59d5e904e8e1f03c25a7d5a15cfa16c714a1e5" @@ -8284,11 +7085,6 @@ object.values@^1.1.6: define-properties "^1.1.4" es-abstract "^1.20.4" -obliterator@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-1.6.1.tgz#dea03e8ab821f6c4d96a299e17aef6a3af994ef3" - integrity sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig== - on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -8310,13 +7106,6 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -onetime@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" - integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== - dependencies: - mimic-fn "^4.0.0" - optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -8410,11 +7199,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -packet-reader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" - integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== - param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -8440,11 +7224,6 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse-package-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-package-name/-/parse-package-name-1.0.0.tgz#1a108757e4ffc6889d5e78bcc4932a97c097a5a7" - integrity sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg== - parse5@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" @@ -8491,11 +7270,6 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-key@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" - integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== - path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -8519,64 +7293,6 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pg-cloudflare@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.0.tgz#833d70870d610d14bf9df7afb40e1cba310c17a0" - integrity sha512-tGM8/s6frwuAIyRcJ6nWcIvd3+3NmUKIs6OjviIm1HPPFEt5MzQDOTBQyhPWg/m0kCl95M6gA1JaIXtS8KovOA== - -pg-connection-string@^2.5.0, pg-connection-string@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.0.tgz#12a36cc4627df19c25cc1b9b736cc39ee1f73ae8" - integrity sha512-x14ibktcwlHKoHxx9X3uTVW9zIGR41ZB6QNhHb21OPNdCCO3NaRnpJuwKIQSR4u+Yqjx4HCvy7Hh7VSy1U4dGg== - -pg-int8@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" - integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== - -pg-pool@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.0.tgz#3190df3e4747a0d23e5e9e8045bcd99bda0a712e" - integrity sha512-clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ== - -pg-protocol@*, pg-protocol@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833" - integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== - -pg-types@^2.1.0, pg-types@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" - integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== - dependencies: - pg-int8 "1.0.1" - postgres-array "~2.0.0" - postgres-bytea "~1.0.0" - postgres-date "~1.0.4" - postgres-interval "^1.1.0" - -pg@^8.11.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.0.tgz#a37e534e94b57a7ed811e926f23a7c56385f55d9" - integrity sha512-meLUVPn2TWgJyLmy7el3fQQVwft4gU5NGyvV0XbD41iU9Jbg8lCH4zexhIkihDzVHJStlt6r088G6/fWeNjhXA== - dependencies: - buffer-writer "2.0.0" - packet-reader "1.0.0" - pg-connection-string "^2.6.0" - pg-pool "^3.6.0" - pg-protocol "^1.6.0" - pg-types "^2.1.0" - pgpass "1.x" - optionalDependencies: - pg-cloudflare "^1.1.0" - -pgpass@1.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" - integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== - dependencies: - split2 "^4.1.0" - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -8623,28 +7339,6 @@ pluralize@^8.0.0: resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== -postgres-array@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" - integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== - -postgres-bytea@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" - integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== - -postgres-date@~1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" - integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== - -postgres-interval@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" - integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== - dependencies: - xtend "^4.0.0" - preferred-pm@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.0.3.tgz#1b6338000371e3edbce52ef2e4f65eb2e73586d6" @@ -8801,9 +7495,9 @@ qs@6.11.0: side-channel "^1.0.4" qs@^6.11.0: - version "6.11.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.1.tgz#6c29dff97f0c0060765911ba65cbc9764186109f" - integrity sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ== + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== dependencies: side-channel "^1.0.4" @@ -8873,20 +7567,20 @@ react-reconciler@^0.28.0: loose-envify "^1.1.0" scheduler "^0.22.0" -react-router-dom@6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.16.0.tgz#86f24658da35eb66727e75ecbb1a029e33ee39d9" - integrity sha512-aTfBLv3mk/gaKLxgRDUPbPw+s4Y/O+ma3rEN1u8EgEpLpPe6gNjIsWt9rxushMHHMb7mSwxRGdGlGdvmFsyPIg== +react-router-dom@6.14.2: + version "6.14.2" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.14.2.tgz#88f520118b91aa60233bd08dbd3fdcaea3a68488" + integrity sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg== dependencies: - "@remix-run/router" "1.9.0" - react-router "6.16.0" + "@remix-run/router" "1.7.2" + react-router "6.14.2" -react-router@6.16.0: - version "6.16.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.16.0.tgz#abbf3d5bdc9c108c9b822a18be10ee004096fb81" - integrity sha512-VT4Mmc4jj5YyjpOi5jOf0I+TYzGpvzERy4ckNSvSh2RArv8LLoCxlsZ2D+tc7zgjxcY34oTz2hZaeX5RVprKqA== +react-router@6.14.2: + version "6.14.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.14.2.tgz#1f60994d8c369de7b8ba7a78d8f7ec23df76b300" + integrity sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ== dependencies: - "@remix-run/router" "1.9.0" + "@remix-run/router" "1.7.2" react-transition-group@^4.4.2: version "4.4.5" @@ -8951,18 +7645,6 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -redis@^4.6.6: - version "4.6.6" - resolved "https://registry.yarnpkg.com/redis/-/redis-4.6.6.tgz#46d4f2d149d1634d6ef53db5747412a0ef7974ec" - integrity sha512-aLs2fuBFV/VJ28oLBqYykfnhGGkFxvx0HdCEBYdJ99FFbSEMZ7c1nVKwR6ZRv+7bb7JnC0mmCzaqu8frgOYhpA== - dependencies: - "@redis/bloom" "1.2.0" - "@redis/client" "1.5.7" - "@redis/graph" "1.1.0" - "@redis/json" "1.0.4" - "@redis/search" "1.1.2" - "@redis/time-series" "1.0.4" - regenerate-unicode-properties@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" @@ -9144,13 +7826,6 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saslprep@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" - integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== - dependencies: - sparse-bitfield "^3.0.3" - saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -9172,24 +7847,12 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" -selfsigned@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== - dependencies: - node-forge "^1" - -semiver@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/semiver/-/semiver-1.1.0.tgz#9c97fb02c21c7ce4fcf1b73e2c7a24324bdddd5f" - integrity sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg== - "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.x, semver@^7.0.0, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.1: +semver@7.x, semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8: version "7.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== @@ -9208,6 +7871,13 @@ semver@^7.5.0: dependencies: lru-cache "^6.0.0" +semver@^7.5.1: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -9236,11 +7906,6 @@ sentence-case@^3.0.4: tslib "^2.0.3" upper-case-first "^2.0.2" -seq-queue@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" - integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q== - serve-static@1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" @@ -9365,7 +8030,7 @@ socks-proxy-agent@^6.0.0: debug "^4.3.3" socks "^2.6.2" -socks@^2.6.2, socks@^2.7.1: +socks@^2.6.2: version "2.7.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== @@ -9381,7 +8046,7 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.16, source-map-support@^0.5.20, source-map-support@^0.5.6: +source-map-support@^0.5.16, source-map-support@^0.5.6: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -9404,13 +8069,6 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== -sparse-bitfield@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" - integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== - dependencies: - memory-pager "^1.0.2" - spawndamnit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/spawndamnit/-/spawndamnit-2.0.0.tgz#9f762ac5c3476abb994b42ad592b5ad22bb4b0ad" @@ -9445,11 +8103,6 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== -split2@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -9466,11 +8119,6 @@ sqlite3@^5.1.6: optionalDependencies: node-gyp "8.x" -sqlstring@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" - integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== - ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" @@ -9478,11 +8126,6 @@ ssri@^8.0.0, ssri@^8.0.1: dependencies: minipass "^3.1.1" -stack-trace@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== - stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" @@ -9509,11 +8152,6 @@ stream-transform@^2.1.3: dependencies: mixme "^0.5.1" -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -9625,11 +8263,6 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-final-newline@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" - integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== - strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -9642,15 +8275,10 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== - superagent@^8.0.5: - version "8.0.9" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.0.9.tgz#2c6fda6fadb40516515f93e9098c0eb1602e0535" - integrity sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA== + version "8.1.2" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.1.2.tgz#03cb7da3ec8b32472c9d20f6c2a57c7f3765f30b" + integrity sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA== dependencies: component-emitter "^1.3.0" cookiejar "^2.1.4" @@ -9800,13 +8428,6 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" -tr46@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" - integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -9841,12 +8462,12 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^1.11.1, tslib@^1.8.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.0.3, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0: +tslib@^2.0.3, tslib@^2.4.0, tslib@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== @@ -9915,11 +8536,6 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^4.0.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.3.1.tgz#5cb58cdab5120f7ab0b40cfdc35073fb9adb651d" - integrity sha512-pphNW/msgOUSkJbH58x8sqpq8uQj6b0ZKGxEsLKMUnGorRcDjrUaLS+39+/ub41JNTwrrMyJcUB8+YZs3mbwqw== - type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -9959,13 +8575,6 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -undici@5.20.0: - version "5.20.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.20.0.tgz#6327462f5ce1d3646bcdac99da7317f455bcc263" - integrity sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g== - dependencies: - busboy "^1.6.0" - unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -10060,11 +8669,6 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -urlpattern-polyfill@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-4.0.3.tgz#c1fa7a73eb4e6c6a1ffb41b24cf31974f7392d3b" - integrity sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ== - util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -10075,11 +8679,6 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -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== - uuid@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" @@ -10111,13 +8710,6 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== - dependencies: - builtins "^5.0.0" - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -10166,11 +8758,6 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -10183,14 +8770,6 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== -whatwg-url@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" - integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== - dependencies: - tr46 "^3.0.0" - webidl-conversions "^7.0.0" - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -10335,11 +8914,6 @@ ws@^7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.2.2: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -10350,11 +8924,6 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" @@ -10365,11 +8934,6 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@4.0.0, yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -10380,6 +8944,11 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" @@ -10450,13 +9019,3 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -youch@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/youch/-/youch-2.2.2.tgz#cb87a359a5c524ebd35eb07ca3a1521dbc7e1a3e" - integrity sha512-/FaCeG3GkuJwaMR34GHVg0l8jCbafZLHiFowSjqLlqhC6OMyf2tPJBu8UirF7/NI9X/R5ai4QfEKUCOxMAGxZQ== - dependencies: - "@types/stack-trace" "0.0.29" - cookie "^0.4.1" - mustache "^4.2.0" - stack-trace "0.0.10" From 360072777b5935a7c937cfabb432bc979b845d43 Mon Sep 17 00:00:00 2001 From: Rezaan Syed Date: Thu, 7 Sep 2023 12:42:36 -0400 Subject: [PATCH 03/22] Make EmbeddedAuthStrategy the default --- packages/shopify-app-remix/src/server/shopify-app.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/shopify-app-remix/src/server/shopify-app.ts b/packages/shopify-app-remix/src/server/shopify-app.ts index 704dd3931b..340c89a537 100644 --- a/packages/shopify-app-remix/src/server/shopify-app.ts +++ b/packages/shopify-app-remix/src/server/shopify-app.ts @@ -21,7 +21,6 @@ import { } from './types'; import {SHOPIFY_REMIX_LIBRARY_VERSION} from './version'; import {registerWebhooksFactory} from './authenticate/webhooks'; -import {AuthStrategy} from './authenticate/admin/authenticate'; import {authenticateWebhookFactory} from './authenticate/webhooks/authenticate'; import {overrideLogger} from './override-logger'; import {addDocumentResponseHeadersFactory} from './authenticate/helpers'; @@ -29,6 +28,7 @@ import {loginFactory} from './authenticate/login/login'; import {unauthenticatedAdminContextFactory} from './unauthenticated/admin'; import {authenticatePublicFactory} from './authenticate/public'; import {unauthenticatedStorefrontContextFactory} from './unauthenticated/storefront'; +import {EmbeddedAuthStrategy} from './authenticate/admin/embedded-authenticate'; /** * Creates an object your app will use to interact with Shopify. @@ -64,7 +64,8 @@ export function shopifyApp< } const params: BasicParams = {api, config, logger}; - const oauth = new AuthStrategy(params); + // const oauth = new AuthStrategy(params); + const tokenExchange = new EmbeddedAuthStrategy(params); const shopify: | AdminApp @@ -74,7 +75,7 @@ export function shopifyApp< addDocumentResponseHeaders: addDocumentResponseHeadersFactory(params), registerWebhooks: registerWebhooksFactory(params), authenticate: { - admin: oauth.authenticateAdmin.bind(oauth), + admin: tokenExchange.authenticateAdmin.bind(tokenExchange), public: authenticatePublicFactory(params), webhook: authenticateWebhookFactory< Config['future'], From 0b3e4691e4a9a6d06a55ee30cd1e376f965acc4f Mon Sep 17 00:00:00 2001 From: Rezaan Syed Date: Thu, 7 Sep 2023 17:04:43 -0400 Subject: [PATCH 04/22] Redirect to bounce page when id token in URL param is invalid --- .../admin/embedded-authenticate.ts | 18 ++++++++++++----- .../helpers/validate-session-token.ts | 20 +++++++++++++++++++ 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts index 1742517436..1b4d3cadb0 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts @@ -15,10 +15,10 @@ import type { } from '../../config-types'; import { getSessionTokenHeader, - validateSessionToken, rejectBotRequest, respondToOptionsRequest, ensureCORSHeadersFactory, + validateSessionTokenWithCallback, } from '../helpers'; import type {BillingContext} from './billing/types'; @@ -129,10 +129,17 @@ export class EmbeddedAuthStrategy< } if (sessionTokenString) { - const sessionToken = await validateSessionToken( - {api, logger, config}, - sessionTokenString, - ); + let sessionToken; + + try { + sessionToken = await validateSessionTokenWithCallback( + {api, logger, config}, + sessionTokenString, + ); + } catch { + console.log('CAUGHT'); + throw this.redirectToBouncePage(url); + } return this.getAccessToken(request, sessionTokenString, sessionToken); } else { @@ -239,6 +246,7 @@ export class EmbeddedAuthStrategy< const params = new URLSearchParams(url.search); params.set('shopify-reload', url.href); + params.delete('id_token'); // eslint-disable-next-line no-warning-comments // TODO Make sure this works on chrome without a tunnel (weird HTTPS redirect issue) diff --git a/packages/shopify-app-remix/src/server/authenticate/helpers/validate-session-token.ts b/packages/shopify-app-remix/src/server/authenticate/helpers/validate-session-token.ts index a156dd9566..48bf476d9e 100644 --- a/packages/shopify-app-remix/src/server/authenticate/helpers/validate-session-token.ts +++ b/packages/shopify-app-remix/src/server/authenticate/helpers/validate-session-token.ts @@ -30,3 +30,23 @@ export async function validateSessionToken( }); } } + +export async function validateSessionTokenWithCallback( + {api, logger}: BasicParams, + token: string, + {checkAudience = true}: ValidateSessionTokenOptions = {}, +) { + logger.debug('Validating session token'); + + console.log('BEFORE'); + const payload = await api.session.decodeSessionToken(token, { + checkAudience, + }); + console.log('AFTER'); + + logger.debug('Session token is valid', { + payload: JSON.stringify(payload), + }); + + return payload; +} From 0fcb5ed02102d49f952d55223133c56234732d06 Mon Sep 17 00:00:00 2001 From: Rachel Carvalho Date: Thu, 7 Sep 2023 17:35:32 -0400 Subject: [PATCH 05/22] [temporary] add local-build.sh file --- local-build.sh | 56 ++ package.json | 3 +- tsconfig.json | 2 +- yarn.lock | 1618 +++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 1650 insertions(+), 29 deletions(-) create mode 100755 local-build.sh diff --git a/local-build.sh b/local-build.sh new file mode 100755 index 0000000000..634839de37 --- /dev/null +++ b/local-build.sh @@ -0,0 +1,56 @@ +cd ~/src/github.com/Shopify/shopify-app-js + +# clean shopify-api-js's build +cd ../shopify-api-js +yarn token-exchange-clean +cd ../shopify-app-js + +# unlink local version of shopify-api-js (or true, it's ok if it wasn't linked before) +yarn unlink "@shopify/shopify-api" || true + +# reinstall dependencies (needs force after unlink) +yarn install --force + +# unlink app-remix package +if [ -d "packages/shopify-app-remix/build/cjs" ]; then + cd packages/shopify-app-remix/build/cjs + yarn unlink || true + cd ../../../../ +fi + +# unlink react, polaris and react run packages +cd node_modules/react +yarn unlink || true +cd ../@shopify/polaris +yarn unlink || true +cd ../../@remix-run/react +yarn unlink || true +cd ../../../ + +# clean build +yarn clean + +# re-build shopify-api-js +cd ../shopify-api-js +yarn token-exchange-build +cd ../shopify-app-js + +# re-link shopify-api-js +yarn link "@shopify/shopify-api" + +# rebuild +yarn build + +# link shopify-app-remix from the build folder +cd packages/shopify-app-remix/build/cjs +yarn link +cd ../../../../ + +# link react, polaris and react run packages so that app uses a single version of them (they're direct app dependencies) +cd node_modules/react +yarn link +cd ../@shopify/polaris +yarn link +cd ../../@remix-run/react +yarn link +cd ../../../ diff --git a/package.json b/package.json index 136606cbf7..cab1aecf3c 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "test": "loom test", "lint": "loom lint", "release": "loom build && changeset publish", - "clean": "rimraf ./packages/*/build .loom" + "clean": "rimraf ./packages/*/build .loom", + "token-exchange-build": "./local-build" }, "devDependencies": { "@changesets/cli": "^2.26.1", diff --git a/tsconfig.json b/tsconfig.json index 12ec76a85e..111978eaa7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,7 @@ {"path": "./packages/shopify-app-session-storage"}, {"path": "./packages/shopify-app-session-storage-test-utils"}, {"path": "./packages/shopify-app-session-storage-prisma"}, - {"path": "./packages/shopify-app-session-storage-sqlite"}, + {"path": "./packages/shopify-app-session-storage-memory"}, {"path": "./packages/shopify-app-remix"} ] } diff --git a/yarn.lock b/yarn.lock index 16f03cf560..e06143a6cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,445 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" +"@aws-crypto/crc32@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" + integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" + integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" + integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== + dependencies: + "@aws-crypto/ie11-detection" "^3.0.0" + "@aws-crypto/sha256-js" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^3.0.0" + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.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@3.0.0", "@aws-crypto/sha256-js@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" + integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== + dependencies: + "@aws-crypto/util" "^3.0.0" + "@aws-sdk/types" "^3.222.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" + integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" + integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== + dependencies: + "@aws-sdk/types" "^3.222.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/client-dynamodb@^3.332.0": + version "3.405.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-dynamodb/-/client-dynamodb-3.405.0.tgz#f50b3ffd2e12547429a7419fb7904103de9dc6a4" + integrity sha512-hBaC5F6M1CMRg7RkVC4xbqT+9CVunxrxeQKZCy4H2iMnOmFyY9InjOqF06rF3dRTTDJl5Ski9AWJrovg29Q+iw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/client-sts" "3.405.0" + "@aws-sdk/credential-provider-node" "3.405.0" + "@aws-sdk/middleware-endpoint-discovery" "3.405.0" + "@aws-sdk/middleware-host-header" "3.398.0" + "@aws-sdk/middleware-logger" "3.398.0" + "@aws-sdk/middleware-recursion-detection" "3.398.0" + "@aws-sdk/middleware-signing" "3.398.0" + "@aws-sdk/middleware-user-agent" "3.398.0" + "@aws-sdk/types" "3.398.0" + "@aws-sdk/util-endpoints" "3.398.0" + "@aws-sdk/util-user-agent-browser" "3.398.0" + "@aws-sdk/util-user-agent-node" "3.405.0" + "@smithy/config-resolver" "^2.0.5" + "@smithy/fetch-http-handler" "^2.0.5" + "@smithy/hash-node" "^2.0.5" + "@smithy/invalid-dependency" "^2.0.5" + "@smithy/middleware-content-length" "^2.0.5" + "@smithy/middleware-endpoint" "^2.0.5" + "@smithy/middleware-retry" "^2.0.5" + "@smithy/middleware-serde" "^2.0.5" + "@smithy/middleware-stack" "^2.0.0" + "@smithy/node-config-provider" "^2.0.6" + "@smithy/node-http-handler" "^2.0.5" + "@smithy/protocol-http" "^2.0.5" + "@smithy/smithy-client" "^2.0.5" + "@smithy/types" "^2.2.2" + "@smithy/url-parser" "^2.0.5" + "@smithy/util-base64" "^2.0.0" + "@smithy/util-body-length-browser" "^2.0.0" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.6" + "@smithy/util-defaults-mode-node" "^2.0.6" + "@smithy/util-retry" "^2.0.0" + "@smithy/util-utf8" "^2.0.0" + "@smithy/util-waiter" "^2.0.5" + tslib "^2.5.0" + uuid "^8.3.2" + +"@aws-sdk/client-sso@3.405.0": + version "3.405.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.405.0.tgz#87037d5232f0aa7a3c7dda23ac2aeb5ec91bfc87" + integrity sha512-z1ssydU07bDhe0tNXQwVO+rWh/iSfK48JI8s8vgpBNwH+NejMzIJ9r3AkjCiJ+LSAwlBZItUsNWwR0veIfgBiw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/middleware-host-header" "3.398.0" + "@aws-sdk/middleware-logger" "3.398.0" + "@aws-sdk/middleware-recursion-detection" "3.398.0" + "@aws-sdk/middleware-user-agent" "3.398.0" + "@aws-sdk/types" "3.398.0" + "@aws-sdk/util-endpoints" "3.398.0" + "@aws-sdk/util-user-agent-browser" "3.398.0" + "@aws-sdk/util-user-agent-node" "3.405.0" + "@smithy/config-resolver" "^2.0.5" + "@smithy/fetch-http-handler" "^2.0.5" + "@smithy/hash-node" "^2.0.5" + "@smithy/invalid-dependency" "^2.0.5" + "@smithy/middleware-content-length" "^2.0.5" + "@smithy/middleware-endpoint" "^2.0.5" + "@smithy/middleware-retry" "^2.0.5" + "@smithy/middleware-serde" "^2.0.5" + "@smithy/middleware-stack" "^2.0.0" + "@smithy/node-config-provider" "^2.0.6" + "@smithy/node-http-handler" "^2.0.5" + "@smithy/protocol-http" "^2.0.5" + "@smithy/smithy-client" "^2.0.5" + "@smithy/types" "^2.2.2" + "@smithy/url-parser" "^2.0.5" + "@smithy/util-base64" "^2.0.0" + "@smithy/util-body-length-browser" "^2.0.0" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.6" + "@smithy/util-defaults-mode-node" "^2.0.6" + "@smithy/util-retry" "^2.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.5.0" + +"@aws-sdk/client-sts@3.405.0": + version "3.405.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.405.0.tgz#5445286eb2ebca25dca6004686e71ce9b3cd50c7" + integrity sha512-asVEpda3zu5QUO5ZNNjbLBS0718IhxxyUDVrNmVTKZoOhK1pMNouGZf+l49v0Lb5cOPbUds8cxsNaInj2MvIKw== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/credential-provider-node" "3.405.0" + "@aws-sdk/middleware-host-header" "3.398.0" + "@aws-sdk/middleware-logger" "3.398.0" + "@aws-sdk/middleware-recursion-detection" "3.398.0" + "@aws-sdk/middleware-sdk-sts" "3.398.0" + "@aws-sdk/middleware-signing" "3.398.0" + "@aws-sdk/middleware-user-agent" "3.398.0" + "@aws-sdk/types" "3.398.0" + "@aws-sdk/util-endpoints" "3.398.0" + "@aws-sdk/util-user-agent-browser" "3.398.0" + "@aws-sdk/util-user-agent-node" "3.405.0" + "@smithy/config-resolver" "^2.0.5" + "@smithy/fetch-http-handler" "^2.0.5" + "@smithy/hash-node" "^2.0.5" + "@smithy/invalid-dependency" "^2.0.5" + "@smithy/middleware-content-length" "^2.0.5" + "@smithy/middleware-endpoint" "^2.0.5" + "@smithy/middleware-retry" "^2.0.5" + "@smithy/middleware-serde" "^2.0.5" + "@smithy/middleware-stack" "^2.0.0" + "@smithy/node-config-provider" "^2.0.6" + "@smithy/node-http-handler" "^2.0.5" + "@smithy/protocol-http" "^2.0.5" + "@smithy/smithy-client" "^2.0.5" + "@smithy/types" "^2.2.2" + "@smithy/url-parser" "^2.0.5" + "@smithy/util-base64" "^2.0.0" + "@smithy/util-body-length-browser" "^2.0.0" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.6" + "@smithy/util-defaults-mode-node" "^2.0.6" + "@smithy/util-retry" "^2.0.0" + "@smithy/util-utf8" "^2.0.0" + fast-xml-parser "4.2.5" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-env@3.398.0": + version "3.398.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.398.0.tgz#28d0d4d2de85dd35fdf83298191ea495da8f8646" + integrity sha512-Z8Yj5z7FroAsR6UVML+XUdlpoqEe9Dnle8c2h8/xWwIC2feTfIBhjLhRVxfbpbM1pLgBSNEcZ7U8fwq5l7ESVQ== + dependencies: + "@aws-sdk/types" "3.398.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-ini@3.405.0": + version "3.405.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.405.0.tgz#e6aa48bdc164a1df9aa14e30dc6ec69b8c038bf3" + integrity sha512-b4TqVsM4WQM96GDVs+TYOhU2/0SnUWzz6NH55qY1y2xyF8/pZEhc0XXdpvZtQQBLGdROhXCbxhBVye8GmTpgcg== + dependencies: + "@aws-sdk/credential-provider-env" "3.398.0" + "@aws-sdk/credential-provider-process" "3.405.0" + "@aws-sdk/credential-provider-sso" "3.405.0" + "@aws-sdk/credential-provider-web-identity" "3.398.0" + "@aws-sdk/types" "3.398.0" + "@smithy/credential-provider-imds" "^2.0.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-node@3.405.0": + version "3.405.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.405.0.tgz#d877a2809fedf682a3c7451968ecdff75f7542da" + integrity sha512-AMmRP09nwYsft0MXDlHIxMQe7IloWW8As0lbZmPrG7Y7mK5RDmCIwD2yMDz77Zqlv09FsYt+9+cOK2fTNhim+Q== + dependencies: + "@aws-sdk/credential-provider-env" "3.398.0" + "@aws-sdk/credential-provider-ini" "3.405.0" + "@aws-sdk/credential-provider-process" "3.405.0" + "@aws-sdk/credential-provider-sso" "3.405.0" + "@aws-sdk/credential-provider-web-identity" "3.398.0" + "@aws-sdk/types" "3.398.0" + "@smithy/credential-provider-imds" "^2.0.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-process@3.405.0": + version "3.405.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.405.0.tgz#4ef0a913ab3c60753f56430ea658b1fabb8f8553" + integrity sha512-EqAMcUVeZAICYHHL8x5Fi5CYPgCo9UCE7ScWmU5Sa2wAFY4XLyQ1mMxX3lKGYx9lBxWk3dqnhmvlcqdzN7AjyQ== + dependencies: + "@aws-sdk/types" "3.398.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-sso@3.405.0": + version "3.405.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.405.0.tgz#457f621ca592df29ac8ca6588897b9fac6387f4c" + integrity sha512-fXqSgQHz7qcmIWMVguwSMSjqFkVfN2+XiNgiskcmeYiCS7mIGAgUnKABZc9Ds2+YW9ATYiY0BOD5aWxc8TX5fA== + dependencies: + "@aws-sdk/client-sso" "3.405.0" + "@aws-sdk/token-providers" "3.405.0" + "@aws-sdk/types" "3.398.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/credential-provider-web-identity@3.398.0": + version "3.398.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.398.0.tgz#0396a34bf9d2e4b48530c2f899cbb4101b592db8" + integrity sha512-iG3905Alv9pINbQ8/MIsshgqYMbWx+NDQWpxbIW3W0MkSH3iAqdVpSCteYidYX9G/jv2Um1nW3y360ib20bvNg== + dependencies: + "@aws-sdk/types" "3.398.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/endpoint-cache@3.310.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/endpoint-cache/-/endpoint-cache-3.310.0.tgz#e6f84bfcd55462966811390ef797145559bab15a" + integrity sha512-y3wipforet41EDTI0vnzxILqwAGll1KfI5qcdX9pXF/WF1f+3frcOtPiWtQEZQpy4czRogKm3BHo70QBYAZxlQ== + dependencies: + mnemonist "0.38.3" + tslib "^2.5.0" + +"@aws-sdk/middleware-endpoint-discovery@3.405.0": + version "3.405.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint-discovery/-/middleware-endpoint-discovery-3.405.0.tgz#14040780cf5a63eed08367ae508f0178c0694775" + integrity sha512-6Q4quuNjXEkX61eI6/UJOh16SGBZzGykJu/SYrALftHpn8D+hgeaOpc2wAkpObT8KSItoRSE/uXWTnN7XNmJLA== + dependencies: + "@aws-sdk/endpoint-cache" "3.310.0" + "@aws-sdk/types" "3.398.0" + "@smithy/protocol-http" "^2.0.5" + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/middleware-host-header@3.398.0": + version "3.398.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.398.0.tgz#4e5eeaa8ead96237e70cb6930dfb813a9c21ae8c" + integrity sha512-m+5laWdBaxIZK2ko0OwcCHJZJ5V1MgEIt8QVQ3k4/kOkN9ICjevOYmba751pHoTnbOYB7zQd6D2OT3EYEEsUcA== + dependencies: + "@aws-sdk/types" "3.398.0" + "@smithy/protocol-http" "^2.0.5" + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/middleware-logger@3.398.0": + version "3.398.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.398.0.tgz#1f336c329861c2aa7cc267d84ef41e74e98b1502" + integrity sha512-CiJjW+FL12elS6Pn7/UVjVK8HWHhXMfvHZvOwx/Qkpy340sIhkuzOO6fZEruECDTZhl2Wqn81XdJ1ZQ4pRKpCg== + dependencies: + "@aws-sdk/types" "3.398.0" + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/middleware-recursion-detection@3.398.0": + version "3.398.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.398.0.tgz#e456d67fc88afac73004a8feae497d3ab24231e4" + integrity sha512-7QpOqPQAZNXDXv6vsRex4R8dLniL0E/80OPK4PPFsrCh9btEyhN9Begh4i1T+5lL28hmYkztLOkTQ2N5J3hgRQ== + dependencies: + "@aws-sdk/types" "3.398.0" + "@smithy/protocol-http" "^2.0.5" + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/middleware-sdk-sts@3.398.0": + version "3.398.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.398.0.tgz#f7383c86eedba80666b1a009256a1127d1c4edc6" + integrity sha512-+JH76XHEgfVihkY+GurohOQ5Z83zVN1nYcQzwCFnCDTh4dG4KwhnZKG+WPw6XJECocY0R+H0ivofeALHvVWJtQ== + dependencies: + "@aws-sdk/middleware-signing" "3.398.0" + "@aws-sdk/types" "3.398.0" + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/middleware-signing@3.398.0": + version "3.398.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.398.0.tgz#ad8f73c2e7ab564eea95568e2e109f41af6128ec" + integrity sha512-O0KqXAix1TcvZBFt1qoFkHMUNJOSgjJTYS7lFTRKSwgsD27bdW2TM2r9R8DAccWFt5Amjkdt+eOwQMIXPGTm8w== + dependencies: + "@aws-sdk/types" "3.398.0" + "@smithy/property-provider" "^2.0.0" + "@smithy/protocol-http" "^2.0.5" + "@smithy/signature-v4" "^2.0.0" + "@smithy/types" "^2.2.2" + "@smithy/util-middleware" "^2.0.0" + tslib "^2.5.0" + +"@aws-sdk/middleware-user-agent@3.398.0": + version "3.398.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.398.0.tgz#42542b3697ee6812cb8f81fd19757dc1592af0e0" + integrity sha512-nF1jg0L+18b5HvTcYzwyFgfZQQMELJINFqI0mi4yRKaX7T5a3aGp5RVLGGju/6tAGTuFbfBoEhkhU3kkxexPYQ== + dependencies: + "@aws-sdk/types" "3.398.0" + "@aws-sdk/util-endpoints" "3.398.0" + "@smithy/protocol-http" "^2.0.5" + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/token-providers@3.405.0": + version "3.405.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.405.0.tgz#6af597f695afe0f7be20d5e10fb2cddccdd08470" + integrity sha512-rVzC7ptf7TlV84M9w+Ds9isio1EY7bs1MRFv/6lmYstsyTri+DaZG10TwXSGfzIMwB0yVh11niCxO9wSjQ36zg== + dependencies: + "@aws-crypto/sha256-browser" "3.0.0" + "@aws-crypto/sha256-js" "3.0.0" + "@aws-sdk/middleware-host-header" "3.398.0" + "@aws-sdk/middleware-logger" "3.398.0" + "@aws-sdk/middleware-recursion-detection" "3.398.0" + "@aws-sdk/middleware-user-agent" "3.398.0" + "@aws-sdk/types" "3.398.0" + "@aws-sdk/util-endpoints" "3.398.0" + "@aws-sdk/util-user-agent-browser" "3.398.0" + "@aws-sdk/util-user-agent-node" "3.405.0" + "@smithy/config-resolver" "^2.0.5" + "@smithy/fetch-http-handler" "^2.0.5" + "@smithy/hash-node" "^2.0.5" + "@smithy/invalid-dependency" "^2.0.5" + "@smithy/middleware-content-length" "^2.0.5" + "@smithy/middleware-endpoint" "^2.0.5" + "@smithy/middleware-retry" "^2.0.5" + "@smithy/middleware-serde" "^2.0.5" + "@smithy/middleware-stack" "^2.0.0" + "@smithy/node-config-provider" "^2.0.6" + "@smithy/node-http-handler" "^2.0.5" + "@smithy/property-provider" "^2.0.0" + "@smithy/protocol-http" "^2.0.5" + "@smithy/shared-ini-file-loader" "^2.0.6" + "@smithy/smithy-client" "^2.0.5" + "@smithy/types" "^2.2.2" + "@smithy/url-parser" "^2.0.5" + "@smithy/util-base64" "^2.0.0" + "@smithy/util-body-length-browser" "^2.0.0" + "@smithy/util-body-length-node" "^2.1.0" + "@smithy/util-defaults-mode-browser" "^2.0.6" + "@smithy/util-defaults-mode-node" "^2.0.6" + "@smithy/util-retry" "^2.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.5.0" + +"@aws-sdk/types@3.398.0", "@aws-sdk/types@^3.222.0": + version "3.398.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.398.0.tgz#8ce02559536670f9188cddfce32e9dd12b4fe965" + integrity sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ== + dependencies: + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/util-dynamodb@^3.332.0": + version "3.405.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-dynamodb/-/util-dynamodb-3.405.0.tgz#42b5bdc71d1d0a1c5940ef99a0be0fd7e973167f" + integrity sha512-MY7PN7Qp9UbU2pRvNZMl1kBNfOP7yjv+Ee4/S81A0ubb6cR7IDzgfZH9Wrv0+3dFwHxltOeDq00wC5OeRwUWAw== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/util-endpoints@3.398.0": + version "3.398.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.398.0.tgz#cb1cc5fe3e4b3839e4e1cc6a66f834cf0dde20ee" + integrity sha512-Fy0gLYAei/Rd6BrXG4baspCnWTUSd0NdokU1pZh4KlfEAEN1i8SPPgfiO5hLk7+2inqtCmqxVJlfqbMVe9k4bw== + dependencies: + "@aws-sdk/types" "3.398.0" + tslib "^2.5.0" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.310.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz#b071baf050301adee89051032bd4139bba32cc40" + integrity sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w== + dependencies: + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-browser@3.398.0": + version "3.398.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.398.0.tgz#5c3e430032eb867b7cbe48dda51a6d8c4ea000a8" + integrity sha512-A3Tzx1tkDHlBT+IgxmsMCHbV8LM7SwwCozq2ZjJRx0nqw3MCrrcxQFXldHeX/gdUMO+0Oocb7HGSnVODTq+0EA== + dependencies: + "@aws-sdk/types" "3.398.0" + "@smithy/types" "^2.2.2" + bowser "^2.11.0" + tslib "^2.5.0" + +"@aws-sdk/util-user-agent-node@3.405.0": + version "3.405.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.405.0.tgz#4904eb60b0cb9d8b31b773f7afc9568fb217bd4d" + integrity sha512-6Ssld7aalKCnW6lSGfiiWpqwo2L+AmYq2oV3P9yYAo9ZL+Q78dXquabwj3uq3plJ4l2xE4Gfcf2FJ/1PZpqDvQ== + dependencies: + "@aws-sdk/types" "3.398.0" + "@smithy/node-config-provider" "^2.0.6" + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" @@ -1275,6 +1714,11 @@ human-id "^1.0.2" prettier "^2.7.1" +"@cloudflare/workers-types@^4.20230511.0": + version "4.20230904.0" + resolved "https://registry.yarnpkg.com/@cloudflare/workers-types/-/workers-types-4.20230904.0.tgz#80e3b2384d7425c0b696a7aa8cab1b3c5d09e45c" + integrity sha512-IX4oJCe14ctblSPZBlW64BVZ9nYLUo6sD2I5gu3hX0ywByYWm1OuoKm9Xb/Zpbj8Ph18Z7Ryii6u2/ocnncXdA== + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -1331,6 +1775,11 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@iarna/toml@^2.2.5": + version "2.2.5" + resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" + integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -1865,6 +2314,179 @@ semver "^7.3.5" tar "^6.1.11" +"@miniflare/cache@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/cache/-/cache-2.14.1.tgz#2c6a165caca63a39b1aa56c5152a583be8330398" + integrity sha512-f/o6UBV6UX+MlhjcEch73/wjQvvNo37dgYmP6Pn2ax1/mEHhJ7allNAqenmonT4djNeyB3eEYV3zUl54wCEwrg== + dependencies: + "@miniflare/core" "2.14.1" + "@miniflare/shared" "2.14.1" + http-cache-semantics "^4.1.0" + undici "5.20.0" + +"@miniflare/cli-parser@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/cli-parser/-/cli-parser-2.14.1.tgz#e92d755bfcf9d9c6f6a6f072c8856b9f884967a3" + integrity sha512-MLvMuvxQPL/uw94Dg6CR3CM62uGoxxCkgF7aDtBYF9zb6YCfjOQn0q5d7zWxydpYAb5Dn1N1hZMnjAy7mlpNdQ== + dependencies: + "@miniflare/shared" "2.14.1" + kleur "^4.1.4" + +"@miniflare/core@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/core/-/core-2.14.1.tgz#545199da6598c8295e24f629a1aa1d44bad1f6ba" + integrity sha512-d+SGAda/VoXq+SKz04oq8ATUwQw5755L87fgPR8pTdR2YbWkxdbmEm1z2olOpDiUjcR86aN6NtCjY6tUC7fqaw== + dependencies: + "@iarna/toml" "^2.2.5" + "@miniflare/queues" "2.14.1" + "@miniflare/shared" "2.14.1" + "@miniflare/watcher" "2.14.1" + busboy "^1.6.0" + dotenv "^10.0.0" + kleur "^4.1.4" + set-cookie-parser "^2.4.8" + undici "5.20.0" + urlpattern-polyfill "^4.0.3" + +"@miniflare/d1@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/d1/-/d1-2.14.1.tgz#016ec975981c831ef5e036d2243dc678cec6ab4e" + integrity sha512-MulDDBsDD8o5DwiqdMeJZy2vLoMji+NWnLcuibSag2mayA0LJcp0eHezseZNkW+knciWR1gMP8Xpa4Q1KwkbKA== + dependencies: + "@miniflare/core" "2.14.1" + "@miniflare/shared" "2.14.1" + +"@miniflare/durable-objects@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/durable-objects/-/durable-objects-2.14.1.tgz#48f29847afd7699e369fb0caa1a4fa23c1d39315" + integrity sha512-T+oHGw5GcEIilkzrf0xDES7jzLVqcXJzSGsEIWqnBFLtdlKmrZF679ulRLBbyMVgvpQz6FRONh9jTH1XIiuObQ== + dependencies: + "@miniflare/core" "2.14.1" + "@miniflare/shared" "2.14.1" + "@miniflare/storage-memory" "2.14.1" + undici "5.20.0" + +"@miniflare/html-rewriter@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/html-rewriter/-/html-rewriter-2.14.1.tgz#e4f109d5e0efe862717b1ff33e75644d538618b1" + integrity sha512-vp4uZXuEKhtIaxoXa7jgDAPItlzjbfoUqYWp+fwDKv4J4mfQnzzs/5hwjbE7+Ihm/KNI0zNi8P0sSWjIRFl6ng== + dependencies: + "@miniflare/core" "2.14.1" + "@miniflare/shared" "2.14.1" + html-rewriter-wasm "^0.4.1" + undici "5.20.0" + +"@miniflare/http-server@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/http-server/-/http-server-2.14.1.tgz#7b21f76b0fd08621451d0649bd78adb83b0cd8de" + integrity sha512-ICT9KuecAF5+AHs9dTnk7DRxCPYLfI3QCtfHOcGQWFuOoe4MCtQk4joo0pxMaSgAJ4TiOOxz3KRWO0G2FwgiPQ== + dependencies: + "@miniflare/core" "2.14.1" + "@miniflare/shared" "2.14.1" + "@miniflare/web-sockets" "2.14.1" + kleur "^4.1.4" + selfsigned "^2.0.0" + undici "5.20.0" + ws "^8.2.2" + youch "^2.2.2" + +"@miniflare/kv@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/kv/-/kv-2.14.1.tgz#6d04b7f11969baa1efc5c84d6c0ca0003afafa0a" + integrity sha512-Gp07Wcszle7ptsoO8mCtKQRs0AbQnYo1rgnxUcsTL3xJJaHXEA/B9EKSADS2XzJMeY4PgUOHU6Rf08OOF2yWag== + dependencies: + "@miniflare/shared" "2.14.1" + +"@miniflare/queues@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/queues/-/queues-2.14.1.tgz#ce586e08b5b4dbdae6c5ed0d76317336269554c0" + integrity sha512-uBzrbBkIgtNoztDpmMMISg/brYtxLHRE7oTaN8OVnq3bG+3nF9kQC42HUz+Vg+sf65UlvhSaqkjllgx+fNtOxQ== + dependencies: + "@miniflare/shared" "2.14.1" + +"@miniflare/r2@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/r2/-/r2-2.14.1.tgz#57a352576746a6f7a19726e7559a6e5607c4afb9" + integrity sha512-grOMnGf2XSicbgxMYMBfWE37k/e7l5NnwXZIViQ+N06uksp+MLA8E6yKQNtvrWQS66TM8gBvMnWo96OFmYjb6Q== + dependencies: + "@miniflare/core" "2.14.1" + "@miniflare/shared" "2.14.1" + undici "5.20.0" + +"@miniflare/runner-vm@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/runner-vm/-/runner-vm-2.14.1.tgz#401beb39f34151c7a12ce5018decb78767bfe5c2" + integrity sha512-UobsGM0ICVPDlJD54VPDSx0EXrIY3nJMXBy2zIFuuUOz4hQKXvMQ6jtAlJ8UNKer+XXI3Mb/9R/gfU8r6kxIMA== + dependencies: + "@miniflare/shared" "2.14.1" + +"@miniflare/scheduler@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/scheduler/-/scheduler-2.14.1.tgz#13b992eaa0c8141ffe073eb0b39d610e58ca50d0" + integrity sha512-mCFUkGpPcV74tbDAuDLSrLPDiRei7hIIPQL53C4rtCDyLfxYgwLQFDecllQs5IvDzAx4qFpu835Ppc6tbHR5Mw== + dependencies: + "@miniflare/core" "2.14.1" + "@miniflare/shared" "2.14.1" + cron-schedule "^3.0.4" + +"@miniflare/shared@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/shared/-/shared-2.14.1.tgz#b150787e2b846f43085b15747b5e6f8a90fa1634" + integrity sha512-73GnLtWn5iP936ctE6ZJrMqGu134KOoIIveq5Yd/B+NnbFfzpuzjCpkLrnqjkDdsxDbruXSb5eTR/SmAdpJxZQ== + dependencies: + "@types/better-sqlite3" "^7.6.0" + kleur "^4.1.4" + npx-import "^1.1.4" + picomatch "^2.3.1" + +"@miniflare/sites@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/sites/-/sites-2.14.1.tgz#f2bc8308c5488aea961d7a82ffe4f91d23411fb0" + integrity sha512-AbbIcU6VBeaNqVgMiLMWN2a09eX3jZmjaEi0uKqufVDqW/QIz47/30aC0O9qTe+XYpi3jjph/Ux7uEY8Z+enMw== + dependencies: + "@miniflare/kv" "2.14.1" + "@miniflare/shared" "2.14.1" + "@miniflare/storage-file" "2.14.1" + +"@miniflare/storage-file@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/storage-file/-/storage-file-2.14.1.tgz#4cf14baad1fee75d523a6cf7ea7bfabd6a7d7dd1" + integrity sha512-faZu9tRSW6c/looVFI/ZhkdGsIc9NfNCbSl3jJRmm7xgyZ+/S+dQ5JtGVbVsUIX8YGWDyE2j3oWCGCjxGLEpkg== + dependencies: + "@miniflare/shared" "2.14.1" + "@miniflare/storage-memory" "2.14.1" + +"@miniflare/storage-memory@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/storage-memory/-/storage-memory-2.14.1.tgz#9615de975a85a25b3dccaa9f085c955550e364f2" + integrity sha512-lfQbQwopVWd4W5XzrYdp0rhk3dJpvSmv1Wwn9RhNO20WrcuoxpdSzbmpBahsgYVg+OheVaEbS6RpFqdmwwLTog== + dependencies: + "@miniflare/shared" "2.14.1" + +"@miniflare/watcher@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/watcher/-/watcher-2.14.1.tgz#2fe44470df44a1eff1313597ea2389c06a8f9b05" + integrity sha512-dkFvetm5wk6pwunlYb/UkI0yFNb3otLpRm5RDywMUzqObEf+rCiNNAbJe3HUspr2ncZVAaRWcEaDh82vYK5cmw== + dependencies: + "@miniflare/shared" "2.14.1" + +"@miniflare/web-sockets@2.14.1": + version "2.14.1" + resolved "https://registry.yarnpkg.com/@miniflare/web-sockets/-/web-sockets-2.14.1.tgz#d48ba704c32c19db7d0cfc88107e1d1e364e9b62" + integrity sha512-3N//L5EjF7+xXd7qCLR2ylUwm8t2MKyGPGWEtRBrQ2xqYYWhewKTjlquHCOPU5Irnnd/4BhTmFA55MNrq7m4Nw== + dependencies: + "@miniflare/core" "2.14.1" + "@miniflare/shared" "2.14.1" + undici "5.20.0" + ws "^8.2.2" + +"@mongodb-js/saslprep@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz#022fa36620a7287d17acd05c4aae1e5f390d250d" + integrity sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw== + dependencies: + sparse-bitfield "^3.0.3" + "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" @@ -1931,6 +2553,40 @@ resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.13.0.tgz#582a6b90b6efeb0f465984f1fe0e72a4afaaa5ae" integrity sha512-HrniowHRZXHuGT9XRgoXEaP2gJLXM5RMoItaY2PkjvuZ+iHc0Zjbm/302MB8YsPdWozAPHHn+jpFEcEn71OgPw== +"@redis/bloom@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.2.0.tgz#d3fd6d3c0af3ef92f26767b56414a370c7b63b71" + integrity sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg== + +"@redis/client@1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@redis/client/-/client-1.5.9.tgz#c4ee81bbfedb4f1d9c7c5e9859661b9388fb4021" + integrity sha512-SffgN+P1zdWJWSXBvJeynvEnmnZrYmtKSRW00xl8pOPFOMJjxRR9u0frSxJpPR6Y4V+k54blJjGW7FgxbTI7bQ== + dependencies: + cluster-key-slot "1.1.2" + generic-pool "3.9.0" + yallist "4.0.0" + +"@redis/graph@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@redis/graph/-/graph-1.1.0.tgz#cc2b82e5141a29ada2cce7d267a6b74baa6dd519" + integrity sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg== + +"@redis/json@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@redis/json/-/json-1.0.4.tgz#f372b5f93324e6ffb7f16aadcbcb4e5c3d39bda1" + integrity sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw== + +"@redis/search@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@redis/search/-/search-1.1.3.tgz#b5a6837522ce9028267fe6f50762a8bcfd2e998b" + integrity sha512-4Dg1JjvCevdiCBTZqjhKkGoC5/BcB7k9j99kdMnaXFXg8x4eyOIVg9487CMv7/BUVkFLZCaIh8ead9mU15DNng== + +"@redis/time-series@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.0.5.tgz#a6d70ef7a0e71e083ea09b967df0a0ed742bc6ad" + integrity sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg== + "@remix-run/react@^1.19.0": version "1.19.0" resolved "https://registry.yarnpkg.com/@remix-run/react/-/react-1.19.0.tgz#3fd54076e0aa315c67034b4071838762054f6c05" @@ -2200,9 +2856,10 @@ jest-matcher-utils "^26.6.2" react-reconciler "^0.28.0" -"@shopify/shopify-api@^7.6.0", "@shopify/shopify-api@file:../shopify-api-js/shopify-shopify-api-7.6.0.tgz": +"@shopify/shopify-api@^7.6.0": version "7.6.0" - resolved "file:../shopify-api-js/shopify-shopify-api-7.6.0.tgz#1da289ac41837b71dccbc6981a93fb2986ac4e91" + resolved "https://registry.yarnpkg.com/@shopify/shopify-api/-/shopify-api-7.6.0.tgz#d181ca9fbd2ff3b3a7595e9e121fde707dbbb36a" + integrity sha512-XUyBkSrUHvqCknPdY3ylaGDyC3hA2aKmXTsbo7vpGzncMqC1hZ2pwRJbBMnffdbEWj14Um9zkEMS7MKf1k6PBw== dependencies: "@shopify/network" "^3.2.1" compare-versions "^5.0.3" @@ -2212,13 +2869,6 @@ tslib "^2.0.3" uuid "^9.0.0" -"@shopify/shopify-app-session-storage-memory@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@shopify/shopify-app-session-storage-memory/-/shopify-app-session-storage-memory-1.0.11.tgz#ad66305882614152b81bdd26bc8591199864ee7d" - integrity sha512-+IW81euic4Qb0AM8G7Y6xbrLnKqkn5FnQoF5CFwmQfmjAWnFYSFgvNQUSuk+53h1r+OO0CZGC/DY7oLFDd784w== - dependencies: - tslib "^2.4.0" - "@shopify/typescript-configs@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@shopify/typescript-configs/-/typescript-configs-5.1.0.tgz#f6e8fdd3291bf0a406578b2c6eb21f8c542d3c0a" @@ -2272,6 +2922,365 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@smithy/abort-controller@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-2.0.6.tgz#8d17bb447aa33a43e4d57f98f9dc23560158b6b8" + integrity sha512-4I7g0lyGUlW2onf8mD76IzU37oRWSHsQ5zlW5MjDzgg4I4J9bOK4500Gx6qOuoN7+GulAnGLe1YwyrIluzhakg== + dependencies: + "@smithy/types" "^2.3.0" + tslib "^2.5.0" + +"@smithy/config-resolver@^2.0.5", "@smithy/config-resolver@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-2.0.7.tgz#bfa7de9b19922a071a2b26766bcb116e4becbc77" + integrity sha512-J4J1AWiqaApC+3I9U++SuxAQ3BOoM5VoYnpFzCZcb63aLF80Zpc/nq2pFR1OsEIYyg2UYNdcBKKfHABmwo4WgQ== + dependencies: + "@smithy/node-config-provider" "^2.0.9" + "@smithy/types" "^2.3.0" + "@smithy/util-config-provider" "^2.0.0" + "@smithy/util-middleware" "^2.0.0" + tslib "^2.5.0" + +"@smithy/credential-provider-imds@^2.0.0", "@smithy/credential-provider-imds@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.9.tgz#f98a941c0b7211e9320a20d5c064d6489c61f6d8" + integrity sha512-K7WZRkHS5HZofRgK+O8W4YXXyaVexU1K6hp9vlUL/8CsnrFbZS9quyH/6hTROrYh2PuJr24yii1kc83NJdxMGQ== + dependencies: + "@smithy/node-config-provider" "^2.0.9" + "@smithy/property-provider" "^2.0.7" + "@smithy/types" "^2.3.0" + "@smithy/url-parser" "^2.0.6" + tslib "^2.5.0" + +"@smithy/eventstream-codec@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-2.0.6.tgz#1ea033e977b58a59ff4b00cf7c899d1ca0c7f81a" + integrity sha512-J9xL82mlYRUMXFnB9VaThXkD7z2JLr52FIVZMoQQ1dxZG5ub+NOGmzaTTZC/cMmKXI/nwCoFuwDWCTjwQhYhQA== + dependencies: + "@aws-crypto/crc32" "3.0.0" + "@smithy/types" "^2.3.0" + "@smithy/util-hex-encoding" "^2.0.0" + tslib "^2.5.0" + +"@smithy/fetch-http-handler@^2.0.5", "@smithy/fetch-http-handler@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.1.tgz#e71588989acb5bcef90aef59fa0069510a907f15" + integrity sha512-jb2gHYAPpZ3Zkpng3oicPLIw+3ZW2Z3u1bo9LWgX8tEghn72olvRKSLsjykbDSKOQWyWNGywkApHPdDXJcO6fQ== + dependencies: + "@smithy/protocol-http" "^3.0.1" + "@smithy/querystring-builder" "^2.0.6" + "@smithy/types" "^2.3.0" + "@smithy/util-base64" "^2.0.0" + tslib "^2.5.0" + +"@smithy/hash-node@^2.0.5": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-2.0.6.tgz#d13af02d3adb010e0c321035b610d53af2e652ef" + integrity sha512-xz7fzFxSzxohKGGyKPbLReRrY01JOZgRDHIXSks3PxQxG9c8PJMa5nUw0stH8UOySUgkofmMy0n7vTUsF5Mdqg== + dependencies: + "@smithy/types" "^2.3.0" + "@smithy/util-buffer-from" "^2.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.5.0" + +"@smithy/invalid-dependency@^2.0.5": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-2.0.6.tgz#9230517c5a9f5bafee3bf89e9c548801a2681a99" + integrity sha512-L5MUyl9mzawIvBxr0Hg3J/Q5qZFXKcBgMk0PacfK3Mthp4WAR6h7iMxdSQ23Q7X/kxOrpZuoYEdh1BWLKbDc8Q== + dependencies: + "@smithy/types" "^2.3.0" + tslib "^2.5.0" + +"@smithy/is-array-buffer@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz#8fa9b8040651e7ba0b2f6106e636a91354ff7d34" + integrity sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug== + dependencies: + tslib "^2.5.0" + +"@smithy/middleware-content-length@^2.0.5": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-2.0.7.tgz#f046da02f6c9bb95edbb9cac28f66e77e240b09e" + integrity sha512-A4TZXhEIROrLL+Um7yHXZnEKU6EnQzhO53DkJfWQbhsL1nMA2s9yk8d1R+JywsnskhAay3BmLDwcIG/dZtAHIw== + dependencies: + "@smithy/protocol-http" "^3.0.1" + "@smithy/types" "^2.3.0" + tslib "^2.5.0" + +"@smithy/middleware-endpoint@^2.0.5": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.6.tgz#b2350fcf63cd69a595b0f42e9718e1ac5144220e" + integrity sha512-MuSPPtEHFal/M77tR3ffLsdOfX29IZpA990nGuoPj5zQnAYrA4PYBGoqqrASQKm8Xb3C0NwuYzOATT7WX4f5Pg== + dependencies: + "@smithy/middleware-serde" "^2.0.6" + "@smithy/types" "^2.3.0" + "@smithy/url-parser" "^2.0.6" + "@smithy/util-middleware" "^2.0.0" + tslib "^2.5.0" + +"@smithy/middleware-retry@^2.0.5": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-2.0.8.tgz#46c4280640429a1b4e12cbf9bd2d8a82a6fc483b" + integrity sha512-lZtyCuqtGGm8qz/LDrMwd4SI168Xt1Hwd7ZXH5chV2QwOtiSZm0LEWc47Of8cf6ybKAn4SN87gj9MwI4zvyxYg== + dependencies: + "@smithy/node-config-provider" "^2.0.9" + "@smithy/protocol-http" "^3.0.1" + "@smithy/service-error-classification" "^2.0.0" + "@smithy/types" "^2.3.0" + "@smithy/util-middleware" "^2.0.0" + "@smithy/util-retry" "^2.0.0" + tslib "^2.5.0" + uuid "^8.3.2" + +"@smithy/middleware-serde@^2.0.5", "@smithy/middleware-serde@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-2.0.6.tgz#cd2ed49fc22b998f3bbbd28b53a72a26d3dd08fb" + integrity sha512-8/GODBngYbrS28CMZtaHIL4R9rLNSQ/zgb+N1OAZ02NwBUawlnLDcatve9YRzhJC/IWz0/pt+WimJZaO1sGcig== + dependencies: + "@smithy/types" "^2.3.0" + tslib "^2.5.0" + +"@smithy/middleware-stack@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz#cd9f442c2788b1ef0ea6b32236d80c76b3c342e9" + integrity sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ== + dependencies: + tslib "^2.5.0" + +"@smithy/node-config-provider@^2.0.6", "@smithy/node-config-provider@^2.0.9": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-2.0.9.tgz#f2c3f8354e1260cde8c7ebda898f4531e06a4369" + integrity sha512-TlSPbCwtT/jgNnmPQqKuCR5CFN8UIrCCHRrgUfs3NqRMuaLLeP8TPe1fSKq2J8h1M/jd4BF853gneles0gWevg== + dependencies: + "@smithy/property-provider" "^2.0.7" + "@smithy/shared-ini-file-loader" "^2.0.8" + "@smithy/types" "^2.3.0" + tslib "^2.5.0" + +"@smithy/node-http-handler@^2.0.5", "@smithy/node-http-handler@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-2.1.1.tgz#19be3788c4120bd766580ab898a9c6121015d056" + integrity sha512-2dtlmwD2awz/JV4vWHTXwTOBkkIs9XXbMKjv0b+lJDc+VuURZUCZsc7xERDJZy1HO0w/+yuLCjeJu2ER3FlM0A== + dependencies: + "@smithy/abort-controller" "^2.0.6" + "@smithy/protocol-http" "^3.0.1" + "@smithy/querystring-builder" "^2.0.6" + "@smithy/types" "^2.3.0" + tslib "^2.5.0" + +"@smithy/property-provider@^2.0.0", "@smithy/property-provider@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-2.0.7.tgz#4b7b780477909026d2fdaef29f0ce5c258f89681" + integrity sha512-XT8Tl7YNxM8tCtGqy7v7DSf6PxyXaPE9cdA/Yj4dEw2b05V3RrPqsP+t5XJiZu0yIsQ7pdeYZWv2sSEWVjNeAg== + dependencies: + "@smithy/types" "^2.3.0" + tslib "^2.5.0" + +"@smithy/protocol-http@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-2.0.5.tgz#ff7779fc8fcd3fe52e71fd07565b518f0937e8ba" + integrity sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw== + dependencies: + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + +"@smithy/protocol-http@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-3.0.1.tgz#4f9787104c94f68e1da99cd1dca7ed548a7a697d" + integrity sha512-+5no1i1fzPjrGsxs06gjAjwDoKuKAFt/QNHEF4hePVfV1EKpR1m/h9GqRH0Z4u6kPfcPZkYSzESTU0cjLqsrIw== + dependencies: + "@smithy/types" "^2.3.0" + tslib "^2.5.0" + +"@smithy/querystring-builder@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-2.0.6.tgz#6fd9f86dbfe27e0e71e5569768a2b5d599f44119" + integrity sha512-HnU00shCGoV8vKJZTiNBkNvR9NogU3NIUaVMAGJPSqNGJj3psWo+TUrC0BVCDcwiCljXwXCFGJqIcsWtClrktQ== + dependencies: + "@smithy/types" "^2.3.0" + "@smithy/util-uri-escape" "^2.0.0" + tslib "^2.5.0" + +"@smithy/querystring-parser@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-2.0.6.tgz#0b4fc7ec5fe5371113fcb1116216daf2d7e2c3ff" + integrity sha512-i4LKoXHP7pTFAPjLIJyQXYOhWokbcFha3WWsX74sAKmuluv0XM2cxONZoFxwEzmWhsNyM6buSwJSZXyPiec0AQ== + dependencies: + "@smithy/types" "^2.3.0" + tslib "^2.5.0" + +"@smithy/service-error-classification@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz#bbce07c9c529d9333d40db881fd4a1795dd84892" + integrity sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw== + +"@smithy/shared-ini-file-loader@^2.0.6", "@smithy/shared-ini-file-loader@^2.0.8": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.8.tgz#1346eea02ad574a2520ce72ad0a6629a08691e97" + integrity sha512-4u+V+Dv7JGpJ0tppB5rxCem7WhdFux950z4cGPhV0kHTPkKe8DDgINzOlVa2RBu5dI33D02OBJcxFjhW4FPORg== + dependencies: + "@smithy/types" "^2.3.0" + tslib "^2.5.0" + +"@smithy/signature-v4@^2.0.0": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-2.0.6.tgz#bd0ec98149dfc97e91e227411091e371248309ae" + integrity sha512-4zNTi8w4sky07YKq7oYucZt4ogY00IEaS1NFDXxmCN5V/ywE0WiK+WMim+8wtYQmB0qy3oExZR4LoCAml6j/rA== + dependencies: + "@smithy/eventstream-codec" "^2.0.6" + "@smithy/is-array-buffer" "^2.0.0" + "@smithy/types" "^2.3.0" + "@smithy/util-hex-encoding" "^2.0.0" + "@smithy/util-middleware" "^2.0.0" + "@smithy/util-uri-escape" "^2.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.5.0" + +"@smithy/smithy-client@^2.0.5": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-2.1.1.tgz#1f27568b76a2232efc3b68fdf8869826830d3c0a" + integrity sha512-AXe7BR3xRrTFepUjY/nJWrOk2fXdgLRNxrnyl8V7weaf+UIaKdPf9dW5hsbJt8V67/X0ofDkNAt92nNKhuQmXw== + dependencies: + "@smithy/middleware-stack" "^2.0.0" + "@smithy/types" "^2.3.0" + "@smithy/util-stream" "^2.0.7" + tslib "^2.5.0" + +"@smithy/types@^2.2.2", "@smithy/types@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.3.0.tgz#a5c3869465f384fd4d811b2f1f37779e069ef06e" + integrity sha512-pJce3rd39MElkV57UTPAoSYAApjQLELUxjU5adHNLYk9gnPvyIGbJNJTZVVFu00BrgZH3W/cQe8QuFcknDyodQ== + dependencies: + tslib "^2.5.0" + +"@smithy/url-parser@^2.0.5", "@smithy/url-parser@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-2.0.6.tgz#e926d1bcbe4bb0e244ed25ea58bc48ac5ae41436" + integrity sha512-9i6j5QW6bapHZ4rtkXOAm0hOUG1+5IVdVJXNSUTcNskwJchZH5IQuDNPCbgUi/u2P8EZazKt4wXT51QxOXCz1A== + dependencies: + "@smithy/querystring-parser" "^2.0.6" + "@smithy/types" "^2.3.0" + tslib "^2.5.0" + +"@smithy/util-base64@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-2.0.0.tgz#1beeabfb155471d1d41c8d0603be1351f883c444" + integrity sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA== + dependencies: + "@smithy/util-buffer-from" "^2.0.0" + tslib "^2.5.0" + +"@smithy/util-body-length-browser@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz#5447853003b4c73da3bc5f3c5e82c21d592d1650" + integrity sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg== + dependencies: + tslib "^2.5.0" + +"@smithy/util-body-length-node@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz#313a5f7c5017947baf5fa018bfc22628904bbcfa" + integrity sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-buffer-from@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz#7eb75d72288b6b3001bc5f75b48b711513091deb" + integrity sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw== + dependencies: + "@smithy/is-array-buffer" "^2.0.0" + tslib "^2.5.0" + +"@smithy/util-config-provider@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz#4dd6a793605559d94267312fd06d0f58784b4c38" + integrity sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg== + dependencies: + tslib "^2.5.0" + +"@smithy/util-defaults-mode-browser@^2.0.6": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.7.tgz#322822e064450ec59e3ae288f3f2eed0a5acbfb1" + integrity sha512-s1caKxC7Y87Q72Goll//clZs2WNBfG9WtFDWVRS+Qgk147YPCOUYtkpuD0XZAh/vbayObFz5tQ1fiX4G19HSCA== + dependencies: + "@smithy/property-provider" "^2.0.7" + "@smithy/types" "^2.3.0" + bowser "^2.11.0" + tslib "^2.5.0" + +"@smithy/util-defaults-mode-node@^2.0.6": + version "2.0.9" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.9.tgz#0d3acadbbb54c0c401089fc22576aafd52d130e9" + integrity sha512-HlV4iNL3/PgPpmDGs0+XrAKtwFQ8rOs5P2y5Dye8dUYaJauadlzHRrNKk7wH2aBYswvT2HM+PIgXamvrE7xbcw== + dependencies: + "@smithy/config-resolver" "^2.0.7" + "@smithy/credential-provider-imds" "^2.0.9" + "@smithy/node-config-provider" "^2.0.9" + "@smithy/property-provider" "^2.0.7" + "@smithy/types" "^2.3.0" + tslib "^2.5.0" + +"@smithy/util-hex-encoding@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz#0aa3515acd2b005c6d55675e377080a7c513b59e" + integrity sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA== + dependencies: + tslib "^2.5.0" + +"@smithy/util-middleware@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-2.0.0.tgz#706681d4a1686544a2275f68266304233f372c99" + integrity sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA== + dependencies: + tslib "^2.5.0" + +"@smithy/util-retry@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-2.0.0.tgz#7ac5d5f12383a9d9b2a43f9ff25f3866c8727c24" + integrity sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg== + dependencies: + "@smithy/service-error-classification" "^2.0.0" + tslib "^2.5.0" + +"@smithy/util-stream@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-2.0.7.tgz#9c9f489e292eac7693fba2b8360d33ec95fda382" + integrity sha512-GFgvPt5+lPx5Fmx0esCwOuDipoIatiTnUPFW5QwkrfxKNYcPwKvhzu9iFzOiHcj2WwRQsA6YBRRdeBttdAG/HA== + dependencies: + "@smithy/fetch-http-handler" "^2.1.1" + "@smithy/node-http-handler" "^2.1.1" + "@smithy/types" "^2.3.0" + "@smithy/util-base64" "^2.0.0" + "@smithy/util-buffer-from" "^2.0.0" + "@smithy/util-hex-encoding" "^2.0.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.5.0" + +"@smithy/util-uri-escape@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz#19955b1a0f517a87ae77ac729e0e411963dfda95" + integrity sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw== + dependencies: + tslib "^2.5.0" + +"@smithy/util-utf8@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.0.0.tgz#b4da87566ea7757435e153799df9da717262ad42" + integrity sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ== + dependencies: + "@smithy/util-buffer-from" "^2.0.0" + tslib "^2.5.0" + +"@smithy/util-waiter@^2.0.5": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-2.0.6.tgz#9320c397733cfd9ec9a679f4b52d1033b6dca385" + integrity sha512-wjxvKB4XSfgpOg3lr4RulnVhd21fMMC4CPARBwrSN7+3U28fwOifv8f7T+Ibay9DAQTj9qXxmd8ag6WXBRgNhg== + dependencies: + "@smithy/abort-controller" "^2.0.6" + "@smithy/types" "^2.3.0" + tslib "^2.5.0" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -2310,6 +3319,13 @@ dependencies: "@babel/types" "^7.3.0" +"@types/better-sqlite3@^7.6.0": + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/better-sqlite3/-/better-sqlite3-7.6.4.tgz#102462611e67aadf950d3ccca10292de91e6f35b" + integrity sha512-dzrRZCYPXIXfSR1/surNbJ/grU3scTaygS0OMzjlGf71i9sc2fGyHPXXiXmEvNIoE0cGwsanEFMVJxPXmco9Eg== + dependencies: + "@types/node" "*" + "@types/body-parser@*": version "1.19.2" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" @@ -2495,6 +3511,15 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/pg@^8.6.6": + version "8.10.2" + resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.10.2.tgz#7814d1ca02c8071f4d0864c1b17c589b061dba43" + integrity sha512-MKFs9P6nJ+LAeHLU3V0cODEOgyThJ3OAnmOlsZsxux6sfQs3HRXR5bBn7xG5DjckEFhTAxsXi7k7cd0pCMxpJw== + dependencies: + "@types/node" "*" + pg-protocol "*" + pg-types "^4.0.1" + "@types/prettier@^2.1.5": version "2.7.2" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.2.tgz#6c2324641cc4ba050a8c710b2b251b377581fbf0" @@ -2612,11 +3637,29 @@ dependencies: "@types/node" "*" +"@types/stack-trace@0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/stack-trace/-/stack-trace-0.0.29.tgz#eb7a7c60098edb35630ed900742a5ecb20cfcb4d" + integrity sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g== + "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== +"@types/webidl-conversions@*": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz#2b8e60e33906459219aa587e9d1a612ae994cfe7" + integrity sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog== + +"@types/whatwg-url@^8.2.1": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63" + integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA== + dependencies: + "@types/node" "*" + "@types/webidl-conversions" "*" + "@types/yargs-parser@*": version "21.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" @@ -3171,6 +4214,11 @@ body-parser@1.20.1: type-is "~1.6.18" unpipe "1.0.0" +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" @@ -3229,6 +4277,11 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +bson@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/bson/-/bson-5.4.0.tgz#0eea77276d490953ad8616b483298dbff07384c6" + integrity sha512-WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA== + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" @@ -3239,11 +4292,30 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer-writer@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" + integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== + builtin-modules@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -3438,6 +4510,11 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== +cluster-key-slot@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -3615,6 +4692,11 @@ create-jest-runner@^0.11.2: jest-worker "^28.0.2" throat "^6.0.1" +cron-schedule@^3.0.4: + version "3.0.6" + resolved "https://registry.yarnpkg.com/cron-schedule/-/cron-schedule-3.0.6.tgz#7d0a3ad9154112fc3720fe43238a43d50e8465e7" + integrity sha512-izfGgKyzzIyLaeb1EtZ3KbglkS6AKp9cv7LxmiyoOu+fXfol1tQDC0Cof0enVZGNtudTHW+3lfuW9ZkLQss4Wg== + cross-fetch@^3.0.4: version "3.1.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" @@ -3804,6 +4886,11 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== +denque@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + depd@2.0.0, depd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -3903,6 +4990,11 @@ dot-prop@^5.3.0: dependencies: is-obj "^2.0.0" +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -4434,6 +5526,21 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" + integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^3.0.1" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -4547,6 +5654,13 @@ fast-safe-stringify@^2.1.1: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== +fast-xml-parser@4.2.5: + version "4.2.5" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" + integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== + dependencies: + strnum "^1.0.5" + fastq@^1.6.0: version "1.15.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" @@ -4788,6 +5902,18 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" +generate-function@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + +generic-pool@3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4" + integrity sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g== + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -4819,7 +5945,7 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" -get-stream@^6.0.0: +get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== @@ -5003,6 +6129,11 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +html-rewriter-wasm@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/html-rewriter-wasm/-/html-rewriter-wasm-0.4.1.tgz#235e3d96c1aa4bfd2182661ee13881e290ff5ff2" + integrity sha512-lNovG8CMCCmcVB1Q7xggMSf7tqPCijZXaH4gL6iE8BFghdQCbaY5Met9i1x2Ex8m/cZHDUtXK9H6/znKamRP8Q== + http-cache-semantics@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" @@ -5051,6 +6182,11 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +human-signals@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" + integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -5065,7 +6201,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2: +iconv-lite@^0.6.2, iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -5291,6 +6427,11 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== +is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== + is-reference@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" @@ -5323,6 +6464,11 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -6494,7 +7640,7 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -kleur@^4.1.5: +kleur@^4.1.4, kleur@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== @@ -6594,6 +7740,11 @@ lodash@^4.17.21, lodash@^4.7.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +long@^5.2.1: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -6630,6 +7781,16 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.14.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +lru-cache@^8.0.0: + version "8.0.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e" + integrity sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA== + lru-cache@^9.0.0: version "9.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" @@ -6706,6 +7867,11 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== +memory-pager@^1.0.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" + integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== + meow@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467" @@ -6778,11 +7944,43 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== +miniflare@^2.14.0: + version "2.14.1" + resolved "https://registry.yarnpkg.com/miniflare/-/miniflare-2.14.1.tgz#ac438111b549e98bcee22fe1d9ff3583cb7df302" + integrity sha512-8Yqms4OZp1J1k0SGhOQ6MKWptWSXCm8Yh4kfFh11zZIlT1PoE0qXWQmAzwZnT5hFNmS3tsghu3GOgToxM+jCnA== + dependencies: + "@miniflare/cache" "2.14.1" + "@miniflare/cli-parser" "2.14.1" + "@miniflare/core" "2.14.1" + "@miniflare/d1" "2.14.1" + "@miniflare/durable-objects" "2.14.1" + "@miniflare/html-rewriter" "2.14.1" + "@miniflare/http-server" "2.14.1" + "@miniflare/kv" "2.14.1" + "@miniflare/queues" "2.14.1" + "@miniflare/r2" "2.14.1" + "@miniflare/runner-vm" "2.14.1" + "@miniflare/scheduler" "2.14.1" + "@miniflare/shared" "2.14.1" + "@miniflare/sites" "2.14.1" + "@miniflare/storage-file" "2.14.1" + "@miniflare/storage-memory" "2.14.1" + "@miniflare/web-sockets" "2.14.1" + kleur "^4.1.4" + semiver "^1.1.0" + source-map-support "^0.5.20" + undici "5.20.0" + minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" @@ -6880,6 +8078,32 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mnemonist@0.38.3: + version "0.38.3" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.3.tgz#35ec79c1c1f4357cfda2fe264659c2775ccd7d9d" + integrity sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw== + dependencies: + obliterator "^1.6.1" + +mongodb-connection-string-url@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz#57901bf352372abdde812c81be47b75c6b2ec5cf" + integrity sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ== + dependencies: + "@types/whatwg-url" "^8.2.1" + whatwg-url "^11.0.0" + +mongodb@^5.5.0: + version "5.8.1" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-5.8.1.tgz#dc201adfbd6c6d73401cdcf12ebdb75f14771faf" + integrity sha512-wKyh4kZvm6NrCPH8AxyzXm3JBoEf4Xulo0aUWh3hCgwgYJxyQ1KLST86ZZaSWdj6/kxYUA3+YZuyADCE61CMSg== + dependencies: + bson "^5.4.0" + mongodb-connection-string-url "^2.6.0" + socks "^2.7.1" + optionalDependencies: + "@mongodb-js/saslprep" "^1.1.0" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -6895,6 +8119,32 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +mustache@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" + integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== + +mysql2@^3.3.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.6.0.tgz#d54ef4867655daf2f65ced1dbdb63852314f039f" + integrity sha512-EWUGAhv6SphezurlfI2Fpt0uJEWLmirrtQR7SkbTHFC+4/mJBrPiSzHESHKAWKG7ALVD6xaG/NBjjd1DGJGQQQ== + dependencies: + denque "^2.1.0" + generate-function "^2.3.1" + iconv-lite "^0.6.3" + long "^5.2.1" + lru-cache "^8.0.0" + named-placeholders "^1.1.3" + seq-queue "^0.0.5" + sqlstring "^2.3.2" + +named-placeholders@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.3.tgz#df595799a36654da55dda6152ba7a137ad1d9351" + integrity sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w== + dependencies: + lru-cache "^7.14.1" + natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -6937,6 +8187,11 @@ node-fetch@^2.6.1, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + node-gyp@8.x: version "8.4.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" @@ -6992,6 +8247,13 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + npmlog@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" @@ -7012,6 +8274,16 @@ npmlog@^6.0.0: gauge "^4.0.3" set-blocking "^2.0.0" +npx-import@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/npx-import/-/npx-import-1.1.4.tgz#0ee9a27484c633255528f7ec2e4c2adeaa1fcda3" + integrity sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA== + dependencies: + execa "^6.1.0" + parse-package-name "^1.0.0" + semver "^7.3.7" + validate-npm-package-name "^4.0.0" + nwsapi@^2.2.0: version "2.2.4" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.4.tgz#fd59d5e904e8e1f03c25a7d5a15cfa16c714a1e5" @@ -7085,6 +8357,16 @@ object.values@^1.1.6: define-properties "^1.1.4" es-abstract "^1.20.4" +obliterator@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-1.6.1.tgz#dea03e8ab821f6c4d96a299e17aef6a3af994ef3" + integrity sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig== + +obuf@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -7106,6 +8388,13 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -7199,6 +8488,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +packet-reader@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" + integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== + param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -7224,6 +8518,11 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-package-name@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-package-name/-/parse-package-name-1.0.0.tgz#1a108757e4ffc6889d5e78bcc4932a97c097a5a7" + integrity sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg== + parse5@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" @@ -7270,6 +8569,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -7293,6 +8597,82 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pg-cloudflare@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98" + integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== + +pg-connection-string@^2.5.0, pg-connection-string@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475" + integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== + +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + +pg-numeric@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pg-numeric/-/pg-numeric-1.0.2.tgz#816d9a44026086ae8ae74839acd6a09b0636aa3a" + integrity sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw== + +pg-pool@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.1.tgz#5a902eda79a8d7e3c928b77abf776b3cb7d351f7" + integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og== + +pg-protocol@*, pg-protocol@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833" + integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== + +pg-types@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== + dependencies: + pg-int8 "1.0.1" + postgres-array "~2.0.0" + postgres-bytea "~1.0.0" + postgres-date "~1.0.4" + postgres-interval "^1.1.0" + +pg-types@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-4.0.1.tgz#31857e89d00a6c66b06a14e907c3deec03889542" + integrity sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g== + dependencies: + pg-int8 "1.0.1" + pg-numeric "1.0.2" + postgres-array "~3.0.1" + postgres-bytea "~3.0.0" + postgres-date "~2.0.1" + postgres-interval "^3.0.0" + postgres-range "^1.1.1" + +pg@^8.11.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb" + integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g== + dependencies: + buffer-writer "2.0.0" + packet-reader "1.0.0" + pg-connection-string "^2.6.2" + pg-pool "^3.6.1" + pg-protocol "^1.6.0" + pg-types "^2.1.0" + pgpass "1.x" + optionalDependencies: + pg-cloudflare "^1.1.1" + +pgpass@1.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" + integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== + dependencies: + split2 "^4.1.0" + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -7339,6 +8719,55 @@ pluralize@^8.0.0: resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-array@~3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-3.0.2.tgz#68d6182cb0f7f152a7e60dc6a6889ed74b0a5f98" + integrity sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog== + +postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" + integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== + +postgres-bytea@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-3.0.0.tgz#9048dc461ac7ba70a6a42d109221619ecd1cb089" + integrity sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw== + dependencies: + obuf "~1.1.2" + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-date@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-2.0.1.tgz#638b62e5c33764c292d37b08f5257ecb09231457" + integrity sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + +postgres-interval@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-3.0.0.tgz#baf7a8b3ebab19b7f38f07566c7aab0962f0c86a" + integrity sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw== + +postgres-range@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/postgres-range/-/postgres-range-1.1.3.tgz#9ccd7b01ca2789eb3c2e0888b3184225fa859f76" + integrity sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g== + preferred-pm@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.0.3.tgz#1b6338000371e3edbce52ef2e4f65eb2e73586d6" @@ -7645,6 +9074,18 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +redis@^4.6.6: + version "4.6.8" + resolved "https://registry.yarnpkg.com/redis/-/redis-4.6.8.tgz#54c5992e8a5ba512506fe9f53142cadc405547e7" + integrity sha512-S7qNkPUYrsofQ0ztWlTHSaK0Qqfl1y+WMIxrzeAGNG+9iUZB4HGeBgkHxE6uJJ6iXrkvLd1RVJ2nvu6H1sAzfQ== + dependencies: + "@redis/bloom" "1.2.0" + "@redis/client" "1.5.9" + "@redis/graph" "1.1.0" + "@redis/json" "1.0.4" + "@redis/search" "1.1.3" + "@redis/time-series" "1.0.5" + regenerate-unicode-properties@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" @@ -7847,6 +9288,18 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" +selfsigned@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" + integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + dependencies: + node-forge "^1" + +semiver@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/semiver/-/semiver-1.1.0.tgz#9c97fb02c21c7ce4fcf1b73e2c7a24324bdddd5f" + integrity sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg== + "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -7864,6 +9317,13 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.0.0, semver@^7.5.1: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + semver@^7.5.0: version "7.5.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" @@ -7871,13 +9331,6 @@ semver@^7.5.0: dependencies: lru-cache "^6.0.0" -semver@^7.5.1: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -7906,6 +9359,11 @@ sentence-case@^3.0.4: tslib "^2.0.3" upper-case-first "^2.0.2" +seq-queue@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" + integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q== + serve-static@1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" @@ -8030,7 +9488,7 @@ socks-proxy-agent@^6.0.0: debug "^4.3.3" socks "^2.6.2" -socks@^2.6.2: +socks@^2.6.2, socks@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== @@ -8046,7 +9504,7 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.16, source-map-support@^0.5.6: +source-map-support@^0.5.16, source-map-support@^0.5.20, source-map-support@^0.5.6: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -8069,6 +9527,13 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +sparse-bitfield@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" + integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== + dependencies: + memory-pager "^1.0.2" + spawndamnit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/spawndamnit/-/spawndamnit-2.0.0.tgz#9f762ac5c3476abb994b42ad592b5ad22bb4b0ad" @@ -8103,6 +9568,11 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== +split2@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -8119,6 +9589,11 @@ sqlite3@^5.1.6: optionalDependencies: node-gyp "8.x" +sqlstring@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" + integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== + ssri@^8.0.0, ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" @@ -8126,6 +9601,11 @@ ssri@^8.0.0, ssri@^8.0.1: dependencies: minipass "^3.1.1" +stack-trace@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" @@ -8152,6 +9632,11 @@ stream-transform@^2.1.3: dependencies: mixme "^0.5.1" +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -8263,6 +9748,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -8275,6 +9765,11 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + superagent@^8.0.5: version "8.1.2" resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.1.2.tgz#03cb7da3ec8b32472c9d20f6c2a57c7f3765f30b" @@ -8428,6 +9923,13 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== + dependencies: + punycode "^2.1.1" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -8462,7 +9964,7 @@ tsconfig-paths@^3.14.1: minimist "^1.2.6" 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== @@ -8472,6 +9974,11 @@ tslib@^2.0.3, tslib@^2.4.0, tslib@^2.5.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tslib@^2.3.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -8575,6 +10082,13 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici@5.20.0: + version "5.20.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.20.0.tgz#6327462f5ce1d3646bcdac99da7317f455bcc263" + integrity sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g== + dependencies: + busboy "^1.6.0" + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -8669,6 +10183,11 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" +urlpattern-polyfill@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-4.0.3.tgz#c1fa7a73eb4e6c6a1ffb41b24cf31974f7392d3b" + integrity sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ== + util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -8679,6 +10198,11 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +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== + uuid@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" @@ -8710,6 +10234,13 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validate-npm-package-name@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" + integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== + dependencies: + builtins "^5.0.0" + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -8758,6 +10289,11 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -8770,6 +10306,14 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -8914,6 +10458,11 @@ ws@^7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +ws@^8.2.2: + version "8.14.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.0.tgz#6c5792c5316dc9266ba8e780433fc45e6680aecd" + integrity sha512-WR0RJE9Ehsio6U4TuM+LmunEsjQ5ncHlw4sn9ihD6RoJKZrVyH9FWV3dmnwu8B2aNib1OvG2X6adUCyFpQyWcg== + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -8924,6 +10473,11 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" @@ -8934,6 +10488,11 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@4.0.0, yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -8944,11 +10503,6 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" @@ -9019,3 +10573,13 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +youch@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/youch/-/youch-2.2.2.tgz#cb87a359a5c524ebd35eb07ca3a1521dbc7e1a3e" + integrity sha512-/FaCeG3GkuJwaMR34GHVg0l8jCbafZLHiFowSjqLlqhC6OMyf2tPJBu8UirF7/NI9X/R5ai4QfEKUCOxMAGxZQ== + dependencies: + "@types/stack-trace" "0.0.29" + cookie "^0.4.1" + mustache "^4.2.0" + stack-trace "0.0.10" From c560cb7109feef339e68bc3f17c3cca9fa5b07da Mon Sep 17 00:00:00 2001 From: Rezaan Syed Date: Fri, 8 Sep 2023 11:24:32 -0400 Subject: [PATCH 06/22] Redirect to bounce page if token exchange fails on initial load --- .../admin/embedded-authenticate.ts | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts index 1b4d3cadb0..707ed1baf1 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts @@ -1,5 +1,7 @@ import {redirect} from '@remix-run/server-runtime'; import { + HttpResponseError, + InvalidJwtError, JwtPayload, Session, Shopify, @@ -136,12 +138,24 @@ export class EmbeddedAuthStrategy< {api, logger, config}, sessionTokenString, ); - } catch { - console.log('CAUGHT'); - throw this.redirectToBouncePage(url); - } - return this.getAccessToken(request, sessionTokenString, sessionToken); + return await this.getAccessToken( + request, + sessionTokenString, + sessionToken, + ); + } catch (error) { + if ( + error instanceof InvalidJwtError || + (error instanceof HttpResponseError && + error.response.code === 400 && + error.response.body?.error === 'invalid_subject_token') + ) { + console.log(`CAUGHT ${JSON.stringify(error)}`); + throw this.redirectToBouncePage(url); + } + throw error; + } } else { logger.debug( 'Missing session token in search params, going to bounce page', From 1559b053560d99563d68088465fdacf617433e8e Mon Sep 17 00:00:00 2001 From: Rachel Carvalho Date: Mon, 11 Sep 2023 12:31:51 -0400 Subject: [PATCH 07/22] delete access token & send header back when core returns 401 --- .../admin/embedded-authenticate.ts | 4 +- .../helpers/handle-embedded-client-error.ts | 63 +++++++++++++++++++ .../authenticate/admin/helpers/index.ts | 1 + 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts index 707ed1baf1..481939c1f1 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts @@ -35,7 +35,7 @@ import type { NonEmbeddedAdminContext, } from './types'; import { - handleClientErrorFactory, + handleEmbeddedClientErrorFactory, redirectFactory, renderAppBridge, } from './helpers'; @@ -292,7 +292,7 @@ export class EmbeddedAuthStrategy< config: this.config, logger: this.logger, }, - handleClientError: handleClientErrorFactory({ + handleClientError: handleEmbeddedClientErrorFactory({ request, }), }); diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts new file mode 100644 index 0000000000..d07542d770 --- /dev/null +++ b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts @@ -0,0 +1,63 @@ +import {HttpResponseError} from '@shopify/shopify-api'; + +import type {HandleAdminClientError} from '../../../clients/admin/types'; + +// import {redirectToAuthPage} from './redirect-to-auth-page'; + +interface HandleClientErrorOptions { + request: Request; +} + +export function handleEmbeddedClientErrorFactory( + _options: HandleClientErrorOptions, +): HandleAdminClientError { + return async function handleClientError({ + error, + params, + session, + }): Promise { + if (error instanceof HttpResponseError !== true) { + params.logger.debug( + `Got a response error from the API: ${error.message}`, + ); + throw error; + } + + params.logger.debug( + `Got an HTTP response error from the API: ${error.message}`, + { + code: error.response.code, + statusText: error.response.statusText, + body: JSON.stringify(error.response.body), + }, + ); + + console.log('error.response', JSON.stringify(error.response)); + + if (error.response.code === 401) { + // 401 unauthorized from core + // delete access token + params.config.sessionStorage.deleteSession(session.id); + + // return retry header (max retry maybe?) + throw new Response(undefined, { + status: error.response.code, + headers: { + 'Content-Type': 'application/json', + 'X-Shopify-Invalid-Session': '1', + }, + }); + } + + // 403 insufficient scopes + // throw await redirectToAuthPage(params, request, session.shop); + + // forward a minimal copy of the upstream HTTP response instead of an Error: + throw new Response(JSON.stringify(error.response.body), { + status: error.response.code, + headers: { + 'Content-Type': error.response.headers!['Content-Type'] as string, + }, + }); + }; +} diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/index.ts b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/index.ts index 6e9c7c84df..5a6068abc8 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/index.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/index.ts @@ -1,5 +1,6 @@ export * from './begin-auth'; export * from './handle-client-error'; +export * from './handle-embedded-client-error'; export * from './redirect-to-auth-page'; export * from './redirect-with-app-bridge-headers'; export * from './redirect-with-exitiframe'; From e3e3d2c785e9e6b111d3c23763c6dfb44e3f9d2a Mon Sep 17 00:00:00 2001 From: Rachel Carvalho Date: Mon, 11 Sep 2023 15:13:36 -0400 Subject: [PATCH 08/22] reload page when access token is invalid and is not xhr request --- .../helpers/handle-embedded-client-error.ts | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts index d07542d770..731c71bcd1 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts @@ -1,6 +1,7 @@ import {HttpResponseError} from '@shopify/shopify-api'; import type {HandleAdminClientError} from '../../../clients/admin/types'; +import { redirect } from '@remix-run/server-runtime'; // import {redirectToAuthPage} from './redirect-to-auth-page'; @@ -9,7 +10,7 @@ interface HandleClientErrorOptions { } export function handleEmbeddedClientErrorFactory( - _options: HandleClientErrorOptions, + {request}: HandleClientErrorOptions, ): HandleAdminClientError { return async function handleClientError({ error, @@ -39,14 +40,18 @@ export function handleEmbeddedClientErrorFactory( // delete access token params.config.sessionStorage.deleteSession(session.id); - // return retry header (max retry maybe?) - throw new Response(undefined, { - status: error.response.code, - headers: { - 'Content-Type': 'application/json', - 'X-Shopify-Invalid-Session': '1', - }, - }); + const isXhrRequest = request.headers.get('authorization'); + if (isXhrRequest) { + throw new Response(undefined, { + status: error.response.code, + headers: { + 'Content-Type': 'application/json', + 'X-Shopify-Invalid-Session': '1', + }, + }); + } else { + throw redirect(request.url); + } } // 403 insufficient scopes From 46f7bd6493e0a55ad4917898f0149bae9fe901cb Mon Sep 17 00:00:00 2001 From: Rachel Carvalho Date: Mon, 11 Sep 2023 17:23:31 -0400 Subject: [PATCH 09/22] redirect to oauth/install page when scopes changed, re-exchanging token when expired --- .../admin/embedded-authenticate.ts | 39 +++++++++++++++++-- .../helpers/handle-embedded-client-error.ts | 8 ++-- .../admin/helpers/redirect-with-exitiframe.ts | 6 ++- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts index 481939c1f1..7c1c666f23 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts @@ -37,6 +37,8 @@ import type { import { handleEmbeddedClientErrorFactory, redirectFactory, + redirectWithAppBridgeHeaders, + redirectWithExitIframe, renderAppBridge, } from './helpers'; @@ -113,10 +115,16 @@ export class EmbeddedAuthStrategy< const isPatchSessionToken = url.pathname === config.auth.patchSessionTokenPath; + const isExitIframe = url.pathname === config.auth.exitIframePath; if (isPatchSessionToken) { logger.debug('Rendering bounce page'); throw renderAppBridge(params, request); + } else if (isExitIframe) { + const destination = url.searchParams.get('exitIframe')!; + + logger.debug('Rendering exit iframe page', {destination}); + throw renderAppBridge(params, request, {url: destination}); } const sessionTokenHeader = getSessionTokenHeader(request); @@ -211,20 +219,43 @@ export class EmbeddedAuthStrategy< rawRequest: request, }); + const dest = new URL(payload.dest); + const shop = dest.hostname; + if (sessionId) { logger.debug(`SESSION ID: ${sessionId}`); const persistedSession = await config.sessionStorage.loadSession( sessionId, ); + if (persistedSession) { logger.debug(`Reusing existing token: ${persistedSession.accessToken}`); - return {session: persistedSession}; + + if (persistedSession.isScopeChanged(config.scopes)) { + // TODO: make it unified admin + const redirectUrl = `https://${shop}/admin/oauth/install?client_id=${config.apiKey}` + + config.sessionStorage.deleteSession(persistedSession.id); + + const isXhrRequest = request.headers.get('authorization'); + if (isXhrRequest) { + throw redirectWithAppBridgeHeaders(redirectUrl); + } else { + throw redirectWithExitIframe( + {config, logger, api}, + request, + shop, + redirectUrl, + ); + } + } + + if (!persistedSession.isExpired()) { + return {session: persistedSession}; + } } } - const dest = new URL(payload.dest); - const shop = dest.hostname; - logger.debug('Requesting token exchange'); const {session} = await api.auth.tokenExchange({ diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts index 731c71bcd1..b98f4a4676 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts @@ -1,7 +1,7 @@ import {HttpResponseError} from '@shopify/shopify-api'; +import {redirect} from '@remix-run/server-runtime'; import type {HandleAdminClientError} from '../../../clients/admin/types'; -import { redirect } from '@remix-run/server-runtime'; // import {redirectToAuthPage} from './redirect-to-auth-page'; @@ -9,9 +9,9 @@ interface HandleClientErrorOptions { request: Request; } -export function handleEmbeddedClientErrorFactory( - {request}: HandleClientErrorOptions, -): HandleAdminClientError { +export function handleEmbeddedClientErrorFactory({ + request, +}: HandleClientErrorOptions): HandleAdminClientError { return async function handleClientError({ error, params, diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/redirect-with-exitiframe.ts b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/redirect-with-exitiframe.ts index e733f6c610..b5ae564cd6 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/redirect-with-exitiframe.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/redirect-with-exitiframe.ts @@ -6,6 +6,7 @@ export function redirectWithExitIframe( params: BasicParams, request: Request, shop: string, + redirectTo?: string, ): never { const {api, config} = params; const url = new URL(request.url); @@ -14,7 +15,10 @@ export function redirectWithExitIframe( const host = api.utils.sanitizeHost(queryParams.get('host')!); queryParams.set('shop', shop); - queryParams.set('exitIframe', `${config.auth.path}?shop=${shop}`); + queryParams.set( + 'exitIframe', + redirectTo || `${config.auth.path}?shop=${shop}`, + ); if (host) { queryParams.set('host', host); From 747ab0ce109c5ea9c19f8e52d59d4309f9356e7b Mon Sep 17 00:00:00 2001 From: Rachel Carvalho Date: Mon, 18 Sep 2023 13:17:07 -0400 Subject: [PATCH 10/22] support login page --- .../admin/embedded-authenticate.ts | 53 ++++++++++++++----- .../src/server/clients/admin/graphql.ts | 8 +++ .../src/server/shopify-app.ts | 2 + 3 files changed, 49 insertions(+), 14 deletions(-) diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts index 7c1c666f23..26d6bc8a26 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts @@ -116,6 +116,7 @@ export class EmbeddedAuthStrategy< const isPatchSessionToken = url.pathname === config.auth.patchSessionTokenPath; const isExitIframe = url.pathname === config.auth.exitIframePath; + const isAuthRequest = url.pathname === config.auth.path; if (isPatchSessionToken) { logger.debug('Rendering bounce page'); @@ -125,6 +126,10 @@ export class EmbeddedAuthStrategy< logger.debug('Rendering exit iframe page', {destination}); throw renderAppBridge(params, request, {url: destination}); + } else if (isAuthRequest) { + const shop = this.ensureValidShopParam(request); + const installUrl = `https://${shop}/admin/oauth/install?client_id=${config.apiKey}`; + throw redirect(installUrl); } const sessionTokenHeader = getSessionTokenHeader(request); @@ -172,6 +177,20 @@ export class EmbeddedAuthStrategy< } } + private ensureValidShopParam(request: Request): string { + const url = new URL(request.url); + const {api} = this; + const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!); + + if (!shop) { + throw new Response('Shop param is invalid', { + status: 400, + }); + } + + return shop; + } + private async validateUrlParams(request: Request) { const {api, config, logger} = this; @@ -232,22 +251,9 @@ export class EmbeddedAuthStrategy< logger.debug(`Reusing existing token: ${persistedSession.accessToken}`); if (persistedSession.isScopeChanged(config.scopes)) { - // TODO: make it unified admin - const redirectUrl = `https://${shop}/admin/oauth/install?client_id=${config.apiKey}` - config.sessionStorage.deleteSession(persistedSession.id); - const isXhrRequest = request.headers.get('authorization'); - if (isXhrRequest) { - throw redirectWithAppBridgeHeaders(redirectUrl); - } else { - throw redirectWithExitIframe( - {config, logger, api}, - request, - shop, - redirectUrl, - ); - } + this.redirectToInstall(request, shop); } if (!persistedSession.isExpired()) { @@ -271,6 +277,25 @@ export class EmbeddedAuthStrategy< return {session, token: payload}; } + private redirectToInstall(request: Request, shop: string) { + const {config, logger, api} = this; + + // TODO: make it unified admin + const redirectUrl = `https://${shop}/admin/oauth/install?client_id=${config.apiKey}` + + const isXhrRequest = request.headers.get('authorization'); + if (isXhrRequest) { + throw redirectWithAppBridgeHeaders(redirectUrl); + } else { + throw redirectWithExitIframe( + {config, logger, api}, + request, + shop, + redirectUrl, + ); + } + } + private async redirectToShopifyOrAppRoot( request: Request, responseHeaders?: Headers, diff --git a/packages/shopify-app-remix/src/server/clients/admin/graphql.ts b/packages/shopify-app-remix/src/server/clients/admin/graphql.ts index aa0c16df6a..2c84cb995c 100644 --- a/packages/shopify-app-remix/src/server/clients/admin/graphql.ts +++ b/packages/shopify-app-remix/src/server/clients/admin/graphql.ts @@ -36,6 +36,14 @@ export function graphqlClientFactory({ headers: flatHeaders(apiResponse.headers), }); } catch (error) { + if (error.response.code === 401) { + console.log( + '========> 401 errored request', + JSON.stringify(session), + query, + ); + } + if (handleClientError) { throw await handleClientError({error, params, session}); } diff --git a/packages/shopify-app-remix/src/server/shopify-app.ts b/packages/shopify-app-remix/src/server/shopify-app.ts index 340c89a537..2a364e9560 100644 --- a/packages/shopify-app-remix/src/server/shopify-app.ts +++ b/packages/shopify-app-remix/src/server/shopify-app.ts @@ -28,7 +28,9 @@ import {loginFactory} from './authenticate/login/login'; import {unauthenticatedAdminContextFactory} from './unauthenticated/admin'; import {authenticatePublicFactory} from './authenticate/public'; import {unauthenticatedStorefrontContextFactory} from './unauthenticated/storefront'; +// import { AuthStrategy } from './authenticate/admin/authenticate'; import {EmbeddedAuthStrategy} from './authenticate/admin/embedded-authenticate'; +// import {EmbeddedAuthStrategy} from './authenticate/admin/embedded-authenticate'; /** * Creates an object your app will use to interact with Shopify. From e305d6552d2e87ba5d657981b13b25d1dbf83275 Mon Sep 17 00:00:00 2001 From: Rachel Carvalho Date: Mon, 18 Sep 2023 13:26:06 -0400 Subject: [PATCH 11/22] use different auth strategy based on isEmbedded --- packages/shopify-app-remix/src/server/shopify-app.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/shopify-app-remix/src/server/shopify-app.ts b/packages/shopify-app-remix/src/server/shopify-app.ts index 2a364e9560..9c0dcddf02 100644 --- a/packages/shopify-app-remix/src/server/shopify-app.ts +++ b/packages/shopify-app-remix/src/server/shopify-app.ts @@ -28,9 +28,8 @@ import {loginFactory} from './authenticate/login/login'; import {unauthenticatedAdminContextFactory} from './unauthenticated/admin'; import {authenticatePublicFactory} from './authenticate/public'; import {unauthenticatedStorefrontContextFactory} from './unauthenticated/storefront'; -// import { AuthStrategy } from './authenticate/admin/authenticate'; +import {AuthStrategy} from './authenticate/admin/authenticate'; import {EmbeddedAuthStrategy} from './authenticate/admin/embedded-authenticate'; -// import {EmbeddedAuthStrategy} from './authenticate/admin/embedded-authenticate'; /** * Creates an object your app will use to interact with Shopify. @@ -66,7 +65,7 @@ export function shopifyApp< } const params: BasicParams = {api, config, logger}; - // const oauth = new AuthStrategy(params); + const oauth = new AuthStrategy(params); const tokenExchange = new EmbeddedAuthStrategy(params); const shopify: @@ -77,7 +76,9 @@ export function shopifyApp< addDocumentResponseHeaders: addDocumentResponseHeadersFactory(params), registerWebhooks: registerWebhooksFactory(params), authenticate: { - admin: tokenExchange.authenticateAdmin.bind(tokenExchange), + admin: config.isEmbeddedApp + ? tokenExchange.authenticateAdmin.bind(tokenExchange) + : oauth.authenticateAdmin.bind(oauth), public: authenticatePublicFactory(params), webhook: authenticateWebhookFactory< Config['future'], From 20583fb7995e15de8ce241496a47698e13d8d6f6 Mon Sep 17 00:00:00 2001 From: Rezaan Syed Date: Mon, 18 Sep 2023 14:27:47 -0400 Subject: [PATCH 12/22] Add auth-helpers for common functions across strategies --- .../admin/helpers/auth-helpers.ts | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts new file mode 100644 index 0000000000..2f1e305a9d --- /dev/null +++ b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts @@ -0,0 +1,67 @@ +import {redirect} from '@remix-run/server-runtime'; +import {Session, ShopifyRestResources} from '@shopify/shopify-api'; +import {adminClientFactory} from 'src/server/clients/admin'; +import {AdminApiContext, AppConfigArg} from 'src/server/config-types'; + +import type {BasicParams} from '../../../types'; +import {BillingContext} from '../billing/types'; +import { + cancelBillingFactory, + requestBillingFactory, + requireBillingFactory, +} from '../billing'; + +import {handleEmbeddedClientErrorFactory} from '.'; + +export function createAdminApiContext( + request: Request, + session: Session, + params: BasicParams, +): AdminApiContext { + const {api, config, logger} = params; + return adminClientFactory({ + session, + params: { + api, + config, + logger, + }, + handleClientError: handleEmbeddedClientErrorFactory({ + request, + }), + }); +} + +export function redirectToBouncePage( + url: URL, + basicParams: BasicParams, +): never { + const {api, config} = basicParams; + + // eslint-disable-next-line no-warning-comments + // TODO this is to work around a remix bug + // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650 + url.protocol = `${api.config.hostScheme}:`; + + const params = new URLSearchParams(url.search); + params.set('shopify-reload', url.href); + + // eslint-disable-next-line no-warning-comments + // TODO Make sure this works on chrome without a tunnel (weird HTTPS redirect issue) + // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650 + throw redirect(`${config.auth.patchSessionTokenPath}?${params.toString()}`); +} + +export function createBillingContext( + request: Request, + session: Session, + basicParams: BasicParams, +): BillingContext { + const {api, logger, config} = basicParams; + + return { + require: requireBillingFactory({api, logger, config}, request, session), + request: requestBillingFactory({api, logger, config}, request, session), + cancel: cancelBillingFactory({api, logger, config}, request, session), + }; +} From d7a726ed8dc4b061f2db3243350df92cdb266ac3 Mon Sep 17 00:00:00 2001 From: Rachel Carvalho Date: Mon, 18 Sep 2023 15:55:29 -0400 Subject: [PATCH 13/22] move remaining helper methods --- .../server/authenticate/admin/authenticate.ts | 175 +++++------------- .../admin/embedded-authenticate.ts | 158 ++++------------ .../admin/helpers/auth-helpers.ts | 118 ++++++++++-- 3 files changed, 176 insertions(+), 275 deletions(-) diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts index ee9ea23e75..4bb23d0828 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts @@ -1,4 +1,3 @@ -import {redirect} from '@remix-run/server-runtime'; import { CookieNotFound, GraphqlQueryError, @@ -11,7 +10,6 @@ import { ShopifyRestResources, } from '@shopify/shopify-api'; -import {AdminApiContext, adminClientFactory} from '../../clients/admin'; import type {BasicParams} from '../../types'; import type {AppConfig, AppConfigArg} from '../../config-types'; import { @@ -22,12 +20,6 @@ import { ensureCORSHeadersFactory, } from '../helpers'; -import type {BillingContext} from './billing/types'; -import { - cancelBillingFactory, - requestBillingFactory, - requireBillingFactory, -} from './billing'; import type { AdminContext, EmbeddedAdminContext, @@ -41,6 +33,15 @@ import { redirectWithExitIframe, renderAppBridge, } from './helpers'; +import { + createAdminApiContext, + createBillingContext, + ensureAppIsEmbeddedIfRequired, + ensureValidShopParam, + redirectToBouncePage, + redirectToShopifyOrAppRoot, + validateUrlParams, +} from './helpers/auth-helpers'; interface SessionContext { session: Session; @@ -88,8 +89,21 @@ export class AuthStrategy< const context: | EmbeddedAdminContext | NonEmbeddedAdminContext = { - admin: this.createAdminApiContext(request, sessionContext.session), - billing: this.createBillingContext(request, sessionContext.session), + admin: createAdminApiContext( + request, + sessionContext.session, + handleClientErrorFactory, + { + api, + logger, + config, + }, + ), + billing: createBillingContext(request, sessionContext.session, { + api, + logger, + config, + }), session: sessionContext.session, cors, }; @@ -142,9 +156,9 @@ export class AuthStrategy< return this.validateAuthenticatedSession(request, sessionToken); } else { - await this.validateUrlParams(request); + await validateUrlParams(request, {api, logger, config}); await this.ensureInstalledOnShop(request); - await this.ensureAppIsEmbeddedIfRequired(request); + await ensureAppIsEmbeddedIfRequired(request, {api, logger, config}); await this.ensureSessionTokenSearchParamIfRequired(request); return this.ensureSessionExists(request); @@ -156,7 +170,7 @@ export class AuthStrategy< logger.info('Handling OAuth begin request'); - const shop = this.ensureValidShopParam(request); + const shop = ensureValidShopParam(request, {api, logger, config}); logger.debug('OAuth request contained valid shop', {shop}); @@ -177,7 +191,7 @@ export class AuthStrategy< logger.info('Handling OAuth callback request'); - const shop = this.ensureValidShopParam(request); + const shop = ensureValidShopParam(request, {api, logger, config}); try { const {session, headers: responseHeaders} = await api.auth.callback({ @@ -195,11 +209,24 @@ export class AuthStrategy< logger.info('Running afterAuth hook'); await config.hooks.afterAuth({ session, - admin: this.createAdminApiContext(request, session), + admin: createAdminApiContext( + request, + session, + handleClientErrorFactory, + { + api, + logger, + config, + }, + ), }); } - throw await this.redirectToShopifyOrAppRoot(request, responseHeaders); + throw await redirectToShopifyOrAppRoot( + request, + {api, config, logger}, + responseHeaders, + ); } catch (error) { if (error instanceof Response) { throw error; @@ -226,29 +253,6 @@ export class AuthStrategy< } } - private async validateUrlParams(request: Request) { - const {api, config, logger} = this; - - if (config.isEmbeddedApp) { - const url = new URL(request.url); - const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!); - if (!shop) { - logger.debug('Missing or invalid shop, redirecting to login path', { - shop, - }); - throw redirect(config.auth.loginPath); - } - - const host = api.utils.sanitizeHost(url.searchParams.get('host')!); - if (!host) { - logger.debug('Invalid host, redirecting to login path', { - host: url.searchParams.get('host'), - }); - throw redirect(config.auth.loginPath); - } - } - } - private async ensureInstalledOnShop(request: Request) { const {api, config, logger} = this; const url = new URL(request.url); @@ -352,34 +356,8 @@ export class AuthStrategy< }); } - private ensureValidShopParam(request: Request): string { - const url = new URL(request.url); - const {api} = this; - const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!); - - if (!shop) { - throw new Response('Shop param is invalid', { - status: 400, - }); - } - - return shop; - } - - private async ensureAppIsEmbeddedIfRequired(request: Request) { - const {api, logger} = this; - const url = new URL(request.url); - - const shop = url.searchParams.get('shop')!; - - if (api.config.isEmbeddedApp && url.searchParams.get('embedded') !== '1') { - logger.debug('App is not embedded, redirecting to Shopify', {shop}); - await this.redirectToShopifyOrAppRoot(request); - } - } - private async ensureSessionTokenSearchParamIfRequired(request: Request) { - const {api, logger} = this; + const {api, config, logger} = this; const url = new URL(request.url); const shop = url.searchParams.get('shop')!; @@ -390,7 +368,7 @@ export class AuthStrategy< 'Missing session token in search params, going to bounce page', {shop}, ); - this.redirectToBouncePage(url); + redirectToBouncePage(url, {api, logger, config}); } } @@ -475,67 +453,4 @@ export class AuthStrategy< return session!; } - - private async redirectToShopifyOrAppRoot( - request: Request, - responseHeaders?: Headers, - ): Promise { - const {api} = this; - const url = new URL(request.url); - - const host = api.utils.sanitizeHost(url.searchParams.get('host')!)!; - const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!)!; - - const redirectUrl = api.config.isEmbeddedApp - ? await api.auth.getEmbeddedAppUrl({rawRequest: request}) - : `/?shop=${shop}&host=${encodeURIComponent(host)}`; - - throw redirect(redirectUrl, {headers: responseHeaders}); - } - - private redirectToBouncePage(url: URL): never { - const {config} = this; - - // Make sure we always point to the configured app URL so it also works behind reverse proxies (that alter the Host - // header). - url.searchParams.set( - 'shopify-reload', - `${config.appUrl}${url.pathname}${url.search}`, - ); - - // eslint-disable-next-line no-warning-comments - // TODO Make sure this works on chrome without a tunnel (weird HTTPS redirect issue) - // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650 - throw redirect(`${config.auth.patchSessionTokenPath}${url.search}`); - } - - private createBillingContext( - request: Request, - session: Session, - ): BillingContext { - const {api, logger, config} = this; - - return { - require: requireBillingFactory({api, logger, config}, request, session), - request: requestBillingFactory({api, logger, config}, request, session), - cancel: cancelBillingFactory({api, logger, config}, request, session), - }; - } - - private createAdminApiContext( - request: Request, - session: Session, - ): AdminApiContext { - return adminClientFactory({ - session, - params: { - api: this.api, - config: this.config, - logger: this.logger, - }, - handleClientError: handleClientErrorFactory({ - request, - }), - }); - } } diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts index 26d6bc8a26..842bcab9d9 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts @@ -8,13 +8,8 @@ import { ShopifyRestResources, } from '@shopify/shopify-api'; -import {adminClientFactory} from '../../clients/admin'; import type {BasicParams} from '../../types'; -import type { - AdminApiContext, - AppConfig, - AppConfigArg, -} from '../../config-types'; +import type {AppConfig, AppConfigArg} from '../../config-types'; import { getSessionTokenHeader, rejectBotRequest, @@ -23,12 +18,6 @@ import { validateSessionTokenWithCallback, } from '../helpers'; -import type {BillingContext} from './billing/types'; -import { - cancelBillingFactory, - requestBillingFactory, - requireBillingFactory, -} from './billing'; import type { AdminContext, EmbeddedAdminContext, @@ -41,6 +30,14 @@ import { redirectWithExitIframe, renderAppBridge, } from './helpers'; +import { + createAdminApiContext, + createBillingContext, + ensureAppIsEmbeddedIfRequired, + ensureValidShopParam, + redirectToBouncePage, + validateUrlParams, +} from './helpers/auth-helpers'; interface SessionContext { session: Session; @@ -88,8 +85,21 @@ export class EmbeddedAuthStrategy< const context: | EmbeddedAdminContext | NonEmbeddedAdminContext = { - admin: this.createAdminApiContext(request, sessionContext.session), - billing: this.createBillingContext(request, sessionContext.session), + admin: createAdminApiContext( + request, + sessionContext.session, + handleEmbeddedClientErrorFactory, + { + api, + logger, + config, + }, + ), + billing: createBillingContext(request, sessionContext.session, { + api, + logger, + config, + }), session: sessionContext.session, cors, }; @@ -127,7 +137,7 @@ export class EmbeddedAuthStrategy< logger.debug('Rendering exit iframe page', {destination}); throw renderAppBridge(params, request, {url: destination}); } else if (isAuthRequest) { - const shop = this.ensureValidShopParam(request); + const shop = ensureValidShopParam(request, {api, logger, config}); const installUrl = `https://${shop}/admin/oauth/install?client_id=${config.apiKey}`; throw redirect(installUrl); } @@ -139,8 +149,8 @@ export class EmbeddedAuthStrategy< logger.info('Authenticating admin request'); if (sessionTokenParam) { - await this.validateUrlParams(request); - await this.ensureAppIsEmbeddedIfRequired(request); + await validateUrlParams(request, {api, logger, config}); + await ensureAppIsEmbeddedIfRequired(request, {api, logger, config}); } if (sessionTokenString) { @@ -165,7 +175,7 @@ export class EmbeddedAuthStrategy< error.response.body?.error === 'invalid_subject_token') ) { console.log(`CAUGHT ${JSON.stringify(error)}`); - throw this.redirectToBouncePage(url); + throw redirectToBouncePage(url, {api, logger, config}); } throw error; } @@ -173,56 +183,7 @@ export class EmbeddedAuthStrategy< logger.debug( 'Missing session token in search params, going to bounce page', ); - throw this.redirectToBouncePage(url); - } - } - - private ensureValidShopParam(request: Request): string { - const url = new URL(request.url); - const {api} = this; - const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!); - - if (!shop) { - throw new Response('Shop param is invalid', { - status: 400, - }); - } - - return shop; - } - - private async validateUrlParams(request: Request) { - const {api, config, logger} = this; - - if (config.isEmbeddedApp) { - const url = new URL(request.url); - const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!); - if (!shop) { - logger.debug('Missing or invalid shop, redirecting to login path', { - shop, - }); - throw redirect(config.auth.loginPath); - } - - const host = api.utils.sanitizeHost(url.searchParams.get('host')!); - if (!host) { - logger.debug('Invalid host, redirecting to login path', { - host: url.searchParams.get('host'), - }); - throw redirect(config.auth.loginPath); - } - } - } - - private async ensureAppIsEmbeddedIfRequired(request: Request) { - const {logger} = this; - const url = new URL(request.url); - - const shop = url.searchParams.get('shop')!; - - if (url.searchParams.get('embedded') !== '1') { - logger.debug('App is not embedded, redirecting to Shopify', {shop}); - await this.redirectToShopifyOrAppRoot(request); + throw redirectToBouncePage(url, {api, logger, config}); } } @@ -277,11 +238,12 @@ export class EmbeddedAuthStrategy< return {session, token: payload}; } + // this does not initiate oauth auth code flow, it just triggers managed install private redirectToInstall(request: Request, shop: string) { const {config, logger, api} = this; // TODO: make it unified admin - const redirectUrl = `https://${shop}/admin/oauth/install?client_id=${config.apiKey}` + const redirectUrl = `https://${shop}/admin/oauth/install?client_id=${config.apiKey}`; const isXhrRequest = request.headers.get('authorization'); if (isXhrRequest) { @@ -295,62 +257,4 @@ export class EmbeddedAuthStrategy< ); } } - - private async redirectToShopifyOrAppRoot( - request: Request, - responseHeaders?: Headers, - ): Promise { - const {api} = this; - const redirectUrl = await api.auth.getEmbeddedAppUrl({rawRequest: request}); - - throw redirect(redirectUrl, {headers: responseHeaders}); - } - - private redirectToBouncePage(url: URL): never { - const {api, config} = this; - - // eslint-disable-next-line no-warning-comments - // TODO this is to work around a remix bug - // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650 - url.protocol = `${api.config.hostScheme}:`; - - const params = new URLSearchParams(url.search); - params.set('shopify-reload', url.href); - params.delete('id_token'); - - // eslint-disable-next-line no-warning-comments - // TODO Make sure this works on chrome without a tunnel (weird HTTPS redirect issue) - // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650 - throw redirect(`${config.auth.patchSessionTokenPath}?${params.toString()}`); - } - - private createBillingContext( - request: Request, - session: Session, - ): BillingContext { - const {api, logger, config} = this; - - return { - require: requireBillingFactory({api, logger, config}, request, session), - request: requestBillingFactory({api, logger, config}, request, session), - cancel: cancelBillingFactory({api, logger, config}, request, session), - }; - } - - private createAdminApiContext( - request: Request, - session: Session, - ): AdminApiContext { - return adminClientFactory({ - session, - params: { - api: this.api, - config: this.config, - logger: this.logger, - }, - handleClientError: handleEmbeddedClientErrorFactory({ - request, - }), - }); - } } diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts index 2f1e305a9d..35f408f33c 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts @@ -1,8 +1,12 @@ import {redirect} from '@remix-run/server-runtime'; import {Session, ShopifyRestResources} from '@shopify/shopify-api'; -import {adminClientFactory} from 'src/server/clients/admin'; -import {AdminApiContext, AppConfigArg} from 'src/server/config-types'; +import {AppConfigArg} from '../../../config-types'; +import { + HandleAdminClientError, + AdminApiContext, +} from '../../../clients/admin/types'; +import {adminClientFactory} from '../../../clients/admin'; import type {BasicParams} from '../../../types'; import {BillingContext} from '../billing/types'; import { @@ -11,24 +15,27 @@ import { requireBillingFactory, } from '../billing'; -import {handleEmbeddedClientErrorFactory} from '.'; +type HandleClientErrorFactory = ({ + request, +}: { + request: Request; +}) => HandleAdminClientError; -export function createAdminApiContext( +export function createAdminApiContext( request: Request, session: Session, + handleClientErrorFactory: HandleClientErrorFactory, params: BasicParams, -): AdminApiContext { +): AdminApiContext { const {api, config, logger} = params; - return adminClientFactory({ + return adminClientFactory({ session, params: { api, config, logger, }, - handleClientError: handleEmbeddedClientErrorFactory({ - request, - }), + handleClientError: handleClientErrorFactory({request}), }); } @@ -36,20 +43,19 @@ export function redirectToBouncePage( url: URL, basicParams: BasicParams, ): never { - const {api, config} = basicParams; - - // eslint-disable-next-line no-warning-comments - // TODO this is to work around a remix bug - // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650 - url.protocol = `${api.config.hostScheme}:`; + const {config} = basicParams; - const params = new URLSearchParams(url.search); - params.set('shopify-reload', url.href); + // Make sure we always point to the configured app URL so it also works behind reverse proxies (that alter the Host + // header). + url.searchParams.set( + 'shopify-reload', + `${config.appUrl}${url.pathname}${url.search}`, + ); // eslint-disable-next-line no-warning-comments // TODO Make sure this works on chrome without a tunnel (weird HTTPS redirect issue) // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650 - throw redirect(`${config.auth.patchSessionTokenPath}?${params.toString()}`); + throw redirect(`${config.auth.patchSessionTokenPath}${url.search}`); } export function createBillingContext( @@ -65,3 +71,79 @@ export function createBillingContext( cancel: cancelBillingFactory({api, logger, config}, request, session), }; } + +export function ensureValidShopParam( + request: Request, + basicParams: BasicParams, +): string { + const url = new URL(request.url); + const {api} = basicParams; + const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!); + + if (!shop) { + throw new Response('Shop param is invalid', { + status: 400, + }); + } + + return shop; +} + +export async function validateUrlParams( + request: Request, + basicParams: BasicParams, +) { + const {api, config, logger} = basicParams; + + if (config.isEmbeddedApp) { + const url = new URL(request.url); + const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!); + if (!shop) { + logger.debug('Missing or invalid shop, redirecting to login path', { + shop, + }); + throw redirect(config.auth.loginPath); + } + + const host = api.utils.sanitizeHost(url.searchParams.get('host')!); + if (!host) { + logger.debug('Invalid host, redirecting to login path', { + host: url.searchParams.get('host'), + }); + throw redirect(config.auth.loginPath); + } + } +} + +export async function ensureAppIsEmbeddedIfRequired( + request: Request, + basicParams: BasicParams, +) { + const {api, logger} = basicParams; + const url = new URL(request.url); + + const shop = url.searchParams.get('shop')!; + + if (api.config.isEmbeddedApp && url.searchParams.get('embedded') !== '1') { + logger.debug('App is not embedded, redirecting to Shopify', {shop}); + await redirectToShopifyOrAppRoot(request, basicParams); + } +} + +export async function redirectToShopifyOrAppRoot( + request: Request, + basicParams: BasicParams, + responseHeaders?: Headers, +): Promise { + const {api} = basicParams; + const url = new URL(request.url); + + const host = api.utils.sanitizeHost(url.searchParams.get('host')!)!; + const shop = api.utils.sanitizeShop(url.searchParams.get('shop')!)!; + + const redirectUrl = api.config.isEmbeddedApp + ? await api.auth.getEmbeddedAppUrl({rawRequest: request}) + : `/?shop=${shop}&host=${encodeURIComponent(host)}`; + + throw redirect(redirectUrl, {headers: responseHeaders}); +} From eca3f1056bf7edabb5e214e7aa7a7ebbdbf69f31 Mon Sep 17 00:00:00 2001 From: Rachel Carvalho Date: Mon, 18 Sep 2023 16:15:18 -0400 Subject: [PATCH 14/22] yarn lock --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index e06143a6cd..179b019581 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2856,7 +2856,7 @@ jest-matcher-utils "^26.6.2" react-reconciler "^0.28.0" -"@shopify/shopify-api@^7.6.0": +"@shopify/shopify-api@7.6.0", "@shopify/shopify-api@^7.6.0": version "7.6.0" resolved "https://registry.yarnpkg.com/@shopify/shopify-api/-/shopify-api-7.6.0.tgz#d181ca9fbd2ff3b3a7595e9e121fde707dbbb36a" integrity sha512-XUyBkSrUHvqCknPdY3ylaGDyC3hA2aKmXTsbo7vpGzncMqC1hZ2pwRJbBMnffdbEWj14Um9zkEMS7MKf1k6PBw== From 5d18064b1d97d79fe57c8dd8c8f07022320e4a11 Mon Sep 17 00:00:00 2001 From: Rachel Carvalho Date: Tue, 19 Sep 2023 11:29:15 -0400 Subject: [PATCH 15/22] some cleanup --- .../server/authenticate/admin/authenticate.ts | 41 +++------------ .../admin/embedded-authenticate.ts | 52 ++++--------------- .../admin/helpers/auth-helpers.ts | 52 ++++++++++++++++++- .../helpers/handle-embedded-client-error.ts | 3 -- .../helpers/validate-session-token.ts | 16 ++---- 5 files changed, 73 insertions(+), 91 deletions(-) diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts index 4bb23d0828..5f4ee39c9f 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts @@ -22,20 +22,17 @@ import { import type { AdminContext, - EmbeddedAdminContext, - NonEmbeddedAdminContext, } from './types'; import { beginAuth, handleClientErrorFactory, - redirectFactory, redirectToAuthPage, redirectWithExitIframe, renderAppBridge, } from './helpers'; import { createAdminApiContext, - createBillingContext, + createApiContext, ensureAppIsEmbeddedIfRequired, ensureValidShopParam, redirectToBouncePage, @@ -86,37 +83,13 @@ export class AuthStrategy< throw errorOrResponse; } - const context: - | EmbeddedAdminContext - | NonEmbeddedAdminContext = { - admin: createAdminApiContext( - request, - sessionContext.session, - handleClientErrorFactory, - { - api, - logger, - config, - }, - ), - billing: createBillingContext(request, sessionContext.session, { - api, - logger, - config, - }), - session: sessionContext.session, + return createApiContext( + {api, logger, config}, + request, + sessionContext, cors, - }; - - if (config.isEmbeddedApp) { - return { - ...context, - sessionToken: sessionContext!.token!, - redirect: redirectFactory({api, config, logger}, request), - } as AdminContext; - } else { - return context as AdminContext; - } + handleClientErrorFactory, + ); } private async authenticateAndGetSessionContext( diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts index 842bcab9d9..8697cb5388 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts @@ -15,24 +15,18 @@ import { rejectBotRequest, respondToOptionsRequest, ensureCORSHeadersFactory, - validateSessionTokenWithCallback, + validateSessionTokenUncaught, } from '../helpers'; -import type { - AdminContext, - EmbeddedAdminContext, - NonEmbeddedAdminContext, -} from './types'; +import type {AdminContext} from './types'; import { handleEmbeddedClientErrorFactory, - redirectFactory, redirectWithAppBridgeHeaders, redirectWithExitIframe, renderAppBridge, } from './helpers'; import { - createAdminApiContext, - createBillingContext, + createApiContext, ensureAppIsEmbeddedIfRequired, ensureValidShopParam, redirectToBouncePage, @@ -82,37 +76,13 @@ export class EmbeddedAuthStrategy< throw errorOrResponse; } - const context: - | EmbeddedAdminContext - | NonEmbeddedAdminContext = { - admin: createAdminApiContext( - request, - sessionContext.session, - handleEmbeddedClientErrorFactory, - { - api, - logger, - config, - }, - ), - billing: createBillingContext(request, sessionContext.session, { - api, - logger, - config, - }), - session: sessionContext.session, + return createApiContext( + {api, logger, config}, + request, + sessionContext, cors, - }; - - if (config.isEmbeddedApp) { - return { - ...context, - sessionToken: sessionContext!.token!, - redirect: redirectFactory({api, config, logger}, request), - } as AdminContext; - } else { - return context as AdminContext; - } + handleEmbeddedClientErrorFactory, + ); } private async authenticateAndGetSessionContext( @@ -154,10 +124,8 @@ export class EmbeddedAuthStrategy< } if (sessionTokenString) { - let sessionToken; - try { - sessionToken = await validateSessionTokenWithCallback( + const sessionToken = await validateSessionTokenUncaught( {api, logger, config}, sessionTokenString, ); diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts index 35f408f33c..1c3df449c5 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts @@ -1,5 +1,5 @@ import {redirect} from '@remix-run/server-runtime'; -import {Session, ShopifyRestResources} from '@shopify/shopify-api'; +import {Session, ShopifyRestResources, JwtPayload} from '@shopify/shopify-api'; import {AppConfigArg} from '../../../config-types'; import { @@ -14,6 +14,56 @@ import { requestBillingFactory, requireBillingFactory, } from '../billing'; +import type { + AdminContext, + EmbeddedAdminContext, + NonEmbeddedAdminContext, +} from '../types'; +import {EnsureCORSFunction} from '../../helpers'; + +import {redirectFactory} from './redirect'; + +interface SessionContext { + session: Session; + token?: JwtPayload; +} + +export function createApiContext< + Config extends AppConfigArg, + Resources extends ShopifyRestResources, +>( + params: BasicParams, + request: Request, + sessionContext: SessionContext, + cors: EnsureCORSFunction, + handleAdminClientErrorFactory: HandleClientErrorFactory, +) { + const context: + | EmbeddedAdminContext + | NonEmbeddedAdminContext = { + admin: createAdminApiContext( + request, + sessionContext.session, + handleAdminClientErrorFactory, + params, + ), + billing: createBillingContext(request, sessionContext.session, params), + session: sessionContext.session, + cors, + }; + + const {config} = params; + + if (config.isEmbeddedApp) { + return { + ...context, + sessionToken: sessionContext!.token!, + redirect: redirectFactory(params, request), + } as AdminContext; + } else { + return context as AdminContext; + } +} type HandleClientErrorFactory = ({ request, diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts index b98f4a4676..752c9f9372 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts @@ -54,9 +54,6 @@ export function handleEmbeddedClientErrorFactory({ } } - // 403 insufficient scopes - // throw await redirectToAuthPage(params, request, session.shop); - // forward a minimal copy of the upstream HTTP response instead of an Error: throw new Response(JSON.stringify(error.response.body), { status: error.response.code, diff --git a/packages/shopify-app-remix/src/server/authenticate/helpers/validate-session-token.ts b/packages/shopify-app-remix/src/server/authenticate/helpers/validate-session-token.ts index 48bf476d9e..7360cba952 100644 --- a/packages/shopify-app-remix/src/server/authenticate/helpers/validate-session-token.ts +++ b/packages/shopify-app-remix/src/server/authenticate/helpers/validate-session-token.ts @@ -7,21 +7,15 @@ interface ValidateSessionTokenOptions { } export async function validateSessionToken( - {api, logger}: BasicParams, + params: BasicParams, token: string, {checkAudience = true}: ValidateSessionTokenOptions = {}, ): Promise { + const {logger} = params; logger.debug('Validating session token'); try { - const payload = await api.session.decodeSessionToken(token, { - checkAudience, - }); - logger.debug('Session token is valid', { - payload: JSON.stringify(payload), - }); - - return payload; + return await validateSessionTokenUncaught(params, token, {checkAudience}); } catch (error) { logger.debug(`Failed to validate session token: ${error.message}`); throw new Response(undefined, { @@ -31,11 +25,11 @@ export async function validateSessionToken( } } -export async function validateSessionTokenWithCallback( +export async function validateSessionTokenUncaught( {api, logger}: BasicParams, token: string, {checkAudience = true}: ValidateSessionTokenOptions = {}, -) { +): Promise { logger.debug('Validating session token'); console.log('BEFORE'); From be1d84f39ad9c56f2fcd291567c2d7ebcb9af7c3 Mon Sep 17 00:00:00 2001 From: Rachel Carvalho Date: Tue, 19 Sep 2023 12:46:14 -0400 Subject: [PATCH 16/22] delete id token when redirecting to bounce page --- .../src/server/authenticate/admin/helpers/auth-helpers.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts index 1c3df449c5..3404922594 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/auth-helpers.ts @@ -97,15 +97,17 @@ export function redirectToBouncePage( // Make sure we always point to the configured app URL so it also works behind reverse proxies (that alter the Host // header). - url.searchParams.set( + const params = new URLSearchParams(url.search); + params.delete('id_token'); + params.set( 'shopify-reload', - `${config.appUrl}${url.pathname}${url.search}`, + `${config.appUrl}${url.pathname}?${params.toString()}`, ); // eslint-disable-next-line no-warning-comments // TODO Make sure this works on chrome without a tunnel (weird HTTPS redirect issue) // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650 - throw redirect(`${config.auth.patchSessionTokenPath}${url.search}`); + throw redirect(`${config.auth.patchSessionTokenPath}?${params.toString()}`); } export function createBillingContext( From 1c9b3c1668ab2b4bcdb4c4a4d576d586fd576958 Mon Sep 17 00:00:00 2001 From: Rachel Carvalho Date: Wed, 20 Sep 2023 14:59:52 -0400 Subject: [PATCH 17/22] return 401 status and invalid session header when session token is invalid on an XHR request --- .../admin/embedded-authenticate.ts | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts index 8697cb5388..19204587c5 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts @@ -143,7 +143,7 @@ export class EmbeddedAuthStrategy< error.response.body?.error === 'invalid_subject_token') ) { console.log(`CAUGHT ${JSON.stringify(error)}`); - throw redirectToBouncePage(url, {api, logger, config}); + throw this.handleInvalidSession(request); } throw error; } @@ -151,7 +151,7 @@ export class EmbeddedAuthStrategy< logger.debug( 'Missing session token in search params, going to bounce page', ); - throw redirectToBouncePage(url, {api, logger, config}); + throw this.handleInvalidSession(request); } } @@ -206,6 +206,23 @@ export class EmbeddedAuthStrategy< return {session, token: payload}; } + private handleInvalidSession(request: Request) { + const {api, logger, config} = this; + + const isXhrRequest = request.headers.get('authorization'); + if (!isXhrRequest) { + return redirectToBouncePage(new URL(request.url), {api, logger, config}); + } + + return new Response(undefined, { + status: 401, + headers: { + 'Content-Type': 'application/json', + 'X-Shopify-Invalid-Session': '1', + }, + }); + } + // this does not initiate oauth auth code flow, it just triggers managed install private redirectToInstall(request: Request, shop: string) { const {config, logger, api} = this; From 8a10227d9af19ab99b8dd7417791693749908829 Mon Sep 17 00:00:00 2001 From: Rachel Carvalho Date: Thu, 5 Oct 2023 11:53:07 -0400 Subject: [PATCH 18/22] comment out exit iframe to redirect to install when scopes do not match --- .../admin/embedded-authenticate.ts | 57 ++++++++++--------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts index 19204587c5..240115ef22 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts @@ -1,4 +1,4 @@ -import {redirect} from '@remix-run/server-runtime'; +// import {redirect} from '@remix-run/server-runtime'; import { HttpResponseError, InvalidJwtError, @@ -21,14 +21,14 @@ import { import type {AdminContext} from './types'; import { handleEmbeddedClientErrorFactory, - redirectWithAppBridgeHeaders, - redirectWithExitIframe, + // redirectWithAppBridgeHeaders, + // redirectWithExitIframe, renderAppBridge, } from './helpers'; import { createApiContext, ensureAppIsEmbeddedIfRequired, - ensureValidShopParam, + // ensureValidShopParam, redirectToBouncePage, validateUrlParams, } from './helpers/auth-helpers'; @@ -96,7 +96,7 @@ export class EmbeddedAuthStrategy< const isPatchSessionToken = url.pathname === config.auth.patchSessionTokenPath; const isExitIframe = url.pathname === config.auth.exitIframePath; - const isAuthRequest = url.pathname === config.auth.path; + // const isAuthRequest = url.pathname === config.auth.path; if (isPatchSessionToken) { logger.debug('Rendering bounce page'); @@ -106,11 +106,12 @@ export class EmbeddedAuthStrategy< logger.debug('Rendering exit iframe page', {destination}); throw renderAppBridge(params, request, {url: destination}); - } else if (isAuthRequest) { - const shop = ensureValidShopParam(request, {api, logger, config}); - const installUrl = `https://${shop}/admin/oauth/install?client_id=${config.apiKey}`; - throw redirect(installUrl); } + // else if (isAuthRequest) { + // const shop = ensureValidShopParam(request, {api, logger, config}); + // const installUrl = `https://${shop}/admin/oauth/install?client_id=${config.apiKey}`; + // throw redirect(installUrl); + // } const sessionTokenHeader = getSessionTokenHeader(request); const sessionTokenParam = url.searchParams.get(SESSION_TOKEN_PARAM)!; @@ -182,7 +183,7 @@ export class EmbeddedAuthStrategy< if (persistedSession.isScopeChanged(config.scopes)) { config.sessionStorage.deleteSession(persistedSession.id); - this.redirectToInstall(request, shop); + // this.redirectToInstall(request, shop); } if (!persistedSession.isExpired()) { @@ -224,22 +225,22 @@ export class EmbeddedAuthStrategy< } // this does not initiate oauth auth code flow, it just triggers managed install - private redirectToInstall(request: Request, shop: string) { - const {config, logger, api} = this; - - // TODO: make it unified admin - const redirectUrl = `https://${shop}/admin/oauth/install?client_id=${config.apiKey}`; - - const isXhrRequest = request.headers.get('authorization'); - if (isXhrRequest) { - throw redirectWithAppBridgeHeaders(redirectUrl); - } else { - throw redirectWithExitIframe( - {config, logger, api}, - request, - shop, - redirectUrl, - ); - } - } + // private redirectToInstall(request: Request, shop: string) { + // const {config, logger, api} = this; + + // // TODO: make it unified admin + // const redirectUrl = `https://${shop}/admin/oauth/install?client_id=${config.apiKey}`; + + // const isXhrRequest = request.headers.get('authorization'); + // if (isXhrRequest) { + // throw redirectWithAppBridgeHeaders(redirectUrl); + // } else { + // throw redirectWithExitIframe( + // {config, logger, api}, + // request, + // shop, + // redirectUrl, + // ); + // } + // } } From 2eead05d116af07a261a039642cfa2db278ebd3e Mon Sep 17 00:00:00 2001 From: Kyle Bavender Date: Thu, 5 Oct 2023 16:02:29 -0400 Subject: [PATCH 19/22] Override to use local app bridge --- .../components/AppProvider/__tests__/AppProvider.test.tsx | 2 +- packages/shopify-app-remix/src/react/const.ts | 3 +-- packages/shopify-app-remix/src/server/authenticate/const.ts | 3 +-- .../src/server/authenticate/helpers/add-response-headers.ts | 5 +---- 4 files changed, 4 insertions(+), 9 deletions(-) diff --git a/packages/shopify-app-remix/src/react/components/AppProvider/__tests__/AppProvider.test.tsx b/packages/shopify-app-remix/src/react/components/AppProvider/__tests__/AppProvider.test.tsx index 8615f93aca..b297ffaf12 100644 --- a/packages/shopify-app-remix/src/react/components/AppProvider/__tests__/AppProvider.test.tsx +++ b/packages/shopify-app-remix/src/react/components/AppProvider/__tests__/AppProvider.test.tsx @@ -21,7 +21,7 @@ describe('', () => { // THEN expect(component).toContainReactComponent('script', { - src: 'https://cdn.shopify.com/shopifycloud/app-bridge.js', + src: '/dev/app-bridge.js', }); expect(component).toContainReactHtml('Hello world'); }); diff --git a/packages/shopify-app-remix/src/react/const.ts b/packages/shopify-app-remix/src/react/const.ts index 1e1617823b..5749f06fbe 100644 --- a/packages/shopify-app-remix/src/react/const.ts +++ b/packages/shopify-app-remix/src/react/const.ts @@ -1,2 +1 @@ -export const APP_BRIDGE_URL = - 'https://cdn.shopify.com/shopifycloud/app-bridge.js'; +export const APP_BRIDGE_URL = '/dev/app-bridge.js'; diff --git a/packages/shopify-app-remix/src/server/authenticate/const.ts b/packages/shopify-app-remix/src/server/authenticate/const.ts index 4aa2a4a218..86f3a07679 100644 --- a/packages/shopify-app-remix/src/server/authenticate/const.ts +++ b/packages/shopify-app-remix/src/server/authenticate/const.ts @@ -1,5 +1,4 @@ -export const APP_BRIDGE_URL = - 'https://cdn.shopify.com/shopifycloud/app-bridge.js'; +export const APP_BRIDGE_URL = '/dev/app-bridge.js'; export const REAUTH_URL_HEADER = 'X-Shopify-API-Request-Failure-Reauthorize-Url'; diff --git a/packages/shopify-app-remix/src/server/authenticate/helpers/add-response-headers.ts b/packages/shopify-app-remix/src/server/authenticate/helpers/add-response-headers.ts index 6ab3d4d144..495c291b63 100644 --- a/packages/shopify-app-remix/src/server/authenticate/helpers/add-response-headers.ts +++ b/packages/shopify-app-remix/src/server/authenticate/helpers/add-response-headers.ts @@ -24,10 +24,7 @@ export function addDocumentResponseHeaders( shop: string | null | undefined, ) { if (shop) { - headers.set( - 'Link', - '; rel="preload"; as="script";', - ); + headers.set('Link', '; rel="preload"; as="script";'); } if (isEmbeddedApp) { From a95971161a21f464892fadfe0b3da3c851162e8d Mon Sep 17 00:00:00 2001 From: Rachel Carvalho Date: Thu, 19 Oct 2023 10:16:57 -0400 Subject: [PATCH 20/22] fix build after refactors from main --- local-build.sh | 8 ++--- package.json | 2 +- yarn.lock | 89 +++++++++++++++++++++++++++----------------------- 3 files changed, 53 insertions(+), 46 deletions(-) diff --git a/local-build.sh b/local-build.sh index 634839de37..42081ec999 100755 --- a/local-build.sh +++ b/local-build.sh @@ -1,9 +1,9 @@ cd ~/src/github.com/Shopify/shopify-app-js # clean shopify-api-js's build -cd ../shopify-api-js +cd ../shopify-api-js/packages/shopify-api yarn token-exchange-clean -cd ../shopify-app-js +cd ../../../shopify-app-js # unlink local version of shopify-api-js (or true, it's ok if it wasn't linked before) yarn unlink "@shopify/shopify-api" || true @@ -31,9 +31,9 @@ cd ../../../ yarn clean # re-build shopify-api-js -cd ../shopify-api-js +cd ../shopify-api-js/packages/shopify-api yarn token-exchange-build -cd ../shopify-app-js +cd ../../../shopify-app-js # re-link shopify-api-js yarn link "@shopify/shopify-api" diff --git a/package.json b/package.json index cab1aecf3c..dcc981bbc3 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "lint": "loom lint", "release": "loom build && changeset publish", "clean": "rimraf ./packages/*/build .loom", - "token-exchange-build": "./local-build" + "token-exchange-build": "./local-build.sh" }, "devDependencies": { "@changesets/cli": "^2.26.1", diff --git a/yarn.lock b/yarn.lock index 179b019581..3add43b1ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2587,30 +2587,27 @@ resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-1.0.5.tgz#a6d70ef7a0e71e083ea09b967df0a0ed742bc6ad" integrity sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg== -"@remix-run/react@^1.19.0": - version "1.19.0" - resolved "https://registry.yarnpkg.com/@remix-run/react/-/react-1.19.0.tgz#3fd54076e0aa315c67034b4071838762054f6c05" - integrity sha512-wZBNfA+wtX4GQ2xQyWefSpq45b9b+DydXq+mucog1jaR2OPFmSDjNzwp09Nc8G1TcpsvDH4CNgz4nsA94WvFmQ== +"@remix-run/react@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@remix-run/react/-/react-2.1.0.tgz#b74f5e31dcbfc20a8d916864e38047cd687371c5" + integrity sha512-DeYgfsvNxHqNn29sGA3XsZCciMKo2EFTQ9hHkuVPTsJXC4ipHr6Dja1j6UzZYPe/ZuKppiuTjueWCQlE2jOe1w== dependencies: - "@remix-run/router" "1.7.2" - react-router-dom "6.14.2" - -"@remix-run/router@1.6.3": - version "1.6.3" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.6.3.tgz#8205baf6e17ef93be35bf62c37d2d594e9be0dad" - integrity sha512-EXJysQ7J3veRECd0kZFQwYYd5sJMcq2O/m60zu1W2l3oVQ9xtub8jTOtYRE0+M2iomyG/W3Ps7+vp2kna0C27Q== + "@remix-run/router" "1.10.0" + "@remix-run/server-runtime" "2.1.0" + react-router-dom "6.17.0" -"@remix-run/router@1.7.2": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.7.2.tgz#cba1cf0a04bc04cb66027c51fa600e9cbc388bc8" - integrity sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A== +"@remix-run/router@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.10.0.tgz#e2170dc2049b06e65bbe883adad0e8ddf8291278" + integrity sha512-Lm+fYpMfZoEucJ7cMxgt4dYt8jLfbpwRCzAjm9UgSLOkmlqo9gupxt6YX3DY0Fk155NT9l17d/ydi+964uS9Lw== -"@remix-run/server-runtime@^1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@remix-run/server-runtime/-/server-runtime-1.17.1.tgz#620ac5eb514737f2937051f8d91c8d5a021f0beb" - integrity sha512-PuLDaf7WmrOaQzM70yCcM6Jm+g+UHzeBFvocxdqohJnO/8+/n5pFIKHwhooqcSq2TR0WtVpSVhCakdywiOH2mA== +"@remix-run/server-runtime@2.1.0", "@remix-run/server-runtime@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@remix-run/server-runtime/-/server-runtime-2.1.0.tgz#e3141b55140ffd17df7cb7306cbfeeedb6f694b8" + integrity sha512-Uz69yF4Gu6F3VYQub3JgDo9godN8eDMeZclkadBTAWN7bYLonu0ChR/GlFxS35OLeF7BDgudxOSZob0nE1WHNg== dependencies: - "@remix-run/router" "1.6.3" + "@remix-run/router" "1.10.0" + "@types/cookie" "^0.4.1" "@web3-storage/multipart-parser" "^1.0.0" cookie "^0.4.1" set-cookie-parser "^2.4.8" @@ -2710,14 +2707,14 @@ pkg-dir "^5.0.0" pluralize "^8.0.0" -"@shopify/generate-docs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@shopify/generate-docs/-/generate-docs-0.11.0.tgz#7a496a5e3328928ac58edb2c3f3ae0cc131e01ba" - integrity sha512-SufWSQXRqh6cCVd+H8c9cpXWKaBcRpcduIdVk3RkKV/PiD11WkUrHsdVFC1CZHWm1L7QYLaXBqwszFo1UvtYag== +"@shopify/generate-docs@^0.11.1": + version "0.11.2" + resolved "https://registry.yarnpkg.com/@shopify/generate-docs/-/generate-docs-0.11.2.tgz#e87be96181b17bebb00eaa431062b78b57b51715" + integrity sha512-vLYZ6mQm61TyRPgMsnD2JyzNx9kl5t+wt7hPOyYGz1WJ/mIXunRapDrfOpx9JDXQQd4A6U/pGmIuz5X0P940Tg== dependencies: "@types/react" "^18.0.21" globby "^11.1.0" - typescript "^4.8.3" + typescript "^4.8.3 || ^5.0.0" "@shopify/loom-cli@^1.1.0": version "1.1.0" @@ -2856,10 +2853,10 @@ jest-matcher-utils "^26.6.2" react-reconciler "^0.28.0" -"@shopify/shopify-api@7.6.0", "@shopify/shopify-api@^7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@shopify/shopify-api/-/shopify-api-7.6.0.tgz#d181ca9fbd2ff3b3a7595e9e121fde707dbbb36a" - integrity sha512-XUyBkSrUHvqCknPdY3ylaGDyC3hA2aKmXTsbo7vpGzncMqC1hZ2pwRJbBMnffdbEWj14Um9zkEMS7MKf1k6PBw== +"@shopify/shopify-api@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@shopify/shopify-api/-/shopify-api-8.0.1.tgz#c04aa45f493b0256b46ef6088227fbe0e7bd3f93" + integrity sha512-Bqt6eX2IMcZLtKcefaajb9h9sqBtCMG+EH0l6v0xalckqPElQXAjg3fdSyeAZihWvqKUSVDGDDyf5gwYzfEsHQ== dependencies: "@shopify/network" "^3.2.1" compare-versions "^5.0.3" @@ -3355,6 +3352,11 @@ dependencies: "@types/express" "*" +"@types/cookie@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + "@types/estree@*": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" @@ -8996,20 +8998,20 @@ react-reconciler@^0.28.0: loose-envify "^1.1.0" scheduler "^0.22.0" -react-router-dom@6.14.2: - version "6.14.2" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.14.2.tgz#88f520118b91aa60233bd08dbd3fdcaea3a68488" - integrity sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg== +react-router-dom@6.17.0: + version "6.17.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.17.0.tgz#ea73f89186546c1cf72b10fcb7356d874321b2ad" + integrity sha512-qWHkkbXQX+6li0COUUPKAUkxjNNqPJuiBd27dVwQGDNsuFBdMbrS6UZ0CLYc4CsbdLYTckn4oB4tGDuPZpPhaQ== dependencies: - "@remix-run/router" "1.7.2" - react-router "6.14.2" + "@remix-run/router" "1.10.0" + react-router "6.17.0" -react-router@6.14.2: - version "6.14.2" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.14.2.tgz#1f60994d8c369de7b8ba7a78d8f7ec23df76b300" - integrity sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ== +react-router@6.17.0: + version "6.17.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.17.0.tgz#7b680c4cefbc425b57537eb9c73bedecbdc67c1e" + integrity sha512-YJR3OTJzi3zhqeJYADHANCGPUu9J+6fT5GLv82UWRGSxu6oJYCKVmxUcaBQuGm9udpWmPsvpme/CdHumqgsoaA== dependencies: - "@remix-run/router" "1.7.2" + "@remix-run/router" "1.10.0" react-transition-group@^4.4.2: version "4.4.5" @@ -10067,11 +10069,16 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@4.9.5, typescript@^4.3.5, typescript@^4.8.3, typescript@^4.9.5: +typescript@4.9.5, typescript@^4.3.5, typescript@^4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +"typescript@^4.8.3 || ^5.0.0": + version "5.2.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" + integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" From 0a185071885b25334c882337cd54899562d8c6dc Mon Sep 17 00:00:00 2001 From: Rezaan Syed Date: Fri, 6 Oct 2023 11:36:24 -0400 Subject: [PATCH 21/22] Merge changes --- .../admin/embedded-authenticate.ts | 26 ------------------- .../helpers/handle-embedded-client-error.ts | 25 +++++++++++++++++- 2 files changed, 24 insertions(+), 27 deletions(-) diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts index 240115ef22..ed7497b9d5 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts @@ -180,12 +180,6 @@ export class EmbeddedAuthStrategy< if (persistedSession) { logger.debug(`Reusing existing token: ${persistedSession.accessToken}`); - if (persistedSession.isScopeChanged(config.scopes)) { - config.sessionStorage.deleteSession(persistedSession.id); - - // this.redirectToInstall(request, shop); - } - if (!persistedSession.isExpired()) { return {session: persistedSession}; } @@ -223,24 +217,4 @@ export class EmbeddedAuthStrategy< }, }); } - - // this does not initiate oauth auth code flow, it just triggers managed install - // private redirectToInstall(request: Request, shop: string) { - // const {config, logger, api} = this; - - // // TODO: make it unified admin - // const redirectUrl = `https://${shop}/admin/oauth/install?client_id=${config.apiKey}`; - - // const isXhrRequest = request.headers.get('authorization'); - // if (isXhrRequest) { - // throw redirectWithAppBridgeHeaders(redirectUrl); - // } else { - // throw redirectWithExitIframe( - // {config, logger, api}, - // request, - // shop, - // redirectUrl, - // ); - // } - // } } diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts index 752c9f9372..e595230c21 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/helpers/handle-embedded-client-error.ts @@ -1,4 +1,4 @@ -import {HttpResponseError} from '@shopify/shopify-api'; +import {GraphqlQueryError, HttpResponseError} from '@shopify/shopify-api'; import {redirect} from '@remix-run/server-runtime'; import type {HandleAdminClientError} from '../../../clients/admin/types'; @@ -18,6 +18,17 @@ export function handleEmbeddedClientErrorFactory({ session, }): Promise { if (error instanceof HttpResponseError !== true) { + const gqlerror = error.response.errors[0] as any; + console.log('EXTENSIONS ERROR', gqlerror.extensions.code); + if (error instanceof GraphqlQueryError && gqlerror.extensions.code) { + throw new Response(undefined, { + status: 403, + headers: { + 'Content-Type': 'application/json', + 'X-Shopify-Insufficient-Access': '1', + }, + }); + } params.logger.debug( `Got a response error from the API: ${error.message}`, ); @@ -50,10 +61,22 @@ export function handleEmbeddedClientErrorFactory({ }, }); } else { + // On document load, delete the access token and reload the app to retrigger + // token exchange throw redirect(request.url); } } + if (error.response.code === 403) { + throw new Response(undefined, { + status: error.response.code, + headers: { + 'Content-Type': 'application/json', + 'X-Shopify-Insufficient-Access': '1', + }, + }); + } + // forward a minimal copy of the upstream HTTP response instead of an Error: throw new Response(JSON.stringify(error.response.body), { status: error.response.code, From 2398cbf58c8114091c0e4476c4f58ec7ae420970 Mon Sep 17 00:00:00 2001 From: Rezaan Syed Date: Wed, 8 Nov 2023 09:40:33 -0500 Subject: [PATCH 22/22] Add future flag support --- .../server/authenticate/admin/authenticate.ts | 9 ++++---- .../admin/embedded-authenticate.ts | 20 +++++++++++------- .../src/server/future/flags.ts | 2 ++ .../src/server/shopify-app.ts | 21 +++++++++++++++++-- .../shopify-app-remix/src/server/types.ts | 8 +++++-- 5 files changed, 44 insertions(+), 16 deletions(-) diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts index 5f4ee39c9f..8f7e92e97b 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/authenticate.ts @@ -9,6 +9,7 @@ import { Shopify, ShopifyRestResources, } from '@shopify/shopify-api'; +import {MockApiConfig} from 'src/server/shopify-app'; import type {BasicParams} from '../../types'; import type {AppConfig, AppConfigArg} from '../../config-types'; @@ -20,9 +21,7 @@ import { ensureCORSHeadersFactory, } from '../helpers'; -import type { - AdminContext, -} from './types'; +import type {AdminContext} from './types'; import { beginAuth, handleClientErrorFactory, @@ -51,11 +50,11 @@ export class AuthStrategy< Config extends AppConfigArg, Resources extends ShopifyRestResources = ShopifyRestResources, > { - protected api: Shopify; + protected api: Shopify>; protected config: AppConfig; protected logger: Shopify['logger']; - public constructor({api, config, logger}: BasicParams) { + public constructor({api, config, logger}: BasicParams) { this.api = api; this.config = config; this.logger = logger; diff --git a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts index ed7497b9d5..61b01074f7 100644 --- a/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts +++ b/packages/shopify-app-remix/src/server/authenticate/admin/embedded-authenticate.ts @@ -3,6 +3,7 @@ import { HttpResponseError, InvalidJwtError, JwtPayload, + RequestedTokenType, Session, Shopify, ShopifyRestResources, @@ -17,6 +18,7 @@ import { ensureCORSHeadersFactory, validateSessionTokenUncaught, } from '../helpers'; +import {type MockApiConfig} from '../../shopify-app'; import type {AdminContext} from './types'; import { @@ -44,11 +46,11 @@ export class EmbeddedAuthStrategy< Config extends AppConfigArg, Resources extends ShopifyRestResources = ShopifyRestResources, > { - protected api: Shopify; + protected api: Shopify>; protected config: AppConfig; protected logger: Shopify['logger']; - public constructor({api, config, logger}: BasicParams) { + public constructor({api, config, logger}: BasicParams) { this.api = api; this.config = config; this.logger = logger; @@ -180,18 +182,22 @@ export class EmbeddedAuthStrategy< if (persistedSession) { logger.debug(`Reusing existing token: ${persistedSession.accessToken}`); - if (!persistedSession.isExpired()) { - return {session: persistedSession}; - } + // if (!persistedSession.isExpired()) { + return {session: persistedSession}; + // } } } - logger.debug('Requesting token exchange'); + logger.debug( + `Requesting token exchange online tokens? ${config.useOnlineTokens}`, + ); const {session} = await api.auth.tokenExchange({ sessionToken, shop, - isOnline: config.useOnlineTokens, + requestedTokenType: config.useOnlineTokens + ? RequestedTokenType.OnlineAccessToken + : RequestedTokenType.OfflineAccessToken, }); logger.debug(`RECEIVED TOKEN: ${session.accessToken}`); diff --git a/packages/shopify-app-remix/src/server/future/flags.ts b/packages/shopify-app-remix/src/server/future/flags.ts index c42a5a66ef..45baac6ac7 100644 --- a/packages/shopify-app-remix/src/server/future/flags.ts +++ b/packages/shopify-app-remix/src/server/future/flags.ts @@ -12,6 +12,8 @@ export interface FutureFlags { * @default false */ v3_authenticatePublic?: boolean; + + unstable_tokenExchange: boolean; } export type FutureFlagOptions = FutureFlags | undefined; diff --git a/packages/shopify-app-remix/src/server/shopify-app.ts b/packages/shopify-app-remix/src/server/shopify-app.ts index 9c0dcddf02..192bfe6e37 100644 --- a/packages/shopify-app-remix/src/server/shopify-app.ts +++ b/packages/shopify-app-remix/src/server/shopify-app.ts @@ -1,6 +1,7 @@ import '@shopify/shopify-api/adapters/web-api'; import { ConfigInterface as ApiConfig, + ConfigParams, LATEST_API_VERSION, ShopifyError, ShopifyRestResources, @@ -30,6 +31,7 @@ import {authenticatePublicFactory} from './authenticate/public'; import {unauthenticatedStorefrontContextFactory} from './unauthenticated/storefront'; import {AuthStrategy} from './authenticate/admin/authenticate'; import {EmbeddedAuthStrategy} from './authenticate/admin/embedded-authenticate'; +import {FutureFlagOptions, FutureFlags} from './future/flags'; /** * Creates an object your app will use to interact with Shopify. @@ -64,7 +66,11 @@ export function shopifyApp< api.webhooks.addHandlers(appConfig.webhooks); } - const params: BasicParams = {api, config, logger}; + const params: BasicParams = { + api: api as any, + config, + logger, + }; const oauth = new AuthStrategy(params); const tokenExchange = new EmbeddedAuthStrategy(params); @@ -146,9 +152,20 @@ function deriveApi(appConfig: AppConfigArg) { isEmbeddedApp: appConfig.isEmbeddedApp ?? true, apiVersion: appConfig.apiVersion ?? LATEST_API_VERSION, isCustomStoreApp: appConfig.distribution === AppDistribution.ShopifyAdmin, + future: { + unstable_tokenExchange: appConfig.future?.unstable_tokenExchange, + }, }); } +export type MockApiConfig = ConfigParams & { + future?: { + unstable_tokenExchange?: Future extends FutureFlags + ? Future['unstable_tokenExchange'] + : boolean; + }; +}; + function deriveConfig( appConfig: AppConfigArg, apiConfig: ApiConfig, @@ -169,7 +186,7 @@ function deriveConfig( useOnlineTokens: appConfig.useOnlineTokens ?? false, hooks: appConfig.hooks ?? {}, sessionStorage: appConfig.sessionStorage as Storage, - future: appConfig.future ?? {}, + future: appConfig.future ?? {unstable_tokenExchange: true}, auth: { path: authPathPrefix, callbackPath: `${authPathPrefix}/callback`, diff --git a/packages/shopify-app-remix/src/server/types.ts b/packages/shopify-app-remix/src/server/types.ts index 1e536bdc43..4e752ea7e1 100644 --- a/packages/shopify-app-remix/src/server/types.ts +++ b/packages/shopify-app-remix/src/server/types.ts @@ -13,9 +13,13 @@ import type { import type {AuthenticatePublic} from './authenticate/public/types'; import type {AdminContext} from './authenticate/admin/types'; import type {Unauthenticated} from './unauthenticated/types'; +import {FutureFlagOptions} from './future/flags'; +import type {MockApiConfig} from './shopify-app'; -export interface BasicParams { - api: Shopify; +export interface BasicParams< + Future extends FutureFlagOptions = FutureFlagOptions, +> { + api: Shopify>; config: AppConfig; logger: Shopify['logger']; }