@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,242 @@
1
+ /**
2
+ * Audit Logger for Blok Framework
3
+ *
4
+ * Provides comprehensive audit logging for security and compliance:
5
+ * - All authentication attempts (success and failure)
6
+ * - Authorization decisions
7
+ * - Workflow executions
8
+ * - Node executions
9
+ * - Configuration changes
10
+ * - System events
11
+ *
12
+ * Supports multiple output destinations via AuditSink interface.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const audit = new AuditLogger({
17
+ * sinks: [
18
+ * new ConsoleAuditSink(),
19
+ * new FileAuditSink({ path: "./audit.log" }),
20
+ * ],
21
+ * includeTimestamp: true,
22
+ * includeRequestId: true,
23
+ * });
24
+ *
25
+ * audit.logAuth({
26
+ * action: "login",
27
+ * success: true,
28
+ * identity: { sub: "user-123", provider: "jwt" },
29
+ * ip: "192.168.1.1",
30
+ * });
31
+ * ```
32
+ */
33
+ export type AuditCategory = "auth" | "authz" | "workflow" | "node" | "trigger" | "config" | "system" | "security";
34
+ export type AuditSeverity = "info" | "warn" | "error" | "critical";
35
+ export interface AuditEntry {
36
+ /** Unique entry ID */
37
+ id: string;
38
+ /** ISO 8601 timestamp */
39
+ timestamp: string;
40
+ /** Audit category */
41
+ category: AuditCategory;
42
+ /** Severity level */
43
+ severity: AuditSeverity;
44
+ /** Action performed */
45
+ action: string;
46
+ /** Whether the action succeeded */
47
+ success: boolean;
48
+ /** Actor who performed the action */
49
+ actor?: {
50
+ sub: string;
51
+ name?: string;
52
+ ip?: string;
53
+ userAgent?: string;
54
+ provider?: string;
55
+ };
56
+ /** Target resource */
57
+ resource?: {
58
+ type: string;
59
+ id: string;
60
+ name?: string;
61
+ };
62
+ /** Additional details */
63
+ details?: Record<string, unknown>;
64
+ /** Request ID for correlation */
65
+ requestId?: string;
66
+ /** Duration in ms (for execution events) */
67
+ durationMs?: number;
68
+ /** Error information if action failed */
69
+ error?: {
70
+ message: string;
71
+ code?: string | number;
72
+ };
73
+ }
74
+ /**
75
+ * Interface for audit log output destinations
76
+ */
77
+ export interface AuditSink {
78
+ /** Unique name for this sink */
79
+ readonly name: string;
80
+ /** Write an audit entry */
81
+ write(entry: AuditEntry): Promise<void> | void;
82
+ /** Flush any buffered entries */
83
+ flush?(): Promise<void>;
84
+ /** Close the sink */
85
+ close?(): Promise<void>;
86
+ }
87
+ export interface AuditLoggerConfig {
88
+ /** Output sinks for audit entries */
89
+ sinks: AuditSink[];
90
+ /** Include request ID in entries (default: true) */
91
+ includeRequestId?: boolean;
92
+ /** Minimum severity to log (default: "info") */
93
+ minSeverity?: AuditSeverity;
94
+ /** Buffer size before flushing (default: 100) */
95
+ bufferSize?: number;
96
+ /** Auto-flush interval in ms (default: 5000) */
97
+ flushIntervalMs?: number;
98
+ /** Service name for identification */
99
+ serviceName?: string;
100
+ }
101
+ export declare class AuditLogger {
102
+ private config;
103
+ private buffer;
104
+ private flushTimer;
105
+ private entryCounter;
106
+ private pendingFlush;
107
+ constructor(config: AuditLoggerConfig);
108
+ /**
109
+ * Log an authentication event
110
+ */
111
+ logAuth(params: {
112
+ action: "login" | "logout" | "token_refresh" | "api_key_verify";
113
+ success: boolean;
114
+ identity?: {
115
+ sub: string;
116
+ provider?: string;
117
+ name?: string;
118
+ };
119
+ ip?: string;
120
+ userAgent?: string;
121
+ error?: string;
122
+ requestId?: string;
123
+ }): void;
124
+ /**
125
+ * Log an authorization event
126
+ */
127
+ logAuthz(params: {
128
+ action: string;
129
+ resource: {
130
+ type: string;
131
+ id: string;
132
+ name?: string;
133
+ };
134
+ roles: string[];
135
+ allowed: boolean;
136
+ actor: {
137
+ sub: string;
138
+ name?: string;
139
+ ip?: string;
140
+ };
141
+ requestId?: string;
142
+ }): void;
143
+ /**
144
+ * Log a workflow execution event
145
+ */
146
+ logWorkflowExecution(params: {
147
+ workflowName: string;
148
+ workflowPath: string;
149
+ success: boolean;
150
+ durationMs: number;
151
+ actor?: {
152
+ sub: string;
153
+ ip?: string;
154
+ };
155
+ error?: string;
156
+ requestId?: string;
157
+ }): void;
158
+ /**
159
+ * Log a configuration change event
160
+ */
161
+ logConfigChange(params: {
162
+ action: "create" | "update" | "delete";
163
+ resourceType: string;
164
+ resourceId: string;
165
+ actor: {
166
+ sub: string;
167
+ name?: string;
168
+ };
169
+ details?: Record<string, unknown>;
170
+ }): void;
171
+ /**
172
+ * Log a security event
173
+ */
174
+ logSecurityEvent(params: {
175
+ action: string;
176
+ severity: AuditSeverity;
177
+ details: Record<string, unknown>;
178
+ actor?: {
179
+ sub: string;
180
+ ip?: string;
181
+ };
182
+ requestId?: string;
183
+ }): void;
184
+ /**
185
+ * Core logging method
186
+ */
187
+ log(params: Omit<AuditEntry, "id" | "timestamp">): void;
188
+ /**
189
+ * Flush buffered entries to all sinks
190
+ */
191
+ flush(): Promise<void>;
192
+ /**
193
+ * Close the audit logger and flush remaining entries
194
+ */
195
+ close(): Promise<void>;
196
+ /**
197
+ * Get entry count since creation
198
+ */
199
+ getEntryCount(): number;
200
+ }
201
+ /**
202
+ * Console audit sink - outputs audit entries to stdout as JSON
203
+ */
204
+ export declare class ConsoleAuditSink implements AuditSink {
205
+ readonly name = "console";
206
+ write(entry: AuditEntry): void;
207
+ }
208
+ /**
209
+ * File audit sink - appends audit entries as JSONL to a file
210
+ */
211
+ export declare class FileAuditSink implements AuditSink {
212
+ readonly name = "file";
213
+ private filePath;
214
+ private buffer;
215
+ private initialized;
216
+ constructor(config: {
217
+ path: string;
218
+ });
219
+ write(entry: AuditEntry): Promise<void>;
220
+ flush(): Promise<void>;
221
+ close(): Promise<void>;
222
+ }
223
+ /**
224
+ * In-memory audit sink - stores entries in memory (useful for testing)
225
+ */
226
+ export declare class InMemoryAuditSink implements AuditSink {
227
+ readonly name = "memory";
228
+ private entries;
229
+ private maxEntries;
230
+ constructor(maxEntries?: number);
231
+ write(entry: AuditEntry): void;
232
+ getEntries(): AuditEntry[];
233
+ query(filter: {
234
+ category?: AuditCategory;
235
+ severity?: AuditSeverity;
236
+ actorSub?: string;
237
+ action?: string;
238
+ since?: string;
239
+ limit?: number;
240
+ }): AuditEntry[];
241
+ clear(): void;
242
+ }
@@ -0,0 +1,317 @@
1
+ /**
2
+ * Audit Logger for Blok Framework
3
+ *
4
+ * Provides comprehensive audit logging for security and compliance:
5
+ * - All authentication attempts (success and failure)
6
+ * - Authorization decisions
7
+ * - Workflow executions
8
+ * - Node executions
9
+ * - Configuration changes
10
+ * - System events
11
+ *
12
+ * Supports multiple output destinations via AuditSink interface.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const audit = new AuditLogger({
17
+ * sinks: [
18
+ * new ConsoleAuditSink(),
19
+ * new FileAuditSink({ path: "./audit.log" }),
20
+ * ],
21
+ * includeTimestamp: true,
22
+ * includeRequestId: true,
23
+ * });
24
+ *
25
+ * audit.logAuth({
26
+ * action: "login",
27
+ * success: true,
28
+ * identity: { sub: "user-123", provider: "jwt" },
29
+ * ip: "192.168.1.1",
30
+ * });
31
+ * ```
32
+ */
33
+ import { appendFile, mkdir } from "node:fs/promises";
34
+ import { dirname } from "node:path";
35
+ const SEVERITY_ORDER = {
36
+ info: 0,
37
+ warn: 1,
38
+ error: 2,
39
+ critical: 3,
40
+ };
41
+ export class AuditLogger {
42
+ config;
43
+ buffer = [];
44
+ flushTimer = null;
45
+ entryCounter = 0;
46
+ pendingFlush = null;
47
+ constructor(config) {
48
+ this.config = {
49
+ includeRequestId: true,
50
+ minSeverity: "info",
51
+ bufferSize: 100,
52
+ flushIntervalMs: 5000,
53
+ serviceName: "blok",
54
+ ...config,
55
+ };
56
+ // Start auto-flush timer
57
+ if (this.config.flushIntervalMs > 0) {
58
+ this.flushTimer = setInterval(() => this.flush(), this.config.flushIntervalMs);
59
+ // Don't block Node.js from exiting
60
+ if (this.flushTimer.unref) {
61
+ this.flushTimer.unref();
62
+ }
63
+ }
64
+ }
65
+ /**
66
+ * Log an authentication event
67
+ */
68
+ logAuth(params) {
69
+ this.log({
70
+ category: "auth",
71
+ severity: params.success ? "info" : "warn",
72
+ action: params.action,
73
+ success: params.success,
74
+ actor: params.identity
75
+ ? {
76
+ sub: params.identity.sub,
77
+ name: params.identity.name,
78
+ ip: params.ip,
79
+ userAgent: params.userAgent,
80
+ provider: params.identity.provider,
81
+ }
82
+ : undefined,
83
+ error: params.error ? { message: params.error } : undefined,
84
+ requestId: params.requestId,
85
+ });
86
+ }
87
+ /**
88
+ * Log an authorization event
89
+ */
90
+ logAuthz(params) {
91
+ this.log({
92
+ category: "authz",
93
+ severity: params.allowed ? "info" : "warn",
94
+ action: params.action,
95
+ success: params.allowed,
96
+ actor: params.actor,
97
+ resource: params.resource,
98
+ details: { roles: params.roles },
99
+ requestId: params.requestId,
100
+ });
101
+ }
102
+ /**
103
+ * Log a workflow execution event
104
+ */
105
+ logWorkflowExecution(params) {
106
+ this.log({
107
+ category: "workflow",
108
+ severity: params.success ? "info" : "error",
109
+ action: "execute",
110
+ success: params.success,
111
+ actor: params.actor,
112
+ resource: {
113
+ type: "workflow",
114
+ id: params.workflowPath,
115
+ name: params.workflowName,
116
+ },
117
+ durationMs: params.durationMs,
118
+ error: params.error ? { message: params.error } : undefined,
119
+ requestId: params.requestId,
120
+ });
121
+ }
122
+ /**
123
+ * Log a configuration change event
124
+ */
125
+ logConfigChange(params) {
126
+ this.log({
127
+ category: "config",
128
+ severity: "warn",
129
+ action: `config.${params.action}`,
130
+ success: true,
131
+ actor: params.actor,
132
+ resource: {
133
+ type: params.resourceType,
134
+ id: params.resourceId,
135
+ },
136
+ details: params.details,
137
+ });
138
+ }
139
+ /**
140
+ * Log a security event
141
+ */
142
+ logSecurityEvent(params) {
143
+ this.log({
144
+ category: "security",
145
+ severity: params.severity,
146
+ action: params.action,
147
+ success: false,
148
+ actor: params.actor,
149
+ details: params.details,
150
+ requestId: params.requestId,
151
+ });
152
+ }
153
+ /**
154
+ * Core logging method
155
+ */
156
+ log(params) {
157
+ // Check severity threshold
158
+ if (SEVERITY_ORDER[params.severity] < SEVERITY_ORDER[this.config.minSeverity]) {
159
+ return;
160
+ }
161
+ const entry = {
162
+ id: `${this.config.serviceName}-${Date.now()}-${++this.entryCounter}`,
163
+ timestamp: new Date().toISOString(),
164
+ ...params,
165
+ };
166
+ this.buffer.push(entry);
167
+ // Flush if buffer is full
168
+ if (this.buffer.length >= this.config.bufferSize) {
169
+ this.pendingFlush = this.flush();
170
+ }
171
+ }
172
+ /**
173
+ * Flush buffered entries to all sinks
174
+ */
175
+ async flush() {
176
+ // Wait for any auto-triggered flush to complete
177
+ if (this.pendingFlush) {
178
+ const pending = this.pendingFlush;
179
+ this.pendingFlush = null;
180
+ await pending;
181
+ }
182
+ if (this.buffer.length === 0)
183
+ return;
184
+ const entries = [...this.buffer];
185
+ this.buffer = [];
186
+ for (const sink of this.config.sinks) {
187
+ for (const entry of entries) {
188
+ try {
189
+ await sink.write(entry);
190
+ }
191
+ catch {
192
+ // Don't let sink errors break the audit log
193
+ }
194
+ }
195
+ try {
196
+ await sink.flush?.();
197
+ }
198
+ catch {
199
+ // Silent
200
+ }
201
+ }
202
+ }
203
+ /**
204
+ * Close the audit logger and flush remaining entries
205
+ */
206
+ async close() {
207
+ if (this.flushTimer) {
208
+ clearInterval(this.flushTimer);
209
+ this.flushTimer = null;
210
+ }
211
+ await this.flush();
212
+ for (const sink of this.config.sinks) {
213
+ try {
214
+ await sink.close?.();
215
+ }
216
+ catch {
217
+ // Silent
218
+ }
219
+ }
220
+ }
221
+ /**
222
+ * Get entry count since creation
223
+ */
224
+ getEntryCount() {
225
+ return this.entryCounter;
226
+ }
227
+ }
228
+ /**
229
+ * Console audit sink - outputs audit entries to stdout as JSON
230
+ */
231
+ export class ConsoleAuditSink {
232
+ name = "console";
233
+ write(entry) {
234
+ const output = JSON.stringify(entry);
235
+ if (entry.severity === "error" || entry.severity === "critical") {
236
+ console.error(`[AUDIT] ${output}`);
237
+ }
238
+ else if (entry.severity === "warn") {
239
+ console.warn(`[AUDIT] ${output}`);
240
+ }
241
+ else {
242
+ console.log(`[AUDIT] ${output}`);
243
+ }
244
+ }
245
+ }
246
+ /**
247
+ * File audit sink - appends audit entries as JSONL to a file
248
+ */
249
+ export class FileAuditSink {
250
+ name = "file";
251
+ filePath;
252
+ buffer = [];
253
+ initialized = false;
254
+ constructor(config) {
255
+ this.filePath = config.path;
256
+ }
257
+ async write(entry) {
258
+ this.buffer.push(JSON.stringify(entry));
259
+ }
260
+ async flush() {
261
+ if (this.buffer.length === 0)
262
+ return;
263
+ if (!this.initialized) {
264
+ await mkdir(dirname(this.filePath), { recursive: true });
265
+ this.initialized = true;
266
+ }
267
+ const data = this.buffer.join("\n") + "\n";
268
+ this.buffer = [];
269
+ await appendFile(this.filePath, data, "utf-8");
270
+ }
271
+ async close() {
272
+ await this.flush();
273
+ }
274
+ }
275
+ /**
276
+ * In-memory audit sink - stores entries in memory (useful for testing)
277
+ */
278
+ export class InMemoryAuditSink {
279
+ name = "memory";
280
+ entries = [];
281
+ maxEntries;
282
+ constructor(maxEntries = 10000) {
283
+ this.maxEntries = maxEntries;
284
+ }
285
+ write(entry) {
286
+ this.entries.push(entry);
287
+ // Ring buffer behavior
288
+ if (this.entries.length > this.maxEntries) {
289
+ this.entries.shift();
290
+ }
291
+ }
292
+ getEntries() {
293
+ return [...this.entries];
294
+ }
295
+ query(filter) {
296
+ let results = this.entries;
297
+ if (filter.category)
298
+ results = results.filter((e) => e.category === filter.category);
299
+ if (filter.severity)
300
+ results = results.filter((e) => e.severity === filter.severity);
301
+ if (filter.actorSub)
302
+ results = results.filter((e) => e.actor?.sub === filter.actorSub);
303
+ if (filter.action)
304
+ results = results.filter((e) => e.action === filter.action);
305
+ if (filter.since) {
306
+ const since = filter.since;
307
+ results = results.filter((e) => e.timestamp >= since);
308
+ }
309
+ if (filter.limit)
310
+ results = results.slice(-filter.limit);
311
+ return results;
312
+ }
313
+ clear() {
314
+ this.entries = [];
315
+ }
316
+ }
317
+ //# sourceMappingURL=AuditLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuditLogger.js","sourceRoot":"","sources":["../../src/security/AuditLogger.ts"],"names":[],"mappings":"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"}