autotel 3.5.0 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-D3etyRVc.cjs +713 -0
- package/dist/attributes-D3etyRVc.cjs.map +1 -0
- package/dist/attributes-ksn4HVbd.js +600 -0
- package/dist/attributes-ksn4HVbd.js.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 -53
- 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 -16
- 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 -65
- 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 -63
- 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 -36
- 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 -20
- 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 -56
- 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 -19
- package/dist/http.cjs +276 -175
- 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 -173
- package/dist/http.js.map +1 -1
- package/dist/index-CX0aG1Uh.d.ts +708 -0
- package/dist/index-CX0aG1Uh.d.ts.map +1 -0
- package/dist/index-DIWZFKUS.d.cts +708 -0
- package/dist/index-DIWZFKUS.d.cts.map +1 -0
- package/dist/index.cjs +1050 -1184
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +401 -570
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +401 -570
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +913 -725
- 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 -35
- 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 -20
- 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-DfXA3R1L.js +184 -0
- package/dist/registry-DfXA3R1L.js.map +1 -0
- package/dist/registry-JZg2J3RZ.cjs +334 -0
- package/dist/registry-JZg2J3RZ.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 +440 -38
- package/dist/semantic-helpers.cjs.map +1 -1
- package/dist/semantic-helpers.d.cts +38 -45
- package/dist/semantic-helpers.d.cts.map +1 -0
- package/dist/semantic-helpers.d.ts +38 -45
- package/dist/semantic-helpers.d.ts.map +1 -0
- package/dist/semantic-helpers.js +438 -19
- 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 +201 -0
- package/dist/validate.cjs.map +1 -0
- package/dist/validate.d.cts +105 -0
- package/dist/validate.d.cts.map +1 -0
- package/dist/validate.d.ts +105 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +197 -0
- package/dist/validate.js.map +1 -0
- package/dist/validation-attributes.cjs +45 -0
- package/dist/validation-attributes.cjs.map +1 -0
- package/dist/validation-attributes.d.cts +33 -0
- package/dist/validation-attributes.d.cts.map +1 -0
- package/dist/validation-attributes.d.ts +33 -0
- package/dist/validation-attributes.d.ts.map +1 -0
- package/dist/validation-attributes.js +41 -0
- package/dist/validation-attributes.js.map +1 -0
- package/dist/webhook.cjs +286 -255
- 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 -253
- package/dist/webhook.js.map +1 -1
- package/dist/workflow-distributed.cjs +498 -411
- 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 -409
- package/dist/workflow-distributed.js.map +1 -1
- package/dist/workflow.cjs +405 -39
- 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 -20
- 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 +14 -4
- package/src/define-event.ts +2 -21
- package/src/index.ts +3 -0
- package/src/request-logger.test.ts +53 -1
- package/src/request-logger.ts +58 -0
- package/src/stable-hash.ts +27 -0
- package/src/validate.test.ts +287 -0
- package/src/validate.ts +307 -0
- package/src/validation-attributes.ts +43 -0
- 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-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-AC5GNZKB.cjs +0 -344
- package/dist/chunk-AC5GNZKB.cjs.map +0 -1
- package/dist/chunk-ALPYR2GC.js +0 -1061
- package/dist/chunk-ALPYR2GC.js.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-DPSA4QLA.js +0 -344
- package/dist/chunk-DPSA4QLA.js.map +0 -1
- package/dist/chunk-DQEHQNQE.js +0 -795
- package/dist/chunk-DQEHQNQE.js.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-FGNDN2FD.cjs +0 -1242
- package/dist/chunk-FGNDN2FD.cjs.map +0 -1
- package/dist/chunk-FU6R566Y.cjs +0 -236
- package/dist/chunk-FU6R566Y.cjs.map +0 -1
- package/dist/chunk-GBFTC7Q7.cjs +0 -837
- package/dist/chunk-GBFTC7Q7.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-LITNXTTT.js +0 -3
- package/dist/chunk-LITNXTTT.js.map +0 -1
- package/dist/chunk-M3LFHHTN.cjs +0 -764
- package/dist/chunk-M3LFHHTN.cjs.map +0 -1
- package/dist/chunk-NEIB3TLD.cjs +0 -360
- package/dist/chunk-NEIB3TLD.cjs.map +0 -1
- package/dist/chunk-NVAI5CCN.cjs +0 -39
- package/dist/chunk-NVAI5CCN.cjs.map +0 -1
- package/dist/chunk-NVGPMGI4.js +0 -95
- package/dist/chunk-NVGPMGI4.js.map +0 -1
- package/dist/chunk-NZ72VDNY.cjs +0 -4
- package/dist/chunk-NZ72VDNY.cjs.map +0 -1
- package/dist/chunk-O4JZUCUE.js +0 -1174
- package/dist/chunk-O4JZUCUE.js.map +0 -1
- package/dist/chunk-O7JOKRN2.js +0 -833
- package/dist/chunk-O7JOKRN2.js.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-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-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-URHPSJW2.js +0 -339
- package/dist/chunk-URHPSJW2.js.map +0 -1
- package/dist/chunk-UY3UYPBZ.cjs +0 -77
- package/dist/chunk-UY3UYPBZ.cjs.map +0 -1
- package/dist/chunk-VG2ABKJX.cjs +0 -100
- package/dist/chunk-VG2ABKJX.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-YWCESU4Y.js +0 -1233
- package/dist/chunk-YWCESU4Y.js.map +0 -1
- package/dist/chunk-Z6HRSM2Y.cjs +0 -799
- package/dist/chunk-Z6HRSM2Y.cjs.map +0 -1
- package/dist/chunk-Z7PW3KHL.cjs +0 -1198
- package/dist/chunk-Z7PW3KHL.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/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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/yaml-config.ts"],"names":[],"mappings":"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","file":"chunk-CMHVQR6P.js","sourcesContent":["/**\n * YAML configuration loader for autotel\n *\n * Supports:\n * - Auto-discovery of autotel.yaml in cwd\n * - AUTOTEL_CONFIG_FILE env var override\n * - Environment variable substitution: ${env:VAR} and ${env:VAR:-default}\n *\n * @example Auto-discovery\n * ```yaml\n * # autotel.yaml in project root\n * service:\n * name: my-service\n * exporter:\n * endpoint: ${env:OTEL_EXPORTER_OTLP_ENDPOINT:-http://localhost:4318}\n * ```\n *\n * @example Explicit path\n * ```bash\n * AUTOTEL_CONFIG_FILE=./config/otel.yaml tsx --import autotel/auto src/index.ts\n * ```\n */\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport path from 'node:path';\nimport type { AutotelConfig } from './init';\nimport {\n AdaptiveSampler,\n AlwaysSampler,\n NeverSampler,\n RandomSampler,\n type SamplingPreset,\n} from './sampling';\n\n/**\n * Lazy-load yaml parser (optional peer dependency)\n * Only loads when a YAML config file is actually found\n */\nimport { requireModule } from './node-require';\n\nfunction loadYamlParser(): (content: string) => unknown {\n try {\n const mod = requireModule<{ parse: (content: string) => unknown }>('yaml');\n return mod.parse;\n } catch {\n throw new Error('YAML parser not found. Install with: pnpm add yaml');\n }\n}\n\n/**\n * YAML config structure\n * Maps to AutotelConfig with user-friendly naming\n */\nexport interface YamlConfig {\n service?: {\n name?: string;\n version?: string;\n environment?: string;\n };\n exporter?: {\n endpoint?: string;\n protocol?: 'http' | 'grpc';\n headers?: Record<string, string>;\n };\n resource?: Record<string, string | number | boolean>;\n sampling?: {\n preset?: SamplingPreset;\n type?: 'adaptive' | 'always_on' | 'always_off' | 'ratio';\n ratio?: number;\n baseline_rate?: number;\n always_sample_errors?: boolean;\n always_sample_slow?: boolean;\n slow_threshold_ms?: number;\n };\n autoInstrumentations?: string[] | Record<string, { enabled?: boolean }>;\n debug?: boolean;\n}\n\n/**\n * Environment variable substitution regex\n * Matches ${env:VAR_NAME} and ${env:VAR_NAME:-default}\n */\nconst ENV_VAR_PATTERN = /\\$\\{env:([A-Za-z_][A-Za-z0-9_]*)(?::-([^}]*))?\\}/g;\n\n/**\n * Substitute ${env:VAR} and ${env:VAR:-default} in a string\n *\n * @param value - String potentially containing env var references\n * @returns String with env vars substituted\n *\n * @example\n * substituteEnvVars('${env:NODE_ENV:-development}')\n * // Returns 'production' if NODE_ENV=production, else 'development'\n */\nfunction substituteEnvVars(value: string): string {\n return value.replaceAll(\n ENV_VAR_PATTERN,\n (_match, varName: string, defaultValue?: string) => {\n const envValue = process.env[varName];\n if (envValue !== undefined) return envValue;\n if (defaultValue !== undefined) return defaultValue;\n console.warn(\n `[autotel] Environment variable ${varName} not set and no default provided`,\n );\n return '';\n },\n );\n}\n\n/**\n * Recursively substitute env vars in an object\n *\n * @param obj - Object to process\n * @returns Object with all string values having env vars substituted\n */\nfunction substituteEnvVarsDeep(obj: unknown): unknown {\n if (typeof obj === 'string') {\n return substituteEnvVars(obj);\n }\n if (Array.isArray(obj)) {\n return obj.map((item) => substituteEnvVarsDeep(item));\n }\n if (obj && typeof obj === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = substituteEnvVarsDeep(value);\n }\n return result;\n }\n return obj;\n}\n\n/**\n * Find YAML config file path\n *\n * Priority:\n * 1. AUTOTEL_CONFIG_FILE env var (explicit path)\n * 2. autotel.yaml in cwd (convention)\n * 3. autotel.yml in cwd (alternative extension)\n *\n * @returns File path if found, null otherwise\n */\nfunction findConfigFile(): string | null {\n // Check env var first (explicit takes priority)\n const envPath = process.env.AUTOTEL_CONFIG_FILE;\n if (envPath) {\n const resolved = path.resolve(envPath);\n if (existsSync(resolved)) return resolved;\n console.warn(`[autotel] Config file not found: ${envPath}`);\n return null;\n }\n\n // Auto-discover autotel.yaml in cwd\n const conventionPath = path.resolve(process.cwd(), 'autotel.yaml');\n if (existsSync(conventionPath)) return conventionPath;\n\n // Also check .yml extension\n const altPath = path.resolve(process.cwd(), 'autotel.yml');\n if (existsSync(altPath)) return altPath;\n\n return null;\n}\n\n/**\n * Convert YAML config structure to AutotelConfig\n *\n * @param yaml - Parsed and env-substituted YAML config\n * @returns Partial AutotelConfig ready for merging\n */\nfunction yamlToAutotelConfig(yaml: YamlConfig): Partial<AutotelConfig> {\n const config: Partial<AutotelConfig> = {};\n\n // Service configuration\n if (yaml.service?.name) config.service = yaml.service.name;\n if (yaml.service?.version) config.version = yaml.service.version;\n if (yaml.service?.environment) config.environment = yaml.service.environment;\n\n // Exporter configuration\n if (yaml.exporter?.endpoint) config.endpoint = yaml.exporter.endpoint;\n if (yaml.exporter?.protocol) config.protocol = yaml.exporter.protocol;\n if (yaml.exporter?.headers) config.headers = yaml.exporter.headers;\n\n // Resource attributes (flattened)\n if (yaml.resource) config.resourceAttributes = yaml.resource;\n\n // Integrations\n if (yaml.autoInstrumentations)\n config.autoInstrumentations = yaml.autoInstrumentations;\n\n // Debug mode\n if (yaml.debug !== undefined) config.debug = yaml.debug;\n\n // Sampling configuration\n if (yaml.sampling?.preset) {\n warnOnIgnoredPresetOverrides(yaml.sampling);\n config.sampling = yaml.sampling.preset;\n } else {\n const sampler = createSamplerFromYaml(yaml.sampling);\n if (sampler) config.sampler = sampler;\n }\n\n return config;\n}\n\nfunction createSamplerFromYaml(\n sampling?: YamlConfig['sampling'],\n): AutotelConfig['sampler'] {\n if (!sampling) return undefined;\n if (sampling.preset) return undefined;\n\n const type = sampling.type ?? 'adaptive';\n\n try {\n switch (type) {\n case 'adaptive': {\n return new AdaptiveSampler({\n baselineSampleRate: sampling.baseline_rate,\n alwaysSampleErrors: sampling.always_sample_errors,\n alwaysSampleSlow: sampling.always_sample_slow,\n slowThresholdMs: sampling.slow_threshold_ms,\n });\n }\n case 'always_on': {\n return new AlwaysSampler();\n }\n case 'always_off': {\n return new NeverSampler();\n }\n case 'ratio': {\n if (sampling.ratio === undefined) {\n console.warn(\n '[autotel] sampling.ratio missing in YAML sampling config. Falling back to adaptive sampler.',\n );\n return new AdaptiveSampler();\n }\n return new RandomSampler(sampling.ratio);\n }\n default: {\n console.warn(\n `[autotel] Unknown sampling type \"${type}\" in YAML config. Falling back to defaults.`,\n );\n return undefined;\n }\n }\n } catch (error) {\n console.warn(\n `[autotel] Failed to configure sampling from YAML: ${error instanceof Error ? error.message : String(error)}`,\n );\n return undefined;\n }\n}\n\nfunction warnOnIgnoredPresetOverrides(\n sampling: NonNullable<YamlConfig['sampling']>,\n): void {\n const ignoredFields = [\n 'type',\n 'ratio',\n 'baseline_rate',\n 'always_sample_errors',\n 'always_sample_slow',\n 'slow_threshold_ms',\n ].filter((field) => sampling[field as keyof typeof sampling] !== undefined);\n\n if (ignoredFields.length === 0) {\n return;\n }\n\n console.warn(\n `[autotel] sampling.preset=\"${sampling.preset}\" ignores these YAML fields: ${ignoredFields.join(', ')}. ` +\n 'Use the programmatic API with sampler or samplingPresets.*(...) for tuned presets.',\n );\n}\n\n/**\n * Load and parse YAML config file (auto-discovery)\n *\n * Automatically finds and loads autotel.yaml or uses AUTOTEL_CONFIG_FILE.\n * Returns null if no config file found (not an error - YAML config is optional).\n *\n * @returns Partial AutotelConfig or null if no config file found\n *\n * @example\n * const yamlConfig = loadYamlConfig();\n * if (yamlConfig) {\n * init({ ...yamlConfig, debug: true });\n * }\n */\nexport function loadYamlConfig(): Partial<AutotelConfig> | null {\n const filePath = findConfigFile();\n if (!filePath) return null;\n\n try {\n const content = readFileSync(filePath, 'utf8');\n const parseYaml = loadYamlParser();\n const rawYaml = parseYaml(content) as YamlConfig;\n const substituted = substituteEnvVarsDeep(rawYaml) as YamlConfig;\n return yamlToAutotelConfig(substituted);\n } catch (error) {\n console.error(\n `[autotel] Failed to load YAML config from ${filePath}:`,\n error,\n );\n return null;\n }\n}\n\n/**\n * Load YAML config from a specific file path\n *\n * Unlike loadYamlConfig(), this throws if the file cannot be read.\n *\n * @param filePath - Path to YAML config file\n * @returns Partial AutotelConfig\n * @throws Error if file cannot be read or parsed\n *\n * @example\n * import { loadYamlConfigFromFile } from 'autotel/yaml';\n * import { init } from 'autotel';\n *\n * const config = loadYamlConfigFromFile('./config/otel.yaml');\n * init({ ...config, debug: true });\n */\nexport function loadYamlConfigFromFile(\n filePath: string,\n): Partial<AutotelConfig> {\n const resolved = path.resolve(filePath);\n const content = readFileSync(resolved, 'utf8');\n const parseYaml = loadYamlParser();\n const rawYaml = parseYaml(content) as YamlConfig;\n const substituted = substituteEnvVarsDeep(rawYaml) as YamlConfig;\n return yamlToAutotelConfig(substituted);\n}\n\n/**\n * Check if a YAML config file exists (without loading it)\n *\n * @returns true if a config file would be found by loadYamlConfig()\n */\nexport function hasYamlConfig(): boolean {\n return findConfigFile() !== null;\n}\n"]}
|
package/dist/chunk-CU6IDACR.cjs
DELETED
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var api = require('@opentelemetry/api');
|
|
4
|
-
|
|
5
|
-
// src/pretty-console-exporter.ts
|
|
6
|
-
var ExportResultCode = {
|
|
7
|
-
SUCCESS: 0,
|
|
8
|
-
FAILED: 1
|
|
9
|
-
};
|
|
10
|
-
var ANSI = {
|
|
11
|
-
reset: "\x1B[0m",
|
|
12
|
-
bold: "\x1B[1m",
|
|
13
|
-
dim: "\x1B[2m",
|
|
14
|
-
green: "\x1B[32m",
|
|
15
|
-
red: "\x1B[31m",
|
|
16
|
-
yellow: "\x1B[33m",
|
|
17
|
-
blue: "\x1B[34m",
|
|
18
|
-
cyan: "\x1B[36m",
|
|
19
|
-
gray: "\x1B[90m"
|
|
20
|
-
};
|
|
21
|
-
var PrettyConsoleExporter = class {
|
|
22
|
-
options;
|
|
23
|
-
constructor(options = {}) {
|
|
24
|
-
this.options = {
|
|
25
|
-
colors: options.colors ?? process.stdout?.isTTY ?? false,
|
|
26
|
-
showAttributes: options.showAttributes ?? true,
|
|
27
|
-
maxValueLength: options.maxValueLength ?? 50,
|
|
28
|
-
showScope: options.showScope ?? true,
|
|
29
|
-
hideAttributes: options.hideAttributes ?? [],
|
|
30
|
-
showTraceId: options.showTraceId ?? false
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Export spans with pretty formatting
|
|
35
|
-
*/
|
|
36
|
-
export(spans, resultCallback) {
|
|
37
|
-
if (spans.length === 0) {
|
|
38
|
-
resultCallback({ code: ExportResultCode.SUCCESS });
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
try {
|
|
42
|
-
const traceGroups = this.groupByTrace(spans);
|
|
43
|
-
for (const [traceId, traceSpans] of traceGroups) {
|
|
44
|
-
this.printTrace(traceId, traceSpans);
|
|
45
|
-
}
|
|
46
|
-
resultCallback({ code: ExportResultCode.SUCCESS });
|
|
47
|
-
} catch {
|
|
48
|
-
resultCallback({ code: ExportResultCode.SUCCESS });
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Group spans by their trace ID
|
|
53
|
-
*/
|
|
54
|
-
groupByTrace(spans) {
|
|
55
|
-
const groups = /* @__PURE__ */ new Map();
|
|
56
|
-
for (const span of spans) {
|
|
57
|
-
const traceId = span.spanContext().traceId;
|
|
58
|
-
const group = groups.get(traceId) ?? [];
|
|
59
|
-
group.push(span);
|
|
60
|
-
groups.set(traceId, group);
|
|
61
|
-
}
|
|
62
|
-
return groups;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Print a single trace with all its spans as a tree
|
|
66
|
-
*/
|
|
67
|
-
printTrace(traceId, spans) {
|
|
68
|
-
const sorted = [...spans].toSorted((a, b) => {
|
|
69
|
-
const aTime = hrTimeToMs(a.startTime);
|
|
70
|
-
const bTime = hrTimeToMs(b.startTime);
|
|
71
|
-
return aTime - bTime;
|
|
72
|
-
});
|
|
73
|
-
const tree = this.buildSpanTree(sorted);
|
|
74
|
-
if (this.options.showTraceId && tree.length > 0) {
|
|
75
|
-
console.log(this.color(`trace: ${traceId}`, "gray"));
|
|
76
|
-
}
|
|
77
|
-
for (const node of tree) {
|
|
78
|
-
this.printNode(node, 0, false);
|
|
79
|
-
}
|
|
80
|
-
console.log("");
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Build a tree structure from flat spans using parent-child relationships
|
|
84
|
-
*/
|
|
85
|
-
buildSpanTree(spans) {
|
|
86
|
-
const spanMap = /* @__PURE__ */ new Map();
|
|
87
|
-
const roots = [];
|
|
88
|
-
for (const span of spans) {
|
|
89
|
-
const spanId = span.spanContext().spanId;
|
|
90
|
-
spanMap.set(spanId, { span, children: [] });
|
|
91
|
-
}
|
|
92
|
-
for (const span of spans) {
|
|
93
|
-
const spanId = span.spanContext().spanId;
|
|
94
|
-
const parentId = span.parentSpanContext?.spanId;
|
|
95
|
-
const node = spanMap.get(spanId);
|
|
96
|
-
if (parentId && spanMap.has(parentId)) {
|
|
97
|
-
spanMap.get(parentId).children.push(node);
|
|
98
|
-
} else {
|
|
99
|
-
roots.push(node);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return roots;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Print a span node with indentation and tree characters
|
|
106
|
-
*/
|
|
107
|
-
printNode(node, depth, isLast) {
|
|
108
|
-
const { span } = node;
|
|
109
|
-
const prefix = depth === 0 ? "" : " ".repeat(depth - 1) + (isLast ? "\u2514\u2500 " : "\u251C\u2500 ");
|
|
110
|
-
const isError = span.status.code === api.SpanStatusCode.ERROR;
|
|
111
|
-
const statusChar = isError ? "\u2717" : "\u2713";
|
|
112
|
-
const statusColor = isError ? "red" : "green";
|
|
113
|
-
const durationMs = hrTimeToMs(span.duration);
|
|
114
|
-
const durationStr = formatDuration(durationMs);
|
|
115
|
-
const durationColor = getDurationColor(durationMs);
|
|
116
|
-
const scopeName = this.options.showScope ? this.color(` [${this.getScopeName(span)}]`, "gray") : "";
|
|
117
|
-
const line = [
|
|
118
|
-
prefix,
|
|
119
|
-
this.color(statusChar, statusColor),
|
|
120
|
-
" ",
|
|
121
|
-
span.name.padEnd(Math.max(35 - prefix.length, 10)),
|
|
122
|
-
this.color(durationStr.padStart(8), durationColor),
|
|
123
|
-
scopeName
|
|
124
|
-
].join("");
|
|
125
|
-
console.log(line);
|
|
126
|
-
if (this.options.showAttributes) {
|
|
127
|
-
const attrs = this.formatAttributes(span);
|
|
128
|
-
if (attrs) {
|
|
129
|
-
const attrIndent = " ".repeat(depth) + " ";
|
|
130
|
-
console.log(this.color(`${attrIndent}${attrs}`, "dim"));
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
if (isError && span.status.message) {
|
|
134
|
-
const errorIndent = " ".repeat(depth) + " ";
|
|
135
|
-
console.log(
|
|
136
|
-
this.color(`${errorIndent}Error: ${span.status.message}`, "red")
|
|
137
|
-
);
|
|
138
|
-
}
|
|
139
|
-
const childCount = node.children.length;
|
|
140
|
-
let index = 0;
|
|
141
|
-
for (const child of node.children) {
|
|
142
|
-
this.printNode(child, depth + 1, index === childCount - 1);
|
|
143
|
-
index++;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Get short scope name from instrumentation scope
|
|
148
|
-
*/
|
|
149
|
-
getScopeName(span) {
|
|
150
|
-
const name = span.instrumentationScope?.name ?? "unknown";
|
|
151
|
-
const match = name.match(/@opentelemetry\/instrumentation-(.+)/);
|
|
152
|
-
if (match?.[1]) return match[1];
|
|
153
|
-
const lastPart = name.split("/").at(-1);
|
|
154
|
-
return lastPart ?? name;
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Format span attributes as a comma-separated string
|
|
158
|
-
*/
|
|
159
|
-
formatAttributes(span) {
|
|
160
|
-
const attrs = span.attributes;
|
|
161
|
-
if (!attrs || Object.keys(attrs).length === 0) {
|
|
162
|
-
return "";
|
|
163
|
-
}
|
|
164
|
-
const pairs = [];
|
|
165
|
-
for (const [key, value] of Object.entries(attrs)) {
|
|
166
|
-
if (this.options.hideAttributes.includes(key)) continue;
|
|
167
|
-
if (value === void 0 || value === null) continue;
|
|
168
|
-
const strValue = this.truncate(
|
|
169
|
-
Array.isArray(value) ? `[${value.join(", ")}]` : String(value),
|
|
170
|
-
this.options.maxValueLength
|
|
171
|
-
);
|
|
172
|
-
pairs.push(`${key}=${strValue}`);
|
|
173
|
-
}
|
|
174
|
-
return pairs.join(", ");
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* Truncate string to max length with ellipsis
|
|
178
|
-
*/
|
|
179
|
-
truncate(str, max) {
|
|
180
|
-
if (str.length <= max) return str;
|
|
181
|
-
return str.slice(0, max - 3) + "...";
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Apply ANSI color if colors are enabled
|
|
185
|
-
*/
|
|
186
|
-
color(text, color) {
|
|
187
|
-
if (!this.options.colors) return text;
|
|
188
|
-
return `${ANSI[color]}${text}${ANSI.reset}`;
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Shutdown (no-op for console exporter)
|
|
192
|
-
*/
|
|
193
|
-
shutdown() {
|
|
194
|
-
return Promise.resolve();
|
|
195
|
-
}
|
|
196
|
-
/**
|
|
197
|
-
* Force flush (no-op for console exporter)
|
|
198
|
-
*/
|
|
199
|
-
forceFlush() {
|
|
200
|
-
return Promise.resolve();
|
|
201
|
-
}
|
|
202
|
-
};
|
|
203
|
-
function hrTimeToMs(hrTime) {
|
|
204
|
-
const [seconds, nanos] = hrTime;
|
|
205
|
-
return seconds * 1e3 + nanos / 1e6;
|
|
206
|
-
}
|
|
207
|
-
function formatDuration(ms) {
|
|
208
|
-
if (ms < 1) {
|
|
209
|
-
return `${(ms * 1e3).toFixed(0)}\xB5s`;
|
|
210
|
-
}
|
|
211
|
-
if (ms < 1e3) {
|
|
212
|
-
return `${ms.toFixed(0)}ms`;
|
|
213
|
-
}
|
|
214
|
-
return `${(ms / 1e3).toFixed(2)}s`;
|
|
215
|
-
}
|
|
216
|
-
function getDurationColor(ms) {
|
|
217
|
-
if (ms < 100) return "green";
|
|
218
|
-
if (ms < 500) return "yellow";
|
|
219
|
-
return "red";
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
exports.PrettyConsoleExporter = PrettyConsoleExporter;
|
|
223
|
-
//# sourceMappingURL=chunk-CU6IDACR.cjs.map
|
|
224
|
-
//# sourceMappingURL=chunk-CU6IDACR.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/pretty-console-exporter.ts"],"names":["SpanStatusCode"],"mappings":"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","file":"chunk-CU6IDACR.cjs","sourcesContent":["/**\n * Pretty Console Exporter\n *\n * A developer-friendly span exporter that displays colorized, hierarchical\n * trace output in the terminal. Zero external dependencies - uses ANSI escape codes.\n *\n * @example Basic usage\n * ```typescript\n * init({\n * service: 'my-app',\n * debug: 'pretty' // Uses PrettyConsoleExporter\n * })\n * ```\n *\n * @example Explicit usage with options\n * ```typescript\n * import { PrettyConsoleExporter } from 'autotel/exporters'\n *\n * init({\n * service: 'my-app',\n * spanExporters: [new PrettyConsoleExporter({\n * colors: true,\n * showAttributes: true,\n * hideAttributes: ['http.user_agent']\n * })]\n * })\n * ```\n */\n\nimport type { SpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base';\nimport { SpanStatusCode } from '@opentelemetry/api';\n\n/**\n * Export result code constants (avoid importing @opentelemetry/core)\n */\nconst ExportResultCode = {\n SUCCESS: 0,\n FAILED: 1,\n} as const;\n\n/**\n * Export result type for SpanExporter callback\n */\ninterface ExportResult {\n code: number;\n error?: Error;\n}\n\n/**\n * ANSI escape codes for terminal colors (zero dependencies)\n */\nconst ANSI = {\n reset: '\\u001B[0m',\n bold: '\\u001B[1m',\n dim: '\\u001B[2m',\n green: '\\u001B[32m',\n red: '\\u001B[31m',\n yellow: '\\u001B[33m',\n blue: '\\u001B[34m',\n cyan: '\\u001B[36m',\n gray: '\\u001B[90m',\n} as const;\n\ntype AnsiColor = keyof typeof ANSI;\n\n/**\n * Configuration options for PrettyConsoleExporter\n */\nexport interface PrettyConsoleExporterOptions {\n /**\n * Enable ANSI colors in output\n * @default auto-detect TTY\n */\n colors?: boolean;\n\n /**\n * Show span attributes in output\n * @default true\n */\n showAttributes?: boolean;\n\n /**\n * Maximum length for attribute values before truncation\n * @default 50\n */\n maxValueLength?: number;\n\n /**\n * Show instrumentation scope name (e.g., [http], [pg])\n * @default true\n */\n showScope?: boolean;\n\n /**\n * Attribute keys to always hide from output\n * @default []\n */\n hideAttributes?: string[];\n\n /**\n * Show trace ID for each root span\n * @default false\n */\n showTraceId?: boolean;\n}\n\n/**\n * Internal node structure for building span trees\n */\ninterface SpanNode {\n span: ReadableSpan;\n children: SpanNode[];\n}\n\n/**\n * Pretty Console Exporter - colorized, hierarchical span output for development\n *\n * Features:\n * - Colorized status indicators (✓ green, ✗ red)\n * - Duration with color coding (fast=green, medium=yellow, slow=red)\n * - Hierarchical tree view showing parent-child relationships\n * - Attribute display with truncation\n * - Error message highlighting\n */\nexport class PrettyConsoleExporter implements SpanExporter {\n private readonly options: Required<PrettyConsoleExporterOptions>;\n\n constructor(options: PrettyConsoleExporterOptions = {}) {\n this.options = {\n colors: options.colors ?? process.stdout?.isTTY ?? false,\n showAttributes: options.showAttributes ?? true,\n maxValueLength: options.maxValueLength ?? 50,\n showScope: options.showScope ?? true,\n hideAttributes: options.hideAttributes ?? [],\n showTraceId: options.showTraceId ?? false,\n };\n }\n\n /**\n * Export spans with pretty formatting\n */\n export(\n spans: ReadableSpan[],\n resultCallback: (result: ExportResult) => void,\n ): void {\n if (spans.length === 0) {\n resultCallback({ code: ExportResultCode.SUCCESS });\n return;\n }\n\n try {\n // Group spans by trace ID\n const traceGroups = this.groupByTrace(spans);\n\n // Print each trace group\n for (const [traceId, traceSpans] of traceGroups) {\n this.printTrace(traceId, traceSpans);\n }\n\n resultCallback({ code: ExportResultCode.SUCCESS });\n } catch {\n // Fail-open: don't crash the app if formatting fails\n resultCallback({ code: ExportResultCode.SUCCESS });\n }\n }\n\n /**\n * Group spans by their trace ID\n */\n private groupByTrace(spans: ReadableSpan[]): Map<string, ReadableSpan[]> {\n const groups = new Map<string, ReadableSpan[]>();\n\n for (const span of spans) {\n const traceId = span.spanContext().traceId;\n const group = groups.get(traceId) ?? [];\n group.push(span);\n groups.set(traceId, group);\n }\n\n return groups;\n }\n\n /**\n * Print a single trace with all its spans as a tree\n */\n private printTrace(traceId: string, spans: ReadableSpan[]): void {\n // Sort by start time\n const sorted = [...spans].toSorted((a, b) => {\n const aTime = hrTimeToMs(a.startTime);\n const bTime = hrTimeToMs(b.startTime);\n return aTime - bTime;\n });\n\n // Build tree structure\n const tree = this.buildSpanTree(sorted);\n\n // Print trace ID header if enabled\n if (this.options.showTraceId && tree.length > 0) {\n console.log(this.color(`trace: ${traceId}`, 'gray'));\n }\n\n // Print each root span and its children\n for (const node of tree) {\n this.printNode(node, 0, false);\n }\n\n // Add blank line between traces\n console.log('');\n }\n\n /**\n * Build a tree structure from flat spans using parent-child relationships\n */\n private buildSpanTree(spans: ReadableSpan[]): SpanNode[] {\n const spanMap = new Map<string, SpanNode>();\n const roots: SpanNode[] = [];\n\n // Create nodes for all spans\n for (const span of spans) {\n const spanId = span.spanContext().spanId;\n spanMap.set(spanId, { span, children: [] });\n }\n\n // Build parent-child relationships\n for (const span of spans) {\n const spanId = span.spanContext().spanId;\n const parentId = span.parentSpanContext?.spanId;\n const node = spanMap.get(spanId)!;\n\n if (parentId && spanMap.has(parentId)) {\n // Has parent in this batch - add as child\n spanMap.get(parentId)!.children.push(node);\n } else {\n // No parent or parent not in batch - treat as root\n roots.push(node);\n }\n }\n\n return roots;\n }\n\n /**\n * Print a span node with indentation and tree characters\n */\n private printNode(node: SpanNode, depth: number, isLast: boolean): void {\n const { span } = node;\n\n // Build tree prefix\n const prefix =\n depth === 0 ? '' : ' '.repeat(depth - 1) + (isLast ? '└─ ' : '├─ ');\n\n // Status indicator\n const isError = span.status.code === SpanStatusCode.ERROR;\n const statusChar = isError ? '✗' : '✓';\n const statusColor: AnsiColor = isError ? 'red' : 'green';\n\n // Duration formatting\n const durationMs = hrTimeToMs(span.duration);\n const durationStr = formatDuration(durationMs);\n const durationColor = getDurationColor(durationMs);\n\n // Scope name (instrumentation library)\n const scopeName = this.options.showScope\n ? this.color(` [${this.getScopeName(span)}]`, 'gray')\n : '';\n\n // Build the main line\n const line = [\n prefix,\n this.color(statusChar, statusColor),\n ' ',\n span.name.padEnd(Math.max(35 - prefix.length, 10)),\n this.color(durationStr.padStart(8), durationColor),\n scopeName,\n ].join('');\n\n console.log(line);\n\n // Print attributes on next line (indented)\n if (this.options.showAttributes) {\n const attrs = this.formatAttributes(span);\n if (attrs) {\n const attrIndent = ' '.repeat(depth) + ' ';\n console.log(this.color(`${attrIndent}${attrs}`, 'dim'));\n }\n }\n\n // Print error message if present\n if (isError && span.status.message) {\n const errorIndent = ' '.repeat(depth) + ' ';\n console.log(\n this.color(`${errorIndent}Error: ${span.status.message}`, 'red'),\n );\n }\n\n // Print children\n const childCount = node.children.length;\n let index = 0;\n for (const child of node.children) {\n this.printNode(child, depth + 1, index === childCount - 1);\n index++;\n }\n }\n\n /**\n * Get short scope name from instrumentation scope\n */\n private getScopeName(span: ReadableSpan): string {\n const name = span.instrumentationScope?.name ?? 'unknown';\n // Extract short name from @opentelemetry/instrumentation-xxx format\n const match = name.match(/@opentelemetry\\/instrumentation-(.+)/);\n if (match?.[1]) return match[1];\n // Fall back to last part of name or full name\n const lastPart = name.split('/').at(-1);\n return lastPart ?? name;\n }\n\n /**\n * Format span attributes as a comma-separated string\n */\n private formatAttributes(span: ReadableSpan): string {\n const attrs = span.attributes;\n if (!attrs || Object.keys(attrs).length === 0) {\n return '';\n }\n\n const pairs: string[] = [];\n for (const [key, value] of Object.entries(attrs)) {\n // Skip hidden attributes\n if (this.options.hideAttributes.includes(key)) continue;\n\n // Skip undefined/null values\n if (value === undefined || value === null) continue;\n\n // Format value\n const strValue = this.truncate(\n Array.isArray(value) ? `[${value.join(', ')}]` : String(value),\n this.options.maxValueLength,\n );\n pairs.push(`${key}=${strValue}`);\n }\n\n return pairs.join(', ');\n }\n\n /**\n * Truncate string to max length with ellipsis\n */\n private truncate(str: string, max: number): string {\n if (str.length <= max) return str;\n return str.slice(0, max - 3) + '...';\n }\n\n /**\n * Apply ANSI color if colors are enabled\n */\n private color(text: string, color: AnsiColor): string {\n if (!this.options.colors) return text;\n return `${ANSI[color]}${text}${ANSI.reset}`;\n }\n\n /**\n * Shutdown (no-op for console exporter)\n */\n shutdown(): Promise<void> {\n return Promise.resolve();\n }\n\n /**\n * Force flush (no-op for console exporter)\n */\n forceFlush(): Promise<void> {\n return Promise.resolve();\n }\n}\n\n/**\n * Convert HrTime [seconds, nanoseconds] to milliseconds\n */\nfunction hrTimeToMs(hrTime: [number, number]): number {\n const [seconds, nanos] = hrTime;\n return seconds * 1000 + nanos / 1_000_000;\n}\n\n/**\n * Format duration with appropriate units\n */\nfunction formatDuration(ms: number): string {\n if (ms < 1) {\n // Sub-millisecond: show as microseconds\n return `${(ms * 1000).toFixed(0)}µs`;\n }\n if (ms < 1000) {\n // Under 1 second: show as milliseconds\n return `${ms.toFixed(0)}ms`;\n }\n // 1 second or more: show as seconds\n return `${(ms / 1000).toFixed(2)}s`;\n}\n\n/**\n * Get color based on duration (fast=green, medium=yellow, slow=red)\n */\nfunction getDurationColor(ms: number): AnsiColor {\n if (ms < 100) return 'green';\n if (ms < 500) return 'yellow';\n return 'red';\n}\n\n/**\n * Export utility functions for testing\n */\nexport { formatDuration, getDurationColor, hrTimeToMs };\n"]}
|
package/dist/chunk-DPSA4QLA.js
DELETED
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
import { TraceFlags } from '@opentelemetry/api';
|
|
2
|
-
|
|
3
|
-
// src/sampling.ts
|
|
4
|
-
var AUTOTEL_SAMPLING_TAIL_KEEP = "autotel.sampling.tail.keep";
|
|
5
|
-
var AUTOTEL_SAMPLING_TAIL_EVALUATED = "autotel.sampling.tail.evaluated";
|
|
6
|
-
var RandomSampler = class {
|
|
7
|
-
constructor(sampleRate) {
|
|
8
|
-
this.sampleRate = sampleRate;
|
|
9
|
-
if (sampleRate < 0 || sampleRate > 1) {
|
|
10
|
-
throw new Error("Sample rate must be between 0 and 1");
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
sampleRate;
|
|
14
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
15
|
-
shouldSample(_context) {
|
|
16
|
-
return Math.random() < this.sampleRate;
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
var AlwaysSampler = class {
|
|
20
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
21
|
-
shouldSample(_context) {
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
var NeverSampler = class {
|
|
26
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
27
|
-
shouldSample(_context) {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
var AdaptiveSampler = class {
|
|
32
|
-
baselineSampleRate;
|
|
33
|
-
slowThresholdMs;
|
|
34
|
-
alwaysSampleErrors;
|
|
35
|
-
alwaysSampleSlow;
|
|
36
|
-
linksBased;
|
|
37
|
-
linksRate;
|
|
38
|
-
logger;
|
|
39
|
-
// Track whether we should sample this request
|
|
40
|
-
samplingDecisions = /* @__PURE__ */ new WeakMap();
|
|
41
|
-
// Track operation results to enable post-execution decision
|
|
42
|
-
operationResults = /* @__PURE__ */ new WeakMap();
|
|
43
|
-
constructor(options = {}) {
|
|
44
|
-
this.baselineSampleRate = options.baselineSampleRate ?? 0.1;
|
|
45
|
-
this.slowThresholdMs = options.slowThresholdMs ?? 1e3;
|
|
46
|
-
this.alwaysSampleErrors = options.alwaysSampleErrors ?? true;
|
|
47
|
-
this.alwaysSampleSlow = options.alwaysSampleSlow ?? true;
|
|
48
|
-
this.linksBased = options.linksBased ?? false;
|
|
49
|
-
this.linksRate = options.linksRate ?? 1;
|
|
50
|
-
this.logger = options.logger;
|
|
51
|
-
if (this.baselineSampleRate < 0 || this.baselineSampleRate > 1) {
|
|
52
|
-
throw new Error("Baseline sample rate must be between 0 and 1");
|
|
53
|
-
}
|
|
54
|
-
if (this.linksRate < 0 || this.linksRate > 1) {
|
|
55
|
-
throw new Error("Links rate must be between 0 and 1");
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
needsTailSampling() {
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
shouldSample(context) {
|
|
62
|
-
const baselineDecision = Math.random() < this.baselineSampleRate;
|
|
63
|
-
this.samplingDecisions.set(context.args, baselineDecision);
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Check if any links point to sampled spans.
|
|
68
|
-
*
|
|
69
|
-
* A span is considered linked to a sampled span if any of its links
|
|
70
|
-
* have trace_flags with the sampled bit set (0x01).
|
|
71
|
-
*
|
|
72
|
-
* @param links - Array of span links to check
|
|
73
|
-
* @returns true if any linked span is sampled, false otherwise
|
|
74
|
-
*/
|
|
75
|
-
hasSampledLink(links) {
|
|
76
|
-
if (!links || links.length === 0) {
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
return links.some(
|
|
80
|
-
(link) => link.context && (link.context.traceFlags & TraceFlags.SAMPLED) !== 0
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Re-evaluate sampling decision after operation completes
|
|
85
|
-
*
|
|
86
|
-
* This allows us to always capture errors and slow requests,
|
|
87
|
-
* even if they weren't initially sampled.
|
|
88
|
-
*
|
|
89
|
-
* @param context - Sampling context
|
|
90
|
-
* @param result - Operation result
|
|
91
|
-
* @returns true if this operation should be kept (not discarded)
|
|
92
|
-
*/
|
|
93
|
-
shouldKeepTrace(context, result) {
|
|
94
|
-
const baselineDecision = this.samplingDecisions.get(context.args) ?? false;
|
|
95
|
-
if (this.alwaysSampleErrors && !result.success) {
|
|
96
|
-
if (!baselineDecision) {
|
|
97
|
-
this.logger?.debug(
|
|
98
|
-
{
|
|
99
|
-
operation: context.operationName,
|
|
100
|
-
error: result.error?.message
|
|
101
|
-
},
|
|
102
|
-
"Adaptive sampling: Keeping error trace"
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
return true;
|
|
106
|
-
}
|
|
107
|
-
if (this.alwaysSampleSlow && result.duration >= this.slowThresholdMs) {
|
|
108
|
-
if (!baselineDecision) {
|
|
109
|
-
this.logger?.debug(
|
|
110
|
-
{
|
|
111
|
-
operation: context.operationName,
|
|
112
|
-
duration: result.duration
|
|
113
|
-
},
|
|
114
|
-
"Adaptive sampling: Keeping slow trace"
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
119
|
-
if (this.linksBased && context.links && this.hasSampledLink(context.links)) {
|
|
120
|
-
const keepLinked = Math.random() < this.linksRate;
|
|
121
|
-
if (keepLinked && !baselineDecision) {
|
|
122
|
-
this.logger?.debug(
|
|
123
|
-
{
|
|
124
|
-
operation: context.operationName,
|
|
125
|
-
linkCount: context.links.length
|
|
126
|
-
},
|
|
127
|
-
"Adaptive sampling: Keeping trace due to sampled link"
|
|
128
|
-
);
|
|
129
|
-
}
|
|
130
|
-
return keepLinked;
|
|
131
|
-
}
|
|
132
|
-
return baselineDecision;
|
|
133
|
-
}
|
|
134
|
-
};
|
|
135
|
-
var UserIdSampler = class {
|
|
136
|
-
baselineSampleRate;
|
|
137
|
-
alwaysSampleUsers;
|
|
138
|
-
extractUserId;
|
|
139
|
-
logger;
|
|
140
|
-
constructor(options) {
|
|
141
|
-
this.baselineSampleRate = options.baselineSampleRate ?? 0.1;
|
|
142
|
-
this.alwaysSampleUsers = new Set(options.alwaysSampleUsers || []);
|
|
143
|
-
this.extractUserId = options.extractUserId;
|
|
144
|
-
this.logger = options.logger;
|
|
145
|
-
}
|
|
146
|
-
shouldSample(context) {
|
|
147
|
-
const userId = this.extractUserId(context.args);
|
|
148
|
-
if (userId && this.alwaysSampleUsers.has(userId)) {
|
|
149
|
-
this.logger?.debug(
|
|
150
|
-
{
|
|
151
|
-
operation: context.operationName,
|
|
152
|
-
userId
|
|
153
|
-
},
|
|
154
|
-
"Sampling user request"
|
|
155
|
-
);
|
|
156
|
-
return true;
|
|
157
|
-
}
|
|
158
|
-
if (userId) {
|
|
159
|
-
const hash = this.hashString(userId);
|
|
160
|
-
return hash < this.baselineSampleRate;
|
|
161
|
-
}
|
|
162
|
-
return Math.random() < this.baselineSampleRate;
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Add user IDs to always-sample list
|
|
166
|
-
*/
|
|
167
|
-
addAlwaysSampleUsers(...userIds) {
|
|
168
|
-
for (const userId of userIds) {
|
|
169
|
-
this.alwaysSampleUsers.add(userId);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Remove user IDs from always-sample list
|
|
174
|
-
*/
|
|
175
|
-
removeAlwaysSampleUsers(...userIds) {
|
|
176
|
-
for (const userId of userIds) {
|
|
177
|
-
this.alwaysSampleUsers.delete(userId);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Simple hash function for consistent user sampling
|
|
182
|
-
*/
|
|
183
|
-
hashString(str) {
|
|
184
|
-
let hash = 0;
|
|
185
|
-
for (let i = 0; i < str.length; i++) {
|
|
186
|
-
const char = str.codePointAt(i) ?? 0;
|
|
187
|
-
hash = (hash << 5) - hash + char;
|
|
188
|
-
hash = hash & hash;
|
|
189
|
-
}
|
|
190
|
-
return Math.abs(hash) / 2147483647;
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
var CompositeSampler = class {
|
|
194
|
-
constructor(samplers) {
|
|
195
|
-
this.samplers = samplers;
|
|
196
|
-
if (samplers.length === 0) {
|
|
197
|
-
throw new Error("CompositeSampler requires at least one child sampler");
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
samplers;
|
|
201
|
-
shouldSample(context) {
|
|
202
|
-
return this.samplers.some((sampler) => sampler.shouldSample(context));
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
var FeatureFlagSampler = class {
|
|
206
|
-
baselineSampleRate;
|
|
207
|
-
alwaysSampleFlags;
|
|
208
|
-
extractFlags;
|
|
209
|
-
logger;
|
|
210
|
-
constructor(options) {
|
|
211
|
-
this.baselineSampleRate = options.baselineSampleRate ?? 0.1;
|
|
212
|
-
this.alwaysSampleFlags = new Set(options.alwaysSampleFlags || []);
|
|
213
|
-
this.extractFlags = options.extractFlags;
|
|
214
|
-
this.logger = options.logger;
|
|
215
|
-
}
|
|
216
|
-
shouldSample(context) {
|
|
217
|
-
const flags = this.extractFlags(context.args, context.metadata);
|
|
218
|
-
if (flags && flags.some((flag) => this.alwaysSampleFlags.has(flag))) {
|
|
219
|
-
this.logger?.debug(
|
|
220
|
-
{
|
|
221
|
-
operation: context.operationName,
|
|
222
|
-
flags
|
|
223
|
-
},
|
|
224
|
-
"Sampling feature flag request"
|
|
225
|
-
);
|
|
226
|
-
return true;
|
|
227
|
-
}
|
|
228
|
-
return Math.random() < this.baselineSampleRate;
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Add feature flags to always-sample list
|
|
232
|
-
*/
|
|
233
|
-
addAlwaysSampleFlags(...flags) {
|
|
234
|
-
for (const flag of flags) {
|
|
235
|
-
this.alwaysSampleFlags.add(flag);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Remove feature flags from always-sample list
|
|
240
|
-
*/
|
|
241
|
-
removeAlwaysSampleFlags(...flags) {
|
|
242
|
-
for (const flag of flags) {
|
|
243
|
-
this.alwaysSampleFlags.delete(flag);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
var samplingPresets = {
|
|
248
|
-
/** Capture everything — best for local development and debugging */
|
|
249
|
-
development: () => new AlwaysSampler(),
|
|
250
|
-
/** Only bad outcomes — zero baseline, errors always kept */
|
|
251
|
-
errorsOnly: () => new AdaptiveSampler({
|
|
252
|
-
baselineSampleRate: 0,
|
|
253
|
-
alwaysSampleErrors: true
|
|
254
|
-
}),
|
|
255
|
-
/**
|
|
256
|
-
* Balanced production defaults — 10% baseline + errors + slow traces.
|
|
257
|
-
* Pass overrides to tune (uses the same option names as AdaptiveSampler).
|
|
258
|
-
*/
|
|
259
|
-
production: (overrides) => new AdaptiveSampler({
|
|
260
|
-
baselineSampleRate: 0.1,
|
|
261
|
-
alwaysSampleErrors: true,
|
|
262
|
-
alwaysSampleSlow: true,
|
|
263
|
-
slowThresholdMs: 1e3,
|
|
264
|
-
...overrides
|
|
265
|
-
}),
|
|
266
|
-
/** Disable sampling entirely */
|
|
267
|
-
off: () => new NeverSampler()
|
|
268
|
-
};
|
|
269
|
-
function resolveSamplingPreset(preset) {
|
|
270
|
-
switch (preset) {
|
|
271
|
-
case "development":
|
|
272
|
-
return samplingPresets.development();
|
|
273
|
-
case "errors-only":
|
|
274
|
-
return samplingPresets.errorsOnly();
|
|
275
|
-
case "production":
|
|
276
|
-
return samplingPresets.production();
|
|
277
|
-
case "off":
|
|
278
|
-
return samplingPresets.off();
|
|
279
|
-
default:
|
|
280
|
-
throw new Error(
|
|
281
|
-
`Unknown sampling preset: "${preset}". Valid presets: development, errors-only, production, off`
|
|
282
|
-
);
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
function createLinkFromHeaders(headers, attributes) {
|
|
286
|
-
const traceparent = headers.traceparent || headers["traceparent"];
|
|
287
|
-
if (!traceparent) {
|
|
288
|
-
return null;
|
|
289
|
-
}
|
|
290
|
-
const spanContext = parseTraceparent(traceparent);
|
|
291
|
-
if (!spanContext || !isValidSpanContext(spanContext)) {
|
|
292
|
-
return null;
|
|
293
|
-
}
|
|
294
|
-
return {
|
|
295
|
-
context: spanContext,
|
|
296
|
-
attributes: attributes ?? {}
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
function extractLinksFromBatch(messages, headersKey = "headers") {
|
|
300
|
-
const links = [];
|
|
301
|
-
for (const msg of messages) {
|
|
302
|
-
const msgHeaders = msg[headersKey];
|
|
303
|
-
if (msgHeaders && typeof msgHeaders === "object" && msgHeaders !== null) {
|
|
304
|
-
const link = createLinkFromHeaders(msgHeaders, {
|
|
305
|
-
"messaging.batch.message_index": links.length
|
|
306
|
-
});
|
|
307
|
-
if (link) {
|
|
308
|
-
links.push(link);
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
return links;
|
|
313
|
-
}
|
|
314
|
-
function parseTraceparent(traceparent) {
|
|
315
|
-
const TRACEPARENT_REGEX = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/i;
|
|
316
|
-
const match = traceparent.match(TRACEPARENT_REGEX);
|
|
317
|
-
if (!match || match.length < 5) {
|
|
318
|
-
return null;
|
|
319
|
-
}
|
|
320
|
-
const version = match[1];
|
|
321
|
-
const traceId = match[2];
|
|
322
|
-
const spanId = match[3];
|
|
323
|
-
const flags = match[4];
|
|
324
|
-
if (!version || !traceId || !spanId || !flags) {
|
|
325
|
-
return null;
|
|
326
|
-
}
|
|
327
|
-
if (version === "ff") {
|
|
328
|
-
return null;
|
|
329
|
-
}
|
|
330
|
-
return {
|
|
331
|
-
traceId,
|
|
332
|
-
spanId,
|
|
333
|
-
traceFlags: Number.parseInt(flags, 16),
|
|
334
|
-
isRemote: true
|
|
335
|
-
};
|
|
336
|
-
}
|
|
337
|
-
function isValidSpanContext(spanContext) {
|
|
338
|
-
if (!spanContext) return false;
|
|
339
|
-
return spanContext.traceId !== "00000000000000000000000000000000" && spanContext.spanId !== "0000000000000000";
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
export { AUTOTEL_SAMPLING_TAIL_EVALUATED, AUTOTEL_SAMPLING_TAIL_KEEP, AdaptiveSampler, AlwaysSampler, CompositeSampler, FeatureFlagSampler, NeverSampler, RandomSampler, UserIdSampler, createLinkFromHeaders, extractLinksFromBatch, resolveSamplingPreset, samplingPresets };
|
|
343
|
-
//# sourceMappingURL=chunk-DPSA4QLA.js.map
|
|
344
|
-
//# sourceMappingURL=chunk-DPSA4QLA.js.map
|