-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvite.config.ts
More file actions
110 lines (108 loc) · 4.81 KB
/
Copy pathvite.config.ts
File metadata and controls
110 lines (108 loc) · 4.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import type { IncomingMessage, ServerResponse } from "node:http"
import react from "@vitejs/plugin-react"
import { config as loadEnv } from "dotenv"
import { defineConfig } from "vite"
import { handleAccountLiveRequest } from "./src/server/accountLive"
import { handleAgentApiRequest } from "./src/server/agentApi"
import { handleAgentFeedbackRequest } from "./src/server/agentFeedback"
import { viteDevServerEnvNames } from "./src/server/envNames"
import { handleRewardProofRequest } from "./src/server/rewardsProof"
import {
handleEthereumRpcGatewayRequest,
handleRpcChallengeRequest,
handleRpcVerifyRequest,
} from "./src/server/rpcGateway"
import { handleSafeDiscoveryRequest } from "./src/server/safeDiscovery"
import { handleSafePriceRequest } from "./src/server/safePrice"
import { handleSafeTxServiceRequest } from "./src/server/safeTxService"
import { handleValidatorsRequest } from "./src/server/validators"
loadEnv()
export default defineConfig({
plugins: [
react(),
{
name: "safecafe-agent-api",
configureServer(server) {
const handleApi = async (
req: IncomingMessage,
res: ServerResponse,
path: string,
handler: (request: Request) => Promise<Response>,
) => {
const chunks: Buffer[] = []
for await (const chunk of req) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk))
const incomingUrl = new URL(req.url ?? "/", "http://localhost")
const request = new Request(`http://localhost${path}${incomingUrl.search}`, {
method: req.method,
headers: req.headers as HeadersInit,
body: req.method === "GET" || req.method === "HEAD" ? undefined : Buffer.concat(chunks),
})
const response = await handler(request)
res.statusCode = response.status
response.headers.forEach((value, key) => {
res.setHeader(key, value)
})
if (response.body) {
const reader = response.body.getReader()
for (;;) {
const { done, value } = await reader.read()
if (done) break
res.write(Buffer.from(value))
}
res.end()
return
}
res.end()
}
const env = Object.fromEntries(viteDevServerEnvNames.map((name) => [name, process.env[name]]))
server.middlewares.use("/api/agent/feedback", async (req, res) => {
await handleApi(req, res, "/api/agent/feedback", (request) => handleAgentFeedbackRequest(request, env))
})
server.middlewares.use("/api/agent", async (req, res) => {
await handleApi(req, res, "/api/agent", (request) => handleAgentApiRequest(request, env))
})
server.middlewares.use("/api/account/live", async (req, res) => {
await handleApi(req, res, "/api/account/live", (request) => handleAccountLiveRequest(request, env))
})
server.middlewares.use("/api/validators", async (req, res) => {
await handleApi(req, res, "/api/validators", (request) => handleValidatorsRequest(request, env))
})
server.middlewares.use("/api/rewards/proof", async (req, res) => {
await handleApi(req, res, "/api/rewards/proof", (request) => handleRewardProofRequest(request, env))
})
server.middlewares.use("/api/price/safe", async (req, res) => {
await handleApi(req, res, "/api/price/safe", (request) => handleSafePriceRequest(request, env))
})
server.middlewares.use("/api/safes", async (req, res) => {
await handleApi(req, res, "/api/safes", (request) => handleSafeDiscoveryRequest(request, env))
})
server.middlewares.use("/api/safe/transaction", async (req, res) => {
await handleApi(req, res, "/api/safe/transaction", (request) => handleSafeTxServiceRequest(request, env))
})
server.middlewares.use("/api/auth/challenge", async (req, res) => {
await handleApi(req, res, "/api/auth/challenge", (request) => handleRpcChallengeRequest(request, env))
})
server.middlewares.use("/api/auth/verify", async (req, res) => {
await handleApi(req, res, "/api/auth/verify", (request) => handleRpcVerifyRequest(request, env))
})
server.middlewares.use("/api/rpc/ethereum", async (req, res) => {
await handleApi(req, res, "/api/rpc/ethereum", (request) => handleEthereumRpcGatewayRequest(request, env))
})
},
},
],
build: {
rollupOptions: {
output: {
manualChunks(id) {
if (id.includes("node_modules/react") || id.includes("node_modules/react-dom")) return "react"
if (id.includes("node_modules/viem")) return "viem"
if (id.includes("node_modules/lucide-react")) return "icons"
},
},
},
},
server: {
port: 5175,
},
})