@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,212 +0,0 @@
1
- /**
2
- * APMIntegration - Unified APM bridge for DataDog, New Relic, and generic OTLP backends
3
- *
4
- * Configures OpenTelemetry trace and metric exporters targeting specific APM vendors.
5
- * Each vendor has pre-configured OTLP endpoints and required headers/env vars.
6
- *
7
- * Uses lazy dynamic imports so vendor-specific SDK packages are optional.
8
- * Falls back to generic OTLP if vendor-specific packages are not installed.
9
- *
10
- * Supported vendors:
11
- * - **DataDog**: Sends traces/metrics via dd-trace or OTLP to DataDog Agent
12
- * - **New Relic**: Sends traces/metrics via OTLP to New Relic ingest endpoint
13
- * - **Generic OTLP**: Any OTLP-compatible backend (Jaeger, Grafana Tempo, etc.)
14
- *
15
- * @example
16
- * ```typescript
17
- * import { APMIntegration } from "@blokjs/runner";
18
- *
19
- * // DataDog
20
- * const apm = new APMIntegration({
21
- * vendor: "datadog",
22
- * serviceName: "blok-http",
23
- * datadogAgentUrl: "http://localhost:4318",
24
- * });
25
- * await apm.init();
26
- *
27
- * // New Relic
28
- * const apm = new APMIntegration({
29
- * vendor: "newrelic",
30
- * serviceName: "blok-http",
31
- * newrelicLicenseKey: process.env.NEW_RELIC_LICENSE_KEY!,
32
- * });
33
- * await apm.init();
34
- *
35
- * // Generic OTLP
36
- * const apm = new APMIntegration({
37
- * vendor: "otlp",
38
- * serviceName: "blok-http",
39
- * otlpEndpoint: "http://tempo:4318/v1/traces",
40
- * });
41
- * await apm.init();
42
- * ```
43
- */
44
- export class APMIntegration {
45
- config;
46
- initialized = false;
47
- shutdownFn = null;
48
- flushFn = null;
49
- constructor(config) {
50
- this.config = {
51
- serviceVersion: "0.0.1",
52
- environment: process.env.NODE_ENV || "development",
53
- samplingRatio: 1.0,
54
- debug: false,
55
- ...config,
56
- };
57
- }
58
- /**
59
- * Initialize the APM integration.
60
- * Dynamically loads vendor-specific or generic OTLP packages.
61
- * Returns false if required packages are not installed.
62
- */
63
- async init() {
64
- if (this.initialized)
65
- return true;
66
- try {
67
- switch (this.config.vendor) {
68
- case "datadog":
69
- return await this.initDataDog();
70
- case "newrelic":
71
- return await this.initNewRelic();
72
- case "otlp":
73
- return await this.initOTLP();
74
- default:
75
- return false;
76
- }
77
- }
78
- catch {
79
- return false;
80
- }
81
- }
82
- /**
83
- * Initialize DataDog APM.
84
- *
85
- * Strategy: Use OTLP export to the DataDog Agent, which accepts OTLP
86
- * on port 4318 (HTTP) or 4317 (gRPC) when configured with
87
- * DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT.
88
- */
89
- async initDataDog() {
90
- const endpoint = this.config.datadogAgentUrl || "http://localhost:4318/v1/traces";
91
- const headers = {};
92
- // DataDog Agent does not require auth headers for local OTLP,
93
- // but we pass service metadata via resource attributes.
94
- return this.bootstrapOTLPTracing(endpoint, headers);
95
- }
96
- /**
97
- * Initialize New Relic APM.
98
- *
99
- * Strategy: Send traces via OTLP to New Relic's ingest endpoint.
100
- * Requires NEW_RELIC_LICENSE_KEY in headers.
101
- */
102
- async initNewRelic() {
103
- const licenseKey = this.config.newrelicLicenseKey || process.env.NEW_RELIC_LICENSE_KEY || "";
104
- if (!licenseKey) {
105
- return false;
106
- }
107
- const region = this.config.newrelicRegion ?? "us";
108
- const endpoint = this.config.newrelicEndpoint ||
109
- (region === "eu" ? "https://otlp.eu01.nr-data.net:4318/v1/traces" : "https://otlp.nr-data.net:4318/v1/traces");
110
- const headers = {
111
- "api-key": licenseKey,
112
- };
113
- return this.bootstrapOTLPTracing(endpoint, headers);
114
- }
115
- /**
116
- * Initialize generic OTLP backend.
117
- */
118
- async initOTLP() {
119
- const endpoint = this.config.otlpEndpoint ||
120
- process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ||
121
- process.env.OTEL_EXPORTER_OTLP_ENDPOINT ||
122
- "http://localhost:4318/v1/traces";
123
- return this.bootstrapOTLPTracing(endpoint, this.config.otlpHeaders || {});
124
- }
125
- /**
126
- * Shared OTLP bootstrap using TracingBootstrap.
127
- */
128
- async bootstrapOTLPTracing(endpoint, headers) {
129
- try {
130
- // Use our TracingBootstrap module
131
- const { bootstrapTracing } = await import("../monitoring/TracingBootstrap");
132
- const result = await bootstrapTracing({
133
- serviceName: this.config.serviceName,
134
- serviceVersion: this.config.serviceVersion,
135
- exporter: "otlp",
136
- endpoint,
137
- headers,
138
- samplingRatio: this.config.samplingRatio,
139
- });
140
- if (!result)
141
- return false;
142
- this.shutdownFn = result.shutdown;
143
- this.flushFn = result.forceFlush;
144
- this.initialized = true;
145
- return true;
146
- }
147
- catch {
148
- return false;
149
- }
150
- }
151
- /**
152
- * Check if the APM integration is initialized.
153
- */
154
- isInitialized() {
155
- return this.initialized;
156
- }
157
- /**
158
- * Get the configured vendor.
159
- */
160
- getVendor() {
161
- return this.config.vendor;
162
- }
163
- /**
164
- * Shut down the APM integration, flushing pending data.
165
- */
166
- async shutdown() {
167
- if (this.shutdownFn) {
168
- await this.shutdownFn();
169
- }
170
- this.initialized = false;
171
- }
172
- /**
173
- * Force flush pending traces/metrics.
174
- */
175
- async forceFlush() {
176
- if (this.flushFn) {
177
- await this.flushFn();
178
- }
179
- }
180
- /**
181
- * Get the OTLP endpoint configuration for the current vendor.
182
- * Useful for debugging and diagnostics.
183
- */
184
- getEndpointInfo() {
185
- let endpoint;
186
- switch (this.config.vendor) {
187
- case "datadog":
188
- endpoint = this.config.datadogAgentUrl || "http://localhost:4318/v1/traces";
189
- break;
190
- case "newrelic": {
191
- const region = this.config.newrelicRegion ?? "us";
192
- endpoint =
193
- this.config.newrelicEndpoint ||
194
- (region === "eu"
195
- ? "https://otlp.eu01.nr-data.net:4318/v1/traces"
196
- : "https://otlp.nr-data.net:4318/v1/traces");
197
- break;
198
- }
199
- case "otlp":
200
- endpoint = this.config.otlpEndpoint || "http://localhost:4318/v1/traces";
201
- break;
202
- default:
203
- endpoint = "unknown";
204
- }
205
- return {
206
- vendor: this.config.vendor,
207
- endpoint,
208
- initialized: this.initialized,
209
- };
210
- }
211
- }
212
- //# sourceMappingURL=APMIntegration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"APMIntegration.js","sourceRoot":"","sources":["../../src/integrations/APMIntegration.ts"],"names":[],"mappings":"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"}
@@ -1,118 +0,0 @@
1
- /**
2
- * Azure Monitor Integration for Blok
3
- *
4
- * Exports traces, metrics, and logs to Azure Application Insights via the
5
- * Azure Monitor OpenTelemetry Exporter or the Application Insights SDK.
6
- *
7
- * Supports two modes:
8
- * 1. **OTLP mode** (recommended) – Uses the generic OTLP exporter pointing at
9
- * the Azure Monitor OTLP endpoint. Requires an Application Insights
10
- * connection string.
11
- * 2. **Azure Exporter mode** – Uses `@azure/monitor-opentelemetry-exporter`
12
- * for native Azure integration with automatic sampling and live metrics.
13
- *
14
- * All Azure SDK dependencies are loaded lazily so the framework doesn't
15
- * hard-depend on any Azure packages. If the packages are not installed
16
- * `init()` returns false and the integration is a no-op.
17
- *
18
- * @example
19
- * ```typescript
20
- * import { AzureMonitorIntegration } from "@blokjs/runner";
21
- *
22
- * const azure = new AzureMonitorIntegration({
23
- * connectionString: process.env.APPLICATIONINSIGHTS_CONNECTION_STRING!,
24
- * serviceName: "blok-http",
25
- * });
26
- *
27
- * await azure.init();
28
- *
29
- * // Track a custom event
30
- * azure.trackEvent("WorkflowCompleted", { workflowName: "get-user", durationMs: "42" });
31
- *
32
- * // Track an exception
33
- * azure.trackException(error, { workflowName: "get-user", nodeName: "fetch-db" });
34
- *
35
- * // Track a metric
36
- * azure.trackMetric("WorkflowDuration", 42);
37
- * ```
38
- */
39
- export interface AzureMonitorConfig {
40
- /**
41
- * Application Insights connection string.
42
- * Falls back to APPLICATIONINSIGHTS_CONNECTION_STRING env var.
43
- */
44
- connectionString?: string;
45
- /** Blok service name */
46
- serviceName: string;
47
- /** Service version */
48
- serviceVersion?: string;
49
- /** Environment label */
50
- environment?: string;
51
- /**
52
- * Export mode:
53
- * - "azure" – use @azure/monitor-opentelemetry-exporter (native)
54
- * - "otlp" – use generic OTLP exporter with Azure ingestion endpoint
55
- * Default: "azure"
56
- */
57
- exportMode?: "azure" | "otlp";
58
- /** Trace sampling ratio (0.0 – 1.0, default: 1.0) */
59
- samplingRatio?: number;
60
- /** Enable live metrics stream (default: false) */
61
- enableLiveMetrics?: boolean;
62
- /** Enable debug logging */
63
- debug?: boolean;
64
- }
65
- export interface AzureMonitorStats {
66
- initialized: boolean;
67
- eventsTracked: number;
68
- exceptionsTracked: number;
69
- metricsTracked: number;
70
- }
71
- export declare class AzureMonitorIntegration {
72
- private config;
73
- private initialized;
74
- private exporter;
75
- private tracingShutdown;
76
- private telemetryClient;
77
- private eventsTracked;
78
- private exceptionsTracked;
79
- private metricsTracked;
80
- constructor(config: AzureMonitorConfig);
81
- /**
82
- * Initialize Azure Monitor.
83
- * Returns false if required packages or connection string are missing.
84
- */
85
- init(): Promise<boolean>;
86
- private initAzureExporter;
87
- private initOTLP;
88
- private initTelemetryClient;
89
- /**
90
- * Track a custom event (e.g. "WorkflowCompleted").
91
- */
92
- trackEvent(name: string, properties?: Record<string, string>): void;
93
- /**
94
- * Track an exception.
95
- */
96
- trackException(error: Error, properties?: Record<string, string>): void;
97
- /**
98
- * Track a numeric metric.
99
- */
100
- trackMetric(name: string, value: number, properties?: Record<string, string>): void;
101
- /**
102
- * Record a workflow execution as both a custom event and metric.
103
- */
104
- recordWorkflowExecution(workflowName: string, durationMs: number, success: boolean): void;
105
- isInitialized(): boolean;
106
- getStats(): AzureMonitorStats;
107
- shutdown(): Promise<void>;
108
- flush(): Promise<void>;
109
- /**
110
- * Extract the ingestion endpoint from an Application Insights connection string.
111
- * Format: InstrumentationKey=...;IngestionEndpoint=https://...;...
112
- */
113
- private extractEndpoint;
114
- /**
115
- * Extract the instrumentation key from an Application Insights connection string.
116
- */
117
- private extractInstrumentationKey;
118
- }
@@ -1,254 +0,0 @@
1
- /**
2
- * Azure Monitor Integration for Blok
3
- *
4
- * Exports traces, metrics, and logs to Azure Application Insights via the
5
- * Azure Monitor OpenTelemetry Exporter or the Application Insights SDK.
6
- *
7
- * Supports two modes:
8
- * 1. **OTLP mode** (recommended) – Uses the generic OTLP exporter pointing at
9
- * the Azure Monitor OTLP endpoint. Requires an Application Insights
10
- * connection string.
11
- * 2. **Azure Exporter mode** – Uses `@azure/monitor-opentelemetry-exporter`
12
- * for native Azure integration with automatic sampling and live metrics.
13
- *
14
- * All Azure SDK dependencies are loaded lazily so the framework doesn't
15
- * hard-depend on any Azure packages. If the packages are not installed
16
- * `init()` returns false and the integration is a no-op.
17
- *
18
- * @example
19
- * ```typescript
20
- * import { AzureMonitorIntegration } from "@blokjs/runner";
21
- *
22
- * const azure = new AzureMonitorIntegration({
23
- * connectionString: process.env.APPLICATIONINSIGHTS_CONNECTION_STRING!,
24
- * serviceName: "blok-http",
25
- * });
26
- *
27
- * await azure.init();
28
- *
29
- * // Track a custom event
30
- * azure.trackEvent("WorkflowCompleted", { workflowName: "get-user", durationMs: "42" });
31
- *
32
- * // Track an exception
33
- * azure.trackException(error, { workflowName: "get-user", nodeName: "fetch-db" });
34
- *
35
- * // Track a metric
36
- * azure.trackMetric("WorkflowDuration", 42);
37
- * ```
38
- */
39
- export class AzureMonitorIntegration {
40
- config;
41
- initialized = false;
42
- exporter = null;
43
- tracingShutdown = null;
44
- // Telemetry client for custom events / metrics (Application Insights SDK)
45
- telemetryClient = null;
46
- // stats
47
- eventsTracked = 0;
48
- exceptionsTracked = 0;
49
- metricsTracked = 0;
50
- constructor(config) {
51
- this.config = {
52
- connectionString: process.env.APPLICATIONINSIGHTS_CONNECTION_STRING,
53
- serviceVersion: "0.0.1",
54
- environment: process.env.NODE_ENV || "development",
55
- exportMode: "azure",
56
- samplingRatio: 1.0,
57
- enableLiveMetrics: false,
58
- debug: false,
59
- ...config,
60
- };
61
- }
62
- /**
63
- * Initialize Azure Monitor.
64
- * Returns false if required packages or connection string are missing.
65
- */
66
- async init() {
67
- if (this.initialized)
68
- return true;
69
- const connStr = this.config.connectionString;
70
- if (!connStr)
71
- return false;
72
- try {
73
- if (this.config.exportMode === "azure") {
74
- return await this.initAzureExporter(connStr);
75
- }
76
- return await this.initOTLP(connStr);
77
- }
78
- catch {
79
- return false;
80
- }
81
- }
82
- /* ------------------------------------------------------------------ */
83
- /* Azure Monitor exporter mode */
84
- /* ------------------------------------------------------------------ */
85
- async initAzureExporter(connectionString) {
86
- try {
87
- // @ts-expect-error: optional peer dependency
88
- const azureMod = await import("@azure/monitor-opentelemetry-exporter");
89
- // The Azure trace exporter works via OpenTelemetry's TracerProvider.
90
- // We bootstrap tracing with it by piping through our standard bootstrap
91
- // path — the Azure exporter is OTLP-compatible.
92
- const exporter = new azureMod.AzureMonitorTraceExporter({
93
- connectionString,
94
- });
95
- this.exporter = exporter;
96
- // Also try to set up a lightweight telemetry client for custom events
97
- await this.initTelemetryClient(connectionString);
98
- this.initialized = true;
99
- return true;
100
- }
101
- catch {
102
- // Fall back to OTLP mode
103
- return this.initOTLP(connectionString);
104
- }
105
- }
106
- /* ------------------------------------------------------------------ */
107
- /* OTLP mode (uses TracingBootstrap pointing at Azure endpoint) */
108
- /* ------------------------------------------------------------------ */
109
- async initOTLP(connectionString) {
110
- try {
111
- // Extract ingestion endpoint from connection string
112
- const endpoint = this.extractEndpoint(connectionString);
113
- const instrumentationKey = this.extractInstrumentationKey(connectionString);
114
- if (!endpoint || !instrumentationKey)
115
- return false;
116
- const { bootstrapTracing } = await import("../monitoring/TracingBootstrap");
117
- const result = await bootstrapTracing({
118
- serviceName: this.config.serviceName,
119
- serviceVersion: this.config.serviceVersion,
120
- exporter: "otlp",
121
- endpoint: `${endpoint}/v2/track`,
122
- headers: {
123
- "x-ms-instrumentationkey": instrumentationKey,
124
- },
125
- samplingRatio: this.config.samplingRatio,
126
- });
127
- if (!result)
128
- return false;
129
- this.tracingShutdown = result.shutdown;
130
- await this.initTelemetryClient(connectionString);
131
- this.initialized = true;
132
- return true;
133
- }
134
- catch {
135
- return false;
136
- }
137
- }
138
- /* ------------------------------------------------------------------ */
139
- /* Lightweight telemetry client (custom events, metrics) */
140
- /* ------------------------------------------------------------------ */
141
- async initTelemetryClient(connectionString) {
142
- try {
143
- // @ts-expect-error: optional peer dependency
144
- const appInsights = await import("applicationinsights");
145
- appInsights.setup(connectionString).setAutoCollectRequests(false).start();
146
- const client = appInsights.defaultClient;
147
- if (!client)
148
- return;
149
- this.telemetryClient = {
150
- trackEvent: (event) => client.trackEvent(event),
151
- trackException: (exc) => client.trackException(exc),
152
- trackMetric: (metric) => client.trackMetric(metric),
153
- flush: () => new Promise((resolve) => {
154
- client.flush({ callback: () => resolve() });
155
- }),
156
- };
157
- }
158
- catch {
159
- // applicationinsights package not installed — custom events won't work
160
- // but tracing via OTLP will still function
161
- }
162
- }
163
- /* ------------------------------------------------------------------ */
164
- /* Custom telemetry helpers */
165
- /* ------------------------------------------------------------------ */
166
- /**
167
- * Track a custom event (e.g. "WorkflowCompleted").
168
- */
169
- trackEvent(name, properties) {
170
- if (!this.telemetryClient)
171
- return;
172
- this.telemetryClient.trackEvent({ name, properties });
173
- this.eventsTracked++;
174
- }
175
- /**
176
- * Track an exception.
177
- */
178
- trackException(error, properties) {
179
- if (!this.telemetryClient)
180
- return;
181
- this.telemetryClient.trackException({ exception: error, properties });
182
- this.exceptionsTracked++;
183
- }
184
- /**
185
- * Track a numeric metric.
186
- */
187
- trackMetric(name, value, properties) {
188
- if (!this.telemetryClient)
189
- return;
190
- this.telemetryClient.trackMetric({ name, value, properties });
191
- this.metricsTracked++;
192
- }
193
- /**
194
- * Record a workflow execution as both a custom event and metric.
195
- */
196
- recordWorkflowExecution(workflowName, durationMs, success) {
197
- this.trackEvent(success ? "WorkflowCompleted" : "WorkflowFailed", {
198
- workflowName,
199
- durationMs: String(durationMs),
200
- environment: this.config.environment || "development",
201
- });
202
- this.trackMetric("WorkflowDuration", durationMs, { workflowName });
203
- if (!success) {
204
- this.trackMetric("WorkflowErrors", 1, { workflowName });
205
- }
206
- }
207
- /* ------------------------------------------------------------------ */
208
- /* Lifecycle */
209
- /* ------------------------------------------------------------------ */
210
- isInitialized() {
211
- return this.initialized;
212
- }
213
- getStats() {
214
- return {
215
- initialized: this.initialized,
216
- eventsTracked: this.eventsTracked,
217
- exceptionsTracked: this.exceptionsTracked,
218
- metricsTracked: this.metricsTracked,
219
- };
220
- }
221
- async shutdown() {
222
- if (this.tracingShutdown) {
223
- await this.tracingShutdown();
224
- }
225
- if (this.exporter?.shutdown) {
226
- await this.exporter.shutdown();
227
- }
228
- this.initialized = false;
229
- }
230
- async flush() {
231
- if (this.telemetryClient) {
232
- await this.telemetryClient.flush();
233
- }
234
- }
235
- /* ------------------------------------------------------------------ */
236
- /* Connection string parsing */
237
- /* ------------------------------------------------------------------ */
238
- /**
239
- * Extract the ingestion endpoint from an Application Insights connection string.
240
- * Format: InstrumentationKey=...;IngestionEndpoint=https://...;...
241
- */
242
- extractEndpoint(connectionString) {
243
- const match = connectionString.match(/IngestionEndpoint=([^;]+)/i);
244
- return match?.[1]?.replace(/\/$/, "") ?? null;
245
- }
246
- /**
247
- * Extract the instrumentation key from an Application Insights connection string.
248
- */
249
- extractInstrumentationKey(connectionString) {
250
- const match = connectionString.match(/InstrumentationKey=([^;]+)/i);
251
- return match?.[1] ?? null;
252
- }
253
- }
254
- //# sourceMappingURL=AzureMonitorIntegration.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AzureMonitorIntegration.js","sourceRoot":"","sources":["../../src/integrations/AzureMonitorIntegration.ts"],"names":[],"mappings":"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"}