autotel 2.1.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.
- package/LICENSE +21 -0
- package/README.md +1946 -0
- package/dist/chunk-2LNRY4QK.js +273 -0
- package/dist/chunk-2LNRY4QK.js.map +1 -0
- package/dist/chunk-3HENGDW2.js +587 -0
- package/dist/chunk-3HENGDW2.js.map +1 -0
- package/dist/chunk-4OAT42CA.cjs +73 -0
- package/dist/chunk-4OAT42CA.cjs.map +1 -0
- package/dist/chunk-5GWX5LFW.js +70 -0
- package/dist/chunk-5GWX5LFW.js.map +1 -0
- package/dist/chunk-5R2M36QB.js +195 -0
- package/dist/chunk-5R2M36QB.js.map +1 -0
- package/dist/chunk-5ZN622AO.js +73 -0
- package/dist/chunk-5ZN622AO.js.map +1 -0
- package/dist/chunk-77MSMAUQ.cjs +498 -0
- package/dist/chunk-77MSMAUQ.cjs.map +1 -0
- package/dist/chunk-ABPEQ6RK.cjs +596 -0
- package/dist/chunk-ABPEQ6RK.cjs.map +1 -0
- package/dist/chunk-BWYGJKRB.js +95 -0
- package/dist/chunk-BWYGJKRB.js.map +1 -0
- package/dist/chunk-BZHG5IZ4.js +73 -0
- package/dist/chunk-BZHG5IZ4.js.map +1 -0
- package/dist/chunk-G7VZBCD6.cjs +35 -0
- package/dist/chunk-G7VZBCD6.cjs.map +1 -0
- package/dist/chunk-GVLK7YUU.cjs +30 -0
- package/dist/chunk-GVLK7YUU.cjs.map +1 -0
- package/dist/chunk-HCCXC7XG.js +205 -0
- package/dist/chunk-HCCXC7XG.js.map +1 -0
- package/dist/chunk-HE6T6FIX.cjs +203 -0
- package/dist/chunk-HE6T6FIX.cjs.map +1 -0
- package/dist/chunk-KIXWPOCO.cjs +100 -0
- package/dist/chunk-KIXWPOCO.cjs.map +1 -0
- package/dist/chunk-KVGNW3FC.js +87 -0
- package/dist/chunk-KVGNW3FC.js.map +1 -0
- package/dist/chunk-LITNXTTT.js +3 -0
- package/dist/chunk-LITNXTTT.js.map +1 -0
- package/dist/chunk-M4ANN7RL.js +114 -0
- package/dist/chunk-M4ANN7RL.js.map +1 -0
- package/dist/chunk-NC52UBR2.cjs +32 -0
- package/dist/chunk-NC52UBR2.cjs.map +1 -0
- package/dist/chunk-NHCNRQD3.cjs +212 -0
- package/dist/chunk-NHCNRQD3.cjs.map +1 -0
- package/dist/chunk-NZ72VDNY.cjs +4 -0
- package/dist/chunk-NZ72VDNY.cjs.map +1 -0
- package/dist/chunk-P6JUDYNO.js +57 -0
- package/dist/chunk-P6JUDYNO.js.map +1 -0
- package/dist/chunk-RJYY7BWX.js +1349 -0
- package/dist/chunk-RJYY7BWX.js.map +1 -0
- package/dist/chunk-TRI4V5BF.cjs +126 -0
- package/dist/chunk-TRI4V5BF.cjs.map +1 -0
- package/dist/chunk-UL33I6IS.js +139 -0
- package/dist/chunk-UL33I6IS.js.map +1 -0
- package/dist/chunk-URRW6M2C.cjs +61 -0
- package/dist/chunk-URRW6M2C.cjs.map +1 -0
- package/dist/chunk-UY3UYPBZ.cjs +77 -0
- package/dist/chunk-UY3UYPBZ.cjs.map +1 -0
- package/dist/chunk-W3253FGB.cjs +277 -0
- package/dist/chunk-W3253FGB.cjs.map +1 -0
- package/dist/chunk-W7LHZVQF.js +26 -0
- package/dist/chunk-W7LHZVQF.js.map +1 -0
- package/dist/chunk-WBWNM6LB.cjs +1360 -0
- package/dist/chunk-WBWNM6LB.cjs.map +1 -0
- package/dist/chunk-WFJ7L2RV.js +494 -0
- package/dist/chunk-WFJ7L2RV.js.map +1 -0
- package/dist/chunk-X4RMFFMR.js +28 -0
- package/dist/chunk-X4RMFFMR.js.map +1 -0
- package/dist/chunk-Y4Y2S7BM.cjs +92 -0
- package/dist/chunk-Y4Y2S7BM.cjs.map +1 -0
- package/dist/chunk-YLPNXZFI.cjs +143 -0
- package/dist/chunk-YLPNXZFI.cjs.map +1 -0
- package/dist/chunk-YTXEZ4SD.cjs +77 -0
- package/dist/chunk-YTXEZ4SD.cjs.map +1 -0
- package/dist/chunk-Z6ZWNWWR.js +30 -0
- package/dist/chunk-Z6ZWNWWR.js.map +1 -0
- package/dist/config.cjs +26 -0
- package/dist/config.cjs.map +1 -0
- package/dist/config.d.cts +75 -0
- package/dist/config.d.ts +75 -0
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -0
- package/dist/db.cjs +233 -0
- package/dist/db.cjs.map +1 -0
- package/dist/db.d.cts +123 -0
- package/dist/db.d.ts +123 -0
- package/dist/db.js +228 -0
- package/dist/db.js.map +1 -0
- package/dist/decorators.cjs +67 -0
- package/dist/decorators.cjs.map +1 -0
- package/dist/decorators.d.cts +91 -0
- package/dist/decorators.d.ts +91 -0
- package/dist/decorators.js +65 -0
- package/dist/decorators.js.map +1 -0
- package/dist/event-subscriber.cjs +6 -0
- package/dist/event-subscriber.cjs.map +1 -0
- package/dist/event-subscriber.d.cts +116 -0
- package/dist/event-subscriber.d.ts +116 -0
- package/dist/event-subscriber.js +3 -0
- package/dist/event-subscriber.js.map +1 -0
- package/dist/event-testing.cjs +21 -0
- package/dist/event-testing.cjs.map +1 -0
- package/dist/event-testing.d.cts +110 -0
- package/dist/event-testing.d.ts +110 -0
- package/dist/event-testing.js +4 -0
- package/dist/event-testing.js.map +1 -0
- package/dist/event.cjs +30 -0
- package/dist/event.cjs.map +1 -0
- package/dist/event.d.cts +282 -0
- package/dist/event.d.ts +282 -0
- package/dist/event.js +13 -0
- package/dist/event.js.map +1 -0
- package/dist/exporters.cjs +17 -0
- package/dist/exporters.cjs.map +1 -0
- package/dist/exporters.d.cts +1 -0
- package/dist/exporters.d.ts +1 -0
- package/dist/exporters.js +4 -0
- package/dist/exporters.js.map +1 -0
- package/dist/functional.cjs +46 -0
- package/dist/functional.cjs.map +1 -0
- package/dist/functional.d.cts +478 -0
- package/dist/functional.d.ts +478 -0
- package/dist/functional.js +13 -0
- package/dist/functional.js.map +1 -0
- package/dist/http.cjs +189 -0
- package/dist/http.cjs.map +1 -0
- package/dist/http.d.cts +169 -0
- package/dist/http.d.ts +169 -0
- package/dist/http.js +184 -0
- package/dist/http.js.map +1 -0
- package/dist/index.cjs +333 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +758 -0
- package/dist/index.d.ts +758 -0
- package/dist/index.js +143 -0
- package/dist/index.js.map +1 -0
- package/dist/instrumentation.cjs +182 -0
- package/dist/instrumentation.cjs.map +1 -0
- package/dist/instrumentation.d.cts +49 -0
- package/dist/instrumentation.d.ts +49 -0
- package/dist/instrumentation.js +179 -0
- package/dist/instrumentation.js.map +1 -0
- package/dist/logger.cjs +19 -0
- package/dist/logger.cjs.map +1 -0
- package/dist/logger.d.cts +146 -0
- package/dist/logger.d.ts +146 -0
- package/dist/logger.js +6 -0
- package/dist/logger.js.map +1 -0
- package/dist/metric-helpers.cjs +31 -0
- package/dist/metric-helpers.cjs.map +1 -0
- package/dist/metric-helpers.d.cts +13 -0
- package/dist/metric-helpers.d.ts +13 -0
- package/dist/metric-helpers.js +6 -0
- package/dist/metric-helpers.js.map +1 -0
- package/dist/metric-testing.cjs +21 -0
- package/dist/metric-testing.cjs.map +1 -0
- package/dist/metric-testing.d.cts +110 -0
- package/dist/metric-testing.d.ts +110 -0
- package/dist/metric-testing.js +4 -0
- package/dist/metric-testing.js.map +1 -0
- package/dist/metric.cjs +26 -0
- package/dist/metric.cjs.map +1 -0
- package/dist/metric.d.cts +240 -0
- package/dist/metric.d.ts +240 -0
- package/dist/metric.js +9 -0
- package/dist/metric.js.map +1 -0
- package/dist/processors.cjs +17 -0
- package/dist/processors.cjs.map +1 -0
- package/dist/processors.d.cts +1 -0
- package/dist/processors.d.ts +1 -0
- package/dist/processors.js +4 -0
- package/dist/processors.js.map +1 -0
- package/dist/sampling.cjs +40 -0
- package/dist/sampling.cjs.map +1 -0
- package/dist/sampling.d.cts +260 -0
- package/dist/sampling.d.ts +260 -0
- package/dist/sampling.js +7 -0
- package/dist/sampling.js.map +1 -0
- package/dist/semantic-helpers.cjs +35 -0
- package/dist/semantic-helpers.cjs.map +1 -0
- package/dist/semantic-helpers.d.cts +442 -0
- package/dist/semantic-helpers.d.ts +442 -0
- package/dist/semantic-helpers.js +14 -0
- package/dist/semantic-helpers.js.map +1 -0
- package/dist/tail-sampling-processor.cjs +13 -0
- package/dist/tail-sampling-processor.cjs.map +1 -0
- package/dist/tail-sampling-processor.d.cts +27 -0
- package/dist/tail-sampling-processor.d.ts +27 -0
- package/dist/tail-sampling-processor.js +4 -0
- package/dist/tail-sampling-processor.js.map +1 -0
- package/dist/testing.cjs +286 -0
- package/dist/testing.cjs.map +1 -0
- package/dist/testing.d.cts +291 -0
- package/dist/testing.d.ts +291 -0
- package/dist/testing.js +263 -0
- package/dist/testing.js.map +1 -0
- package/dist/trace-context-DRZdUvVY.d.cts +181 -0
- package/dist/trace-context-DRZdUvVY.d.ts +181 -0
- package/dist/trace-helpers.cjs +54 -0
- package/dist/trace-helpers.cjs.map +1 -0
- package/dist/trace-helpers.d.cts +524 -0
- package/dist/trace-helpers.d.ts +524 -0
- package/dist/trace-helpers.js +5 -0
- package/dist/trace-helpers.js.map +1 -0
- package/dist/tracer-provider.cjs +21 -0
- package/dist/tracer-provider.cjs.map +1 -0
- package/dist/tracer-provider.d.cts +169 -0
- package/dist/tracer-provider.d.ts +169 -0
- package/dist/tracer-provider.js +4 -0
- package/dist/tracer-provider.js.map +1 -0
- package/package.json +280 -0
- package/src/baggage-span-processor.test.ts +202 -0
- package/src/baggage-span-processor.ts +98 -0
- package/src/circuit-breaker.test.ts +341 -0
- package/src/circuit-breaker.ts +184 -0
- package/src/config.test.ts +94 -0
- package/src/config.ts +169 -0
- package/src/db.test.ts +252 -0
- package/src/db.ts +447 -0
- package/src/decorators.test.ts +203 -0
- package/src/decorators.ts +188 -0
- package/src/env-config.test.ts +246 -0
- package/src/env-config.ts +158 -0
- package/src/event-queue.test.ts +222 -0
- package/src/event-queue.ts +203 -0
- package/src/event-subscriber.ts +136 -0
- package/src/event-testing.ts +197 -0
- package/src/event.test.ts +718 -0
- package/src/event.ts +556 -0
- package/src/exporters.ts +96 -0
- package/src/functional.test.ts +1059 -0
- package/src/functional.ts +2295 -0
- package/src/http.test.ts +487 -0
- package/src/http.ts +424 -0
- package/src/index.ts +158 -0
- package/src/init.customization.test.ts +210 -0
- package/src/init.integrations.test.ts +366 -0
- package/src/init.openllmetry.test.ts +282 -0
- package/src/init.protocol.test.ts +215 -0
- package/src/init.ts +1426 -0
- package/src/instrumentation.test.ts +108 -0
- package/src/instrumentation.ts +308 -0
- package/src/logger.test.ts +117 -0
- package/src/logger.ts +246 -0
- package/src/metric-helpers.ts +47 -0
- package/src/metric-testing.ts +197 -0
- package/src/metric.ts +434 -0
- package/src/metrics.test.ts +205 -0
- package/src/operation-context.ts +93 -0
- package/src/processors.ts +106 -0
- package/src/rate-limiter.test.ts +199 -0
- package/src/rate-limiter.ts +98 -0
- package/src/sampling.test.ts +513 -0
- package/src/sampling.ts +428 -0
- package/src/semantic-helpers.test.ts +311 -0
- package/src/semantic-helpers.ts +584 -0
- package/src/shutdown.test.ts +311 -0
- package/src/shutdown.ts +222 -0
- package/src/stub.integration.test.ts +361 -0
- package/src/tail-sampling-processor.test.ts +226 -0
- package/src/tail-sampling-processor.ts +51 -0
- package/src/testing.ts +670 -0
- package/src/trace-context.ts +470 -0
- package/src/trace-helpers.new.test.ts +278 -0
- package/src/trace-helpers.test.ts +242 -0
- package/src/trace-helpers.ts +690 -0
- package/src/tracer-provider.test.ts +183 -0
- package/src/tracer-provider.ts +266 -0
- package/src/track.test.ts +153 -0
- package/src/track.ts +120 -0
- package/src/validation.test.ts +306 -0
- package/src/validation.ts +239 -0
- package/src/variable-name-inference.test.ts +178 -0
- package/src/variable-name-inference.ts +242 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { EventAttributes, FunnelStatus, OutcomeStatus } from './event-subscriber.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Testing utilities for Metrics
|
|
5
|
+
*
|
|
6
|
+
* Provides in-memory collection of metrics for testing purposes.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
interface MetricsEvent {
|
|
10
|
+
event: string;
|
|
11
|
+
attributes?: EventAttributes;
|
|
12
|
+
service: string;
|
|
13
|
+
timestamp: number;
|
|
14
|
+
}
|
|
15
|
+
interface MetricsFunnelStep {
|
|
16
|
+
funnel: string;
|
|
17
|
+
status: FunnelStatus;
|
|
18
|
+
attributes?: EventAttributes;
|
|
19
|
+
service: string;
|
|
20
|
+
timestamp: number;
|
|
21
|
+
}
|
|
22
|
+
interface MetricsOutcome {
|
|
23
|
+
operation: string;
|
|
24
|
+
status: OutcomeStatus;
|
|
25
|
+
attributes?: EventAttributes;
|
|
26
|
+
service: string;
|
|
27
|
+
timestamp: number;
|
|
28
|
+
}
|
|
29
|
+
interface MetricsValue {
|
|
30
|
+
metric: string;
|
|
31
|
+
value: number;
|
|
32
|
+
attributes?: EventAttributes;
|
|
33
|
+
service: string;
|
|
34
|
+
timestamp: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* In-memory metrics collector for testing
|
|
38
|
+
*/
|
|
39
|
+
interface MetricsCollector {
|
|
40
|
+
/** Get all collected events */
|
|
41
|
+
getEvents(): MetricsEvent[];
|
|
42
|
+
/** Get all collected funnel steps */
|
|
43
|
+
getFunnelSteps(): MetricsFunnelStep[];
|
|
44
|
+
/** Get all collected outcomes */
|
|
45
|
+
getOutcomes(): MetricsOutcome[];
|
|
46
|
+
/** Get all collected values */
|
|
47
|
+
getValues(): MetricsValue[];
|
|
48
|
+
/** Clear all collected metrics */
|
|
49
|
+
clear(): void;
|
|
50
|
+
/** Record an event (internal use) */
|
|
51
|
+
recordEvent(event: MetricsEvent): void;
|
|
52
|
+
/** Record a funnel step (internal use) */
|
|
53
|
+
recordFunnelStep(step: MetricsFunnelStep): void;
|
|
54
|
+
/** Record an outcome (internal use) */
|
|
55
|
+
recordOutcome(outcome: MetricsOutcome): void;
|
|
56
|
+
/** Record a value (internal use) */
|
|
57
|
+
recordValue(value: MetricsValue): void;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create an in-memory metrics collector for testing
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const collector = createMetricsCollector()
|
|
65
|
+
*
|
|
66
|
+
* const metrics = new Metric('test-service', { collector })
|
|
67
|
+
* metrics.trackEvent('order.completed', { orderId: '123' })
|
|
68
|
+
*
|
|
69
|
+
* const event =collector.getEvents()
|
|
70
|
+
* expect(events).toHaveLength(1)
|
|
71
|
+
* expect(events[0].event).toBe('order.completed')
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
declare function createMetricsCollector(): MetricsCollector;
|
|
75
|
+
/**
|
|
76
|
+
* Assert that a metric event was tracked
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* assertEventTracked({
|
|
81
|
+
* collector,
|
|
82
|
+
* eventName: 'order.completed',
|
|
83
|
+
* attributes: { orderId: '123' }
|
|
84
|
+
* })
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
declare function assertEventTracked(options: {
|
|
88
|
+
collector: MetricsCollector;
|
|
89
|
+
eventName: string;
|
|
90
|
+
attributes?: Record<string, unknown>;
|
|
91
|
+
}): void;
|
|
92
|
+
/**
|
|
93
|
+
* Assert that an outcome was tracked
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* assertOutcomeTracked({
|
|
98
|
+
* collector,
|
|
99
|
+
* operation: 'payment.process',
|
|
100
|
+
* status: 'success'
|
|
101
|
+
* })
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
declare function assertOutcomeTracked(options: {
|
|
105
|
+
collector: MetricsCollector;
|
|
106
|
+
operation: string;
|
|
107
|
+
status: 'success' | 'failure' | 'partial';
|
|
108
|
+
}): void;
|
|
109
|
+
|
|
110
|
+
export { type MetricsCollector, type MetricsEvent, type MetricsFunnelStep, type MetricsOutcome, type MetricsValue, assertEventTracked, assertOutcomeTracked, createMetricsCollector };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"metric-testing.js"}
|
package/dist/metric.cjs
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkW3253FGB_cjs = require('./chunk-W3253FGB.cjs');
|
|
4
|
+
require('./chunk-YTXEZ4SD.cjs');
|
|
5
|
+
require('./chunk-NZ72VDNY.cjs');
|
|
6
|
+
require('./chunk-4OAT42CA.cjs');
|
|
7
|
+
require('./chunk-Y4Y2S7BM.cjs');
|
|
8
|
+
require('./chunk-URRW6M2C.cjs');
|
|
9
|
+
require('./chunk-G7VZBCD6.cjs');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
Object.defineProperty(exports, "Metric", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return chunkW3253FGB_cjs.Metric; }
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(exports, "getMetrics", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () { return chunkW3253FGB_cjs.getMetrics; }
|
|
20
|
+
});
|
|
21
|
+
Object.defineProperty(exports, "resetMetrics", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () { return chunkW3253FGB_cjs.resetMetrics; }
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=metric.cjs.map
|
|
26
|
+
//# sourceMappingURL=metric.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"metric.cjs"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { Logger } from './logger.cjs';
|
|
2
|
+
import { EventAttributes, FunnelStatus, OutcomeStatus } from './event-subscriber.cjs';
|
|
3
|
+
import { MetricsCollector } from './metric-testing.cjs';
|
|
4
|
+
import 'pino';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Metrics API for OpenTelemetry
|
|
8
|
+
*
|
|
9
|
+
* Track business metrics for OpenTelemetry (Prometheus/Grafana).
|
|
10
|
+
* For business people who think in metrics.
|
|
11
|
+
*
|
|
12
|
+
* @example Track business metrics
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const metrics = new Metric('checkout')
|
|
15
|
+
*
|
|
16
|
+
* // Track events as metrics
|
|
17
|
+
* metrics.trackEvent('order.completed', {
|
|
18
|
+
* amount: 99.99,
|
|
19
|
+
* currency: 'USD'
|
|
20
|
+
* })
|
|
21
|
+
*
|
|
22
|
+
* // Track conversion funnels
|
|
23
|
+
* metrics.trackFunnelStep('checkout', 'started', { cartValue: 99.99 })
|
|
24
|
+
* metrics.trackFunnelStep('checkout', 'completed', { cartValue: 99.99 })
|
|
25
|
+
*
|
|
26
|
+
* // Track outcomes
|
|
27
|
+
* metrics.trackOutcome('payment.process', 'success', { amount: 99.99 })
|
|
28
|
+
* metrics.trackOutcome('payment.process', 'failure', { error: 'insufficient_funds' })
|
|
29
|
+
*
|
|
30
|
+
* // Track values
|
|
31
|
+
* metrics.trackValue('revenue', 149.99, { currency: 'USD' })
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Metrics class for tracking business metrics in OpenTelemetry
|
|
37
|
+
*
|
|
38
|
+
* Track critical business indicators such as:
|
|
39
|
+
* - User events (signups, purchases, feature usage) as metrics
|
|
40
|
+
* - Conversion funnels (signup → activation → purchase)
|
|
41
|
+
* - Business outcomes (success/failure rates)
|
|
42
|
+
* - Value metrics (revenue, counts, etc.)
|
|
43
|
+
*
|
|
44
|
+
* All metrics are sent to OpenTelemetry (OTLP/Prometheus/Grafana).
|
|
45
|
+
*/
|
|
46
|
+
/**
|
|
47
|
+
* Metric configuration for customizing metric names and descriptions
|
|
48
|
+
*/
|
|
49
|
+
interface MetricConfig {
|
|
50
|
+
/** Metric name (e.g., 'metrics.events' or 'custom.events') */
|
|
51
|
+
name?: string;
|
|
52
|
+
/** Metric description */
|
|
53
|
+
description?: string;
|
|
54
|
+
/** Metric unit (default: '1') */
|
|
55
|
+
unit?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Metrics options
|
|
59
|
+
*/
|
|
60
|
+
interface MetricsOptions {
|
|
61
|
+
/** Optional logger for audit trail */
|
|
62
|
+
logger?: Logger;
|
|
63
|
+
/** Optional collector for testing (captures metrics in memory) */
|
|
64
|
+
collector?: MetricsCollector;
|
|
65
|
+
/**
|
|
66
|
+
* Namespace for metrics (default: 'metrics')
|
|
67
|
+
* Results in metrics like: {serviceName}.{namespace}.events
|
|
68
|
+
*/
|
|
69
|
+
namespace?: string;
|
|
70
|
+
/**
|
|
71
|
+
* Custom metric configurations
|
|
72
|
+
* Override metric names, descriptions, and units
|
|
73
|
+
*/
|
|
74
|
+
metrics?: {
|
|
75
|
+
events?: MetricConfig;
|
|
76
|
+
funnel?: MetricConfig;
|
|
77
|
+
outcomes?: MetricConfig;
|
|
78
|
+
value?: MetricConfig;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
declare class Metric {
|
|
82
|
+
private serviceName;
|
|
83
|
+
private eventCounter;
|
|
84
|
+
private funnelCounter;
|
|
85
|
+
private outcomeCounter;
|
|
86
|
+
private valueHistogram;
|
|
87
|
+
private logger?;
|
|
88
|
+
private collector?;
|
|
89
|
+
/**
|
|
90
|
+
* Create a new Metrics instance
|
|
91
|
+
*
|
|
92
|
+
* @param serviceName - Service name for metric namespacing
|
|
93
|
+
* @param options - Optional configuration (logger, collector, namespace, metrics)
|
|
94
|
+
*
|
|
95
|
+
* @example Basic usage (default 'metrics' namespace)
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const metrics = new Metric('checkout');
|
|
98
|
+
* // Creates: checkout.metrics.events, checkout.metrics.funnel, etc.
|
|
99
|
+
* ```
|
|
100
|
+
*
|
|
101
|
+
* @example Custom namespace
|
|
102
|
+
* ```typescript
|
|
103
|
+
* const metrics = new Metric('api', { namespace: 'business' });
|
|
104
|
+
* // Creates: api.business.events, api.business.funnel, etc.
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @example Custom metric names and descriptions
|
|
108
|
+
* ```typescript
|
|
109
|
+
* const metrics = new Metric('payments', {
|
|
110
|
+
* metrics: {
|
|
111
|
+
* outcomes: {
|
|
112
|
+
* name: 'payments.transactions',
|
|
113
|
+
* description: 'Payment transaction outcomes',
|
|
114
|
+
* unit: 'transactions'
|
|
115
|
+
* },
|
|
116
|
+
* value: {
|
|
117
|
+
* name: 'payments.revenue',
|
|
118
|
+
* description: 'Payment revenue in USD',
|
|
119
|
+
* unit: 'USD'
|
|
120
|
+
* }
|
|
121
|
+
* }
|
|
122
|
+
* });
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
constructor(serviceName: string, options?: MetricsOptions);
|
|
126
|
+
/**
|
|
127
|
+
* Track a business event as a metric
|
|
128
|
+
*
|
|
129
|
+
* Use this for tracking user actions, business events, product usage as metrics:
|
|
130
|
+
* - "user.signup"
|
|
131
|
+
* - "order.completed"
|
|
132
|
+
* - "feature.used"
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* // Track user signup as metric
|
|
137
|
+
* metrics.trackEvent('user.signup', {
|
|
138
|
+
* userId: '123',
|
|
139
|
+
* plan: 'pro'
|
|
140
|
+
* })
|
|
141
|
+
*
|
|
142
|
+
* // Track order as metric
|
|
143
|
+
* metrics.trackEvent('order.completed', {
|
|
144
|
+
* orderId: 'ord_123',
|
|
145
|
+
* amount: 99.99
|
|
146
|
+
* })
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
trackEvent(eventName: string, attributes?: EventAttributes): void;
|
|
150
|
+
/**
|
|
151
|
+
* Track conversion funnel steps as metrics
|
|
152
|
+
*
|
|
153
|
+
* Monitor where users drop off in multi-step processes.
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* // Track signup funnel
|
|
158
|
+
* metrics.trackFunnelStep('signup', 'started', { userId: '123' })
|
|
159
|
+
* metrics.trackFunnelStep('signup', 'email_verified', { userId: '123' })
|
|
160
|
+
* metrics.trackFunnelStep('signup', 'completed', { userId: '123' })
|
|
161
|
+
*
|
|
162
|
+
* // Track checkout flow
|
|
163
|
+
* metrics.trackFunnelStep('checkout', 'started', { cartValue: 99.99 })
|
|
164
|
+
* metrics.trackFunnelStep('checkout', 'payment_info', { cartValue: 99.99 })
|
|
165
|
+
* metrics.trackFunnelStep('checkout', 'completed', { cartValue: 99.99 })
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
trackFunnelStep(funnelName: string, status: FunnelStatus, attributes?: EventAttributes): void;
|
|
169
|
+
/**
|
|
170
|
+
* Track outcomes (success/failure/partial) as metrics
|
|
171
|
+
*
|
|
172
|
+
* Monitor success rates of critical operations.
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```typescript
|
|
176
|
+
* // Track email delivery
|
|
177
|
+
* metrics.trackOutcome('email.delivery', 'success', {
|
|
178
|
+
* recipientType: 'user',
|
|
179
|
+
* emailType: 'welcome'
|
|
180
|
+
* })
|
|
181
|
+
*
|
|
182
|
+
* metrics.trackOutcome('email.delivery', 'failure', {
|
|
183
|
+
* recipientType: 'user',
|
|
184
|
+
* errorCode: 'invalid_email'
|
|
185
|
+
* })
|
|
186
|
+
*
|
|
187
|
+
* // Track payment processing
|
|
188
|
+
* metrics.trackOutcome('payment.process', 'success', { amount: 99.99 })
|
|
189
|
+
* metrics.trackOutcome('payment.process', 'failure', { error: 'insufficient_funds' })
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
trackOutcome(operationName: string, status: OutcomeStatus, attributes?: EventAttributes): void;
|
|
193
|
+
/**
|
|
194
|
+
* Track value metrics
|
|
195
|
+
*
|
|
196
|
+
* Record numerical values like revenue, transaction amounts,
|
|
197
|
+
* item counts, processing times, engagement scores, etc.
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```typescript
|
|
201
|
+
* // Track revenue
|
|
202
|
+
* metrics.trackValue('order.revenue', 149.99, {
|
|
203
|
+
* currency: 'USD',
|
|
204
|
+
* productCategory: 'electronics'
|
|
205
|
+
* })
|
|
206
|
+
*
|
|
207
|
+
* // Track items per cart
|
|
208
|
+
* metrics.trackValue('cart.item_count', 5, {
|
|
209
|
+
* userId: '123'
|
|
210
|
+
* })
|
|
211
|
+
*
|
|
212
|
+
* // Track processing time
|
|
213
|
+
* metrics.trackValue('api.response_time', 250, {
|
|
214
|
+
* unit: 'ms',
|
|
215
|
+
* endpoint: '/api/checkout'
|
|
216
|
+
* })
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
trackValue(metricName: string, value: number, attributes?: EventAttributes): void;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Get or create a Metrics instance for a service
|
|
223
|
+
*
|
|
224
|
+
* @param serviceName - Service name for metric namespacing
|
|
225
|
+
* @param logger - Optional logger
|
|
226
|
+
* @returns Metrics instance
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* ```typescript
|
|
230
|
+
* const metrics = getMetrics('checkout')
|
|
231
|
+
* metrics.trackEvent('order.completed', { orderId: '123' })
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
declare function getMetrics(serviceName: string, logger?: Logger): Metric;
|
|
235
|
+
/**
|
|
236
|
+
* Reset all metrics instances (mainly for testing)
|
|
237
|
+
*/
|
|
238
|
+
declare function resetMetrics(): void;
|
|
239
|
+
|
|
240
|
+
export { EventAttributes, FunnelStatus, Metric, type MetricConfig, type MetricsOptions, OutcomeStatus, getMetrics, resetMetrics };
|
package/dist/metric.d.ts
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { Logger } from './logger.js';
|
|
2
|
+
import { EventAttributes, FunnelStatus, OutcomeStatus } from './event-subscriber.js';
|
|
3
|
+
import { MetricsCollector } from './metric-testing.js';
|
|
4
|
+
import 'pino';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Metrics API for OpenTelemetry
|
|
8
|
+
*
|
|
9
|
+
* Track business metrics for OpenTelemetry (Prometheus/Grafana).
|
|
10
|
+
* For business people who think in metrics.
|
|
11
|
+
*
|
|
12
|
+
* @example Track business metrics
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const metrics = new Metric('checkout')
|
|
15
|
+
*
|
|
16
|
+
* // Track events as metrics
|
|
17
|
+
* metrics.trackEvent('order.completed', {
|
|
18
|
+
* amount: 99.99,
|
|
19
|
+
* currency: 'USD'
|
|
20
|
+
* })
|
|
21
|
+
*
|
|
22
|
+
* // Track conversion funnels
|
|
23
|
+
* metrics.trackFunnelStep('checkout', 'started', { cartValue: 99.99 })
|
|
24
|
+
* metrics.trackFunnelStep('checkout', 'completed', { cartValue: 99.99 })
|
|
25
|
+
*
|
|
26
|
+
* // Track outcomes
|
|
27
|
+
* metrics.trackOutcome('payment.process', 'success', { amount: 99.99 })
|
|
28
|
+
* metrics.trackOutcome('payment.process', 'failure', { error: 'insufficient_funds' })
|
|
29
|
+
*
|
|
30
|
+
* // Track values
|
|
31
|
+
* metrics.trackValue('revenue', 149.99, { currency: 'USD' })
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Metrics class for tracking business metrics in OpenTelemetry
|
|
37
|
+
*
|
|
38
|
+
* Track critical business indicators such as:
|
|
39
|
+
* - User events (signups, purchases, feature usage) as metrics
|
|
40
|
+
* - Conversion funnels (signup → activation → purchase)
|
|
41
|
+
* - Business outcomes (success/failure rates)
|
|
42
|
+
* - Value metrics (revenue, counts, etc.)
|
|
43
|
+
*
|
|
44
|
+
* All metrics are sent to OpenTelemetry (OTLP/Prometheus/Grafana).
|
|
45
|
+
*/
|
|
46
|
+
/**
|
|
47
|
+
* Metric configuration for customizing metric names and descriptions
|
|
48
|
+
*/
|
|
49
|
+
interface MetricConfig {
|
|
50
|
+
/** Metric name (e.g., 'metrics.events' or 'custom.events') */
|
|
51
|
+
name?: string;
|
|
52
|
+
/** Metric description */
|
|
53
|
+
description?: string;
|
|
54
|
+
/** Metric unit (default: '1') */
|
|
55
|
+
unit?: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Metrics options
|
|
59
|
+
*/
|
|
60
|
+
interface MetricsOptions {
|
|
61
|
+
/** Optional logger for audit trail */
|
|
62
|
+
logger?: Logger;
|
|
63
|
+
/** Optional collector for testing (captures metrics in memory) */
|
|
64
|
+
collector?: MetricsCollector;
|
|
65
|
+
/**
|
|
66
|
+
* Namespace for metrics (default: 'metrics')
|
|
67
|
+
* Results in metrics like: {serviceName}.{namespace}.events
|
|
68
|
+
*/
|
|
69
|
+
namespace?: string;
|
|
70
|
+
/**
|
|
71
|
+
* Custom metric configurations
|
|
72
|
+
* Override metric names, descriptions, and units
|
|
73
|
+
*/
|
|
74
|
+
metrics?: {
|
|
75
|
+
events?: MetricConfig;
|
|
76
|
+
funnel?: MetricConfig;
|
|
77
|
+
outcomes?: MetricConfig;
|
|
78
|
+
value?: MetricConfig;
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
declare class Metric {
|
|
82
|
+
private serviceName;
|
|
83
|
+
private eventCounter;
|
|
84
|
+
private funnelCounter;
|
|
85
|
+
private outcomeCounter;
|
|
86
|
+
private valueHistogram;
|
|
87
|
+
private logger?;
|
|
88
|
+
private collector?;
|
|
89
|
+
/**
|
|
90
|
+
* Create a new Metrics instance
|
|
91
|
+
*
|
|
92
|
+
* @param serviceName - Service name for metric namespacing
|
|
93
|
+
* @param options - Optional configuration (logger, collector, namespace, metrics)
|
|
94
|
+
*
|
|
95
|
+
* @example Basic usage (default 'metrics' namespace)
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const metrics = new Metric('checkout');
|
|
98
|
+
* // Creates: checkout.metrics.events, checkout.metrics.funnel, etc.
|
|
99
|
+
* ```
|
|
100
|
+
*
|
|
101
|
+
* @example Custom namespace
|
|
102
|
+
* ```typescript
|
|
103
|
+
* const metrics = new Metric('api', { namespace: 'business' });
|
|
104
|
+
* // Creates: api.business.events, api.business.funnel, etc.
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @example Custom metric names and descriptions
|
|
108
|
+
* ```typescript
|
|
109
|
+
* const metrics = new Metric('payments', {
|
|
110
|
+
* metrics: {
|
|
111
|
+
* outcomes: {
|
|
112
|
+
* name: 'payments.transactions',
|
|
113
|
+
* description: 'Payment transaction outcomes',
|
|
114
|
+
* unit: 'transactions'
|
|
115
|
+
* },
|
|
116
|
+
* value: {
|
|
117
|
+
* name: 'payments.revenue',
|
|
118
|
+
* description: 'Payment revenue in USD',
|
|
119
|
+
* unit: 'USD'
|
|
120
|
+
* }
|
|
121
|
+
* }
|
|
122
|
+
* });
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
constructor(serviceName: string, options?: MetricsOptions);
|
|
126
|
+
/**
|
|
127
|
+
* Track a business event as a metric
|
|
128
|
+
*
|
|
129
|
+
* Use this for tracking user actions, business events, product usage as metrics:
|
|
130
|
+
* - "user.signup"
|
|
131
|
+
* - "order.completed"
|
|
132
|
+
* - "feature.used"
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* // Track user signup as metric
|
|
137
|
+
* metrics.trackEvent('user.signup', {
|
|
138
|
+
* userId: '123',
|
|
139
|
+
* plan: 'pro'
|
|
140
|
+
* })
|
|
141
|
+
*
|
|
142
|
+
* // Track order as metric
|
|
143
|
+
* metrics.trackEvent('order.completed', {
|
|
144
|
+
* orderId: 'ord_123',
|
|
145
|
+
* amount: 99.99
|
|
146
|
+
* })
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
trackEvent(eventName: string, attributes?: EventAttributes): void;
|
|
150
|
+
/**
|
|
151
|
+
* Track conversion funnel steps as metrics
|
|
152
|
+
*
|
|
153
|
+
* Monitor where users drop off in multi-step processes.
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* // Track signup funnel
|
|
158
|
+
* metrics.trackFunnelStep('signup', 'started', { userId: '123' })
|
|
159
|
+
* metrics.trackFunnelStep('signup', 'email_verified', { userId: '123' })
|
|
160
|
+
* metrics.trackFunnelStep('signup', 'completed', { userId: '123' })
|
|
161
|
+
*
|
|
162
|
+
* // Track checkout flow
|
|
163
|
+
* metrics.trackFunnelStep('checkout', 'started', { cartValue: 99.99 })
|
|
164
|
+
* metrics.trackFunnelStep('checkout', 'payment_info', { cartValue: 99.99 })
|
|
165
|
+
* metrics.trackFunnelStep('checkout', 'completed', { cartValue: 99.99 })
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
trackFunnelStep(funnelName: string, status: FunnelStatus, attributes?: EventAttributes): void;
|
|
169
|
+
/**
|
|
170
|
+
* Track outcomes (success/failure/partial) as metrics
|
|
171
|
+
*
|
|
172
|
+
* Monitor success rates of critical operations.
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```typescript
|
|
176
|
+
* // Track email delivery
|
|
177
|
+
* metrics.trackOutcome('email.delivery', 'success', {
|
|
178
|
+
* recipientType: 'user',
|
|
179
|
+
* emailType: 'welcome'
|
|
180
|
+
* })
|
|
181
|
+
*
|
|
182
|
+
* metrics.trackOutcome('email.delivery', 'failure', {
|
|
183
|
+
* recipientType: 'user',
|
|
184
|
+
* errorCode: 'invalid_email'
|
|
185
|
+
* })
|
|
186
|
+
*
|
|
187
|
+
* // Track payment processing
|
|
188
|
+
* metrics.trackOutcome('payment.process', 'success', { amount: 99.99 })
|
|
189
|
+
* metrics.trackOutcome('payment.process', 'failure', { error: 'insufficient_funds' })
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
trackOutcome(operationName: string, status: OutcomeStatus, attributes?: EventAttributes): void;
|
|
193
|
+
/**
|
|
194
|
+
* Track value metrics
|
|
195
|
+
*
|
|
196
|
+
* Record numerical values like revenue, transaction amounts,
|
|
197
|
+
* item counts, processing times, engagement scores, etc.
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```typescript
|
|
201
|
+
* // Track revenue
|
|
202
|
+
* metrics.trackValue('order.revenue', 149.99, {
|
|
203
|
+
* currency: 'USD',
|
|
204
|
+
* productCategory: 'electronics'
|
|
205
|
+
* })
|
|
206
|
+
*
|
|
207
|
+
* // Track items per cart
|
|
208
|
+
* metrics.trackValue('cart.item_count', 5, {
|
|
209
|
+
* userId: '123'
|
|
210
|
+
* })
|
|
211
|
+
*
|
|
212
|
+
* // Track processing time
|
|
213
|
+
* metrics.trackValue('api.response_time', 250, {
|
|
214
|
+
* unit: 'ms',
|
|
215
|
+
* endpoint: '/api/checkout'
|
|
216
|
+
* })
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
trackValue(metricName: string, value: number, attributes?: EventAttributes): void;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Get or create a Metrics instance for a service
|
|
223
|
+
*
|
|
224
|
+
* @param serviceName - Service name for metric namespacing
|
|
225
|
+
* @param logger - Optional logger
|
|
226
|
+
* @returns Metrics instance
|
|
227
|
+
*
|
|
228
|
+
* @example
|
|
229
|
+
* ```typescript
|
|
230
|
+
* const metrics = getMetrics('checkout')
|
|
231
|
+
* metrics.trackEvent('order.completed', { orderId: '123' })
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
declare function getMetrics(serviceName: string, logger?: Logger): Metric;
|
|
235
|
+
/**
|
|
236
|
+
* Reset all metrics instances (mainly for testing)
|
|
237
|
+
*/
|
|
238
|
+
declare function resetMetrics(): void;
|
|
239
|
+
|
|
240
|
+
export { EventAttributes, FunnelStatus, Metric, type MetricConfig, type MetricsOptions, OutcomeStatus, getMetrics, resetMetrics };
|
package/dist/metric.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { Metric, getMetrics, resetMetrics } from './chunk-2LNRY4QK.js';
|
|
2
|
+
import './chunk-5ZN622AO.js';
|
|
3
|
+
import './chunk-LITNXTTT.js';
|
|
4
|
+
import './chunk-5GWX5LFW.js';
|
|
5
|
+
import './chunk-KVGNW3FC.js';
|
|
6
|
+
import './chunk-P6JUDYNO.js';
|
|
7
|
+
import './chunk-Z6ZWNWWR.js';
|
|
8
|
+
//# sourceMappingURL=metric.js.map
|
|
9
|
+
//# sourceMappingURL=metric.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"metric.js"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('./chunk-G7VZBCD6.cjs');
|
|
4
|
+
var sdkTraceBase = require('@opentelemetry/sdk-trace-base');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
Object.defineProperty(exports, "BatchSpanProcessor", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function () { return sdkTraceBase.BatchSpanProcessor; }
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "SimpleSpanProcessor", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () { return sdkTraceBase.SimpleSpanProcessor; }
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=processors.cjs.map
|
|
17
|
+
//# sourceMappingURL=processors.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"processors.cjs","sourcesContent":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { BatchSpanProcessor, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { BatchSpanProcessor, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"processors.js","sourcesContent":[]}
|