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/attributes/builders.ts","../src/attributes/validators.ts","../src/attributes/utils.ts","../src/attributes/attachers.ts","../src/attributes/domains.ts"],"names":["UserAttributes","SessionAttributes","DeviceAttributes","HTTPAttributes","DBAttributes","ServiceAttributes","NetworkAttributes","ServerAddressAttributes","URLAttributes","ErrorAttributes","ExceptionAttributes","ProcessAttributes","ThreadAttributes","ContainerAttributes","K8sAttributes","CloudAttributes","FaaSAttributes","FeatureFlagAttributes","MessagingAttributes","GenAIAttributes","RPCAttributes","GraphQLAttributes","OTelAttributes","CodeAttributes","TLSAttributes","REDACTOR_PATTERNS","replacement","attrs","resourceFromAttributes"],"mappings":"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","file":"chunk-M3LFHHTN.cjs","sourcesContent":["/**\n * Attribute builders for constructing OpenTelemetry attributes\n * Provides both key builders (Pattern A) and object builders (Pattern B)\n *\n * @example Pattern A: Key builders\n * ```typescript\n * attrs.user.id('123') // { 'user.id': '123' }\n * attrs.user.email('user@example.com') // { 'user.email': 'user@example.com' }\n * attrs.http.request.method('GET') // { 'http.request.method': 'GET' }\n * attrs.http.response.statusCode(200) // { 'http.response.status_code': 200 }\n * ```\n *\n * @example Pattern B: Object builders\n * ```typescript\n * attrs.user({ id: '123', email: 'user@example.com' })\n * attrs.http.server({ method: 'GET', route: '/users/:id', statusCode: 200 })\n * attrs.db.client({ system: 'postgresql', operation: 'SELECT', collectionName: 'users' })\n * ```\n */\n\nimport {\n UserAttributes,\n SessionAttributes,\n DeviceAttributes,\n HTTPAttributes,\n DBAttributes,\n ServiceAttributes,\n NetworkAttributes,\n ServerAddressAttributes,\n URLAttributes,\n ErrorAttributes,\n ExceptionAttributes,\n ProcessAttributes,\n ThreadAttributes,\n ContainerAttributes,\n K8sAttributes,\n CloudAttributes,\n FaaSAttributes,\n FeatureFlagAttributes,\n MessagingAttributes,\n GenAIAttributes,\n RPCAttributes,\n GraphQLAttributes,\n OTelAttributes,\n CodeAttributes,\n TLSAttributes,\n} from './registry';\n\nimport type {\n UserAttrs,\n SessionAttrs,\n DeviceAttrs,\n HTTPServerAttrs,\n HTTPClientAttrs,\n DBAttrs,\n ServiceAttrs,\n NetworkAttrs,\n ErrorAttrs,\n MessagingAttrs,\n CloudAttrs,\n ServerAddressAttrs,\n URLAttrs,\n ProcessAttrs,\n ContainerAttrs,\n ExceptionAttrs,\n} from './types';\n\nexport const attrs = {\n user: {\n id: (value: string) => ({ [UserAttributes.id]: value }),\n email: (value: string) => ({ [UserAttributes.email]: value }),\n name: (value: string) => ({ [UserAttributes.name]: value }),\n fullName: (value: string) => ({ [UserAttributes.fullName]: value }),\n hash: (value: string) => ({ [UserAttributes.hash]: value }),\n roles: (value: string[]) => ({ [UserAttributes.roles]: value }),\n\n data: (data: UserAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.id !== undefined) result[UserAttributes.id] = data.id;\n if (data.email !== undefined) result[UserAttributes.email] = data.email;\n if (data.name !== undefined) result[UserAttributes.name] = data.name;\n if (data.fullName !== undefined)\n result[UserAttributes.fullName] = data.fullName;\n if (data.hash !== undefined) result[UserAttributes.hash] = data.hash;\n if (data.roles !== undefined) result[UserAttributes.roles] = data.roles;\n return result;\n },\n },\n\n session: {\n id: (value: string) => ({ [SessionAttributes.id]: value }),\n previousId: (value: string) => ({ [SessionAttributes.previousId]: value }),\n\n data: (data: SessionAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.id !== undefined) result[SessionAttributes.id] = data.id;\n if (data.previousId !== undefined)\n result[SessionAttributes.previousId] = data.previousId;\n return result;\n },\n },\n\n device: {\n id: (value: string) => ({ [DeviceAttributes.id]: value }),\n manufacturer: (value: string) => ({\n [DeviceAttributes.manufacturer]: value,\n }),\n modelIdentifier: (value: string) => ({\n [DeviceAttributes.modelIdentifier]: value,\n }),\n modelName: (value: string) => ({ [DeviceAttributes.modelName]: value }),\n\n data: (data: DeviceAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.id !== undefined) result[DeviceAttributes.id] = data.id;\n if (data.manufacturer !== undefined)\n result[DeviceAttributes.manufacturer] = data.manufacturer;\n if (data.modelIdentifier !== undefined)\n result[DeviceAttributes.modelIdentifier] = data.modelIdentifier;\n if (data.modelName !== undefined)\n result[DeviceAttributes.modelName] = data.modelName;\n return result;\n },\n },\n\n http: {\n request: {\n method: (value: string) => ({ [HTTPAttributes.requestMethod]: value }),\n methodOriginal: (value: string) => ({\n [HTTPAttributes.requestMethodOriginal]: value,\n }),\n resendCount: (value: number) => ({\n [HTTPAttributes.requestResendCount]: value,\n }),\n size: (value: number) => ({ [HTTPAttributes.requestSize]: value }),\n bodySize: (value: number) => ({\n [HTTPAttributes.requestBodySize]: value,\n }),\n },\n\n response: {\n statusCode: (value: number) => ({\n [HTTPAttributes.responseStatusCode]: value,\n }),\n size: (value: number) => ({ [HTTPAttributes.responseSize]: value }),\n bodySize: (value: number) => ({\n [HTTPAttributes.responseBodySize]: value,\n }),\n },\n\n route: (value: string) => ({ [HTTPAttributes.route]: value }),\n connectionState: (value: string) => ({\n [HTTPAttributes.connectionState]: value,\n }),\n\n server: (data: HTTPServerAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.method !== undefined)\n result[HTTPAttributes.requestMethod] = data.method;\n if (data.route !== undefined) result[HTTPAttributes.route] = data.route;\n if (data.statusCode !== undefined)\n result[HTTPAttributes.responseStatusCode] = data.statusCode;\n if (data.bodySize !== undefined)\n result[HTTPAttributes.requestBodySize] = data.bodySize;\n if (data.requestSize !== undefined)\n result[HTTPAttributes.requestSize] = data.requestSize;\n if (data.responseSize !== undefined)\n result[HTTPAttributes.responseSize] = data.responseSize;\n if (data.resendCount !== undefined)\n result[HTTPAttributes.requestResendCount] = data.resendCount;\n return result;\n },\n\n client: (data: HTTPClientAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.method !== undefined)\n result[HTTPAttributes.requestMethod] = data.method;\n if (data.url !== undefined) result[HTTPAttributes.route] = data.url;\n if (data.statusCode !== undefined)\n result[HTTPAttributes.responseStatusCode] = data.statusCode;\n return result;\n },\n },\n\n db: {\n client: {\n system: (value: string) => ({ [DBAttributes.systemName]: value }),\n operation: (value: string) => ({ [DBAttributes.operationName]: value }),\n collectionName: (value: string) => ({\n [DBAttributes.collectionName]: value,\n }),\n namespace: (value: string) => ({ [DBAttributes.namespace]: value }),\n statement: (value: string) => ({ [DBAttributes.statement]: value }),\n querySummary: (value: string) => ({ [DBAttributes.querySummary]: value }),\n queryText: (value: string) => ({ [DBAttributes.queryText]: value }),\n responseStatus: (value: string | number) => ({\n [DBAttributes.responseStatusCode]: value,\n }),\n rowsReturned: (value: number) => ({\n [DBAttributes.responseReturnedRows]: value,\n }),\n\n data: (data: DBAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.system !== undefined)\n result[DBAttributes.systemName] = data.system;\n if (data.operation !== undefined)\n result[DBAttributes.operationName] = data.operation;\n if (data.collectionName !== undefined)\n result[DBAttributes.collectionName] = data.collectionName;\n // 'name' maps to db.namespace (db.name is deprecated per OTel semantic conventions)\n if (data.name !== undefined) result[DBAttributes.namespace] = data.name;\n // 'namespace' takes precedence over 'name' if both are provided\n if (data.namespace !== undefined)\n result[DBAttributes.namespace] = data.namespace;\n if (data.statement !== undefined)\n result[DBAttributes.statement] = data.statement;\n if (data.querySummary !== undefined)\n result[DBAttributes.querySummary] = data.querySummary;\n if (data.queryText !== undefined)\n result[DBAttributes.queryText] = data.queryText;\n if (data.responseStatus !== undefined)\n result[DBAttributes.responseStatusCode] = data.responseStatus;\n if (data.rowsReturned !== undefined)\n result[DBAttributes.responseReturnedRows] = data.rowsReturned;\n return result;\n },\n },\n },\n\n service: {\n name: (value: string) => ({ [ServiceAttributes.name]: value }),\n instance: (value: string) => ({ [ServiceAttributes.instance]: value }),\n version: (value: string) => ({ [ServiceAttributes.version]: value }),\n\n data: (data: ServiceAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.name !== undefined) result[ServiceAttributes.name] = data.name;\n if (data.instance !== undefined)\n result[ServiceAttributes.instance] = data.instance;\n if (data.version !== undefined)\n result[ServiceAttributes.version] = data.version;\n return result;\n },\n },\n\n network: {\n peerAddress: (value: string) => ({\n [NetworkAttributes.peerAddress]: value,\n }),\n peerPort: (value: number) => ({ [NetworkAttributes.peerPort]: value }),\n transport: (value: string) => ({ [NetworkAttributes.transport]: value }),\n protocolName: (value: string) => ({\n [NetworkAttributes.protocolName]: value,\n }),\n protocolVersion: (value: string) => ({\n [NetworkAttributes.protocolVersion]: value,\n }),\n\n data: (data: NetworkAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.peerAddress !== undefined)\n result[NetworkAttributes.peerAddress] = data.peerAddress;\n if (data.peerPort !== undefined)\n result[NetworkAttributes.peerPort] = data.peerPort;\n if (data.transport !== undefined)\n result[NetworkAttributes.transport] = data.transport;\n if (data.protocolName !== undefined)\n result[NetworkAttributes.protocolName] = data.protocolName;\n if (data.protocolVersion !== undefined)\n result[NetworkAttributes.protocolVersion] = data.protocolVersion;\n return result;\n },\n },\n\n server: {\n address: (value: string) => ({ [ServerAddressAttributes.address]: value }),\n port: (value: number) => ({ [ServerAddressAttributes.port]: value }),\n socketAddress: (value: string) => ({\n [ServerAddressAttributes.socketAddress]: value,\n }),\n\n data: (data: ServerAddressAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.address !== undefined)\n result[ServerAddressAttributes.address] = data.address;\n if (data.port !== undefined)\n result[ServerAddressAttributes.port] = data.port;\n if (data.socketAddress !== undefined)\n result[ServerAddressAttributes.socketAddress] = data.socketAddress;\n return result;\n },\n },\n\n url: {\n scheme: (value: string) => ({ [URLAttributes.scheme]: value }),\n full: (value: string) => ({ [URLAttributes.full]: value }),\n path: (value: string) => ({ [URLAttributes.path]: value }),\n query: (value: string) => ({ [URLAttributes.query]: value }),\n fragment: (value: string) => ({ [URLAttributes.fragment]: value }),\n\n data: (data: URLAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.scheme !== undefined) result[URLAttributes.scheme] = data.scheme;\n if (data.full !== undefined) result[URLAttributes.full] = data.full;\n if (data.path !== undefined) result[URLAttributes.path] = data.path;\n if (data.query !== undefined) result[URLAttributes.query] = data.query;\n if (data.fragment !== undefined)\n result[URLAttributes.fragment] = data.fragment;\n return result;\n },\n },\n\n error: {\n type: (value: string) => ({ [ErrorAttributes.type]: value }),\n message: (value: string) => ({ [ErrorAttributes.message]: value }),\n stackTrace: (value: string) => ({ [ErrorAttributes.stackTrace]: value }),\n code: (value: string | number) => ({ [ErrorAttributes.code]: value }),\n\n data: (data: ErrorAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.type !== undefined) result[ErrorAttributes.type] = data.type;\n if (data.message !== undefined)\n result[ErrorAttributes.message] = data.message;\n if (data.stackTrace !== undefined)\n result[ErrorAttributes.stackTrace] = data.stackTrace;\n if (data.code !== undefined) result[ErrorAttributes.code] = data.code;\n return result;\n },\n },\n\n exception: {\n escaped: (value: boolean) => ({ [ExceptionAttributes.escaped]: value }),\n message: (value: string) => ({ [ExceptionAttributes.message]: value }),\n stackTrace: (value: string) => ({\n [ExceptionAttributes.stackTrace]: value,\n }),\n type: (value: string) => ({ [ExceptionAttributes.type]: value }),\n moduleName: (value: string) => ({\n [ExceptionAttributes.moduleName]: value,\n }),\n\n data: (data: ExceptionAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.escaped !== undefined)\n result[ExceptionAttributes.escaped] = data.escaped;\n if (data.message !== undefined)\n result[ExceptionAttributes.message] = data.message;\n if (data.stackTrace !== undefined)\n result[ExceptionAttributes.stackTrace] = data.stackTrace;\n if (data.type !== undefined) result[ExceptionAttributes.type] = data.type;\n if (data.moduleName !== undefined)\n result[ExceptionAttributes.moduleName] = data.moduleName;\n return result;\n },\n },\n\n process: {\n pid: (value: number) => ({ [ProcessAttributes.pid]: value }),\n executablePath: (value: string) => ({\n [ProcessAttributes.executablePath]: value,\n }),\n command: (value: string) => ({ [ProcessAttributes.command]: value }),\n owner: (value: string) => ({ [ProcessAttributes.owner]: value }),\n\n data: (data: ProcessAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.pid !== undefined) result[ProcessAttributes.pid] = data.pid;\n if (data.executablePath !== undefined)\n result[ProcessAttributes.executablePath] = data.executablePath;\n if (data.command !== undefined)\n result[ProcessAttributes.command] = data.command;\n if (data.owner !== undefined)\n result[ProcessAttributes.owner] = data.owner;\n return result;\n },\n },\n\n thread: {\n id: (value: number) => ({ [ThreadAttributes.id]: value }),\n name: (value: string) => ({ [ThreadAttributes.name]: value }),\n },\n\n container: {\n id: (value: string) => ({ [ContainerAttributes.id]: value }),\n name: (value: string) => ({ [ContainerAttributes.name]: value }),\n image: (value: string) => ({ [ContainerAttributes.image]: value }),\n tag: (value: string) => ({ [ContainerAttributes.tag]: value }),\n\n data: (data: ContainerAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.id !== undefined) result[ContainerAttributes.id] = data.id;\n if (data.name !== undefined) result[ContainerAttributes.name] = data.name;\n if (data.image !== undefined)\n result[ContainerAttributes.image] = data.image;\n if (data.tag !== undefined) result[ContainerAttributes.tag] = data.tag;\n return result;\n },\n },\n\n k8s: {\n podName: (value: string) => ({ [K8sAttributes.podName]: value }),\n namespaceName: (value: string) => ({\n [K8sAttributes.namespaceName]: value,\n }),\n deploymentName: (value: string) => ({\n [K8sAttributes.deploymentName]: value,\n }),\n state: (value: string) => ({ [K8sAttributes.state]: value }),\n },\n\n cloud: {\n provider: (value: string) => ({ [CloudAttributes.provider]: value }),\n accountId: (value: string) => ({ [CloudAttributes.accountId]: value }),\n region: (value: string) => ({ [CloudAttributes.region]: value }),\n availabilityZone: (value: string) => ({\n [CloudAttributes.availabilityZone]: value,\n }),\n platform: (value: string) => ({ [CloudAttributes.platform]: value }),\n\n data: (data: CloudAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.provider !== undefined)\n result[CloudAttributes.provider] = data.provider;\n if (data.accountId !== undefined)\n result[CloudAttributes.accountId] = data.accountId;\n if (data.region !== undefined)\n result[CloudAttributes.region] = data.region;\n if (data.availabilityZone !== undefined)\n result[CloudAttributes.availabilityZone] = data.availabilityZone;\n if (data.platform !== undefined)\n result[CloudAttributes.platform] = data.platform;\n return result;\n },\n },\n\n faas: {\n name: (value: string) => ({ [FaaSAttributes.name]: value }),\n version: (value: string) => ({ [FaaSAttributes.version]: value }),\n instance: (value: string) => ({ [FaaSAttributes.instance]: value }),\n execution: (value: string) => ({ [FaaSAttributes.execution]: value }),\n coldstart: (value: boolean) => ({ [FaaSAttributes.coldstart]: value }),\n },\n\n featureFlag: {\n key: (value: string) => ({ [FeatureFlagAttributes.key]: value }),\n provider: (value: string) => ({ [FeatureFlagAttributes.provider]: value }),\n variant: (value: string) => ({ [FeatureFlagAttributes.variant]: value }),\n },\n\n messaging: {\n system: (value: string) => ({ [MessagingAttributes.system]: value }),\n destination: (value: string) => ({\n [MessagingAttributes.destination]: value,\n }),\n operation: (value: 'publish' | 'receive' | 'process') => ({\n [MessagingAttributes.operation]: value,\n }),\n messageId: (value: string) => ({ [MessagingAttributes.messageId]: value }),\n conversationId: (value: string) => ({\n [MessagingAttributes.conversationId]: value,\n }),\n\n data: (data: MessagingAttrs) => {\n const result: Record<string, unknown> = {};\n if (data.system !== undefined)\n result[MessagingAttributes.system] = data.system;\n if (data.destination !== undefined)\n result[MessagingAttributes.destination] = data.destination;\n if (data.operation !== undefined)\n result[MessagingAttributes.operation] = data.operation;\n if (data.messageId !== undefined)\n result[MessagingAttributes.messageId] = data.messageId;\n if (data.conversationId !== undefined)\n result[MessagingAttributes.conversationId] = data.conversationId;\n return result;\n },\n },\n\n genAI: {\n system: (value: string) => ({ [GenAIAttributes.system]: value }),\n requestModel: (value: string) => ({\n [GenAIAttributes.requestModel]: value,\n }),\n responseModel: (value: string) => ({\n [GenAIAttributes.responseModel]: value,\n }),\n operationName: (value: 'chat' | 'completion' | 'embedding') => ({\n [GenAIAttributes.operationName]: value,\n }),\n usagePromptTokens: (value: number) => ({\n [GenAIAttributes.usagePromptTokens]: value,\n }),\n usageCompletionTokens: (value: number) => ({\n [GenAIAttributes.usageCompletionTokens]: value,\n }),\n provider: (value: string) => ({ [GenAIAttributes.provider]: value }),\n },\n\n rpc: {\n system: (value: string) => ({ [RPCAttributes.system]: value }),\n service: (value: string) => ({ [RPCAttributes.service]: value }),\n method: (value: string) => ({ [RPCAttributes.method]: value }),\n grpcStatusCode: (value: number) => ({\n [RPCAttributes.grpcStatusCode]: value,\n }),\n },\n\n graphql: {\n document: (value: string) => ({ [GraphQLAttributes.document]: value }),\n operationName: (value: string) => ({\n [GraphQLAttributes.operationName]: value,\n }),\n operationType: (value: 'query' | 'mutation' | 'subscription') => ({\n [GraphQLAttributes.operationType]: value,\n }),\n },\n\n otel: {\n libraryName: (value: string) => ({ [OTelAttributes.libraryName]: value }),\n libraryVersion: (value: string) => ({\n [OTelAttributes.libraryVersion]: value,\n }),\n statusCode: (value: string) => ({ [OTelAttributes.statusCode]: value }),\n },\n\n code: {\n namespace: (value: string) => ({ [CodeAttributes.namespace]: value }),\n filepath: (value: string) => ({ [CodeAttributes.filepath]: value }),\n function: (value: string) => ({ [CodeAttributes.function]: value }),\n class: (value: string) => ({ [CodeAttributes.class]: value }),\n method: (value: string) => ({ [CodeAttributes.method]: value }),\n column: (value: string) => ({ [CodeAttributes.column]: value }),\n lineNumber: (value: number) => ({ [CodeAttributes.lineNumber]: value }),\n repository: (value: string) => ({ [CodeAttributes.repository]: value }),\n revision: (value: string) => ({ [CodeAttributes.revision]: value }),\n },\n\n tls: {\n protocolVersion: (value: string) => ({\n [TLSAttributes.protocolVersion]: value,\n }),\n cipher: (value: string) => ({ [TLSAttributes.cipher]: value }),\n curveName: (value: string) => ({ [TLSAttributes.curveName]: value }),\n resumed: (value: boolean) => ({ [TLSAttributes.resumed]: value }),\n },\n} as const;\n","/**\n * Attribute validation, PII detection, and guardrails\n * Provides safe-by-default attribute handling with configurable policies\n */\n\nimport { REDACTOR_PATTERNS } from '../attribute-redacting-processor';\n\nexport interface AttributeGuardrails {\n /** How to handle PII in attributes */\n pii?: 'allow' | 'redact' | 'hash' | 'block';\n\n /** Maximum length for attribute values */\n maxLength?: number;\n\n /** Validate enum values against known values */\n validateEnum?: boolean;\n\n /** Log warnings for deprecated attributes instead of throwing */\n warnDeprecated?: boolean;\n\n /** Custom deprecation warnings */\n deprecatedWarnings?: Record<string, string>;\n}\n\nexport interface AttributePolicy {\n guardrails?: AttributeGuardrails;\n /** Custom deprecation warnings for specific attributes */\n deprecatedWarnings?: Record<string, string>;\n}\n\nconst DEPRECATED_ATTRIBUTES = {\n 'enduser.id': 'user.id',\n 'enduser.role': 'user.roles',\n 'enduser.scope': undefined,\n 'http.method': 'http.request.method',\n 'http.host': 'server.address',\n 'http.status_code': 'http.response.status_code',\n 'http.target': 'url.path',\n 'http.url': 'url.full',\n 'http.user_agent': 'user_agent.original',\n 'http.flavor': 'network.protocol.name',\n 'http.scheme': 'url.scheme',\n 'http.server_name': 'server.address',\n 'db.name': 'db.namespace',\n 'db.operation': 'db.operation.name',\n 'db.statement': 'db.query.text',\n 'db.system': 'db.system.name',\n 'db.collection': 'db.collection.name',\n 'db.instance.id': undefined,\n 'db.jdbc.driver_classname': undefined,\n 'db.mssql.instance_name': 'mssql.instance.name',\n 'db.sql.table': 'db.collection.name',\n 'http.client_ip': 'client.address',\n 'user_agent.original': 'user_agent.original',\n} as const;\n\nconst HTTP_METHODS = new Set([\n 'GET',\n 'POST',\n 'PUT',\n 'DELETE',\n 'PATCH',\n 'HEAD',\n 'OPTIONS',\n 'TRACE',\n 'QUERY',\n '_OTHER',\n]);\n\nexport function validateAttribute(\n key: string,\n value: unknown,\n policy: AttributePolicy = {},\n): unknown {\n const { guardrails = {} } = policy;\n\n if (value === undefined || value === null) {\n return undefined;\n }\n\n // For non-string values that don't need transformation, preserve the original type\n if (typeof value !== 'string') {\n // PII checks only apply to strings\n // maxLength only applies to strings\n // validateEnum only applies to strings\n return value;\n }\n\n const stringValue = value;\n\n if (guardrails.pii) {\n const piiResult = applyPIIPolicy(key, stringValue, guardrails.pii);\n if (piiResult !== stringValue) {\n return piiResult;\n }\n }\n\n if (guardrails.maxLength && stringValue.length > guardrails.maxLength) {\n return truncateValue(key, stringValue, guardrails.maxLength);\n }\n\n if (guardrails.validateEnum && HTTP_METHODS.has(stringValue)) {\n const normalizedMethod = normalizeHTTPMethod(stringValue);\n if (normalizedMethod !== stringValue) {\n return normalizedMethod;\n }\n }\n\n return stringValue;\n}\n\nfunction applyPIIPolicy(\n key: string,\n value: string,\n pii: AttributeGuardrails['pii'],\n): string {\n if (pii === 'allow') {\n return value;\n }\n\n if (pii === 'redact') {\n return redactIfPII(key, value);\n }\n\n if (pii === 'hash') {\n return hashIfPII(key, value);\n }\n\n if (pii === 'block' && isPIIKey(key)) {\n throw new Error(\n `PII attribute \"${key}\" is blocked by guardrails. Use pii: \"allow\" to enable it.`,\n );\n }\n\n return value;\n}\n\nfunction isPIIKey(key: string): boolean {\n const piiKeyPatterns = [\n 'email',\n 'phone',\n 'ssn',\n 'credit_card',\n 'password',\n 'secret',\n 'token',\n 'api_key',\n 'authorization',\n ];\n const lowerKey = key.toLowerCase();\n return piiKeyPatterns.some((pattern) => lowerKey.includes(pattern));\n}\n\nfunction redactIfPII(key: string, value: string): string {\n if (isPIIKey(key)) {\n // REDACTOR_PATTERNS values are RegExp patterns\n for (const [, pattern] of Object.entries(REDACTOR_PATTERNS)) {\n if (pattern instanceof RegExp && pattern.test(value)) {\n return '[REDACTED]';\n }\n }\n // If no pattern matched but key is PII, still redact\n return '[REDACTED]';\n }\n return value;\n}\n\nfunction hashIfPII(key: string, value: string): string {\n if (!isPIIKey(key)) {\n return value;\n }\n\n // Use a simple but consistent hash that produces 32-char hex\n // FNV-1a hash variant producing 128-bit output (32 hex chars)\n const FNV_PRIME = 0x01_00_01_93;\n const FNV_OFFSET = 0x81_1c_9d_c5;\n\n // Generate 4 32-bit hashes to produce 32 hex chars\n const hashes: number[] = [];\n for (let round = 0; round < 4; round++) {\n let hash = FNV_OFFSET;\n for (let i = 0; i < value.length; i++) {\n hash ^= (value.codePointAt(i) ?? 0) + round;\n hash = Math.imul(hash, FNV_PRIME);\n }\n hashes.push(hash >>> 0); // Convert to unsigned\n }\n\n return `hash_${hashes.map((h) => h.toString(16).padStart(8, '0')).join('')}`;\n}\n\nfunction truncateValue(key: string, value: string, maxLength: number): string {\n if (value.length <= maxLength) {\n return value;\n }\n return value.slice(0, maxLength - 3) + '...';\n}\n\nfunction normalizeHTTPMethod(method: string): string {\n const upper = method.toUpperCase();\n if (HTTP_METHODS.has(upper)) {\n return upper;\n }\n return upper;\n}\n\nexport function checkDeprecatedAttribute(\n key: string,\n policy: AttributePolicy = {},\n): string | null {\n const { guardrails = {}, deprecatedWarnings = {} } = policy;\n const { warnDeprecated = true } = guardrails;\n\n if (!warnDeprecated) {\n return null;\n }\n\n // Check if the key exists in the deprecated attributes map\n const isDeprecated = key in DEPRECATED_ATTRIBUTES;\n if (isDeprecated) {\n const replacement =\n DEPRECATED_ATTRIBUTES[key as keyof typeof DEPRECATED_ATTRIBUTES];\n if (replacement === undefined) {\n // Deprecated with no replacement (e.g., enduser.scope)\n console.warn(\n `[autotel/attributes] Attribute \"${key}\" is deprecated and has no replacement. ` +\n `Remove or find a replacement in OpenTelemetry semantic conventions.`,\n );\n } else {\n // Deprecated with a known replacement\n console.warn(\n `[autotel/attributes] Attribute \"${key}\" is deprecated. Use \"${replacement}\" instead.`,\n );\n }\n }\n\n if (deprecatedWarnings[key]) {\n console.warn(`[autotel/attributes] ${deprecatedWarnings[key]}`);\n }\n\n const replacement =\n DEPRECATED_ATTRIBUTES[key as keyof typeof DEPRECATED_ATTRIBUTES];\n return replacement ?? null;\n}\n\nexport function autoRedactPII(\n attributes: Record<string, unknown>,\n policy: AttributePolicy = {},\n): Record<string, unknown> {\n const { guardrails = { pii: 'redact' } } = policy;\n\n const redacted: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(attributes)) {\n redacted[key] = validateAttribute(key, value, { guardrails });\n }\n return redacted;\n}\n\nexport function defaultGuardrails(): AttributeGuardrails {\n return {\n pii: 'redact',\n maxLength: 255,\n validateEnum: true,\n warnDeprecated: true,\n };\n}\n","/**\n * Attribute utility functions\n */\n\nimport type { AttributeValue } from '../trace-context';\nimport {\n validateAttribute,\n autoRedactPII,\n defaultGuardrails,\n checkDeprecatedAttribute,\n type AttributePolicy,\n} from './validators';\n\n// Type for objects that have setAttributes method (spans or contexts)\n// Using a generic parameter to accommodate different AttributeValue types\ntype AttributeSetter = {\n setAttributes: (attrs: Record<string, AttributeValue>) => void;\n};\n\nexport function mergeAttrs(\n ...attrSets: Array<Record<string, unknown> | undefined>\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const attrSet of attrSets) {\n if (attrSet) {\n Object.assign(result, attrSet);\n }\n }\n return result;\n}\n\nexport function safeSetAttributes(\n span: AttributeSetter,\n attrs: Record<string, unknown>,\n policy?: AttributePolicy,\n): void {\n // Merge user-supplied guardrails with defaults so callers can tweak\n // a single option without opting out of the rest\n const mergedGuardrails = {\n ...defaultGuardrails(),\n ...policy?.guardrails,\n };\n const effectivePolicy: AttributePolicy = {\n ...policy,\n guardrails: mergedGuardrails,\n };\n\n const validated = autoRedactPII(attrs, effectivePolicy);\n\n const sanitizedAttrs: Record<string, AttributeValue> = {};\n for (const [key, value] of Object.entries(validated)) {\n if (value !== undefined) {\n // Check for deprecated attributes and log warnings\n checkDeprecatedAttribute(key, effectivePolicy);\n const validatedValue = validateAttribute(key, value, effectivePolicy);\n if (validatedValue !== undefined) {\n // Cast to AttributeValue since validateAttribute ensures valid types\n sanitizedAttrs[key] = validatedValue as AttributeValue;\n }\n }\n }\n\n span.setAttributes(sanitizedAttrs);\n}\n","/**\n * Signal attachment helpers\n * These functions know WHERE to attach attributes automatically\n * They handle span, resource, and log signals correctly\n */\n\nimport type { Span, Attributes } from '@opentelemetry/api';\nimport {\n resourceFromAttributes,\n type Resource,\n} from '@opentelemetry/resources';\nimport type { TraceContext } from '../trace-context';\nimport { attrs } from './builders';\nimport { safeSetAttributes } from './utils';\n\nexport function setUser(\n spanOrContext: Span | TraceContext,\n data: import('./types').UserAttrs,\n guardrails?: import('./validators').AttributePolicy,\n): void {\n const attributes = attrs.user.data(data);\n safeSetAttributes(spanOrContext, attributes, guardrails);\n}\n\nexport function setSession(\n spanOrContext: Span | TraceContext,\n data: import('./types').SessionAttrs,\n guardrails?: import('./validators').AttributePolicy,\n): void {\n const attributes = attrs.session.data(data);\n safeSetAttributes(spanOrContext, attributes, guardrails);\n}\n\nexport function setDevice(\n spanOrContext: Span | TraceContext,\n data: import('./types').DeviceAttrs,\n guardrails?: import('./validators').AttributePolicy,\n): void {\n const attributes = attrs.device.data(data);\n safeSetAttributes(spanOrContext, attributes, guardrails);\n}\n\nexport function httpServer(\n spanOrContext: Span | TraceContext,\n data: import('./types').HTTPServerAttrs,\n guardrails?: import('./validators').AttributePolicy,\n): void {\n const attributes = attrs.http.server(data);\n\n if ('updateName' in spanOrContext && data.method && data.route) {\n const span = spanOrContext as Span;\n span.updateName(`HTTP ${data.method} ${data.route}`);\n }\n\n safeSetAttributes(spanOrContext, attributes, guardrails);\n}\n\nexport function httpClient(\n spanOrContext: Span | TraceContext,\n data: import('./types').HTTPClientAttrs,\n guardrails?: import('./validators').AttributePolicy,\n): void {\n const attributes = attrs.http.client(data);\n safeSetAttributes(spanOrContext, attributes, guardrails);\n}\n\nexport function dbClient(\n spanOrContext: Span | TraceContext,\n data: import('./types').DBAttrs,\n guardrails?: import('./validators').AttributePolicy,\n): void {\n const attributes = attrs.db.client.data(data);\n safeSetAttributes(spanOrContext, attributes, guardrails);\n}\n\n/**\n * Merge service attributes into a Resource and return a new Resource.\n *\n * Resource.attributes is readonly, so this function returns a new merged\n * Resource rather than mutating the input.\n *\n * @param resource - The existing resource to merge with\n * @param data - Service attributes to add\n * @returns A new Resource with the merged attributes\n *\n * @example\n * ```typescript\n * const baseResource = Resource.default();\n * const enrichedResource = mergeServiceResource(baseResource, {\n * name: 'my-service',\n * version: '1.0.0',\n * });\n * ```\n */\nexport function mergeServiceResource(\n resource: Resource,\n data: import('./types').ServiceAttrs,\n): Resource {\n const attributes = attrs.service.data(data);\n return resource.merge(resourceFromAttributes(attributes as Attributes));\n}\n\nexport function identify(\n spanOrContext: Span | TraceContext,\n data: {\n user?: import('./types').UserAttrs;\n session?: import('./types').SessionAttrs;\n device?: import('./types').DeviceAttrs;\n },\n guardrails?: import('./validators').AttributePolicy,\n): void {\n const allAttrs = [];\n\n if (data.user) {\n allAttrs.push(attrs.user.data(data.user));\n }\n if (data.session) {\n allAttrs.push(attrs.session.data(data.session));\n }\n if (data.device) {\n allAttrs.push(attrs.device.data(data.device));\n }\n\n const merged: Record<string, unknown> = {};\n for (const attrSet of allAttrs) {\n Object.assign(merged, attrSet);\n }\n\n safeSetAttributes(spanOrContext, merged, guardrails);\n}\n\nexport function request(\n spanOrContext: Span | TraceContext,\n data: import('./types').HTTPServerAttrs & {\n clientIp?: string;\n },\n guardrails?: import('./validators').AttributePolicy,\n): void {\n const httpAttrs = attrs.http.server(data);\n const networkAttrs = attrs.network.peerAddress(data.clientIp || '');\n const merged = { ...httpAttrs, ...networkAttrs };\n safeSetAttributes(spanOrContext, merged, guardrails);\n}\n\nexport function setError(\n spanOrContext: Span | TraceContext,\n data: import('./types').ErrorAttrs,\n guardrails?: import('./validators').AttributePolicy,\n): void {\n const attributes = attrs.error.data(data);\n safeSetAttributes(spanOrContext, attributes, guardrails);\n}\n\nexport function setException(\n spanOrContext: Span | TraceContext,\n data: import('./types').ExceptionAttrs,\n guardrails?: import('./validators').AttributePolicy,\n): void {\n const attributes = attrs.exception.data(data);\n safeSetAttributes(spanOrContext, attributes, guardrails);\n}\n","/**\n * Domain helpers for common attribute patterns\n * These bundle multiple attribute groups into semantic helpers\n */\n\nimport { attrs } from './builders';\nimport { safeSetAttributes } from './utils';\n\nexport function transaction(\n spanOrContext: import('../trace-context').TraceContext,\n config: {\n user?: import('./types').UserAttrs;\n session?: import('./types').SessionAttrs;\n method?: string;\n route?: string;\n statusCode?: number;\n clientIp?: string;\n },\n guardrails?: import('./validators').AttributePolicy,\n): void {\n const userAttrs = attrs.user.data(config.user || {});\n const sessionAttrs = attrs.session.data(config.session || {});\n const httpAttrs = attrs.http.server({\n method: config.method,\n route: config.route,\n statusCode: config.statusCode,\n });\n const networkAttrs = attrs.network.peerAddress(config.clientIp || '');\n\n const merged = {\n ...userAttrs,\n ...sessionAttrs,\n ...httpAttrs,\n ...networkAttrs,\n };\n\n if (config.method && config.route && 'updateName' in spanOrContext) {\n spanOrContext.updateName(`HTTP ${config.method} ${config.route}`);\n }\n\n safeSetAttributes(spanOrContext, merged, guardrails);\n}\n"]}
|
package/dist/chunk-NEIB3TLD.cjs
DELETED
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
// src/attribute-redacting-processor.ts
|
|
4
|
-
var REDACTOR_PATTERNS = {
|
|
5
|
-
// Value patterns (match content in attribute values)
|
|
6
|
-
email: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/gi,
|
|
7
|
-
phone: /\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g,
|
|
8
|
-
ssn: /\b\d{3}[-]?\d{2}[-]?\d{4}\b/g,
|
|
9
|
-
creditCard: /\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/g,
|
|
10
|
-
bearerToken: /Bearer\s+[A-Za-z0-9._~+/=-]+/gi,
|
|
11
|
-
apiKeyInValue: /(?:api[_-]?key|apikey|api_secret)[=:][\s"']*[A-Za-z0-9_-]+/gi,
|
|
12
|
-
jwt: /eyJ[A-Za-z0-9_-]*\.eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]*/g,
|
|
13
|
-
// Key patterns (match attribute names - redacts entire value)
|
|
14
|
-
sensitiveKey: /^(password|passwd|pwd|secret|token|api[_-]?key|auth|credential|private[_-]?key|authorization)$/i
|
|
15
|
-
};
|
|
16
|
-
var builtinPatterns = {
|
|
17
|
-
/** Credit card numbers → ****1111 (PCI DSS: last 4 allowed) */
|
|
18
|
-
creditCard: {
|
|
19
|
-
pattern: /\b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b/g,
|
|
20
|
-
mask: (m) => `****${m.replace(/[\s-]/g, "").slice(-4)}`
|
|
21
|
-
},
|
|
22
|
-
/** Email addresses → a***@***.com */
|
|
23
|
-
email: {
|
|
24
|
-
pattern: /[\w.+-]+@[\w-]+\.[\w.]+/g,
|
|
25
|
-
mask: (m) => {
|
|
26
|
-
const at = m.indexOf("@");
|
|
27
|
-
if (at < 1) return "***@***";
|
|
28
|
-
const tld = m.slice(m.lastIndexOf("."));
|
|
29
|
-
return `${m[0]}***@***${tld}`;
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
/** IPv4 addresses → ***.***.***.100 (last octet only) */
|
|
33
|
-
ipv4: {
|
|
34
|
-
pattern: /\b(?!0\.0\.0\.0\b)(?!127\.0\.0\.1\b)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g,
|
|
35
|
-
mask: (m) => `***.***.***.${m.split(".").pop()}`
|
|
36
|
-
},
|
|
37
|
-
/**
|
|
38
|
-
* International / formatted phone numbers.
|
|
39
|
-
*
|
|
40
|
-
* Matches:
|
|
41
|
-
* - `+33 1 23 45 67 89` -> `+33******89`
|
|
42
|
-
* - `(415) 555-1234` -> `********34`
|
|
43
|
-
* - `555-123-4567` / `555.123.4567` / `5551234567` -> `********67`
|
|
44
|
-
*
|
|
45
|
-
* Bare short digit runs like `12345678` are intentionally not matched.
|
|
46
|
-
*/
|
|
47
|
-
phone: {
|
|
48
|
-
pattern: /(?:\+\d{1,3}[\s.-]?\(?\d{1,4}\)?(?:[\s.-]?\d{2,4}){2,4}|\(\d{1,4}\)(?:[\s.-]?\d{2,4}){2,4}|\b\d{3}[-.]?\d{3}[-.]?\d{4}\b)/g,
|
|
49
|
-
mask: (m) => {
|
|
50
|
-
const digits = m.replace(/[^\d]/g, "");
|
|
51
|
-
const hasPlus = m.startsWith("+");
|
|
52
|
-
if (hasPlus && digits.length > 4) {
|
|
53
|
-
const ccMatch = m.match(/^\+\d{1,3}/);
|
|
54
|
-
const cc = ccMatch ? ccMatch[0] : "+";
|
|
55
|
-
return `${cc}******${digits.slice(-2)}`;
|
|
56
|
-
}
|
|
57
|
-
if (digits.length > 2) {
|
|
58
|
-
return `${"*".repeat(digits.length - 2)}${digits.slice(-2)}`;
|
|
59
|
-
}
|
|
60
|
-
return "***";
|
|
61
|
-
}
|
|
62
|
-
},
|
|
63
|
-
/** JWT tokens → eyJ***.*** */
|
|
64
|
-
jwt: {
|
|
65
|
-
pattern: /\beyJ[\w-]*\.[\w-]*\.[\w-]*\b/g,
|
|
66
|
-
mask: () => "eyJ***.***"
|
|
67
|
-
},
|
|
68
|
-
/** Bearer tokens → Bearer *** */
|
|
69
|
-
bearer: {
|
|
70
|
-
pattern: /\bBearer\s+[\w\-.~+/]{8,}=*/gi,
|
|
71
|
-
mask: () => "Bearer ***"
|
|
72
|
-
},
|
|
73
|
-
/** IBAN → FR76****189 (country + check digits + last 3) */
|
|
74
|
-
iban: {
|
|
75
|
-
pattern: /\b[A-Z]{2}\d{2}[\s-]?[\dA-Z]{4}[\s-]?[\dA-Z]{4}[\s-]?[\dA-Z]{4}[\s-]?[\dA-Z]{0,4}[\s-]?[\dA-Z]{0,4}[\s-]?[\dA-Z]{0,4}\b/g,
|
|
76
|
-
mask: (m) => {
|
|
77
|
-
const clean = m.replace(/[\s-]/g, "");
|
|
78
|
-
return `${clean.slice(0, 4)}****${clean.slice(-3)}`;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
function cloneRegex(re) {
|
|
83
|
-
return new RegExp(re.source, re.flags);
|
|
84
|
-
}
|
|
85
|
-
function isPlainObject(value) {
|
|
86
|
-
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
87
|
-
}
|
|
88
|
-
function toRegExp(value) {
|
|
89
|
-
if (value instanceof RegExp) return value;
|
|
90
|
-
if (typeof value === "string") return new RegExp(value, "g");
|
|
91
|
-
if (isPlainObject(value) && typeof value.source === "string") {
|
|
92
|
-
const flags = typeof value.flags === "string" ? value.flags : "g";
|
|
93
|
-
return new RegExp(value.source, flags);
|
|
94
|
-
}
|
|
95
|
-
return void 0;
|
|
96
|
-
}
|
|
97
|
-
function toRegExpArray(value) {
|
|
98
|
-
if (!Array.isArray(value)) return void 0;
|
|
99
|
-
const out = [];
|
|
100
|
-
for (const item of value) {
|
|
101
|
-
const re = toRegExp(item);
|
|
102
|
-
if (re) out.push(re);
|
|
103
|
-
}
|
|
104
|
-
return out.length > 0 ? out : [];
|
|
105
|
-
}
|
|
106
|
-
function builtinToValuePattern(name) {
|
|
107
|
-
const b = builtinPatterns[name];
|
|
108
|
-
return { name, pattern: cloneRegex(b.pattern), mask: b.mask };
|
|
109
|
-
}
|
|
110
|
-
var DEFAULT_VALUE_PATTERNS = [
|
|
111
|
-
builtinToValuePattern("email"),
|
|
112
|
-
builtinToValuePattern("phone"),
|
|
113
|
-
{ name: "ssn", pattern: REDACTOR_PATTERNS.ssn },
|
|
114
|
-
builtinToValuePattern("creditCard")
|
|
115
|
-
];
|
|
116
|
-
var REDACTOR_PRESETS = {
|
|
117
|
-
/**
|
|
118
|
-
* Default preset - covers common PII patterns with smart masking
|
|
119
|
-
* Detects: emails (a***@***.com), phone numbers, SSNs, credit cards (****1111)
|
|
120
|
-
* Redacts keys: password, secret, token, apiKey, auth, credential
|
|
121
|
-
*/
|
|
122
|
-
default: {
|
|
123
|
-
keyPatterns: [REDACTOR_PATTERNS.sensitiveKey],
|
|
124
|
-
valuePatterns: DEFAULT_VALUE_PATTERNS,
|
|
125
|
-
builtins: true,
|
|
126
|
-
replacement: "[REDACTED]"
|
|
127
|
-
},
|
|
128
|
-
/**
|
|
129
|
-
* Strict preset - more aggressive redaction for high-security environments
|
|
130
|
-
* Includes everything in default plus: Bearer tokens, JWTs, IBAN, API keys in values
|
|
131
|
-
*/
|
|
132
|
-
strict: {
|
|
133
|
-
keyPatterns: [REDACTOR_PATTERNS.sensitiveKey, /bearer/i, /jwt/i],
|
|
134
|
-
valuePatterns: [
|
|
135
|
-
...DEFAULT_VALUE_PATTERNS,
|
|
136
|
-
builtinToValuePattern("jwt"),
|
|
137
|
-
builtinToValuePattern("bearer"),
|
|
138
|
-
builtinToValuePattern("iban"),
|
|
139
|
-
{ name: "apiKeyInValue", pattern: REDACTOR_PATTERNS.apiKeyInValue }
|
|
140
|
-
],
|
|
141
|
-
builtins: true,
|
|
142
|
-
replacement: "[REDACTED]"
|
|
143
|
-
},
|
|
144
|
-
/**
|
|
145
|
-
* PCI-DSS preset - focused on payment card industry compliance
|
|
146
|
-
* Redacts: credit card numbers (****1111), CVV-like patterns, card-related keys
|
|
147
|
-
*/
|
|
148
|
-
"pci-dss": {
|
|
149
|
-
keyPatterns: [/card/i, /cvv/i, /cvc/i, /pan/i, /expir/i, /ccn/i],
|
|
150
|
-
valuePatterns: [builtinToValuePattern("creditCard")],
|
|
151
|
-
builtins: ["creditCard"],
|
|
152
|
-
replacement: "[REDACTED]"
|
|
153
|
-
}
|
|
154
|
-
};
|
|
155
|
-
function normalizeAttributeRedactorConfig(raw) {
|
|
156
|
-
if (raw === void 0 || raw === null) return void 0;
|
|
157
|
-
if (typeof raw === "string") return raw;
|
|
158
|
-
if (!isPlainObject(raw)) return void 0;
|
|
159
|
-
const config = {};
|
|
160
|
-
if (Array.isArray(raw.paths)) {
|
|
161
|
-
config.paths = raw.paths.filter(
|
|
162
|
-
(value) => typeof value === "string"
|
|
163
|
-
);
|
|
164
|
-
}
|
|
165
|
-
if (typeof raw.replacement === "string") {
|
|
166
|
-
config.replacement = raw.replacement;
|
|
167
|
-
}
|
|
168
|
-
if (typeof raw.builtins === "boolean") {
|
|
169
|
-
config.builtins = raw.builtins;
|
|
170
|
-
} else if (Array.isArray(raw.builtins)) {
|
|
171
|
-
config.builtins = raw.builtins.filter(
|
|
172
|
-
(name) => typeof name === "string"
|
|
173
|
-
);
|
|
174
|
-
}
|
|
175
|
-
if (typeof raw.redactor === "function") {
|
|
176
|
-
config.redactor = raw.redactor;
|
|
177
|
-
}
|
|
178
|
-
const keyPatterns = toRegExpArray(raw.keyPatterns);
|
|
179
|
-
if (keyPatterns) config.keyPatterns = keyPatterns;
|
|
180
|
-
const patterns = toRegExpArray(raw.patterns);
|
|
181
|
-
if (patterns) config.patterns = patterns;
|
|
182
|
-
if (Array.isArray(raw.valuePatterns)) {
|
|
183
|
-
const valuePatterns = [];
|
|
184
|
-
for (const item of raw.valuePatterns) {
|
|
185
|
-
if (!isPlainObject(item) || typeof item.name !== "string") continue;
|
|
186
|
-
const pattern = toRegExp(item.pattern);
|
|
187
|
-
if (!pattern) continue;
|
|
188
|
-
valuePatterns.push({
|
|
189
|
-
name: item.name,
|
|
190
|
-
pattern,
|
|
191
|
-
replacement: typeof item.replacement === "string" ? item.replacement : void 0,
|
|
192
|
-
mask: typeof item.mask === "function" ? item.mask : void 0
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
config.valuePatterns = valuePatterns;
|
|
196
|
-
}
|
|
197
|
-
return config;
|
|
198
|
-
}
|
|
199
|
-
function resolveConfig(config) {
|
|
200
|
-
const normalized = normalizeAttributeRedactorConfig(config);
|
|
201
|
-
if (!normalized) {
|
|
202
|
-
throw new Error("Invalid attribute redactor config");
|
|
203
|
-
}
|
|
204
|
-
if (typeof normalized === "string") {
|
|
205
|
-
const preset = REDACTOR_PRESETS[normalized];
|
|
206
|
-
if (!preset) {
|
|
207
|
-
throw new Error(
|
|
208
|
-
`Unknown attribute redactor preset: "${normalized}". Available presets: ${Object.keys(REDACTOR_PRESETS).join(", ")}`
|
|
209
|
-
);
|
|
210
|
-
}
|
|
211
|
-
return preset;
|
|
212
|
-
}
|
|
213
|
-
const resolvedConfig = {
|
|
214
|
-
...normalized,
|
|
215
|
-
keyPatterns: normalized.keyPatterns ? [...normalized.keyPatterns] : void 0,
|
|
216
|
-
valuePatterns: normalized.valuePatterns ? [...normalized.valuePatterns] : void 0,
|
|
217
|
-
paths: normalized.paths ? [...normalized.paths] : void 0,
|
|
218
|
-
patterns: normalized.patterns ? [...normalized.patterns] : void 0
|
|
219
|
-
};
|
|
220
|
-
if (resolvedConfig.builtins !== false) {
|
|
221
|
-
const builtinNames = Array.isArray(resolvedConfig.builtins) ? resolvedConfig.builtins : Object.keys(builtinPatterns);
|
|
222
|
-
const builtinValuePatterns = builtinNames.filter((name) => name in builtinPatterns).map(builtinToValuePattern);
|
|
223
|
-
resolvedConfig.valuePatterns = [
|
|
224
|
-
...resolvedConfig.valuePatterns ?? [],
|
|
225
|
-
...builtinValuePatterns
|
|
226
|
-
];
|
|
227
|
-
}
|
|
228
|
-
return resolvedConfig;
|
|
229
|
-
}
|
|
230
|
-
function createRedactorFromConfig(config) {
|
|
231
|
-
if (config.redactor) {
|
|
232
|
-
return config.redactor;
|
|
233
|
-
}
|
|
234
|
-
const keyPatterns = config.keyPatterns ?? [];
|
|
235
|
-
const valuePatterns = config.valuePatterns ?? [];
|
|
236
|
-
const paths = config.paths ?? [];
|
|
237
|
-
const pathSet = new Set(paths);
|
|
238
|
-
const customPatterns = config.patterns ?? [];
|
|
239
|
-
const defaultReplacement = config.replacement ?? "[REDACTED]";
|
|
240
|
-
const maskers = valuePatterns.filter((vp) => vp.mask).map((vp) => [cloneRegex(vp.pattern), vp.mask]);
|
|
241
|
-
return (key, value) => {
|
|
242
|
-
if (typeof value === "string") {
|
|
243
|
-
for (const pattern of keyPatterns) {
|
|
244
|
-
pattern.lastIndex = 0;
|
|
245
|
-
if (pattern.test(key)) {
|
|
246
|
-
return defaultReplacement;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
if (pathSet.has(key)) {
|
|
250
|
-
return defaultReplacement;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
if (typeof value !== "string") {
|
|
254
|
-
if (Array.isArray(value)) {
|
|
255
|
-
return value.map((item) => {
|
|
256
|
-
if (typeof item === "string") {
|
|
257
|
-
return redactStringValue(
|
|
258
|
-
item,
|
|
259
|
-
valuePatterns,
|
|
260
|
-
maskers,
|
|
261
|
-
customPatterns,
|
|
262
|
-
defaultReplacement
|
|
263
|
-
);
|
|
264
|
-
}
|
|
265
|
-
return item;
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
return value;
|
|
269
|
-
}
|
|
270
|
-
return redactStringValue(
|
|
271
|
-
value,
|
|
272
|
-
valuePatterns,
|
|
273
|
-
maskers,
|
|
274
|
-
customPatterns,
|
|
275
|
-
defaultReplacement
|
|
276
|
-
);
|
|
277
|
-
};
|
|
278
|
-
}
|
|
279
|
-
function redactStringValue(value, patterns, maskers, customPatterns, defaultReplacement) {
|
|
280
|
-
let result = value;
|
|
281
|
-
for (const [pattern, mask] of maskers) {
|
|
282
|
-
pattern.lastIndex = 0;
|
|
283
|
-
result = result.replace(pattern, mask);
|
|
284
|
-
}
|
|
285
|
-
for (const { pattern, replacement, mask } of patterns) {
|
|
286
|
-
if (mask) continue;
|
|
287
|
-
pattern.lastIndex = 0;
|
|
288
|
-
result = result.replaceAll(pattern, replacement ?? defaultReplacement);
|
|
289
|
-
}
|
|
290
|
-
for (const pattern of customPatterns) {
|
|
291
|
-
pattern.lastIndex = 0;
|
|
292
|
-
result = result.replaceAll(pattern, defaultReplacement);
|
|
293
|
-
}
|
|
294
|
-
return result;
|
|
295
|
-
}
|
|
296
|
-
function createRedactedSpan(span, redactor) {
|
|
297
|
-
const redactedAttributes = {};
|
|
298
|
-
for (const [key, value] of Object.entries(span.attributes)) {
|
|
299
|
-
if (value !== void 0) {
|
|
300
|
-
redactedAttributes[key] = redactor(key, value);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
return new Proxy(span, {
|
|
304
|
-
get(target, prop) {
|
|
305
|
-
if (prop === "attributes") {
|
|
306
|
-
return redactedAttributes;
|
|
307
|
-
}
|
|
308
|
-
const value = Reflect.get(target, prop);
|
|
309
|
-
if (typeof value === "function") {
|
|
310
|
-
return value.bind(target);
|
|
311
|
-
}
|
|
312
|
-
return value;
|
|
313
|
-
}
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
function createAttributeRedactor(config) {
|
|
317
|
-
return createRedactorFromConfig(resolveConfig(config));
|
|
318
|
-
}
|
|
319
|
-
var AttributeRedactingProcessor = class {
|
|
320
|
-
wrappedProcessor;
|
|
321
|
-
redactor;
|
|
322
|
-
constructor(wrappedProcessor, options) {
|
|
323
|
-
this.wrappedProcessor = wrappedProcessor;
|
|
324
|
-
const config = resolveConfig(options.redactor);
|
|
325
|
-
this.redactor = createRedactorFromConfig(config);
|
|
326
|
-
}
|
|
327
|
-
/**
|
|
328
|
-
* Pass through onStart unchanged - attributes aren't finalized yet
|
|
329
|
-
*/
|
|
330
|
-
onStart(span, parentContext) {
|
|
331
|
-
this.wrappedProcessor.onStart(span, parentContext);
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* Redact attributes and forward to wrapped processor
|
|
335
|
-
*/
|
|
336
|
-
onEnd(span) {
|
|
337
|
-
try {
|
|
338
|
-
const redactedSpan = createRedactedSpan(span, this.redactor);
|
|
339
|
-
this.wrappedProcessor.onEnd(redactedSpan);
|
|
340
|
-
} catch {
|
|
341
|
-
this.wrappedProcessor.onEnd(span);
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
forceFlush() {
|
|
345
|
-
return this.wrappedProcessor.forceFlush();
|
|
346
|
-
}
|
|
347
|
-
shutdown() {
|
|
348
|
-
return this.wrappedProcessor.shutdown();
|
|
349
|
-
}
|
|
350
|
-
};
|
|
351
|
-
|
|
352
|
-
exports.AttributeRedactingProcessor = AttributeRedactingProcessor;
|
|
353
|
-
exports.REDACTOR_PATTERNS = REDACTOR_PATTERNS;
|
|
354
|
-
exports.REDACTOR_PRESETS = REDACTOR_PRESETS;
|
|
355
|
-
exports.builtinPatterns = builtinPatterns;
|
|
356
|
-
exports.createAttributeRedactor = createAttributeRedactor;
|
|
357
|
-
exports.createRedactedSpan = createRedactedSpan;
|
|
358
|
-
exports.normalizeAttributeRedactorConfig = normalizeAttributeRedactorConfig;
|
|
359
|
-
//# sourceMappingURL=chunk-NEIB3TLD.cjs.map
|
|
360
|
-
//# sourceMappingURL=chunk-NEIB3TLD.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/attribute-redacting-processor.ts"],"names":[],"mappings":"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","file":"chunk-NEIB3TLD.cjs","sourcesContent":["/**\n * Attribute Redacting Processor\n *\n * Automatically redacts PII and sensitive data from span attributes before export.\n * This is critical for compliance (GDPR, PCI-DSS, HIPAA) and data security.\n *\n * @example Basic usage with preset\n * ```typescript\n * init({\n * service: 'my-app',\n * attributeRedactor: 'default'\n * })\n * ```\n *\n * @example Custom patterns\n * ```typescript\n * init({\n * service: 'my-app',\n * attributeRedactor: {\n * keyPatterns: [/password/i, /secret/i],\n * valuePatterns: [\n * { name: 'customerId', pattern: /CUST-\\d{8}/g, replacement: 'CUST-***' }\n * ]\n * }\n * })\n * ```\n */\n\nimport type {\n SpanProcessor,\n ReadableSpan,\n} from '@opentelemetry/sdk-trace-base';\nimport type { Context, AttributeValue, Attributes } from '@opentelemetry/api';\nimport type { Span } from '@opentelemetry/sdk-trace-base';\n\n/**\n * Custom redactor function type\n */\nexport type AttributeRedactorFn = (\n key: string,\n value: AttributeValue,\n) => AttributeValue;\n\n/**\n * Built-in redactor preset names\n */\nexport type AttributeRedactorPreset = 'default' | 'strict' | 'pci-dss';\n\n/**\n * Masker function type - receives the matched string and returns a masked version\n */\nexport type MaskFn = (match: string) => string;\n\n/**\n * Value pattern configuration\n */\nexport interface ValuePatternConfig {\n /** Name for debugging/logging */\n name: string;\n /** Regex pattern to match in values */\n pattern: RegExp;\n /** Custom replacement (default: uses global replacement) */\n replacement?: string;\n /** Mask function for smart partial masking (overrides replacement) */\n mask?: MaskFn;\n}\n\n/**\n * Built-in PII pattern names\n */\nexport type BuiltinPatternName = keyof typeof builtinPatterns;\n\n/**\n * Attribute redactor configuration\n */\nexport interface AttributeRedactorConfig {\n /** Patterns to match against attribute keys (redacts entire value if key matches) */\n keyPatterns?: RegExp[];\n\n /** Patterns to match against attribute values (redacts matched portion) */\n valuePatterns?: ValuePatternConfig[];\n\n /** Dot-notation paths to redact (e.g. 'user.password', 'payment.card') */\n paths?: string[];\n\n /** Built-in PII patterns to enable. `true` enables all, `false` disables all, array selects specific ones. */\n builtins?: boolean | BuiltinPatternName[];\n\n /** Custom RegExp patterns for string-level redaction */\n patterns?: RegExp[];\n\n /** Default replacement string (default: '[REDACTED]') */\n replacement?: string;\n\n /** Custom redactor function for full control */\n redactor?: AttributeRedactorFn;\n}\n\n/**\n * Processor options\n */\nexport interface AttributeRedactingProcessorOptions {\n redactor: AttributeRedactorConfig | AttributeRedactorPreset;\n}\n\n/**\n * Built-in patterns for detecting sensitive data\n */\nexport const REDACTOR_PATTERNS = {\n // Value patterns (match content in attribute values)\n email: /\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}\\b/gi,\n phone: /\\b\\d{3}[-.]?\\d{3}[-.]?\\d{4}\\b/g,\n ssn: /\\b\\d{3}[-]?\\d{2}[-]?\\d{4}\\b/g,\n creditCard: /\\b\\d{4}[- ]?\\d{4}[- ]?\\d{4}[- ]?\\d{4}\\b/g,\n bearerToken: /Bearer\\s+[A-Za-z0-9._~+/=-]+/gi,\n apiKeyInValue: /(?:api[_-]?key|apikey|api_secret)[=:][\\s\"']*[A-Za-z0-9_-]+/gi,\n jwt: /eyJ[A-Za-z0-9_-]*\\.eyJ[A-Za-z0-9_-]*\\.[A-Za-z0-9_-]*/g,\n\n // Key patterns (match attribute names - redacts entire value)\n sensitiveKey:\n /^(password|passwd|pwd|secret|token|api[_-]?key|auth|credential|private[_-]?key|authorization)$/i,\n} as const;\n\n/**\n * Built-in PII detection patterns with smart masking.\n * Each builtin preserves just enough signal for debugging while scrubbing PII.\n */\nexport const builtinPatterns = {\n /** Credit card numbers → ****1111 (PCI DSS: last 4 allowed) */\n creditCard: {\n pattern: /\\b\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}\\b/g,\n mask: (m: string) => `****${m.replace(/[\\s-]/g, '').slice(-4)}`,\n },\n /** Email addresses → a***@***.com */\n email: {\n pattern: /[\\w.+-]+@[\\w-]+\\.[\\w.]+/g,\n mask: (m: string) => {\n const at = m.indexOf('@');\n if (at < 1) return '***@***';\n const tld = m.slice(m.lastIndexOf('.'));\n return `${m[0]}***@***${tld}`;\n },\n },\n /** IPv4 addresses → ***.***.***.100 (last octet only) */\n ipv4: {\n pattern:\n /\\b(?!0\\.0\\.0\\.0\\b)(?!127\\.0\\.0\\.1\\b)\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b/g,\n mask: (m: string) => `***.***.***.${m.split('.').pop()}`,\n },\n /**\n * International / formatted phone numbers.\n *\n * Matches:\n * - `+33 1 23 45 67 89` -> `+33******89`\n * - `(415) 555-1234` -> `********34`\n * - `555-123-4567` / `555.123.4567` / `5551234567` -> `********67`\n *\n * Bare short digit runs like `12345678` are intentionally not matched.\n */\n phone: {\n pattern:\n /(?:\\+\\d{1,3}[\\s.-]?\\(?\\d{1,4}\\)?(?:[\\s.-]?\\d{2,4}){2,4}|\\(\\d{1,4}\\)(?:[\\s.-]?\\d{2,4}){2,4}|\\b\\d{3}[-.]?\\d{3}[-.]?\\d{4}\\b)/g,\n mask: (m: string) => {\n const digits = m.replace(/[^\\d]/g, '');\n const hasPlus = m.startsWith('+');\n if (hasPlus && digits.length > 4) {\n const ccMatch = m.match(/^\\+\\d{1,3}/);\n const cc = ccMatch ? ccMatch[0] : '+';\n return `${cc}******${digits.slice(-2)}`;\n }\n if (digits.length > 2) {\n return `${'*'.repeat(digits.length - 2)}${digits.slice(-2)}`;\n }\n return '***';\n },\n },\n /** JWT tokens → eyJ***.*** */\n jwt: {\n pattern: /\\beyJ[\\w-]*\\.[\\w-]*\\.[\\w-]*\\b/g,\n mask: () => 'eyJ***.***',\n },\n /** Bearer tokens → Bearer *** */\n bearer: {\n pattern: /\\bBearer\\s+[\\w\\-.~+/]{8,}=*/gi,\n mask: () => 'Bearer ***',\n },\n /** IBAN → FR76****189 (country + check digits + last 3) */\n iban: {\n pattern:\n /\\b[A-Z]{2}\\d{2}[\\s-]?[\\dA-Z]{4}[\\s-]?[\\dA-Z]{4}[\\s-]?[\\dA-Z]{4}[\\s-]?[\\dA-Z]{0,4}[\\s-]?[\\dA-Z]{0,4}[\\s-]?[\\dA-Z]{0,4}\\b/g,\n mask: (m: string) => {\n const clean = m.replace(/[\\s-]/g, '');\n return `${clean.slice(0, 4)}****${clean.slice(-3)}`;\n },\n },\n} as const;\n\nfunction cloneRegex(re: RegExp): RegExp {\n return new RegExp(re.source, re.flags);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction toRegExp(value: unknown): RegExp | undefined {\n if (value instanceof RegExp) return value;\n if (typeof value === 'string') return new RegExp(value, 'g');\n if (isPlainObject(value) && typeof value.source === 'string') {\n const flags = typeof value.flags === 'string' ? value.flags : 'g';\n return new RegExp(value.source, flags);\n }\n return undefined;\n}\n\nfunction toRegExpArray(value: unknown): RegExp[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: RegExp[] = [];\n for (const item of value) {\n const re = toRegExp(item);\n if (re) out.push(re);\n }\n return out.length > 0 ? out : [];\n}\n\nfunction builtinToValuePattern(name: BuiltinPatternName): ValuePatternConfig {\n const b = builtinPatterns[name];\n return { name, pattern: cloneRegex(b.pattern), mask: b.mask };\n}\n\n/**\n * Default value patterns for the 'default' preset\n */\nconst DEFAULT_VALUE_PATTERNS: ValuePatternConfig[] = [\n builtinToValuePattern('email'),\n builtinToValuePattern('phone'),\n { name: 'ssn', pattern: REDACTOR_PATTERNS.ssn },\n builtinToValuePattern('creditCard'),\n];\n\n/**\n * Built-in redactor presets\n */\nexport const REDACTOR_PRESETS: Record<\n AttributeRedactorPreset,\n AttributeRedactorConfig\n> = {\n /**\n * Default preset - covers common PII patterns with smart masking\n * Detects: emails (a***@***.com), phone numbers, SSNs, credit cards (****1111)\n * Redacts keys: password, secret, token, apiKey, auth, credential\n */\n default: {\n keyPatterns: [REDACTOR_PATTERNS.sensitiveKey],\n valuePatterns: DEFAULT_VALUE_PATTERNS,\n builtins: true,\n replacement: '[REDACTED]',\n },\n\n /**\n * Strict preset - more aggressive redaction for high-security environments\n * Includes everything in default plus: Bearer tokens, JWTs, IBAN, API keys in values\n */\n strict: {\n keyPatterns: [REDACTOR_PATTERNS.sensitiveKey, /bearer/i, /jwt/i],\n valuePatterns: [\n ...DEFAULT_VALUE_PATTERNS,\n builtinToValuePattern('jwt'),\n builtinToValuePattern('bearer'),\n builtinToValuePattern('iban'),\n { name: 'apiKeyInValue', pattern: REDACTOR_PATTERNS.apiKeyInValue },\n ],\n builtins: true,\n replacement: '[REDACTED]',\n },\n\n /**\n * PCI-DSS preset - focused on payment card industry compliance\n * Redacts: credit card numbers (****1111), CVV-like patterns, card-related keys\n */\n 'pci-dss': {\n keyPatterns: [/card/i, /cvv/i, /cvc/i, /pan/i, /expir/i, /ccn/i],\n valuePatterns: [builtinToValuePattern('creditCard')],\n builtins: ['creditCard'],\n replacement: '[REDACTED]',\n },\n};\n\n/**\n * Normalize redactor config that may have been deserialized from JSON/YAML.\n * Converts regex-like values back to RegExp instances.\n */\nexport function normalizeAttributeRedactorConfig(\n raw: AttributeRedactorConfig | AttributeRedactorPreset | unknown,\n): AttributeRedactorConfig | AttributeRedactorPreset | undefined {\n if (raw === undefined || raw === null) return undefined;\n if (typeof raw === 'string') return raw as AttributeRedactorPreset;\n if (!isPlainObject(raw)) return undefined;\n\n const config: AttributeRedactorConfig = {};\n\n if (Array.isArray(raw.paths)) {\n config.paths = raw.paths.filter(\n (value): value is string => typeof value === 'string',\n );\n }\n\n if (typeof raw.replacement === 'string') {\n config.replacement = raw.replacement;\n }\n\n if (typeof raw.builtins === 'boolean') {\n config.builtins = raw.builtins;\n } else if (Array.isArray(raw.builtins)) {\n config.builtins = raw.builtins.filter(\n (name): name is BuiltinPatternName => typeof name === 'string',\n );\n }\n\n if (typeof raw.redactor === 'function') {\n config.redactor = raw.redactor as AttributeRedactorFn;\n }\n\n const keyPatterns = toRegExpArray(raw.keyPatterns);\n if (keyPatterns) config.keyPatterns = keyPatterns;\n\n const patterns = toRegExpArray(raw.patterns);\n if (patterns) config.patterns = patterns;\n\n if (Array.isArray(raw.valuePatterns)) {\n const valuePatterns: ValuePatternConfig[] = [];\n for (const item of raw.valuePatterns) {\n if (!isPlainObject(item) || typeof item.name !== 'string') continue;\n const pattern = toRegExp(item.pattern);\n if (!pattern) continue;\n valuePatterns.push({\n name: item.name,\n pattern,\n replacement:\n typeof item.replacement === 'string' ? item.replacement : undefined,\n mask:\n typeof item.mask === 'function' ? (item.mask as MaskFn) : undefined,\n });\n }\n config.valuePatterns = valuePatterns;\n }\n\n return config;\n}\n\n/**\n * Resolve config to a normalized form\n */\nfunction resolveConfig(\n config: AttributeRedactorConfig | AttributeRedactorPreset,\n): AttributeRedactorConfig {\n const normalized = normalizeAttributeRedactorConfig(config);\n if (!normalized) {\n throw new Error('Invalid attribute redactor config');\n }\n\n if (typeof normalized === 'string') {\n const preset = REDACTOR_PRESETS[normalized];\n if (!preset) {\n throw new Error(\n `Unknown attribute redactor preset: \"${normalized}\". ` +\n `Available presets: ${Object.keys(REDACTOR_PRESETS).join(', ')}`,\n );\n }\n return preset;\n }\n\n const resolvedConfig: AttributeRedactorConfig = {\n ...normalized,\n keyPatterns: normalized.keyPatterns\n ? [...normalized.keyPatterns]\n : undefined,\n valuePatterns: normalized.valuePatterns\n ? [...normalized.valuePatterns]\n : undefined,\n paths: normalized.paths ? [...normalized.paths] : undefined,\n patterns: normalized.patterns ? [...normalized.patterns] : undefined,\n };\n\n // Merge built-in patterns if enabled\n if (resolvedConfig.builtins !== false) {\n const builtinNames = Array.isArray(resolvedConfig.builtins)\n ? resolvedConfig.builtins\n : (Object.keys(builtinPatterns) as BuiltinPatternName[]);\n const builtinValuePatterns = builtinNames\n .filter((name) => name in builtinPatterns)\n .map(builtinToValuePattern);\n\n resolvedConfig.valuePatterns = [\n ...(resolvedConfig.valuePatterns ?? []),\n ...builtinValuePatterns,\n ];\n }\n\n return resolvedConfig;\n}\n\n/**\n * Create a redactor function from config\n */\nfunction createRedactorFromConfig(\n config: AttributeRedactorConfig,\n): AttributeRedactorFn {\n // If custom redactor provided, use it directly\n if (config.redactor) {\n return config.redactor;\n }\n\n const keyPatterns = config.keyPatterns ?? [];\n const valuePatterns = config.valuePatterns ?? [];\n const paths = config.paths ?? [];\n const pathSet = new Set(paths);\n const customPatterns = config.patterns ?? [];\n const defaultReplacement = config.replacement ?? '[REDACTED]';\n\n // Build masker list from valuePatterns that have mask functions\n const maskers: [RegExp, MaskFn][] = valuePatterns\n .filter((vp) => vp.mask)\n .map((vp) => [cloneRegex(vp.pattern), vp.mask!]);\n\n return (key: string, value: AttributeValue): AttributeValue => {\n // Key-pattern and path-based redaction only applies to string values.\n // Numbers, booleans and other non-string attributes are not credentials;\n // replacing them with the string '[REDACTED]' silently changes their\n // type and corrupts downstream consumers (LLM token counters etc.).\n if (typeof value === 'string') {\n for (const pattern of keyPatterns) {\n pattern.lastIndex = 0;\n if (pattern.test(key)) {\n return defaultReplacement;\n }\n }\n if (pathSet.has(key)) {\n return defaultReplacement;\n }\n }\n\n // For non-string values, return as-is\n if (typeof value !== 'string') {\n if (Array.isArray(value)) {\n return value.map((item) => {\n if (typeof item === 'string') {\n return redactStringValue(\n item,\n valuePatterns,\n maskers,\n customPatterns,\n defaultReplacement,\n ) as string;\n }\n return item;\n }) as AttributeValue;\n }\n return value;\n }\n\n // Three-tier strategy: path-based → masker-based → pattern-based\n return redactStringValue(\n value,\n valuePatterns,\n maskers,\n customPatterns,\n defaultReplacement,\n );\n };\n}\n\n/**\n * Apply three-tier redaction strategy to a string\n * 1. Masker-based: built-in patterns with smart partial masking\n * 2. Pattern-based: custom RegExp patterns replaced with replacement\n */\nfunction redactStringValue(\n value: string,\n patterns: ValuePatternConfig[],\n maskers: [RegExp, MaskFn][],\n customPatterns: RegExp[],\n defaultReplacement: string,\n): string {\n let result = value;\n\n // Tier 1: Apply maskers (smart partial masking)\n for (const [pattern, mask] of maskers) {\n pattern.lastIndex = 0;\n result = result.replace(pattern, mask);\n }\n\n // Tier 2: Apply value patterns without mask (full replacement)\n for (const { pattern, replacement, mask } of patterns) {\n if (mask) continue; // Already handled by maskers\n pattern.lastIndex = 0;\n result = result.replaceAll(pattern, replacement ?? defaultReplacement);\n }\n\n // Tier 3: Apply custom patterns\n for (const pattern of customPatterns) {\n pattern.lastIndex = 0;\n result = result.replaceAll(pattern, defaultReplacement);\n }\n\n return result;\n}\n\n/**\n * Create a proxy wrapper around ReadableSpan with redacted attributes\n *\n * Since ReadableSpan.attributes is readonly, we use a Proxy to intercept\n * attribute access and return the redacted version.\n */\nfunction createRedactedSpan(\n span: ReadableSpan,\n redactor: AttributeRedactorFn,\n): ReadableSpan {\n // Pre-compute redacted attributes (cached for efficiency)\n const redactedAttributes: Attributes = {};\n for (const [key, value] of Object.entries(span.attributes)) {\n if (value !== undefined) {\n redactedAttributes[key] = redactor(key, value);\n }\n }\n\n // Return a proxy that intercepts attribute access\n return new Proxy(span, {\n get(target, prop) {\n if (prop === 'attributes') {\n return redactedAttributes;\n }\n // For all other properties, delegate to the original span\n const value = Reflect.get(target, prop);\n // Bind methods to the original target\n if (typeof value === 'function') {\n return value.bind(target);\n }\n return value;\n },\n });\n}\n\n/**\n * Create an attribute redactor function from a config or preset.\n *\n * This is useful when you need to apply the same redaction logic\n * outside of the span processor pipeline (e.g., for canonical log lines).\n *\n * @example\n * ```typescript\n * const redactor = createAttributeRedactor('default');\n * const redactedValue = redactor('user.password', 'secret123');\n * // redactedValue === '[REDACTED]'\n * ```\n */\nexport function createAttributeRedactor(\n config: AttributeRedactorConfig | AttributeRedactorPreset,\n): AttributeRedactorFn {\n return createRedactorFromConfig(resolveConfig(config));\n}\n\n/**\n * Span processor that redacts sensitive data from span attributes.\n *\n * Redaction happens in onEnd() when all attributes are finalized.\n * Uses a Proxy wrapper to intercept attribute access since ReadableSpan\n * attributes are readonly.\n *\n * Common use cases:\n * - PII compliance (GDPR, CCPA)\n * - PCI-DSS compliance for payment data\n * - Preventing secrets from leaking to observability backends\n */\nexport class AttributeRedactingProcessor implements SpanProcessor {\n private readonly wrappedProcessor: SpanProcessor;\n private readonly redactor: AttributeRedactorFn;\n\n constructor(\n wrappedProcessor: SpanProcessor,\n options: AttributeRedactingProcessorOptions,\n ) {\n this.wrappedProcessor = wrappedProcessor;\n const config = resolveConfig(options.redactor);\n this.redactor = createRedactorFromConfig(config);\n }\n\n /**\n * Pass through onStart unchanged - attributes aren't finalized yet\n */\n onStart(span: Span, parentContext: Context): void {\n this.wrappedProcessor.onStart(span, parentContext);\n }\n\n /**\n * Redact attributes and forward to wrapped processor\n */\n onEnd(span: ReadableSpan): void {\n try {\n const redactedSpan = createRedactedSpan(span, this.redactor);\n this.wrappedProcessor.onEnd(redactedSpan);\n } catch {\n // Fail-open: if redaction fails, forward original span\n // This ensures we don't lose telemetry due to redaction errors\n this.wrappedProcessor.onEnd(span);\n }\n }\n\n forceFlush(): Promise<void> {\n return this.wrappedProcessor.forceFlush();\n }\n\n shutdown(): Promise<void> {\n return this.wrappedProcessor.shutdown();\n }\n}\n\n/**\n * Export createRedactedSpan for advanced users who want to use it directly\n */\nexport { createRedactedSpan };\n"]}
|
package/dist/chunk-NVAI5CCN.cjs
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var module$1 = require('module');
|
|
4
|
-
|
|
5
|
-
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
6
|
-
// src/node-require.ts
|
|
7
|
-
var cachedRequire;
|
|
8
|
-
function getNodeRequire() {
|
|
9
|
-
if (cachedRequire) return cachedRequire;
|
|
10
|
-
const base = typeof __filename === "string" ? __filename : (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-NVAI5CCN.cjs', document.baseURI).href));
|
|
11
|
-
if (!base) {
|
|
12
|
-
throw Object.assign(
|
|
13
|
-
new Error("node require() is unavailable in this runtime"),
|
|
14
|
-
{ code: "MODULE_NOT_FOUND" }
|
|
15
|
-
);
|
|
16
|
-
}
|
|
17
|
-
cachedRequire = module$1.createRequire(base);
|
|
18
|
-
return cachedRequire;
|
|
19
|
-
}
|
|
20
|
-
function safeRequire(id) {
|
|
21
|
-
try {
|
|
22
|
-
return getNodeRequire()(id);
|
|
23
|
-
} catch (error) {
|
|
24
|
-
if (error && error.code === "MODULE_NOT_FOUND") {
|
|
25
|
-
return void 0;
|
|
26
|
-
}
|
|
27
|
-
throw error;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function requireModule(id) {
|
|
31
|
-
return getNodeRequire()(id);
|
|
32
|
-
}
|
|
33
|
-
var lazyResolve = ((id, options) => getNodeRequire().resolve(id, options));
|
|
34
|
-
lazyResolve.paths = (request) => getNodeRequire().resolve.paths(request);
|
|
35
|
-
|
|
36
|
-
exports.requireModule = requireModule;
|
|
37
|
-
exports.safeRequire = safeRequire;
|
|
38
|
-
//# sourceMappingURL=chunk-NVAI5CCN.cjs.map
|
|
39
|
-
//# sourceMappingURL=chunk-NVAI5CCN.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/node-require.ts"],"names":["createRequire"],"mappings":";;;;;;AAiCA,IAAI,aAAA;AAEJ,SAAS,cAAA,GAA8B;AACrC,EAAA,IAAI,eAAe,OAAO,aAAA;AAC1B,EAAA,MAAM,IAAA,GAAO,OAAO,UAAA,KAAe,QAAA,GAAW,aAAa,oQAAY;AACvE,EAAA,IAAI,CAAC,IAAA,EAAM;AAGT,IAAA,MAAM,MAAA,CAAO,MAAA;AAAA,MACX,IAAI,MAAM,+CAA+C,CAAA;AAAA,MACzD,EAAE,MAAM,kBAAA;AAAmB,KAC7B;AAAA,EACF;AACA,EAAA,aAAA,GAAgBA,uBAAc,IAAI,CAAA;AAClC,EAAA,OAAO,aAAA;AACT;AAmBO,SAAS,YAAyB,EAAA,EAA2B;AAClE,EAAA,IAAI;AACF,IAAA,OAAO,cAAA,GAAiB,EAAE,CAAA;AAAA,EAC5B,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,KAAA,IAAU,KAAA,CAAgC,IAAA,KAAS,kBAAA,EAAoB;AAEzE,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAmBO,SAAS,cAA2B,EAAA,EAAe;AACxD,EAAA,OAAO,cAAA,GAAiB,EAAE,CAAA;AAC5B;AAiBA,IAAM,WAAA,IAAe,CAAC,EAAA,EAAY,OAAA,KAChC,gBAAe,CAAE,OAAA,CAAQ,IAAI,OAAO,CAAA,CAAA;AACtC,WAAA,CAAY,QAAQ,CAAC,OAAA,KACnB,gBAAe,CAAE,OAAA,CAAQ,MAAM,OAAO,CAAA","file":"chunk-NVAI5CCN.cjs","sourcesContent":["/**\n * Cross-format require() helper for CJS and ESM compatibility\n *\n * Provides a synchronous `require()` function that works in both:\n * - CJS builds: Uses native `require`\n * - ESM builds: Uses `createRequire(import.meta.url)`\n *\n * This allows optional peer dependencies and dynamic module loading\n * to work synchronously in both module formats.\n */\n\nimport { createRequire } from 'node:module';\n\n// `__filename` is provided by CJS and by esbuild's CJS output wrapper, but\n// is undefined under pure ESM. `import.meta.url` is provided by ESM. Pick\n// whichever is available so the helper works in:\n// - native CJS (autotel's published `.cjs`)\n// - native ESM (autotel's published `.js`)\n// - ESM-bundled-into-CJS by a downstream consumer (e.g. CDK's\n// `aws-lambda-nodejs` → esbuild with `format: cjs`). esbuild rewrites\n// `import.meta` to `{}` in this case, so `createRequire(import.meta.url)`\n// alone collapses to `createRequire(undefined)` and crashes at load.\n// `typeof __filename` does NOT throw when the identifier is undeclared, so\n// the ESM build evaluates the conditional safely.\ndeclare const __filename: string | undefined;\n\n// Build the Node `require` lazily on first use. Calling `createRequire`\n// eagerly at module load crashes in runtimes where neither `__filename` nor\n// `import.meta.url` resolves to a path — e.g. Cloudflare Workers / workerd,\n// where the bundle has no module path and `createRequire(undefined)` throws\n// synchronously at import. Deferring the call keeps merely importing this\n// module (and therefore anything that re-exports it, such as `track`)\n// side-effect-free; Node/CJS/ESM still get a real `require` on first call.\nlet cachedRequire: NodeRequire | undefined;\n\nfunction getNodeRequire(): NodeRequire {\n if (cachedRequire) return cachedRequire;\n const base = typeof __filename === 'string' ? __filename : import.meta.url;\n if (!base) {\n // No module path in this runtime. Surface as a missing-module error so\n // optional lookups via `safeRequire()` degrade gracefully to `undefined`.\n throw Object.assign(\n new Error('node require() is unavailable in this runtime'),\n { code: 'MODULE_NOT_FOUND' },\n );\n }\n cachedRequire = createRequire(base);\n return cachedRequire;\n}\n\n/**\n * Synchronously require a module (works in both CJS and ESM)\n *\n * @param id - Module ID to require\n * @returns The required module\n * @throws Error if module cannot be loaded\n *\n * @example\n * ```typescript\n * import { safeRequire } from './node-require';\n *\n * const traceloop = safeRequire('@traceloop/node-server-sdk');\n * if (traceloop) {\n * traceloop.initialize({ ... });\n * }\n * ```\n */\nexport function safeRequire<T = unknown>(id: string): T | undefined {\n try {\n return getNodeRequire()(id) as T;\n } catch (error) {\n if (error && (error as NodeJS.ErrnoException).code === 'MODULE_NOT_FOUND') {\n // Optional dependency missing – return undefined\n return undefined;\n }\n // Any other error is a real bug: rethrow\n throw error;\n }\n}\n\n/**\n * Synchronously require a module (throws if not found)\n *\n * Use this when the module is required (not optional).\n *\n * @param id - Module ID to require\n * @returns The required module\n * @throws Error if module cannot be loaded\n *\n * @example\n * ```typescript\n * import { requireModule } from './node-require';\n *\n * const fs = requireModule<typeof import('node:fs')>('node:fs');\n * const content = fs.readFileSync('file.txt', 'utf8');\n * ```\n */\nexport function requireModule<T = unknown>(id: string): T {\n return getNodeRequire()(id) as T;\n}\n\n/**\n * Direct access to the nodeRequire function (for advanced use cases).\n *\n * Lazily resolves the underlying Node `require` on first call, so importing\n * this binding never triggers `createRequire` in runtimes that lack a module\n * path (e.g. Cloudflare Workers).\n *\n * Only the call signature and `resolve` (including `resolve.paths`) are\n * forwarded. The live, mutable members of a real `require` — `.cache`,\n * `.main`, `.extensions` — are intentionally NOT exposed: a lazy wrapper\n * can't mirror that shared state without resolving eagerly, which would\n * reintroduce the workerd crash. Use `createRequire` directly if you need\n * them.\n */\nconst nodeRequire = ((id: string) => getNodeRequire()(id)) as NodeRequire;\nconst lazyResolve = ((id: string, options?: { paths?: string[] }) =>\n getNodeRequire().resolve(id, options)) as NodeRequire['resolve'];\nlazyResolve.paths = (request: string) =>\n getNodeRequire().resolve.paths(request);\nnodeRequire.resolve = lazyResolve;\n\nexport { nodeRequire };\n"]}
|