@blokjs/runner 0.6.21 → 0.7.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 (167) hide show
  1. package/dist/Blok.d.ts +2 -0
  2. package/dist/Blok.js +42 -110
  3. package/dist/Blok.js.map +1 -1
  4. package/dist/DefaultLogger.d.ts +13 -0
  5. package/dist/DefaultLogger.js +25 -0
  6. package/dist/DefaultLogger.js.map +1 -1
  7. package/dist/RunnerSteps.d.ts +23 -0
  8. package/dist/RunnerSteps.js +128 -87
  9. package/dist/RunnerSteps.js.map +1 -1
  10. package/dist/SubworkflowNode.js +19 -0
  11. package/dist/SubworkflowNode.js.map +1 -1
  12. package/dist/TriggerBase.d.ts +12 -0
  13. package/dist/TriggerBase.js +216 -181
  14. package/dist/TriggerBase.js.map +1 -1
  15. package/dist/adapters/grpc/GrpcRuntimeAdapter.d.ts +9 -0
  16. package/dist/adapters/grpc/GrpcRuntimeAdapter.js +76 -6
  17. package/dist/adapters/grpc/GrpcRuntimeAdapter.js.map +1 -1
  18. package/dist/index.d.ts +4 -39
  19. package/dist/index.js +7 -32
  20. package/dist/index.js.map +1 -1
  21. package/dist/monitoring/JanitorMetrics.d.ts +3 -0
  22. package/dist/monitoring/JanitorMetrics.js +11 -0
  23. package/dist/monitoring/JanitorMetrics.js.map +1 -1
  24. package/dist/monitoring/ProcessErrorMetrics.d.ts +32 -0
  25. package/dist/monitoring/ProcessErrorMetrics.js +43 -0
  26. package/dist/monitoring/ProcessErrorMetrics.js.map +1 -0
  27. package/dist/monitoring/PrometheusMetricsBridge.d.ts +7 -0
  28. package/dist/monitoring/PrometheusMetricsBridge.js +8 -2
  29. package/dist/monitoring/PrometheusMetricsBridge.js.map +1 -1
  30. package/dist/monitoring/SubworkflowMetrics.d.ts +25 -0
  31. package/dist/monitoring/SubworkflowMetrics.js +38 -0
  32. package/dist/monitoring/SubworkflowMetrics.js.map +1 -0
  33. package/dist/observability/ErrorSink.d.ts +23 -0
  34. package/dist/observability/ErrorSink.js +32 -0
  35. package/dist/observability/ErrorSink.js.map +1 -0
  36. package/dist/observability/SentryIntegration.d.ts +9 -0
  37. package/dist/observability/SentryIntegration.js +31 -0
  38. package/dist/observability/SentryIntegration.js.map +1 -0
  39. package/dist/scheduling/DebounceCoordinator.d.ts +7 -53
  40. package/dist/scheduling/DebounceCoordinator.js +8 -207
  41. package/dist/scheduling/DebounceCoordinator.js.map +1 -1
  42. package/dist/tracing/InMemoryRunStore.d.ts +5 -1
  43. package/dist/tracing/InMemoryRunStore.js +14 -0
  44. package/dist/tracing/InMemoryRunStore.js.map +1 -1
  45. package/dist/tracing/Janitor.js +3 -0
  46. package/dist/tracing/Janitor.js.map +1 -1
  47. package/dist/tracing/PostgresRunStore.d.ts +4 -1
  48. package/dist/tracing/PostgresRunStore.js +73 -3
  49. package/dist/tracing/PostgresRunStore.js.map +1 -1
  50. package/dist/tracing/RunStore.d.ts +17 -1
  51. package/dist/tracing/RunTracker.d.ts +13 -34
  52. package/dist/tracing/RunTracker.js +62 -32
  53. package/dist/tracing/RunTracker.js.map +1 -1
  54. package/dist/tracing/SqliteRunStore.d.ts +4 -1
  55. package/dist/tracing/SqliteRunStore.js +60 -0
  56. package/dist/tracing/SqliteRunStore.js.map +1 -1
  57. package/dist/tracing/TraceRouter.d.ts +13 -0
  58. package/dist/tracing/TraceRouter.js +43 -11
  59. package/dist/tracing/TraceRouter.js.map +1 -1
  60. package/dist/tracing/TracingLogger.js +22 -0
  61. package/dist/tracing/TracingLogger.js.map +1 -1
  62. package/dist/tracing/createStore.js +51 -22
  63. package/dist/tracing/createStore.js.map +1 -1
  64. package/dist/tracing/types.d.ts +22 -0
  65. package/dist/types/GlobalOptions.d.ts +5 -7
  66. package/dist/workflow/WorkflowNormalizer.js +63 -0
  67. package/dist/workflow/WorkflowNormalizer.js.map +1 -1
  68. package/package.json +7 -4
  69. package/dist/cache/NodeResultCache.d.ts +0 -286
  70. package/dist/cache/NodeResultCache.js +0 -506
  71. package/dist/cache/NodeResultCache.js.map +0 -1
  72. package/dist/cache/index.d.ts +0 -1
  73. package/dist/cache/index.js +0 -2
  74. package/dist/cache/index.js.map +0 -1
  75. package/dist/concurrency/ConcurrencyBackend.d.ts +0 -61
  76. package/dist/concurrency/ConcurrencyBackend.js +0 -20
  77. package/dist/concurrency/ConcurrencyBackend.js.map +0 -1
  78. package/dist/concurrency/NatsKvConcurrencyBackend.d.ts +0 -64
  79. package/dist/concurrency/NatsKvConcurrencyBackend.js +0 -310
  80. package/dist/concurrency/NatsKvConcurrencyBackend.js.map +0 -1
  81. package/dist/concurrency/RedisConcurrencyBackend.d.ts +0 -64
  82. package/dist/concurrency/RedisConcurrencyBackend.js +0 -374
  83. package/dist/concurrency/RedisConcurrencyBackend.js.map +0 -1
  84. package/dist/concurrency/createConcurrencyBackend.d.ts +0 -24
  85. package/dist/concurrency/createConcurrencyBackend.js +0 -38
  86. package/dist/concurrency/createConcurrencyBackend.js.map +0 -1
  87. package/dist/graphql/GraphQLSchemaGenerator.d.ts +0 -129
  88. package/dist/graphql/GraphQLSchemaGenerator.js +0 -425
  89. package/dist/graphql/GraphQLSchemaGenerator.js.map +0 -1
  90. package/dist/integrations/APMIntegration.d.ts +0 -141
  91. package/dist/integrations/APMIntegration.js +0 -212
  92. package/dist/integrations/APMIntegration.js.map +0 -1
  93. package/dist/integrations/AzureMonitorIntegration.d.ts +0 -118
  94. package/dist/integrations/AzureMonitorIntegration.js +0 -254
  95. package/dist/integrations/AzureMonitorIntegration.js.map +0 -1
  96. package/dist/integrations/CloudWatchIntegration.d.ts +0 -135
  97. package/dist/integrations/CloudWatchIntegration.js +0 -293
  98. package/dist/integrations/CloudWatchIntegration.js.map +0 -1
  99. package/dist/integrations/SentryIntegration.d.ts +0 -153
  100. package/dist/integrations/SentryIntegration.js +0 -200
  101. package/dist/integrations/SentryIntegration.js.map +0 -1
  102. package/dist/integrations/index.d.ts +0 -19
  103. package/dist/integrations/index.js +0 -16
  104. package/dist/integrations/index.js.map +0 -1
  105. package/dist/marketplace/RuntimeAutoScaler.d.ts +0 -148
  106. package/dist/marketplace/RuntimeAutoScaler.js +0 -366
  107. package/dist/marketplace/RuntimeAutoScaler.js.map +0 -1
  108. package/dist/marketplace/RuntimeCatalog.d.ts +0 -180
  109. package/dist/marketplace/RuntimeCatalog.js +0 -339
  110. package/dist/marketplace/RuntimeCatalog.js.map +0 -1
  111. package/dist/marketplace/RuntimeDiscovery.d.ts +0 -86
  112. package/dist/marketplace/RuntimeDiscovery.js +0 -231
  113. package/dist/marketplace/RuntimeDiscovery.js.map +0 -1
  114. package/dist/marketplace/RuntimeHealthMonitor.d.ts +0 -100
  115. package/dist/marketplace/RuntimeHealthMonitor.js +0 -241
  116. package/dist/marketplace/RuntimeHealthMonitor.js.map +0 -1
  117. package/dist/marketplace/RuntimeMetricsDashboard.d.ts +0 -113
  118. package/dist/marketplace/RuntimeMetricsDashboard.js +0 -293
  119. package/dist/marketplace/RuntimeMetricsDashboard.js.map +0 -1
  120. package/dist/openapi/OpenAPIGenerator.d.ts +0 -192
  121. package/dist/openapi/OpenAPIGenerator.js +0 -378
  122. package/dist/openapi/OpenAPIGenerator.js.map +0 -1
  123. package/dist/openapi/index.d.ts +0 -20
  124. package/dist/openapi/index.js +0 -20
  125. package/dist/openapi/index.js.map +0 -1
  126. package/dist/scheduling/DebounceBackend.d.ts +0 -108
  127. package/dist/scheduling/DebounceBackend.js +0 -23
  128. package/dist/scheduling/DebounceBackend.js.map +0 -1
  129. package/dist/scheduling/NatsKvDebounceBackend.d.ts +0 -53
  130. package/dist/scheduling/NatsKvDebounceBackend.js +0 -334
  131. package/dist/scheduling/NatsKvDebounceBackend.js.map +0 -1
  132. package/dist/scheduling/RedisDebounceBackend.d.ts +0 -49
  133. package/dist/scheduling/RedisDebounceBackend.js +0 -356
  134. package/dist/scheduling/RedisDebounceBackend.js.map +0 -1
  135. package/dist/scheduling/createDebounceBackend.d.ts +0 -25
  136. package/dist/scheduling/createDebounceBackend.js +0 -39
  137. package/dist/scheduling/createDebounceBackend.js.map +0 -1
  138. package/dist/security/ABAC.d.ts +0 -224
  139. package/dist/security/ABAC.js +0 -380
  140. package/dist/security/ABAC.js.map +0 -1
  141. package/dist/security/AuditLogger.d.ts +0 -242
  142. package/dist/security/AuditLogger.js +0 -317
  143. package/dist/security/AuditLogger.js.map +0 -1
  144. package/dist/security/AuthMiddleware.d.ts +0 -162
  145. package/dist/security/AuthMiddleware.js +0 -289
  146. package/dist/security/AuthMiddleware.js.map +0 -1
  147. package/dist/security/EncryptionAtRest.d.ts +0 -206
  148. package/dist/security/EncryptionAtRest.js +0 -236
  149. package/dist/security/EncryptionAtRest.js.map +0 -1
  150. package/dist/security/OAuthProvider.d.ts +0 -334
  151. package/dist/security/OAuthProvider.js +0 -719
  152. package/dist/security/OAuthProvider.js.map +0 -1
  153. package/dist/security/PIIDetector.d.ts +0 -233
  154. package/dist/security/PIIDetector.js +0 -354
  155. package/dist/security/PIIDetector.js.map +0 -1
  156. package/dist/security/RBAC.d.ts +0 -143
  157. package/dist/security/RBAC.js +0 -285
  158. package/dist/security/RBAC.js.map +0 -1
  159. package/dist/security/SecretManager.d.ts +0 -652
  160. package/dist/security/SecretManager.js +0 -1147
  161. package/dist/security/SecretManager.js.map +0 -1
  162. package/dist/security/TLSConfig.d.ts +0 -305
  163. package/dist/security/TLSConfig.js +0 -550
  164. package/dist/security/TLSConfig.js.map +0 -1
  165. package/dist/security/index.d.ts +0 -81
  166. package/dist/security/index.js +0 -82
  167. package/dist/security/index.js.map +0 -1
@@ -1,550 +0,0 @@
1
- /**
2
- * TLS/SSL Configuration for Blok Framework
3
- *
4
- * Manages TLS certificate and cipher configuration for secure communications:
5
- * - Server-side TLS options for Node.js HTTPS/TLS servers
6
- * - Client-side TLS options for outbound connections
7
- * - Certificate validation (expiry, chain integrity, cipher strength)
8
- * - Certificate info parsing (subject, issuer, serial, fingerprint)
9
- * - Mutual TLS (mTLS) support with client certificate verification
10
- * - Self-signed certificate generation for development and testing
11
- *
12
- * @example
13
- * ```typescript
14
- * import { TLSConfig } from "@blokjs/runner";
15
- *
16
- * // Production TLS setup
17
- * const tls = new TLSConfig({
18
- * certPath: "/etc/ssl/certs/server.crt",
19
- * keyPath: "/etc/ssl/private/server.key",
20
- * caPath: "/etc/ssl/certs/ca.crt",
21
- * minVersion: "TLSv1.2",
22
- * mutualTLS: { enabled: true, caPath: "/etc/ssl/certs/client-ca.crt" },
23
- * });
24
- *
25
- * // Use with Node.js HTTPS server
26
- * const serverOpts = tls.createServerOptions();
27
- * const server = https.createServer(serverOpts, app);
28
- *
29
- * // Validate certificates
30
- * const validation = tls.validate();
31
- * if (!validation.valid) {
32
- * console.error("TLS validation failed:", validation.errors);
33
- * }
34
- *
35
- * // Generate self-signed cert for development
36
- * const { cert, key } = TLSConfig.generateSelfSigned({
37
- * commonName: "localhost",
38
- * days: 365,
39
- * });
40
- * ```
41
- */
42
- import { X509Certificate, createPrivateKey, createSign, randomBytes as cryptoRandomBytes, generateKeyPairSync, } from "node:crypto";
43
- import { existsSync, readFileSync } from "node:fs";
44
- // ---------------------------------------------------------------------------
45
- // Implementation
46
- // ---------------------------------------------------------------------------
47
- /**
48
- * Manages TLS/SSL configuration for secure communications.
49
- *
50
- * Supports server-side and client-side TLS setup, certificate inspection,
51
- * validation, mutual TLS, and self-signed certificate generation for
52
- * development environments.
53
- *
54
- * @example
55
- * ```typescript
56
- * const tls = new TLSConfig({
57
- * certPath: "./certs/server.crt",
58
- * keyPath: "./certs/server.key",
59
- * });
60
- *
61
- * if (tls.isExpiringSoon(30)) {
62
- * console.warn("Certificate expires within 30 days!");
63
- * }
64
- * ```
65
- */
66
- export class TLSConfig {
67
- options;
68
- cachedCert;
69
- cachedKey;
70
- cachedCa;
71
- /**
72
- * Create a new TLSConfig instance.
73
- *
74
- * @param options - TLS configuration options
75
- */
76
- constructor(options) {
77
- this.options = {
78
- minVersion: "TLSv1.2",
79
- maxVersion: "TLSv1.3",
80
- rejectUnauthorized: true,
81
- ...options,
82
- };
83
- }
84
- // -----------------------------------------------------------------------
85
- // Public API
86
- // -----------------------------------------------------------------------
87
- /**
88
- * Create TLS options suitable for a Node.js HTTPS or TLS server.
89
- *
90
- * The returned object can be passed directly to
91
- * `https.createServer(options)` or `tls.createServer(options)`.
92
- *
93
- * @returns TLS options for server-side use
94
- * @throws {Error} If required certificate or key cannot be loaded
95
- *
96
- * @example
97
- * ```typescript
98
- * const serverOpts = tlsConfig.createServerOptions();
99
- * const server = https.createServer(serverOpts, requestHandler);
100
- * ```
101
- */
102
- createServerOptions() {
103
- const cert = this.loadCert();
104
- const key = this.loadKey();
105
- const ca = this.loadCA();
106
- const opts = {
107
- cert,
108
- key,
109
- minVersion: this.options.minVersion,
110
- maxVersion: this.options.maxVersion,
111
- };
112
- if (this.options.keyPassphrase) {
113
- opts.passphrase = this.options.keyPassphrase;
114
- }
115
- if (ca) {
116
- opts.ca = ca;
117
- }
118
- if (this.options.ciphers) {
119
- opts.ciphers = this.options.ciphers;
120
- }
121
- // Mutual TLS: request and verify client certificates
122
- if (this.options.mutualTLS?.enabled) {
123
- opts.requestCert = true;
124
- opts.rejectUnauthorized = this.options.mutualTLS.rejectUnauthorized ?? true;
125
- const mTlsCa = this.loadMutualTLSCA();
126
- if (mTlsCa) {
127
- opts.ca = mTlsCa;
128
- }
129
- }
130
- return opts;
131
- }
132
- /**
133
- * Create TLS options suitable for outbound client connections.
134
- *
135
- * The returned object can be passed to `tls.connect(options)` or used
136
- * with HTTPS client libraries.
137
- *
138
- * @returns TLS connection options for client-side use
139
- *
140
- * @example
141
- * ```typescript
142
- * const clientOpts = tlsConfig.createClientOptions();
143
- * const socket = tls.connect(443, "example.com", clientOpts);
144
- * ```
145
- */
146
- createClientOptions() {
147
- const opts = {
148
- minVersion: this.options.minVersion,
149
- maxVersion: this.options.maxVersion,
150
- rejectUnauthorized: this.options.rejectUnauthorized,
151
- };
152
- const ca = this.loadCA();
153
- if (ca) {
154
- opts.ca = ca;
155
- }
156
- // For mTLS, include client cert and key
157
- if (this.options.mutualTLS?.enabled) {
158
- const cert = this.loadCert();
159
- const key = this.loadKey();
160
- if (cert)
161
- opts.cert = cert;
162
- if (key)
163
- opts.key = key;
164
- if (this.options.keyPassphrase) {
165
- opts.passphrase = this.options.keyPassphrase;
166
- }
167
- }
168
- if (this.options.ciphers) {
169
- opts.ciphers = this.options.ciphers;
170
- }
171
- return opts;
172
- }
173
- /**
174
- * Validate the current TLS configuration.
175
- *
176
- * Checks for:
177
- * - Certificate and key file existence
178
- * - Certificate parsing validity
179
- * - Certificate expiry (error if expired, warning if < 30 days)
180
- * - Key/cert pair consistency
181
- * - Mutual TLS CA availability
182
- *
183
- * @returns A {@link TLSValidationResult} with errors and warnings
184
- *
185
- * @example
186
- * ```typescript
187
- * const result = tlsConfig.validate();
188
- * if (!result.valid) {
189
- * result.errors.forEach(e => console.error(e));
190
- * }
191
- * ```
192
- */
193
- validate() {
194
- const errors = [];
195
- const warnings = [];
196
- // Check file existence
197
- if (this.options.certPath && !existsSync(this.options.certPath)) {
198
- errors.push(`Certificate file not found: ${this.options.certPath}`);
199
- }
200
- if (this.options.keyPath && !existsSync(this.options.keyPath)) {
201
- errors.push(`Private key file not found: ${this.options.keyPath}`);
202
- }
203
- if (this.options.caPath && !existsSync(this.options.caPath)) {
204
- warnings.push(`CA file not found: ${this.options.caPath}`);
205
- }
206
- // Validate certificate
207
- try {
208
- const certPem = this.loadCert();
209
- if (certPem) {
210
- const x509 = new X509Certificate(certPem);
211
- const now = new Date();
212
- const validTo = new Date(x509.validTo);
213
- const validFrom = new Date(x509.validFrom);
214
- if (now < validFrom) {
215
- errors.push(`Certificate is not yet valid (validFrom: ${validFrom.toISOString()})`);
216
- }
217
- if (now > validTo) {
218
- errors.push(`Certificate has expired (validTo: ${validTo.toISOString()})`);
219
- }
220
- else {
221
- const daysUntilExpiry = Math.floor((validTo.getTime() - now.getTime()) / (1000 * 60 * 60 * 24));
222
- if (daysUntilExpiry <= 30) {
223
- warnings.push(`Certificate expires in ${daysUntilExpiry} days (${validTo.toISOString()})`);
224
- }
225
- }
226
- }
227
- else if (!this.options.cert && !this.options.certPath) {
228
- errors.push("No certificate configured (cert or certPath required)");
229
- }
230
- }
231
- catch (err) {
232
- errors.push(`Failed to parse certificate: ${err instanceof Error ? err.message : String(err)}`);
233
- }
234
- // Validate private key
235
- try {
236
- const keyPem = this.loadKey();
237
- if (keyPem) {
238
- createPrivateKey({
239
- key: keyPem,
240
- passphrase: this.options.keyPassphrase,
241
- });
242
- }
243
- else if (!this.options.key && !this.options.keyPath) {
244
- errors.push("No private key configured (key or keyPath required)");
245
- }
246
- }
247
- catch (err) {
248
- errors.push(`Failed to parse private key: ${err instanceof Error ? err.message : String(err)}`);
249
- }
250
- // Validate mTLS CA
251
- if (this.options.mutualTLS?.enabled) {
252
- const mTlsCaPath = this.options.mutualTLS.caPath;
253
- if (mTlsCaPath && !existsSync(mTlsCaPath) && !this.options.mutualTLS.ca) {
254
- errors.push(`Mutual TLS CA file not found: ${mTlsCaPath}`);
255
- }
256
- if (!mTlsCaPath && !this.options.mutualTLS.ca) {
257
- warnings.push("Mutual TLS enabled but no client CA configured");
258
- }
259
- }
260
- return {
261
- valid: errors.length === 0,
262
- errors,
263
- warnings,
264
- };
265
- }
266
- /**
267
- * Parse and return detailed information about the server certificate.
268
- *
269
- * @returns Parsed {@link CertificateInfo}
270
- * @throws {Error} If no certificate is configured or parsing fails
271
- *
272
- * @example
273
- * ```typescript
274
- * const info = tlsConfig.getCertificateInfo();
275
- * console.log(info.subject); // "CN=example.com"
276
- * console.log(info.validTo); // Date object
277
- * ```
278
- */
279
- getCertificateInfo() {
280
- const certPem = this.loadCert();
281
- if (!certPem) {
282
- throw new Error("No certificate configured; cannot retrieve certificate info");
283
- }
284
- const x509 = new X509Certificate(certPem);
285
- return {
286
- subject: x509.subject,
287
- issuer: x509.issuer,
288
- validFrom: new Date(x509.validFrom),
289
- validTo: new Date(x509.validTo),
290
- serialNumber: x509.serialNumber,
291
- fingerprint: x509.fingerprint256,
292
- };
293
- }
294
- /**
295
- * Check whether the server certificate expires within a given number of
296
- * days.
297
- *
298
- * @param days - Number of days to check against
299
- * @returns True if the certificate expires within the specified number of days
300
- * @throws {Error} If no certificate is configured
301
- *
302
- * @example
303
- * ```typescript
304
- * if (tlsConfig.isExpiringSoon(30)) {
305
- * console.warn("Certificate expires within 30 days!");
306
- * }
307
- * ```
308
- */
309
- isExpiringSoon(days) {
310
- const info = this.getCertificateInfo();
311
- const now = new Date();
312
- const msUntilExpiry = info.validTo.getTime() - now.getTime();
313
- const daysUntilExpiry = msUntilExpiry / (1000 * 60 * 60 * 24);
314
- return daysUntilExpiry <= days;
315
- }
316
- /**
317
- * Generate a self-signed certificate for development and testing.
318
- *
319
- * This is a static method that does not require a TLSConfig instance.
320
- * The generated certificate uses RSA key pair and SHA-256 signing.
321
- *
322
- * **WARNING**: Self-signed certificates should NEVER be used in production.
323
- *
324
- * @param opts - Self-signed certificate generation options
325
- * @returns Object containing PEM-encoded certificate and private key
326
- *
327
- * @example
328
- * ```typescript
329
- * const { cert, key } = TLSConfig.generateSelfSigned({
330
- * commonName: "localhost",
331
- * days: 30,
332
- * bits: 2048,
333
- * });
334
- * ```
335
- */
336
- static generateSelfSigned(opts) {
337
- const bits = opts.bits ?? 2048;
338
- const days = opts.days ?? 365;
339
- // Generate RSA key pair
340
- const { privateKey, publicKey } = generateKeyPairSync("rsa", {
341
- modulusLength: bits,
342
- publicKeyEncoding: { type: "spki", format: "pem" },
343
- privateKeyEncoding: { type: "pkcs8", format: "pem" },
344
- });
345
- // Build a minimal self-signed X.509 v3 certificate using Node.js crypto
346
- // Node.js 20+ supports X509Certificate creation, but for broader
347
- // compatibility we construct a PEM manually using the crypto module's
348
- // sign capabilities.
349
- //
350
- // For simplicity, we use the `node:crypto` createSign API to produce
351
- // a DER-encoded self-signed cert. In practice, libraries like
352
- // `selfsigned` or `node-forge` are often used. This implementation
353
- // provides a functional placeholder that works with Node.js built-ins.
354
- // Serial number (20 bytes, positive)
355
- const serial = cryptoRandomBytes(20);
356
- serial[0] = serial[0] & 0x7f; // Ensure positive
357
- const notBefore = new Date();
358
- const notAfter = new Date(notBefore.getTime() + days * 24 * 60 * 60 * 1000);
359
- // Construct a simplified ASN.1 DER self-signed certificate
360
- // This uses a minimal approach; for production, use a proper library.
361
- const cn = opts.commonName;
362
- // Encode subject/issuer distinguished name
363
- const encodeDN = (commonName) => {
364
- const cnBytes = Buffer.from(commonName, "utf8");
365
- // OID 2.5.4.3 (CN) = 55 04 03
366
- const oid = Buffer.from([0x06, 0x03, 0x55, 0x04, 0x03]);
367
- const cnValue = Buffer.concat([Buffer.from([0x0c, cnBytes.length]), cnBytes]);
368
- const atv = Buffer.concat([oid, cnValue]);
369
- const atvSeq = wrapSequence(atv);
370
- const rdnSet = wrapSet(atvSeq);
371
- return wrapSequence(rdnSet);
372
- };
373
- const encodeTime = (date) => {
374
- const y = date.getUTCFullYear();
375
- let timeStr;
376
- let tag;
377
- if (y < 2050) {
378
- // UTCTime YYMMDDHHMMSSZ
379
- timeStr = `${String(y % 100).padStart(2, "0") +
380
- String(date.getUTCMonth() + 1).padStart(2, "0") +
381
- String(date.getUTCDate()).padStart(2, "0") +
382
- String(date.getUTCHours()).padStart(2, "0") +
383
- String(date.getUTCMinutes()).padStart(2, "0") +
384
- String(date.getUTCSeconds()).padStart(2, "0")}Z`;
385
- tag = 0x17;
386
- }
387
- else {
388
- // GeneralizedTime YYYYMMDDHHMMSSZ
389
- timeStr = `${String(y) +
390
- String(date.getUTCMonth() + 1).padStart(2, "0") +
391
- String(date.getUTCDate()).padStart(2, "0") +
392
- String(date.getUTCHours()).padStart(2, "0") +
393
- String(date.getUTCMinutes()).padStart(2, "0") +
394
- String(date.getUTCSeconds()).padStart(2, "0")}Z`;
395
- tag = 0x18;
396
- }
397
- const bytes = Buffer.from(timeStr, "ascii");
398
- return Buffer.concat([Buffer.from([tag, bytes.length]), bytes]);
399
- };
400
- const wrapSequence = (data) => {
401
- return Buffer.concat([Buffer.from([0x30]), encodeLength(data.length), data]);
402
- };
403
- const wrapSet = (data) => {
404
- return Buffer.concat([Buffer.from([0x31]), encodeLength(data.length), data]);
405
- };
406
- const encodeLength = (len) => {
407
- if (len < 0x80)
408
- return Buffer.from([len]);
409
- if (len < 0x100)
410
- return Buffer.from([0x81, len]);
411
- return Buffer.from([0x82, (len >> 8) & 0xff, len & 0xff]);
412
- };
413
- const encodeInteger = (buf) => {
414
- // Ensure positive: if high bit set, prepend 0x00
415
- let data = buf;
416
- if (data[0] & 0x80) {
417
- data = Buffer.concat([Buffer.from([0x00]), data]);
418
- }
419
- return Buffer.concat([Buffer.from([0x02]), encodeLength(data.length), data]);
420
- };
421
- const encodeBitString = (data) => {
422
- // Bit string: 0x03 <len> 0x00 <data>
423
- const inner = Buffer.concat([Buffer.from([0x00]), data]);
424
- return Buffer.concat([Buffer.from([0x03]), encodeLength(inner.length), inner]);
425
- };
426
- // Parse the public key from PEM (SPKI format)
427
- const pubKeyDer = pemToDer(publicKey);
428
- // Version: v3 (value 2), context-tagged [0] EXPLICIT
429
- const version = Buffer.concat([Buffer.from([0xa0, 0x03, 0x02, 0x01, 0x02])]);
430
- const serialNumber = encodeInteger(serial);
431
- const subject = encodeDN(cn);
432
- const issuer = encodeDN(cn); // Self-signed: issuer = subject
433
- // Signature algorithm: sha256WithRSAEncryption (OID 1.2.840.113549.1.1.11)
434
- const sigAlgOid = Buffer.from([0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b]);
435
- const sigAlg = wrapSequence(Buffer.concat([sigAlgOid, Buffer.from([0x05, 0x00])]));
436
- // Validity
437
- const validity = wrapSequence(Buffer.concat([encodeTime(notBefore), encodeTime(notAfter)]));
438
- // TBS Certificate
439
- const tbsCertificate = wrapSequence(Buffer.concat([version, serialNumber, sigAlg, issuer, validity, subject, pubKeyDer]));
440
- // Sign TBS
441
- const signer = createSign("SHA256");
442
- signer.update(tbsCertificate);
443
- const signature = signer.sign(privateKey);
444
- // Full certificate: SEQUENCE { tbsCert, sigAlg, signature }
445
- const certDer = wrapSequence(Buffer.concat([tbsCertificate, sigAlg, encodeBitString(signature)]));
446
- const certPem = derToPem(certDer, "CERTIFICATE");
447
- return {
448
- cert: certPem,
449
- key: privateKey,
450
- };
451
- }
452
- // -----------------------------------------------------------------------
453
- // Private helpers
454
- // -----------------------------------------------------------------------
455
- /**
456
- * Load the server certificate from file or inline PEM.
457
- *
458
- * @returns PEM string or undefined if not configured
459
- */
460
- loadCert() {
461
- if (this.cachedCert)
462
- return this.cachedCert;
463
- if (this.options.cert) {
464
- this.cachedCert = this.options.cert;
465
- }
466
- else if (this.options.certPath) {
467
- this.cachedCert = readFileSync(this.options.certPath, "utf8");
468
- }
469
- return this.cachedCert;
470
- }
471
- /**
472
- * Load the private key from file or inline PEM.
473
- *
474
- * @returns PEM string or undefined if not configured
475
- */
476
- loadKey() {
477
- if (this.cachedKey)
478
- return this.cachedKey;
479
- if (this.options.key) {
480
- this.cachedKey = this.options.key;
481
- }
482
- else if (this.options.keyPath) {
483
- this.cachedKey = readFileSync(this.options.keyPath, "utf8");
484
- }
485
- return this.cachedKey;
486
- }
487
- /**
488
- * Load the CA certificate from file or inline PEM.
489
- *
490
- * @returns PEM string or undefined if not configured
491
- */
492
- loadCA() {
493
- if (this.cachedCa)
494
- return this.cachedCa;
495
- if (this.options.ca) {
496
- this.cachedCa = this.options.ca;
497
- }
498
- else if (this.options.caPath) {
499
- this.cachedCa = readFileSync(this.options.caPath, "utf8");
500
- }
501
- return this.cachedCa;
502
- }
503
- /**
504
- * Load the mutual TLS CA certificate.
505
- *
506
- * @returns PEM string or undefined
507
- */
508
- loadMutualTLSCA() {
509
- const mTls = this.options.mutualTLS;
510
- if (!mTls)
511
- return undefined;
512
- if (mTls.ca)
513
- return mTls.ca;
514
- if (mTls.caPath)
515
- return readFileSync(mTls.caPath, "utf8");
516
- return undefined;
517
- }
518
- }
519
- // ---------------------------------------------------------------------------
520
- // Utility functions
521
- // ---------------------------------------------------------------------------
522
- /**
523
- * Convert a PEM-encoded string to a DER Buffer.
524
- *
525
- * @param pem - PEM string with header/footer
526
- * @returns Raw DER bytes
527
- */
528
- function pemToDer(pem) {
529
- const lines = pem
530
- .split("\n")
531
- .filter((l) => !l.startsWith("-----"))
532
- .join("");
533
- return Buffer.from(lines, "base64");
534
- }
535
- /**
536
- * Convert a DER Buffer to a PEM-encoded string.
537
- *
538
- * @param der - Raw DER bytes
539
- * @param label - PEM label (e.g. "CERTIFICATE", "PRIVATE KEY")
540
- * @returns PEM string
541
- */
542
- function derToPem(der, label) {
543
- const b64 = der.toString("base64");
544
- const lines = [];
545
- for (let i = 0; i < b64.length; i += 64) {
546
- lines.push(b64.slice(i, i + 64));
547
- }
548
- return `-----BEGIN ${label}-----\n${lines.join("\n")}\n-----END ${label}-----\n`;
549
- }
550
- //# sourceMappingURL=TLSConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TLSConfig.js","sourceRoot":"","sources":["../../src/security/TLSConfig.ts"],"names":[],"mappings":"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"}
@@ -1,81 +0,0 @@
1
- /**
2
- * Security Module for Blok Framework
3
- *
4
- * Provides authentication, authorization, audit logging, and secret management:
5
- * - AuthMiddleware: **Deprecated as of v0.4.1; removed in v0.5.** Use
6
- * `jose`, `hono/jwt`, or `node-jsonwebtoken` at the workflow layer
7
- * instead. See `docs/d/security/cookbook.mdx`.
8
- * - OAuthOIDCProvider: OAuth 2.0 / OIDC authentication with JWKS verification
9
- * - RBAC: Role-based access control with hierarchical roles
10
- * - ABAC: Attribute-based access control with policy engine
11
- * - AuditLogger: Comprehensive audit trail with multiple sinks
12
- * - SecretManager: Unified secret management across multiple providers
13
- * - EncryptionAtRest: AES-256-GCM encryption/decryption with key rotation
14
- * - PIIDetector: PII detection and masking for text and structured data
15
- * - TLSConfig: TLS/SSL configuration with mTLS and certificate management
16
- *
17
- * @example
18
- * ```typescript
19
- * import {
20
- * AuthMiddleware,
21
- * JWTAuthProvider,
22
- * APIKeyAuthProvider,
23
- * OAuthOIDCProvider,
24
- * RBAC,
25
- * createDefaultRBAC,
26
- * AuditLogger,
27
- * ConsoleAuditSink,
28
- * FileAuditSink,
29
- * SecretManager,
30
- * EnvironmentSecretProvider,
31
- * } from "@blokjs/runner";
32
- *
33
- * // Set up auth
34
- * const auth = new AuthMiddleware({
35
- * providers: [
36
- * new OAuthOIDCProvider({
37
- * issuerUrl: "https://auth.example.com",
38
- * clientId: "my-app",
39
- * }),
40
- * new JWTAuthProvider({ secret: process.env.JWT_SECRET! }),
41
- * new APIKeyAuthProvider({
42
- * keys: new Map([["my-key", { name: "svc", roles: ["service"] }]]),
43
- * }),
44
- * ],
45
- * });
46
- *
47
- * // Set up RBAC
48
- * const rbac = createDefaultRBAC();
49
- *
50
- * // Set up audit logging
51
- * const audit = new AuditLogger({
52
- * sinks: [new ConsoleAuditSink(), new FileAuditSink({ path: "./audit.log" })],
53
- * });
54
- *
55
- * // Set up secret management
56
- * const secrets = new SecretManager({
57
- * providers: [
58
- * { type: "environment", config: { prefix: "BLOK_SECRET_" } },
59
- * ],
60
- * cache: { enabled: true, ttlMs: 60_000, maxSize: 100 },
61
- * });
62
- * ```
63
- */
64
- export { AuthMiddleware, JWTAuthProvider, APIKeyAuthProvider, } from "./AuthMiddleware";
65
- export type { AuthMiddlewareConfig, AuthProvider, AuthIdentity, AuthRequest, AuthResult, JWTAuthProviderConfig, APIKeyAuthProviderConfig, APIKeyInfo, } from "./AuthMiddleware";
66
- export { RBAC, createDefaultRBAC } from "./RBAC";
67
- export type { Action, Permission, RoleDefinition, AccessCheckResult, RBACPolicy, } from "./RBAC";
68
- export { ABACEngine, createDefaultABAC } from "./ABAC";
69
- export type { ABACOperator, ABACEffect, ABACCondition, ABACConditionGroup, ABACPolicyTarget, ABACPolicy, SubjectAttributes, ResourceAttributes, EnvironmentAttributes, ABACRequest, ABACResult, } from "./ABAC";
70
- export { OAuthOIDCProvider, TokenCache } from "./OAuthProvider";
71
- export type { OAuthOIDCConfig, OIDCDiscoveryDocument, JWK, JWKS, TokenCacheStats, } from "./OAuthProvider";
72
- export { AuditLogger, ConsoleAuditSink, FileAuditSink, InMemoryAuditSink, } from "./AuditLogger";
73
- export type { AuditEntry, AuditCategory, AuditSeverity, AuditSink, AuditLoggerConfig, } from "./AuditLogger";
74
- export { SecretManager, EnvironmentSecretProvider, InMemorySecretProvider, VaultSecretProvider, AWSSecretsProvider, GCPSecretProvider, } from "./SecretManager";
75
- export type { SecretProvider, SecretMetadata, SecretAccessEvent, SecretManagerConfig, SecretCacheConfig, SecretProviderConfig, EnvironmentProviderConfig, InMemoryProviderConfig, VaultProviderConfig, AWSSecretsProviderConfig, GCPSecretProviderConfig, } from "./SecretManager";
76
- export { EncryptionAtRest } from "./EncryptionAtRest";
77
- export type { EncryptedPayload, EncryptionConfig, KeyDerivationConfig, } from "./EncryptionAtRest";
78
- export { PIIDetector, PIIType } from "./PIIDetector";
79
- export type { PIIPattern, PIIMatch, PIIScanResult, PIIDetectorConfig, } from "./PIIDetector";
80
- export { TLSConfig } from "./TLSConfig";
81
- export type { TLSConfigOptions, TLSValidationResult, CertificateInfo, SelfSignedOptions, MutualTLSOptions, } from "./TLSConfig";