@blokjs/runner 0.6.20 → 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,380 +0,0 @@
1
- /**
2
- * Attribute-Based Access Control (ABAC) for Blok
3
- *
4
- * Provides fine-grained, attribute-driven access control that complements RBAC:
5
- * - Policies evaluate attributes of subject, resource, action, and environment
6
- * - Supports logical operators (AND, OR, NOT) for complex conditions
7
- * - Supports comparison operators (equals, not_equals, in, not_in, contains, matches, gt, lt, gte, lte, between)
8
- * - Supports attribute-to-attribute comparison via `valueRef` (e.g., resource.owner == subject.sub)
9
- * - Integrates with AuthIdentity claims and RBAC roles
10
- * - JSON-serializable policies for persistence and external management
11
- *
12
- * @example
13
- * ```typescript
14
- * const engine = new ABACEngine();
15
- *
16
- * engine.addPolicy({
17
- * id: "work-hours-only",
18
- * description: "Allow workflow execution only during business hours",
19
- * effect: "allow",
20
- * target: {
21
- * resource: "workflow",
22
- * actions: ["execute"],
23
- * },
24
- * conditions: {
25
- * all: [
26
- * { attribute: "environment.hour", operator: "gte", value: 9 },
27
- * { attribute: "environment.hour", operator: "lt", value: 17 },
28
- * { attribute: "subject.department", operator: "equals", value: "engineering" },
29
- * ],
30
- * },
31
- * });
32
- *
33
- * const result = engine.evaluate({
34
- * subject: { sub: "user-1", roles: ["developer"], department: "engineering" },
35
- * resource: { type: "workflow", id: "/api/users" },
36
- * action: "execute",
37
- * environment: { hour: 14, ip: "10.0.0.1" },
38
- * });
39
- * ```
40
- */
41
- // ────────────────────────────── Engine ──────────────────────────────
42
- export class ABACEngine {
43
- policies = new Map();
44
- defaultEffect = "deny";
45
- constructor(options) {
46
- if (options?.defaultEffect) {
47
- this.defaultEffect = options.defaultEffect;
48
- }
49
- }
50
- /**
51
- * Add or update a policy.
52
- */
53
- addPolicy(policy) {
54
- this.policies.set(policy.id, policy);
55
- }
56
- /**
57
- * Remove a policy by ID.
58
- */
59
- removePolicy(id) {
60
- this.policies.delete(id);
61
- }
62
- /**
63
- * Get a policy by ID.
64
- */
65
- getPolicy(id) {
66
- return this.policies.get(id);
67
- }
68
- /**
69
- * Get all policies, sorted by priority (highest first).
70
- */
71
- getPolicies() {
72
- return Array.from(this.policies.values()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
73
- }
74
- /**
75
- * Evaluate an access request against all policies.
76
- *
77
- * Policy evaluation order:
78
- * 1. Policies are sorted by priority (highest first)
79
- * 2. Only enabled policies are considered
80
- * 3. Only policies whose target matches the request are considered
81
- * 4. The first matching "deny" policy short-circuits with denial
82
- * 5. Otherwise, at least one matching "allow" policy is required
83
- * 6. If no policy matches, the default effect applies
84
- */
85
- evaluate(request) {
86
- const sortedPolicies = this.getPolicies();
87
- const evaluatedPolicies = [];
88
- let hasAllow = false;
89
- let allowPolicy;
90
- for (const policy of sortedPolicies) {
91
- // Skip disabled policies
92
- if (policy.enabled === false)
93
- continue;
94
- // Check if policy target matches the request
95
- if (!this.matchesTarget(policy.target, request)) {
96
- evaluatedPolicies.push({ policyId: policy.id, effect: policy.effect, matched: false });
97
- continue;
98
- }
99
- // Evaluate conditions
100
- const conditionsMet = this.evaluateConditionGroup(policy.conditions, request);
101
- evaluatedPolicies.push({ policyId: policy.id, effect: policy.effect, matched: conditionsMet });
102
- if (conditionsMet) {
103
- // Deny takes precedence — short-circuit
104
- if (policy.effect === "deny") {
105
- return {
106
- allowed: false,
107
- matchedPolicy: policy,
108
- evaluatedPolicies,
109
- reason: `Denied by policy '${policy.id}'${policy.description ? `: ${policy.description}` : ""}`,
110
- };
111
- }
112
- // Track the first matching allow
113
- if (!hasAllow) {
114
- hasAllow = true;
115
- allowPolicy = policy;
116
- }
117
- }
118
- }
119
- if (hasAllow && allowPolicy) {
120
- return {
121
- allowed: true,
122
- matchedPolicy: allowPolicy,
123
- evaluatedPolicies,
124
- reason: `Allowed by policy '${allowPolicy.id}'${allowPolicy.description ? `: ${allowPolicy.description}` : ""}`,
125
- };
126
- }
127
- // No matching policy — use default
128
- const allowed = this.defaultEffect === "allow";
129
- return {
130
- allowed,
131
- evaluatedPolicies,
132
- reason: allowed ? "No matching policy; default effect is allow" : "No matching policy; default effect is deny",
133
- };
134
- }
135
- /**
136
- * Export all policies as JSON.
137
- */
138
- toJSON() {
139
- return {
140
- policies: Array.from(this.policies.values()),
141
- defaultEffect: this.defaultEffect,
142
- };
143
- }
144
- /**
145
- * Load policies from JSON (replaces all existing policies).
146
- */
147
- fromJSON(config) {
148
- this.policies.clear();
149
- for (const policy of config.policies) {
150
- this.policies.set(policy.id, policy);
151
- }
152
- if (config.defaultEffect) {
153
- this.defaultEffect = config.defaultEffect;
154
- }
155
- }
156
- // ──────────────────── Target Matching ────────────────────
157
- matchesTarget(target, request) {
158
- if (!target)
159
- return true;
160
- // Check resource type
161
- if (target.resource && target.resource !== "*") {
162
- if (target.resource !== request.resource.type)
163
- return false;
164
- }
165
- // Check resource pattern
166
- if (target.resourcePattern) {
167
- if (!this.matchesPattern(request.resource.id, target.resourcePattern))
168
- return false;
169
- }
170
- // Check action
171
- if (target.actions && target.actions.length > 0) {
172
- if (!target.actions.includes(request.action) && !target.actions.includes("*"))
173
- return false;
174
- }
175
- return true;
176
- }
177
- // ──────────────────── Condition Evaluation ────────────────────
178
- evaluateConditionGroup(group, request) {
179
- // A group with no clauses is treated as "always true"
180
- const hasAny = group.all || group.any || group.none;
181
- if (!hasAny)
182
- return true;
183
- // ALL: every item must be true
184
- if (group.all) {
185
- for (const item of group.all) {
186
- if (!this.evaluateItem(item, request))
187
- return false;
188
- }
189
- }
190
- // ANY: at least one must be true
191
- if (group.any) {
192
- let anyTrue = false;
193
- for (const item of group.any) {
194
- if (this.evaluateItem(item, request)) {
195
- anyTrue = true;
196
- break;
197
- }
198
- }
199
- if (!anyTrue)
200
- return false;
201
- }
202
- // NONE: no item may be true
203
- if (group.none) {
204
- for (const item of group.none) {
205
- if (this.evaluateItem(item, request))
206
- return false;
207
- }
208
- }
209
- return true;
210
- }
211
- evaluateItem(item, request) {
212
- // Distinguish condition from group: conditions have "attribute"
213
- if ("attribute" in item) {
214
- return this.evaluateCondition(item, request);
215
- }
216
- return this.evaluateConditionGroup(item, request);
217
- }
218
- evaluateCondition(condition, request) {
219
- const attributeValue = this.resolveAttribute(condition.attribute, request);
220
- // If valueRef is set, resolve the comparison value from another attribute
221
- const comparisonValue = condition.valueRef ? this.resolveAttribute(condition.valueRef, request) : condition.value;
222
- return this.compare(attributeValue, condition.operator, comparisonValue);
223
- }
224
- // ──────────────────── Attribute Resolution ────────────────────
225
- resolveAttribute(path, request) {
226
- const segments = path.split(".");
227
- if (segments.length === 0)
228
- return undefined;
229
- const root = segments[0];
230
- const rest = segments.slice(1);
231
- let obj;
232
- switch (root) {
233
- case "subject":
234
- obj = request.subject;
235
- break;
236
- case "resource":
237
- obj = request.resource;
238
- break;
239
- case "action":
240
- // "action" with no sub-path resolves to the action string itself
241
- return rest.length === 0 ? request.action : undefined;
242
- case "environment":
243
- obj = request.environment;
244
- break;
245
- default:
246
- return undefined;
247
- }
248
- // Traverse the rest of the path
249
- for (const segment of rest) {
250
- if (obj === null || obj === undefined)
251
- return undefined;
252
- if (typeof obj === "object") {
253
- obj = obj[segment];
254
- }
255
- else {
256
- return undefined;
257
- }
258
- }
259
- return obj;
260
- }
261
- // ──────────────────── Comparison Operators ────────────────────
262
- compare(actual, operator, expected) {
263
- switch (operator) {
264
- case "equals":
265
- return actual === expected;
266
- case "not_equals":
267
- return actual !== expected;
268
- case "in":
269
- return Array.isArray(expected) && expected.includes(actual);
270
- case "not_in":
271
- return Array.isArray(expected) && !expected.includes(actual);
272
- case "contains":
273
- if (Array.isArray(actual))
274
- return actual.includes(expected);
275
- if (typeof actual === "string" && typeof expected === "string")
276
- return actual.includes(expected);
277
- return false;
278
- case "not_contains":
279
- if (Array.isArray(actual))
280
- return !actual.includes(expected);
281
- if (typeof actual === "string" && typeof expected === "string")
282
- return !actual.includes(expected);
283
- return true;
284
- case "matches":
285
- if (typeof actual !== "string" || typeof expected !== "string")
286
- return false;
287
- try {
288
- return new RegExp(expected).test(actual);
289
- }
290
- catch {
291
- return false;
292
- }
293
- case "gt":
294
- return typeof actual === "number" && typeof expected === "number" && actual > expected;
295
- case "lt":
296
- return typeof actual === "number" && typeof expected === "number" && actual < expected;
297
- case "gte":
298
- return typeof actual === "number" && typeof expected === "number" && actual >= expected;
299
- case "lte":
300
- return typeof actual === "number" && typeof expected === "number" && actual <= expected;
301
- case "between": {
302
- if (typeof actual !== "number")
303
- return false;
304
- if (!Array.isArray(expected) || expected.length !== 2)
305
- return false;
306
- const [low, high] = expected;
307
- return typeof low === "number" && typeof high === "number" && actual >= low && actual <= high;
308
- }
309
- case "exists":
310
- return actual !== undefined && actual !== null;
311
- case "not_exists":
312
- return actual === undefined || actual === null;
313
- default:
314
- return false;
315
- }
316
- }
317
- // ──────────────────── Utility ────────────────────
318
- matchesPattern(value, pattern) {
319
- if (pattern === "*")
320
- return true;
321
- const regexStr = pattern.replace(/\*/g, ".*").replace(/\?/g, ".");
322
- const regex = new RegExp(`^${regexStr}$`);
323
- return regex.test(value);
324
- }
325
- }
326
- /**
327
- * Create a preconfigured ABAC engine with common policies.
328
- */
329
- export function createDefaultABAC() {
330
- const engine = new ABACEngine();
331
- // Policy: Admin override — admins always get access
332
- engine.addPolicy({
333
- id: "admin-override",
334
- description: "Admin role bypasses all attribute checks",
335
- effect: "allow",
336
- priority: 1000,
337
- conditions: {
338
- any: [{ attribute: "subject.roles", operator: "contains", value: "admin" }],
339
- },
340
- });
341
- // Policy: Deny access from blocked IPs
342
- engine.addPolicy({
343
- id: "block-denied-ips",
344
- description: "Deny access from blocked IP ranges",
345
- effect: "deny",
346
- priority: 900,
347
- conditions: {
348
- any: [{ attribute: "environment.blocked", operator: "equals", value: true }],
349
- },
350
- });
351
- // Policy: Allow service accounts to execute workflows
352
- engine.addPolicy({
353
- id: "service-execute",
354
- description: "Service accounts can execute workflows",
355
- effect: "allow",
356
- priority: 100,
357
- target: {
358
- resource: "workflow",
359
- actions: ["execute"],
360
- },
361
- conditions: {
362
- all: [{ attribute: "subject.roles", operator: "contains", value: "service" }],
363
- },
364
- });
365
- // Policy: Resource owner full access (attribute-to-attribute comparison)
366
- engine.addPolicy({
367
- id: "resource-owner-access",
368
- description: "Resource owners have full access to their resources",
369
- effect: "allow",
370
- priority: 500,
371
- conditions: {
372
- all: [
373
- { attribute: "resource.owner", operator: "exists" },
374
- { attribute: "resource.owner", operator: "equals", valueRef: "subject.sub" },
375
- ],
376
- },
377
- });
378
- return engine;
379
- }
380
- //# sourceMappingURL=ABAC.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ABAC.js","sourceRoot":"","sources":["../../src/security/ABAC.ts"],"names":[],"mappings":"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"}
@@ -1,242 +0,0 @@
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
- }