Skip to content

node:http: module helper export tail is missing from manifest and parity coverage #3712

@andrewtdiz

Description

@andrewtdiz

Summary

Perry's node:http manifest currently covers the main server/client classes and request helpers, but it omits a current Node export tail that packages use for feature detection, header validation, proxy setup, and newer WebSocket/DOM compatibility:

  • http.globalAgent
  • http.maxHeaderSize
  • http.validateHeaderName(name[, label])
  • http.validateHeaderValue(name, value)
  • http.setMaxIdleHTTPParsers(max)
  • http.setGlobalProxyFromEnv([proxyEnv])
  • http.OutgoingMessage
  • http.WebSocket
  • http.CloseEvent
  • http.MessageEvent
  • http._connectionListener

No existing issue was found for node:http globalAgent maxHeaderSize validateHeaderName setGlobalProxyFromEnv WebSocket CloseEvent.

Evidence

Current checkout:

  • target/release/perry --version -> perry 0.5.1044
  • target/release/perry --print-api-manifest -> 95 modules
  • Manifest top-level http rows are currently Agent, ClientRequest, IncomingMessage, METHODS, STATUS_CODES, Server, ServerResponse, createServer, get, and request; the helper/export tail above is absent.

Node v25.9.0 export-shape probe:

import * as http from "node:http";

for (const name of [
  "globalAgent",
  "maxHeaderSize",
  "validateHeaderName",
  "validateHeaderValue",
  "setMaxIdleHTTPParsers",
  "setGlobalProxyFromEnv",
  "WebSocket",
  "CloseEvent",
  "MessageEvent",
  "OutgoingMessage",
  "_connectionListener",
]) {
  const value = (http as any)[name];
  console.log(name, typeof value, value && value.name ? value.name : "");
}

Output:

globalAgent object
maxHeaderSize number
validateHeaderName function validateHeaderName
validateHeaderValue function validateHeaderValue
setMaxIdleHTTPParsers function setMaxIdleHTTPParsers
setGlobalProxyFromEnv function setGlobalProxyFromEnv
WebSocket function WebSocket
CloseEvent function CloseEvent
MessageEvent function MessageEvent
OutgoingMessage function OutgoingMessage
_connectionListener function connectionListener

Local source/test context:

  • docs/runtime-parity-gaps.md lists http.validateHeaderName, http.validateHeaderValue, http.setMaxIdleHTTPParsers, http.setGlobalProxyFromEnv, http.globalAgent, and http.maxHeaderSize as gap rows.
  • test-files/test_parity_http.ts contains generated probes for several of these names, but the curated test-parity/node-suite/http directory has only 8 fixtures and does not cover this export tail end to end.
  • Source search did not find manifest entries for these top-level exports in crates/perry-api-manifest/src/entries.rs.

Suggested PR boundary

Make this a focused node:http module-helper/export cut:

  • Add module-level export shape for the deterministic helper functions and constants/objects: globalAgent, maxHeaderSize, validateHeaderName, validateHeaderValue, setMaxIdleHTTPParsers, and setGlobalProxyFromEnv.
  • Reconcile OutgoingMessage with the existing ServerResponse/write-head implementation so feature checks and direct construction match Node where feasible.
  • Decide whether WebSocket, CloseEvent, and MessageEvent should alias Perry's existing global/web implementations or be intentionally excluded from the Node compatibility manifest until supported.
  • Add focused node-suite fixtures for module export shape, header validation errors, maxHeaderSize, globalAgent fields, and no-op/return behavior for parser/proxy helpers.

Acceptance sketch

  • import { validateHeaderName, validateHeaderValue, globalAgent, maxHeaderSize } from "node:http" has Node-compatible module-instantiation behavior.
  • Valid/invalid header-name and header-value fixtures match Node error names/codes for covered cases.
  • http.globalAgent exposes Node-compatible Agent shape for basic field reads.
  • http.setMaxIdleHTTPParsers() and http.setGlobalProxyFromEnv() have Node-compatible return/error behavior for deterministic inputs.
  • http.WebSocket, http.CloseEvent, http.MessageEvent, and http.OutgoingMessage are either implemented/aliased with Node-compatible shape or explicitly excluded from the claimed Node manifest with tracking rationale.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions