@blokjs/runner 0.2.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 (307) hide show
  1. package/dist/Blok.d.ts +19 -0
  2. package/dist/Blok.js +184 -0
  3. package/dist/Blok.js.map +1 -0
  4. package/dist/BlokResponse.d.ts +16 -0
  5. package/dist/BlokResponse.js +28 -0
  6. package/dist/BlokResponse.js.map +1 -0
  7. package/dist/Configuration.d.ts +37 -0
  8. package/dist/Configuration.js +248 -0
  9. package/dist/Configuration.js.map +1 -0
  10. package/dist/ConfigurationResolver.d.ts +7 -0
  11. package/dist/ConfigurationResolver.js +15 -0
  12. package/dist/ConfigurationResolver.js.map +1 -0
  13. package/dist/DefaultLogger.d.ts +65 -0
  14. package/dist/DefaultLogger.js +101 -0
  15. package/dist/DefaultLogger.js.map +1 -0
  16. package/dist/LocalStorage.d.ts +7 -0
  17. package/dist/LocalStorage.js +56 -0
  18. package/dist/LocalStorage.js.map +1 -0
  19. package/dist/MemoryUsage.d.ts +22 -0
  20. package/dist/MemoryUsage.js +83 -0
  21. package/dist/MemoryUsage.js.map +1 -0
  22. package/dist/NodeMap.d.ts +7 -0
  23. package/dist/NodeMap.js +13 -0
  24. package/dist/NodeMap.js.map +1 -0
  25. package/dist/ResolverBase.d.ts +8 -0
  26. package/dist/ResolverBase.js +18 -0
  27. package/dist/ResolverBase.js.map +1 -0
  28. package/dist/Runner.d.ts +25 -0
  29. package/dist/Runner.js +32 -0
  30. package/dist/Runner.js.map +1 -0
  31. package/dist/RunnerNode.d.ts +9 -0
  32. package/dist/RunnerNode.js +8 -0
  33. package/dist/RunnerNode.js.map +1 -0
  34. package/dist/RunnerNodeBase.d.ts +4 -0
  35. package/dist/RunnerNodeBase.js +3 -0
  36. package/dist/RunnerNodeBase.js.map +1 -0
  37. package/dist/RunnerSteps.d.ts +14 -0
  38. package/dist/RunnerSteps.js +110 -0
  39. package/dist/RunnerSteps.js.map +1 -0
  40. package/dist/RuntimeAdapterNode.d.ts +19 -0
  41. package/dist/RuntimeAdapterNode.js +87 -0
  42. package/dist/RuntimeAdapterNode.js.map +1 -0
  43. package/dist/RuntimeRegistry.d.ts +61 -0
  44. package/dist/RuntimeRegistry.js +87 -0
  45. package/dist/RuntimeRegistry.js.map +1 -0
  46. package/dist/TriggerBase.d.ts +119 -0
  47. package/dist/TriggerBase.js +413 -0
  48. package/dist/TriggerBase.js.map +1 -0
  49. package/dist/adapters/BunRuntimeAdapter.d.ts +38 -0
  50. package/dist/adapters/BunRuntimeAdapter.js +169 -0
  51. package/dist/adapters/BunRuntimeAdapter.js.map +1 -0
  52. package/dist/adapters/DockerRuntimeAdapter.d.ts +85 -0
  53. package/dist/adapters/DockerRuntimeAdapter.js +298 -0
  54. package/dist/adapters/DockerRuntimeAdapter.js.map +1 -0
  55. package/dist/adapters/HttpRuntimeAdapter.d.ts +58 -0
  56. package/dist/adapters/HttpRuntimeAdapter.js +152 -0
  57. package/dist/adapters/HttpRuntimeAdapter.js.map +1 -0
  58. package/dist/adapters/NodeJsRuntimeAdapter.d.ts +23 -0
  59. package/dist/adapters/NodeJsRuntimeAdapter.js +67 -0
  60. package/dist/adapters/NodeJsRuntimeAdapter.js.map +1 -0
  61. package/dist/adapters/RuntimeAdapter.d.ts +42 -0
  62. package/dist/adapters/RuntimeAdapter.js +2 -0
  63. package/dist/adapters/RuntimeAdapter.js.map +1 -0
  64. package/dist/adapters/WasmRuntimeAdapter.d.ts +69 -0
  65. package/dist/adapters/WasmRuntimeAdapter.js +279 -0
  66. package/dist/adapters/WasmRuntimeAdapter.js.map +1 -0
  67. package/dist/cache/NodeResultCache.d.ts +286 -0
  68. package/dist/cache/NodeResultCache.js +499 -0
  69. package/dist/cache/NodeResultCache.js.map +1 -0
  70. package/dist/cache/index.d.ts +1 -0
  71. package/dist/cache/index.js +2 -0
  72. package/dist/cache/index.js.map +1 -0
  73. package/dist/cost/CostEstimator.d.ts +57 -0
  74. package/dist/cost/CostEstimator.js +171 -0
  75. package/dist/cost/CostEstimator.js.map +1 -0
  76. package/dist/cost/index.d.ts +4 -0
  77. package/dist/cost/index.js +3 -0
  78. package/dist/cost/index.js.map +1 -0
  79. package/dist/cost/pricing.d.ts +24 -0
  80. package/dist/cost/pricing.js +169 -0
  81. package/dist/cost/pricing.js.map +1 -0
  82. package/dist/defineNode.d.ts +155 -0
  83. package/dist/defineNode.js +191 -0
  84. package/dist/defineNode.js.map +1 -0
  85. package/dist/graphql/GraphQLSchemaGenerator.d.ts +129 -0
  86. package/dist/graphql/GraphQLSchemaGenerator.js +425 -0
  87. package/dist/graphql/GraphQLSchemaGenerator.js.map +1 -0
  88. package/dist/hmr/FileWatcher.d.ts +62 -0
  89. package/dist/hmr/FileWatcher.js +185 -0
  90. package/dist/hmr/FileWatcher.js.map +1 -0
  91. package/dist/hmr/HmrDevConsole.d.ts +13 -0
  92. package/dist/hmr/HmrDevConsole.js +46 -0
  93. package/dist/hmr/HmrDevConsole.js.map +1 -0
  94. package/dist/hmr/HotReloadManager.d.ts +84 -0
  95. package/dist/hmr/HotReloadManager.js +195 -0
  96. package/dist/hmr/HotReloadManager.js.map +1 -0
  97. package/dist/hmr/index.d.ts +39 -0
  98. package/dist/hmr/index.js +38 -0
  99. package/dist/hmr/index.js.map +1 -0
  100. package/dist/index.d.ts +107 -0
  101. package/dist/index.js +107 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/integrations/APMIntegration.d.ts +141 -0
  104. package/dist/integrations/APMIntegration.js +212 -0
  105. package/dist/integrations/APMIntegration.js.map +1 -0
  106. package/dist/integrations/AzureMonitorIntegration.d.ts +118 -0
  107. package/dist/integrations/AzureMonitorIntegration.js +254 -0
  108. package/dist/integrations/AzureMonitorIntegration.js.map +1 -0
  109. package/dist/integrations/CloudWatchIntegration.d.ts +135 -0
  110. package/dist/integrations/CloudWatchIntegration.js +293 -0
  111. package/dist/integrations/CloudWatchIntegration.js.map +1 -0
  112. package/dist/integrations/SentryIntegration.d.ts +153 -0
  113. package/dist/integrations/SentryIntegration.js +200 -0
  114. package/dist/integrations/SentryIntegration.js.map +1 -0
  115. package/dist/integrations/index.d.ts +19 -0
  116. package/dist/integrations/index.js +16 -0
  117. package/dist/integrations/index.js.map +1 -0
  118. package/dist/marketplace/RuntimeAutoScaler.d.ts +148 -0
  119. package/dist/marketplace/RuntimeAutoScaler.js +366 -0
  120. package/dist/marketplace/RuntimeAutoScaler.js.map +1 -0
  121. package/dist/marketplace/RuntimeCatalog.d.ts +174 -0
  122. package/dist/marketplace/RuntimeCatalog.js +339 -0
  123. package/dist/marketplace/RuntimeCatalog.js.map +1 -0
  124. package/dist/marketplace/RuntimeDiscovery.d.ts +86 -0
  125. package/dist/marketplace/RuntimeDiscovery.js +219 -0
  126. package/dist/marketplace/RuntimeDiscovery.js.map +1 -0
  127. package/dist/marketplace/RuntimeHealthMonitor.d.ts +100 -0
  128. package/dist/marketplace/RuntimeHealthMonitor.js +241 -0
  129. package/dist/marketplace/RuntimeHealthMonitor.js.map +1 -0
  130. package/dist/marketplace/RuntimeMetricsDashboard.d.ts +113 -0
  131. package/dist/marketplace/RuntimeMetricsDashboard.js +293 -0
  132. package/dist/marketplace/RuntimeMetricsDashboard.js.map +1 -0
  133. package/dist/monitoring/CircuitBreaker.d.ts +107 -0
  134. package/dist/monitoring/CircuitBreaker.js +238 -0
  135. package/dist/monitoring/CircuitBreaker.js.map +1 -0
  136. package/dist/monitoring/DistributedTracer.d.ts +125 -0
  137. package/dist/monitoring/DistributedTracer.js +230 -0
  138. package/dist/monitoring/DistributedTracer.js.map +1 -0
  139. package/dist/monitoring/HealthCheck.d.ts +54 -0
  140. package/dist/monitoring/HealthCheck.js +102 -0
  141. package/dist/monitoring/HealthCheck.js.map +1 -0
  142. package/dist/monitoring/PerformanceProfiler.d.ts +63 -0
  143. package/dist/monitoring/PerformanceProfiler.js +229 -0
  144. package/dist/monitoring/PerformanceProfiler.js.map +1 -0
  145. package/dist/monitoring/PrometheusBootstrap.d.ts +30 -0
  146. package/dist/monitoring/PrometheusBootstrap.js +71 -0
  147. package/dist/monitoring/PrometheusBootstrap.js.map +1 -0
  148. package/dist/monitoring/PrometheusMetricsBridge.d.ts +60 -0
  149. package/dist/monitoring/PrometheusMetricsBridge.js +216 -0
  150. package/dist/monitoring/PrometheusMetricsBridge.js.map +1 -0
  151. package/dist/monitoring/RateLimiter.d.ts +58 -0
  152. package/dist/monitoring/RateLimiter.js +128 -0
  153. package/dist/monitoring/RateLimiter.js.map +1 -0
  154. package/dist/monitoring/StructuredLogger.d.ts +131 -0
  155. package/dist/monitoring/StructuredLogger.js +207 -0
  156. package/dist/monitoring/StructuredLogger.js.map +1 -0
  157. package/dist/monitoring/TracingBootstrap.d.ts +69 -0
  158. package/dist/monitoring/TracingBootstrap.js +129 -0
  159. package/dist/monitoring/TracingBootstrap.js.map +1 -0
  160. package/dist/monitoring/TriggerMetricsCollector.d.ts +94 -0
  161. package/dist/monitoring/TriggerMetricsCollector.js +174 -0
  162. package/dist/monitoring/TriggerMetricsCollector.js.map +1 -0
  163. package/dist/monitoring/index.d.ts +9 -0
  164. package/dist/monitoring/index.js +10 -0
  165. package/dist/monitoring/index.js.map +1 -0
  166. package/dist/openapi/OpenAPIGenerator.d.ts +192 -0
  167. package/dist/openapi/OpenAPIGenerator.js +373 -0
  168. package/dist/openapi/OpenAPIGenerator.js.map +1 -0
  169. package/dist/openapi/index.d.ts +20 -0
  170. package/dist/openapi/index.js +20 -0
  171. package/dist/openapi/index.js.map +1 -0
  172. package/dist/security/ABAC.d.ts +224 -0
  173. package/dist/security/ABAC.js +380 -0
  174. package/dist/security/ABAC.js.map +1 -0
  175. package/dist/security/AuditLogger.d.ts +242 -0
  176. package/dist/security/AuditLogger.js +317 -0
  177. package/dist/security/AuditLogger.js.map +1 -0
  178. package/dist/security/AuthMiddleware.d.ts +163 -0
  179. package/dist/security/AuthMiddleware.js +274 -0
  180. package/dist/security/AuthMiddleware.js.map +1 -0
  181. package/dist/security/EncryptionAtRest.d.ts +206 -0
  182. package/dist/security/EncryptionAtRest.js +236 -0
  183. package/dist/security/EncryptionAtRest.js.map +1 -0
  184. package/dist/security/OAuthProvider.d.ts +334 -0
  185. package/dist/security/OAuthProvider.js +719 -0
  186. package/dist/security/OAuthProvider.js.map +1 -0
  187. package/dist/security/PIIDetector.d.ts +233 -0
  188. package/dist/security/PIIDetector.js +354 -0
  189. package/dist/security/PIIDetector.js.map +1 -0
  190. package/dist/security/RBAC.d.ts +143 -0
  191. package/dist/security/RBAC.js +285 -0
  192. package/dist/security/RBAC.js.map +1 -0
  193. package/dist/security/SecretManager.d.ts +652 -0
  194. package/dist/security/SecretManager.js +1146 -0
  195. package/dist/security/SecretManager.js.map +1 -0
  196. package/dist/security/TLSConfig.d.ts +305 -0
  197. package/dist/security/TLSConfig.js +550 -0
  198. package/dist/security/TLSConfig.js.map +1 -0
  199. package/dist/security/index.d.ts +79 -0
  200. package/dist/security/index.js +80 -0
  201. package/dist/security/index.js.map +1 -0
  202. package/dist/testing/TestHarness.d.ts +189 -0
  203. package/dist/testing/TestHarness.js +272 -0
  204. package/dist/testing/TestHarness.js.map +1 -0
  205. package/dist/testing/TestLogger.d.ts +103 -0
  206. package/dist/testing/TestLogger.js +153 -0
  207. package/dist/testing/TestLogger.js.map +1 -0
  208. package/dist/testing/WorkflowTestRunner.d.ts +172 -0
  209. package/dist/testing/WorkflowTestRunner.js +355 -0
  210. package/dist/testing/WorkflowTestRunner.js.map +1 -0
  211. package/dist/testing/index.d.ts +21 -0
  212. package/dist/testing/index.js +22 -0
  213. package/dist/testing/index.js.map +1 -0
  214. package/dist/tracing/InMemoryRunStore.d.ts +44 -0
  215. package/dist/tracing/InMemoryRunStore.js +341 -0
  216. package/dist/tracing/InMemoryRunStore.js.map +1 -0
  217. package/dist/tracing/PostgresRunStore.d.ts +82 -0
  218. package/dist/tracing/PostgresRunStore.js +640 -0
  219. package/dist/tracing/PostgresRunStore.js.map +1 -0
  220. package/dist/tracing/RunStore.d.ts +38 -0
  221. package/dist/tracing/RunStore.js +2 -0
  222. package/dist/tracing/RunStore.js.map +1 -0
  223. package/dist/tracing/RunTracker.d.ts +75 -0
  224. package/dist/tracing/RunTracker.js +374 -0
  225. package/dist/tracing/RunTracker.js.map +1 -0
  226. package/dist/tracing/SqliteRunStore.d.ts +53 -0
  227. package/dist/tracing/SqliteRunStore.js +703 -0
  228. package/dist/tracing/SqliteRunStore.js.map +1 -0
  229. package/dist/tracing/TraceRouter.d.ts +47 -0
  230. package/dist/tracing/TraceRouter.js +904 -0
  231. package/dist/tracing/TraceRouter.js.map +1 -0
  232. package/dist/tracing/TracingLogger.d.ts +21 -0
  233. package/dist/tracing/TracingLogger.js +62 -0
  234. package/dist/tracing/TracingLogger.js.map +1 -0
  235. package/dist/tracing/createStore.d.ts +30 -0
  236. package/dist/tracing/createStore.js +75 -0
  237. package/dist/tracing/createStore.js.map +1 -0
  238. package/dist/tracing/index.d.ts +13 -0
  239. package/dist/tracing/index.js +9 -0
  240. package/dist/tracing/index.js.map +1 -0
  241. package/dist/tracing/sanitize.d.ts +7 -0
  242. package/dist/tracing/sanitize.js +95 -0
  243. package/dist/tracing/sanitize.js.map +1 -0
  244. package/dist/tracing/types.d.ts +178 -0
  245. package/dist/tracing/types.js +3 -0
  246. package/dist/tracing/types.js.map +1 -0
  247. package/dist/types/Average.d.ts +11 -0
  248. package/dist/types/Average.js +2 -0
  249. package/dist/types/Average.js.map +1 -0
  250. package/dist/types/Condition.d.ts +8 -0
  251. package/dist/types/Condition.js +2 -0
  252. package/dist/types/Condition.js.map +1 -0
  253. package/dist/types/Conditions.d.ts +5 -0
  254. package/dist/types/Conditions.js +2 -0
  255. package/dist/types/Conditions.js.map +1 -0
  256. package/dist/types/Config.d.ts +12 -0
  257. package/dist/types/Config.js +2 -0
  258. package/dist/types/Config.js.map +1 -0
  259. package/dist/types/Flow.d.ts +5 -0
  260. package/dist/types/Flow.js +2 -0
  261. package/dist/types/Flow.js.map +1 -0
  262. package/dist/types/GlobalOptions.d.ts +11 -0
  263. package/dist/types/GlobalOptions.js +2 -0
  264. package/dist/types/GlobalOptions.js.map +1 -0
  265. package/dist/types/Inputs.d.ts +5 -0
  266. package/dist/types/Inputs.js +2 -0
  267. package/dist/types/Inputs.js.map +1 -0
  268. package/dist/types/JsonLikeObject.d.ts +3 -0
  269. package/dist/types/JsonLikeObject.js +2 -0
  270. package/dist/types/JsonLikeObject.js.map +1 -0
  271. package/dist/types/Mapper.d.ts +5 -0
  272. package/dist/types/Mapper.js +2 -0
  273. package/dist/types/Mapper.js.map +1 -0
  274. package/dist/types/Node.d.ts +10 -0
  275. package/dist/types/Node.js +2 -0
  276. package/dist/types/Node.js.map +1 -0
  277. package/dist/types/ParamsDictionary.d.ts +3 -0
  278. package/dist/types/ParamsDictionary.js +2 -0
  279. package/dist/types/ParamsDictionary.js.map +1 -0
  280. package/dist/types/Properties.d.ts +5 -0
  281. package/dist/types/Properties.js +2 -0
  282. package/dist/types/Properties.js.map +1 -0
  283. package/dist/types/Targets.d.ts +5 -0
  284. package/dist/types/Targets.js +2 -0
  285. package/dist/types/Targets.js.map +1 -0
  286. package/dist/types/Trigger.d.ts +5 -0
  287. package/dist/types/Trigger.js +2 -0
  288. package/dist/types/Trigger.js.map +1 -0
  289. package/dist/types/TriggerHttp.d.ts +7 -0
  290. package/dist/types/TriggerHttp.js +2 -0
  291. package/dist/types/TriggerHttp.js.map +1 -0
  292. package/dist/types/TriggerResponse.d.ts +6 -0
  293. package/dist/types/TriggerResponse.js +2 -0
  294. package/dist/types/TriggerResponse.js.map +1 -0
  295. package/dist/types/Triggers.d.ts +5 -0
  296. package/dist/types/Triggers.js +2 -0
  297. package/dist/types/Triggers.js.map +1 -0
  298. package/dist/types/TryCatch.d.ts +6 -0
  299. package/dist/types/TryCatch.js +2 -0
  300. package/dist/types/TryCatch.js.map +1 -0
  301. package/dist/visualization/NodeDependencyGraph.d.ts +76 -0
  302. package/dist/visualization/NodeDependencyGraph.js +418 -0
  303. package/dist/visualization/NodeDependencyGraph.js.map +1 -0
  304. package/dist/visualization/WorkflowVisualizer.d.ts +144 -0
  305. package/dist/visualization/WorkflowVisualizer.js +446 -0
  306. package/dist/visualization/WorkflowVisualizer.js.map +1 -0
  307. package/package.json +95 -0
@@ -0,0 +1,550 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TLSConfig.js","sourceRoot":"","sources":["../../src/security/TLSConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Security Module for Blok Framework
3
+ *
4
+ * Provides authentication, authorization, audit logging, and secret management:
5
+ * - AuthMiddleware: Pluggable auth with JWT and API Key providers
6
+ * - OAuthOIDCProvider: OAuth 2.0 / OIDC authentication with JWKS verification
7
+ * - RBAC: Role-based access control with hierarchical roles
8
+ * - ABAC: Attribute-based access control with policy engine
9
+ * - AuditLogger: Comprehensive audit trail with multiple sinks
10
+ * - SecretManager: Unified secret management across multiple providers
11
+ * - EncryptionAtRest: AES-256-GCM encryption/decryption with key rotation
12
+ * - PIIDetector: PII detection and masking for text and structured data
13
+ * - TLSConfig: TLS/SSL configuration with mTLS and certificate management
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import {
18
+ * AuthMiddleware,
19
+ * JWTAuthProvider,
20
+ * APIKeyAuthProvider,
21
+ * OAuthOIDCProvider,
22
+ * RBAC,
23
+ * createDefaultRBAC,
24
+ * AuditLogger,
25
+ * ConsoleAuditSink,
26
+ * FileAuditSink,
27
+ * SecretManager,
28
+ * EnvironmentSecretProvider,
29
+ * } from "@blokjs/runner";
30
+ *
31
+ * // Set up auth
32
+ * const auth = new AuthMiddleware({
33
+ * providers: [
34
+ * new OAuthOIDCProvider({
35
+ * issuerUrl: "https://auth.example.com",
36
+ * clientId: "my-app",
37
+ * }),
38
+ * new JWTAuthProvider({ secret: process.env.JWT_SECRET! }),
39
+ * new APIKeyAuthProvider({
40
+ * keys: new Map([["my-key", { name: "svc", roles: ["service"] }]]),
41
+ * }),
42
+ * ],
43
+ * });
44
+ *
45
+ * // Set up RBAC
46
+ * const rbac = createDefaultRBAC();
47
+ *
48
+ * // Set up audit logging
49
+ * const audit = new AuditLogger({
50
+ * sinks: [new ConsoleAuditSink(), new FileAuditSink({ path: "./audit.log" })],
51
+ * });
52
+ *
53
+ * // Set up secret management
54
+ * const secrets = new SecretManager({
55
+ * providers: [
56
+ * { type: "environment", config: { prefix: "BLOK_SECRET_" } },
57
+ * ],
58
+ * cache: { enabled: true, ttlMs: 60_000, maxSize: 100 },
59
+ * });
60
+ * ```
61
+ */
62
+ export { AuthMiddleware, JWTAuthProvider, APIKeyAuthProvider, } from "./AuthMiddleware";
63
+ export type { AuthMiddlewareConfig, AuthProvider, AuthIdentity, AuthRequest, AuthResult, JWTAuthProviderConfig, APIKeyAuthProviderConfig, APIKeyInfo, } from "./AuthMiddleware";
64
+ export { RBAC, createDefaultRBAC } from "./RBAC";
65
+ export type { Action, Permission, RoleDefinition, AccessCheckResult, RBACPolicy, } from "./RBAC";
66
+ export { ABACEngine, createDefaultABAC } from "./ABAC";
67
+ export type { ABACOperator, ABACEffect, ABACCondition, ABACConditionGroup, ABACPolicyTarget, ABACPolicy, SubjectAttributes, ResourceAttributes, EnvironmentAttributes, ABACRequest, ABACResult, } from "./ABAC";
68
+ export { OAuthOIDCProvider, TokenCache } from "./OAuthProvider";
69
+ export type { OAuthOIDCConfig, OIDCDiscoveryDocument, JWK, JWKS, TokenCacheStats, } from "./OAuthProvider";
70
+ export { AuditLogger, ConsoleAuditSink, FileAuditSink, InMemoryAuditSink, } from "./AuditLogger";
71
+ export type { AuditEntry, AuditCategory, AuditSeverity, AuditSink, AuditLoggerConfig, } from "./AuditLogger";
72
+ export { SecretManager, EnvironmentSecretProvider, InMemorySecretProvider, VaultSecretProvider, AWSSecretsProvider, GCPSecretProvider, } from "./SecretManager";
73
+ export type { SecretProvider, SecretMetadata, SecretAccessEvent, SecretManagerConfig, SecretCacheConfig, SecretProviderConfig, EnvironmentProviderConfig, InMemoryProviderConfig, VaultProviderConfig, AWSSecretsProviderConfig, GCPSecretProviderConfig, } from "./SecretManager";
74
+ export { EncryptionAtRest } from "./EncryptionAtRest";
75
+ export type { EncryptedPayload, EncryptionConfig, KeyDerivationConfig, } from "./EncryptionAtRest";
76
+ export { PIIDetector, PIIType } from "./PIIDetector";
77
+ export type { PIIPattern, PIIMatch, PIIScanResult, PIIDetectorConfig, } from "./PIIDetector";
78
+ export { TLSConfig } from "./TLSConfig";
79
+ export type { TLSConfigOptions, TLSValidationResult, CertificateInfo, SelfSignedOptions, MutualTLSOptions, } from "./TLSConfig";