@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,135 +0,0 @@
1
- /**
2
- * AWS CloudWatch Integration for Blok
3
- *
4
- * Sends metrics to CloudWatch Metrics and logs to CloudWatch Logs.
5
- * Traces are exported via OTLP to the AWS Distro for OpenTelemetry (ADOT)
6
- * Collector, which forwards them to AWS X-Ray.
7
- *
8
- * Uses lazy dynamic imports so AWS SDK packages are optional peer
9
- * dependencies. If the SDK is not installed the integration silently
10
- * degrades (init returns false).
11
- *
12
- * Supported transports:
13
- * - **Metrics** – CloudWatch PutMetricData (via @aws-sdk/client-cloudwatch)
14
- * - **Logs** – CloudWatch Logs PutLogEvents (via @aws-sdk/client-cloudwatch-logs)
15
- * - **Traces** – OTLP → ADOT Collector → X-Ray (reuses TracingBootstrap)
16
- *
17
- * @example
18
- * ```typescript
19
- * import { CloudWatchIntegration } from "@blokjs/runner";
20
- *
21
- * const cw = new CloudWatchIntegration({
22
- * region: "us-east-1",
23
- * serviceName: "blok-http",
24
- * logGroupName: "/blok/workflows",
25
- * namespace: "Blok",
26
- * });
27
- *
28
- * await cw.init();
29
- *
30
- * // Send a custom metric
31
- * await cw.putMetric("WorkflowDuration", 42, "Milliseconds");
32
- *
33
- * // Send a structured log entry
34
- * await cw.putLog({ level: "info", message: "workflow completed", workflowName: "get-user" });
35
- *
36
- * // Enable OTLP traces via ADOT Collector
37
- * const cw = new CloudWatchIntegration({
38
- * region: "us-east-1",
39
- * serviceName: "blok-http",
40
- * enableTracing: true,
41
- * adotEndpoint: "http://localhost:4318/v1/traces",
42
- * });
43
- * ```
44
- */
45
- export interface CloudWatchConfig {
46
- /** AWS region (e.g. "us-east-1"). Falls back to AWS_REGION env var. */
47
- region?: string;
48
- /** Blok service name (used in metric dimensions and log metadata) */
49
- serviceName: string;
50
- /** Service version */
51
- serviceVersion?: string;
52
- /** Environment label */
53
- environment?: string;
54
- /** CloudWatch Logs log group name (default: "/blok/workflows") */
55
- logGroupName?: string;
56
- /** CloudWatch Logs log stream name (default: serviceName-<date>) */
57
- logStreamName?: string;
58
- /** CloudWatch Metrics namespace (default: "Blok") */
59
- namespace?: string;
60
- /** Enable OTLP trace export via ADOT Collector → X-Ray */
61
- enableTracing?: boolean;
62
- /** ADOT Collector OTLP endpoint (default: http://localhost:4318/v1/traces) */
63
- adotEndpoint?: string;
64
- /** Trace sampling ratio (0.0 – 1.0, default: 1.0) */
65
- samplingRatio?: number;
66
- /** Enable debug logging */
67
- debug?: boolean;
68
- }
69
- /** Supported CloudWatch metric units */
70
- export type CloudWatchUnit = "Seconds" | "Microseconds" | "Milliseconds" | "Bytes" | "Kilobytes" | "Megabytes" | "Gigabytes" | "Bits" | "Percent" | "Count" | "Count/Second" | "None";
71
- export interface CloudWatchLogEntry {
72
- level: "debug" | "info" | "warn" | "error" | "fatal";
73
- message: string;
74
- [key: string]: unknown;
75
- }
76
- export interface CloudWatchStats {
77
- initialized: boolean;
78
- metricsPublished: number;
79
- logsPublished: number;
80
- metricErrors: number;
81
- logErrors: number;
82
- tracingEnabled: boolean;
83
- }
84
- export declare class CloudWatchIntegration {
85
- private config;
86
- private cwClient;
87
- private cwLogsClient;
88
- private initialized;
89
- private tracingInitialized;
90
- private tracingShutdown;
91
- private sequenceToken;
92
- private PutMetricDataCommand;
93
- private PutLogEventsCommand;
94
- private CreateLogGroupCommand;
95
- private CreateLogStreamCommand;
96
- private metricsPublished;
97
- private logsPublished;
98
- private metricErrors;
99
- private logErrors;
100
- constructor(config: CloudWatchConfig);
101
- /**
102
- * Initialize CloudWatch clients.
103
- * Returns false if AWS SDK packages are not installed.
104
- */
105
- init(): Promise<boolean>;
106
- /**
107
- * Publish a custom metric to CloudWatch.
108
- */
109
- putMetric(metricName: string, value: number, unit?: CloudWatchUnit, dimensions?: Record<string, string>): Promise<boolean>;
110
- /**
111
- * Publish workflow execution metrics (duration + error count).
112
- */
113
- recordWorkflowExecution(workflowName: string, durationMs: number, success: boolean): Promise<void>;
114
- /**
115
- * Send a structured log entry to CloudWatch Logs.
116
- */
117
- putLog(entry: CloudWatchLogEntry): Promise<boolean>;
118
- /**
119
- * Log a workflow error to CloudWatch Logs.
120
- */
121
- logWorkflowError(error: Error, context: {
122
- workflowName: string;
123
- workflowPath: string;
124
- requestId?: string;
125
- nodeName?: string;
126
- }): Promise<boolean>;
127
- private initTracing;
128
- isInitialized(): boolean;
129
- isTracingEnabled(): boolean;
130
- getStats(): CloudWatchStats;
131
- shutdown(): Promise<void>;
132
- flush(): Promise<void>;
133
- private getLogStreamName;
134
- private ensureLogDestination;
135
- }
@@ -1,293 +0,0 @@
1
- /**
2
- * AWS CloudWatch Integration for Blok
3
- *
4
- * Sends metrics to CloudWatch Metrics and logs to CloudWatch Logs.
5
- * Traces are exported via OTLP to the AWS Distro for OpenTelemetry (ADOT)
6
- * Collector, which forwards them to AWS X-Ray.
7
- *
8
- * Uses lazy dynamic imports so AWS SDK packages are optional peer
9
- * dependencies. If the SDK is not installed the integration silently
10
- * degrades (init returns false).
11
- *
12
- * Supported transports:
13
- * - **Metrics** – CloudWatch PutMetricData (via @aws-sdk/client-cloudwatch)
14
- * - **Logs** – CloudWatch Logs PutLogEvents (via @aws-sdk/client-cloudwatch-logs)
15
- * - **Traces** – OTLP → ADOT Collector → X-Ray (reuses TracingBootstrap)
16
- *
17
- * @example
18
- * ```typescript
19
- * import { CloudWatchIntegration } from "@blokjs/runner";
20
- *
21
- * const cw = new CloudWatchIntegration({
22
- * region: "us-east-1",
23
- * serviceName: "blok-http",
24
- * logGroupName: "/blok/workflows",
25
- * namespace: "Blok",
26
- * });
27
- *
28
- * await cw.init();
29
- *
30
- * // Send a custom metric
31
- * await cw.putMetric("WorkflowDuration", 42, "Milliseconds");
32
- *
33
- * // Send a structured log entry
34
- * await cw.putLog({ level: "info", message: "workflow completed", workflowName: "get-user" });
35
- *
36
- * // Enable OTLP traces via ADOT Collector
37
- * const cw = new CloudWatchIntegration({
38
- * region: "us-east-1",
39
- * serviceName: "blok-http",
40
- * enableTracing: true,
41
- * adotEndpoint: "http://localhost:4318/v1/traces",
42
- * });
43
- * ```
44
- */
45
- export class CloudWatchIntegration {
46
- config;
47
- cwClient = null;
48
- cwLogsClient = null;
49
- initialized = false;
50
- tracingInitialized = false;
51
- tracingShutdown = null;
52
- sequenceToken;
53
- // SDK constructors (loaded lazily)
54
- PutMetricDataCommand = null;
55
- PutLogEventsCommand = null;
56
- CreateLogGroupCommand = null;
57
- CreateLogStreamCommand = null;
58
- // stats
59
- metricsPublished = 0;
60
- logsPublished = 0;
61
- metricErrors = 0;
62
- logErrors = 0;
63
- constructor(config) {
64
- this.config = {
65
- region: process.env.AWS_REGION || "us-east-1",
66
- serviceVersion: "0.0.1",
67
- environment: process.env.NODE_ENV || "development",
68
- logGroupName: "/blok/workflows",
69
- namespace: "Blok",
70
- enableTracing: false,
71
- adotEndpoint: "http://localhost:4318/v1/traces",
72
- samplingRatio: 1.0,
73
- debug: false,
74
- ...config,
75
- };
76
- }
77
- /**
78
- * Initialize CloudWatch clients.
79
- * Returns false if AWS SDK packages are not installed.
80
- */
81
- async init() {
82
- if (this.initialized)
83
- return true;
84
- try {
85
- // Dynamically load AWS SDK v3 packages
86
- // @ts-expect-error: optional peer dependency
87
- const cwMod = await import("@aws-sdk/client-cloudwatch");
88
- // @ts-expect-error: optional peer dependency
89
- const cwLogsMod = await import("@aws-sdk/client-cloudwatch-logs");
90
- const regionConfig = { region: this.config.region };
91
- this.cwClient = new cwMod.CloudWatchClient(regionConfig);
92
- this.cwLogsClient = new cwLogsMod.CloudWatchLogsClient(regionConfig);
93
- this.PutMetricDataCommand = cwMod.PutMetricDataCommand;
94
- this.PutLogEventsCommand = cwLogsMod.PutLogEventsCommand;
95
- this.CreateLogGroupCommand = cwLogsMod.CreateLogGroupCommand;
96
- this.CreateLogStreamCommand = cwLogsMod.CreateLogStreamCommand;
97
- // Ensure log group & stream exist
98
- await this.ensureLogDestination();
99
- this.initialized = true;
100
- // Optionally bootstrap OTLP tracing for X-Ray via ADOT
101
- if (this.config.enableTracing) {
102
- await this.initTracing();
103
- }
104
- return true;
105
- }
106
- catch {
107
- // AWS SDK packages not installed — degrade gracefully
108
- return false;
109
- }
110
- }
111
- /* ------------------------------------------------------------------ */
112
- /* Metrics */
113
- /* ------------------------------------------------------------------ */
114
- /**
115
- * Publish a custom metric to CloudWatch.
116
- */
117
- async putMetric(metricName, value, unit = "None", dimensions) {
118
- if (!this.cwClient || !this.PutMetricDataCommand)
119
- return false;
120
- try {
121
- const dims = {
122
- Service: this.config.serviceName,
123
- Environment: this.config.environment || "development",
124
- ...dimensions,
125
- };
126
- const command = new this.PutMetricDataCommand({
127
- Namespace: this.config.namespace,
128
- MetricData: [
129
- {
130
- MetricName: metricName,
131
- Value: value,
132
- Unit: unit,
133
- Timestamp: new Date(),
134
- Dimensions: Object.entries(dims).map(([Name, Value]) => ({
135
- Name,
136
- Value,
137
- })),
138
- },
139
- ],
140
- });
141
- await this.cwClient.send(command);
142
- this.metricsPublished++;
143
- return true;
144
- }
145
- catch {
146
- this.metricErrors++;
147
- return false;
148
- }
149
- }
150
- /**
151
- * Publish workflow execution metrics (duration + error count).
152
- */
153
- async recordWorkflowExecution(workflowName, durationMs, success) {
154
- await this.putMetric("WorkflowDuration", durationMs, "Milliseconds", {
155
- Workflow: workflowName,
156
- });
157
- if (!success) {
158
- await this.putMetric("WorkflowErrors", 1, "Count", {
159
- Workflow: workflowName,
160
- });
161
- }
162
- }
163
- /* ------------------------------------------------------------------ */
164
- /* Logs */
165
- /* ------------------------------------------------------------------ */
166
- /**
167
- * Send a structured log entry to CloudWatch Logs.
168
- */
169
- async putLog(entry) {
170
- if (!this.cwLogsClient || !this.PutLogEventsCommand)
171
- return false;
172
- try {
173
- const event = {
174
- timestamp: Date.now(),
175
- message: JSON.stringify({
176
- ...entry,
177
- service: this.config.serviceName,
178
- version: this.config.serviceVersion,
179
- environment: this.config.environment,
180
- }),
181
- };
182
- const command = new this.PutLogEventsCommand({
183
- logGroupName: this.config.logGroupName,
184
- logStreamName: this.getLogStreamName(),
185
- logEvents: [event],
186
- sequenceToken: this.sequenceToken,
187
- });
188
- const result = await this.cwLogsClient.send(command);
189
- this.sequenceToken = result?.nextSequenceToken;
190
- this.logsPublished++;
191
- return true;
192
- }
193
- catch {
194
- this.logErrors++;
195
- return false;
196
- }
197
- }
198
- /**
199
- * Log a workflow error to CloudWatch Logs.
200
- */
201
- async logWorkflowError(error, context) {
202
- return this.putLog({
203
- level: "error",
204
- message: error.message,
205
- errorName: error.name,
206
- stack: error.stack,
207
- ...context,
208
- });
209
- }
210
- /* ------------------------------------------------------------------ */
211
- /* Tracing (OTLP → ADOT → X-Ray) */
212
- /* ------------------------------------------------------------------ */
213
- async initTracing() {
214
- try {
215
- const { bootstrapTracing } = await import("../monitoring/TracingBootstrap");
216
- const result = await bootstrapTracing({
217
- serviceName: this.config.serviceName,
218
- serviceVersion: this.config.serviceVersion,
219
- exporter: "otlp",
220
- endpoint: this.config.adotEndpoint || "http://localhost:4318/v1/traces",
221
- headers: {},
222
- samplingRatio: this.config.samplingRatio,
223
- });
224
- if (!result)
225
- return false;
226
- this.tracingShutdown = result.shutdown;
227
- this.tracingInitialized = true;
228
- return true;
229
- }
230
- catch {
231
- return false;
232
- }
233
- }
234
- /* ------------------------------------------------------------------ */
235
- /* Lifecycle */
236
- /* ------------------------------------------------------------------ */
237
- isInitialized() {
238
- return this.initialized;
239
- }
240
- isTracingEnabled() {
241
- return this.tracingInitialized;
242
- }
243
- getStats() {
244
- return {
245
- initialized: this.initialized,
246
- metricsPublished: this.metricsPublished,
247
- logsPublished: this.logsPublished,
248
- metricErrors: this.metricErrors,
249
- logErrors: this.logErrors,
250
- tracingEnabled: this.tracingInitialized,
251
- };
252
- }
253
- async shutdown() {
254
- if (this.tracingShutdown) {
255
- await this.tracingShutdown();
256
- }
257
- this.initialized = false;
258
- this.tracingInitialized = false;
259
- }
260
- async flush() {
261
- // CloudWatch SDK calls are fire-and-forget; nothing buffered to flush.
262
- // Tracing flush is handled by TracingBootstrap.
263
- }
264
- /* ------------------------------------------------------------------ */
265
- /* Internal helpers */
266
- /* ------------------------------------------------------------------ */
267
- getLogStreamName() {
268
- if (this.config.logStreamName)
269
- return this.config.logStreamName;
270
- const date = new Date().toISOString().slice(0, 10); // YYYY-MM-DD
271
- return `${this.config.serviceName}-${date}`;
272
- }
273
- async ensureLogDestination() {
274
- if (!this.cwLogsClient || !this.CreateLogGroupCommand || !this.CreateLogStreamCommand)
275
- return;
276
- try {
277
- await this.cwLogsClient.send(new this.CreateLogGroupCommand({ logGroupName: this.config.logGroupName }));
278
- }
279
- catch {
280
- // ResourceAlreadyExistsException is expected
281
- }
282
- try {
283
- await this.cwLogsClient.send(new this.CreateLogStreamCommand({
284
- logGroupName: this.config.logGroupName,
285
- logStreamName: this.getLogStreamName(),
286
- }));
287
- }
288
- catch {
289
- // ResourceAlreadyExistsException is expected
290
- }
291
- }
292
- }
293
- //# sourceMappingURL=CloudWatchIntegration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CloudWatchIntegration.js","sourceRoot":"","sources":["../../src/integrations/CloudWatchIntegration.ts"],"names":[],"mappings":"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"}
@@ -1,153 +0,0 @@
1
- /**
2
- * Sentry Error Tracking Integration for Blok
3
- *
4
- * Provides error tracking and performance monitoring via Sentry.
5
- * Captures workflow execution errors, node failures, and trigger issues
6
- * with full context (workflow name, node, request ID, etc.).
7
- *
8
- * Uses a lightweight adapter pattern so Sentry SDK is loaded lazily
9
- * and the framework doesn't hard-depend on @sentry/node.
10
- *
11
- * @example
12
- * ```typescript
13
- * import { SentryIntegration } from "@blokjs/runner";
14
- *
15
- * const sentry = new SentryIntegration({
16
- * dsn: process.env.SENTRY_DSN!,
17
- * environment: process.env.NODE_ENV || "development",
18
- * release: "blok@1.0.0",
19
- * tracesSampleRate: 0.1,
20
- * });
21
- *
22
- * await sentry.init();
23
- *
24
- * // In error handler
25
- * sentry.captureWorkflowError(error, {
26
- * workflowName: "get-user",
27
- * workflowPath: "/users/:id",
28
- * requestId: ctx.id,
29
- * });
30
- * ```
31
- */
32
- export interface SentryConfig {
33
- /** Sentry DSN (Data Source Name) */
34
- dsn: string;
35
- /** Environment (e.g., "production", "staging", "development") */
36
- environment?: string;
37
- /** Release version */
38
- release?: string;
39
- /** Server name */
40
- serverName?: string;
41
- /** Sample rate for error events (0.0 to 1.0, default: 1.0) */
42
- sampleRate?: number;
43
- /** Sample rate for performance/transaction traces (0.0 to 1.0, default: 0.1) */
44
- tracesSampleRate?: number;
45
- /** Tags to add to all events */
46
- tags?: Record<string, string>;
47
- /** Enable debug mode */
48
- debug?: boolean;
49
- }
50
- export interface WorkflowErrorContext {
51
- workflowName: string;
52
- workflowPath: string;
53
- workflowVersion?: string;
54
- requestId?: string;
55
- nodeName?: string;
56
- nodeType?: string;
57
- triggerType?: string;
58
- durationMs?: number;
59
- userId?: string;
60
- }
61
- export interface SentryClient {
62
- captureException(error: Error, context?: Record<string, unknown>): string;
63
- captureMessage(message: string, level: "info" | "warning" | "error" | "fatal"): string;
64
- setTag(key: string, value: string): void;
65
- setUser(user: {
66
- id: string;
67
- email?: string;
68
- username?: string;
69
- } | null): void;
70
- startTransaction(context: {
71
- name: string;
72
- op: string;
73
- }): SentryTransaction;
74
- flush(timeout: number): Promise<boolean>;
75
- }
76
- export interface SentryTransaction {
77
- setTag(key: string, value: string): void;
78
- setData(key: string, value: unknown): void;
79
- finish(): void;
80
- startChild(context: {
81
- op: string;
82
- description: string;
83
- }): SentrySpan;
84
- }
85
- export interface SentrySpan {
86
- setTag(key: string, value: string): void;
87
- setData(key: string, value: unknown): void;
88
- setStatus(status: string): void;
89
- finish(): void;
90
- }
91
- export declare class SentryIntegration {
92
- private config;
93
- private client;
94
- private initialized;
95
- private eventCount;
96
- private errorCount;
97
- constructor(config: SentryConfig);
98
- /**
99
- * Initialize Sentry SDK (lazy-loads @sentry/node)
100
- */
101
- init(): Promise<boolean>;
102
- /**
103
- * Set a custom Sentry client (useful for testing)
104
- */
105
- setClient(client: SentryClient): void;
106
- /**
107
- * Capture a workflow execution error
108
- */
109
- captureWorkflowError(error: Error, context: WorkflowErrorContext): string | null;
110
- /**
111
- * Capture a node execution error
112
- */
113
- captureNodeError(error: Error, nodeName: string, nodeType: string, context?: {
114
- workflowName?: string;
115
- requestId?: string;
116
- }): string | null;
117
- /**
118
- * Capture a trigger error
119
- */
120
- captureTriggerError(error: Error, triggerType: string, context?: Record<string, unknown>): string | null;
121
- /**
122
- * Capture a warning message
123
- */
124
- captureWarning(message: string, context?: Record<string, unknown>): string | null;
125
- /**
126
- * Set current user context
127
- */
128
- setUser(user: {
129
- id: string;
130
- email?: string;
131
- username?: string;
132
- } | null): void;
133
- /**
134
- * Add a tag to all future events
135
- */
136
- setTag(key: string, value: string): void;
137
- /**
138
- * Flush pending events to Sentry
139
- */
140
- flush(timeoutMs?: number): Promise<boolean>;
141
- /**
142
- * Check if Sentry is initialized
143
- */
144
- isInitialized(): boolean;
145
- /**
146
- * Get stats about captured events
147
- */
148
- getStats(): {
149
- initialized: boolean;
150
- eventCount: number;
151
- errorCount: number;
152
- };
153
- }