@eslym/sveltekit-adapter-bun 2.1.0-rc.7 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -17
- package/dist/dev.js +3 -3
- package/dist/dev.js.map +3 -3
- package/dist/files/index.js +91 -14
- package/dist/types.d.ts +2 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -168,20 +168,21 @@ export type PreCompressOptions = {
|
|
|
168
168
|
|
|
169
169
|
## Runtime Environments
|
|
170
170
|
|
|
171
|
-
| Name | Description
|
|
172
|
-
| ---------------------- |
|
|
173
|
-
| `HTTP_HOST` | The host for the server
|
|
174
|
-
| `HTTP_PORT` | The port for the server
|
|
175
|
-
| `HTTP_SOCKET` | The path of the unix socket which the server will listen to (this will disable http)
|
|
176
|
-
| `HTTP_PROTOCOL_HEADER` | The header name to get the protocol from the request
|
|
177
|
-
| `HTTP_HOST_HEADER` | The header name to get the host from the request
|
|
178
|
-
| `HTTP_IP_HEADER` | The header name to get the client ip from the request (usually `X-Forwarded-For`)
|
|
179
|
-
| `HTTP_XFF_DEPTH` | The depth of the `X-Forwarded-For` header to get the client ip
|
|
180
|
-
| `
|
|
181
|
-
| `
|
|
182
|
-
| `
|
|
183
|
-
| `
|
|
184
|
-
| `
|
|
185
|
-
| `
|
|
186
|
-
| `
|
|
187
|
-
| `
|
|
171
|
+
| Name | Description | Default |
|
|
172
|
+
| ---------------------- | --------------------------------------------------------------------------------------------------------- | ---------- |
|
|
173
|
+
| `HTTP_HOST` | The host for the server | `0.0.0.0` |
|
|
174
|
+
| `HTTP_PORT` | The port for the server | `3000` |
|
|
175
|
+
| `HTTP_SOCKET` | The path of the unix socket which the server will listen to (this will disable http) | - |
|
|
176
|
+
| `HTTP_PROTOCOL_HEADER` | The header name to get the protocol from the request | - |
|
|
177
|
+
| `HTTP_HOST_HEADER` | The header name to get the host from the request | - |
|
|
178
|
+
| `HTTP_IP_HEADER` | The header name to get the client ip from the request (usually `X-Forwarded-For`) | - |
|
|
179
|
+
| `HTTP_XFF_DEPTH` | The depth of the `X-Forwarded-For` header to get the client ip | `1` |
|
|
180
|
+
| `HTTP_TRUSTED_PROXIES` | A comma separated list of trusted proxies IP or CIDR, used to determine the client IP and override origin | - |
|
|
181
|
+
| `HTTP_OVERRIDE_ORIGIN` | Force the request origin when it is unable to retrieve from the request | - |
|
|
182
|
+
| `HTTP_IDLE_TIMEOUT` | The request timeout for the server(in seconds) | `30` |
|
|
183
|
+
| `HTTP_MAX_BODY` | The maximum body size for the request | `128mib` |
|
|
184
|
+
| `WS_IDLE_TIMEOUT` | The websocket idle timeout (in seconds) | `120` |
|
|
185
|
+
| `WS_MAX_PAYLOAD` | The maximum payload size for the websocket | `16mib` |
|
|
186
|
+
| `WS_NO_PING` | Disable automatic ping response | `false` |
|
|
187
|
+
| `CACHE_ASSET_AGE` | The max-age for the cache-control header for the assets | `14400` |
|
|
188
|
+
| `CACHE_IMMUTABLE_AGE` | The max-age for the cache-control header for the immutable assets | `31536000` |
|
package/dist/dev.js
CHANGED
|
@@ -228,8 +228,8 @@ async function startDevServer({
|
|
|
228
228
|
if (!("Bun" in globalThis)) {
|
|
229
229
|
throw new Error("Please run with bun");
|
|
230
230
|
}
|
|
231
|
-
if (satisfies(">=1.2.6") &&
|
|
232
|
-
|
|
231
|
+
if (satisfies(">=1.2.6") && typeof hmrPort !== "number") {
|
|
232
|
+
hmrPort = 0;
|
|
233
233
|
}
|
|
234
234
|
if (!config) {
|
|
235
235
|
for (const cfg of [
|
|
@@ -360,4 +360,4 @@ export {
|
|
|
360
360
|
patchSveltekit
|
|
361
361
|
};
|
|
362
362
|
|
|
363
|
-
//# debugId=
|
|
363
|
+
//# debugId=B0B32EB73A8B181964756E2164756E21
|
package/dist/dev.js.map
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/dev.ts", "../src/symbols.ts", "../src/dev-internal/version.ts", "../src/dev-internal/bunternal.ts", "../src/dev-internal/mock-http.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import { EventEmitter } from 'events';\nimport { IncomingMessage, ServerResponse } from 'http';\nimport type { Server, WebSocketHandler as BunWSHandler } from 'bun';\nimport type { DevServeOptions, WebSocketHandler } from './types';\nimport { symServer, symUpgrades } from './symbols';\nimport type { ViteDevServer } from 'vite';\nimport {\n bunternal,\n bunternalPlugin,\n patchBunternal,\n setupBunternal\n} from './dev-internal/bunternal';\nimport { satisfies } from './dev-internal/version';\nimport { mockedHttpPlugin, mockNodeRequest, patchMockHttp } from './dev-internal/mock-http';\n\nexport async function patchSveltekit() {\n console.log(\n 'Now patchSveltekit function uses Bun plugin instead of bun patch,\\nyou can now safely remove all patches to @sveltejs/kit in package.json'\n );\n Bun.plugin({\n name: 'bun-patch-sveltekit',\n setup(build) {\n build.onLoad(\n { filter: /\\/@sveltejs\\/kit\\/src\\/exports\\/node\\/index\\.js$/ },\n async (args) => {\n const src = await Bun.file(args.path).text();\n return {\n contents: satisfies('<1.2.5') ? patchBunternal(src) : patchMockHttp(src)\n };\n }\n );\n }\n });\n}\n\nexport async function startDevServer({\n port = 5173,\n host = 'localhost',\n idleTimeout = 30,\n config,\n websocket = {} as any,\n hmrPort = undefined,\n ...serveOptions\n}: DevServeOptions & {\n port?: number;\n host?: string;\n config?: string;\n} = {}) {\n if (!('Bun' in globalThis)) {\n throw new Error('Please run with bun');\n }\n if (satisfies('>=1.2.6') &&
|
|
5
|
+
"import { EventEmitter } from 'events';\nimport { IncomingMessage, ServerResponse } from 'http';\nimport type { Server, WebSocketHandler as BunWSHandler } from 'bun';\nimport type { DevServeOptions, WebSocketHandler } from './types';\nimport { symServer, symUpgrades } from './symbols';\nimport type { ViteDevServer } from 'vite';\nimport {\n bunternal,\n bunternalPlugin,\n patchBunternal,\n setupBunternal\n} from './dev-internal/bunternal';\nimport { satisfies } from './dev-internal/version';\nimport { mockedHttpPlugin, mockNodeRequest, patchMockHttp } from './dev-internal/mock-http';\n\nexport async function patchSveltekit() {\n console.log(\n 'Now patchSveltekit function uses Bun plugin instead of bun patch,\\nyou can now safely remove all patches to @sveltejs/kit in package.json'\n );\n Bun.plugin({\n name: 'bun-patch-sveltekit',\n setup(build) {\n build.onLoad(\n { filter: /\\/@sveltejs\\/kit\\/src\\/exports\\/node\\/index\\.js$/ },\n async (args) => {\n const src = await Bun.file(args.path).text();\n return {\n contents: satisfies('<1.2.5') ? patchBunternal(src) : patchMockHttp(src)\n };\n }\n );\n }\n });\n}\n\nexport async function startDevServer({\n port = 5173,\n host = 'localhost',\n idleTimeout = 30,\n config,\n websocket = {} as any,\n hmrPort = undefined,\n ...serveOptions\n}: DevServeOptions & {\n port?: number;\n host?: string;\n config?: string;\n} = {}) {\n if (!('Bun' in globalThis)) {\n throw new Error('Please run with bun');\n }\n if (satisfies('>=1.2.6') && typeof hmrPort !== 'number') {\n // let vite pick one\n hmrPort = 0;\n }\n\n if (!config) {\n for (const cfg of [\n 'vite.config.ts',\n 'vite.config.js',\n 'vite.config.cjs',\n 'vite.config.mjs'\n ]) {\n if (Bun.file(cfg).size) {\n config = cfg;\n break;\n }\n }\n }\n if (!config) {\n throw new Error('No config file found.');\n }\n const { createServer } = await import('vite');\n\n const upgrades = new WeakMap<Response, WebSocketHandler>();\n\n (globalThis as any)[symUpgrades] = upgrades;\n\n const mockServer = new EventEmitter();\n\n const vite = await createServer({\n configFile: config,\n server: {\n hmr: satisfies('<1.2.6')\n ? {\n server: mockServer as any\n }\n : {\n port: hmrPort\n },\n middlewareMode: true,\n },\n appType: 'custom',\n plugins: [satisfies('<1.2.5') ? bunternalPlugin : mockedHttpPlugin]\n });\n\n const hooks = await vite\n .ssrLoadModule('./src/hooks.server.ts')\n .catch(() => ({}) as Record<string, any>);\n\n await hooks.beforeServe?.();\n\n const getResponse = satisfies('<1.2.6') ? legacyReqRes : mockedReqRes;\n\n const server = Bun.serve({\n ...serveOptions,\n hostname: host,\n port,\n idleTimeout,\n async fetch(request: Request, server: Server<WebSocketHandler>) {\n const response = await getResponse(vite, request, server, mockServer);\n\n if (!response) return;\n\n if (upgrades.has(response)) {\n const ws = upgrades.get(response)!;\n if (server.upgrade(request, { data: ws, headers: response.headers })) {\n return;\n }\n }\n\n return response;\n },\n websocket: {\n ...websocket,\n open(ws) {\n return ws.data.open?.(ws);\n },\n message(ws, message) {\n return ws.data.message(ws, message);\n },\n drain(ws) {\n return ws.data.drain?.(ws);\n },\n close(ws, code, reason) {\n return ws.data.close?.(ws, code, reason);\n },\n ping(ws, buffer) {\n return ws.data.ping?.(ws, buffer);\n },\n pong(ws, buffer) {\n return ws.data.pong?.(ws, buffer);\n }\n } as BunWSHandler<WebSocketHandler>\n } as any);\n\n (mockServer as any)[bunternal] = server;\n\n (globalThis as any)[symServer] = server;\n\n await hooks.afterServe?.(server);\n\n console.log(`Serving on ${server.url}`);\n}\n\nfunction legacyReqRes(\n vite: ViteDevServer,\n request: Request,\n server: Server<WebSocketHandler>,\n mockServer: EventEmitter\n) {\n let pendingResponse: Response | undefined;\n let pendingError: Error | undefined;\n\n const { promise, resolve, reject } = Promise.withResolvers<Response>();\n\n function raise(err: any) {\n if (pendingError) return;\n reject((pendingError = err));\n }\n\n function respond(res: Response) {\n if (pendingResponse) return;\n resolve((pendingResponse = res));\n }\n\n const req = new IncomingMessage(request as any);\n const res = new (ServerResponse as any)(req, respond) as ServerResponse;\n\n const socket = req.socket as any;\n setupBunternal(socket, server, mockServer, res, request);\n\n req.once('error', raise);\n res.once('error', raise);\n\n if (request.headers.get('upgrade')) {\n if (request.headers.get('sec-websocket-protocol') === 'vite-hmr') {\n mockServer.emit('upgrade', req, socket, Buffer.alloc(0));\n return;\n }\n }\n\n vite.middlewares(req, res, (err: any) => {\n if (err) {\n vite.ssrFixStacktrace(err);\n raise(err);\n }\n });\n\n return promise;\n}\n\nfunction mockedReqRes(vite: ViteDevServer, request: Request, server: Server<WebSocketHandler>) {\n const { req, res, promise, reject } = mockNodeRequest(request, server);\n\n vite.middlewares(req, res, (err: any) => {\n if (err) {\n vite.ssrFixStacktrace(err);\n reject(err);\n }\n });\n\n return promise;\n}\n",
|
|
6
6
|
"import { name as adapterName } from '../package.json';\n\nexport const symServer: unique symbol = Symbol.for(`${adapterName}/server`);\nexport const symUpgrades: unique symbol = Symbol.for(`${adapterName}/upgrades`);\n",
|
|
7
7
|
"export function satisfies(range: string) {\n return Bun.semver.satisfies(Bun.version, range);\n}\n",
|
|
8
8
|
"import type { Server } from 'bun';\nimport type { EventEmitter } from 'events';\nimport type { ServerResponse } from 'http';\nimport type { Plugin } from 'vite';\nimport { satisfies } from './version';\nimport type { WebSocketHandler } from '../types';\n\nexport const bunternal = Symbol.for('::bunternal::');\n\nfunction setupBunternalOld(\n socket: any,\n bunServer: Server<WebSocketHandler>,\n httpServer: EventEmitter,\n httpRes: ServerResponse,\n bunReq: Request\n) {\n socket[bunternal] = [bunServer, httpServer, httpRes, bunReq];\n}\n\nfunction setupBunternalNew(\n socket: any,\n _: Server<WebSocketHandler>,\n httpServer: EventEmitter,\n httpRes: ServerResponse,\n bunReq: Request\n) {\n socket[bunternal] = [httpServer, httpRes, bunReq];\n}\n\nexport const setupBunternal = satisfies('<1.1.25') ? setupBunternalOld : setupBunternalNew;\n\nexport function patchBunternal(src: string) {\n const bunReqIndex = satisfies('<1.1.25') ? 2 : 3;\n\n const getRequestPatch = `\n\tif(Symbol.for('::bunternal::') in request.socket) {\n\t\treturn request.socket[Symbol.for('::bunternal::')][${bunReqIndex}];\n\t}\n`;\n\n const setResponsePatch = `\n\tif('Bun' in globalThis && '_reply' in res) {\n\t\tres._reply(response);\n\t\treturn;\n\t}\n`;\n const getReq = src.indexOf('export async function getRequest');\n const getReqStart = src.indexOf('\\n', getReq);\n\n const setRes = src.indexOf('export async function setResponse');\n const setResStart = src.indexOf('\\n', setRes);\n\n return src\n .slice(0, getReqStart)\n .concat(getRequestPatch)\n .concat(src.slice(getReqStart, setResStart))\n .concat(setResponsePatch)\n .concat(src.slice(setResStart));\n}\n\nexport const bunternalPlugin: Plugin = {\n name: 'sveltekit-adapter-bun/bunternal',\n transform(src, id, options) {\n if (!options?.ssr) return;\n if (!id.endsWith('/node_modules/@sveltejs/kit/src/exports/node/index.js')) return;\n\n return {\n code: patchBunternal(src)\n };\n }\n};\n",
|
|
9
9
|
"import { IncomingMessage, ServerResponse, type OutgoingHttpHeaders } from 'http';\nimport type { Socket } from 'net';\nimport { Duplex, PassThrough, Readable } from 'stream';\nimport type { Plugin } from 'vite';\nimport type { WebSocketHandler } from '../types';\n\nconst kReq = Symbol.for('::adapter-bun::request::');\nconst kRes = Symbol.for('::adapter-bun::response::');\n\nfunction defineGetter<T, K extends keyof T>(object: T, property: K, getter: () => T[K]) {\n Object.defineProperty(object, property, { get: getter });\n}\n\nexport function mockNodeRequest(\n request: Request,\n server: Bun.Server<WebSocketHandler>\n): {\n req: IncomingMessage;\n res: ServerResponse;\n promise: Promise<Response>;\n reject: (err: any) => void;\n} {\n const remote = server.requestIP(request)!;\n\n const cloned = request.clone();\n\n const readable = cloned.body\n ? Readable.fromWeb(cloned.body as any)\n : new Readable({\n read() {\n this.push(null);\n }\n });\n const writable = new PassThrough();\n writable.on('error', (err) => console.error('Writable stream error:', err));\n\n const mockSocket = Duplex.from({ readable, writable }) as any as Socket;\n mockSocket.on('error', (err) => console.error('Mock socket error:', err));\n\n defineGetter(mockSocket, 'remoteAddress', () => remote.address);\n defineGetter(mockSocket, 'remotePort', () => remote.port);\n defineGetter(mockSocket, 'remoteFamily', () => remote.family);\n defineGetter(mockSocket, 'address', () => () => remote);\n defineGetter(mockSocket, 'localAddress', () => server.hostname);\n defineGetter(mockSocket, 'localPort', () => server.port);\n defineGetter(mockSocket, 'setKeepAlive', () => () => mockSocket);\n defineGetter(mockSocket, 'setTimeout', () => () => mockSocket);\n defineGetter(mockSocket, 'setNoDelay', () => () => mockSocket);\n defineGetter(mockSocket, 'ref', () => () => mockSocket);\n defineGetter(mockSocket, 'unref', () => () => mockSocket);\n defineGetter(mockSocket, 'encrypted' as any, () => server.url.protocol === 'https:');\n\n const req = new IncomingMessage(mockSocket);\n req.socket = mockSocket;\n\n const url = new URL(request.url);\n\n req.method = request.method;\n req.url = url.pathname + url.search;\n req.headers = {};\n\n request.headers.forEach((value, name) => {\n req.headers[name] = value;\n });\n\n (req as any)[kReq] = request;\n\n const { promise, resolve, reject } = Promise.withResolvers<Response>();\n\n const headers = new Headers();\n let headerSent = false;\n\n (writable as any).setHeader = (name: string, value: string | number | string[]) => {\n headers.delete(name);\n if (Array.isArray(value)) {\n for (const v of value) {\n headers.append(name, v);\n }\n } else {\n headers.set(name, `${value}`);\n }\n };\n\n (writable as any).appendHeader = (name: string, value: string | number | string[]) => {\n if (Array.isArray(value)) {\n for (const v of value) {\n headers.append(name, v);\n }\n } else {\n headers.append(name, `${value}`);\n }\n };\n\n (writable as any).getHeader = (name: string) => {\n return headers.get(name);\n };\n\n (writable as any).writeHead = (statusCode: number) => {\n if (!headers.has('content-type')) {\n headers.set('content-type', Bun.file(url.pathname).type);\n }\n const body = Readable.toWeb(writable);\n const response = new Response(body as any, {\n status: statusCode,\n headers: headers\n });\n headerSent = true;\n resolve(response);\n };\n\n (writable as any)[kRes] = resolve;\n\n const old_write = writable._write.bind(writable);\n\n writable._write = (...args: any[]) => {\n if (!headerSent) {\n (writable as any).statusCode ??= 200;\n (writable as any).writeHead((writable as any).statusCode);\n writable._write = old_write;\n writable.end = old_end;\n }\n (old_write as any)(...args);\n };\n\n const old_end = writable.end.bind(writable);\n (writable as any).end = (...args: any[]) => {\n if (!headerSent) {\n (writable as any).statusCode ??= 200;\n (writable as any).writeHead((writable as any).statusCode);\n writable._write = old_write;\n writable.end = old_end;\n }\n (old_end as any)(...args);\n };\n\n return {\n req,\n res: writable as any,\n promise,\n reject\n };\n}\n\nexport function patchMockHttp(src: string) {\n const getRequestPatch = `\n if(Symbol.for('::adapter-bun::request::') in request) {\n return request[Symbol.for('::adapter-bun::request::')];\n }\n`;\n\n const setResponsePatch = `\n if(Symbol.for('::adapter-bun::response::') in res) {\n res[Symbol.for('::adapter-bun::response::')](response);\n return;\n }\n`;\n const getReq = src.indexOf('export async function getRequest');\n const getReqStart = src.indexOf('\\n', getReq);\n\n const setRes = src.indexOf('export async function setResponse');\n const setResStart = src.indexOf('\\n', setRes);\n\n return src\n .slice(0, getReqStart)\n .concat(getRequestPatch)\n .concat(src.slice(getReqStart, setResStart))\n .concat(setResponsePatch)\n .concat(src.slice(setResStart));\n}\n\nexport const mockedHttpPlugin: Plugin = {\n name: 'sveltekit-adapter-bun/mocked-http',\n transform(src, id, options) {\n if (!options?.ssr) return;\n if (!id.endsWith('/node_modules/@sveltejs/kit/src/exports/node/index.js')) return;\n\n return {\n code: patchMockHttp(src)\n };\n }\n};\n"
|
|
10
10
|
],
|
|
11
|
-
"mappings": "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
|
|
12
|
-
"debugId": "
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "B0B32EB73A8B181964756E2164756E21",
|
|
13
13
|
"names": []
|
|
14
14
|
}
|
package/dist/files/index.js
CHANGED
|
@@ -12,15 +12,18 @@ var name = "@eslym/sveltekit-adapter-bun";
|
|
|
12
12
|
|
|
13
13
|
// src/files/server.ts
|
|
14
14
|
var server = new Server(manifest);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
async function get_server() {
|
|
16
|
+
await server.init({
|
|
17
|
+
env: Bun.env,
|
|
18
|
+
read(file) {
|
|
19
|
+
if (assets.has(file)) {
|
|
20
|
+
return assets.get(file).file.stream();
|
|
21
|
+
}
|
|
22
|
+
return Bun.file(join(globalThis[Symbol.for(`${name}::root`)], "clients", file)).stream();
|
|
20
23
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
+
});
|
|
25
|
+
return server;
|
|
26
|
+
}
|
|
24
27
|
|
|
25
28
|
// src/files/utils.ts
|
|
26
29
|
var urls = new WeakMap;
|
|
@@ -293,8 +296,8 @@ function clone_req(url, request) {
|
|
|
293
296
|
integrity: request.integrity
|
|
294
297
|
});
|
|
295
298
|
}
|
|
296
|
-
async function first_resolve(request, resolvers) {
|
|
297
|
-
const args = { request };
|
|
299
|
+
async function first_resolve(request, ip, resolvers) {
|
|
300
|
+
const args = { request, ip };
|
|
298
301
|
for (let i = 0;i < resolvers.length; i++) {
|
|
299
302
|
const _r = resolvers[i](args);
|
|
300
303
|
const response = _r instanceof Promise ? await _r : _r;
|
|
@@ -328,12 +331,21 @@ function resolve_xff_ip(request, depth) {
|
|
|
328
331
|
const ips = request.headers.get("x-forwarded-for").split(",");
|
|
329
332
|
return ips.at(-depth) || undefined;
|
|
330
333
|
}
|
|
334
|
+
function resolve_trusted_proxy_ip(trustedProxies, request, fallback) {
|
|
335
|
+
return fallback && trustedProxies.check(fallback) ? resolve_xff_ip(request, 1) ?? fallback : fallback;
|
|
336
|
+
}
|
|
337
|
+
function override_origin_with_trusted_proxies(trustedProxies, args) {
|
|
338
|
+
if (!args.ip || !trustedProxies.check(args.ip))
|
|
339
|
+
return;
|
|
340
|
+
override_origin_with_header("x-forwarded-host", "x-forwarded-proto", args);
|
|
341
|
+
}
|
|
331
342
|
function create_fetch({
|
|
332
343
|
overrideOrigin,
|
|
333
344
|
hostHeader,
|
|
334
345
|
protocolHeader,
|
|
335
346
|
ipHeader,
|
|
336
|
-
xffDepth
|
|
347
|
+
xffDepth,
|
|
348
|
+
trustedProxies
|
|
337
349
|
}) {
|
|
338
350
|
let getIp = undefined;
|
|
339
351
|
if (ipHeader === "x-forwarded-for") {
|
|
@@ -351,6 +363,9 @@ function create_fetch({
|
|
|
351
363
|
resolvers.push(override_origin.bind(null, new URL(overrideOrigin)));
|
|
352
364
|
} else if (hostHeader || protocolHeader) {
|
|
353
365
|
resolvers.push(override_origin_with_header.bind(null, hostHeader, protocolHeader));
|
|
366
|
+
} else if (trustedProxies) {
|
|
367
|
+
getIp = resolve_trusted_proxy_ip.bind(null, trustedProxies);
|
|
368
|
+
resolvers.push(override_origin_with_trusted_proxies.bind(null, trustedProxies));
|
|
354
369
|
}
|
|
355
370
|
if (SERVE_STATIC) {
|
|
356
371
|
resolvers.push(serve_static);
|
|
@@ -358,10 +373,11 @@ function create_fetch({
|
|
|
358
373
|
return (request, srv) => {
|
|
359
374
|
const request_ip = srv.requestIP(request)?.address;
|
|
360
375
|
const try_get_ip = getIp ? () => getIp(request, request_ip) : () => request_ip;
|
|
361
|
-
return first_resolve(request, [
|
|
376
|
+
return first_resolve(request, request_ip, [
|
|
362
377
|
...resolvers,
|
|
363
378
|
async (args) => {
|
|
364
|
-
const
|
|
379
|
+
const server2 = await get_server();
|
|
380
|
+
const res = await server2.respond(args.request, {
|
|
365
381
|
getClientAddress() {
|
|
366
382
|
const ip = try_get_ip();
|
|
367
383
|
if (ip)
|
|
@@ -389,6 +405,66 @@ function create_fetch({
|
|
|
389
405
|
};
|
|
390
406
|
}
|
|
391
407
|
|
|
408
|
+
// src/files/trustedproxy.ts
|
|
409
|
+
import { BlockList, isIPv4, isIPv6 } from "net";
|
|
410
|
+
function isCidr4(str) {
|
|
411
|
+
const match = str.match(/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\/(\d{1,2})$/);
|
|
412
|
+
if (!match)
|
|
413
|
+
return false;
|
|
414
|
+
const [_, ip, prefix] = match;
|
|
415
|
+
if (!isIPv4(ip))
|
|
416
|
+
return false;
|
|
417
|
+
const prefixNum = parseInt(prefix, 10);
|
|
418
|
+
return prefixNum >= 0 && prefixNum <= 32;
|
|
419
|
+
}
|
|
420
|
+
function isCidr6(str) {
|
|
421
|
+
const match = str.match(/^([a-fA-F0-9:]+)\/(\d{1,3})$/);
|
|
422
|
+
if (!match)
|
|
423
|
+
return false;
|
|
424
|
+
const [_, ip, prefix] = match;
|
|
425
|
+
if (!isIPv6(ip))
|
|
426
|
+
return false;
|
|
427
|
+
const prefixNum = parseInt(prefix, 10);
|
|
428
|
+
return prefixNum >= 0 && prefixNum <= 128;
|
|
429
|
+
}
|
|
430
|
+
function isRange4(str) {
|
|
431
|
+
const match = str.match(/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})-(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/);
|
|
432
|
+
if (!match)
|
|
433
|
+
return false;
|
|
434
|
+
const [_, start, end] = match;
|
|
435
|
+
return isIPv4(start) && isIPv4(end);
|
|
436
|
+
}
|
|
437
|
+
function isRange6(str) {
|
|
438
|
+
const match = str.match(/^([a-fA-F0-9:]+)-([a-fA-F0-9:]+)$/);
|
|
439
|
+
if (!match)
|
|
440
|
+
return false;
|
|
441
|
+
const [_, start, end] = match;
|
|
442
|
+
return isIPv6(start) && isIPv6(end);
|
|
443
|
+
}
|
|
444
|
+
function create_blocklist(entries) {
|
|
445
|
+
const blocklist = new BlockList;
|
|
446
|
+
for (const entry of entries) {
|
|
447
|
+
if (isCidr4(entry)) {
|
|
448
|
+
const [ip, prefix] = entry.split("/");
|
|
449
|
+
blocklist.addSubnet(ip, parseInt(prefix, 10));
|
|
450
|
+
} else if (isCidr6(entry)) {
|
|
451
|
+
const [ip, prefix] = entry.split("/");
|
|
452
|
+
blocklist.addSubnet(ip, parseInt(prefix, 10));
|
|
453
|
+
} else if (isRange4(entry)) {
|
|
454
|
+
const [start, end] = entry.split("-");
|
|
455
|
+
blocklist.addRange(start, end);
|
|
456
|
+
} else if (isRange6(entry)) {
|
|
457
|
+
const [start, end] = entry.split("-");
|
|
458
|
+
blocklist.addRange(start, end);
|
|
459
|
+
} else if (isIPv4(entry) || isIPv6(entry)) {
|
|
460
|
+
blocklist.addAddress(entry);
|
|
461
|
+
} else {
|
|
462
|
+
throw new Error(`Invalid blocklist entry: ${entry}`);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
return blocklist;
|
|
466
|
+
}
|
|
467
|
+
|
|
392
468
|
// src/files/index.ts
|
|
393
469
|
var websocketHandler = {
|
|
394
470
|
message(ws, message) {
|
|
@@ -439,7 +515,8 @@ function serve() {
|
|
|
439
515
|
hostHeader: get_env("HTTP_HOST_HEADER"),
|
|
440
516
|
protocolHeader: get_env("HTTP_PROTOCOL_HEADER"),
|
|
441
517
|
ipHeader: get_env("HTTP_IP_HEADER"),
|
|
442
|
-
xffDepth: int_env("HTTP_XFF_DEPTH", 1)
|
|
518
|
+
xffDepth: int_env("HTTP_XFF_DEPTH", 1),
|
|
519
|
+
trustedProxies: get_env("HTTP_TRUSTED_PROXIES")?.trim() ? create_blocklist(get_env("HTTP_TRUSTED_PROXIES").split(",").map((s) => s.trim())) : undefined
|
|
443
520
|
}),
|
|
444
521
|
websocket: {
|
|
445
522
|
...websocketOptions(),
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { WebSocketHandler as WSHandler, ServeOptions as BunServeOptions, ServerWebSocket } from 'bun';
|
|
2
2
|
import type { Server } from 'bun';
|
|
3
|
+
import type { BlockList } from 'node:net';
|
|
3
4
|
type BunWSHandler = WSHandler<WebSocketHandler>;
|
|
4
5
|
export type CreateFetchOptions = {
|
|
5
6
|
overrideOrigin?: string;
|
|
@@ -7,6 +8,7 @@ export type CreateFetchOptions = {
|
|
|
7
8
|
protocolHeader?: string;
|
|
8
9
|
ipHeader?: string;
|
|
9
10
|
xffDepth?: number;
|
|
11
|
+
trustedProxies?: BlockList;
|
|
10
12
|
};
|
|
11
13
|
export type ServeOptions = {
|
|
12
14
|
port: number;
|
package/package.json
CHANGED