feat(proxy): add remix-run support (#82)

This commit is contained in:
Daniel Rochetti 2024-08-07 16:45:41 -07:00 committed by GitHub
parent c3a3c3d21a
commit 2ff481614b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 4265 additions and 721 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@fal-ai/serverless-proxy",
"version": "0.8.0",
"version": "0.9.0",
"license": "MIT",
"repository": {
"type": "git",
@ -20,6 +20,7 @@
".": "./src/index.js",
"./express": "./src/express.js",
"./nextjs": "./src/nextjs.js",
"./remix": "./src/remix.js",
"./svelte": "./src/svelte.js"
},
"typesVersions": {
@ -30,6 +31,9 @@
"nextjs": [
"src/nextjs.d.ts"
],
"remix": [
"src/remix.d.ts"
],
"svelte": [
"src/svelte.d.ts"
]
@ -38,6 +42,7 @@
"main": "./src/index.js",
"types": "./src/index.d.ts",
"peerDependencies": {
"@remix-run/dev": "^2.0.0",
"@sveltejs/kit": "^2.0.0",
"express": "^4.0.0",
"next": "13.4 - 14",
@ -45,6 +50,9 @@
"react-dom": "^18.0.0"
},
"peerDependenciesMeta": {
"@remix-run/dev": {
"optional": true
},
"@sveltejs/kit": {
"optional": true
},

View File

@ -136,3 +136,5 @@ export function fromHeaders(
}
export const responsePassthrough = (res: Response) => Promise.resolve(res);
export const resolveApiKeyFromEnv = () => Promise.resolve(getFalKey());

58
libs/proxy/src/remix.ts Normal file
View File

@ -0,0 +1,58 @@
import type {
ActionFunction,
ActionFunctionArgs,
LoaderFunction,
LoaderFunctionArgs,
json as jsonFunction,
} from "@remix-run/node";
import {
fromHeaders,
handleRequest,
resolveApiKeyFromEnv,
responsePassthrough,
} from "./index";
export type FalRemixProxy = {
action: ActionFunction;
loader: LoaderFunction;
};
export type FalRemixProxyOptions = {
/**
* The reference to the `json` function from the Remix runtime.
* e.g. `import { json } from "@remix-run/node";`
*/
json: typeof jsonFunction;
/**
* A function to resolve the API key used by the proxy.
* By default, it uses the `FAL_KEY` environment variable.
*/
resolveApiKey?: () => Promise<string | undefined>;
};
export function createProxy({
json,
resolveApiKey = resolveApiKeyFromEnv,
}: FalRemixProxyOptions): FalRemixProxy {
const proxy = async ({
request,
}: ActionFunctionArgs | LoaderFunctionArgs) => {
const responseHeaders = new Headers();
return handleRequest({
id: "remix",
method: request.method,
respondWith: (status, data) =>
json(data, { status, headers: responseHeaders }),
getHeaders: () => fromHeaders(request.headers),
getHeader: (name) => request.headers.get(name),
sendHeader: (name, value) => responseHeaders.set(name, value),
getRequestBody: async () => JSON.stringify(await request.json()),
sendResponse: responsePassthrough,
resolveApiKey,
});
};
return {
action: proxy,
loader: proxy,
};
}

View File

@ -2,6 +2,10 @@
"extends": "../../tsconfig.base.json",
"files": [],
"include": [],
"compilerOptions": {
"target": "ES2020",
"importHelpers": false
},
"references": [
{
"path": "./tsconfig.lib.json"

4910
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -30,6 +30,8 @@
"@msgpack/msgpack": "^3.0.0-beta2",
"@oclif/core": "^2.3.0",
"@oclif/plugin-help": "^5.2.5",
"@remix-run/dev": "^2.11.1",
"@remix-run/node": "^2.11.1",
"axios": "^1.0.0",
"chalk": "^5.3.0",
"change-case": "^4.1.2",