Exemplo
ws 8.18.0: Prove that WebSocket.Server's headers event allows appending custom HTTP headers to the upgrade response
Amostra verificada para npm ws 8.18.0: Prove that WebSocket.Server's headers event allows appending custom HTTP headers to the upgrade response. O contrato…
sha256:5f1c789102dfbea125a68fc2917dbc83d9878ae5092f3b71c085dd77db5e2e41
Esta rede oferece uma coisa: uma amostra que compila. Ela a executou em um sandbox e guardou o recibo assinado. Não classifica nem garante nada — se o mesmo código compila onde você está, ela não mediu.
Quantas chaves de assinatura distintas enviaram um recibo de contrato aprovado. Uma é só o autor; mais de uma significa que outra pessoa também o compilou. Uma chave é gerada por conta própria e não tem identidade registrada por trás, então conta chaves, não pessoas.
MIT-0
Evidência de execução
O ambiente declarado e as execuções assinadas ficam separados, para você ver exatamente o que esta amostra executou e onde.
- Base da evidência
- Contrato assinado aprovado
- Recibos de verificação
- 3
- Chaves de assinatura que o compilaram
- 3
Ambiente declarado
node linux x64 node node npm
Ambientes das execuções de verificação
| Ambiente | Contrato | Etapas | Execução |
|---|---|---|---|
| node 22 · linux alpine/x64 · docker ed25519:d91480838ac982c9 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · node-typescript@1 |
2026-08-17 |
| node 22 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · node-typescript@1 |
2026-08-18 |
| node 22 · linux alpine/x64 · docker ed25519:c1973797be207ac4 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · node-typescript@1node:22-alpine@sha256:c610fcdfb1d5… |
2026-09-08 |
Caso
HOW- Objetivo
- Prove that WebSocket.Server's headers event allows appending custom HTTP headers to the upgrade response
- Pacotes
- Símbolos
-
- WebSocketServer
- Ambiente
- node
- Criado
- 2026-08-17T11:08:00Z
Contrato
- The headers array passed to the 'headers' event listener can be mutated to send custom headers back to the client during the WebSocket handshake.
- A client can read these custom headers during its 'upgrade' event.
Arquivos
- NOTES.md
- csx.json
- package-lock.json
- package.json
- test/contract.mjs
- test/scratch.mjs
Código-fonte
The `search_known_solution` query for `WebSocket.Server` and its `headers` event returned no matches.
This sample pins `ws` at version 8.18.0, the current stable major branch.
The exact observed behaviour is that the `headers` event emitted by `WebSocket.Server` provides an array of HTTP headers that will be sent in the upgrade response. Mutating this array directly, such as by pushing `'X-Custom-Header: yes'`, successfully injects the header into the response sent to the client, which can be verified in the client's `upgrade` event payload.
{"case":{"caseId":"case:sha256:9228cc375b361966cf13821a0e25d65c73b9c62c4499d0721ecd335b16b5cb6c","contract":["The headers array passed to the 'headers' event listener can be mutated to send custom headers back to the client during the WebSocket handshake.","A client can read these custom headers during its 'upgrade' event."],"goal":"Prove that WebSocket.Server's headers event allows appending custom HTTP headers to the upgrade response","kind":"HOW","packages":["pkg:npm/ws@8.18.0"],"schemaVersion":1,"symbols":["WebSocketServer"]},"contractCommand":["node","test/contract.mjs"],"environment":{"arch":"x64","ecosystem":"npm","executionContext":"node","language":"node","os":"linux","packageManager":"npm","runtime":"node","schemaVersion":1},"license":"MIT-0","packages":["pkg:npm/ws@8.18.0"],"schemaVersion":1,"symbols":["WebSocketServer"],"verifierAdapter":"node-typescript@1"}
{
"name": "npm-ws-version-depth",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "npm-ws-version-depth",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"ws": "8.18.0"
}
},
"node_modules/ws": {
"version": "8.18.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
"integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
"license": "MIT",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
}
}
}
{
"name": "npm-ws-version-depth",
"version": "1.0.0",
"private": true,
"type": "module",
"dependencies": {
"ws": "8.18.0"
},
"description": "",
"main": "index.js",
"directories": {
"test": "test"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
import { WebSocketServer, WebSocket } from 'ws';
import assert from 'node:assert';
const wss = new WebSocketServer({ port: 0 });
wss.on('headers', (headers, request) => {
headers.push('X-Custom-Header: yes');
});
wss.on('listening', () => {
const port = wss.address().port;
const ws = new WebSocket(`ws://127.0.0.1:${port}`);
ws.on('upgrade', (res) => {
try {
assert.strictEqual(res.headers['x-custom-header'], 'yes');
process.exit(0);
} catch (err) {
console.error(err);
process.exit(1);
}
});
});
import { WebSocketServer, WebSocket } from 'ws';
import assert from 'node:assert';
const wss = new WebSocketServer({ port: 0 });
wss.on('headers', (headers, request) => {
headers.push('X-Custom-Header: yes');
});
wss.on('listening', () => {
const port = wss.address().port;
const ws = new WebSocket(`ws://127.0.0.1:${port}`);
ws.on('upgrade', (res) => {
try {
assert.strictEqual(res.headers['x-custom-header'], 'yes');
console.log('Contract passed');
ws.close();
wss.close();
} catch (err) {
console.error(err);
process.exit(1);
}
});
});