diff --git a/package.json b/package.json index 6c34191d..0c450f0b 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@babel/core": "^7.21.0", "@babel/preset-react": "^7.18.6", "@netlify/functions": "^1.4.0", + "@netlify/remix-edge-adapter": "^1.0.0", "@remix-run/dev": "^1.13.0", "@remix-run/netlify": "^1.13.0", "@remix-run/node": "^1.13.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 20cc8860..ba862d2f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,7 @@ specifiers: '@babel/core': ^7.21.0 '@babel/preset-react': ^7.18.6 '@netlify/functions': ^1.4.0 + '@netlify/remix-edge-adapter': ^1.0.0 '@remix-run/dev': ^1.13.0 '@remix-run/netlify': ^1.13.0 '@remix-run/node': ^1.13.0 @@ -42,6 +43,7 @@ dependencies: '@babel/core': 7.21.0 '@babel/preset-react': 7.18.6_@babel+core@7.21.0 '@netlify/functions': 1.4.0 + '@netlify/remix-edge-adapter': 1.0.0 '@remix-run/dev': 1.13.0_@remix-run+serve@1.13.0 '@remix-run/netlify': 1.13.0_@netlify+functions@1.4.0 '@remix-run/node': 1.13.0 @@ -1722,6 +1724,18 @@ packages: is-promise: 4.0.0 dev: false + /@netlify/remix-edge-adapter/1.0.0: + resolution: {integrity: sha512-NdTDRW8X/Iyh/ywHcf5H7HUkLoc/k2oxxOMIO5/rm0LHMN2bGFhbOxMBfi0PtFsa/Jn+efbNTkCM15JXoITzSw==} + dependencies: + '@netlify/remix-runtime': 1.0.0 + dev: false + + /@netlify/remix-runtime/1.0.0: + resolution: {integrity: sha512-w1nLlMABrW5uJoQc3eADWZ4wgnRqcqpNOQ+ZMQnoXSwukUGGN6JwGs3/BP+f/8F4CCy7sakbbF+akBmyKIKciQ==} + dependencies: + '@remix-run/server-runtime': 1.13.0 + dev: false + /@nicolo-ribaudo/eslint-scope-5-internals/5.1.1-v1: resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: diff --git a/remix.config.js b/remix.config.js index 2063012d..aac8e782 100644 --- a/remix.config.js +++ b/remix.config.js @@ -1,5 +1,7 @@ +const { config } = require("@netlify/remix-edge-adapter"); /** @type {import('@remix-run/dev').AppConfig} */ module.exports = { + ...config, appDirectory: "src", future: { unstable_postcss: true, @@ -9,5 +11,5 @@ module.exports = { process.env.NETLIFY || process.env.NETLIFY_LOCAL ? "./server.js" : undefined, - serverBuildPath: ".netlify/functions-internal/server.js", + // serverBuildPath: ".netlify/functions-internal/server.js", }; diff --git a/server.js b/server.js index b981b1a2..1b172209 100644 --- a/server.js +++ b/server.js @@ -1,47 +1,14 @@ -import { createRequestHandler } from "@remix-run/netlify"; +// Import path interpreted by the Remix compiler import * as build from "@remix-run/dev/server-build"; +import { createRequestHandler } from "@netlify/remix-edge-adapter"; -/* - * Returns a context object with at most 3 keys: - * - `netlifyGraphToken`: raw authentication token to use with Netlify Graph - * - `clientNetlifyGraphAccessToken`: For use with JWTs generated by - * `netlify-graph-auth`. - * - `netlifyGraphSignature`: a signature for subscription events. Will be - * present if a secret is set. - */ -function getLoadContext(event, context) { - let rawAuthorizationString; - let netlifyGraphToken; - - if (event.authlifyToken != null) { - netlifyGraphToken = event.authlifyToken; - } - - const authHeader = event.headers["authorization"]; - const graphSignatureHeader = event.headers["x-netlify-graph-signature"]; - - if (authHeader != null && /Bearer /gi.test(authHeader)) { - rawAuthorizationString = authHeader.split(" ")[1]; - } - - const loadContext = { - clientNetlifyGraphAccessToken: rawAuthorizationString, - netlifyGraphToken: netlifyGraphToken, - netlifyGraphSignature: graphSignatureHeader, - }; - - // Remove keys with undefined values - Object.keys(loadContext).forEach((key) => { - if (loadContext[key] == null) { - delete loadContext[key]; - } - }); - - return loadContext; -} - -export const handler = createRequestHandler({ +export default createRequestHandler({ build, - getLoadContext, + // process.env.NODE_ENV is provided by Remix at compile time mode: process.env.NODE_ENV, }); + +export const config = { + cache: "manual", + path: "/*", +};