@geekmidas/telescope 10.0.0-alpha.2 → 10.0.0-alpha.21
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/{MetricsAggregator-4SqelGcG.d.cts → MetricsAggregator-BxBLQUPj.d.cts} +3 -6
- package/dist/MetricsAggregator-BxBLQUPj.d.cts.map +1 -0
- package/dist/{MetricsAggregator-DZrW8ls6.d.mts → MetricsAggregator-j9wmZ0K_.d.mts} +3 -6
- package/dist/MetricsAggregator-j9wmZ0K_.d.mts.map +1 -0
- package/dist/{Telescope-D4nmwDRA.d.cts → Telescope-BcrWTaar.d.mts} +4 -7
- package/dist/Telescope-BcrWTaar.d.mts.map +1 -0
- package/dist/{Telescope-Dl6VSfxd.d.mts → Telescope-DnCMZT7V.d.cts} +4 -7
- package/dist/Telescope-DnCMZT7V.d.cts.map +1 -0
- package/dist/Telescope.cjs +385 -4
- package/dist/Telescope.cjs.map +1 -0
- package/dist/Telescope.d.cts +1 -3
- package/dist/Telescope.d.mts +1 -3
- package/dist/Telescope.mjs +384 -4
- package/dist/Telescope.mjs.map +1 -0
- package/dist/adapters/index.d.cts +2 -2
- package/dist/adapters/index.d.mts +2 -2
- package/dist/adapters/index.mjs +1 -0
- package/dist/adapters/lambda.cjs +9 -10
- package/dist/adapters/lambda.cjs.map +1 -1
- package/dist/adapters/lambda.d.cts +9 -13
- package/dist/adapters/lambda.d.cts.map +1 -1
- package/dist/adapters/lambda.d.mts +9 -13
- package/dist/adapters/lambda.d.mts.map +1 -1
- package/dist/adapters/lambda.mjs +3 -4
- package/dist/adapters/lambda.mjs.map +1 -1
- package/dist/adapters/middy.cjs +236 -4
- package/dist/adapters/middy.cjs.map +1 -0
- package/dist/adapters/middy.d.cts +60 -5
- package/dist/adapters/middy.d.cts.map +1 -0
- package/dist/adapters/middy.d.mts +60 -5
- package/dist/adapters/middy.d.mts.map +1 -0
- package/dist/adapters/middy.mjs +234 -3
- package/dist/adapters/middy.mjs.map +1 -0
- package/dist/adapters/types.d.cts +162 -2
- package/dist/adapters/types.d.cts.map +1 -0
- package/dist/adapters/types.d.mts +162 -2
- package/dist/adapters/types.d.mts.map +1 -0
- package/dist/adapters/types.mjs +1 -0
- package/dist/core.cjs +22 -22
- package/dist/core.d.cts +4 -4
- package/dist/core.d.mts +4 -4
- package/dist/core.mjs +3 -4
- package/dist/index.cjs +8 -9
- package/dist/index.d.cts +5 -6
- package/dist/index.d.mts +5 -6
- package/dist/index.mjs +5 -7
- package/dist/instrumentation/core.cjs +147 -11
- package/dist/instrumentation/core.cjs.map +1 -0
- package/dist/instrumentation/core.d.cts +74 -3
- package/dist/instrumentation/core.d.cts.map +1 -0
- package/dist/instrumentation/core.d.mts +74 -3
- package/dist/instrumentation/core.d.mts.map +1 -0
- package/dist/instrumentation/core.mjs +137 -2
- package/dist/instrumentation/core.mjs.map +1 -0
- package/dist/instrumentation/hono.cjs +134 -6
- package/dist/instrumentation/hono.cjs.map +1 -0
- package/dist/instrumentation/hono.d.cts +67 -2
- package/dist/instrumentation/hono.d.cts.map +1 -0
- package/dist/instrumentation/hono.d.mts +67 -2
- package/dist/instrumentation/hono.d.mts.map +1 -0
- package/dist/instrumentation/hono.mjs +130 -3
- package/dist/instrumentation/hono.mjs.map +1 -0
- package/dist/instrumentation/http.cjs +164 -11
- package/dist/instrumentation/http.cjs.map +1 -0
- package/dist/instrumentation/http.d.cts +103 -2
- package/dist/instrumentation/http.d.cts.map +1 -0
- package/dist/instrumentation/http.d.mts +103 -2
- package/dist/instrumentation/http.d.mts.map +1 -0
- package/dist/instrumentation/http.mjs +154 -2
- package/dist/instrumentation/http.mjs.map +1 -0
- package/dist/instrumentation/index.cjs +47 -47
- package/dist/instrumentation/index.d.cts +9 -9
- package/dist/instrumentation/index.d.mts +9 -9
- package/dist/instrumentation/index.mjs +8 -9
- package/dist/instrumentation/middleware.cjs +162 -6
- package/dist/instrumentation/middleware.cjs.map +1 -0
- package/dist/instrumentation/middleware.d.cts +70 -2
- package/dist/instrumentation/middleware.d.cts.map +1 -0
- package/dist/instrumentation/middleware.d.mts +70 -2
- package/dist/instrumentation/middleware.d.mts.map +1 -0
- package/dist/instrumentation/middleware.mjs +158 -3
- package/dist/instrumentation/middleware.mjs.map +1 -0
- package/dist/instrumentation/otel.cjs +137 -3
- package/dist/instrumentation/otel.cjs.map +1 -0
- package/dist/instrumentation/otel.d.cts +97 -2
- package/dist/instrumentation/otel.d.cts.map +1 -0
- package/dist/instrumentation/otel.d.mts +97 -2
- package/dist/instrumentation/otel.d.mts.map +1 -0
- package/dist/instrumentation/otel.mjs +136 -3
- package/dist/instrumentation/otel.mjs.map +1 -0
- package/dist/instrumentation/setup.cjs +100 -4
- package/dist/instrumentation/setup.cjs.map +1 -0
- package/dist/instrumentation/setup.d.cts +83 -3
- package/dist/instrumentation/setup.d.cts.map +1 -0
- package/dist/instrumentation/setup.d.mts +83 -3
- package/dist/instrumentation/setup.d.mts.map +1 -0
- package/dist/instrumentation/setup.mjs +98 -3
- package/dist/instrumentation/setup.mjs.map +1 -0
- package/dist/instrumentation/tracing.cjs +114 -10
- package/dist/instrumentation/tracing.cjs.map +1 -0
- package/dist/instrumentation/tracing.d.cts +49 -2
- package/dist/instrumentation/tracing.d.cts.map +1 -0
- package/dist/instrumentation/tracing.d.mts +49 -2
- package/dist/instrumentation/tracing.d.mts.map +1 -0
- package/dist/instrumentation/tracing.mjs +105 -2
- package/dist/instrumentation/tracing.mjs.map +1 -0
- package/dist/logger/console.cjs +18 -12
- package/dist/logger/console.cjs.map +1 -1
- package/dist/logger/console.d.cts +7 -10
- package/dist/logger/console.d.cts.map +1 -1
- package/dist/logger/console.d.mts +7 -10
- package/dist/logger/console.d.mts.map +1 -1
- package/dist/logger/console.mjs +17 -11
- package/dist/logger/console.mjs.map +1 -1
- package/dist/logger/pino.cjs +6 -5
- package/dist/logger/pino.cjs.map +1 -1
- package/dist/logger/pino.d.cts +6 -10
- package/dist/logger/pino.d.cts.map +1 -1
- package/dist/logger/pino.d.mts +6 -10
- package/dist/logger/pino.d.mts.map +1 -1
- package/dist/logger/pino.mjs +2 -3
- package/dist/logger/pino.mjs.map +1 -1
- package/dist/metrics/MetricsAggregator.cjs +354 -2
- package/dist/metrics/MetricsAggregator.cjs.map +1 -0
- package/dist/metrics/MetricsAggregator.d.cts +1 -2
- package/dist/metrics/MetricsAggregator.d.mts +1 -2
- package/dist/metrics/MetricsAggregator.mjs +353 -2
- package/dist/metrics/MetricsAggregator.mjs.map +1 -0
- package/dist/metrics/index.cjs +3 -4
- package/dist/metrics/index.d.cts +2 -4
- package/dist/metrics/index.d.mts +2 -4
- package/dist/metrics/index.mjs +2 -4
- package/dist/metrics/storage/InMemoryMetricsStorage.cjs +240 -3
- package/dist/metrics/storage/InMemoryMetricsStorage.cjs.map +1 -0
- package/dist/metrics/storage/InMemoryMetricsStorage.d.cts +43 -4
- package/dist/metrics/storage/InMemoryMetricsStorage.d.cts.map +1 -0
- package/dist/metrics/storage/InMemoryMetricsStorage.d.mts +43 -4
- package/dist/metrics/storage/InMemoryMetricsStorage.d.mts.map +1 -0
- package/dist/metrics/storage/InMemoryMetricsStorage.mjs +239 -3
- package/dist/metrics/storage/InMemoryMetricsStorage.mjs.map +1 -0
- package/dist/metrics/storage/MetricsStorage.cjs +0 -1
- package/dist/metrics/storage/MetricsStorage.d.cts +56 -3
- package/dist/metrics/storage/MetricsStorage.d.cts.map +1 -0
- package/dist/metrics/storage/MetricsStorage.d.mts +56 -3
- package/dist/metrics/storage/MetricsStorage.d.mts.map +1 -0
- package/dist/metrics/storage/MetricsStorage.mjs +1 -1
- package/dist/metrics/storage/index.cjs +6 -6
- package/dist/metrics/storage/index.d.cts +3 -3
- package/dist/metrics/storage/index.d.mts +3 -3
- package/dist/metrics/storage/index.mjs +4 -5
- package/dist/metrics/storage/types.cjs +34 -2
- package/dist/metrics/storage/types.cjs.map +1 -0
- package/dist/metrics/storage/types.d.cts +207 -2
- package/dist/metrics/storage/types.d.cts.map +1 -0
- package/dist/metrics/storage/types.d.mts +207 -2
- package/dist/metrics/storage/types.d.mts.map +1 -0
- package/dist/metrics/storage/types.mjs +33 -2
- package/dist/metrics/storage/types.mjs.map +1 -0
- package/dist/otlp/hono.cjs +9 -15
- package/dist/otlp/hono.cjs.map +1 -1
- package/dist/otlp/hono.d.cts +3 -13
- package/dist/otlp/hono.d.cts.map +1 -1
- package/dist/otlp/hono.d.mts +3 -13
- package/dist/otlp/hono.d.mts.map +1 -1
- package/dist/otlp/hono.mjs +5 -11
- package/dist/otlp/hono.mjs.map +1 -1
- package/dist/otlp/index.cjs +11 -11
- package/dist/otlp/index.d.cts +4 -7
- package/dist/otlp/index.d.mts +4 -7
- package/dist/otlp/index.mjs +4 -5
- package/dist/otlp/receiver.cjs +88 -4
- package/dist/otlp/receiver.cjs.map +1 -0
- package/dist/otlp/receiver.d.cts +59 -7
- package/dist/otlp/receiver.d.cts.map +1 -0
- package/dist/otlp/receiver.d.mts +59 -7
- package/dist/otlp/receiver.d.mts.map +1 -0
- package/dist/otlp/receiver.mjs +87 -4
- package/dist/otlp/receiver.mjs.map +1 -0
- package/dist/otlp/transformer.cjs +214 -5
- package/dist/otlp/transformer.cjs.map +1 -0
- package/dist/otlp/transformer.d.cts +1 -3
- package/dist/otlp/transformer.d.mts +1 -3
- package/dist/otlp/transformer.mjs +211 -3
- package/dist/otlp/transformer.mjs.map +1 -0
- package/dist/otlp/types.cjs +57 -5
- package/dist/otlp/types.cjs.map +1 -0
- package/dist/otlp/types.d.cts +1 -1
- package/dist/otlp/types.d.mts +1 -1
- package/dist/otlp/types.mjs +53 -2
- package/dist/otlp/types.mjs.map +1 -0
- package/dist/redact.cjs +84 -3
- package/dist/redact.cjs.map +1 -0
- package/dist/redact.d.cts +4 -8
- package/dist/redact.d.cts.map +1 -1
- package/dist/redact.d.mts +4 -8
- package/dist/redact.d.mts.map +1 -1
- package/dist/redact.mjs +80 -2
- package/dist/redact.mjs.map +1 -0
- package/dist/{chunk-CUT6urMc.cjs → rolldown-runtime-VH7oDXx4.cjs} +8 -10
- package/dist/server/hono.cjs +24 -33
- package/dist/server/hono.cjs.map +1 -1
- package/dist/server/hono.d.cts +10 -13
- package/dist/server/hono.d.cts.map +1 -1
- package/dist/server/hono.d.mts +10 -13
- package/dist/server/hono.d.mts.map +1 -1
- package/dist/server/hono.mjs +22 -31
- package/dist/server/hono.mjs.map +1 -1
- package/dist/storage/kysely.cjs +34 -32
- package/dist/storage/kysely.cjs.map +1 -1
- package/dist/storage/kysely.d.cts +8 -12
- package/dist/storage/kysely.d.cts.map +1 -1
- package/dist/storage/kysely.d.mts +8 -12
- package/dist/storage/kysely.d.mts.map +1 -1
- package/dist/storage/kysely.mjs +33 -31
- package/dist/storage/kysely.mjs.map +1 -1
- package/dist/storage/memory.cjs +122 -2
- package/dist/storage/memory.cjs.map +1 -0
- package/dist/storage/memory.d.cts +36 -3
- package/dist/storage/memory.d.cts.map +1 -0
- package/dist/storage/memory.d.mts +36 -3
- package/dist/storage/memory.d.mts.map +1 -0
- package/dist/storage/memory.mjs +121 -2
- package/dist/storage/memory.mjs.map +1 -0
- package/dist/{transformer-CTGsaVfV.d.mts → transformer-BBBXCjHP.d.mts} +4 -8
- package/dist/transformer-BBBXCjHP.d.mts.map +1 -0
- package/dist/{transformer-ICEbxpFf.d.cts → transformer-DlESim6Q.d.cts} +4 -8
- package/dist/transformer-DlESim6Q.d.cts.map +1 -0
- package/dist/{types-CmOB7CLO.d.cts → types-DVETVdpa.d.cts} +6 -7
- package/dist/types-DVETVdpa.d.cts.map +1 -0
- package/dist/{types-DBc0q5KD.d.mts → types-DVETVdpa.d.mts} +6 -7
- package/dist/types-DVETVdpa.d.mts.map +1 -0
- package/dist/{types-B1EIa_cQ.d.mts → types-a9Vistj1.d.cts} +2 -3
- package/dist/types-a9Vistj1.d.cts.map +1 -0
- package/dist/{types-l7Rlb5Mg.d.cts → types-a9Vistj1.d.mts} +2 -3
- package/dist/types-a9Vistj1.d.mts.map +1 -0
- package/dist/types.d.cts +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.mjs +1 -0
- package/dist/ui-assets.cjs +31 -4
- package/dist/ui-assets.cjs.map +1 -0
- package/dist/ui-assets.d.cts +4 -6
- package/dist/ui-assets.d.cts.map +1 -1
- package/dist/ui-assets.d.mts +4 -6
- package/dist/ui-assets.d.mts.map +1 -1
- package/dist/ui-assets.mjs +28 -2
- package/dist/ui-assets.mjs.map +1 -0
- package/package.json +39 -37
- package/dist/InMemoryMetricsStorage-BbKCL3YL.d.mts +0 -47
- package/dist/InMemoryMetricsStorage-BbKCL3YL.d.mts.map +0 -1
- package/dist/InMemoryMetricsStorage-C4drxT7G.mjs +0 -247
- package/dist/InMemoryMetricsStorage-C4drxT7G.mjs.map +0 -1
- package/dist/InMemoryMetricsStorage-D0njWUSi.cjs +0 -252
- package/dist/InMemoryMetricsStorage-D0njWUSi.cjs.map +0 -1
- package/dist/InMemoryMetricsStorage-TvPdZjL0.d.cts +0 -47
- package/dist/InMemoryMetricsStorage-TvPdZjL0.d.cts.map +0 -1
- package/dist/MetricsAggregator-4SqelGcG.d.cts.map +0 -1
- package/dist/MetricsAggregator-B7lUICdH.cjs +0 -363
- package/dist/MetricsAggregator-B7lUICdH.cjs.map +0 -1
- package/dist/MetricsAggregator-DZrW8ls6.d.mts.map +0 -1
- package/dist/MetricsAggregator-S3DQWNas.mjs +0 -357
- package/dist/MetricsAggregator-S3DQWNas.mjs.map +0 -1
- package/dist/MetricsStorage-B86e4131.d.cts +0 -60
- package/dist/MetricsStorage-B86e4131.d.cts.map +0 -1
- package/dist/MetricsStorage-BWyP2_12.d.mts +0 -60
- package/dist/MetricsStorage-BWyP2_12.d.mts.map +0 -1
- package/dist/MetricsStorage-BypQXWiv.mjs +0 -0
- package/dist/MetricsStorage-Or8pVCe4.cjs +0 -0
- package/dist/Telescope-Cs3fv8jt.cjs +0 -395
- package/dist/Telescope-Cs3fv8jt.cjs.map +0 -1
- package/dist/Telescope-D4nmwDRA.d.cts.map +0 -1
- package/dist/Telescope-Dh5av3FC.mjs +0 -389
- package/dist/Telescope-Dh5av3FC.mjs.map +0 -1
- package/dist/Telescope-Dl6VSfxd.d.mts.map +0 -1
- package/dist/core--quSp5Qr.d.mts +0 -78
- package/dist/core--quSp5Qr.d.mts.map +0 -1
- package/dist/core-B4Jpia5H.d.cts +0 -78
- package/dist/core-B4Jpia5H.d.cts.map +0 -1
- package/dist/core-CtVHRJGv.cjs +0 -199
- package/dist/core-CtVHRJGv.cjs.map +0 -1
- package/dist/core-D6hJ6exL.mjs +0 -139
- package/dist/core-D6hJ6exL.mjs.map +0 -1
- package/dist/hono--uKQ7Jgi.d.mts +0 -71
- package/dist/hono--uKQ7Jgi.d.mts.map +0 -1
- package/dist/hono-Bw-ey6CT.mjs +0 -136
- package/dist/hono-Bw-ey6CT.mjs.map +0 -1
- package/dist/hono-CPHX7FAm.cjs +0 -160
- package/dist/hono-CPHX7FAm.cjs.map +0 -1
- package/dist/hono-CemCKU87.d.cts +0 -71
- package/dist/hono-CemCKU87.d.cts.map +0 -1
- package/dist/http-BIvr0YdI.mjs +0 -159
- package/dist/http-BIvr0YdI.mjs.map +0 -1
- package/dist/http-BiNtg85L.d.mts +0 -107
- package/dist/http-BiNtg85L.d.mts.map +0 -1
- package/dist/http-BsqmhurZ.cjs +0 -219
- package/dist/http-BsqmhurZ.cjs.map +0 -1
- package/dist/http-D1oTbfap.d.cts +0 -107
- package/dist/http-D1oTbfap.d.cts.map +0 -1
- package/dist/index-BL32-cvv.d.cts +0 -1
- package/dist/index-CsuikFeJ.d.mts +0 -1
- package/dist/memory--BK4iWiv.d.cts +0 -40
- package/dist/memory--BK4iWiv.d.cts.map +0 -1
- package/dist/memory-6S9H-IF5.mjs +0 -123
- package/dist/memory-6S9H-IF5.mjs.map +0 -1
- package/dist/memory-B0d_n1g5.cjs +0 -129
- package/dist/memory-B0d_n1g5.cjs.map +0 -1
- package/dist/memory-DCirEVFW.d.mts +0 -40
- package/dist/memory-DCirEVFW.d.mts.map +0 -1
- package/dist/metrics-D5YT-Rnq.mjs +0 -0
- package/dist/metrics-fhD3l3C3.cjs +0 -0
- package/dist/middleware-Bcq6XXGG.cjs +0 -184
- package/dist/middleware-Bcq6XXGG.cjs.map +0 -1
- package/dist/middleware-D1XEHvyy.mjs +0 -160
- package/dist/middleware-D1XEHvyy.mjs.map +0 -1
- package/dist/middleware-PeyS-9Ny.d.cts +0 -74
- package/dist/middleware-PeyS-9Ny.d.cts.map +0 -1
- package/dist/middleware-oHvo_ZgU.d.mts +0 -74
- package/dist/middleware-oHvo_ZgU.d.mts.map +0 -1
- package/dist/middy-B6Btl8XE.d.mts +0 -64
- package/dist/middy-B6Btl8XE.d.mts.map +0 -1
- package/dist/middy-Bq0defVg.d.cts +0 -64
- package/dist/middy-Bq0defVg.d.cts.map +0 -1
- package/dist/middy-DHWLmUAD.mjs +0 -236
- package/dist/middy-DHWLmUAD.mjs.map +0 -1
- package/dist/middy-DlWnZilH.cjs +0 -247
- package/dist/middy-DlWnZilH.cjs.map +0 -1
- package/dist/otel-B9bNoeZ2.mjs +0 -130
- package/dist/otel-B9bNoeZ2.mjs.map +0 -1
- package/dist/otel-Bk89b1lX.d.cts +0 -101
- package/dist/otel-Bk89b1lX.d.cts.map +0 -1
- package/dist/otel-BzjOtVxZ.cjs +0 -136
- package/dist/otel-BzjOtVxZ.cjs.map +0 -1
- package/dist/otel-lPMsM26e.d.mts +0 -101
- package/dist/otel-lPMsM26e.d.mts.map +0 -1
- package/dist/receiver-D46dfkYI.mjs +0 -89
- package/dist/receiver-D46dfkYI.mjs.map +0 -1
- package/dist/receiver-DLICx5uU.d.cts +0 -63
- package/dist/receiver-DLICx5uU.d.cts.map +0 -1
- package/dist/receiver-UeZT-H8u.d.mts +0 -63
- package/dist/receiver-UeZT-H8u.d.mts.map +0 -1
- package/dist/receiver-slCoAFat.cjs +0 -94
- package/dist/receiver-slCoAFat.cjs.map +0 -1
- package/dist/redact-BzkITCNW.mjs +0 -83
- package/dist/redact-BzkITCNW.mjs.map +0 -1
- package/dist/redact-DVaSSPZT.cjs +0 -95
- package/dist/redact-DVaSSPZT.cjs.map +0 -1
- package/dist/setup-Bkxm4g6b.d.mts +0 -87
- package/dist/setup-Bkxm4g6b.d.mts.map +0 -1
- package/dist/setup-D58N1f9O.d.cts +0 -87
- package/dist/setup-D58N1f9O.d.cts.map +0 -1
- package/dist/setup-DC9JMEYZ.mjs +0 -98
- package/dist/setup-DC9JMEYZ.mjs.map +0 -1
- package/dist/setup-DufxQpi9.cjs +0 -110
- package/dist/setup-DufxQpi9.cjs.map +0 -1
- package/dist/tracing-BX8uY2nR.d.cts +0 -53
- package/dist/tracing-BX8uY2nR.d.cts.map +0 -1
- package/dist/tracing-Bt1zWRlb.cjs +0 -167
- package/dist/tracing-Bt1zWRlb.cjs.map +0 -1
- package/dist/tracing-Cijm_5NI.mjs +0 -113
- package/dist/tracing-Cijm_5NI.mjs.map +0 -1
- package/dist/tracing-PnECEbEu.d.mts +0 -53
- package/dist/tracing-PnECEbEu.d.mts.map +0 -1
- package/dist/transformer-CFQ4WFk6.mjs +0 -215
- package/dist/transformer-CFQ4WFk6.mjs.map +0 -1
- package/dist/transformer-CTGsaVfV.d.mts.map +0 -1
- package/dist/transformer-Csl6fbgv.cjs +0 -232
- package/dist/transformer-Csl6fbgv.cjs.map +0 -1
- package/dist/transformer-ICEbxpFf.d.cts.map +0 -1
- package/dist/types-B1EIa_cQ.d.mts.map +0 -1
- package/dist/types-BMiHgsi4.cjs +0 -78
- package/dist/types-BMiHgsi4.cjs.map +0 -1
- package/dist/types-BRzW1NM8.d.cts +0 -166
- package/dist/types-BRzW1NM8.d.cts.map +0 -1
- package/dist/types-BS3Rx8Sk.d.cts +0 -209
- package/dist/types-BS3Rx8Sk.d.cts.map +0 -1
- package/dist/types-BzQ78Efw.d.mts +0 -166
- package/dist/types-BzQ78Efw.d.mts.map +0 -1
- package/dist/types-CbNGXnJE.d.mts +0 -209
- package/dist/types-CbNGXnJE.d.mts.map +0 -1
- package/dist/types-Cj59nqy7.mjs +0 -54
- package/dist/types-Cj59nqy7.mjs.map +0 -1
- package/dist/types-CmOB7CLO.d.cts.map +0 -1
- package/dist/types-DBc0q5KD.d.mts.map +0 -1
- package/dist/types-ZW-nfWf6.cjs +0 -40
- package/dist/types-ZW-nfWf6.cjs.map +0 -1
- package/dist/types-l7Rlb5Mg.d.cts.map +0 -1
- package/dist/types-ojhnLdwz.mjs +0 -34
- package/dist/types-ojhnLdwz.mjs.map +0 -1
- package/dist/ui-assets-BEXqOQLe.cjs +0 -48
- package/dist/ui-assets-BEXqOQLe.cjs.map +0 -1
- package/dist/ui-assets-BhTDUsrM.mjs +0 -30
- package/dist/ui-assets-BhTDUsrM.mjs.map +0 -1
package/dist/memory-B0d_n1g5.cjs
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
//#region src/storage/memory.ts
|
|
3
|
-
/**
|
|
4
|
-
* In-memory storage for Telescope data.
|
|
5
|
-
* Ideal for development and testing.
|
|
6
|
-
* Data is lost when the process restarts.
|
|
7
|
-
*/
|
|
8
|
-
var InMemoryStorage = class {
|
|
9
|
-
requests = [];
|
|
10
|
-
exceptions = [];
|
|
11
|
-
logs = [];
|
|
12
|
-
maxEntries;
|
|
13
|
-
constructor(options) {
|
|
14
|
-
this.maxEntries = options?.maxEntries ?? 1e3;
|
|
15
|
-
}
|
|
16
|
-
async saveRequest(entry) {
|
|
17
|
-
this.requests.unshift(entry);
|
|
18
|
-
this.enforceLimit("requests");
|
|
19
|
-
}
|
|
20
|
-
async saveRequests(entries) {
|
|
21
|
-
this.requests.unshift(...entries);
|
|
22
|
-
this.enforceLimit("requests");
|
|
23
|
-
}
|
|
24
|
-
async getRequests(options) {
|
|
25
|
-
let result = this.requests;
|
|
26
|
-
if (options?.method) result = result.filter((r) => r.method === options.method);
|
|
27
|
-
if (options?.status) {
|
|
28
|
-
const statusFilter = options.status;
|
|
29
|
-
result = result.filter((r) => {
|
|
30
|
-
if (statusFilter.endsWith("xx")) {
|
|
31
|
-
const firstChar = statusFilter[0];
|
|
32
|
-
if (!firstChar) return false;
|
|
33
|
-
const category = parseInt(firstChar, 10);
|
|
34
|
-
return Math.floor(r.status / 100) === category;
|
|
35
|
-
}
|
|
36
|
-
return r.status === parseInt(statusFilter, 10);
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
return this.filterEntries(result, options);
|
|
40
|
-
}
|
|
41
|
-
async getRequest(id) {
|
|
42
|
-
return this.requests.find((r) => r.id === id) ?? null;
|
|
43
|
-
}
|
|
44
|
-
async saveException(entry) {
|
|
45
|
-
this.exceptions.unshift(entry);
|
|
46
|
-
this.enforceLimit("exceptions");
|
|
47
|
-
}
|
|
48
|
-
async saveExceptions(entries) {
|
|
49
|
-
this.exceptions.unshift(...entries);
|
|
50
|
-
this.enforceLimit("exceptions");
|
|
51
|
-
}
|
|
52
|
-
async getExceptions(options) {
|
|
53
|
-
return this.filterEntries(this.exceptions, options);
|
|
54
|
-
}
|
|
55
|
-
async getException(id) {
|
|
56
|
-
return this.exceptions.find((e) => e.id === id) ?? null;
|
|
57
|
-
}
|
|
58
|
-
async saveLog(entry) {
|
|
59
|
-
this.logs.unshift(entry);
|
|
60
|
-
this.enforceLimit("logs");
|
|
61
|
-
}
|
|
62
|
-
async saveLogs(entries) {
|
|
63
|
-
this.logs.unshift(...entries);
|
|
64
|
-
this.enforceLimit("logs");
|
|
65
|
-
}
|
|
66
|
-
async getLogs(options) {
|
|
67
|
-
let result = this.logs;
|
|
68
|
-
if (options?.level) result = result.filter((l) => l.level === options.level);
|
|
69
|
-
return this.filterEntries(result, options);
|
|
70
|
-
}
|
|
71
|
-
async prune(olderThan) {
|
|
72
|
-
const beforeCount = this.requests.length + this.exceptions.length + this.logs.length;
|
|
73
|
-
this.requests = this.requests.filter((r) => r.timestamp >= olderThan);
|
|
74
|
-
this.exceptions = this.exceptions.filter((e) => e.timestamp >= olderThan);
|
|
75
|
-
this.logs = this.logs.filter((l) => l.timestamp >= olderThan);
|
|
76
|
-
const afterCount = this.requests.length + this.exceptions.length + this.logs.length;
|
|
77
|
-
return beforeCount - afterCount;
|
|
78
|
-
}
|
|
79
|
-
async getStats() {
|
|
80
|
-
const allTimestamps = [
|
|
81
|
-
...this.requests.map((r) => r.timestamp),
|
|
82
|
-
...this.exceptions.map((e) => e.timestamp),
|
|
83
|
-
...this.logs.map((l) => l.timestamp)
|
|
84
|
-
].sort((a, b) => a.getTime() - b.getTime());
|
|
85
|
-
return {
|
|
86
|
-
requests: this.requests.length,
|
|
87
|
-
exceptions: this.exceptions.length,
|
|
88
|
-
logs: this.logs.length,
|
|
89
|
-
oldestEntry: allTimestamps[0],
|
|
90
|
-
newestEntry: allTimestamps[allTimestamps.length - 1]
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
clear() {
|
|
94
|
-
this.requests = [];
|
|
95
|
-
this.exceptions = [];
|
|
96
|
-
this.logs = [];
|
|
97
|
-
}
|
|
98
|
-
enforceLimit(type) {
|
|
99
|
-
const entries = this[type];
|
|
100
|
-
if (entries.length > this.maxEntries) if (type === "requests") this.requests = this.requests.slice(0, this.maxEntries);
|
|
101
|
-
else if (type === "exceptions") this.exceptions = this.exceptions.slice(0, this.maxEntries);
|
|
102
|
-
else this.logs = this.logs.slice(0, this.maxEntries);
|
|
103
|
-
}
|
|
104
|
-
filterEntries(entries, options) {
|
|
105
|
-
let result = entries;
|
|
106
|
-
if (options?.after) result = result.filter((e) => e.timestamp >= options.after);
|
|
107
|
-
if (options?.before) result = result.filter((e) => e.timestamp <= options.before);
|
|
108
|
-
if (options?.tags && options.tags.length > 0) result = result.filter((e) => e.tags && options.tags?.some((t) => e.tags?.includes(t)));
|
|
109
|
-
if (options?.search) {
|
|
110
|
-
const searchLower = options.search.toLowerCase();
|
|
111
|
-
result = result.filter((e) => {
|
|
112
|
-
const str = JSON.stringify(e).toLowerCase();
|
|
113
|
-
return str.includes(searchLower);
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
const offset = options?.offset ?? 0;
|
|
117
|
-
const limit = options?.limit ?? 50;
|
|
118
|
-
return result.slice(offset, offset + limit);
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
//#endregion
|
|
123
|
-
Object.defineProperty(exports, 'InMemoryStorage', {
|
|
124
|
-
enumerable: true,
|
|
125
|
-
get: function () {
|
|
126
|
-
return InMemoryStorage;
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
//# sourceMappingURL=memory-B0d_n1g5.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory-B0d_n1g5.cjs","names":["options?: InMemoryStorageOptions","entry: RequestEntry","entries: RequestEntry[]","options?: QueryOptions","id: string","entry: ExceptionEntry","entries: ExceptionEntry[]","entry: LogEntry","entries: LogEntry[]","olderThan: Date","type: 'requests' | 'exceptions' | 'logs'","entries: T[]"],"sources":["../src/storage/memory.ts"],"sourcesContent":["import type {\n\tExceptionEntry,\n\tLogEntry,\n\tQueryOptions,\n\tRequestEntry,\n\tTelescopeStats,\n\tTelescopeStorage,\n} from '../types';\n\nexport interface InMemoryStorageOptions {\n\t/** Maximum number of entries to keep per type (default: 1000) */\n\tmaxEntries?: number;\n}\n\n/**\n * In-memory storage for Telescope data.\n * Ideal for development and testing.\n * Data is lost when the process restarts.\n */\nexport class InMemoryStorage implements TelescopeStorage {\n\tprivate requests: RequestEntry[] = [];\n\tprivate exceptions: ExceptionEntry[] = [];\n\tprivate logs: LogEntry[] = [];\n\tprivate maxEntries: number;\n\n\tconstructor(options?: InMemoryStorageOptions) {\n\t\tthis.maxEntries = options?.maxEntries ?? 1000;\n\t}\n\n\t// Requests\n\n\tasync saveRequest(entry: RequestEntry): Promise<void> {\n\t\tthis.requests.unshift(entry);\n\t\tthis.enforceLimit('requests');\n\t}\n\n\tasync saveRequests(entries: RequestEntry[]): Promise<void> {\n\t\tthis.requests.unshift(...entries);\n\t\tthis.enforceLimit('requests');\n\t}\n\n\tasync getRequests(options?: QueryOptions): Promise<RequestEntry[]> {\n\t\tlet result = this.requests;\n\n\t\t// Apply request-specific filters before generic filtering\n\t\tif (options?.method) {\n\t\t\tresult = result.filter((r) => r.method === options.method);\n\t\t}\n\n\t\tif (options?.status) {\n\t\t\tconst statusFilter = options.status;\n\t\t\tresult = result.filter((r) => {\n\t\t\t\t// Handle status ranges like \"2xx\", \"4xx\", \"5xx\"\n\t\t\t\tif (statusFilter.endsWith('xx')) {\n\t\t\t\t\tconst firstChar = statusFilter[0];\n\t\t\t\t\tif (!firstChar) return false;\n\t\t\t\t\tconst category = parseInt(firstChar, 10);\n\t\t\t\t\treturn Math.floor(r.status / 100) === category;\n\t\t\t\t}\n\t\t\t\t// Handle exact status codes\n\t\t\t\treturn r.status === parseInt(statusFilter, 10);\n\t\t\t});\n\t\t}\n\n\t\treturn this.filterEntries(result, options);\n\t}\n\n\tasync getRequest(id: string): Promise<RequestEntry | null> {\n\t\treturn this.requests.find((r) => r.id === id) ?? null;\n\t}\n\n\t// Exceptions\n\n\tasync saveException(entry: ExceptionEntry): Promise<void> {\n\t\tthis.exceptions.unshift(entry);\n\t\tthis.enforceLimit('exceptions');\n\t}\n\n\tasync saveExceptions(entries: ExceptionEntry[]): Promise<void> {\n\t\tthis.exceptions.unshift(...entries);\n\t\tthis.enforceLimit('exceptions');\n\t}\n\n\tasync getExceptions(options?: QueryOptions): Promise<ExceptionEntry[]> {\n\t\treturn this.filterEntries(this.exceptions, options);\n\t}\n\n\tasync getException(id: string): Promise<ExceptionEntry | null> {\n\t\treturn this.exceptions.find((e) => e.id === id) ?? null;\n\t}\n\n\t// Logs\n\n\tasync saveLog(entry: LogEntry): Promise<void> {\n\t\tthis.logs.unshift(entry);\n\t\tthis.enforceLimit('logs');\n\t}\n\n\tasync saveLogs(entries: LogEntry[]): Promise<void> {\n\t\tthis.logs.unshift(...entries);\n\t\tthis.enforceLimit('logs');\n\t}\n\n\tasync getLogs(options?: QueryOptions): Promise<LogEntry[]> {\n\t\tlet result = this.logs;\n\n\t\t// Apply log-specific filters before generic filtering\n\t\tif (options?.level) {\n\t\t\tresult = result.filter((l) => l.level === options.level);\n\t\t}\n\n\t\treturn this.filterEntries(result, options);\n\t}\n\n\t// Cleanup\n\n\tasync prune(olderThan: Date): Promise<number> {\n\t\tconst beforeCount =\n\t\t\tthis.requests.length + this.exceptions.length + this.logs.length;\n\n\t\tthis.requests = this.requests.filter((r) => r.timestamp >= olderThan);\n\t\tthis.exceptions = this.exceptions.filter((e) => e.timestamp >= olderThan);\n\t\tthis.logs = this.logs.filter((l) => l.timestamp >= olderThan);\n\n\t\tconst afterCount =\n\t\t\tthis.requests.length + this.exceptions.length + this.logs.length;\n\t\treturn beforeCount - afterCount;\n\t}\n\n\t// Stats\n\n\tasync getStats(): Promise<TelescopeStats> {\n\t\tconst allTimestamps = [\n\t\t\t...this.requests.map((r) => r.timestamp),\n\t\t\t...this.exceptions.map((e) => e.timestamp),\n\t\t\t...this.logs.map((l) => l.timestamp),\n\t\t].sort((a, b) => a.getTime() - b.getTime());\n\n\t\treturn {\n\t\t\trequests: this.requests.length,\n\t\t\texceptions: this.exceptions.length,\n\t\t\tlogs: this.logs.length,\n\t\t\toldestEntry: allTimestamps[0],\n\t\t\tnewestEntry: allTimestamps[allTimestamps.length - 1],\n\t\t};\n\t}\n\n\t// Clear all data (useful for testing)\n\n\tclear(): void {\n\t\tthis.requests = [];\n\t\tthis.exceptions = [];\n\t\tthis.logs = [];\n\t}\n\n\t// Private helpers\n\n\tprivate enforceLimit(type: 'requests' | 'exceptions' | 'logs'): void {\n\t\tconst entries = this[type];\n\t\tif (entries.length > this.maxEntries) {\n\t\t\tif (type === 'requests') {\n\t\t\t\tthis.requests = this.requests.slice(0, this.maxEntries);\n\t\t\t} else if (type === 'exceptions') {\n\t\t\t\tthis.exceptions = this.exceptions.slice(0, this.maxEntries);\n\t\t\t} else {\n\t\t\t\tthis.logs = this.logs.slice(0, this.maxEntries);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate filterEntries<T extends { timestamp: Date; tags?: string[] }>(\n\t\tentries: T[],\n\t\toptions?: QueryOptions,\n\t): T[] {\n\t\tlet result = entries;\n\n\t\tif (options?.after) {\n\t\t\tresult = result.filter((e) => e.timestamp >= options.after!);\n\t\t}\n\n\t\tif (options?.before) {\n\t\t\tresult = result.filter((e) => e.timestamp <= options.before!);\n\t\t}\n\n\t\tif (options?.tags && options.tags.length > 0) {\n\t\t\tresult = result.filter(\n\t\t\t\t(e) => e.tags && options.tags?.some((t) => e.tags?.includes(t)),\n\t\t\t);\n\t\t}\n\n\t\tif (options?.search) {\n\t\t\tconst searchLower = options.search.toLowerCase();\n\t\t\tresult = result.filter((e) => {\n\t\t\t\tconst str = JSON.stringify(e).toLowerCase();\n\t\t\t\treturn str.includes(searchLower);\n\t\t\t});\n\t\t}\n\n\t\tconst offset = options?.offset ?? 0;\n\t\tconst limit = options?.limit ?? 50;\n\n\t\treturn result.slice(offset, offset + limit);\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { ExceptionEntry, LogEntry, QueryOptions, RequestEntry, TelescopeStats, TelescopeStorage } from "./types-B1EIa_cQ.mjs";
|
|
2
|
-
|
|
3
|
-
//#region src/storage/memory.d.ts
|
|
4
|
-
interface InMemoryStorageOptions {
|
|
5
|
-
/** Maximum number of entries to keep per type (default: 1000) */
|
|
6
|
-
maxEntries?: number;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* In-memory storage for Telescope data.
|
|
10
|
-
* Ideal for development and testing.
|
|
11
|
-
* Data is lost when the process restarts.
|
|
12
|
-
*/
|
|
13
|
-
declare class InMemoryStorage implements TelescopeStorage {
|
|
14
|
-
private requests;
|
|
15
|
-
private exceptions;
|
|
16
|
-
private logs;
|
|
17
|
-
private maxEntries;
|
|
18
|
-
constructor(options?: InMemoryStorageOptions);
|
|
19
|
-
saveRequest(entry: RequestEntry): Promise<void>;
|
|
20
|
-
saveRequests(entries: RequestEntry[]): Promise<void>;
|
|
21
|
-
getRequests(options?: QueryOptions): Promise<RequestEntry[]>;
|
|
22
|
-
getRequest(id: string): Promise<RequestEntry | null>;
|
|
23
|
-
saveException(entry: ExceptionEntry): Promise<void>;
|
|
24
|
-
saveExceptions(entries: ExceptionEntry[]): Promise<void>;
|
|
25
|
-
getExceptions(options?: QueryOptions): Promise<ExceptionEntry[]>;
|
|
26
|
-
getException(id: string): Promise<ExceptionEntry | null>;
|
|
27
|
-
saveLog(entry: LogEntry): Promise<void>;
|
|
28
|
-
saveLogs(entries: LogEntry[]): Promise<void>;
|
|
29
|
-
getLogs(options?: QueryOptions): Promise<LogEntry[]>;
|
|
30
|
-
prune(olderThan: Date): Promise<number>;
|
|
31
|
-
getStats(): Promise<TelescopeStats>;
|
|
32
|
-
clear(): void;
|
|
33
|
-
private enforceLimit;
|
|
34
|
-
private filterEntries;
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=memory.d.ts.map
|
|
37
|
-
|
|
38
|
-
//#endregion
|
|
39
|
-
export { InMemoryStorage, InMemoryStorageOptions };
|
|
40
|
-
//# sourceMappingURL=memory-DCirEVFW.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory-DCirEVFW.d.mts","names":[],"sources":["../src/storage/memory.ts"],"sourcesContent":[],"mappings":";;;UASiB,sBAAA;;EAAA,UAAA,CAAA,EAAA,MAAA;AAUjB;;;;;;AAiB8C,cAjBjC,eAAA,YAA2B,gBAiBM,CAAA;EAAO,QAKxB,QAAA;EAAY,QAAW,UAAA;EAAY,QAApB,IAAA;EAAO,QA0BZ,UAAA;EAAY,WAApB,CAAA,OAAA,CAAA,EA1CR,sBA0CQ;EAAO,WAMV,CAAA,KAAA,EA1CF,YA0CE,CAAA,EA1Ca,OA0Cb,CAAA,IAAA,CAAA;EAAc,YAAG,CAAA,OAAA,EArChB,YAqCgB,EAAA,CAAA,EArCC,OAqCD,CAAA,IAAA,CAAA;EAAO,WAKrB,CAAA,OAAA,CAAA,EArCF,YAqCE,CAAA,EArCa,OAqCb,CArCqB,YAqCrB,EAAA,CAAA;EAAc,UAAK,CAAA,EAAA,EAAA,MAAA,CAAA,EAXnB,OAWmB,CAXX,YAWW,GAAA,IAAA,CAAA;EAAO,aAK1B,CAAA,KAAA,EAVH,cAUG,CAAA,EAVc,OAUd,CAAA,IAAA,CAAA;EAAY,cAAW,CAAA,OAAA,EALvB,cAKuB,EAAA,CAAA,EALJ,OAKI,CAAA,IAAA,CAAA;EAAc,aAAtB,CAAA,OAAA,CAAA,EAAf,YAAe,CAAA,EAAA,OAAA,CAAQ,cAAR,EAAA,CAAA;EAAO,YAIZ,CAAA,EAAA,EAAA,MAAA,CAAA,EAAR,OAAQ,CAAA,cAAA,GAAA,IAAA,CAAA;EAAc,OAAtB,CAAA,KAAA,EAMX,QANW,CAAA,EAMA,OANA,CAAA,IAAA,CAAA;EAAO,QAMlB,CAAA,OAAA,EAKG,QALH,EAAA,CAAA,EAKgB,OALhB,CAAA,IAAA,CAAA;EAAQ,OAAG,CAAA,OAAA,CAAA,EAUR,YAVQ,CAAA,EAUO,OAVP,CAUe,QAVf,EAAA,CAAA;EAAO,KAKf,CAAA,SAAA,EAkBD,IAlBC,CAAA,EAkBM,OAlBN,CAAA,MAAA,CAAA;EAAQ,QAAK,CAAA,CAAA,EAiCnB,OAjCmB,CAiCX,cAjCW,CAAA;EAAO,KAKpB,CAAA,CAAA,EAAA,IAAA;EAAY,QAAW,YAAA;EAAQ,QAAhB,aAAA"}
|
|
File without changes
|
|
File without changes
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
|
-
const require_http = require('./http-BsqmhurZ.cjs');
|
|
3
|
-
const __opentelemetry_api = require_chunk.__toESM(require("@opentelemetry/api"));
|
|
4
|
-
|
|
5
|
-
//#region src/instrumentation/middleware.ts
|
|
6
|
-
const SPAN_SYMBOL = Symbol("telemetry.span");
|
|
7
|
-
const CONTEXT_SYMBOL = Symbol("telemetry.context");
|
|
8
|
-
/**
|
|
9
|
-
* Get the current span from the Lambda event
|
|
10
|
-
*/
|
|
11
|
-
function getSpanFromEvent(event) {
|
|
12
|
-
return event?.[SPAN_SYMBOL];
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Get the current trace context from the Lambda event
|
|
16
|
-
*/
|
|
17
|
-
function getContextFromEvent(event) {
|
|
18
|
-
return event?.[CONTEXT_SYMBOL];
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Create a telemetry middleware for Lambda handlers
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* import { telemetryMiddleware } from '@geekmidas/telescope/instrumentation';
|
|
26
|
-
*
|
|
27
|
-
* const adaptor = new AmazonApiGatewayV2Endpoint(endpoint, {
|
|
28
|
-
* telemetry: { middleware: telemetryMiddleware() },
|
|
29
|
-
* });
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
function telemetryMiddleware(options = {}) {
|
|
33
|
-
return {
|
|
34
|
-
before: async (request) => {
|
|
35
|
-
if (options.shouldSkip?.(request.event)) return;
|
|
36
|
-
const event = request.event;
|
|
37
|
-
const lambdaContext = request.context;
|
|
38
|
-
const headers = normalizeHeaders(event.headers || {});
|
|
39
|
-
const parentContext = require_http.extractTraceContext(headers);
|
|
40
|
-
const attrs = buildSpanAttributes(event, lambdaContext, options);
|
|
41
|
-
const span = require_http.createHttpServerSpan(attrs, parentContext);
|
|
42
|
-
event[SPAN_SYMBOL] = span;
|
|
43
|
-
event[CONTEXT_SYMBOL] = __opentelemetry_api.trace.setSpan(parentContext, span);
|
|
44
|
-
span.setAttribute("faas.invocation_id", lambdaContext.awsRequestId);
|
|
45
|
-
span.setAttribute("faas.name", lambdaContext.functionName);
|
|
46
|
-
if (options.recordBody && event.body) {
|
|
47
|
-
const bodyStr = typeof event.body === "string" ? event.body : JSON.stringify(event.body);
|
|
48
|
-
span.setAttribute("http.request.body", bodyStr.length > 4096 ? `${bodyStr.slice(0, 4096)}...` : bodyStr);
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
after: async (request) => {
|
|
52
|
-
const span = getSpanFromEvent(request.event);
|
|
53
|
-
if (!span) return;
|
|
54
|
-
const response = request.response;
|
|
55
|
-
const statusCode = typeof response?.statusCode === "number" ? response.statusCode : 200;
|
|
56
|
-
if (options.recordResponseBody && response?.body) {
|
|
57
|
-
const bodyStr = typeof response.body === "string" ? response.body : JSON.stringify(response.body);
|
|
58
|
-
span.setAttribute("http.response.body", bodyStr.length > 4096 ? `${bodyStr.slice(0, 4096)}...` : bodyStr);
|
|
59
|
-
}
|
|
60
|
-
require_http.endHttpSpan(span, { statusCode });
|
|
61
|
-
},
|
|
62
|
-
onError: async (request) => {
|
|
63
|
-
const span = getSpanFromEvent(request.event);
|
|
64
|
-
if (!span) return;
|
|
65
|
-
const error = request.error;
|
|
66
|
-
const response = request.response;
|
|
67
|
-
let statusCode = 500;
|
|
68
|
-
if (response?.statusCode) statusCode = response.statusCode;
|
|
69
|
-
else if (error && "statusCode" in error) statusCode = error.statusCode;
|
|
70
|
-
require_http.endHttpSpan(span, { statusCode }, error instanceof Error ? error : new Error(String(error)));
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Build span attributes from Lambda event
|
|
76
|
-
*/
|
|
77
|
-
function buildSpanAttributes(event, lambdaContext, options) {
|
|
78
|
-
const isV2 = "requestContext" in event && "http" in (event.requestContext || {});
|
|
79
|
-
const isV1 = "requestContext" in event && "httpMethod" in event && !("http" in (event.requestContext || {}));
|
|
80
|
-
let method = "INVOKE";
|
|
81
|
-
let path = "/";
|
|
82
|
-
let route;
|
|
83
|
-
let host;
|
|
84
|
-
let scheme;
|
|
85
|
-
let userAgent;
|
|
86
|
-
let clientIp;
|
|
87
|
-
let requestId;
|
|
88
|
-
if (isV2) {
|
|
89
|
-
const http = event.requestContext.http;
|
|
90
|
-
method = http.method;
|
|
91
|
-
path = event.rawPath || http.path;
|
|
92
|
-
route = event.routeKey?.replace(/^[A-Z]+\s+/, "");
|
|
93
|
-
host = event.headers?.host;
|
|
94
|
-
scheme = "https";
|
|
95
|
-
userAgent = http.userAgent;
|
|
96
|
-
clientIp = http.sourceIp;
|
|
97
|
-
requestId = event.requestContext.requestId;
|
|
98
|
-
} else if (isV1) {
|
|
99
|
-
method = event.httpMethod;
|
|
100
|
-
path = event.path;
|
|
101
|
-
route = event.resource;
|
|
102
|
-
host = event.headers?.Host || event.headers?.host;
|
|
103
|
-
scheme = "https";
|
|
104
|
-
userAgent = event.headers?.["User-Agent"] || event.headers?.["user-agent"];
|
|
105
|
-
clientIp = event.requestContext?.identity?.sourceIp;
|
|
106
|
-
requestId = event.requestContext?.requestId;
|
|
107
|
-
} else if ("httpMethod" in event) {
|
|
108
|
-
method = event.httpMethod;
|
|
109
|
-
path = event.path;
|
|
110
|
-
host = event.headers?.host;
|
|
111
|
-
userAgent = event.headers?.["user-agent"] || event.headers?.["User-Agent"];
|
|
112
|
-
clientIp = event.headers?.["x-forwarded-for"]?.split(",")[0]?.trim();
|
|
113
|
-
}
|
|
114
|
-
const attrs = {
|
|
115
|
-
method,
|
|
116
|
-
path,
|
|
117
|
-
route,
|
|
118
|
-
host,
|
|
119
|
-
scheme,
|
|
120
|
-
userAgent,
|
|
121
|
-
clientIp,
|
|
122
|
-
requestId: requestId || lambdaContext.awsRequestId
|
|
123
|
-
};
|
|
124
|
-
if (options.getEndpointName || options.getOperationId) attrs.endpoint = {
|
|
125
|
-
name: options.getEndpointName?.(event),
|
|
126
|
-
operationId: options.getOperationId?.(event)
|
|
127
|
-
};
|
|
128
|
-
if (options.getUserId) {
|
|
129
|
-
const userId = options.getUserId(event);
|
|
130
|
-
if (userId) attrs.user = { userId };
|
|
131
|
-
}
|
|
132
|
-
return attrs;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Normalize headers to lowercase keys
|
|
136
|
-
*/
|
|
137
|
-
function normalizeHeaders(headers) {
|
|
138
|
-
const normalized = {};
|
|
139
|
-
for (const [key, value] of Object.entries(headers)) normalized[key.toLowerCase()] = value;
|
|
140
|
-
return normalized;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Run a function within the span context from a Lambda event
|
|
144
|
-
*
|
|
145
|
-
* @example
|
|
146
|
-
* ```typescript
|
|
147
|
-
* await withEventContext(event, async () => {
|
|
148
|
-
* // Any spans created here will be children of the request span
|
|
149
|
-
* await doSomething();
|
|
150
|
-
* });
|
|
151
|
-
* ```
|
|
152
|
-
*/
|
|
153
|
-
async function withEventContext(event, fn) {
|
|
154
|
-
const ctx = getContextFromEvent(event);
|
|
155
|
-
if (!ctx) return fn();
|
|
156
|
-
return __opentelemetry_api.context.with(ctx, fn);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
//#endregion
|
|
160
|
-
Object.defineProperty(exports, 'getContextFromEvent', {
|
|
161
|
-
enumerable: true,
|
|
162
|
-
get: function () {
|
|
163
|
-
return getContextFromEvent;
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
Object.defineProperty(exports, 'getSpanFromEvent', {
|
|
167
|
-
enumerable: true,
|
|
168
|
-
get: function () {
|
|
169
|
-
return getSpanFromEvent;
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
Object.defineProperty(exports, 'telemetryMiddleware', {
|
|
173
|
-
enumerable: true,
|
|
174
|
-
get: function () {
|
|
175
|
-
return telemetryMiddleware;
|
|
176
|
-
}
|
|
177
|
-
});
|
|
178
|
-
Object.defineProperty(exports, 'withEventContext', {
|
|
179
|
-
enumerable: true,
|
|
180
|
-
get: function () {
|
|
181
|
-
return withEventContext;
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
//# sourceMappingURL=middleware-Bcq6XXGG.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware-Bcq6XXGG.cjs","names":["event: any","options: TelemetryMiddlewareOptions","lambdaContext: LambdaContext","route: string | undefined","host: string | undefined","scheme: 'http' | 'https' | undefined","userAgent: string | undefined","clientIp: string | undefined","requestId: string | undefined","attrs: HttpSpanAttributes","headers: Record<string, string | string[] | undefined>","normalized: Record<string, string | string[] | undefined>","fn: () => Promise<T>"],"sources":["../src/instrumentation/middleware.ts"],"sourcesContent":["/**\n * OpenTelemetry instrumentation middleware for @geekmidas/constructs\n *\n * This middleware automatically creates spans for HTTP requests,\n * extracts trace context from incoming headers, and records\n * request/response metadata as span attributes.\n */\nimport type { MiddlewareObj } from '@middy/core';\nimport { context, type Span, trace } from '@opentelemetry/api';\nimport type { Context as LambdaContext } from 'aws-lambda';\nimport {\n\tcreateHttpServerSpan,\n\tendHttpSpan,\n\textractTraceContext,\n\ttype HttpSpanAttributes,\n} from './http';\n\n/**\n * Options for the telemetry middleware\n */\nexport interface TelemetryMiddlewareOptions {\n\t/**\n\t * Whether to record request body as span attribute\n\t * @default false\n\t */\n\trecordBody?: boolean;\n\n\t/**\n\t * Whether to record response body as span attribute\n\t * @default false\n\t */\n\trecordResponseBody?: boolean;\n\n\t/**\n\t * Custom function to extract endpoint name from event\n\t */\n\tgetEndpointName?: (event: any) => string | undefined;\n\n\t/**\n\t * Custom function to extract operation ID from event\n\t */\n\tgetOperationId?: (event: any) => string | undefined;\n\n\t/**\n\t * Custom function to extract user ID from event\n\t */\n\tgetUserId?: (event: any) => string | undefined;\n\n\t/**\n\t * Whether to skip tracing for this request\n\t */\n\tshouldSkip?: (event: any) => boolean;\n}\n\n// Symbol for storing span on event\nconst SPAN_SYMBOL = Symbol('telemetry.span');\nconst CONTEXT_SYMBOL = Symbol('telemetry.context');\n\n/**\n * Get the current span from the Lambda event\n */\nexport function getSpanFromEvent(event: any): Span | undefined {\n\treturn event?.[SPAN_SYMBOL];\n}\n\n/**\n * Get the current trace context from the Lambda event\n */\nexport function getContextFromEvent(event: any): any {\n\treturn event?.[CONTEXT_SYMBOL];\n}\n\n/**\n * Create a telemetry middleware for Lambda handlers\n *\n * @example\n * ```typescript\n * import { telemetryMiddleware } from '@geekmidas/telescope/instrumentation';\n *\n * const adaptor = new AmazonApiGatewayV2Endpoint(endpoint, {\n * telemetry: { middleware: telemetryMiddleware() },\n * });\n * ```\n */\nexport function telemetryMiddleware(\n\toptions: TelemetryMiddlewareOptions = {},\n): MiddlewareObj<any, any, Error, LambdaContext> {\n\treturn {\n\t\tbefore: async (request) => {\n\t\t\t// Skip if custom skip function returns true\n\t\t\tif (options.shouldSkip?.(request.event)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst event = request.event;\n\t\t\tconst lambdaContext = request.context;\n\n\t\t\t// Extract trace context from headers\n\t\t\tconst headers = normalizeHeaders(event.headers || {});\n\t\t\tconst parentContext = extractTraceContext(headers);\n\n\t\t\t// Build span attributes from event\n\t\t\tconst attrs = buildSpanAttributes(event, lambdaContext, options);\n\n\t\t\t// Create the span\n\t\t\tconst span = createHttpServerSpan(attrs, parentContext);\n\n\t\t\t// Store span and context on event for access in handler\n\t\t\tevent[SPAN_SYMBOL] = span;\n\t\t\tevent[CONTEXT_SYMBOL] = trace.setSpan(parentContext, span);\n\n\t\t\t// Add Lambda-specific attributes\n\t\t\tspan.setAttribute('faas.invocation_id', lambdaContext.awsRequestId);\n\t\t\tspan.setAttribute('faas.name', lambdaContext.functionName);\n\n\t\t\tif (options.recordBody && event.body) {\n\t\t\t\tconst bodyStr =\n\t\t\t\t\ttypeof event.body === 'string'\n\t\t\t\t\t\t? event.body\n\t\t\t\t\t\t: JSON.stringify(event.body);\n\t\t\t\t// Truncate large bodies\n\t\t\t\tspan.setAttribute(\n\t\t\t\t\t'http.request.body',\n\t\t\t\t\tbodyStr.length > 4096 ? `${bodyStr.slice(0, 4096)}...` : bodyStr,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\tafter: async (request) => {\n\t\t\tconst span = getSpanFromEvent(request.event);\n\t\t\tif (!span) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst response = request.response;\n\t\t\tconst statusCode =\n\t\t\t\ttypeof response?.statusCode === 'number' ? response.statusCode : 200;\n\n\t\t\tif (options.recordResponseBody && response?.body) {\n\t\t\t\tconst bodyStr =\n\t\t\t\t\ttypeof response.body === 'string'\n\t\t\t\t\t\t? response.body\n\t\t\t\t\t\t: JSON.stringify(response.body);\n\t\t\t\tspan.setAttribute(\n\t\t\t\t\t'http.response.body',\n\t\t\t\t\tbodyStr.length > 4096 ? `${bodyStr.slice(0, 4096)}...` : bodyStr,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tendHttpSpan(span, { statusCode });\n\t\t},\n\n\t\tonError: async (request) => {\n\t\t\tconst span = getSpanFromEvent(request.event);\n\t\t\tif (!span) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst error = request.error;\n\t\t\tconst response = request.response;\n\n\t\t\t// Determine status code from response or error\n\t\t\tlet statusCode = 500;\n\t\t\tif (response?.statusCode) {\n\t\t\t\tstatusCode = response.statusCode;\n\t\t\t} else if (error && 'statusCode' in error) {\n\t\t\t\tstatusCode = (error as any).statusCode;\n\t\t\t}\n\n\t\t\tendHttpSpan(\n\t\t\t\tspan,\n\t\t\t\t{ statusCode },\n\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t);\n\t\t},\n\t};\n}\n\n/**\n * Build span attributes from Lambda event\n */\nfunction buildSpanAttributes(\n\tevent: any,\n\tlambdaContext: LambdaContext,\n\toptions: TelemetryMiddlewareOptions,\n): HttpSpanAttributes {\n\t// Detect event type (API Gateway v1, v2, ALB, or direct invoke)\n\tconst isV2 =\n\t\t'requestContext' in event && 'http' in (event.requestContext || {});\n\tconst isV1 =\n\t\t'requestContext' in event &&\n\t\t'httpMethod' in event &&\n\t\t!('http' in (event.requestContext || {}));\n\n\tlet method = 'INVOKE';\n\tlet path = '/';\n\tlet route: string | undefined;\n\tlet host: string | undefined;\n\tlet scheme: 'http' | 'https' | undefined;\n\tlet userAgent: string | undefined;\n\tlet clientIp: string | undefined;\n\tlet requestId: string | undefined;\n\n\tif (isV2) {\n\t\t// API Gateway v2 (HTTP API)\n\t\tconst http = event.requestContext.http;\n\t\tmethod = http.method;\n\t\tpath = event.rawPath || http.path;\n\t\troute = event.routeKey?.replace(/^[A-Z]+\\s+/, ''); // Remove HTTP method prefix\n\t\thost = event.headers?.host;\n\t\tscheme = 'https';\n\t\tuserAgent = http.userAgent;\n\t\tclientIp = http.sourceIp;\n\t\trequestId = event.requestContext.requestId;\n\t} else if (isV1) {\n\t\t// API Gateway v1 (REST API)\n\t\tmethod = event.httpMethod;\n\t\tpath = event.path;\n\t\troute = event.resource;\n\t\thost = event.headers?.Host || event.headers?.host;\n\t\tscheme = 'https';\n\t\tuserAgent = event.headers?.['User-Agent'] || event.headers?.['user-agent'];\n\t\tclientIp = event.requestContext?.identity?.sourceIp;\n\t\trequestId = event.requestContext?.requestId;\n\t} else if ('httpMethod' in event) {\n\t\t// ALB event\n\t\tmethod = event.httpMethod;\n\t\tpath = event.path;\n\t\thost = event.headers?.host;\n\t\tuserAgent = event.headers?.['user-agent'] || event.headers?.['User-Agent'];\n\t\tclientIp = event.headers?.['x-forwarded-for']?.split(',')[0]?.trim();\n\t}\n\n\tconst attrs: HttpSpanAttributes = {\n\t\tmethod,\n\t\tpath,\n\t\troute,\n\t\thost,\n\t\tscheme,\n\t\tuserAgent,\n\t\tclientIp,\n\t\trequestId: requestId || lambdaContext.awsRequestId,\n\t};\n\n\t// Add endpoint metadata if extractors provided\n\tif (options.getEndpointName || options.getOperationId) {\n\t\tattrs.endpoint = {\n\t\t\tname: options.getEndpointName?.(event),\n\t\t\toperationId: options.getOperationId?.(event),\n\t\t};\n\t}\n\n\t// Add user metadata if extractor provided\n\tif (options.getUserId) {\n\t\tconst userId = options.getUserId(event);\n\t\tif (userId) {\n\t\t\tattrs.user = { userId };\n\t\t}\n\t}\n\n\treturn attrs;\n}\n\n/**\n * Normalize headers to lowercase keys\n */\nfunction normalizeHeaders(\n\theaders: Record<string, string | string[] | undefined>,\n): Record<string, string | string[] | undefined> {\n\tconst normalized: Record<string, string | string[] | undefined> = {};\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tnormalized[key.toLowerCase()] = value;\n\t}\n\treturn normalized;\n}\n\n/**\n * Run a function within the span context from a Lambda event\n *\n * @example\n * ```typescript\n * await withEventContext(event, async () => {\n * // Any spans created here will be children of the request span\n * await doSomething();\n * });\n * ```\n */\nexport async function withEventContext<T>(\n\tevent: any,\n\tfn: () => Promise<T>,\n): Promise<T> {\n\tconst ctx = getContextFromEvent(event);\n\tif (!ctx) {\n\t\treturn fn();\n\t}\n\treturn context.with(ctx, fn);\n}\n"],"mappings":"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"}
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import { createHttpServerSpan, endHttpSpan, extractTraceContext } from "./http-BIvr0YdI.mjs";
|
|
2
|
-
import { context, trace } from "@opentelemetry/api";
|
|
3
|
-
|
|
4
|
-
//#region src/instrumentation/middleware.ts
|
|
5
|
-
const SPAN_SYMBOL = Symbol("telemetry.span");
|
|
6
|
-
const CONTEXT_SYMBOL = Symbol("telemetry.context");
|
|
7
|
-
/**
|
|
8
|
-
* Get the current span from the Lambda event
|
|
9
|
-
*/
|
|
10
|
-
function getSpanFromEvent(event) {
|
|
11
|
-
return event?.[SPAN_SYMBOL];
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Get the current trace context from the Lambda event
|
|
15
|
-
*/
|
|
16
|
-
function getContextFromEvent(event) {
|
|
17
|
-
return event?.[CONTEXT_SYMBOL];
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Create a telemetry middleware for Lambda handlers
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```typescript
|
|
24
|
-
* import { telemetryMiddleware } from '@geekmidas/telescope/instrumentation';
|
|
25
|
-
*
|
|
26
|
-
* const adaptor = new AmazonApiGatewayV2Endpoint(endpoint, {
|
|
27
|
-
* telemetry: { middleware: telemetryMiddleware() },
|
|
28
|
-
* });
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
function telemetryMiddleware(options = {}) {
|
|
32
|
-
return {
|
|
33
|
-
before: async (request) => {
|
|
34
|
-
if (options.shouldSkip?.(request.event)) return;
|
|
35
|
-
const event = request.event;
|
|
36
|
-
const lambdaContext = request.context;
|
|
37
|
-
const headers = normalizeHeaders(event.headers || {});
|
|
38
|
-
const parentContext = extractTraceContext(headers);
|
|
39
|
-
const attrs = buildSpanAttributes(event, lambdaContext, options);
|
|
40
|
-
const span = createHttpServerSpan(attrs, parentContext);
|
|
41
|
-
event[SPAN_SYMBOL] = span;
|
|
42
|
-
event[CONTEXT_SYMBOL] = trace.setSpan(parentContext, span);
|
|
43
|
-
span.setAttribute("faas.invocation_id", lambdaContext.awsRequestId);
|
|
44
|
-
span.setAttribute("faas.name", lambdaContext.functionName);
|
|
45
|
-
if (options.recordBody && event.body) {
|
|
46
|
-
const bodyStr = typeof event.body === "string" ? event.body : JSON.stringify(event.body);
|
|
47
|
-
span.setAttribute("http.request.body", bodyStr.length > 4096 ? `${bodyStr.slice(0, 4096)}...` : bodyStr);
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
after: async (request) => {
|
|
51
|
-
const span = getSpanFromEvent(request.event);
|
|
52
|
-
if (!span) return;
|
|
53
|
-
const response = request.response;
|
|
54
|
-
const statusCode = typeof response?.statusCode === "number" ? response.statusCode : 200;
|
|
55
|
-
if (options.recordResponseBody && response?.body) {
|
|
56
|
-
const bodyStr = typeof response.body === "string" ? response.body : JSON.stringify(response.body);
|
|
57
|
-
span.setAttribute("http.response.body", bodyStr.length > 4096 ? `${bodyStr.slice(0, 4096)}...` : bodyStr);
|
|
58
|
-
}
|
|
59
|
-
endHttpSpan(span, { statusCode });
|
|
60
|
-
},
|
|
61
|
-
onError: async (request) => {
|
|
62
|
-
const span = getSpanFromEvent(request.event);
|
|
63
|
-
if (!span) return;
|
|
64
|
-
const error = request.error;
|
|
65
|
-
const response = request.response;
|
|
66
|
-
let statusCode = 500;
|
|
67
|
-
if (response?.statusCode) statusCode = response.statusCode;
|
|
68
|
-
else if (error && "statusCode" in error) statusCode = error.statusCode;
|
|
69
|
-
endHttpSpan(span, { statusCode }, error instanceof Error ? error : new Error(String(error)));
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Build span attributes from Lambda event
|
|
75
|
-
*/
|
|
76
|
-
function buildSpanAttributes(event, lambdaContext, options) {
|
|
77
|
-
const isV2 = "requestContext" in event && "http" in (event.requestContext || {});
|
|
78
|
-
const isV1 = "requestContext" in event && "httpMethod" in event && !("http" in (event.requestContext || {}));
|
|
79
|
-
let method = "INVOKE";
|
|
80
|
-
let path = "/";
|
|
81
|
-
let route;
|
|
82
|
-
let host;
|
|
83
|
-
let scheme;
|
|
84
|
-
let userAgent;
|
|
85
|
-
let clientIp;
|
|
86
|
-
let requestId;
|
|
87
|
-
if (isV2) {
|
|
88
|
-
const http = event.requestContext.http;
|
|
89
|
-
method = http.method;
|
|
90
|
-
path = event.rawPath || http.path;
|
|
91
|
-
route = event.routeKey?.replace(/^[A-Z]+\s+/, "");
|
|
92
|
-
host = event.headers?.host;
|
|
93
|
-
scheme = "https";
|
|
94
|
-
userAgent = http.userAgent;
|
|
95
|
-
clientIp = http.sourceIp;
|
|
96
|
-
requestId = event.requestContext.requestId;
|
|
97
|
-
} else if (isV1) {
|
|
98
|
-
method = event.httpMethod;
|
|
99
|
-
path = event.path;
|
|
100
|
-
route = event.resource;
|
|
101
|
-
host = event.headers?.Host || event.headers?.host;
|
|
102
|
-
scheme = "https";
|
|
103
|
-
userAgent = event.headers?.["User-Agent"] || event.headers?.["user-agent"];
|
|
104
|
-
clientIp = event.requestContext?.identity?.sourceIp;
|
|
105
|
-
requestId = event.requestContext?.requestId;
|
|
106
|
-
} else if ("httpMethod" in event) {
|
|
107
|
-
method = event.httpMethod;
|
|
108
|
-
path = event.path;
|
|
109
|
-
host = event.headers?.host;
|
|
110
|
-
userAgent = event.headers?.["user-agent"] || event.headers?.["User-Agent"];
|
|
111
|
-
clientIp = event.headers?.["x-forwarded-for"]?.split(",")[0]?.trim();
|
|
112
|
-
}
|
|
113
|
-
const attrs = {
|
|
114
|
-
method,
|
|
115
|
-
path,
|
|
116
|
-
route,
|
|
117
|
-
host,
|
|
118
|
-
scheme,
|
|
119
|
-
userAgent,
|
|
120
|
-
clientIp,
|
|
121
|
-
requestId: requestId || lambdaContext.awsRequestId
|
|
122
|
-
};
|
|
123
|
-
if (options.getEndpointName || options.getOperationId) attrs.endpoint = {
|
|
124
|
-
name: options.getEndpointName?.(event),
|
|
125
|
-
operationId: options.getOperationId?.(event)
|
|
126
|
-
};
|
|
127
|
-
if (options.getUserId) {
|
|
128
|
-
const userId = options.getUserId(event);
|
|
129
|
-
if (userId) attrs.user = { userId };
|
|
130
|
-
}
|
|
131
|
-
return attrs;
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Normalize headers to lowercase keys
|
|
135
|
-
*/
|
|
136
|
-
function normalizeHeaders(headers) {
|
|
137
|
-
const normalized = {};
|
|
138
|
-
for (const [key, value] of Object.entries(headers)) normalized[key.toLowerCase()] = value;
|
|
139
|
-
return normalized;
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Run a function within the span context from a Lambda event
|
|
143
|
-
*
|
|
144
|
-
* @example
|
|
145
|
-
* ```typescript
|
|
146
|
-
* await withEventContext(event, async () => {
|
|
147
|
-
* // Any spans created here will be children of the request span
|
|
148
|
-
* await doSomething();
|
|
149
|
-
* });
|
|
150
|
-
* ```
|
|
151
|
-
*/
|
|
152
|
-
async function withEventContext(event, fn) {
|
|
153
|
-
const ctx = getContextFromEvent(event);
|
|
154
|
-
if (!ctx) return fn();
|
|
155
|
-
return context.with(ctx, fn);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
//#endregion
|
|
159
|
-
export { getContextFromEvent, getSpanFromEvent, telemetryMiddleware, withEventContext };
|
|
160
|
-
//# sourceMappingURL=middleware-D1XEHvyy.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware-D1XEHvyy.mjs","names":["event: any","options: TelemetryMiddlewareOptions","lambdaContext: LambdaContext","route: string | undefined","host: string | undefined","scheme: 'http' | 'https' | undefined","userAgent: string | undefined","clientIp: string | undefined","requestId: string | undefined","attrs: HttpSpanAttributes","headers: Record<string, string | string[] | undefined>","normalized: Record<string, string | string[] | undefined>","fn: () => Promise<T>"],"sources":["../src/instrumentation/middleware.ts"],"sourcesContent":["/**\n * OpenTelemetry instrumentation middleware for @geekmidas/constructs\n *\n * This middleware automatically creates spans for HTTP requests,\n * extracts trace context from incoming headers, and records\n * request/response metadata as span attributes.\n */\nimport type { MiddlewareObj } from '@middy/core';\nimport { context, type Span, trace } from '@opentelemetry/api';\nimport type { Context as LambdaContext } from 'aws-lambda';\nimport {\n\tcreateHttpServerSpan,\n\tendHttpSpan,\n\textractTraceContext,\n\ttype HttpSpanAttributes,\n} from './http';\n\n/**\n * Options for the telemetry middleware\n */\nexport interface TelemetryMiddlewareOptions {\n\t/**\n\t * Whether to record request body as span attribute\n\t * @default false\n\t */\n\trecordBody?: boolean;\n\n\t/**\n\t * Whether to record response body as span attribute\n\t * @default false\n\t */\n\trecordResponseBody?: boolean;\n\n\t/**\n\t * Custom function to extract endpoint name from event\n\t */\n\tgetEndpointName?: (event: any) => string | undefined;\n\n\t/**\n\t * Custom function to extract operation ID from event\n\t */\n\tgetOperationId?: (event: any) => string | undefined;\n\n\t/**\n\t * Custom function to extract user ID from event\n\t */\n\tgetUserId?: (event: any) => string | undefined;\n\n\t/**\n\t * Whether to skip tracing for this request\n\t */\n\tshouldSkip?: (event: any) => boolean;\n}\n\n// Symbol for storing span on event\nconst SPAN_SYMBOL = Symbol('telemetry.span');\nconst CONTEXT_SYMBOL = Symbol('telemetry.context');\n\n/**\n * Get the current span from the Lambda event\n */\nexport function getSpanFromEvent(event: any): Span | undefined {\n\treturn event?.[SPAN_SYMBOL];\n}\n\n/**\n * Get the current trace context from the Lambda event\n */\nexport function getContextFromEvent(event: any): any {\n\treturn event?.[CONTEXT_SYMBOL];\n}\n\n/**\n * Create a telemetry middleware for Lambda handlers\n *\n * @example\n * ```typescript\n * import { telemetryMiddleware } from '@geekmidas/telescope/instrumentation';\n *\n * const adaptor = new AmazonApiGatewayV2Endpoint(endpoint, {\n * telemetry: { middleware: telemetryMiddleware() },\n * });\n * ```\n */\nexport function telemetryMiddleware(\n\toptions: TelemetryMiddlewareOptions = {},\n): MiddlewareObj<any, any, Error, LambdaContext> {\n\treturn {\n\t\tbefore: async (request) => {\n\t\t\t// Skip if custom skip function returns true\n\t\t\tif (options.shouldSkip?.(request.event)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst event = request.event;\n\t\t\tconst lambdaContext = request.context;\n\n\t\t\t// Extract trace context from headers\n\t\t\tconst headers = normalizeHeaders(event.headers || {});\n\t\t\tconst parentContext = extractTraceContext(headers);\n\n\t\t\t// Build span attributes from event\n\t\t\tconst attrs = buildSpanAttributes(event, lambdaContext, options);\n\n\t\t\t// Create the span\n\t\t\tconst span = createHttpServerSpan(attrs, parentContext);\n\n\t\t\t// Store span and context on event for access in handler\n\t\t\tevent[SPAN_SYMBOL] = span;\n\t\t\tevent[CONTEXT_SYMBOL] = trace.setSpan(parentContext, span);\n\n\t\t\t// Add Lambda-specific attributes\n\t\t\tspan.setAttribute('faas.invocation_id', lambdaContext.awsRequestId);\n\t\t\tspan.setAttribute('faas.name', lambdaContext.functionName);\n\n\t\t\tif (options.recordBody && event.body) {\n\t\t\t\tconst bodyStr =\n\t\t\t\t\ttypeof event.body === 'string'\n\t\t\t\t\t\t? event.body\n\t\t\t\t\t\t: JSON.stringify(event.body);\n\t\t\t\t// Truncate large bodies\n\t\t\t\tspan.setAttribute(\n\t\t\t\t\t'http.request.body',\n\t\t\t\t\tbodyStr.length > 4096 ? `${bodyStr.slice(0, 4096)}...` : bodyStr,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\tafter: async (request) => {\n\t\t\tconst span = getSpanFromEvent(request.event);\n\t\t\tif (!span) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst response = request.response;\n\t\t\tconst statusCode =\n\t\t\t\ttypeof response?.statusCode === 'number' ? response.statusCode : 200;\n\n\t\t\tif (options.recordResponseBody && response?.body) {\n\t\t\t\tconst bodyStr =\n\t\t\t\t\ttypeof response.body === 'string'\n\t\t\t\t\t\t? response.body\n\t\t\t\t\t\t: JSON.stringify(response.body);\n\t\t\t\tspan.setAttribute(\n\t\t\t\t\t'http.response.body',\n\t\t\t\t\tbodyStr.length > 4096 ? `${bodyStr.slice(0, 4096)}...` : bodyStr,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tendHttpSpan(span, { statusCode });\n\t\t},\n\n\t\tonError: async (request) => {\n\t\t\tconst span = getSpanFromEvent(request.event);\n\t\t\tif (!span) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst error = request.error;\n\t\t\tconst response = request.response;\n\n\t\t\t// Determine status code from response or error\n\t\t\tlet statusCode = 500;\n\t\t\tif (response?.statusCode) {\n\t\t\t\tstatusCode = response.statusCode;\n\t\t\t} else if (error && 'statusCode' in error) {\n\t\t\t\tstatusCode = (error as any).statusCode;\n\t\t\t}\n\n\t\t\tendHttpSpan(\n\t\t\t\tspan,\n\t\t\t\t{ statusCode },\n\t\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t\t);\n\t\t},\n\t};\n}\n\n/**\n * Build span attributes from Lambda event\n */\nfunction buildSpanAttributes(\n\tevent: any,\n\tlambdaContext: LambdaContext,\n\toptions: TelemetryMiddlewareOptions,\n): HttpSpanAttributes {\n\t// Detect event type (API Gateway v1, v2, ALB, or direct invoke)\n\tconst isV2 =\n\t\t'requestContext' in event && 'http' in (event.requestContext || {});\n\tconst isV1 =\n\t\t'requestContext' in event &&\n\t\t'httpMethod' in event &&\n\t\t!('http' in (event.requestContext || {}));\n\n\tlet method = 'INVOKE';\n\tlet path = '/';\n\tlet route: string | undefined;\n\tlet host: string | undefined;\n\tlet scheme: 'http' | 'https' | undefined;\n\tlet userAgent: string | undefined;\n\tlet clientIp: string | undefined;\n\tlet requestId: string | undefined;\n\n\tif (isV2) {\n\t\t// API Gateway v2 (HTTP API)\n\t\tconst http = event.requestContext.http;\n\t\tmethod = http.method;\n\t\tpath = event.rawPath || http.path;\n\t\troute = event.routeKey?.replace(/^[A-Z]+\\s+/, ''); // Remove HTTP method prefix\n\t\thost = event.headers?.host;\n\t\tscheme = 'https';\n\t\tuserAgent = http.userAgent;\n\t\tclientIp = http.sourceIp;\n\t\trequestId = event.requestContext.requestId;\n\t} else if (isV1) {\n\t\t// API Gateway v1 (REST API)\n\t\tmethod = event.httpMethod;\n\t\tpath = event.path;\n\t\troute = event.resource;\n\t\thost = event.headers?.Host || event.headers?.host;\n\t\tscheme = 'https';\n\t\tuserAgent = event.headers?.['User-Agent'] || event.headers?.['user-agent'];\n\t\tclientIp = event.requestContext?.identity?.sourceIp;\n\t\trequestId = event.requestContext?.requestId;\n\t} else if ('httpMethod' in event) {\n\t\t// ALB event\n\t\tmethod = event.httpMethod;\n\t\tpath = event.path;\n\t\thost = event.headers?.host;\n\t\tuserAgent = event.headers?.['user-agent'] || event.headers?.['User-Agent'];\n\t\tclientIp = event.headers?.['x-forwarded-for']?.split(',')[0]?.trim();\n\t}\n\n\tconst attrs: HttpSpanAttributes = {\n\t\tmethod,\n\t\tpath,\n\t\troute,\n\t\thost,\n\t\tscheme,\n\t\tuserAgent,\n\t\tclientIp,\n\t\trequestId: requestId || lambdaContext.awsRequestId,\n\t};\n\n\t// Add endpoint metadata if extractors provided\n\tif (options.getEndpointName || options.getOperationId) {\n\t\tattrs.endpoint = {\n\t\t\tname: options.getEndpointName?.(event),\n\t\t\toperationId: options.getOperationId?.(event),\n\t\t};\n\t}\n\n\t// Add user metadata if extractor provided\n\tif (options.getUserId) {\n\t\tconst userId = options.getUserId(event);\n\t\tif (userId) {\n\t\t\tattrs.user = { userId };\n\t\t}\n\t}\n\n\treturn attrs;\n}\n\n/**\n * Normalize headers to lowercase keys\n */\nfunction normalizeHeaders(\n\theaders: Record<string, string | string[] | undefined>,\n): Record<string, string | string[] | undefined> {\n\tconst normalized: Record<string, string | string[] | undefined> = {};\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tnormalized[key.toLowerCase()] = value;\n\t}\n\treturn normalized;\n}\n\n/**\n * Run a function within the span context from a Lambda event\n *\n * @example\n * ```typescript\n * await withEventContext(event, async () => {\n * // Any spans created here will be children of the request span\n * await doSomething();\n * });\n * ```\n */\nexport async function withEventContext<T>(\n\tevent: any,\n\tfn: () => Promise<T>,\n): Promise<T> {\n\tconst ctx = getContextFromEvent(event);\n\tif (!ctx) {\n\t\treturn fn();\n\t}\n\treturn context.with(ctx, fn);\n}\n"],"mappings":";;;;AAuDA,MAAM,cAAc,OAAO,iBAAiB;AAC5C,MAAM,iBAAiB,OAAO,oBAAoB;;;;AAKlD,SAAgB,iBAAiBA,OAA8B;AAC9D,QAAO,QAAQ;AACf;;;;AAKD,SAAgB,oBAAoBA,OAAiB;AACpD,QAAO,QAAQ;AACf;;;;;;;;;;;;;AAcD,SAAgB,oBACfC,UAAsC,CAAE,GACQ;AAChD,QAAO;EACN,QAAQ,OAAO,YAAY;AAE1B,OAAI,QAAQ,aAAa,QAAQ,MAAM,CACtC;GAGD,MAAM,QAAQ,QAAQ;GACtB,MAAM,gBAAgB,QAAQ;GAG9B,MAAM,UAAU,iBAAiB,MAAM,WAAW,CAAE,EAAC;GACrD,MAAM,gBAAgB,oBAAoB,QAAQ;GAGlD,MAAM,QAAQ,oBAAoB,OAAO,eAAe,QAAQ;GAGhE,MAAM,OAAO,qBAAqB,OAAO,cAAc;AAGvD,SAAM,eAAe;AACrB,SAAM,kBAAkB,MAAM,QAAQ,eAAe,KAAK;AAG1D,QAAK,aAAa,sBAAsB,cAAc,aAAa;AACnE,QAAK,aAAa,aAAa,cAAc,aAAa;AAE1D,OAAI,QAAQ,cAAc,MAAM,MAAM;IACrC,MAAM,iBACE,MAAM,SAAS,WACnB,MAAM,OACN,KAAK,UAAU,MAAM,KAAK;AAE9B,SAAK,aACJ,qBACA,QAAQ,SAAS,QAAQ,EAAE,QAAQ,MAAM,GAAG,KAAK,CAAC,OAAO,QACzD;GACD;EACD;EAED,OAAO,OAAO,YAAY;GACzB,MAAM,OAAO,iBAAiB,QAAQ,MAAM;AAC5C,QAAK,KACJ;GAGD,MAAM,WAAW,QAAQ;GACzB,MAAM,oBACE,UAAU,eAAe,WAAW,SAAS,aAAa;AAElE,OAAI,QAAQ,sBAAsB,UAAU,MAAM;IACjD,MAAM,iBACE,SAAS,SAAS,WACtB,SAAS,OACT,KAAK,UAAU,SAAS,KAAK;AACjC,SAAK,aACJ,sBACA,QAAQ,SAAS,QAAQ,EAAE,QAAQ,MAAM,GAAG,KAAK,CAAC,OAAO,QACzD;GACD;AAED,eAAY,MAAM,EAAE,WAAY,EAAC;EACjC;EAED,SAAS,OAAO,YAAY;GAC3B,MAAM,OAAO,iBAAiB,QAAQ,MAAM;AAC5C,QAAK,KACJ;GAGD,MAAM,QAAQ,QAAQ;GACtB,MAAM,WAAW,QAAQ;GAGzB,IAAI,aAAa;AACjB,OAAI,UAAU,WACb,cAAa,SAAS;YACZ,SAAS,gBAAgB,MACnC,cAAc,MAAc;AAG7B,eACC,MACA,EAAE,WAAY,GACd,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,EACxD;EACD;CACD;AACD;;;;AAKD,SAAS,oBACRD,OACAE,eACAD,SACqB;CAErB,MAAM,OACL,oBAAoB,SAAS,WAAW,MAAM,kBAAkB,CAAE;CACnE,MAAM,OACL,oBAAoB,SACpB,gBAAgB,WACd,WAAW,MAAM,kBAAkB,CAAE;CAExC,IAAI,SAAS;CACb,IAAI,OAAO;CACX,IAAIE;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;CACJ,IAAIC;AAEJ,KAAI,MAAM;EAET,MAAM,OAAO,MAAM,eAAe;AAClC,WAAS,KAAK;AACd,SAAO,MAAM,WAAW,KAAK;AAC7B,UAAQ,MAAM,UAAU,QAAQ,cAAc,GAAG;AACjD,SAAO,MAAM,SAAS;AACtB,WAAS;AACT,cAAY,KAAK;AACjB,aAAW,KAAK;AAChB,cAAY,MAAM,eAAe;CACjC,WAAU,MAAM;AAEhB,WAAS,MAAM;AACf,SAAO,MAAM;AACb,UAAQ,MAAM;AACd,SAAO,MAAM,SAAS,QAAQ,MAAM,SAAS;AAC7C,WAAS;AACT,cAAY,MAAM,UAAU,iBAAiB,MAAM,UAAU;AAC7D,aAAW,MAAM,gBAAgB,UAAU;AAC3C,cAAY,MAAM,gBAAgB;CAClC,WAAU,gBAAgB,OAAO;AAEjC,WAAS,MAAM;AACf,SAAO,MAAM;AACb,SAAO,MAAM,SAAS;AACtB,cAAY,MAAM,UAAU,iBAAiB,MAAM,UAAU;AAC7D,aAAW,MAAM,UAAU,oBAAoB,MAAM,IAAI,CAAC,IAAI,MAAM;CACpE;CAED,MAAMC,QAA4B;EACjC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAW,aAAa,cAAc;CACtC;AAGD,KAAI,QAAQ,mBAAmB,QAAQ,eACtC,OAAM,WAAW;EAChB,MAAM,QAAQ,kBAAkB,MAAM;EACtC,aAAa,QAAQ,iBAAiB,MAAM;CAC5C;AAIF,KAAI,QAAQ,WAAW;EACtB,MAAM,SAAS,QAAQ,UAAU,MAAM;AACvC,MAAI,OACH,OAAM,OAAO,EAAE,OAAQ;CAExB;AAED,QAAO;AACP;;;;AAKD,SAAS,iBACRC,SACgD;CAChD,MAAMC,aAA4D,CAAE;AACpE,MAAK,MAAM,CAAC,KAAK,MAAM,IAAI,OAAO,QAAQ,QAAQ,CACjD,YAAW,IAAI,aAAa,IAAI;AAEjC,QAAO;AACP;;;;;;;;;;;;AAaD,eAAsB,iBACrBX,OACAY,IACa;CACb,MAAM,MAAM,oBAAoB,MAAM;AACtC,MAAK,IACJ,QAAO,IAAI;AAEZ,QAAO,QAAQ,KAAK,KAAK,GAAG;AAC5B"}
|