feat(proxy): svelte support (#47)
This commit is contained in:
parent
bc338dfafc
commit
9cc7cf5456
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@fal-ai/serverless-proxy",
|
"name": "@fal-ai/serverless-proxy",
|
||||||
"version": "0.7.3",
|
"version": "0.7.4",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -19,7 +19,8 @@
|
|||||||
"exports": {
|
"exports": {
|
||||||
".": "./src/index.js",
|
".": "./src/index.js",
|
||||||
"./express": "./src/express.js",
|
"./express": "./src/express.js",
|
||||||
"./nextjs": "./src/nextjs.js"
|
"./nextjs": "./src/nextjs.js",
|
||||||
|
"./svelte": "./src/svelte.js"
|
||||||
},
|
},
|
||||||
"typesVersions": {
|
"typesVersions": {
|
||||||
"*": {
|
"*": {
|
||||||
@ -28,18 +29,25 @@
|
|||||||
],
|
],
|
||||||
"nextjs": [
|
"nextjs": [
|
||||||
"src/nextjs.d.ts"
|
"src/nextjs.d.ts"
|
||||||
|
],
|
||||||
|
"svelte": [
|
||||||
|
"src/svelte.d.ts"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"main": "./src/index.js",
|
"main": "./src/index.js",
|
||||||
"types": "./src/index.d.ts",
|
"types": "./src/index.d.ts",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
"@sveltejs/kit": "^2.0.0",
|
||||||
"express": "^4.0.0",
|
"express": "^4.0.0",
|
||||||
"next": "13.4 - 14",
|
"next": "13.4 - 14",
|
||||||
"react": "^18.0.0",
|
"react": "^18.0.0",
|
||||||
"react-dom": "^18.0.0"
|
"react-dom": "^18.0.0"
|
||||||
},
|
},
|
||||||
"peerDependenciesMeta": {
|
"peerDependenciesMeta": {
|
||||||
|
"@sveltejs/kit": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"express": {
|
"express": {
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
|||||||
@ -126,3 +126,15 @@ export async function handleRequest<ResponseType>(
|
|||||||
const data = await res.text();
|
const data = await res.text();
|
||||||
return behavior.respondWith(res.status, data);
|
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 { NextResponse, type NextRequest } from 'next/server';
|
||||||
import type { NextApiHandler } from 'next/types';
|
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.
|
* 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.
|
* 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",
|
"@nx/workspace": "16.10.0",
|
||||||
"@secretlint/secretlint-rule-pattern": "^7.0.7",
|
"@secretlint/secretlint-rule-pattern": "^7.0.7",
|
||||||
"@secretlint/secretlint-rule-preset-recommend": "^7.0.7",
|
"@secretlint/secretlint-rule-preset-recommend": "^7.0.7",
|
||||||
|
"@sveltejs/kit": "^2.5.0",
|
||||||
"@swc-node/core": "^1.10.6",
|
"@swc-node/core": "^1.10.6",
|
||||||
"@swc-node/register": "^1.6.8",
|
"@swc-node/register": "^1.6.8",
|
||||||
"@testing-library/react": "14.0.0",
|
"@testing-library/react": "14.0.0",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user