Skip to content

Commit 46c7897

Browse files
committed
use cors
1 parent 5ac0738 commit 46c7897

File tree

3 files changed

+29
-78
lines changed

3 files changed

+29
-78
lines changed

genkit-tools/common/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
},
1111
"dependencies": {
1212
"@asteasolutions/zod-to-openapi": "^7.0.0",
13+
"@inquirer/prompts": "^7.8.0",
1314
"@trpc/server": "^10.45.2",
1415
"adm-zip": "^0.5.12",
1516
"ajv": "^8.12.0",
@@ -20,10 +21,10 @@
2021
"colorette": "^2.0.20",
2122
"commander": "^11.1.0",
2223
"configstore": "^5.0.1",
24+
"cors": "^2.8.5",
2325
"express": "^4.21.0",
2426
"get-port": "5.1.1",
2527
"glob": "^10.3.12",
26-
"@inquirer/prompts": "^7.8.0",
2728
"js-yaml": "^4.1.0",
2829
"json-2-csv": "^5.5.1",
2930
"json-schema": "^0.4.0",
@@ -41,6 +42,7 @@
4142
"@types/body-parser": "^1.19.5",
4243
"@types/cli-color": "^2.0.6",
4344
"@types/configstore": "^6.0.2",
45+
"@types/cors": "^2.8.19",
4446
"@types/express": "^4.17.21",
4547
"@types/inquirer": "^8.1.3",
4648
"@types/jest": "^29.5.12",

genkit-tools/common/src/server/server.ts

Lines changed: 10 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import * as trpcExpress from '@trpc/server/adapters/express';
1818
import * as bodyParser from 'body-parser';
1919
import * as clc from 'colorette';
20+
import cors from 'cors';
2021
import express, { type ErrorRequestHandler } from 'express';
2122
import type { Server } from 'http';
2223
import os from 'os';
@@ -49,6 +50,15 @@ export function startServer(manager: RuntimeManager, port: number) {
4950
let server: Server;
5051
const app = express();
5152

53+
// Allow all origins and expose trace ID header
54+
app.use(
55+
cors({
56+
origin: '*',
57+
allowedHeaders: ['Content-Type'],
58+
exposedHeaders: ['X-Genkit-Trace-Id'],
59+
})
60+
);
61+
5262
// Download UI assets from public GCS bucket and serve locally
5363
downloadAndExtractUiAssets({
5464
fileUrl: UI_ASSETS_ZIP_GCS_PATH,
@@ -60,21 +70,6 @@ export function startServer(manager: RuntimeManager, port: number) {
6070
// tRPC doesn't support simple streaming mutations (https://github.com/trpc/trpc/issues/4477).
6171
// Don't want a separate WebSocket server for subscriptions - https://trpc.io/docs/subscriptions.
6272
// TODO: migrate to streamingMutation when it becomes available in tRPC.
63-
app.options('/api/streamAction', async (req, res) => {
64-
res.setHeader('Access-Control-Allow-Origin', '*');
65-
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
66-
res.setHeader('Access-Control-Expose-Headers', 'X-Genkit-Trace-Id');
67-
res.status(200).send('');
68-
});
69-
70-
// Plain HTTP runAction endpoint (non-streaming)
71-
app.options('/api/runAction', async (req, res) => {
72-
res.setHeader('Access-Control-Allow-Origin', '*');
73-
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
74-
res.setHeader('Access-Control-Expose-Headers', 'X-Genkit-Trace-Id');
75-
res.status(200).send('');
76-
});
77-
7873
app.post(
7974
'/api/runAction',
8075
bodyParser.json({ limit: MAX_PAYLOAD_SIZE }),
@@ -90,8 +85,6 @@ export function startServer(manager: RuntimeManager, port: number) {
9085
// This is the first place headers are sent, so no check needed
9186
res.setHeader('X-Genkit-Trace-Id', traceId);
9287
res.setHeader('Content-Type', 'application/json');
93-
res.setHeader('Access-Control-Allow-Origin', '*');
94-
res.setHeader('Access-Control-Expose-Headers', 'X-Genkit-Trace-Id');
9588
res.statusCode = 200;
9689
res.flushHeaders();
9790
}
@@ -106,7 +99,6 @@ export function startServer(manager: RuntimeManager, port: number) {
10699
if (!res.headersSent) {
107100
res.writeHead(500, {
108101
'Content-Type': 'application/json',
109-
'Access-Control-Allow-Origin': '*',
110102
});
111103
}
112104
res.end(JSON.stringify({ error: error.data }));
@@ -121,8 +113,6 @@ export function startServer(manager: RuntimeManager, port: number) {
121113
const { key, input, context } = req.body;
122114

123115
// Set streaming headers immediately
124-
res.setHeader('Access-Control-Allow-Origin', '*');
125-
res.setHeader('Access-Control-Expose-Headers', 'X-Genkit-Trace-Id');
126116
res.setHeader('Content-Type', 'text/plain');
127117
res.setHeader('Transfer-Encoding', 'chunked');
128118
res.statusCode = 200;
@@ -147,12 +137,6 @@ export function startServer(manager: RuntimeManager, port: number) {
147137
}
148138
);
149139

150-
app.options('/api/streamTrace', async (req, res) => {
151-
res.setHeader('Access-Control-Allow-Origin', '*');
152-
res.setHeader('Access-Control-Expose-Headers', 'X-Genkit-Trace-Id');
153-
res.status(200).send('');
154-
});
155-
156140
app.post(
157141
'/api/streamTrace',
158142
bodyParser.json({ limit: MAX_PAYLOAD_SIZE }),
@@ -165,9 +149,6 @@ export function startServer(manager: RuntimeManager, port: number) {
165149
}
166150

167151
// Set streaming headers immediately
168-
res.setHeader('Access-Control-Allow-Origin', '*');
169-
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
170-
res.setHeader('Access-Control-Expose-Headers', 'X-Genkit-Trace-Id');
171152
res.setHeader('Content-Type', 'text/plain');
172153
res.setHeader('Transfer-Encoding', 'chunked');
173154
res.setHeader('X-Genkit-Trace-Id', traceId);
@@ -185,7 +166,6 @@ export function startServer(manager: RuntimeManager, port: number) {
185166
if (!res.headersSent) {
186167
res.writeHead(500, {
187168
'Content-Type': 'application/json',
188-
'Access-Control-Allow-Origin': '*',
189169
});
190170
}
191171
res.write(
@@ -211,12 +191,6 @@ export function startServer(manager: RuntimeManager, port: number) {
211191
// Endpoints for CLI control
212192
app.use(
213193
API_BASE_PATH,
214-
(req, res, next) => {
215-
res.setHeader('Access-Control-Allow-Origin', '*');
216-
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
217-
if (req.method === 'OPTIONS') res.send('');
218-
else next();
219-
},
220194
trpcExpress.createExpressMiddleware({
221195
router: TOOLS_SERVER_ROUTER(manager),
222196
maxBodySize: MAX_PAYLOAD_SIZE,

genkit-tools/pnpm-lock.yaml

Lines changed: 16 additions & 41 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)