feat(proxy): svelte support (#47)
This commit is contained in:
parent
bc338dfafc
commit
9cc7cf5456
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@fal-ai/serverless-proxy",
|
||||
"version": "0.7.3",
|
||||
"version": "0.7.4",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@ -19,7 +19,8 @@
|
||||
"exports": {
|
||||
".": "./src/index.js",
|
||||
"./express": "./src/express.js",
|
||||
"./nextjs": "./src/nextjs.js"
|
||||
"./nextjs": "./src/nextjs.js",
|
||||
"./svelte": "./src/svelte.js"
|
||||
},
|
||||
"typesVersions": {
|
||||
"*": {
|
||||
@ -28,18 +29,25 @@
|
||||
],
|
||||
"nextjs": [
|
||||
"src/nextjs.d.ts"
|
||||
],
|
||||
"svelte": [
|
||||
"src/svelte.d.ts"
|
||||
]
|
||||
}
|
||||
},
|
||||
"main": "./src/index.js",
|
||||
"types": "./src/index.d.ts",
|
||||
"peerDependencies": {
|
||||
"@sveltejs/kit": "^2.0.0",
|
||||
"express": "^4.0.0",
|
||||
"next": "13.4 - 14",
|
||||
"react": "^18.0.0",
|
||||
"react-dom": "^18.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@sveltejs/kit": {
|
||||
"optional": true
|
||||
},
|
||||
"express": {
|
||||
"optional": true
|
||||
},
|
||||
|
||||
@ -126,3 +126,15 @@ export async function handleRequest<ResponseType>(
|
||||
const data = await res.text();
|
||||
return behavior.respondWith(res.status, data);
|
||||
}
|
||||
|
||||
export function fromHeaders(
|
||||
headers: Headers
|
||||
): Record<string, string | string[]> {
|
||||
// TODO once Header.entries() is available, use that instead
|
||||
// Object.fromEntries(headers.entries());
|
||||
const result: Record<string, string | string[]> = {};
|
||||
headers.forEach((value, key) => {
|
||||
result[key] = value;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { NextResponse, type NextRequest } from 'next/server';
|
||||
import type { NextApiHandler } from 'next/types';
|
||||
import { DEFAULT_PROXY_ROUTE, handleRequest } from './index';
|
||||
import { DEFAULT_PROXY_ROUTE, fromHeaders, handleRequest } from './index';
|
||||
|
||||
/**
|
||||
* The default Next API route for the fal.ai client proxy.
|
||||
@ -27,16 +27,6 @@ export const handler: NextApiHandler = async (request, response) => {
|
||||
});
|
||||
};
|
||||
|
||||
function fromHeaders(headers: Headers): Record<string, string | string[]> {
|
||||
// TODO once Header.entries() is available, use that instead
|
||||
// Object.fromEntries(headers.entries());
|
||||
const result: Record<string, string | string[]> = {};
|
||||
headers.forEach((value, key) => {
|
||||
result[key] = value;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* The Next API route handler for the fal.ai client proxy on App Router apps.
|
||||
*
|
||||
|
||||
48
libs/proxy/src/svelte.ts
Normal file
48
libs/proxy/src/svelte.ts
Normal file
@ -0,0 +1,48 @@
|
||||
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 || '';
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const responseHeaders: Record<string, any> = {
|
||||
'Content-Type': 'application/json',
|
||||
};
|
||||
return await handleRequest({
|
||||
id: 'svelte-app-router',
|
||||
method: request.method,
|
||||
respondWith: (status, data) =>
|
||||
new Response(JSON.stringify(data), {
|
||||
status,
|
||||
headers: responseHeaders,
|
||||
}),
|
||||
getHeaders: () => fromHeaders(request.headers),
|
||||
getHeader: (name) => request.headers.get(name),
|
||||
sendHeader: (name, value) => (responseHeaders[name] = value),
|
||||
getBody: async () => request.text(),
|
||||
resolveApiKey: () => Promise.resolve(FAL_KEY),
|
||||
});
|
||||
};
|
||||
return {
|
||||
requestHandler: handler,
|
||||
GET: handler,
|
||||
POST: handler,
|
||||
};
|
||||
};
|
||||
1098
package-lock.json
generated
1098
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -77,6 +77,7 @@
|
||||
"@nx/workspace": "16.10.0",
|
||||
"@secretlint/secretlint-rule-pattern": "^7.0.7",
|
||||
"@secretlint/secretlint-rule-preset-recommend": "^7.0.7",
|
||||
"@sveltejs/kit": "^2.5.0",
|
||||
"@swc-node/core": "^1.10.6",
|
||||
"@swc-node/register": "^1.6.8",
|
||||
"@testing-library/react": "14.0.0",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user