fal-js/libs/proxy/src/svelte.ts
Daniel Rochetti bc04feeb85
fix(proxy): svelte immutable error (#109)
* fix(proxy): svelte immutable error

* chore: version bump

* fix: release tag format script
2024-11-21 12:27:49 -08:00

52 lines
1.6 KiB
TypeScript

import { type RequestHandler } from "@sveltejs/kit";
import { fromHeaders, handleRequest } from "./index";
type RequestHandlerParams = {
/**
* The credentials to use for the request. Usually comes from `$env/static/private`
*/
credentials?: string | undefined;
};
/**
* Creates the SvelteKit request handler for the fal.ai client proxy on App Router apps.
* The passed credentials will be used to authenticate the request, if not provided the
* environment variable `FAL_KEY` will be used.
*
* @param params the request handler parameters.
* @returns the SvelteKit request handler.
*/
export const createRequestHandler = ({
credentials,
}: RequestHandlerParams = {}) => {
const handler: RequestHandler = async ({ request }) => {
const FAL_KEY = credentials || process.env.FAL_KEY || "";
const responseHeaders = new Headers({
"Content-Type": "application/json",
});
return await handleRequest({
id: "svelte-app-router",
method: request.method,
getRequestBody: async () => request.text(),
getHeaders: () => fromHeaders(request.headers),
getHeader: (name) => request.headers.get(name),
sendHeader: (name, value) => (responseHeaders[name] = value),
resolveApiKey: () => Promise.resolve(FAL_KEY),
respondWith: (status, data) =>
new Response(JSON.stringify(data), {
status,
headers: responseHeaders,
}),
sendResponse: async (res) => {
return new Response(res.body, res);
},
});
};
return {
requestHandler: handler,
GET: handler,
POST: handler,
PUT: handler,
};
};