@browsercore/testing 0.2.0 → 0.2.2

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.
Files changed (52) hide show
  1. package/README.md +1 -1
  2. package/bin/coverage-md.mjs +99 -0
  3. package/captures/test-malformed/http2/settings.bin +0 -0
  4. package/captures/test-malformed/http2/settings.meta.json +9 -0
  5. package/captures/test-no-extensions/tls/client_hello.bin +0 -0
  6. package/captures/test-no-extensions/tls/client_hello.meta.json +9 -0
  7. package/captures/test-wrong-type/http2/settings.bin +0 -0
  8. package/captures/test-wrong-type/http2/settings.meta.json +9 -0
  9. package/dist/bench/bench.d.ts +2 -0
  10. package/dist/bench/bench.d.ts.map +1 -1
  11. package/dist/bench/bench.js +12 -7
  12. package/dist/bench/bench.js.map +1 -1
  13. package/dist/captures/manifest.d.ts.map +1 -1
  14. package/dist/captures/manifest.js +6 -5
  15. package/dist/captures/manifest.js.map +1 -1
  16. package/dist/categories/compression.d.ts +6 -4
  17. package/dist/categories/compression.d.ts.map +1 -1
  18. package/dist/categories/compression.js +56 -6
  19. package/dist/categories/compression.js.map +1 -1
  20. package/dist/categories/cookies.js +0 -12
  21. package/dist/categories/cookies.js.map +1 -1
  22. package/dist/e2e/cert-gen.d.ts +1 -0
  23. package/dist/e2e/cert-gen.d.ts.map +1 -1
  24. package/dist/e2e/cert-gen.js +1 -1
  25. package/dist/e2e/cert-gen.js.map +1 -1
  26. package/dist/e2e/traffic-server.d.ts +48 -0
  27. package/dist/e2e/traffic-server.d.ts.map +1 -0
  28. package/dist/e2e/traffic-server.js +162 -0
  29. package/dist/e2e/traffic-server.js.map +1 -0
  30. package/dist/golden/golden.d.ts.map +1 -1
  31. package/dist/golden/golden.js +8 -7
  32. package/dist/golden/golden.js.map +1 -1
  33. package/dist/index.d.ts +4 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +10 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/node-provider.d.ts +42 -0
  38. package/dist/node-provider.d.ts.map +1 -0
  39. package/dist/node-provider.js +53 -0
  40. package/dist/node-provider.js.map +1 -0
  41. package/dist/provider.d.ts +52 -0
  42. package/dist/provider.d.ts.map +1 -0
  43. package/dist/provider.js +14 -0
  44. package/dist/provider.js.map +1 -0
  45. package/dist/reference/browser-provider.d.ts.map +1 -1
  46. package/dist/reference/browser-provider.js +4 -3
  47. package/dist/reference/browser-provider.js.map +1 -1
  48. package/dist/reference/node-crypto-provider.d.ts +31 -0
  49. package/dist/reference/node-crypto-provider.d.ts.map +1 -0
  50. package/dist/reference/node-crypto-provider.js +199 -0
  51. package/dist/reference/node-crypto-provider.js.map +1 -0
  52. package/package.json +17 -13
@@ -0,0 +1,162 @@
1
+ /**
2
+ * E2E traffic server for Bug 6 (AES-128-GCM record decryption) regression.
3
+ *
4
+ * Extends the sink-server pattern: performs a **real** TLS 1.3 handshake
5
+ * against the @browsercore/tls client stack, then serves an encrypted HTTP
6
+ * response. The client must decrypt the full server flight (handshake +
7
+ * application data) — if AEAD key derivation, nonce construction, or record
8
+ * parsing is wrong, decryption fails and the fetch throws.
9
+ *
10
+ * This is the deterministic, network-free reproduction for Bug 6: the same
11
+ * TLS code path that fails against example.com fails here, but without a
12
+ * network dependency.
13
+ */
14
+ import { createServer } from "node:net";
15
+ import { createSecureContext, TLSSocket } from "node:tls";
16
+ import { generateSelfSignedCert } from "./cert-gen.js";
17
+ /** HTTP response the server sends after a successful handshake. */
18
+ const HTTP_RESPONSE = [
19
+ "HTTP/1.1 200 OK",
20
+ "Content-Type: text/plain",
21
+ "X-Traffic-Gate: bug6",
22
+ "Content-Length: 19",
23
+ "",
24
+ "TRAFFIC_GATE_OK_BUG6",
25
+ ].join("\r\n");
26
+ /**
27
+ * Single-shot TLS 1.3 traffic server. Performs a real handshake, then sends
28
+ * an encrypted HTTP response the client must decrypt.
29
+ */
30
+ export class TrafficServer {
31
+ server;
32
+ ctx;
33
+ state = { state: "idle" };
34
+ waiters = [];
35
+ failers = [];
36
+ host;
37
+ port;
38
+ constructor(server, ctx, host, port) {
39
+ this.server = server;
40
+ this.ctx = ctx;
41
+ this.host = host;
42
+ this.port = port;
43
+ }
44
+ /** Start listening on an ephemeral port on 127.0.0.1. */
45
+ static start() {
46
+ const { certDer, keyPem } = generateSelfSignedCert(["localhost"], ["127.0.0.1"], 1);
47
+ const ctx = createSecureContext({
48
+ key: keyPem,
49
+ cert: derToPem(certDer, "CERTIFICATE"),
50
+ });
51
+ return new Promise((resolve, reject) => {
52
+ const server = createServer({ allowHalfOpen: false });
53
+ server.maxConnections = 1;
54
+ server.on("error", reject);
55
+ server.listen(0, "127.0.0.1", () => {
56
+ const addr = server.address();
57
+ if (addr === null || typeof addr === "string") {
58
+ reject(new Error("traffic server did not bind"));
59
+ return;
60
+ }
61
+ const traffic = new TrafficServer(server, ctx, addr.address, addr.port);
62
+ traffic.attach();
63
+ resolve(traffic);
64
+ });
65
+ });
66
+ }
67
+ attach() {
68
+ this.server.on("connection", (socket) => this.onConnection(socket));
69
+ }
70
+ onConnection(rawSocket) {
71
+ if (this.state.state !== "idle") {
72
+ rawSocket.destroy();
73
+ return;
74
+ }
75
+ const startedAt = Date.now();
76
+ this.state = { state: "handshaking", startedAt };
77
+ const tlsSocket = new TLSSocket(rawSocket, {
78
+ isServer: true,
79
+ secureContext: this.ctx,
80
+ requestCert: false,
81
+ ALPNProtocols: ["h2", "http/1.1"],
82
+ });
83
+ tlsSocket.on("secure", () => {
84
+ // Handshake completed. Now send the encrypted HTTP response.
85
+ // The client must decrypt this to read the body — this is what
86
+ // exercises the Bug 6 path.
87
+ tlsSocket.write(HTTP_RESPONSE, () => {
88
+ const result = {
89
+ protocolVersion: tlsSocket.getProtocol() ?? "unknown",
90
+ cipherSuite: tlsSocket.getCipher().name,
91
+ alpnProtocol: narrowServerName(tlsSocket.alpnProtocol),
92
+ handshakeDurationMs: Date.now() - startedAt,
93
+ };
94
+ this.done(result);
95
+ });
96
+ });
97
+ tlsSocket.on("error", (err) => {
98
+ this.fail(new Error(`TLS handshake failed: ${err.message}`, { cause: err }));
99
+ });
100
+ tlsSocket.on("close", () => {
101
+ if (this.state.state !== "done") {
102
+ this.fail(new Error("socket closed before handshake completed"));
103
+ }
104
+ });
105
+ }
106
+ done(result) {
107
+ if (this.state.state === "done")
108
+ return;
109
+ this.state = { state: "done", result };
110
+ const w = this.waiters;
111
+ this.waiters = [];
112
+ this.failers = [];
113
+ for (const resolve of w)
114
+ resolve(result);
115
+ }
116
+ fail(error) {
117
+ if (this.state.state === "done")
118
+ return;
119
+ this.state = { state: "failed", error };
120
+ const f = this.failers;
121
+ this.failers = [];
122
+ this.waiters = [];
123
+ for (const reject of f)
124
+ reject(error);
125
+ }
126
+ /** Resolve once handshake completes. */
127
+ waitForHandshake(timeoutMs = 5000) {
128
+ if (this.state.state === "done")
129
+ return Promise.resolve(this.state.result);
130
+ if (this.state.state === "failed")
131
+ return Promise.reject(this.state.error);
132
+ return new Promise((resolve, reject) => {
133
+ let timer;
134
+ this.waiters.push((r) => { if (timer)
135
+ clearTimeout(timer); resolve(r); });
136
+ this.failers.push((e) => { if (timer)
137
+ clearTimeout(timer); reject(e); });
138
+ timer = setTimeout(() => this.fail(new Error("waitForHandshake timed out")), timeoutMs);
139
+ });
140
+ }
141
+ stop() {
142
+ this.fail(new Error("traffic server stopped"));
143
+ return new Promise((resolve, reject) => {
144
+ this.server.close((err) => { if (err)
145
+ reject(err);
146
+ else
147
+ resolve(); });
148
+ });
149
+ }
150
+ }
151
+ function narrowServerName(value) {
152
+ return typeof value === "string" ? value : null;
153
+ }
154
+ function derToPem(der, label) {
155
+ const b64 = Buffer.from(der).toString("base64");
156
+ const lines = [`-----BEGIN ${label}-----`];
157
+ for (let i = 0; i < b64.length; i += 64)
158
+ lines.push(b64.slice(i, i + 64));
159
+ lines.push(`-----END ${label}-----`);
160
+ return lines.join("\n");
161
+ }
162
+ //# sourceMappingURL=traffic-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traffic-server.js","sourceRoot":"","sources":["../../src/e2e/traffic-server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"golden.d.ts","sourceRoot":"","sources":["../../src/golden/golden.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EACR,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,0BAA0B,EAC1B,aAAa,EACb,eAAe,EAClB,MAAM,aAAa,CAAC;AA8BrB;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CAgD7E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE,CA+BjG;AAYD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,aAAa,CA2B9D;AAoBD,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,WAAW,CAUjE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,gBAAgB,CAa/F;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC1C,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,SAAS,GACrB,0BAA0B,CAe5B"}
1
+ {"version":3,"file":"golden.d.ts","sourceRoot":"","sources":["../../src/golden/golden.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EACR,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,0BAA0B,EAC1B,aAAa,EACb,eAAe,EAClB,MAAM,aAAa,CAAC;AAkCrB;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,CAgD7E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE,CA+BjG;AAYD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,aAAa,CA2B9D;AAoBD,0DAA0D;AAC1D,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,WAAW,CAUjE;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,gBAAgB,CAa/F;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC1C,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,SAAS,GACrB,0BAA0B,CAe5B"}
@@ -11,13 +11,14 @@
11
11
  * (e.g. `chrome-140/tls/client_hello`) that maps directly onto the
12
12
  * `captures/<profile>/<protocol>/<record>.{bin,meta.json}` layout.
13
13
  */
14
- import { readFileSync } from "node:fs";
15
- import { join } from "node:path";
16
14
  import { compareBytes, compareBytesWithIgnore } from "../utils.js";
17
15
  import { GoldenMismatchError, TestingError } from "../errors.js";
16
+ import { createFileSystem, createPath } from "../node-provider.js";
17
+ const fileSystem = createFileSystem();
18
+ const path = createPath();
18
19
  const here = import.meta.dirname;
19
20
  // src/golden -> package root -> captures/
20
- const capturesDir = join(here, "..", "..", "captures");
21
+ const capturesDir = path.join(here, "..", "..", "captures");
21
22
  /** Parse a CaptureId of the form `${profile}/${protocol}/${record}`. */
22
23
  function parseCaptureId(captureId) {
23
24
  const EXPECTED_FORMAT = `\${profile}/\${protocol}/\${record}`;
@@ -109,7 +110,7 @@ export function parseRandomizedFields(raw, captureId) {
109
110
  /** Resolve a CaptureId to its on-disk `.bin` + `.meta.json` paths. */
110
111
  function resolveCapturePaths(captureId) {
111
112
  const { profile, protocol, record } = parseCaptureId(captureId);
112
- const base = join(capturesDir, profile, protocol, record);
113
+ const base = path.join(capturesDir, profile, protocol, record);
113
114
  return { binPath: `${base}.bin`, metaPath: `${base}.meta.json` };
114
115
  }
115
116
  /**
@@ -124,7 +125,7 @@ export function loadGolden(captureId) {
124
125
  const { binPath, metaPath } = resolveCapturePaths(captureId);
125
126
  let bytes;
126
127
  try {
127
- bytes = readFileSync(binPath);
128
+ bytes = fileSystem.readFileSync(binPath);
128
129
  }
129
130
  catch (e) {
130
131
  const cause = e instanceof Error ? e : new Error(String(e));
@@ -132,7 +133,7 @@ export function loadGolden(captureId) {
132
133
  }
133
134
  let meta;
134
135
  try {
135
- meta = JSON.parse(readFileSync(metaPath, "utf8"));
136
+ meta = JSON.parse(fileSystem.readFileText(metaPath));
136
137
  }
137
138
  catch (e) {
138
139
  const cause = e instanceof Error ? e : new Error(String(e));
@@ -169,7 +170,7 @@ export function loadCaptureMeta(captureId) {
169
170
  const { metaPath } = resolveCapturePaths(captureId);
170
171
  let raw;
171
172
  try {
172
- raw = JSON.parse(readFileSync(metaPath, "utf8"));
173
+ raw = JSON.parse(fileSystem.readFileText(metaPath));
173
174
  }
174
175
  catch (e) {
175
176
  const cause = e instanceof Error ? e : new Error(String(e));
@@ -1 +1 @@
1
- {"version":3,"file":"golden.js","sourceRoot":"","sources":["../../src/golden/golden.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjE,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC;AACjC,0CAA0C;AAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAEvD,wEAAwE;AACxE,SAAS,cAAc,CAAC,SAAoB;IAKxC,MAAM,eAAe,GAAG,qCAAqC,CAAC;IAC9D,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,YAAY,CAClB,wBAAwB,SAAS,gBAAgB,eAAe,EAAE,CACrE,CAAC;IACN,CAAC;IACD,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAC1C,IAAI,OAAO,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1E,MAAM,IAAI,YAAY,CAClB,wBAAwB,SAAS,gBAAgB,eAAe,EAAE,CACrE,CAAC;IACN,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACzC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY,EAAE,SAAiB;IAC5D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,IAAI,YAAY,CAAC,oBAAoB,SAAS,mBAAmB,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAE3C,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,IAAI,MAAM,KAAK,kBAAkB,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;QAC7D,MAAM,IAAI,YAAY,CAClB,oBAAoB,SAAS,wBAAwB,MAAM,CAAC,MAAM,CAAC,EAAE,CACxE,CAAC;IACN,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IACjC,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC3F,MAAM,IAAI,YAAY,CAClB,oBAAoB,SAAS,0BAA0B,MAAM,CAAC,QAAQ,CAAC,EAAE,CAC5E,CAAC;IACN,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,IACI,MAAM,KAAK,cAAc;QACzB,MAAM,KAAK,UAAU;QACrB,MAAM,KAAK,SAAS;QACpB,MAAM,KAAK,cAAc,EAC3B,CAAC;QACC,MAAM,IAAI,YAAY,CAClB,oBAAoB,SAAS,wBAAwB,MAAM,CAAC,MAAM,CAAC,EAAE,CACxE,CAAC;IACN,CAAC;IACD,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC;IACvC,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,IAAI,YAAY,CAAC,oBAAoB,SAAS,6BAA6B,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;IACnC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,YAAY,CAAC,oBAAoB,SAAS,2BAA2B,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,SAAS,CAAC,CAAC;IAEnF,OAAO;QACH,MAAM;QACN,OAAO,EAAE,GAAG,CAAC,SAAS,CAA2B;QACjD,QAAQ;QACR,MAAM;QACN,WAAW;QACX,gBAAgB;QAChB,SAAS;KACZ,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY,EAAE,SAAiB;IACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,YAAY,CAAC,oBAAoB,SAAS,iCAAiC,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QACvB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,IAAI,YAAY,CAClB,oBAAoB,SAAS,qBAAqB,CAAC,oBAAoB,CAC1E,CAAC;QACN,CAAC;QACD,MAAM,GAAG,GAAG,IAA+B,CAAC;QAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;QACrC,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,IAAI,YAAY,CAClB,oBAAoB,SAAS,qBAAqB,CAAC,sBAAsB,CAC5E,CAAC;QACN,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,YAAY,CAClB,oBAAoB,SAAS,qBAAqB,CAAC,kBAAkB,CACxE,CAAC;QACN,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,MAAM,KAAK,eAAe,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjG,MAAM,IAAI,YAAY,CAClB,oBAAoB,SAAS,qBAAqB,CAAC,qBAAqB,MAAM,CAAC,MAAM,CAAC,EAAE,CAC3F,CAAC;QACN,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;AACP,CAAC;AAED,sEAAsE;AACtE,SAAS,mBAAmB,CAAC,SAAoB;IAI7C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1D,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,YAAY,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,SAAoB;IAC3C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAE7D,IAAI,KAAiB,CAAC;IACtB,IAAI,CAAC;QACD,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,IAAI,YAAY,CAAC,mCAAmC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAY,CAAC;IACjE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,IAAI,YAAY,CAAC,wCAAwC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACjD,OAAO;QACH,EAAE,EAAE,SAAS;QACb,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,kBAAkB,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY;QACzF,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK;QACL,WAAW,EAAE,MAAM,CAAC,WAAW;KAClC,CAAC;AACN,CAAC;AAED,sEAAsE;AACtE,SAAS,WAAW,CAAC,OAA+B;IAChD,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,OAAO,aAAa,CAAC;IACzB,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC;IACvB,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC;IACtB,CAAC;IACD,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,eAAe,CAAC,SAAoB;IAChD,MAAM,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACpD,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAY,CAAC;IAChE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,IAAI,YAAY,CAAC,wCAAwC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAkB,EAAE,SAAoB;IACzE,IAAI,QAAoB,CAAC;IACzB,IAAI,CAAC;QACD,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,IAAI,YAAY,CAAC,yBAAyB,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,IAAI,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,8BAA8B,CAC1C,MAAkB,EAClB,SAAoB;IAEpB,IAAI,QAAoB,CAAC;IACzB,IAAI,IAAiB,CAAC;IACtB,IAAI,CAAC;QACD,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC;QACvC,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,IAAI,YAAY,CAAC,yBAAyB,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC/E,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,IAAI,mBAAmB,CAAC,SAAS,EAAE,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"golden.js","sourceRoot":"","sources":["../../src/golden/golden.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -36,6 +36,10 @@ export { TlsSinkServer } from "./e2e/sink-server.js";
36
36
  export type { ClientHelloCapture, HandshakeResult } from "./e2e/sink-server.js";
37
37
  export { generateSelfSignedCert } from "./e2e/cert-gen.js";
38
38
  export type { SelfSignedCert } from "./e2e/cert-gen.js";
39
+ export { TrafficServer } from "./e2e/traffic-server.js";
40
+ export type { TrafficResult } from "./e2e/traffic-server.js";
39
41
  export { parseClientHelloWire, peekRecordHeader, findExtension, parseSniHostname, parseAlpnProtocols, parseSupportedVersions, decodeSni, decodeAlpn, decodeSupportedVersions, isGrease, nonGreaseCipherSuites, nonGreaseExtensionTypes, EXT, GREASE_SENTINELS, ClientHelloParseError, } from "./e2e/parse-clienthello.js";
40
42
  export type { ParsedClientHello, ParsedExtension, ExtensionTypeValue, } from "./e2e/parse-clienthello.js";
43
+ export { createFileSystem, createPath, NodeFileSystemProvider, NodePathProvider } from "./node-provider.js";
44
+ export type { FileSystemProvider, PathProvider } from "./provider.js";
41
45
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhE,YAAY,EACR,UAAU,EACV,SAAS,EACT,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG7E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3F,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAGrE;AAGD,OAAO,EACH,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,GAC7B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACR,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,GACxB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACjG,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,OAAO,EACH,UAAU,EACV,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,mBAAmB,GACtB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAOnF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOxD,OAAO,EACH,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,SAAS,EACT,UAAU,EACV,uBAAuB,EACvB,QAAQ,EACR,qBAAqB,EACrB,uBAAuB,EACvB,GAAG,EACH,gBAAgB,EAChB,qBAAqB,GACxB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACR,iBAAiB,EACjB,eAAe,EACf,kBAAkB,GACrB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhE,YAAY,EACR,UAAU,EACV,SAAS,EACT,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG7E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AAGpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3F,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAGrE;AAGD,OAAO,EACH,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,GAC7B,MAAM,0BAA0B,CAAC;AAClC,YAAY,EACR,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,GACxB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACjG,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,OAAO,EACH,UAAU,EACV,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,mBAAmB,GACtB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAOnF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAO7D,OAAO,EACH,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,SAAS,EACT,UAAU,EACV,uBAAuB,EACvB,QAAQ,EACR,qBAAqB,EACrB,uBAAuB,EACvB,GAAG,EACH,gBAAgB,EAChB,qBAAqB,GACxB,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACR,iBAAiB,EACjB,eAAe,EACf,kBAAkB,GACrB,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC5G,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -41,10 +41,20 @@ export { nodeCrypto, nodeDns, nodeZlib, nodeHttp, toError, compareBytesOutcome,
41
41
  export { TlsSinkServer } from "./e2e/sink-server.js";
42
42
  // Self-signed ECDSA P-256 certificate generator (runtime, no openssl).
43
43
  export { generateSelfSignedCert } from "./e2e/cert-gen.js";
44
+ // E2E HTTPS traffic server — local TLS termination oracle for the traffic
45
+ // gate. Spins up a real HTTPS server with a throwaway self-signed cert and
46
+ // returns a known body + marker header so a client test can assert the full
47
+ // request path (TCP → TLS → HTTP) worked. Reusable by any package that wants
48
+ // to verify its HTTP stack against a real local server.
49
+ export { TrafficServer } from "./e2e/traffic-server.js";
44
50
  // Minimal ClientHello wire parser — structural assertions for the e2e matrix.
45
51
  // (Distinct from the JA3 `parseClientHello` re-exported from fingerprint.)
46
52
  // Note: `parseClientHello` is intentionally NOT re-exported here to avoid
47
53
  // colliding with the JA3 `parseClientHello` from ./fingerprint/index.js.
48
54
  // Consumers of the e2e parser import it directly from ./e2e/parse-clienthello.js.
49
55
  export { parseClientHelloWire, peekRecordHeader, findExtension, parseSniHostname, parseAlpnProtocols, parseSupportedVersions, decodeSni, decodeAlpn, decodeSupportedVersions, isGrease, nonGreaseCipherSuites, nonGreaseExtensionTypes, EXT, GREASE_SENTINELS, ClientHelloParseError, } from "./e2e/parse-clienthello.js";
56
+ // Provider interfaces + Node-backed factories (Rule 21 — runtime independence).
57
+ // Higher layers depend on the interfaces; the factories return the production
58
+ // defaults. Tests inject fakes through the interfaces.
59
+ export { createFileSystem, createPath, NodeFileSystemProvider, NodePathProvider } from "./node-provider.js";
50
60
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAchE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE7E,sEAAsE;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AAEpD,gEAAgE;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAIpD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAC9B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACxD,OAAO,QAAQ,CAAC,QAAQ,CAAC;AAC7B,CAAC;AAED,wCAAwC;AACxC,OAAO,EACH,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,GAC7B,MAAM,0BAA0B,CAAC;AASlC,iDAAiD;AACjD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAGjG,+EAA+E;AAC/E,gFAAgF;AAChF,OAAO,EACH,UAAU,EACV,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,mBAAmB,GACtB,MAAM,+BAA+B,CAAC;AAGvC,iEAAiE;AACjE,yEAAyE;AACzE,8EAA8E;AAC9E,yEAAyE;AACzE,uDAAuD;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,uEAAuE;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,8EAA8E;AAC9E,2EAA2E;AAC3E,0EAA0E;AAC1E,yEAAyE;AACzE,kFAAkF;AAClF,OAAO,EACH,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,SAAS,EACT,UAAU,EACV,uBAAuB,EACvB,QAAQ,EACR,qBAAqB,EACrB,uBAAuB,EACvB,GAAG,EACH,gBAAgB,EAChB,qBAAqB,GACxB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEhF,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAchE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE7E,sEAAsE;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AAEpD,gEAAgE;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAIpD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAC9B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACxD,OAAO,QAAQ,CAAC,QAAQ,CAAC;AAC7B,CAAC;AAED,wCAAwC;AACxC,OAAO,EACH,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,GAC7B,MAAM,0BAA0B,CAAC;AASlC,iDAAiD;AACjD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAGjG,+EAA+E;AAC/E,gFAAgF;AAChF,OAAO,EACH,UAAU,EACV,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,mBAAmB,GACtB,MAAM,+BAA+B,CAAC;AAGvC,iEAAiE;AACjE,yEAAyE;AACzE,8EAA8E;AAC9E,yEAAyE;AACzE,uDAAuD;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,uEAAuE;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,0EAA0E;AAC1E,2EAA2E;AAC3E,4EAA4E;AAC5E,6EAA6E;AAC7E,wDAAwD;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,8EAA8E;AAC9E,2EAA2E;AAC3E,0EAA0E;AAC1E,yEAAyE;AACzE,kFAAkF;AAClF,OAAO,EACH,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,SAAS,EACT,UAAU,EACV,uBAAuB,EACvB,QAAQ,EACR,qBAAqB,EACrB,uBAAuB,EACvB,GAAG,EACH,gBAAgB,EAChB,qBAAqB,GACxB,MAAM,4BAA4B,CAAC;AAOpC,gFAAgF;AAChF,8EAA8E;AAC9E,uDAAuD;AACvD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Node.js-backed implementations of the testing package's provider interfaces.
3
+ *
4
+ * This is the ONLY module in @browsercore/testing that may import `node:fs`
5
+ * and `node:path` directly — the provider boundary that isolates the runtime
6
+ * per Rule 21 (CODING_STANDARDS.md "Runtime independence & dependency
7
+ * injection"). Every other module depends on the
8
+ * {@link FileSystemProvider}/{@link PathProvider} interfaces and never touches
9
+ * the runtime built-ins.
10
+ *
11
+ * Higher layers call the provider methods here, never `node:fs`/`node:path`
12
+ * directly, so the backend stays replaceable. Factories return a fresh
13
+ * instance so consumers can call `createFileSystem().readFileSync(...)` without
14
+ * threading a provider through every constructor.
15
+ */
16
+ import type { FileSystemProvider, PathProvider } from "./provider.js";
17
+ /**
18
+ * `node:fs`-backed implementation of {@link FileSystemProvider}.
19
+ *
20
+ * Production code calls the factory (`createFileSystem()`) — it never
21
+ * constructs this class directly. Tests inject a fake provider through the
22
+ * `FileSystemProvider` interface.
23
+ */
24
+ export declare class NodeFileSystemProvider implements FileSystemProvider {
25
+ readFileSync(path: string): Uint8Array;
26
+ readFileText(path: string): string;
27
+ }
28
+ /**
29
+ * `node:path`-backed implementation of {@link PathProvider}.
30
+ *
31
+ * Production code calls the factory (`createPath()`) — it never constructs
32
+ * this class directly. Tests inject a fake provider through the
33
+ * `PathProvider` interface.
34
+ */
35
+ export declare class NodePathProvider implements PathProvider {
36
+ join(...parts: string[]): string;
37
+ }
38
+ /** Factory that returns the default {@link FileSystemProvider}. */
39
+ export declare function createFileSystem(): FileSystemProvider;
40
+ /** Factory that returns the default {@link PathProvider}. */
41
+ export declare function createPath(): PathProvider;
42
+ //# sourceMappingURL=node-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-provider.d.ts","sourceRoot":"","sources":["../src/node-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEtE;;;;;;GAMG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;IACtD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAE5C;IAEM,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExC;CACJ;AAED;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IAC1C,IAAI,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEtC;CACJ;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,IAAI,kBAAkB,CAErD;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,IAAI,YAAY,CAEzC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Node.js-backed implementations of the testing package's provider interfaces.
3
+ *
4
+ * This is the ONLY module in @browsercore/testing that may import `node:fs`
5
+ * and `node:path` directly — the provider boundary that isolates the runtime
6
+ * per Rule 21 (CODING_STANDARDS.md "Runtime independence & dependency
7
+ * injection"). Every other module depends on the
8
+ * {@link FileSystemProvider}/{@link PathProvider} interfaces and never touches
9
+ * the runtime built-ins.
10
+ *
11
+ * Higher layers call the provider methods here, never `node:fs`/`node:path`
12
+ * directly, so the backend stays replaceable. Factories return a fresh
13
+ * instance so consumers can call `createFileSystem().readFileSync(...)` without
14
+ * threading a provider through every constructor.
15
+ */
16
+ import { readFileSync } from "node:fs";
17
+ import { join } from "node:path";
18
+ /**
19
+ * `node:fs`-backed implementation of {@link FileSystemProvider}.
20
+ *
21
+ * Production code calls the factory (`createFileSystem()`) — it never
22
+ * constructs this class directly. Tests inject a fake provider through the
23
+ * `FileSystemProvider` interface.
24
+ */
25
+ export class NodeFileSystemProvider {
26
+ readFileSync(path) {
27
+ return readFileSync(path);
28
+ }
29
+ readFileText(path) {
30
+ return readFileSync(path, "utf8");
31
+ }
32
+ }
33
+ /**
34
+ * `node:path`-backed implementation of {@link PathProvider}.
35
+ *
36
+ * Production code calls the factory (`createPath()`) — it never constructs
37
+ * this class directly. Tests inject a fake provider through the
38
+ * `PathProvider` interface.
39
+ */
40
+ export class NodePathProvider {
41
+ join(...parts) {
42
+ return join(...parts);
43
+ }
44
+ }
45
+ /** Factory that returns the default {@link FileSystemProvider}. */
46
+ export function createFileSystem() {
47
+ return new NodeFileSystemProvider();
48
+ }
49
+ /** Factory that returns the default {@link PathProvider}. */
50
+ export function createPath() {
51
+ return new NodePathProvider();
52
+ }
53
+ //# sourceMappingURL=node-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-provider.js","sourceRoot":"","sources":["../src/node-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;;;GAMG;AACH,MAAM,OAAO,sBAAsB;IACxB,YAAY,CAAC,IAAY;QAC5B,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAEM,YAAY,CAAC,IAAY;QAC5B,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;CACJ;AAED;;;;;;GAMG;AACH,MAAM,OAAO,gBAAgB;IAClB,IAAI,CAAC,GAAG,KAAe;QAC1B,OAAO,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1B,CAAC;CACJ;AAED,mEAAmE;AACnE,MAAM,UAAU,gBAAgB;IAC5B,OAAO,IAAI,sBAAsB,EAAE,CAAC;AACxC,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,UAAU;IACtB,OAAO,IAAI,gBAAgB,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Provider interfaces for the @browsercore/testing package.
3
+ *
4
+ * Protocol/test infrastructure layers isolate runtime-specific dependencies
5
+ * (node:fs, node:path) behind these interfaces per Rule 21
6
+ * (CODING_STANDARDS.md "Runtime independence & dependency injection").
7
+ * Higher layers depend on the interfaces — never on a concrete provider — so
8
+ * the backend is replaceable (in-memory fake for tests, Deno/Bun, ...).
9
+ *
10
+ * @see {@link NodeFileSystemProvider} for the default `node:fs` backend.
11
+ * @see {@link NodePathProvider} for the default `node:path` backend.
12
+ */
13
+ /**
14
+ * File-system read operations.
15
+ *
16
+ * Higher layers depend on this interface, never on `node:fs` directly, so the
17
+ * backend is replaceable. All methods take and return `Uint8Array` or
18
+ * `string` — never Node `Buffer` — so the interface is portable across
19
+ * runtimes.
20
+ */
21
+ export interface FileSystemProvider {
22
+ /**
23
+ * Read a file's raw bytes.
24
+ *
25
+ * @param path Absolute or relative file path.
26
+ * @returns The file's contents as raw bytes.
27
+ */
28
+ readFileSync(path: string): Uint8Array;
29
+ /**
30
+ * Read a file's text content (utf8).
31
+ *
32
+ * @param path Absolute or relative file path.
33
+ * @returns The file's contents as a utf8 string.
34
+ */
35
+ readFileText(path: string): string;
36
+ }
37
+ /**
38
+ * Path manipulation operations.
39
+ *
40
+ * Higher layers depend on this interface, never on `node:path` directly, so
41
+ * path resolution is replaceable and testable against synthetic layouts.
42
+ */
43
+ export interface PathProvider {
44
+ /**
45
+ * Join path segments into a single path.
46
+ *
47
+ * @param parts Path segments to join.
48
+ * @returns The joined path.
49
+ */
50
+ join(...parts: string[]): string;
51
+ }
52
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IAC/B;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAEvC;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACtC;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IACzB;;;;;OAKG;IACH,IAAI,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;CACpC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Provider interfaces for the @browsercore/testing package.
3
+ *
4
+ * Protocol/test infrastructure layers isolate runtime-specific dependencies
5
+ * (node:fs, node:path) behind these interfaces per Rule 21
6
+ * (CODING_STANDARDS.md "Runtime independence & dependency injection").
7
+ * Higher layers depend on the interfaces — never on a concrete provider — so
8
+ * the backend is replaceable (in-memory fake for tests, Deno/Bun, ...).
9
+ *
10
+ * @see {@link NodeFileSystemProvider} for the default `node:fs` backend.
11
+ * @see {@link NodePathProvider} for the default `node:path` backend.
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -1 +1 @@
1
- {"version":3,"file":"browser-provider.d.ts","sourceRoot":"","sources":["../../src/reference/browser-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAIlG,oEAAoE;AACpE,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;;;GAMG;AACH,qBAAa,0BAA2B,YAAW,iBAAiB;IAChE,SAAgB,IAAI,EAAE,qBAAqB,CAAqC;IAChF,SAAgB,WAAW,EAAE,MAAM,CAAC;IAEpC,YAAY,OAAO,CAAC,EAAE,kBAAkB,EAEvC;IAED,iBAAiB,IAAI,SAAS,EAAE,CAM/B;IAEK,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAgBtE;IAEK,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAQ1D;CACJ"}
1
+ {"version":3,"file":"browser-provider.d.ts","sourceRoot":"","sources":["../../src/reference/browser-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAOlG,oEAAoE;AACpE,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;;;GAMG;AACH,qBAAa,0BAA2B,YAAW,iBAAiB;IAChE,SAAgB,IAAI,EAAE,qBAAqB,CAAqC;IAChF,SAAgB,WAAW,EAAE,MAAM,CAAC;IAEpC,YAAY,OAAO,CAAC,EAAE,kBAAkB,EAEvC;IAED,iBAAiB,IAAI,SAAS,EAAE,CAM/B;IAEK,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAgBtE;IAEK,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAQ1D;CACJ"}
@@ -8,6 +8,8 @@
8
8
  */
9
9
  import { ReferenceError } from "./reference-errors.js";
10
10
  import { fingerprintFromTlsCapture, profileToSource } from "./dump.js";
11
+ import { createPath } from "../node-provider.js";
12
+ const path = createPath();
11
13
  /**
12
14
  * SECONDARY provider — loads pre-recorded captures from the `captures/` dir.
13
15
  *
@@ -53,8 +55,7 @@ export class RealBrowserCaptureProvider {
53
55
  }
54
56
  // Default captures dir resolved from this module's location. Computed at module
55
57
  // load (not per-instance) since import.meta.dirname is static.
56
- import { join } from "node:path";
57
58
  const here = import.meta.dirname;
58
- const packageRoot = join(here, "..", "..");
59
- const defaultCapturesDir = join(packageRoot, "captures");
59
+ const packageRoot = path.join(here, "..", "..");
60
+ const defaultCapturesDir = path.join(packageRoot, "captures");
60
61
  //# sourceMappingURL=browser-provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-provider.js","sourceRoot":"","sources":["../../src/reference/browser-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AASvE;;;;;;GAMG;AACH,MAAM,OAAO,0BAA0B;IACnB,IAAI,GAA0B,EAAE,IAAI,EAAE,cAAc,EAAW,CAAC;IAChE,WAAW,CAAS;IAEpC,YAAY,OAA4B;QACpC,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,kBAAkB,CAAC;IAClE,CAAC;IAED,iBAAiB;QACb,uEAAuE;QACvE,OAAO;YACH,YAAyB;YACzB,aAA0B;SAC7B,CAAC;IACN,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAkB,EAAE,IAAY;QAC1C,KAAK,IAAI,CAAC;QACV,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QACxE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,cAAc,CACpB,uCAAuC,MAAM,CAAC,OAAO,CAAC,EAAE,CAC3D,CAAC;QACN,CAAC;QACD,OAAO;YACH,EAAE,EAAE,GAAG,OAAO,mBAA0C;YACxD,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC;YAChC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;YAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW;SACtC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAkB;QAChC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACnE,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC7B,MAAM,IAAI,cAAc,CACpB,iDAAiD,OAAO,CAAC,QAAQ,EAAE,CACtE,CAAC;QACN,CAAC;QACD,OAAO,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;CACJ;AAED,gFAAgF;AAChF,+DAA+D;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC;AACjC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"browser-provider.js","sourceRoot":"","sources":["../../src/reference/browser-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;AAS1B;;;;;;GAMG;AACH,MAAM,OAAO,0BAA0B;IACnB,IAAI,GAA0B,EAAE,IAAI,EAAE,cAAc,EAAW,CAAC;IAChE,WAAW,CAAS;IAEpC,YAAY,OAA4B;QACpC,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,kBAAkB,CAAC;IAClE,CAAC;IAED,iBAAiB;QACb,uEAAuE;QACvE,OAAO;YACH,YAAyB;YACzB,aAA0B;SAC7B,CAAC;IACN,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAkB,EAAE,IAAY;QAC1C,KAAK,IAAI,CAAC;QACV,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QACxE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,cAAc,CACpB,uCAAuC,MAAM,CAAC,OAAO,CAAC,EAAE,CAC3D,CAAC;QACN,CAAC;QACD,OAAO;YACH,EAAE,EAAE,GAAG,OAAO,mBAA0C;YACxD,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC;YAChC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;YAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW;SACtC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAkB;QAChC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACnE,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC7B,MAAM,IAAI,cAAc,CACpB,iDAAiD,OAAO,CAAC,QAAQ,EAAE,CACtE,CAAC;QACN,CAAC;QACD,OAAO,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;CACJ;AAED,gFAAgF;AAChF,+DAA+D;AAC/D,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC;AACjC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAChD,MAAM,kBAAkB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Local Node-backed CryptoProvider double.
3
+ *
4
+ * @browsercore/crypto 0.2.2 exports only types, errors, and utilities — the
5
+ * runtime NodeCryptoProvider implementation lives in
6
+ * `browsersmith/src/platform/crypto/node/`. This repo (Layer 4) cannot depend
7
+ * on browsersmith (Layer 5), so we provide a local Node-backed implementation
8
+ * of the `CryptoProvider` contract for tests and e2e harnesses.
9
+ *
10
+ * This double mirrors the production NodeCryptoProvider behavior:
11
+ * - Hashing via node:crypto (sha256, sha384)
12
+ * - HKDF via node:crypto.hkdfSync
13
+ * - HMAC via node:crypto.createHmac
14
+ * - AEAD via node:crypto.createCipheriv/createDecipheriv (GCM, CCM, ChaCha20)
15
+ * - X25519 via NobleX25519Backend (pure JS, no native binding)
16
+ * - ECDH via node:crypto.ECDH
17
+ * - Signatures via node:crypto.createVerify
18
+ * - Random bytes via node:crypto.randomBytes
19
+ *
20
+ * The production provider uses the same primitives — this double exists only
21
+ * because the package boundary moved the implementation to a higher layer.
22
+ */
23
+ import type { CryptoProvider } from "@browsercore/crypto";
24
+ /**
25
+ * Node-backed CryptoProvider implementation.
26
+ *
27
+ * Satisfies the full `CryptoProvider` contract using node:crypto + noble-curves.
28
+ * Safe for tests and e2e harnesses — never imported by production protocol code.
29
+ */
30
+ export declare const nodeCryptoProvider: CryptoProvider;
31
+ //# sourceMappingURL=node-crypto-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-crypto-provider.d.ts","sourceRoot":"","sources":["../../src/reference/node-crypto-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAYH,OAAO,KAAK,EACR,cAAc,EAKjB,MAAM,qBAAqB,CAAC;AAgC7B;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,cAsJhC,CAAC"}