autotel 3.6.0 → 4.0.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/dist/attribute-redacting-processor-DtTS9xxh.d.cts +175 -0
- package/dist/attribute-redacting-processor-DtTS9xxh.d.cts.map +1 -0
- package/dist/attribute-redacting-processor-DtTS9xxh.d.ts +175 -0
- package/dist/attribute-redacting-processor-DtTS9xxh.d.ts.map +1 -0
- package/dist/attribute-redacting-processor.cjs +374 -33
- package/dist/attribute-redacting-processor.cjs.map +1 -1
- package/dist/attribute-redacting-processor.d.cts +2 -207
- package/dist/attribute-redacting-processor.d.ts +2 -207
- package/dist/attribute-redacting-processor.js +368 -2
- package/dist/attribute-redacting-processor.js.map +1 -1
- package/dist/attributes-CmYpdqCN.js +591 -0
- package/dist/attributes-CmYpdqCN.js.map +1 -0
- package/dist/attributes-PZ5doLgw.cjs +704 -0
- package/dist/attributes-PZ5doLgw.cjs.map +1 -0
- package/dist/attributes.cjs +21 -85
- package/dist/attributes.d.cts +2 -20
- package/dist/attributes.d.ts +2 -20
- package/dist/attributes.js +3 -5
- package/dist/auto.cjs +50 -28
- package/dist/auto.cjs.map +1 -1
- package/dist/auto.d.cts +1 -2
- package/dist/auto.d.ts +1 -2
- package/dist/auto.js +49 -23
- package/dist/auto.js.map +1 -1
- package/dist/business-baggage.cjs +357 -13
- package/dist/business-baggage.cjs.map +1 -1
- package/dist/business-baggage.d.cts +106 -139
- package/dist/business-baggage.d.cts.map +1 -0
- package/dist/business-baggage.d.ts +106 -139
- package/dist/business-baggage.d.ts.map +1 -0
- package/dist/business-baggage.js +357 -2
- package/dist/business-baggage.js.map +1 -1
- package/dist/canonical-log-line-processor--RlFDHhm.cjs +377 -0
- package/dist/canonical-log-line-processor--RlFDHhm.cjs.map +1 -0
- package/dist/canonical-log-line-processor-BcRuAdRk.d.ts +147 -0
- package/dist/canonical-log-line-processor-BcRuAdRk.d.ts.map +1 -0
- package/dist/canonical-log-line-processor-DbBQT5vY.js +366 -0
- package/dist/canonical-log-line-processor-DbBQT5vY.js.map +1 -0
- package/dist/canonical-log-line-processor-xvjMgtpF.d.cts +147 -0
- package/dist/canonical-log-line-processor-xvjMgtpF.d.cts.map +1 -0
- package/dist/config.cjs +118 -22
- package/dist/config.cjs.map +1 -1
- package/dist/config.d.cts +33 -45
- package/dist/config.d.cts.map +1 -0
- package/dist/config.d.ts +33 -45
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +116 -3
- package/dist/config.js.map +1 -1
- package/dist/correlated-events-Bzh5y-UB.js +28 -0
- package/dist/correlated-events-Bzh5y-UB.js.map +1 -0
- package/dist/correlated-events-kSwLo3mi.cjs +34 -0
- package/dist/correlated-events-kSwLo3mi.cjs.map +1 -0
- package/dist/correlation-id.cjs +11 -54
- package/dist/correlation-id.d.cts +6 -5
- package/dist/correlation-id.d.cts.map +1 -0
- package/dist/correlation-id.d.ts +6 -5
- package/dist/correlation-id.d.ts.map +1 -0
- package/dist/correlation-id.js +3 -17
- package/dist/db.cjs +244 -209
- package/dist/db.cjs.map +1 -1
- package/dist/db.d.cts +28 -26
- package/dist/db.d.cts.map +1 -0
- package/dist/db.d.ts +28 -26
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +243 -207
- package/dist/db.js.map +1 -1
- package/dist/decorators.cjs +39 -66
- package/dist/decorators.cjs.map +1 -1
- package/dist/decorators.d.cts +10 -37
- package/dist/decorators.d.cts.map +1 -0
- package/dist/decorators.d.ts +10 -37
- package/dist/decorators.d.ts.map +1 -0
- package/dist/decorators.js +38 -64
- package/dist/decorators.js.map +1 -1
- package/dist/define-event-CreknLm3.d.ts +25 -0
- package/dist/define-event-CreknLm3.d.ts.map +1 -0
- package/dist/define-event-HZRizPwz.d.cts +25 -0
- package/dist/define-event-HZRizPwz.d.cts.map +1 -0
- package/dist/drain-pipeline.cjs +111 -9
- package/dist/drain-pipeline.cjs.map +1 -1
- package/dist/drain-pipeline.d.cts +27 -32
- package/dist/drain-pipeline.d.cts.map +1 -0
- package/dist/drain-pipeline.d.ts +27 -32
- package/dist/drain-pipeline.d.ts.map +1 -0
- package/dist/drain-pipeline.js +111 -2
- package/dist/drain-pipeline.js.map +1 -1
- package/dist/enrichers.cjs +59 -66
- package/dist/enrichers.cjs.map +1 -1
- package/dist/enrichers.d.cts +15 -13
- package/dist/enrichers.d.cts.map +1 -0
- package/dist/enrichers.d.ts +15 -13
- package/dist/enrichers.d.ts.map +1 -0
- package/dist/enrichers.js +58 -65
- package/dist/enrichers.js.map +1 -1
- package/dist/event-Dlqr4ZNL.cjs +778 -0
- package/dist/event-Dlqr4ZNL.cjs.map +1 -0
- package/dist/event-_58ryBjh.js +761 -0
- package/dist/event-_58ryBjh.js.map +1 -0
- package/dist/event-subscriber-D1XLkPzi.d.cts +223 -0
- package/dist/event-subscriber-D1XLkPzi.d.cts.map +1 -0
- package/dist/event-subscriber-D1XLkPzi.d.ts +223 -0
- package/dist/event-subscriber-D1XLkPzi.d.ts.map +1 -0
- package/dist/event-subscriber.cjs +0 -6
- package/dist/event-subscriber.d.cts +2 -221
- package/dist/event-subscriber.d.ts +2 -221
- package/dist/event-subscriber.js +1 -3
- package/dist/event-testing-BqRnI0z4.d.cts +106 -0
- package/dist/event-testing-BqRnI0z4.d.cts.map +1 -0
- package/dist/event-testing-CfFs3to2.d.ts +106 -0
- package/dist/event-testing-CfFs3to2.d.ts.map +1 -0
- package/dist/event-testing.cjs +93 -17
- package/dist/event-testing.cjs.map +1 -1
- package/dist/event-testing.d.cts +2 -110
- package/dist/event-testing.d.ts +2 -110
- package/dist/event-testing.js +91 -2
- package/dist/event-testing.js.map +1 -1
- package/dist/event.cjs +5 -37
- package/dist/event.d.cts +295 -340
- package/dist/event.d.cts.map +1 -0
- package/dist/event.d.ts +295 -340
- package/dist/event.d.ts.map +1 -0
- package/dist/event.js +3 -21
- package/dist/exporters.cjs +12 -16
- package/dist/exporters.d.cts +86 -111
- package/dist/exporters.d.cts.map +1 -0
- package/dist/exporters.d.ts +86 -111
- package/dist/exporters.d.ts.map +1 -0
- package/dist/exporters.js +4 -4
- package/dist/filtering-span-processor-B8R8B7Uk.d.cts +59 -0
- package/dist/filtering-span-processor-B8R8B7Uk.d.cts.map +1 -0
- package/dist/filtering-span-processor-B8R8B7Uk.d.ts +59 -0
- package/dist/filtering-span-processor-B8R8B7Uk.d.ts.map +1 -0
- package/dist/filtering-span-processor.cjs +49 -9
- package/dist/filtering-span-processor.cjs.map +1 -1
- package/dist/filtering-span-processor.d.cts +2 -80
- package/dist/filtering-span-processor.d.ts +2 -80
- package/dist/filtering-span-processor.js +49 -2
- package/dist/filtering-span-processor.js.map +1 -1
- package/dist/functional-BGkT8J-h.js +1265 -0
- package/dist/functional-BGkT8J-h.js.map +1 -0
- package/dist/functional-C4CzoVrX.cjs +1312 -0
- package/dist/functional-C4CzoVrX.cjs.map +1 -0
- package/dist/functional.cjs +11 -57
- package/dist/functional.d.cts +96 -97
- package/dist/functional.d.cts.map +1 -0
- package/dist/functional.d.ts +96 -97
- package/dist/functional.d.ts.map +1 -0
- package/dist/functional.js +3 -20
- package/dist/http.cjs +276 -176
- package/dist/http.cjs.map +1 -1
- package/dist/http.d.cts +17 -37
- package/dist/http.d.cts.map +1 -0
- package/dist/http.d.ts +17 -37
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +275 -174
- package/dist/http.js.map +1 -1
- package/dist/index-Ck06vlW2.d.ts +678 -0
- package/dist/index-Ck06vlW2.d.ts.map +1 -0
- package/dist/index-eKuioqT1.d.cts +678 -0
- package/dist/index-eKuioqT1.d.cts.map +1 -0
- package/dist/index.cjs +751 -1218
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +341 -659
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +341 -659
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +606 -737
- package/dist/index.js.map +1 -1
- package/dist/init-CNp-ee80.d.cts +1157 -0
- package/dist/init-CNp-ee80.d.cts.map +1 -0
- package/dist/init-Ch6t7MNI.js +1015 -0
- package/dist/init-Ch6t7MNI.js.map +1 -0
- package/dist/init-DJQOdVlN.d.ts +1157 -0
- package/dist/init-DJQOdVlN.d.ts.map +1 -0
- package/dist/init-DvapOXCc.cjs +1092 -0
- package/dist/init-DvapOXCc.cjs.map +1 -0
- package/dist/instrumentation.cjs +159 -185
- package/dist/instrumentation.cjs.map +1 -1
- package/dist/instrumentation.d.cts +42 -40
- package/dist/instrumentation.d.cts.map +1 -0
- package/dist/instrumentation.d.ts +42 -40
- package/dist/instrumentation.d.ts.map +1 -0
- package/dist/instrumentation.js +158 -183
- package/dist/instrumentation.js.map +1 -1
- package/dist/logger-BauSUhUv.d.cts +313 -0
- package/dist/logger-BauSUhUv.d.cts.map +1 -0
- package/dist/logger-BauSUhUv.d.ts +313 -0
- package/dist/logger-BauSUhUv.d.ts.map +1 -0
- package/dist/logger.cjs +225 -25
- package/dist/logger.cjs.map +1 -1
- package/dist/logger.d.cts +2 -348
- package/dist/logger.d.ts +2 -348
- package/dist/logger.js +204 -4
- package/dist/logger.js.map +1 -1
- package/dist/messaging-adapters.cjs +292 -187
- package/dist/messaging-adapters.cjs.map +1 -1
- package/dist/messaging-adapters.d.cts +28 -66
- package/dist/messaging-adapters.d.cts.map +1 -0
- package/dist/messaging-adapters.d.ts +28 -66
- package/dist/messaging-adapters.d.ts.map +1 -0
- package/dist/messaging-adapters.js +291 -185
- package/dist/messaging-adapters.js.map +1 -1
- package/dist/messaging-testing.cjs +306 -372
- package/dist/messaging-testing.cjs.map +1 -1
- package/dist/messaging-testing.d.cts +194 -223
- package/dist/messaging-testing.d.cts.map +1 -0
- package/dist/messaging-testing.d.ts +194 -223
- package/dist/messaging-testing.d.ts.map +1 -0
- package/dist/messaging-testing.js +305 -371
- package/dist/messaging-testing.js.map +1 -1
- package/dist/messaging.cjs +757 -36
- package/dist/messaging.cjs.map +1 -1
- package/dist/messaging.d.cts +603 -644
- package/dist/messaging.d.cts.map +1 -0
- package/dist/messaging.d.ts +603 -644
- package/dist/messaging.d.ts.map +1 -0
- package/dist/messaging.js +756 -21
- package/dist/messaging.js.map +1 -1
- package/dist/metric-helpers.cjs +27 -27
- package/dist/metric-helpers.cjs.map +1 -1
- package/dist/metric-helpers.d.cts +4 -2
- package/dist/metric-helpers.d.cts.map +1 -0
- package/dist/metric-helpers.d.ts +4 -2
- package/dist/metric-helpers.d.ts.map +1 -0
- package/dist/metric-helpers.js +24 -4
- package/dist/metric-helpers.js.map +1 -1
- package/dist/metric-testing-DXdK3-Q3.d.ts +106 -0
- package/dist/metric-testing-DXdK3-Q3.d.ts.map +1 -0
- package/dist/metric-testing-MxvzChDp.d.cts +106 -0
- package/dist/metric-testing-MxvzChDp.d.cts.map +1 -0
- package/dist/metric-testing.cjs +93 -17
- package/dist/metric-testing.cjs.map +1 -1
- package/dist/metric-testing.d.cts +2 -110
- package/dist/metric-testing.d.ts +2 -110
- package/dist/metric-testing.js +91 -2
- package/dist/metric-testing.js.map +1 -1
- package/dist/metric.cjs +306 -22
- package/dist/metric.cjs.map +1 -1
- package/dist/metric.d.cts +170 -198
- package/dist/metric.d.cts.map +1 -0
- package/dist/metric.d.ts +170 -198
- package/dist/metric.d.ts.map +1 -0
- package/dist/metric.js +277 -7
- package/dist/metric.js.map +1 -1
- package/dist/node-require-DF5QBX6z.cjs +99 -0
- package/dist/node-require-DF5QBX6z.cjs.map +1 -0
- package/dist/node-require-Db1oDpLj.js +88 -0
- package/dist/node-require-Db1oDpLj.js.map +1 -0
- package/dist/operation-context-C-2hmmtP.js +59 -0
- package/dist/operation-context-C-2hmmtP.js.map +1 -0
- package/dist/operation-context-n4_obUwq.cjs +70 -0
- package/dist/operation-context-n4_obUwq.cjs.map +1 -0
- package/dist/parse-error.cjs +55 -9
- package/dist/parse-error.cjs.map +1 -1
- package/dist/parse-error.d.cts +12 -10
- package/dist/parse-error.d.cts.map +1 -0
- package/dist/parse-error.d.ts +12 -10
- package/dist/parse-error.d.ts.map +1 -0
- package/dist/parse-error.js +55 -2
- package/dist/parse-error.js.map +1 -1
- package/dist/pretty-console-exporter-CMzlrRNg.cjs +232 -0
- package/dist/pretty-console-exporter-CMzlrRNg.cjs.map +1 -0
- package/dist/pretty-console-exporter-DqKl_q9z.js +227 -0
- package/dist/pretty-console-exporter-DqKl_q9z.js.map +1 -0
- package/dist/processors.cjs +13 -17
- package/dist/processors.d.cts +3 -171
- package/dist/processors.d.ts +3 -171
- package/dist/processors.js +4 -4
- package/dist/register.cjs +35 -6
- package/dist/register.cjs.map +1 -1
- package/dist/register.d.cts +1 -2
- package/dist/register.d.ts +1 -2
- package/dist/register.js +36 -3
- package/dist/register.js.map +1 -1
- package/dist/registry-DVSmWg6Y.js +175 -0
- package/dist/registry-DVSmWg6Y.js.map +1 -0
- package/dist/registry-DYgvb62e.cjs +319 -0
- package/dist/registry-DYgvb62e.cjs.map +1 -0
- package/dist/sampling-CR0Va1VB.d.ts +351 -0
- package/dist/sampling-CR0Va1VB.d.ts.map +1 -0
- package/dist/sampling-DfYhDJij.d.cts +351 -0
- package/dist/sampling-DfYhDJij.d.cts.map +1 -0
- package/dist/sampling.cjs +452 -60
- package/dist/sampling.cjs.map +1 -1
- package/dist/sampling.d.cts +2 -379
- package/dist/sampling.d.ts +2 -379
- package/dist/sampling.js +441 -5
- package/dist/sampling.js.map +1 -1
- package/dist/security-schema.cjs +65 -46
- package/dist/security-schema.cjs.map +1 -1
- package/dist/security-schema.d.cts +23 -26
- package/dist/security-schema.d.cts.map +1 -0
- package/dist/security-schema.d.ts +23 -26
- package/dist/security-schema.d.ts.map +1 -0
- package/dist/security-schema.js +64 -45
- package/dist/security-schema.js.map +1 -1
- package/dist/semantic-conventions-FhSxv-bK.d.cts +32 -0
- package/dist/semantic-conventions-FhSxv-bK.d.cts.map +1 -0
- package/dist/semantic-conventions-FhSxv-bK.d.ts +32 -0
- package/dist/semantic-conventions-FhSxv-bK.d.ts.map +1 -0
- package/dist/semantic-conventions.cjs +15 -26
- package/dist/semantic-conventions.cjs.map +1 -1
- package/dist/semantic-conventions.d.cts +2 -29
- package/dist/semantic-conventions.d.ts +2 -29
- package/dist/semantic-conventions.js +12 -3
- package/dist/semantic-conventions.js.map +1 -1
- package/dist/semantic-helpers.cjs +327 -39
- package/dist/semantic-helpers.cjs.map +1 -1
- package/dist/semantic-helpers.d.cts +30 -150
- package/dist/semantic-helpers.d.cts.map +1 -0
- package/dist/semantic-helpers.d.ts +30 -150
- package/dist/semantic-helpers.d.ts.map +1 -0
- package/dist/semantic-helpers.js +326 -20
- package/dist/semantic-helpers.js.map +1 -1
- package/dist/span-name-normalizer-8ZOGJuwv.d.cts +70 -0
- package/dist/span-name-normalizer-8ZOGJuwv.d.cts.map +1 -0
- package/dist/span-name-normalizer-8ZOGJuwv.d.ts +70 -0
- package/dist/span-name-normalizer-8ZOGJuwv.d.ts.map +1 -0
- package/dist/span-name-normalizer.cjs +95 -17
- package/dist/span-name-normalizer.cjs.map +1 -1
- package/dist/span-name-normalizer.d.cts +2 -94
- package/dist/span-name-normalizer.d.ts +2 -94
- package/dist/span-name-normalizer.js +93 -2
- package/dist/span-name-normalizer.js.map +1 -1
- package/dist/stable-hash-BNTMrmdB.cjs +28 -0
- package/dist/stable-hash-BNTMrmdB.cjs.map +1 -0
- package/dist/stable-hash-Cg5cT34Q.js +23 -0
- package/dist/stable-hash-Cg5cT34Q.js.map +1 -0
- package/dist/structured-error-9--cxBay.js +143 -0
- package/dist/structured-error-9--cxBay.js.map +1 -0
- package/dist/structured-error-CHg7DoIQ.cjs +178 -0
- package/dist/structured-error-CHg7DoIQ.cjs.map +1 -0
- package/dist/tail-sampling-processor.cjs +26 -13
- package/dist/tail-sampling-processor.cjs.map +1 -1
- package/dist/tail-sampling-processor.d.cts +11 -23
- package/dist/tail-sampling-processor.d.cts.map +1 -0
- package/dist/tail-sampling-processor.d.ts +11 -23
- package/dist/tail-sampling-processor.d.ts.map +1 -0
- package/dist/tail-sampling-processor.js +27 -6
- package/dist/tail-sampling-processor.js.map +1 -1
- package/dist/test-span-collector.cjs +70 -72
- package/dist/test-span-collector.cjs.map +1 -1
- package/dist/test-span-collector.d.cts +25 -43
- package/dist/test-span-collector.d.cts.map +1 -0
- package/dist/test-span-collector.d.ts +25 -43
- package/dist/test-span-collector.d.ts.map +1 -0
- package/dist/test-span-collector.js +69 -70
- package/dist/test-span-collector.js.map +1 -1
- package/dist/testing.cjs +389 -278
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +39 -62
- package/dist/testing.d.cts.map +1 -0
- package/dist/testing.d.ts +39 -62
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +386 -265
- package/dist/testing.js.map +1 -1
- package/dist/trace-context-Cijqoi6e.d.cts +212 -0
- package/dist/trace-context-Cijqoi6e.d.cts.map +1 -0
- package/dist/trace-context-Cijqoi6e.d.ts +212 -0
- package/dist/trace-context-Cijqoi6e.d.ts.map +1 -0
- package/dist/trace-helpers.cjs +634 -54
- package/dist/trace-helpers.cjs.map +1 -1
- package/dist/trace-helpers.d.cts +17 -49
- package/dist/trace-helpers.d.cts.map +1 -0
- package/dist/trace-helpers.d.ts +17 -49
- package/dist/trace-helpers.d.ts.map +1 -0
- package/dist/trace-helpers.js +624 -3
- package/dist/trace-helpers.js.map +1 -1
- package/dist/tracer-provider.cjs +227 -16
- package/dist/tracer-provider.cjs.map +1 -1
- package/dist/tracer-provider.d.cts +5 -4
- package/dist/tracer-provider.d.cts.map +1 -0
- package/dist/tracer-provider.d.ts +5 -4
- package/dist/tracer-provider.d.ts.map +1 -0
- package/dist/tracer-provider.js +227 -2
- package/dist/tracer-provider.js.map +1 -1
- package/dist/track-3HY4NGV-.cjs +1212 -0
- package/dist/track-3HY4NGV-.cjs.map +1 -0
- package/dist/track-nsKVy-pj.js +1111 -0
- package/dist/track-nsKVy-pj.js.map +1 -0
- package/dist/validate.cjs +178 -115
- package/dist/validate.cjs.map +1 -1
- package/dist/validate.d.cts +40 -64
- package/dist/validate.d.cts.map +1 -0
- package/dist/validate.d.ts +40 -64
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +177 -113
- package/dist/validate.js.map +1 -1
- package/dist/validation-attributes.cjs +42 -17
- package/dist/validation-attributes.cjs.map +1 -1
- package/dist/validation-attributes.d.cts +13 -20
- package/dist/validation-attributes.d.cts.map +1 -0
- package/dist/validation-attributes.d.ts +13 -20
- package/dist/validation-attributes.d.ts.map +1 -0
- package/dist/validation-attributes.js +40 -2
- package/dist/validation-attributes.js.map +1 -1
- package/dist/webhook.cjs +286 -256
- package/dist/webhook.cjs.map +1 -1
- package/dist/webhook.d.cts +157 -192
- package/dist/webhook.d.cts.map +1 -0
- package/dist/webhook.d.ts +157 -192
- package/dist/webhook.d.ts.map +1 -0
- package/dist/webhook.js +285 -254
- package/dist/webhook.js.map +1 -1
- package/dist/workflow-distributed.cjs +498 -412
- package/dist/workflow-distributed.cjs.map +1 -1
- package/dist/workflow-distributed.d.cts +163 -173
- package/dist/workflow-distributed.d.cts.map +1 -0
- package/dist/workflow-distributed.d.ts +163 -173
- package/dist/workflow-distributed.d.ts.map +1 -0
- package/dist/workflow-distributed.js +497 -410
- package/dist/workflow-distributed.js.map +1 -1
- package/dist/workflow.cjs +405 -40
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +78 -131
- package/dist/workflow.d.cts.map +1 -0
- package/dist/workflow.d.ts +78 -131
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflow.js +403 -21
- package/dist/workflow.js.map +1 -1
- package/dist/yaml-config-B3dQ82GR.cjs +272 -0
- package/dist/yaml-config-B3dQ82GR.cjs.map +1 -0
- package/dist/yaml-config.cjs +5 -24
- package/dist/yaml-config.d.cts +30 -64
- package/dist/yaml-config.d.cts.map +1 -0
- package/dist/yaml-config.d.ts +30 -64
- package/dist/yaml-config.d.ts.map +1 -0
- package/dist/yaml-config.js +226 -7
- package/dist/yaml-config.js.map +1 -1
- package/package.json +4 -4
- package/skills/analyze-traces/SKILL.md +14 -12
- package/skills/review-otel-patterns/SKILL.md +4 -2
- package/skills/tune-sampling/SKILL.md +8 -3
- package/src/attributes/builders.ts +2 -20
- package/src/attributes/index.ts +0 -1
- package/src/attributes/registry.ts +2 -9
- package/src/attributes/types.ts +0 -8
- package/src/index.ts +7 -41
- package/src/request-logger.test.ts +53 -1
- package/src/request-logger.ts +58 -0
- package/src/semantic-helpers.test.ts +2 -87
- package/src/semantic-helpers.ts +0 -146
- package/src/validate.test.ts +3 -1
- package/src/validate.ts +9 -3
- package/dist/attributes.cjs.map +0 -1
- package/dist/attributes.js.map +0 -1
- package/dist/chunk-2ZKEORFN.cjs +0 -14
- package/dist/chunk-2ZKEORFN.cjs.map +0 -1
- package/dist/chunk-3QXBFGKP.js +0 -344
- package/dist/chunk-3QXBFGKP.js.map +0 -1
- package/dist/chunk-454CH4OV.js +0 -744
- package/dist/chunk-454CH4OV.js.map +0 -1
- package/dist/chunk-4A53YIAX.js +0 -180
- package/dist/chunk-4A53YIAX.js.map +0 -1
- package/dist/chunk-4IFSYQVX.js +0 -337
- package/dist/chunk-4IFSYQVX.js.map +0 -1
- package/dist/chunk-4P6ZOARG.cjs +0 -33
- package/dist/chunk-4P6ZOARG.cjs.map +0 -1
- package/dist/chunk-55ER2KD5.js +0 -228
- package/dist/chunk-55ER2KD5.js.map +0 -1
- package/dist/chunk-5ZN622AO.js +0 -73
- package/dist/chunk-5ZN622AO.js.map +0 -1
- package/dist/chunk-66YJ66GG.js +0 -1021
- package/dist/chunk-66YJ66GG.js.map +0 -1
- package/dist/chunk-6S5RUKU3.cjs +0 -347
- package/dist/chunk-6S5RUKU3.cjs.map +0 -1
- package/dist/chunk-6UQRVUN3.js +0 -222
- package/dist/chunk-6UQRVUN3.js.map +0 -1
- package/dist/chunk-7552UTQW.js +0 -11
- package/dist/chunk-7552UTQW.js.map +0 -1
- package/dist/chunk-7EQ4G4SI.cjs +0 -146
- package/dist/chunk-7EQ4G4SI.cjs.map +0 -1
- package/dist/chunk-7SAWIN74.js +0 -285
- package/dist/chunk-7SAWIN74.js.map +0 -1
- package/dist/chunk-A4E5AQFK.js +0 -30
- package/dist/chunk-A4E5AQFK.js.map +0 -1
- package/dist/chunk-ALPYR2GC.js +0 -1061
- package/dist/chunk-ALPYR2GC.js.map +0 -1
- package/dist/chunk-B7SWBE4P.cjs +0 -799
- package/dist/chunk-B7SWBE4P.cjs.map +0 -1
- package/dist/chunk-BZHG5IZ4.js +0 -73
- package/dist/chunk-BZHG5IZ4.js.map +0 -1
- package/dist/chunk-CEAQK2QY.cjs +0 -32
- package/dist/chunk-CEAQK2QY.cjs.map +0 -1
- package/dist/chunk-CMHVQR6P.js +0 -170
- package/dist/chunk-CMHVQR6P.js.map +0 -1
- package/dist/chunk-CU6IDACR.cjs +0 -224
- package/dist/chunk-CU6IDACR.cjs.map +0 -1
- package/dist/chunk-D4TM63S3.js +0 -795
- package/dist/chunk-D4TM63S3.js.map +0 -1
- package/dist/chunk-DCEDJQGG.js +0 -28
- package/dist/chunk-DCEDJQGG.js.map +0 -1
- package/dist/chunk-DPSA4QLA.js +0 -344
- package/dist/chunk-DPSA4QLA.js.map +0 -1
- package/dist/chunk-E6TERL5O.cjs +0 -23
- package/dist/chunk-E6TERL5O.cjs.map +0 -1
- package/dist/chunk-EE6CPXKH.cjs +0 -164
- package/dist/chunk-EE6CPXKH.cjs.map +0 -1
- package/dist/chunk-EOFB7XCL.cjs +0 -837
- package/dist/chunk-EOFB7XCL.cjs.map +0 -1
- package/dist/chunk-ESLWRGAG.cjs +0 -92
- package/dist/chunk-ESLWRGAG.cjs.map +0 -1
- package/dist/chunk-ESMHTKLJ.cjs +0 -206
- package/dist/chunk-ESMHTKLJ.cjs.map +0 -1
- package/dist/chunk-FMTHVSYY.cjs +0 -1039
- package/dist/chunk-FMTHVSYY.cjs.map +0 -1
- package/dist/chunk-FU6R566Y.cjs +0 -236
- package/dist/chunk-FU6R566Y.cjs.map +0 -1
- package/dist/chunk-GYR5K654.js +0 -91
- package/dist/chunk-GYR5K654.js.map +0 -1
- package/dist/chunk-HA2WBOGQ.js +0 -57
- package/dist/chunk-HA2WBOGQ.js.map +0 -1
- package/dist/chunk-HT5JQKN2.js +0 -118
- package/dist/chunk-HT5JQKN2.js.map +0 -1
- package/dist/chunk-INJD3G4K.cjs +0 -340
- package/dist/chunk-INJD3G4K.cjs.map +0 -1
- package/dist/chunk-IOYFAFHJ.cjs +0 -95
- package/dist/chunk-IOYFAFHJ.cjs.map +0 -1
- package/dist/chunk-J5QENANM.js +0 -87
- package/dist/chunk-J5QENANM.js.map +0 -1
- package/dist/chunk-J7VGRIAJ.js +0 -64
- package/dist/chunk-J7VGRIAJ.js.map +0 -1
- package/dist/chunk-KFOHQK7X.js +0 -144
- package/dist/chunk-KFOHQK7X.js.map +0 -1
- package/dist/chunk-KIL5CUN6.js +0 -31
- package/dist/chunk-KIL5CUN6.js.map +0 -1
- package/dist/chunk-KYXZS3EA.cjs +0 -100
- package/dist/chunk-KYXZS3EA.cjs.map +0 -1
- package/dist/chunk-LITNXTTT.js +0 -3
- package/dist/chunk-LITNXTTT.js.map +0 -1
- package/dist/chunk-LVIPBYFE.js +0 -157
- package/dist/chunk-LVIPBYFE.js.map +0 -1
- package/dist/chunk-M3LFHHTN.cjs +0 -764
- package/dist/chunk-M3LFHHTN.cjs.map +0 -1
- package/dist/chunk-N25JDZSC.js +0 -95
- package/dist/chunk-N25JDZSC.js.map +0 -1
- package/dist/chunk-NEIB3TLD.cjs +0 -360
- package/dist/chunk-NEIB3TLD.cjs.map +0 -1
- package/dist/chunk-NENU7E6V.cjs +0 -344
- package/dist/chunk-NENU7E6V.cjs.map +0 -1
- package/dist/chunk-NVAI5CCN.cjs +0 -39
- package/dist/chunk-NVAI5CCN.cjs.map +0 -1
- package/dist/chunk-NZ72VDNY.cjs +0 -4
- package/dist/chunk-NZ72VDNY.cjs.map +0 -1
- package/dist/chunk-OPPXYVEZ.cjs +0 -131
- package/dist/chunk-OPPXYVEZ.cjs.map +0 -1
- package/dist/chunk-Q4EULJQY.js +0 -35
- package/dist/chunk-Q4EULJQY.js.map +0 -1
- package/dist/chunk-QF7ARNUM.js +0 -339
- package/dist/chunk-QF7ARNUM.js.map +0 -1
- package/dist/chunk-QWW3E3JM.cjs +0 -178
- package/dist/chunk-QWW3E3JM.cjs.map +0 -1
- package/dist/chunk-R7QYGZUP.cjs +0 -1075
- package/dist/chunk-R7QYGZUP.cjs.map +0 -1
- package/dist/chunk-RUPKBKUF.js +0 -352
- package/dist/chunk-RUPKBKUF.js.map +0 -1
- package/dist/chunk-SEO6NAQT.js +0 -14
- package/dist/chunk-SEO6NAQT.js.map +0 -1
- package/dist/chunk-T4B5LB6E.cjs +0 -66
- package/dist/chunk-T4B5LB6E.cjs.map +0 -1
- package/dist/chunk-T5WRA76K.cjs +0 -32
- package/dist/chunk-T5WRA76K.cjs.map +0 -1
- package/dist/chunk-T7JO2TCP.js +0 -1233
- package/dist/chunk-T7JO2TCP.js.map +0 -1
- package/dist/chunk-TC5ZPWM4.cjs +0 -289
- package/dist/chunk-TC5ZPWM4.cjs.map +0 -1
- package/dist/chunk-TQ5UWA7S.js +0 -26
- package/dist/chunk-TQ5UWA7S.js.map +0 -1
- package/dist/chunk-UIKYE2QZ.js +0 -833
- package/dist/chunk-UIKYE2QZ.js.map +0 -1
- package/dist/chunk-UNPLAVE7.js +0 -21
- package/dist/chunk-UNPLAVE7.js.map +0 -1
- package/dist/chunk-UY3UYPBZ.cjs +0 -77
- package/dist/chunk-UY3UYPBZ.cjs.map +0 -1
- package/dist/chunk-V7UBMJAB.cjs +0 -1242
- package/dist/chunk-V7UBMJAB.cjs.map +0 -1
- package/dist/chunk-VH77IPJN.cjs +0 -358
- package/dist/chunk-VH77IPJN.cjs.map +0 -1
- package/dist/chunk-VQTCQKHQ.cjs +0 -17
- package/dist/chunk-VQTCQKHQ.cjs.map +0 -1
- package/dist/chunk-WGWSHJ2N.js +0 -38
- package/dist/chunk-WGWSHJ2N.js.map +0 -1
- package/dist/chunk-WJH6IYU2.cjs +0 -32
- package/dist/chunk-WJH6IYU2.cjs.map +0 -1
- package/dist/chunk-YREV3LGG.cjs +0 -61
- package/dist/chunk-YREV3LGG.cjs.map +0 -1
- package/dist/chunk-YTXEZ4SD.cjs +0 -77
- package/dist/chunk-YTXEZ4SD.cjs.map +0 -1
- package/dist/chunk-ZNMBW67B.cjs +0 -40
- package/dist/chunk-ZNMBW67B.cjs.map +0 -1
- package/dist/correlation-id.cjs.map +0 -1
- package/dist/correlation-id.js.map +0 -1
- package/dist/define-event-BL6Li7CM.d.ts +0 -23
- package/dist/define-event-ClP3T1Jx.d.cts +0 -23
- package/dist/event-subscriber.cjs.map +0 -1
- package/dist/event-subscriber.js.map +0 -1
- package/dist/event.cjs.map +0 -1
- package/dist/event.js.map +0 -1
- package/dist/exporters.cjs.map +0 -1
- package/dist/exporters.js.map +0 -1
- package/dist/functional.cjs.map +0 -1
- package/dist/functional.js.map +0 -1
- package/dist/init-DIowiiCh.d.ts +0 -1167
- package/dist/init-j-A1zI16.d.cts +0 -1167
- package/dist/processors.cjs.map +0 -1
- package/dist/processors.js.map +0 -1
- package/dist/trace-context-DbGKd1Rn.d.cts +0 -213
- package/dist/trace-context-DbGKd1Rn.d.ts +0 -213
- package/dist/utils-BahBCFtJ.d.cts +0 -712
- package/dist/utils-CLKwaUlG.d.ts +0 -712
- package/dist/yaml-config.cjs.map +0 -1
- package/src/gen-ai-cost.test.ts +0 -81
- package/src/gen-ai-cost.ts +0 -145
- package/src/gen-ai-events.test.ts +0 -135
- package/src/gen-ai-events.ts +0 -208
- package/src/gen-ai-metrics.test.ts +0 -96
- package/src/gen-ai-metrics.ts +0 -128
package/dist/chunk-EOFB7XCL.cjs
DELETED
|
@@ -1,837 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var chunkVQTCQKHQ_cjs = require('./chunk-VQTCQKHQ.cjs');
|
|
4
|
-
var chunkFMTHVSYY_cjs = require('./chunk-FMTHVSYY.cjs');
|
|
5
|
-
var chunkR7QYGZUP_cjs = require('./chunk-R7QYGZUP.cjs');
|
|
6
|
-
var api = require('@opentelemetry/api');
|
|
7
|
-
|
|
8
|
-
// src/circuit-breaker.ts
|
|
9
|
-
var DEFAULT_CONFIG = {
|
|
10
|
-
failureThreshold: 5,
|
|
11
|
-
resetTimeout: 3e4,
|
|
12
|
-
// 30 seconds
|
|
13
|
-
windowSize: 6e4
|
|
14
|
-
// 1 minute
|
|
15
|
-
};
|
|
16
|
-
var CircuitState = {
|
|
17
|
-
CLOSED: "CLOSED",
|
|
18
|
-
// Normal operation
|
|
19
|
-
OPEN: "OPEN",
|
|
20
|
-
// Fast-fail mode
|
|
21
|
-
HALF_OPEN: "HALF_OPEN"
|
|
22
|
-
// Testing recovery
|
|
23
|
-
};
|
|
24
|
-
var CircuitBreaker = class {
|
|
25
|
-
state = CircuitState.CLOSED;
|
|
26
|
-
failures = [];
|
|
27
|
-
lastFailureTime = 0;
|
|
28
|
-
config;
|
|
29
|
-
name;
|
|
30
|
-
constructor(name, config) {
|
|
31
|
-
this.name = name;
|
|
32
|
-
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Execute a function with circuit breaker protection
|
|
36
|
-
* Throws CircuitOpenError if circuit is open
|
|
37
|
-
*/
|
|
38
|
-
async execute(fn) {
|
|
39
|
-
if (this.state === CircuitState.OPEN) {
|
|
40
|
-
const now = Date.now();
|
|
41
|
-
if (now - this.lastFailureTime >= this.config.resetTimeout) {
|
|
42
|
-
this.state = CircuitState.HALF_OPEN;
|
|
43
|
-
} else {
|
|
44
|
-
throw new CircuitOpenError(
|
|
45
|
-
`Circuit breaker is OPEN for ${this.name}. Will retry in ${Math.ceil((this.config.resetTimeout - (now - this.lastFailureTime)) / 1e3)}s`
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
try {
|
|
50
|
-
const result = await fn();
|
|
51
|
-
if (this.state === CircuitState.HALF_OPEN) {
|
|
52
|
-
this.reset();
|
|
53
|
-
}
|
|
54
|
-
return result;
|
|
55
|
-
} catch (error) {
|
|
56
|
-
this.recordFailure(error);
|
|
57
|
-
throw error;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Record a failure and potentially open the circuit
|
|
62
|
-
*/
|
|
63
|
-
recordFailure(error) {
|
|
64
|
-
const now = Date.now();
|
|
65
|
-
this.failures = this.failures.filter(
|
|
66
|
-
(f) => now - f.timestamp < this.config.windowSize
|
|
67
|
-
);
|
|
68
|
-
this.failures.push({
|
|
69
|
-
timestamp: now,
|
|
70
|
-
error: error instanceof Error ? error.message : String(error)
|
|
71
|
-
});
|
|
72
|
-
this.lastFailureTime = now;
|
|
73
|
-
if (this.failures.length >= this.config.failureThreshold) {
|
|
74
|
-
if (this.state === CircuitState.HALF_OPEN) {
|
|
75
|
-
this.state = CircuitState.OPEN;
|
|
76
|
-
} else if (this.state === CircuitState.CLOSED) {
|
|
77
|
-
this.state = CircuitState.OPEN;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Reset the circuit breaker (on success)
|
|
83
|
-
*/
|
|
84
|
-
reset() {
|
|
85
|
-
this.state = CircuitState.CLOSED;
|
|
86
|
-
this.failures = [];
|
|
87
|
-
this.lastFailureTime = 0;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Get current state (for monitoring)
|
|
91
|
-
*/
|
|
92
|
-
getState() {
|
|
93
|
-
return this.state;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Get failure count in current window
|
|
97
|
-
*/
|
|
98
|
-
getFailureCount() {
|
|
99
|
-
const now = Date.now();
|
|
100
|
-
this.failures = this.failures.filter(
|
|
101
|
-
(f) => now - f.timestamp < this.config.windowSize
|
|
102
|
-
);
|
|
103
|
-
return this.failures.length;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Get recent failures (for debugging)
|
|
107
|
-
*/
|
|
108
|
-
getRecentFailures() {
|
|
109
|
-
const now = Date.now();
|
|
110
|
-
return this.failures.filter(
|
|
111
|
-
(f) => now - f.timestamp < this.config.windowSize
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Manually reset the circuit breaker (for testing or manual intervention)
|
|
116
|
-
*/
|
|
117
|
-
forceReset() {
|
|
118
|
-
this.reset();
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Manually open the circuit (for testing or manual intervention)
|
|
122
|
-
*/
|
|
123
|
-
forceOpen() {
|
|
124
|
-
this.state = CircuitState.OPEN;
|
|
125
|
-
this.lastFailureTime = Date.now();
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
var CircuitOpenError = class extends Error {
|
|
129
|
-
constructor(message) {
|
|
130
|
-
super(message);
|
|
131
|
-
this.name = "CircuitOpenError";
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
// src/events-config.ts
|
|
136
|
-
function hashValue(value) {
|
|
137
|
-
let hash = 0;
|
|
138
|
-
for (let i = 0; i < value.length; i++) {
|
|
139
|
-
const char = value.charCodeAt(i);
|
|
140
|
-
hash = (hash << 5) - hash + char;
|
|
141
|
-
hash = hash & hash;
|
|
142
|
-
}
|
|
143
|
-
return (hash >>> 0).toString(16).padStart(8, "0");
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
// src/event.ts
|
|
147
|
-
var Event = class {
|
|
148
|
-
serviceName;
|
|
149
|
-
logger;
|
|
150
|
-
collector;
|
|
151
|
-
subscribers;
|
|
152
|
-
hasSubscribers;
|
|
153
|
-
// Cached for performance
|
|
154
|
-
circuitBreakers;
|
|
155
|
-
// One per subscriber
|
|
156
|
-
/**
|
|
157
|
-
* Create a new Event instance
|
|
158
|
-
*
|
|
159
|
-
* **Note**: Most users should use `init()` + `track()` instead of creating Event instances directly.
|
|
160
|
-
*
|
|
161
|
-
* **Subscriber Resolution**:
|
|
162
|
-
* - If `subscribers` provided in options → uses those (instance override)
|
|
163
|
-
* - If `subscribers` not provided → falls back to subscribers from `init()` (global config)
|
|
164
|
-
* - If neither → no subscribers (events logged only)
|
|
165
|
-
*
|
|
166
|
-
* @param serviceName - Service name for identifying events
|
|
167
|
-
* @param options - Optional configuration (logger, collector, subscribers)
|
|
168
|
-
*
|
|
169
|
-
* @example Recommended: Use track() with init()
|
|
170
|
-
* ```typescript
|
|
171
|
-
* import { init, track } from 'autotel';
|
|
172
|
-
* import { PostHogSubscriber } from 'autotel-subscribers/posthog';
|
|
173
|
-
*
|
|
174
|
-
* init({
|
|
175
|
-
* service: 'checkout',
|
|
176
|
-
* subscribers: [new PostHogSubscriber({ apiKey: 'phc_...' })]
|
|
177
|
-
* });
|
|
178
|
-
*
|
|
179
|
-
* track('purchase.completed', { amount: 99.99 });
|
|
180
|
-
* ```
|
|
181
|
-
*
|
|
182
|
-
* @example Inherit subscribers from init()
|
|
183
|
-
* ```typescript
|
|
184
|
-
* // Uses subscribers configured in init()
|
|
185
|
-
* const event = new Event('checkout');
|
|
186
|
-
* event.trackEvent('purchase.completed', { amount: 99.99 });
|
|
187
|
-
* ```
|
|
188
|
-
*
|
|
189
|
-
* @example Override subscribers for this instance
|
|
190
|
-
* ```typescript
|
|
191
|
-
* import { Event } from 'autotel/event';
|
|
192
|
-
* import { PostHogSubscriber } from 'autotel-subscribers/posthog';
|
|
193
|
-
*
|
|
194
|
-
* // Override: use different subscribers for this instance only
|
|
195
|
-
* const event = new Event('checkout', {
|
|
196
|
-
* subscribers: [new PostHogSubscriber({ apiKey: 'phc_different_project' })]
|
|
197
|
-
* });
|
|
198
|
-
* ```
|
|
199
|
-
*/
|
|
200
|
-
constructor(serviceName, options = {}) {
|
|
201
|
-
this.serviceName = serviceName;
|
|
202
|
-
this.logger = options.logger;
|
|
203
|
-
this.collector = options.collector;
|
|
204
|
-
this.subscribers = options.subscribers === void 0 ? chunkR7QYGZUP_cjs.getConfig()?.subscribers || [] : options.subscribers;
|
|
205
|
-
this.hasSubscribers = this.subscribers.length > 0;
|
|
206
|
-
this.circuitBreakers = /* @__PURE__ */ new Map();
|
|
207
|
-
for (const subscriber of this.subscribers) {
|
|
208
|
-
const subscriberName = subscriber.name || "Unknown";
|
|
209
|
-
this.circuitBreakers.set(
|
|
210
|
-
subscriber,
|
|
211
|
-
new CircuitBreaker(subscriberName, {
|
|
212
|
-
failureThreshold: 5,
|
|
213
|
-
resetTimeout: 3e4,
|
|
214
|
-
// 30s
|
|
215
|
-
windowSize: 6e4
|
|
216
|
-
// 1min
|
|
217
|
-
})
|
|
218
|
-
);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Automatically enrich attributes with all available telemetry context
|
|
223
|
-
*
|
|
224
|
-
* Auto-captures:
|
|
225
|
-
* - Resource attributes: service.version, deployment.environment
|
|
226
|
-
* - Trace context: traceId, spanId, correlationId
|
|
227
|
-
* - Operation context: operation.name
|
|
228
|
-
*/
|
|
229
|
-
enrichWithTelemetryContext(attributes = {}) {
|
|
230
|
-
const enriched = {
|
|
231
|
-
service: this.serviceName,
|
|
232
|
-
...attributes
|
|
233
|
-
};
|
|
234
|
-
const config = chunkR7QYGZUP_cjs.getConfig();
|
|
235
|
-
if (config) {
|
|
236
|
-
if (config.version) {
|
|
237
|
-
enriched["service.version"] = config.version;
|
|
238
|
-
}
|
|
239
|
-
if (config.environment) {
|
|
240
|
-
enriched["deployment.environment"] = config.environment;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
const span = api.trace.getActiveSpan();
|
|
244
|
-
const spanContext = span?.spanContext();
|
|
245
|
-
if (spanContext) {
|
|
246
|
-
enriched.traceId = spanContext.traceId;
|
|
247
|
-
enriched.spanId = spanContext.spanId;
|
|
248
|
-
enriched.correlationId = spanContext.traceId.slice(0, 16);
|
|
249
|
-
}
|
|
250
|
-
const operationContext = chunkVQTCQKHQ_cjs.getOperationContext();
|
|
251
|
-
if (operationContext) {
|
|
252
|
-
enriched["operation.name"] = operationContext.name;
|
|
253
|
-
}
|
|
254
|
-
return enriched;
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Build autotel event context for trace correlation
|
|
258
|
-
*
|
|
259
|
-
* Works in 4 contexts:
|
|
260
|
-
* 1. Inside a span → use current span's trace_id + span_id
|
|
261
|
-
* 2. Outside span but in AsyncLocalStorage context → use trace_id + correlation_id
|
|
262
|
-
* 3. Totally standalone → use correlation_id + service/env/version
|
|
263
|
-
* 4. Batch/fan-in (multiple linked parents) → use count + hash or full array
|
|
264
|
-
*
|
|
265
|
-
* @returns AutotelEventContext or undefined if trace context is disabled
|
|
266
|
-
*/
|
|
267
|
-
buildAutotelContext() {
|
|
268
|
-
const eventsConfig = chunkR7QYGZUP_cjs.getEventsConfig();
|
|
269
|
-
if (!eventsConfig?.includeTraceContext) {
|
|
270
|
-
return {
|
|
271
|
-
correlation_id: chunkFMTHVSYY_cjs.getOrCreateCorrelationId()
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
const config = chunkR7QYGZUP_cjs.getConfig();
|
|
275
|
-
const span = api.trace.getActiveSpan();
|
|
276
|
-
const spanContext = span?.spanContext();
|
|
277
|
-
const correlationId = chunkFMTHVSYY_cjs.getOrCreateCorrelationId();
|
|
278
|
-
const autotelContext = {
|
|
279
|
-
correlation_id: correlationId
|
|
280
|
-
};
|
|
281
|
-
if (spanContext) {
|
|
282
|
-
autotelContext.trace_id = spanContext.traceId;
|
|
283
|
-
autotelContext.span_id = spanContext.spanId;
|
|
284
|
-
autotelContext.trace_flags = spanContext.traceFlags.toString(16).padStart(2, "0");
|
|
285
|
-
const traceState = spanContext.traceState;
|
|
286
|
-
if (traceState) {
|
|
287
|
-
let traceStateStr = "";
|
|
288
|
-
try {
|
|
289
|
-
if (typeof traceState.serialize === "function") {
|
|
290
|
-
traceStateStr = traceState.serialize();
|
|
291
|
-
}
|
|
292
|
-
} catch {
|
|
293
|
-
}
|
|
294
|
-
if (traceStateStr) {
|
|
295
|
-
autotelContext.trace_state = traceStateStr;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
if (eventsConfig.traceUrl) {
|
|
299
|
-
const traceUrl = eventsConfig.traceUrl({
|
|
300
|
-
traceId: spanContext.traceId,
|
|
301
|
-
spanId: spanContext.spanId,
|
|
302
|
-
correlationId,
|
|
303
|
-
serviceName: config?.service || this.serviceName,
|
|
304
|
-
environment: config?.environment
|
|
305
|
-
});
|
|
306
|
-
if (traceUrl) {
|
|
307
|
-
autotelContext.trace_url = traceUrl;
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
} else {
|
|
311
|
-
if (eventsConfig.traceUrl && config) {
|
|
312
|
-
const traceUrl = eventsConfig.traceUrl({
|
|
313
|
-
correlationId,
|
|
314
|
-
serviceName: config.service,
|
|
315
|
-
environment: config.environment
|
|
316
|
-
});
|
|
317
|
-
if (traceUrl) {
|
|
318
|
-
autotelContext.trace_url = traceUrl;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
return autotelContext;
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Enrich event attributes from baggage with guardrails
|
|
326
|
-
*
|
|
327
|
-
* @param attributes - Current event attributes
|
|
328
|
-
* @returns Enriched attributes with baggage values
|
|
329
|
-
*/
|
|
330
|
-
enrichFromBaggage(attributes) {
|
|
331
|
-
const eventsConfig = chunkR7QYGZUP_cjs.getEventsConfig();
|
|
332
|
-
const enrichConfig = eventsConfig?.enrichFromBaggage;
|
|
333
|
-
if (!enrichConfig) {
|
|
334
|
-
return attributes;
|
|
335
|
-
}
|
|
336
|
-
const enriched = { ...attributes };
|
|
337
|
-
const activeContext = api.context.active();
|
|
338
|
-
const baggage = api.propagation.getBaggage(activeContext);
|
|
339
|
-
if (!baggage) {
|
|
340
|
-
return enriched;
|
|
341
|
-
}
|
|
342
|
-
let keyCount = 0;
|
|
343
|
-
let byteCount = 0;
|
|
344
|
-
const maxKeys = enrichConfig.maxKeys ?? 10;
|
|
345
|
-
const maxBytes = enrichConfig.maxBytes ?? 1024;
|
|
346
|
-
const prefix = enrichConfig.prefix ?? "";
|
|
347
|
-
for (const [key, entry] of baggage.getAllEntries()) {
|
|
348
|
-
if (!this.isBaggageKeyAllowed(key, enrichConfig)) {
|
|
349
|
-
continue;
|
|
350
|
-
}
|
|
351
|
-
if (keyCount >= maxKeys) {
|
|
352
|
-
break;
|
|
353
|
-
}
|
|
354
|
-
const value = entry.value;
|
|
355
|
-
const transform = enrichConfig.transform?.[key];
|
|
356
|
-
let transformedValue;
|
|
357
|
-
if (transform === "hash") {
|
|
358
|
-
transformedValue = hashValue(value);
|
|
359
|
-
} else if (transform === "plain" || !transform) {
|
|
360
|
-
transformedValue = value;
|
|
361
|
-
} else if (typeof transform === "function") {
|
|
362
|
-
transformedValue = transform(value);
|
|
363
|
-
} else {
|
|
364
|
-
transformedValue = value;
|
|
365
|
-
}
|
|
366
|
-
const valueBytes = new TextEncoder().encode(transformedValue).length;
|
|
367
|
-
if (byteCount + valueBytes > maxBytes) {
|
|
368
|
-
continue;
|
|
369
|
-
}
|
|
370
|
-
const enrichedKey = `${prefix}${key}`;
|
|
371
|
-
enriched[enrichedKey] = transformedValue;
|
|
372
|
-
keyCount++;
|
|
373
|
-
byteCount += valueBytes;
|
|
374
|
-
}
|
|
375
|
-
return enriched;
|
|
376
|
-
}
|
|
377
|
-
/**
|
|
378
|
-
* Check if a baggage key is allowed based on config
|
|
379
|
-
*/
|
|
380
|
-
isBaggageKeyAllowed(key, config) {
|
|
381
|
-
if (config.deny) {
|
|
382
|
-
for (const pattern of config.deny) {
|
|
383
|
-
if (this.matchesBaggagePattern(key, pattern)) {
|
|
384
|
-
return false;
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
}
|
|
388
|
-
for (const pattern of config.allow) {
|
|
389
|
-
if (this.matchesBaggagePattern(key, pattern)) {
|
|
390
|
-
return true;
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
return false;
|
|
394
|
-
}
|
|
395
|
-
/**
|
|
396
|
-
* Check if a key matches a baggage pattern
|
|
397
|
-
* Supports exact matches and wildcard patterns (e.g., 'tenant.*')
|
|
398
|
-
*/
|
|
399
|
-
matchesBaggagePattern(key, pattern) {
|
|
400
|
-
if (pattern.endsWith(".*")) {
|
|
401
|
-
const prefix = pattern.slice(0, -2);
|
|
402
|
-
return key.startsWith(prefix + ".");
|
|
403
|
-
}
|
|
404
|
-
return key === pattern;
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* Track a business event
|
|
408
|
-
*
|
|
409
|
-
* Use this for tracking user actions, business events, product usage:
|
|
410
|
-
* - "user.signup"
|
|
411
|
-
* - "order.completed"
|
|
412
|
-
* - "feature.used"
|
|
413
|
-
*
|
|
414
|
-
* Events are sent to configured subscribers (PostHog, Mixpanel, etc.).
|
|
415
|
-
*
|
|
416
|
-
* @example
|
|
417
|
-
* ```typescript
|
|
418
|
-
* // Track user signup
|
|
419
|
-
* events.trackEvent('user.signup', {
|
|
420
|
-
* userId: '123',
|
|
421
|
-
* plan: 'pro'
|
|
422
|
-
* })
|
|
423
|
-
*
|
|
424
|
-
* // Track order
|
|
425
|
-
* events.trackEvent('order.completed', {
|
|
426
|
-
* orderId: 'ord_123',
|
|
427
|
-
* amount: 99.99
|
|
428
|
-
* })
|
|
429
|
-
* ```
|
|
430
|
-
*/
|
|
431
|
-
trackEvent(eventName, attributes) {
|
|
432
|
-
const validationConfig = chunkR7QYGZUP_cjs.getValidationConfig();
|
|
433
|
-
const validated = chunkFMTHVSYY_cjs.validateEvent(
|
|
434
|
-
eventName,
|
|
435
|
-
attributes,
|
|
436
|
-
validationConfig || void 0
|
|
437
|
-
);
|
|
438
|
-
const enrichedAttributes = this.enrichWithTelemetryContext(
|
|
439
|
-
validated.attributes
|
|
440
|
-
);
|
|
441
|
-
this.logger?.info(
|
|
442
|
-
{
|
|
443
|
-
event: validated.eventName,
|
|
444
|
-
attributes: enrichedAttributes
|
|
445
|
-
},
|
|
446
|
-
"Event tracked"
|
|
447
|
-
);
|
|
448
|
-
this.collector?.recordEvent({
|
|
449
|
-
event: validated.eventName,
|
|
450
|
-
attributes: enrichedAttributes,
|
|
451
|
-
service: this.serviceName,
|
|
452
|
-
timestamp: Date.now()
|
|
453
|
-
});
|
|
454
|
-
if (this.hasSubscribers) {
|
|
455
|
-
const autotelContext = this.buildAutotelContext();
|
|
456
|
-
const finalAttributes = this.enrichFromBaggage(enrichedAttributes);
|
|
457
|
-
void this.notifySubscribers(
|
|
458
|
-
(subscriber) => subscriber.trackEvent(validated.eventName, finalAttributes, {
|
|
459
|
-
autotel: autotelContext
|
|
460
|
-
})
|
|
461
|
-
);
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
/**
|
|
465
|
-
* Notify all subscribers concurrently without blocking
|
|
466
|
-
* Uses circuit breakers to protect against failing subscribers
|
|
467
|
-
* Uses Promise.allSettled to prevent subscriber errors from affecting other subscribers
|
|
468
|
-
*/
|
|
469
|
-
async notifySubscribers(fn) {
|
|
470
|
-
const promises = this.subscribers.map(async (subscriber) => {
|
|
471
|
-
const circuitBreaker = this.circuitBreakers.get(subscriber);
|
|
472
|
-
if (!circuitBreaker) return;
|
|
473
|
-
try {
|
|
474
|
-
await circuitBreaker.execute(() => fn(subscriber));
|
|
475
|
-
} catch (error) {
|
|
476
|
-
if (error instanceof CircuitOpenError) {
|
|
477
|
-
chunkR7QYGZUP_cjs.getLogger().warn(
|
|
478
|
-
{
|
|
479
|
-
subscriberName: subscriber.name || "Unknown"
|
|
480
|
-
},
|
|
481
|
-
`[Events] ${error.message}`
|
|
482
|
-
);
|
|
483
|
-
return;
|
|
484
|
-
}
|
|
485
|
-
chunkR7QYGZUP_cjs.getLogger().error(
|
|
486
|
-
{
|
|
487
|
-
err: error instanceof Error ? error : void 0,
|
|
488
|
-
subscriberName: subscriber.name || "Unknown"
|
|
489
|
-
},
|
|
490
|
-
`[Events] Subscriber ${subscriber.name || "Unknown"} failed`
|
|
491
|
-
);
|
|
492
|
-
}
|
|
493
|
-
});
|
|
494
|
-
await Promise.allSettled(promises);
|
|
495
|
-
}
|
|
496
|
-
/**
|
|
497
|
-
* Track conversion funnel steps
|
|
498
|
-
*
|
|
499
|
-
* Monitor where users drop off in multi-step processes.
|
|
500
|
-
*
|
|
501
|
-
* @example
|
|
502
|
-
* ```typescript
|
|
503
|
-
* // Track signup funnel
|
|
504
|
-
* events.trackFunnelStep('signup', 'started', { userId: '123' })
|
|
505
|
-
* events.trackFunnelStep('signup', 'email_verified', { userId: '123' })
|
|
506
|
-
* events.trackFunnelStep('signup', 'completed', { userId: '123' })
|
|
507
|
-
*
|
|
508
|
-
* // Track checkout flow
|
|
509
|
-
* events.trackFunnelStep('checkout', 'started', { cartValue: 99.99 })
|
|
510
|
-
* events.trackFunnelStep('checkout', 'payment_info', { cartValue: 99.99 })
|
|
511
|
-
* events.trackFunnelStep('checkout', 'completed', { cartValue: 99.99 })
|
|
512
|
-
* ```
|
|
513
|
-
*/
|
|
514
|
-
trackFunnelStep(funnelName, status, attributes) {
|
|
515
|
-
const enrichedAttributes = this.enrichWithTelemetryContext(attributes);
|
|
516
|
-
this.logger?.info(
|
|
517
|
-
{
|
|
518
|
-
funnel: funnelName,
|
|
519
|
-
status,
|
|
520
|
-
attributes: enrichedAttributes
|
|
521
|
-
},
|
|
522
|
-
"Funnel step tracked"
|
|
523
|
-
);
|
|
524
|
-
this.collector?.recordFunnelStep({
|
|
525
|
-
funnel: funnelName,
|
|
526
|
-
status,
|
|
527
|
-
attributes: enrichedAttributes,
|
|
528
|
-
service: this.serviceName,
|
|
529
|
-
timestamp: Date.now()
|
|
530
|
-
});
|
|
531
|
-
if (this.hasSubscribers) {
|
|
532
|
-
const autotelContext = this.buildAutotelContext();
|
|
533
|
-
const finalAttributes = this.enrichFromBaggage(enrichedAttributes);
|
|
534
|
-
void this.notifySubscribers(
|
|
535
|
-
(subscriber) => subscriber.trackFunnelStep(funnelName, status, finalAttributes, {
|
|
536
|
-
autotel: autotelContext
|
|
537
|
-
})
|
|
538
|
-
);
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
/**
|
|
542
|
-
* Track outcomes (success/failure/partial)
|
|
543
|
-
*
|
|
544
|
-
* Monitor success rates of critical operations.
|
|
545
|
-
*
|
|
546
|
-
* @example
|
|
547
|
-
* ```typescript
|
|
548
|
-
* // Track email delivery
|
|
549
|
-
* events.trackOutcome('email.delivery', 'success', {
|
|
550
|
-
* recipientType: 'user',
|
|
551
|
-
* emailType: 'welcome'
|
|
552
|
-
* })
|
|
553
|
-
*
|
|
554
|
-
* events.trackOutcome('email.delivery', 'failure', {
|
|
555
|
-
* recipientType: 'user',
|
|
556
|
-
* errorCode: 'invalid_email'
|
|
557
|
-
* })
|
|
558
|
-
*
|
|
559
|
-
* // Track payment processing
|
|
560
|
-
* events.trackOutcome('payment.process', 'success', { amount: 99.99 })
|
|
561
|
-
* events.trackOutcome('payment.process', 'failure', { error: 'insufficient_funds' })
|
|
562
|
-
* ```
|
|
563
|
-
*/
|
|
564
|
-
trackOutcome(operationName, status, attributes) {
|
|
565
|
-
const enrichedAttributes = this.enrichWithTelemetryContext(attributes);
|
|
566
|
-
this.logger?.info(
|
|
567
|
-
{
|
|
568
|
-
operation: operationName,
|
|
569
|
-
status,
|
|
570
|
-
attributes: enrichedAttributes
|
|
571
|
-
},
|
|
572
|
-
"Outcome tracked"
|
|
573
|
-
);
|
|
574
|
-
this.collector?.recordOutcome({
|
|
575
|
-
operation: operationName,
|
|
576
|
-
status,
|
|
577
|
-
attributes: enrichedAttributes,
|
|
578
|
-
service: this.serviceName,
|
|
579
|
-
timestamp: Date.now()
|
|
580
|
-
});
|
|
581
|
-
if (this.hasSubscribers) {
|
|
582
|
-
const autotelContext = this.buildAutotelContext();
|
|
583
|
-
const finalAttributes = this.enrichFromBaggage(enrichedAttributes);
|
|
584
|
-
void this.notifySubscribers(
|
|
585
|
-
(subscriber) => subscriber.trackOutcome(operationName, status, finalAttributes, {
|
|
586
|
-
autotel: autotelContext
|
|
587
|
-
})
|
|
588
|
-
);
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
/**
|
|
592
|
-
* Track value metrics
|
|
593
|
-
*
|
|
594
|
-
* Record numerical values like revenue, transaction amounts,
|
|
595
|
-
* item counts, processing times, engagement scores, etc.
|
|
596
|
-
*
|
|
597
|
-
* @example
|
|
598
|
-
* ```typescript
|
|
599
|
-
* // Track revenue
|
|
600
|
-
* events.trackValue('order.revenue', 149.99, {
|
|
601
|
-
* currency: 'USD',
|
|
602
|
-
* productCategory: 'electronics'
|
|
603
|
-
* })
|
|
604
|
-
*
|
|
605
|
-
* // Track items per cart
|
|
606
|
-
* events.trackValue('cart.item_count', 5, {
|
|
607
|
-
* userId: '123'
|
|
608
|
-
* })
|
|
609
|
-
*
|
|
610
|
-
* // Track processing time
|
|
611
|
-
* events.trackValue('api.response_time', 250, {
|
|
612
|
-
* unit: 'ms',
|
|
613
|
-
* endpoint: '/api/checkout'
|
|
614
|
-
* })
|
|
615
|
-
* ```
|
|
616
|
-
*/
|
|
617
|
-
trackValue(metricName, value, attributes) {
|
|
618
|
-
const enrichedAttributes = this.enrichWithTelemetryContext({
|
|
619
|
-
metric: metricName,
|
|
620
|
-
...attributes
|
|
621
|
-
});
|
|
622
|
-
this.logger?.debug(
|
|
623
|
-
{
|
|
624
|
-
metric: metricName,
|
|
625
|
-
value,
|
|
626
|
-
attributes: enrichedAttributes
|
|
627
|
-
},
|
|
628
|
-
"Value tracked"
|
|
629
|
-
);
|
|
630
|
-
this.collector?.recordValue({
|
|
631
|
-
metric: metricName,
|
|
632
|
-
value,
|
|
633
|
-
attributes: enrichedAttributes,
|
|
634
|
-
service: this.serviceName,
|
|
635
|
-
timestamp: Date.now()
|
|
636
|
-
});
|
|
637
|
-
if (this.hasSubscribers) {
|
|
638
|
-
const autotelContext = this.buildAutotelContext();
|
|
639
|
-
const finalAttributes = this.enrichFromBaggage(enrichedAttributes);
|
|
640
|
-
void this.notifySubscribers(
|
|
641
|
-
(subscriber) => subscriber.trackValue(metricName, value, finalAttributes, {
|
|
642
|
-
autotel: autotelContext
|
|
643
|
-
})
|
|
644
|
-
);
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
/**
|
|
648
|
-
* Flush all subscribers and wait for pending events
|
|
649
|
-
*
|
|
650
|
-
* Call this before shutdown to ensure all events are delivered.
|
|
651
|
-
*
|
|
652
|
-
* @example
|
|
653
|
-
* ```typescript
|
|
654
|
-
* const event =new Event('app', { subscribers: [...] });
|
|
655
|
-
*
|
|
656
|
-
* // Before shutdown
|
|
657
|
-
* await events.flush();
|
|
658
|
-
* ```
|
|
659
|
-
*/
|
|
660
|
-
async flush() {
|
|
661
|
-
if (!this.hasSubscribers) return;
|
|
662
|
-
const shutdownPromises = this.subscribers.map(async (subscriber) => {
|
|
663
|
-
if (subscriber.shutdown) {
|
|
664
|
-
try {
|
|
665
|
-
await subscriber.shutdown();
|
|
666
|
-
} catch (error) {
|
|
667
|
-
chunkR7QYGZUP_cjs.getLogger().error(
|
|
668
|
-
{
|
|
669
|
-
err: error instanceof Error ? error : void 0,
|
|
670
|
-
subscriberName: subscriber.name || "Unknown"
|
|
671
|
-
},
|
|
672
|
-
`[Events] Failed to shutdown subscriber ${subscriber.name || "Unknown"}`
|
|
673
|
-
);
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
});
|
|
677
|
-
await Promise.allSettled(shutdownPromises);
|
|
678
|
-
}
|
|
679
|
-
/**
|
|
680
|
-
* Shutdown the Event instance and all subscribers
|
|
681
|
-
*
|
|
682
|
-
* Unlike `flush()`, this method:
|
|
683
|
-
* - Shuts down all subscribers
|
|
684
|
-
* - Prevents further event tracking (hasSubscribers becomes false)
|
|
685
|
-
* - Should only be called once at application shutdown
|
|
686
|
-
*
|
|
687
|
-
* @example
|
|
688
|
-
* ```typescript
|
|
689
|
-
* // In Next.js API route with after()
|
|
690
|
-
* import { after } from 'next/server';
|
|
691
|
-
*
|
|
692
|
-
* export async function POST(req: Request) {
|
|
693
|
-
* const event = new Event('checkout', { subscribers: [...] });
|
|
694
|
-
* event.trackEvent('order.completed', { orderId: '123' });
|
|
695
|
-
*
|
|
696
|
-
* after(async () => {
|
|
697
|
-
* await event.shutdown();
|
|
698
|
-
* });
|
|
699
|
-
*
|
|
700
|
-
* return Response.json({ success: true });
|
|
701
|
-
* }
|
|
702
|
-
* ```
|
|
703
|
-
*/
|
|
704
|
-
async shutdown() {
|
|
705
|
-
if (!this.hasSubscribers) return;
|
|
706
|
-
await Promise.allSettled(
|
|
707
|
-
this.subscribers.map(async (subscriber) => {
|
|
708
|
-
if (subscriber.shutdown) {
|
|
709
|
-
try {
|
|
710
|
-
await subscriber.shutdown();
|
|
711
|
-
} catch (error) {
|
|
712
|
-
chunkR7QYGZUP_cjs.getLogger().error(
|
|
713
|
-
{
|
|
714
|
-
err: error instanceof Error ? error : void 0,
|
|
715
|
-
subscriberName: subscriber.name || "Unknown"
|
|
716
|
-
},
|
|
717
|
-
`[Events] Failed to shutdown subscriber ${subscriber.name || "Unknown"}`
|
|
718
|
-
);
|
|
719
|
-
}
|
|
720
|
-
}
|
|
721
|
-
})
|
|
722
|
-
);
|
|
723
|
-
this.hasSubscribers = false;
|
|
724
|
-
}
|
|
725
|
-
/**
|
|
726
|
-
* Track funnel progression with custom step names
|
|
727
|
-
*
|
|
728
|
-
* Unlike trackFunnelStep which uses FunnelStatus enum values,
|
|
729
|
-
* this method allows any string as the step name for flexible funnel tracking.
|
|
730
|
-
*
|
|
731
|
-
* @param funnelName - Name of the funnel (e.g., "checkout", "onboarding")
|
|
732
|
-
* @param stepName - Custom step name (e.g., "cart_viewed", "payment_entered")
|
|
733
|
-
* @param stepNumber - Optional numeric position in the funnel
|
|
734
|
-
* @param attributes - Optional event attributes
|
|
735
|
-
*
|
|
736
|
-
* @example
|
|
737
|
-
* ```typescript
|
|
738
|
-
* // Track custom checkout steps
|
|
739
|
-
* event.trackFunnelProgression('checkout', 'cart_viewed', 1);
|
|
740
|
-
* event.trackFunnelProgression('checkout', 'shipping_selected', 2);
|
|
741
|
-
* event.trackFunnelProgression('checkout', 'payment_entered', 3);
|
|
742
|
-
* event.trackFunnelProgression('checkout', 'order_confirmed', 4);
|
|
743
|
-
* ```
|
|
744
|
-
*/
|
|
745
|
-
trackFunnelProgression(funnelName, stepName, stepNumber, attributes) {
|
|
746
|
-
const enrichedAttributes = this.enrichWithTelemetryContext(attributes);
|
|
747
|
-
this.logger?.info(
|
|
748
|
-
{
|
|
749
|
-
funnel: funnelName,
|
|
750
|
-
stepName,
|
|
751
|
-
stepNumber,
|
|
752
|
-
attributes: enrichedAttributes
|
|
753
|
-
},
|
|
754
|
-
"Funnel progression tracked"
|
|
755
|
-
);
|
|
756
|
-
this.collector?.recordFunnelStep({
|
|
757
|
-
funnel: funnelName,
|
|
758
|
-
status: stepName,
|
|
759
|
-
// Cast for testing collector
|
|
760
|
-
attributes: {
|
|
761
|
-
...enrichedAttributes,
|
|
762
|
-
step_name: stepName,
|
|
763
|
-
...stepNumber === void 0 ? {} : { step_number: stepNumber }
|
|
764
|
-
},
|
|
765
|
-
service: this.serviceName,
|
|
766
|
-
timestamp: Date.now()
|
|
767
|
-
});
|
|
768
|
-
if (this.hasSubscribers) {
|
|
769
|
-
const autotelContext = this.buildAutotelContext();
|
|
770
|
-
const finalAttributes = this.enrichFromBaggage(enrichedAttributes);
|
|
771
|
-
void this.notifySubscribers(async (subscriber) => {
|
|
772
|
-
await (subscriber.trackFunnelProgression ? subscriber.trackFunnelProgression(
|
|
773
|
-
funnelName,
|
|
774
|
-
stepName,
|
|
775
|
-
stepNumber,
|
|
776
|
-
finalAttributes,
|
|
777
|
-
{ autotel: autotelContext }
|
|
778
|
-
) : (
|
|
779
|
-
// Fall back to trackFunnelStep with step as custom name (cast)
|
|
780
|
-
subscriber.trackFunnelStep(
|
|
781
|
-
funnelName,
|
|
782
|
-
stepName,
|
|
783
|
-
{
|
|
784
|
-
...finalAttributes,
|
|
785
|
-
step_name: stepName,
|
|
786
|
-
...stepNumber === void 0 ? {} : { step_number: stepNumber }
|
|
787
|
-
},
|
|
788
|
-
{ autotel: autotelContext }
|
|
789
|
-
)
|
|
790
|
-
));
|
|
791
|
-
});
|
|
792
|
-
}
|
|
793
|
-
}
|
|
794
|
-
/**
|
|
795
|
-
* Track multiple events in a batch
|
|
796
|
-
*
|
|
797
|
-
* Useful for bulk event tracking with consistent timestamps.
|
|
798
|
-
* Events are sent to subscribers individually but processed together.
|
|
799
|
-
*
|
|
800
|
-
* @param events - Array of events to track
|
|
801
|
-
*
|
|
802
|
-
* @example
|
|
803
|
-
* ```typescript
|
|
804
|
-
* event.trackBatch([
|
|
805
|
-
* { name: 'item.viewed', attributes: { itemId: '1' } },
|
|
806
|
-
* { name: 'item.viewed', attributes: { itemId: '2' } },
|
|
807
|
-
* { name: 'cart.updated', attributes: { itemCount: 2 } },
|
|
808
|
-
* ]);
|
|
809
|
-
* ```
|
|
810
|
-
*/
|
|
811
|
-
trackBatch(events) {
|
|
812
|
-
for (const event of events) {
|
|
813
|
-
const filteredAttributes = event.attributes ? Object.fromEntries(
|
|
814
|
-
Object.entries(event.attributes).filter(
|
|
815
|
-
([, v]) => v !== void 0 && v !== null
|
|
816
|
-
)
|
|
817
|
-
) : void 0;
|
|
818
|
-
this.trackEvent(event.name, filteredAttributes);
|
|
819
|
-
}
|
|
820
|
-
}
|
|
821
|
-
};
|
|
822
|
-
var eventsInstances = /* @__PURE__ */ new Map();
|
|
823
|
-
function getEvents(serviceName, logger) {
|
|
824
|
-
if (!eventsInstances.has(serviceName)) {
|
|
825
|
-
eventsInstances.set(serviceName, new Event(serviceName, { logger }));
|
|
826
|
-
}
|
|
827
|
-
return eventsInstances.get(serviceName);
|
|
828
|
-
}
|
|
829
|
-
function resetEvents() {
|
|
830
|
-
eventsInstances.clear();
|
|
831
|
-
}
|
|
832
|
-
|
|
833
|
-
exports.Event = Event;
|
|
834
|
-
exports.getEvents = getEvents;
|
|
835
|
-
exports.resetEvents = resetEvents;
|
|
836
|
-
//# sourceMappingURL=chunk-EOFB7XCL.cjs.map
|
|
837
|
-
//# sourceMappingURL=chunk-EOFB7XCL.cjs.map
|