@harperfast/integration-testing 0.4.0 → 0.5.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.
Files changed (62) hide show
  1. package/README.md +20 -5
  2. package/package.json +4 -3
  3. package/dist/harperLifecycle.d.ts +0 -182
  4. package/dist/harperLifecycle.js +0 -374
  5. package/dist/harperLifecycle.js.map +0 -1
  6. package/dist/index.d.ts +0 -3
  7. package/dist/index.js +0 -4
  8. package/dist/index.js.map +0 -1
  9. package/dist/loopbackAddressPool.d.ts +0 -50
  10. package/dist/loopbackAddressPool.js +0 -337
  11. package/dist/loopbackAddressPool.js.map +0 -1
  12. package/dist/run.d.ts +0 -2
  13. package/dist/run.js +0 -178
  14. package/dist/run.js.map +0 -1
  15. package/dist/security/certGenUtils.d.ts +0 -52
  16. package/dist/security/certGenUtils.js +0 -170
  17. package/dist/security/certGenUtils.js.map +0 -1
  18. package/dist/security/crl/generate-test-certs.d.ts +0 -34
  19. package/dist/security/crl/generate-test-certs.js +0 -81
  20. package/dist/security/crl/generate-test-certs.js.map +0 -1
  21. package/dist/security/ocsp/generate-test-certs.d.ts +0 -55
  22. package/dist/security/ocsp/generate-test-certs.js +0 -106
  23. package/dist/security/ocsp/generate-test-certs.js.map +0 -1
  24. package/dist/security/ocspServer.d.ts +0 -18
  25. package/dist/security/ocspServer.js +0 -132
  26. package/dist/security/ocspServer.js.map +0 -1
  27. package/dist/securityServices.d.ts +0 -49
  28. package/dist/securityServices.js +0 -120
  29. package/dist/securityServices.js.map +0 -1
  30. package/dist/src/harperLifecycle.d.ts +0 -156
  31. package/dist/src/harperLifecycle.js +0 -315
  32. package/dist/src/harperLifecycle.js.map +0 -1
  33. package/dist/src/index.d.ts +0 -3
  34. package/dist/src/index.js +0 -4
  35. package/dist/src/index.js.map +0 -1
  36. package/dist/src/loopbackAddressPool.d.ts +0 -50
  37. package/dist/src/loopbackAddressPool.js +0 -337
  38. package/dist/src/loopbackAddressPool.js.map +0 -1
  39. package/dist/src/run.d.ts +0 -2
  40. package/dist/src/run.js +0 -94
  41. package/dist/src/run.js.map +0 -1
  42. package/dist/src/security/certGenUtils.d.ts +0 -52
  43. package/dist/src/security/certGenUtils.js +0 -170
  44. package/dist/src/security/certGenUtils.js.map +0 -1
  45. package/dist/src/security/crl/generate-test-certs.d.ts +0 -34
  46. package/dist/src/security/crl/generate-test-certs.js +0 -81
  47. package/dist/src/security/crl/generate-test-certs.js.map +0 -1
  48. package/dist/src/security/ocsp/generate-test-certs.d.ts +0 -55
  49. package/dist/src/security/ocsp/generate-test-certs.js +0 -106
  50. package/dist/src/security/ocsp/generate-test-certs.js.map +0 -1
  51. package/dist/src/security/ocspServer.d.ts +0 -18
  52. package/dist/src/security/ocspServer.js +0 -132
  53. package/dist/src/security/ocspServer.js.map +0 -1
  54. package/dist/src/securityServices.d.ts +0 -49
  55. package/dist/src/securityServices.js +0 -120
  56. package/dist/src/securityServices.js.map +0 -1
  57. package/dist/src/targz.d.ts +0 -6
  58. package/dist/src/targz.js +0 -20
  59. package/dist/src/targz.js.map +0 -1
  60. package/dist/targz.d.ts +0 -6
  61. package/dist/targz.js +0 -20
  62. package/dist/targz.js.map +0 -1
@@ -1,49 +0,0 @@
1
- /**
2
- * Security Services Utilities for Integration Tests
3
- *
4
- * This module provides utilities for managing OCSP responders, CRL servers,
5
- * and certificate generation for security-related integration tests.
6
- *
7
- * All certificate generation and OCSP responding is done in pure Node.js
8
- * using webcrypto + pkijs — no openssl CLI dependency.
9
- */
10
- import { type Server } from 'node:http';
11
- import type { OcspCertificates } from './security/ocsp/generate-test-certs.ts';
12
- import type { CrlCertificates } from './security/crl/generate-test-certs.ts';
13
- export interface OcspResponderContext {
14
- server: Server;
15
- port: number;
16
- certsPath: string;
17
- certs: OcspCertificates;
18
- }
19
- export interface CrlServerContext {
20
- server: Server;
21
- port: number;
22
- certsPath: string;
23
- certs: CrlCertificates;
24
- }
25
- /**
26
- * Stop an OCSP responder server
27
- */
28
- export declare function stopOcspResponder(ctx: OcspResponderContext): Promise<void>;
29
- /**
30
- * Start a Node.js HTTP server to serve CRL files
31
- */
32
- export declare function startCrlServer(certsPath: string, port: number, certs: CrlCertificates): Promise<CrlServerContext>;
33
- /**
34
- * Stop a CRL server
35
- */
36
- export declare function stopCrlServer(ctx: CrlServerContext): Promise<void>;
37
- export { generateOcspCertificates, type OcspCertificates } from './security/ocsp/generate-test-certs.ts';
38
- export { generateCrlCertificates, type CrlCertificates } from './security/crl/generate-test-certs.ts';
39
- /**
40
- * Setup CRL server with automatic port allocation and retry on conflict
41
- */
42
- export declare function setupCrlServerWithCerts(certsPath: string, hostname?: string, maxRetries?: number): Promise<CrlServerContext>;
43
- /**
44
- * Setup OCSP responder with automatic port allocation and retry on conflict
45
- *
46
- * Generates certificates with OCSP URL embedded, then starts the Node.js
47
- * OCSP responder on the same port.
48
- */
49
- export declare function setupOcspResponderWithCerts(certsPath: string, hostname?: string, maxRetries?: number): Promise<OcspResponderContext>;
@@ -1,120 +0,0 @@
1
- /**
2
- * Security Services Utilities for Integration Tests
3
- *
4
- * This module provides utilities for managing OCSP responders, CRL servers,
5
- * and certificate generation for security-related integration tests.
6
- *
7
- * All certificate generation and OCSP responding is done in pure Node.js
8
- * using webcrypto + pkijs — no openssl CLI dependency.
9
- */
10
- import { createServer } from 'node:http';
11
- import { join } from 'node:path';
12
- import { readFileSync } from 'node:fs';
13
- import { startOcspServer, stopOcspServer } from "./security/ocspServer.js";
14
- /**
15
- * Stop an OCSP responder server
16
- */
17
- export async function stopOcspResponder(ctx) {
18
- return stopOcspServer(ctx.server);
19
- }
20
- /**
21
- * Start a Node.js HTTP server to serve CRL files
22
- */
23
- export async function startCrlServer(certsPath, port, certs) {
24
- return new Promise((resolve, reject) => {
25
- const server = createServer((req, res) => {
26
- if (req.url === '/test.crl') {
27
- try {
28
- const crl = readFileSync(join(certsPath, 'test.crl'));
29
- res.writeHead(200, {
30
- 'Content-Type': 'application/pkix-crl',
31
- 'Cache-Control': 'no-cache',
32
- });
33
- res.end(crl);
34
- }
35
- catch {
36
- res.writeHead(500);
37
- res.end('Internal Server Error');
38
- }
39
- }
40
- else if (req.url === '/health') {
41
- res.writeHead(200, { 'Content-Type': 'text/plain' });
42
- res.end('OK');
43
- }
44
- else {
45
- res.writeHead(404);
46
- res.end('Not Found');
47
- }
48
- });
49
- server.on('error', reject);
50
- server.listen(port, () => {
51
- const address = server.address();
52
- if (!address || typeof address === 'string') {
53
- reject(new Error('Server did not bind to a network port'));
54
- return;
55
- }
56
- resolve({
57
- server,
58
- port: address.port,
59
- certsPath,
60
- certs,
61
- });
62
- });
63
- });
64
- }
65
- /**
66
- * Stop a CRL server
67
- */
68
- export async function stopCrlServer(ctx) {
69
- return new Promise((resolve) => {
70
- ctx.server.close(() => resolve());
71
- });
72
- }
73
- // Re-export certificate generation functions and types
74
- export { generateOcspCertificates } from "./security/ocsp/generate-test-certs.js";
75
- export { generateCrlCertificates } from "./security/crl/generate-test-certs.js";
76
- /**
77
- * Setup CRL server with automatic port allocation and retry on conflict
78
- */
79
- export async function setupCrlServerWithCerts(certsPath, hostname = '127.0.0.1', maxRetries = 5) {
80
- for (let attempt = 0; attempt < maxRetries; attempt++) {
81
- const port = 50000 + Math.floor(Math.random() * 10000);
82
- try {
83
- const { generateCrlCertificates } = await import("./security/crl/generate-test-certs.js");
84
- const certs = await generateCrlCertificates(certsPath, hostname, port);
85
- return startCrlServer(certsPath, port, certs);
86
- }
87
- catch (error) {
88
- if (error.code === 'EADDRINUSE' && attempt < maxRetries - 1) {
89
- continue;
90
- }
91
- throw new Error(`Failed to setup CRL server after ${attempt + 1} attempts: ${error.message}`);
92
- }
93
- }
94
- throw new Error(`Failed to setup CRL server after ${maxRetries} attempts`);
95
- }
96
- /**
97
- * Setup OCSP responder with automatic port allocation and retry on conflict
98
- *
99
- * Generates certificates with OCSP URL embedded, then starts the Node.js
100
- * OCSP responder on the same port.
101
- */
102
- export async function setupOcspResponderWithCerts(certsPath, hostname = '127.0.0.1', maxRetries = 5) {
103
- for (let attempt = 0; attempt < maxRetries; attempt++) {
104
- const port = 50000 + Math.floor(Math.random() * 10000);
105
- try {
106
- const { generateOcspCertificates } = await import("./security/ocsp/generate-test-certs.js");
107
- const { files, serverCerts } = await generateOcspCertificates(certsPath, hostname, port);
108
- const server = await startOcspServer(port, serverCerts);
109
- return { server, port, certsPath, certs: files };
110
- }
111
- catch (error) {
112
- if (error.code === 'EADDRINUSE' && attempt < maxRetries - 1) {
113
- continue;
114
- }
115
- throw new Error(`Failed to setup OCSP responder after ${attempt + 1} attempts: ${error.message}`);
116
- }
117
- }
118
- throw new Error(`Failed to setup OCSP responder after ${maxRetries} attempts`);
119
- }
120
- //# sourceMappingURL=securityServices.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"securityServices.js","sourceRoot":"","sources":["../../src/securityServices.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Packs and compresses a directory into a base64-encoded tar.gz string.
3
- *
4
- * @param dirPath path to directory to pack and compress
5
- */
6
- export declare function targz(dirPath: string): Promise<string>;
package/dist/src/targz.js DELETED
@@ -1,20 +0,0 @@
1
- import { pack } from 'tar-fs';
2
- import { createGzip } from 'node:zlib';
3
- /**
4
- * Packs and compresses a directory into a base64-encoded tar.gz string.
5
- *
6
- * @param dirPath path to directory to pack and compress
7
- */
8
- export async function targz(dirPath) {
9
- const chunks = [];
10
- return new Promise((resolve, reject) => {
11
- pack(dirPath)
12
- .pipe(createGzip())
13
- .on('data', (chunk) => chunks.push(chunk))
14
- .on('end', () => {
15
- resolve(Buffer.concat(chunks).toString('base64'));
16
- })
17
- .on('error', reject);
18
- });
19
- }
20
- //# sourceMappingURL=targz.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"targz.js","sourceRoot":"","sources":["../../src/targz.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAe;IAC1C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,CAAC,OAAO,CAAC;aACX,IAAI,CAAC,UAAU,EAAE,CAAC;aAClB,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACjD,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACf,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACJ,CAAC"}
package/dist/targz.d.ts DELETED
@@ -1,6 +0,0 @@
1
- /**
2
- * Packs and compresses a directory into a base64-encoded tar.gz string.
3
- *
4
- * @param dirPath path to directory to pack and compress
5
- */
6
- export declare function targz(dirPath: string): Promise<string>;
package/dist/targz.js DELETED
@@ -1,20 +0,0 @@
1
- import { pack } from 'tar-fs';
2
- import { createGzip } from 'node:zlib';
3
- /**
4
- * Packs and compresses a directory into a base64-encoded tar.gz string.
5
- *
6
- * @param dirPath path to directory to pack and compress
7
- */
8
- export async function targz(dirPath) {
9
- const chunks = [];
10
- return new Promise((resolve, reject) => {
11
- pack(dirPath)
12
- .pipe(createGzip())
13
- .on('data', (chunk) => chunks.push(chunk))
14
- .on('end', () => {
15
- resolve(Buffer.concat(chunks).toString('base64'));
16
- })
17
- .on('error', reject);
18
- });
19
- }
20
- //# sourceMappingURL=targz.js.map
package/dist/targz.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"targz.js","sourceRoot":"","sources":["../src/targz.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAe;IAC1C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,CAAC,OAAO,CAAC;aACX,IAAI,CAAC,UAAU,EAAE,CAAC;aAClB,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACjD,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACf,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACJ,CAAC"}