@miniflare/http-server
Advanced tools
Comparing version 2.0.0-next.3 to 2.0.0-rc.1
@@ -5,3 +5,2 @@ /// <reference types="node" /> | ||
import { Clock } from '@miniflare/shared'; | ||
import { Compatibility } from '@miniflare/shared'; | ||
import { CorePluginSignatures } from '@miniflare/core'; | ||
@@ -11,5 +10,5 @@ import http from 'http'; | ||
import { IncomingRequestCfProperties } from '@miniflare/core'; | ||
import { Log } from '@miniflare/shared'; | ||
import { MiniflareCore } from '@miniflare/core'; | ||
import { Plugin } from '@miniflare/shared'; | ||
import { PluginContext } from '@miniflare/shared'; | ||
import { Request as Request_2 } from '@miniflare/core'; | ||
@@ -19,3 +18,2 @@ import { RequestInfo as RequestInfo_2 } from 'undici'; | ||
import { SetupResult } from '@miniflare/shared'; | ||
import StandardWebSocket from 'ws'; | ||
import { URL as URL_2 } from 'url'; | ||
@@ -32,4 +30,2 @@ | ||
export declare function createWebSocketUpgradeListener<Plugins extends CorePluginSignatures>(mf: MiniflareCore<Plugins>, listener: RequestListener): WebSocketUpgradeListener; | ||
export declare function getAccessibleHosts(ipv4?: boolean): string[]; | ||
@@ -79,3 +75,3 @@ | ||
readonly httpsEnabled: boolean; | ||
constructor(log: Log, compat: Compatibility, options?: HTTPOptions, defaults?: HTTPPluginDefaults); | ||
constructor(ctx: PluginContext, options?: HTTPOptions, defaults?: HTTPPluginDefaults); | ||
getRequestMeta(req: http.IncomingMessage): Awaitable<RequestMeta>; | ||
@@ -118,4 +114,2 @@ get httpsOptions(): ProcessedHTTPSOptions | undefined; | ||
export declare type WebSocketUpgradeListener = (ws: StandardWebSocket, req: http.IncomingMessage) => void; | ||
export { } |
@@ -57,3 +57,3 @@ var __defProp = Object.defineProperty; | ||
var defaultCertRoot = path.resolve(".mf", "cert"); | ||
var defaultCfPath = path.resolve(".mf", "cf.json"); | ||
var defaultCfPath = path.resolve("node_modules", ".mf", "cf.json"); | ||
var defaultCfFetch = process.env.NODE_ENV !== "test"; | ||
@@ -96,4 +96,4 @@ var defaultCfFetchEndpoint = "https://workers.cloudflare.com/cf.json"; | ||
var HTTPPlugin = class extends Plugin { | ||
constructor(log, compat, options, defaults = {}) { | ||
super(log, compat); | ||
constructor(ctx, options, defaults = {}) { | ||
super(ctx); | ||
this.defaults = defaults; | ||
@@ -160,5 +160,5 @@ this.assignOptions(options); | ||
await fs.writeFile(cfPath, cfText, "utf8"); | ||
this.log.info("Updated Request cf object cache!"); | ||
this.ctx.log.info("Updated Request cf object cache!"); | ||
} catch (e) { | ||
this.log.error(e); | ||
this.ctx.log.error(e); | ||
} | ||
@@ -184,3 +184,3 @@ } | ||
if (regenerate) { | ||
this.log.info("Generating new self-signed certificate..."); | ||
this.ctx.log.info("Generating new self-signed certificate..."); | ||
const selfSigned = await import("selfsigned"); | ||
@@ -390,2 +390,3 @@ const certAttrs = [ | ||
req.headers["cf-visitor"] ??= `{"scheme":"${proto}"}`; | ||
req.headers["host"] = url.host; | ||
const headers = new Headers(); | ||
@@ -531,14 +532,2 @@ for (const [name, values] of Object.entries(req.headers)) { | ||
} | ||
function createWebSocketUpgradeListener(mf, listener) { | ||
return async (ws, req) => { | ||
const response = await listener(req); | ||
const webSocket = response?.webSocket; | ||
if (response?.status !== 101 || !webSocket) { | ||
ws.close(1002, "Protocol Error"); | ||
mf.log.error(new TypeError("Web Socket request did not return status 101 Switching Protocols response with Web Socket")); | ||
return; | ||
} | ||
await coupleWebSocket(ws, webSocket); | ||
}; | ||
} | ||
async function createServer(mf, options) { | ||
@@ -555,10 +544,24 @@ const plugins = await mf.getPlugins(); | ||
} | ||
const upgrader = createWebSocketUpgradeListener(mf, listener); | ||
const webSocketServer = new WebSocketServer({ noServer: true }); | ||
webSocketServer.on("connection", upgrader); | ||
const liveReloadServer = new WebSocketServer({ noServer: true }); | ||
server.on("upgrade", (request, socket, head) => { | ||
server.on("upgrade", async (request, socket, head) => { | ||
const { pathname } = new URL(request.url ?? "", "http://localhost"); | ||
const server2 = pathname === "/cdn-cgi/mf/reload" ? liveReloadServer : webSocketServer; | ||
server2.handleUpgrade(request, socket, head, (ws) => server2.emit("connection", ws, request)); | ||
if (pathname === "/cdn-cgi/mf/reload") { | ||
liveReloadServer.handleUpgrade(request, socket, head, (ws) => { | ||
liveReloadServer.emit("connection", ws, request); | ||
}); | ||
} else { | ||
const response = await listener(request); | ||
const webSocket = response?.webSocket; | ||
if (response?.status !== 101 || !webSocket) { | ||
socket.write("HTTP/1.1 500 Internal Server Error\r\n\r\n"); | ||
socket.destroy(); | ||
mf.log.error(new TypeError("Web Socket request did not return status 101 Switching Protocols response with Web Socket")); | ||
return; | ||
} | ||
webSocketServer.handleUpgrade(request, socket, head, (ws) => { | ||
void coupleWebSocket(ws, webSocket); | ||
webSocketServer.emit("connection", ws, request); | ||
}); | ||
} | ||
}); | ||
@@ -599,3 +602,2 @@ const reloadListener = () => { | ||
createServer, | ||
createWebSocketUpgradeListener, | ||
getAccessibleHosts, | ||
@@ -602,0 +604,0 @@ startServer |
{ | ||
"name": "@miniflare/http-server", | ||
"version": "2.0.0-next.3", | ||
"version": "2.0.0-rc.1", | ||
"description": "HTTP server module for Miniflare: a fun, full-featured, fully-local simulator for Cloudflare Workers", | ||
@@ -39,5 +39,5 @@ "keywords": [ | ||
"dependencies": { | ||
"@miniflare/core": "2.0.0-next.3", | ||
"@miniflare/shared": "2.0.0-next.3", | ||
"@miniflare/web-sockets": "2.0.0-next.3", | ||
"@miniflare/core": "2.0.0-rc.1", | ||
"@miniflare/shared": "2.0.0-rc.1", | ||
"@miniflare/web-sockets": "2.0.0-rc.1", | ||
"kleur": "^4.1.4", | ||
@@ -50,5 +50,5 @@ "selfsigned": "^1.10.11", | ||
"devDependencies": { | ||
"@miniflare/shared-test": "2.0.0-next.3", | ||
"@miniflare/shared-test": "2.0.0-rc.1", | ||
"@types/node-forge": "^0.10.4" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
36419
689
+ Added@miniflare/core@2.0.0-rc.1(transitive)
+ Added@miniflare/shared@2.0.0-rc.1(transitive)
+ Added@miniflare/web-sockets@2.0.0-rc.1(transitive)
- Removed@miniflare/core@2.0.0-next.3(transitive)
- Removed@miniflare/shared@2.0.0-next.3(transitive)
- Removed@miniflare/web-sockets@2.0.0-next.3(transitive)
Updated@miniflare/core@2.0.0-rc.1
Updated@miniflare/shared@2.0.0-rc.1