From c903f17277fdf1319756117aa71e5c02dbb1fdb6 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 20 May 2025 15:10:09 +0100 Subject: [PATCH 01/13] test(remix): Run `tsc` before Remix E2E tests --- .../app/entry.client.tsx | 10 +++ .../app/entry.server.tsx | 5 -- .../app/root.tsx | 2 +- .../app/routes/navigate.tsx | 2 +- .../package.json | 2 +- .../app/entry.client.tsx | 10 +++ .../app/entry.server.tsx | 5 -- .../create-remix-app-express/app/root.tsx | 2 +- .../app/routes/navigate.tsx | 2 +- .../create-remix-app-express/package.json | 2 +- .../tests/server-errors.test.ts | 2 +- .../tests/server-transactions.test.ts | 19 +++-- .../create-remix-app-express/tsconfig.json | 2 +- .../create-remix-app-v2/app/entry.client.tsx | 10 +++ .../create-remix-app-v2/app/root.tsx | 2 +- .../app/routes/navigate.tsx | 2 +- .../create-remix-app-v2/package.json | 24 +++--- .../create-remix-app-v2/tsconfig.json | 4 +- .../app/functions/_middleware.ts | 12 ++- .../remix-hydrogen/app/lib/search.ts | 25 ------ .../remix-hydrogen/app/root.tsx | 77 ++++++++++++++----- .../remix-hydrogen/app/routes/_index.tsx | 6 ++ .../remix-hydrogen/app/routes/navigate.tsx | 2 +- .../remix-hydrogen/package.json | 3 +- .../remix-hydrogen/server.ts | 16 +++- .../remix-hydrogen/tsconfig.json | 7 +- 26 files changed, 160 insertions(+), 95 deletions(-) delete mode 100644 dev-packages/e2e-tests/test-applications/remix-hydrogen/app/lib/search.ts diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/entry.client.tsx b/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/entry.client.tsx index 5a7f045ff5f9..d77a64882a30 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/entry.client.tsx +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/entry.client.tsx @@ -3,6 +3,16 @@ import * as Sentry from '@sentry/remix'; import { StrictMode, startTransition, useEffect } from 'react'; import { hydrateRoot } from 'react-dom/client'; +// Extend the Window interface to include ENV +declare global { + interface Window { + ENV: { + SENTRY_DSN: string; + [key: string]: unknown; + }; + } +} + Sentry.init({ environment: 'qa', // dynamic sampling bias to keep transactions dsn: window.ENV.SENTRY_DSN, diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/entry.server.tsx b/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/entry.server.tsx index eff2857fb4b1..d3a41fa6012b 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/entry.server.tsx +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/entry.server.tsx @@ -40,11 +40,6 @@ function isBotRequest(userAgent: string | null) { return isbotModule.isbot(userAgent); } - // isbot < 3.8.0 - if ('default' in isbotModule && typeof isbotModule.default === 'function') { - return isbotModule.default(userAgent); - } - return false; } diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/root.tsx b/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/root.tsx index 517a37a9d76b..eef9aca8c4f1 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/root.tsx +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/root.tsx @@ -52,7 +52,7 @@ export function ErrorBoundary() { } function App() { - const { ENV } = useLoaderData(); + const { ENV } = useLoaderData() as { ENV: { SENTRY_DSN: string } }; return ( diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/routes/navigate.tsx b/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/routes/navigate.tsx index a84df11e7bb7..3e4930a481ee 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/routes/navigate.tsx +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/app/routes/navigate.tsx @@ -10,7 +10,7 @@ export const loader: LoaderFunction = async ({ params: { id } }) => { }; export default function LoaderError() { - const data = useLoaderData(); + const data = useLoaderData() as { test?: string }; return (
diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/package.json b/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/package.json index 20433c4cd15f..76a003b6c1de 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/package.json +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-express-vite-dev/package.json @@ -2,7 +2,7 @@ "private": true, "sideEffects": false, "scripts": { - "build": "remix vite:build", + "build": "remix vite:build && pnpm typecheck", "dev": "node ./server.mjs", "lint": "eslint --ignore-path .gitignore --cache --cache-location ./node_modules/.cache/eslint .", "start": "cross-env NODE_ENV=production node ./server.mjs", diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/entry.client.tsx b/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/entry.client.tsx index 46a0d015cdc0..5207852d10de 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/entry.client.tsx +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/entry.client.tsx @@ -3,6 +3,16 @@ import * as Sentry from '@sentry/remix'; import { StrictMode, startTransition, useEffect } from 'react'; import { hydrateRoot } from 'react-dom/client'; +// Extend the Window interface to include ENV +declare global { + interface Window { + ENV: { + SENTRY_DSN: string; + [key: string]: unknown; + }; + } +} + Sentry.init({ environment: 'qa', // dynamic sampling bias to keep transactions dsn: window.ENV.SENTRY_DSN, diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/entry.server.tsx b/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/entry.server.tsx index a387f32ee7a6..8f9efd9b6254 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/entry.server.tsx +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/entry.server.tsx @@ -40,11 +40,6 @@ function isBotRequest(userAgent: string | null) { return isbotModule.isbot(userAgent); } - // isbot < 3.8.0 - if ('default' in isbotModule && typeof isbotModule.default === 'function') { - return isbotModule.default(userAgent); - } - return false; } diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/root.tsx b/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/root.tsx index 517a37a9d76b..eef9aca8c4f1 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/root.tsx +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/root.tsx @@ -52,7 +52,7 @@ export function ErrorBoundary() { } function App() { - const { ENV } = useLoaderData(); + const { ENV } = useLoaderData() as { ENV: { SENTRY_DSN: string } }; return ( diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/routes/navigate.tsx b/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/routes/navigate.tsx index a84df11e7bb7..3e4930a481ee 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/routes/navigate.tsx +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-express/app/routes/navigate.tsx @@ -10,7 +10,7 @@ export const loader: LoaderFunction = async ({ params: { id } }) => { }; export default function LoaderError() { - const data = useLoaderData(); + const data = useLoaderData() as { test?: string }; return (
diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-express/package.json b/dev-packages/e2e-tests/test-applications/create-remix-app-express/package.json index c44b7a8fe5bc..60cdf5b1f635 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-express/package.json +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-express/package.json @@ -3,7 +3,7 @@ "sideEffects": false, "type": "module", "scripts": { - "build": "remix vite:build", + "build": "remix vite:build && pnpm typecheck", "dev": "node ./server.mjs", "lint": "eslint --ignore-path .gitignore --cache --cache-location ./node_modules/.cache/eslint .", "start": "cross-env NODE_ENV=production node ./server.mjs", diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-express/tests/server-errors.test.ts b/dev-packages/e2e-tests/test-applications/create-remix-app-express/tests/server-errors.test.ts index 5426bac100b8..e83da1c43fd5 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-express/tests/server-errors.test.ts +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-express/tests/server-errors.test.ts @@ -3,7 +3,7 @@ import { waitForError } from '@sentry-internal/test-utils'; test('Sends a loader error to Sentry', async ({ page }) => { const loaderErrorPromise = waitForError('create-remix-app-express', errorEvent => { - return errorEvent.exception.values[0].value === 'Loader Error'; + return errorEvent?.exception?.values?.[0]?.value === 'Loader Error'; }); await page.goto('/loader-error'); diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-express/tests/server-transactions.test.ts b/dev-packages/e2e-tests/test-applications/create-remix-app-express/tests/server-transactions.test.ts index 644760d220a6..3503c0cb3c24 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-express/tests/server-transactions.test.ts +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-express/tests/server-transactions.test.ts @@ -20,7 +20,7 @@ test('Sends parameterized transaction name to Sentry', async ({ page }) => { test('Sends form data with action span', async ({ page }) => { const formdataActionTransaction = waitForTransaction('create-remix-app-express', transactionEvent => { - return transactionEvent?.spans?.some(span => span.data && span.data['code.function'] === 'action'); + return transactionEvent?.spans?.some(span => span.data && span.data['code.function'] === 'action') || false; }); await page.goto('/action-formdata'); @@ -34,13 +34,13 @@ test('Sends form data with action span', async ({ page }) => { await page.locator('button[type=submit]').click(); - const actionSpan = (await formdataActionTransaction).spans.find( + const actionSpan = (await formdataActionTransaction)?.spans?.find( span => span.data && span.data['code.function'] === 'action', ); expect(actionSpan).toBeDefined(); - expect(actionSpan.op).toBe('action.remix'); - expect(actionSpan.data).toMatchObject({ + expect(actionSpan?.op).toBe('action.remix'); + expect(actionSpan?.data).toMatchObject({ 'formData.text': 'test', 'formData.file': 'file.txt', }); @@ -48,17 +48,17 @@ test('Sends form data with action span', async ({ page }) => { test('Sends a loader span to Sentry', async ({ page }) => { const loaderTransactionPromise = waitForTransaction('create-remix-app-express', transactionEvent => { - return transactionEvent?.spans?.some(span => span.data && span.data['code.function'] === 'loader'); + return transactionEvent?.spans?.some(span => span.data && span.data['code.function'] === 'loader') || false; }); await page.goto('/'); - const loaderSpan = (await loaderTransactionPromise).spans.find( + const loaderSpan = (await loaderTransactionPromise)?.spans?.find( span => span.data && span.data['code.function'] === 'loader', ); expect(loaderSpan).toBeDefined(); - expect(loaderSpan.op).toBe('loader.remix'); + expect(loaderSpan?.op).toBe('loader.remix'); }); test('Propagates trace when ErrorBoundary is triggered', async ({ page }) => { @@ -83,9 +83,8 @@ test('Propagates trace when ErrorBoundary is triggered', async ({ page }) => { const httpServerTraceId = httpServerTransaction.contexts?.trace?.trace_id; const httpServerSpanId = httpServerTransaction.contexts?.trace?.span_id; - const loaderSpanId = httpServerTransaction.spans.find( - span => span.data && span.data['code.function'] === 'loader', - )?.span_id; + const loaderSpanId = httpServerTransaction?.spans?.find(span => span.data && span.data['code.function'] === 'loader') + ?.span_id; const pageLoadTraceId = pageloadTransaction.contexts?.trace?.trace_id; const pageLoadSpanId = pageloadTransaction.contexts?.trace?.span_id; diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-express/tsconfig.json b/dev-packages/e2e-tests/test-applications/create-remix-app-express/tsconfig.json index b58e7d722f35..909c40f4d950 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-express/tsconfig.json +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-express/tsconfig.json @@ -1,5 +1,5 @@ { - "include": ["env.d.ts", "**/*.ts", "**/*.tsx"], + "include": ["env.d.ts", "./app/**/*.ts", "./app/**/*.tsx"], "compilerOptions": { "lib": ["DOM", "DOM.Iterable", "ES2022"], "isolatedModules": true, diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-v2/app/entry.client.tsx b/dev-packages/e2e-tests/test-applications/create-remix-app-v2/app/entry.client.tsx index 2109aad0a421..c6c86ac7f1f4 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-v2/app/entry.client.tsx +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-v2/app/entry.client.tsx @@ -4,6 +4,16 @@ * For more information, see https://remix.run/file-conventions/entry.client */ +// Extend the Window interface to include ENV +declare global { + interface Window { + ENV: { + SENTRY_DSN: string; + [key: string]: unknown; + }; + } +} + import { RemixBrowser, useLocation, useMatches } from '@remix-run/react'; import * as Sentry from '@sentry/remix'; import { StrictMode, startTransition, useEffect } from 'react'; diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-v2/app/root.tsx b/dev-packages/e2e-tests/test-applications/create-remix-app-v2/app/root.tsx index 517a37a9d76b..eef9aca8c4f1 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-v2/app/root.tsx +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-v2/app/root.tsx @@ -52,7 +52,7 @@ export function ErrorBoundary() { } function App() { - const { ENV } = useLoaderData(); + const { ENV } = useLoaderData() as { ENV: { SENTRY_DSN: string } }; return ( diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-v2/app/routes/navigate.tsx b/dev-packages/e2e-tests/test-applications/create-remix-app-v2/app/routes/navigate.tsx index a84df11e7bb7..3e4930a481ee 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-v2/app/routes/navigate.tsx +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-v2/app/routes/navigate.tsx @@ -10,7 +10,7 @@ export const loader: LoaderFunction = async ({ params: { id } }) => { }; export default function LoaderError() { - const data = useLoaderData(); + const data = useLoaderData() as { test?: string }; return (
diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-v2/package.json b/dev-packages/e2e-tests/test-applications/create-remix-app-v2/package.json index 63f8b0faf722..1f3ca2437454 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-v2/package.json +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-v2/package.json @@ -2,7 +2,7 @@ "private": true, "sideEffects": false, "scripts": { - "build": "remix build", + "build": "remix build && pnpm typecheck", "dev": "remix dev", "start": "NODE_OPTIONS='--require=./instrument.server.cjs' remix-serve build/index.js", "typecheck": "tsc", @@ -12,10 +12,10 @@ }, "dependencies": { "@sentry/remix": "latest || *", - "@remix-run/css-bundle": "2.16.5", - "@remix-run/node": "2.16.5", - "@remix-run/react": "2.16.5", - "@remix-run/serve": "2.16.5", + "@remix-run/css-bundle": "2.16.7", + "@remix-run/node": "2.16.7", + "@remix-run/react": "2.16.7", + "@remix-run/serve": "2.16.7", "isbot": "^3.6.8", "react": "^18.2.0", "react-dom": "^18.2.0" @@ -23,13 +23,17 @@ "devDependencies": { "@playwright/test": "~1.50.0", "@sentry-internal/test-utils": "link:../../../test-utils", - "@remix-run/dev": "2.16.5", - "@remix-run/eslint-config": "2.16.5", + "@remix-run/dev": "2.16.7", + "@remix-run/eslint-config": "2.16.7", "@sentry/core": "latest || *", - "@types/react": "^18.0.35", - "@types/react-dom": "^18.0.11", + "@types/react": "^18.2.64", + "@types/react-dom": "^18.2.34", + "@types/prop-types": "15.7.7", "eslint": "^8.38.0", - "typescript": "^5.0.4" + "typescript": "^5.1.6" + }, + "resolutions": { + "@types/react": "18.2.22" }, "volta": { "extends": "../../package.json" diff --git a/dev-packages/e2e-tests/test-applications/create-remix-app-v2/tsconfig.json b/dev-packages/e2e-tests/test-applications/create-remix-app-v2/tsconfig.json index 20f8a386a6c4..20501c5b2f7a 100644 --- a/dev-packages/e2e-tests/test-applications/create-remix-app-v2/tsconfig.json +++ b/dev-packages/e2e-tests/test-applications/create-remix-app-v2/tsconfig.json @@ -1,5 +1,6 @@ { - "include": ["remix.env.d.ts", "**/*.ts", "**/*.tsx"], + "include": ["remix.env.d.ts", "./app/**/*.ts", "./app/**/*.tsx"], + "exclude": ["node_modules", "build"], "compilerOptions": { "lib": ["DOM", "DOM.Iterable", "ES2019"], "isolatedModules": true, @@ -10,6 +11,7 @@ "target": "ES2019", "strict": true, "allowJs": true, + "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "baseUrl": ".", "paths": { diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/functions/_middleware.ts b/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/functions/_middleware.ts index de18f7ef68bb..691dba9811a5 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/functions/_middleware.ts +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/functions/_middleware.ts @@ -1,5 +1,5 @@ -import { createPagesFunctionHandler } from '@remix-run/cloudflare-pages'; -import { sentryPagesPlugin } from '@sentry/cloudflare'; +import {createPagesFunctionHandler} from '@remix-run/cloudflare-pages'; +import {sentryPagesPlugin} from '@sentry/cloudflare'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - the server build file is generated by `remix vite:build` @@ -7,6 +7,10 @@ import { sentryPagesPlugin } from '@sentry/cloudflare'; import * as build from '../build/server'; export const onRequest = [ - context => sentryPagesPlugin({ dsn: context.env.E2E_TEST_DSN, tracesSampleRate: 1.0 })(context), - createPagesFunctionHandler({ build }), + (context: EventPluginContext) => + sentryPagesPlugin({ + dsn: context.env.E2E_TEST_DSN, + tracesSampleRate: 1.0, + })(context), + createPagesFunctionHandler({build}), ]; diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/lib/search.ts b/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/lib/search.ts deleted file mode 100644 index d3295f1fc66a..000000000000 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/lib/search.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { - PredictiveArticleFragment, - PredictiveCollectionFragment, - PredictivePageFragment, - PredictiveProductFragment, - PredictiveQueryFragment, - SearchProductFragment, -} from 'storefrontapi.generated'; - -export function applyTrackingParams( - resource: - | PredictiveQueryFragment - | SearchProductFragment - | PredictiveProductFragment - | PredictiveCollectionFragment - | PredictiveArticleFragment - | PredictivePageFragment, - params?: string, -) { - if (params) { - return resource?.trackingParameters ? `?${params}&${resource.trackingParameters}` : `?${params}`; - } else { - return resource?.trackingParameters ? `?${resource.trackingParameters}` : ''; - } -} diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/root.tsx b/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/root.tsx index ef098d204e10..51059b7acebd 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/root.tsx +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/root.tsx @@ -2,7 +2,6 @@ import { Links, LiveReload, Meta, - type MetaFunction, Outlet, Scripts, ScrollRestoration, @@ -12,17 +11,20 @@ import { useMatches, useRouteError, } from '@remix-run/react'; - +import {LoaderFunctionArgs} from '@remix-run/server-runtime'; import * as Sentry from '@sentry/remix/cloudflare'; -import { useNonce } from '@shopify/hydrogen'; -import type { CustomerAccessToken } from '@shopify/hydrogen/storefront-api-types'; -import { type LoaderArgs, defer } from '@shopify/remix-oxygen'; -import { useEffect } from 'react'; -import favicon from '../public/favicon.svg'; -import type { HydrogenSession } from '../server'; +import {useNonce} from '@shopify/hydrogen'; +import type {CustomerAccessToken} from '@shopify/hydrogen/storefront-api-types'; +import type {HydrogenSession} from '@shopify/hydrogen'; +import {defer} from '@shopify/remix-oxygen'; +import {useEffect} from 'react'; // This is important to avoid re-fetching root queries on sub-navigations -export const shouldRevalidate: ShouldRevalidateFunction = ({ formMethod, currentUrl, nextUrl }) => { +export const shouldRevalidate: ShouldRevalidateFunction = ({ + formMethod, + currentUrl, + nextUrl, +}) => { // revalidate when a mutation is performed e.g add to cart, login... if (formMethod && formMethod !== 'GET') { return true; @@ -46,20 +48,39 @@ export function links() { rel: 'preconnect', href: 'https://shop.app', }, - { rel: 'icon', type: 'image/svg+xml', href: favicon }, ]; } -export async function loader({ context }: LoaderArgs) { - const { storefront, session, cart } = context; - const customerAccessToken = await session.get('customerAccessToken'); - const publicStoreDomain = context.env.PUBLIC_STORE_DOMAIN; +export async function loader({ + context, +}: { + context: LoaderFunctionArgs['context']; +}) { + const {storefront, session, cart} = context as { + storefront: { + query: (query: string, options: any) => Promise; + CacheLong: () => any; + }; + session: HydrogenSession; + cart: unknown; + env: unknown; + }; + // Type assertion for cart to fix TS error + const typedCart = cart as {get: () => Promise}; + const customerAccessToken = await (session as HydrogenSession).get( + 'customerAccessToken', + ); + const publicStoreDomain = (context.env as {PUBLIC_STORE_DOMAIN: string}) + .PUBLIC_STORE_DOMAIN; // validate the customer access token is valid - const { isLoggedIn, headers } = await validateCustomerAccessToken(session, customerAccessToken); + const {isLoggedIn, headers} = await validateCustomerAccessToken( + session, + customerAccessToken, + ); // defer the cart query by not awaiting it - const cartPromise = cart.get(); + const cartPromise = typedCart.get(); // defer the footer query (below the fold) const footerPromise = storefront.query(FOOTER_QUERY, { @@ -85,12 +106,23 @@ export async function loader({ context }: LoaderArgs) { isLoggedIn, publicStoreDomain, }, - { headers }, + {headers}, ); } -export const meta = ({ data }: Sentry.SentryMetaArgs>) => { +export const meta = ({ + data, +}: { + data: { + ENV: {SENTRY_DSN: string}; + sentryTrace: string; + sentryBaggage: string; + }; +}) => { return [ + { + env: data.ENV, + }, { name: 'sentry-trace', content: data.sentryTrace, @@ -187,11 +219,14 @@ export function ErrorBoundary() { * ); * ``` * */ -async function validateCustomerAccessToken(session: HydrogenSession, customerAccessToken?: CustomerAccessToken) { +async function validateCustomerAccessToken( + session: HydrogenSession, + customerAccessToken?: CustomerAccessToken, +) { let isLoggedIn = false; const headers = new Headers(); if (!customerAccessToken?.accessToken || !customerAccessToken?.expiresAt) { - return { isLoggedIn, headers }; + return {isLoggedIn, headers}; } const expiresAt = new Date(customerAccessToken.expiresAt).getTime(); @@ -205,7 +240,7 @@ async function validateCustomerAccessToken(session: HydrogenSession, customerAcc isLoggedIn = true; } - return { isLoggedIn, headers }; + return {isLoggedIn, headers}; } const MENU_FRAGMENT = `#graphql diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/routes/_index.tsx b/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/routes/_index.tsx index 48e9494f1c2c..19fa119ec2a4 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/routes/_index.tsx +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/routes/_index.tsx @@ -1,6 +1,12 @@ import { Link, useSearchParams } from '@remix-run/react'; import * as Sentry from '@sentry/remix/cloudflare'; +declare global { + interface Window { + capturedExceptionId?: string; + } +} + export default function Index() { const [searchParams] = useSearchParams(); diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/routes/navigate.tsx b/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/routes/navigate.tsx index 7fe190a6eb77..7f5f79028c00 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/routes/navigate.tsx +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/app/routes/navigate.tsx @@ -10,7 +10,7 @@ export const loader: LoaderFunction = async ({ params: { id } }) => { }; export default function LoaderError() { - const data = useLoaderData(); + const data = useLoaderData() as { test?: string }; return (
diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json index 48f0becca3f7..c30e21d752b5 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json @@ -3,7 +3,7 @@ "sideEffects": false, "type": "module", "scripts": { - "build": "shopify hydrogen build --codegen", + "build": "shopify hydrogen build --codegen && pnpm typecheck", "dev": "shopify hydrogen dev --codegen", "preview": "shopify hydrogen preview", "lint": "eslint --no-error-on-unmatched-pattern --ext .js,.ts,.jsx,.tsx .", @@ -17,6 +17,7 @@ "dependencies": { "@remix-run/react": "^2.15.2", "@remix-run/server-runtime": "^2.15.2", + "@remix-run/cloudflare-pages": "^2.15.2", "@sentry/cloudflare": "latest || *", "@sentry/remix": "latest || *", "@sentry/vite-plugin": "^3.1.2", diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts b/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts index 6a3a889cf968..372e584e0a9e 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts @@ -12,11 +12,25 @@ import { type AppLoadContext, createRequestHandler, getStorefrontHeaders } from import { CART_QUERY_FRAGMENT } from '~/lib/fragments'; import { AppSession } from '~/lib/session'; // Virtual entry point for the app +// Typescript errors about the type of `remixBuild` will be there when it's used +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-expect-error import * as remixBuild from 'virtual:remix/server-build'; /** * Export a fetch handler in module format. */ +type Env = { + SESSION_SECRET: string; + PUBLIC_STOREFRONT_API_TOKEN: string; + PRIVATE_STOREFRONT_API_TOKEN: string; + PUBLIC_STORE_DOMAIN: string; + PUBLIC_STOREFRONT_ID: string; + PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID: string; + PUBLIC_CUSTOMER_ACCOUNT_API_URL: string; + // Add any other environment variables your app expects here +}; + export default { async fetch(request: Request, env: Env, executionContext: ExecutionContext): Promise { return wrapRequestHandler( @@ -68,7 +82,7 @@ export default { request, session, customerAccountId: env.PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID, - customerAccountUrl: env.PUBLIC_CUSTOMER_ACCOUNT_API_URL, + shopId: env.PUBLIC_STORE_DOMAIN, }); /* diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json index dcd7c7237a90..37083f3cea29 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json @@ -1,5 +1,10 @@ { - "include": ["./**/*.d.ts", "./**/*.ts", "./**/*.tsx"], + "include": [ + "server.ts", + "./app/**/*.d.ts", + "./app/**/*.ts", + "./app/**/*.tsx" + ], "compilerOptions": { "lib": ["DOM", "DOM.Iterable", "ES2022"], "isolatedModules": true, From 51d089f3a3da56b10536f6032bc49795a9f06b55 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 20 May 2025 16:08:30 +0100 Subject: [PATCH 02/13] Move typecheck to `test:build` --- .../e2e-tests/test-applications/remix-hydrogen/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json index c30e21d752b5..ba0b538da002 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json @@ -3,14 +3,14 @@ "sideEffects": false, "type": "module", "scripts": { - "build": "shopify hydrogen build --codegen && pnpm typecheck", + "build": "shopify hydrogen build --codegen", "dev": "shopify hydrogen dev --codegen", "preview": "shopify hydrogen preview", "lint": "eslint --no-error-on-unmatched-pattern --ext .js,.ts,.jsx,.tsx .", "typecheck": "tsc --noEmit", "codegen": "shopify hydrogen codegen", "clean": "npx rimraf node_modules dist pnpm-lock.yaml", - "test:build": "pnpm install && npx playwright install && pnpm build", + "test:build": "pnpm install && npx playwright install && pnpm build && pnpm typecheck", "test:assert": "pnpm playwright test" }, "prettier": "@shopify/prettier-config", From b24ebedee99ad8bcb3fbf735720c9fcee6b85656 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 20 May 2025 16:36:17 +0100 Subject: [PATCH 03/13] Remove `--noEmit` --- .../e2e-tests/test-applications/remix-hydrogen/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json index ba0b538da002..9563799bb46a 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json @@ -7,7 +7,7 @@ "dev": "shopify hydrogen dev --codegen", "preview": "shopify hydrogen preview", "lint": "eslint --no-error-on-unmatched-pattern --ext .js,.ts,.jsx,.tsx .", - "typecheck": "tsc --noEmit", + "typecheck": "tsc", "codegen": "shopify hydrogen codegen", "clean": "npx rimraf node_modules dist pnpm-lock.yaml", "test:build": "pnpm install && npx playwright install && pnpm build && pnpm typecheck", From dc1cb5dd51dba249b08885579f02bea06754ce0f Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 20 May 2025 16:50:42 +0100 Subject: [PATCH 04/13] Run typecheck before building --- .../e2e-tests/test-applications/remix-hydrogen/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json index 9563799bb46a..f2610128aefb 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json @@ -3,14 +3,14 @@ "sideEffects": false, "type": "module", "scripts": { - "build": "shopify hydrogen build --codegen", + "build": "pnpm typecheck && shopify hydrogen build --codegen", "dev": "shopify hydrogen dev --codegen", "preview": "shopify hydrogen preview", "lint": "eslint --no-error-on-unmatched-pattern --ext .js,.ts,.jsx,.tsx .", "typecheck": "tsc", "codegen": "shopify hydrogen codegen", "clean": "npx rimraf node_modules dist pnpm-lock.yaml", - "test:build": "pnpm install && npx playwright install && pnpm build && pnpm typecheck", + "test:build": "pnpm install && npx playwright install && pnpm build", "test:assert": "pnpm playwright test" }, "prettier": "@shopify/prettier-config", From c0309d4261cea363d7cd04bf1ef5e63ddd5e117a Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 20 May 2025 21:00:41 +0100 Subject: [PATCH 05/13] Show tsc version --- .../e2e-tests/test-applications/remix-hydrogen/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json index f2610128aefb..549e8d93bcf8 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json @@ -7,7 +7,7 @@ "dev": "shopify hydrogen dev --codegen", "preview": "shopify hydrogen preview", "lint": "eslint --no-error-on-unmatched-pattern --ext .js,.ts,.jsx,.tsx .", - "typecheck": "tsc", + "typecheck": "tsc -v", "codegen": "shopify hydrogen codegen", "clean": "npx rimraf node_modules dist pnpm-lock.yaml", "test:build": "pnpm install && npx playwright install && pnpm build", From 1936b6f51e16ed7de6af657dee7074c116fa26b7 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 20 May 2025 21:10:58 +0100 Subject: [PATCH 06/13] Remove `noEmit` from `tsconfig` --- .../e2e-tests/test-applications/remix-hydrogen/package.json | 2 +- .../e2e-tests/test-applications/remix-hydrogen/tsconfig.json | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json index 549e8d93bcf8..f2610128aefb 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json @@ -7,7 +7,7 @@ "dev": "shopify hydrogen dev --codegen", "preview": "shopify hydrogen preview", "lint": "eslint --no-error-on-unmatched-pattern --ext .js,.ts,.jsx,.tsx .", - "typecheck": "tsc -v", + "typecheck": "tsc", "codegen": "shopify hydrogen codegen", "clean": "npx rimraf node_modules dist pnpm-lock.yaml", "test:build": "pnpm install && npx playwright install && pnpm build", diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json index 37083f3cea29..942b334370cf 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json @@ -23,6 +23,5 @@ "paths": { "~/*": ["app/*"] }, - "noEmit": true } } From 13c9bbab5ce5c6ec764526d028ee5ef8adc0dba5 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 20 May 2025 21:20:54 +0100 Subject: [PATCH 07/13] Try including all files --- .../test-applications/remix-hydrogen/tsconfig.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json index 942b334370cf..16222b1957a6 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json @@ -1,9 +1,8 @@ { "include": [ - "server.ts", - "./app/**/*.d.ts", - "./app/**/*.ts", - "./app/**/*.tsx" + "**/*.d.ts", + "**/*.ts", + "**/*.tsx" ], "compilerOptions": { "lib": ["DOM", "DOM.Iterable", "ES2022"], @@ -23,5 +22,6 @@ "paths": { "~/*": ["app/*"] }, + "noEmit": true } } From a5b3180637fd4f8dfb950058225af89fdbbfb374 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 20 May 2025 21:29:20 +0100 Subject: [PATCH 08/13] Try using relative path to `server.ts` --- .../test-applications/remix-hydrogen/tsconfig.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json index 16222b1957a6..0be59bba878d 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json @@ -1,8 +1,9 @@ { "include": [ - "**/*.d.ts", - "**/*.ts", - "**/*.tsx" + "./server.ts", + "./app/**/*.d.ts", + "./app/**/*.ts", + "./app/**/*.tsx" ], "compilerOptions": { "lib": ["DOM", "DOM.Iterable", "ES2022"], From 8d24fd27740be16afcb8d4d0bdc216ad44950ab8 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 20 May 2025 22:01:02 +0100 Subject: [PATCH 09/13] Introduce another type issue at `server.ts` --- .../e2e-tests/test-applications/remix-hydrogen/server.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts b/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts index 372e584e0a9e..2aa1bd96e450 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts @@ -42,7 +42,7 @@ export default { tunnel: `http://localhost:3031/`, // proxy server }, // Need to cast to any because this is not on cloudflare - request: request as any, + request: request, context: executionContext, }, async () => { From 79acb20025a9fe4fe29dce935b6380ad666cb5ca Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 20 May 2025 22:18:14 +0100 Subject: [PATCH 10/13] Try all files --- .../e2e-tests/test-applications/remix-hydrogen/server.ts | 3 ++- .../test-applications/remix-hydrogen/tsconfig.json | 7 +++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts b/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts index 2aa1bd96e450..92986d0d872f 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts @@ -28,6 +28,7 @@ type Env = { PUBLIC_STOREFRONT_ID: string; PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID: string; PUBLIC_CUSTOMER_ACCOUNT_API_URL: string; + PUBLIC_CHECKOUT_DOMAIN: string; // Add any other environment variables your app expects here }; @@ -42,7 +43,7 @@ export default { tunnel: `http://localhost:3031/`, // proxy server }, // Need to cast to any because this is not on cloudflare - request: request, + request, context: executionContext, }, async () => { diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json index 0be59bba878d..16222b1957a6 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json @@ -1,9 +1,8 @@ { "include": [ - "./server.ts", - "./app/**/*.d.ts", - "./app/**/*.ts", - "./app/**/*.tsx" + "**/*.d.ts", + "**/*.ts", + "**/*.tsx" ], "compilerOptions": { "lib": ["DOM", "DOM.Iterable", "ES2022"], From 8fb25f19ea7c908eb70b3850b859efe3c54264e0 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 20 May 2025 22:30:45 +0100 Subject: [PATCH 11/13] Try using broken SDK version --- .../test-applications/remix-hydrogen/package.json | 4 ++-- .../test-applications/remix-hydrogen/tsconfig.json | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json index f2610128aefb..f4f91b01dd98 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json @@ -18,8 +18,8 @@ "@remix-run/react": "^2.15.2", "@remix-run/server-runtime": "^2.15.2", "@remix-run/cloudflare-pages": "^2.15.2", - "@sentry/cloudflare": "latest || *", - "@sentry/remix": "latest || *", + "@sentry/cloudflare": "9.20.0", + "@sentry/remix": "9.20.0", "@sentry/vite-plugin": "^3.1.2", "@shopify/hydrogen": "^2025.1.0", "@shopify/remix-oxygen": "^2.0.10", diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json index 16222b1957a6..37083f3cea29 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/tsconfig.json @@ -1,8 +1,9 @@ { "include": [ - "**/*.d.ts", - "**/*.ts", - "**/*.tsx" + "server.ts", + "./app/**/*.d.ts", + "./app/**/*.ts", + "./app/**/*.tsx" ], "compilerOptions": { "lib": ["DOM", "DOM.Iterable", "ES2022"], From 4e1e37eccef46ad142bc2c9ba4cf24171ddd8fe6 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 20 May 2025 22:51:13 +0100 Subject: [PATCH 12/13] Return back to verdaccio version --- .../e2e-tests/test-applications/remix-hydrogen/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json index f4f91b01dd98..f2610128aefb 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/package.json @@ -18,8 +18,8 @@ "@remix-run/react": "^2.15.2", "@remix-run/server-runtime": "^2.15.2", "@remix-run/cloudflare-pages": "^2.15.2", - "@sentry/cloudflare": "9.20.0", - "@sentry/remix": "9.20.0", + "@sentry/cloudflare": "latest || *", + "@sentry/remix": "latest || *", "@sentry/vite-plugin": "^3.1.2", "@shopify/hydrogen": "^2025.1.0", "@shopify/remix-oxygen": "^2.0.10", From aecdf2bc8b3468b2fddd4a58de042139e0ce64d8 Mon Sep 17 00:00:00 2001 From: Onur Temizkan Date: Tue, 20 May 2025 23:06:49 +0100 Subject: [PATCH 13/13] Revert back intentional TS error --- .../e2e-tests/test-applications/remix-hydrogen/server.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts b/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts index 92986d0d872f..372e584e0a9e 100644 --- a/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts +++ b/dev-packages/e2e-tests/test-applications/remix-hydrogen/server.ts @@ -28,7 +28,6 @@ type Env = { PUBLIC_STOREFRONT_ID: string; PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID: string; PUBLIC_CUSTOMER_ACCOUNT_API_URL: string; - PUBLIC_CHECKOUT_DOMAIN: string; // Add any other environment variables your app expects here }; @@ -43,7 +42,7 @@ export default { tunnel: `http://localhost:3031/`, // proxy server }, // Need to cast to any because this is not on cloudflare - request, + request: request as any, context: executionContext, }, async () => {