apitally 0.25.8 → 1.0.0-beta.1
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/README.md +228 -178
- package/dist/activation.cjs +393 -0
- package/dist/activation.cjs.map +1 -0
- package/dist/activation.d.cts +42 -0
- package/dist/activation.d.ts +42 -0
- package/dist/activation.js +383 -0
- package/dist/activation.js.map +1 -0
- package/dist/adonisjs/configure.cjs +86 -30
- package/dist/adonisjs/configure.cjs.map +1 -1
- package/dist/adonisjs/configure.d.cts +0 -4
- package/dist/adonisjs/configure.d.ts +0 -4
- package/dist/adonisjs/configure.js +83 -29
- package/dist/adonisjs/configure.js.map +1 -1
- package/dist/adonisjs/index.cjs +38 -21
- package/dist/adonisjs/index.cjs.map +1 -1
- package/dist/adonisjs/index.d.cts +5 -14
- package/dist/adonisjs/index.d.ts +5 -14
- package/dist/adonisjs/index.js +39 -18
- package/dist/adonisjs/index.js.map +1 -1
- package/dist/adonisjs/middleware.cjs +43 -109
- package/dist/adonisjs/middleware.cjs.map +1 -1
- package/dist/adonisjs/middleware.d.cts +1 -16
- package/dist/adonisjs/middleware.d.ts +1 -16
- package/dist/adonisjs/middleware.js +43 -110
- package/dist/adonisjs/middleware.js.map +1 -1
- package/dist/adonisjs/provider.cjs +19 -87
- package/dist/adonisjs/provider.cjs.map +1 -1
- package/dist/adonisjs/provider.d.cts +0 -22
- package/dist/adonisjs/provider.d.ts +0 -22
- package/dist/adonisjs/provider.js +19 -88
- package/dist/adonisjs/provider.js.map +1 -1
- package/dist/adonisjs/stubs/config/apitally.stub +11 -15
- package/dist/bodyCapture.cjs +128 -0
- package/dist/bodyCapture.cjs.map +1 -0
- package/dist/bodyCapture.d.cts +31 -0
- package/dist/bodyCapture.d.ts +31 -0
- package/dist/bodyCapture.js +101 -0
- package/dist/bodyCapture.js.map +1 -0
- package/dist/config.cjs +227 -0
- package/dist/config.cjs.map +1 -0
- package/dist/config.d.cts +45 -0
- package/dist/config.d.ts +45 -0
- package/dist/config.js +192 -0
- package/dist/config.js.map +1 -0
- package/dist/consumer.cjs +98 -0
- package/dist/consumer.cjs.map +1 -0
- package/dist/consumer.d.cts +15 -0
- package/dist/consumer.d.ts +15 -0
- package/dist/consumer.js +78 -0
- package/dist/consumer.js.map +1 -0
- package/dist/context.cjs +68 -0
- package/dist/context.cjs.map +1 -0
- package/dist/context.d.cts +33 -0
- package/dist/context.d.ts +33 -0
- package/dist/context.js +40 -0
- package/dist/context.js.map +1 -0
- package/dist/elysia/index.cjs +12 -3
- package/dist/elysia/index.cjs.map +1 -1
- package/dist/elysia/index.d.cts +8 -16
- package/dist/elysia/index.d.ts +8 -16
- package/dist/elysia/index.js +10 -2
- package/dist/elysia/index.js.map +1 -1
- package/dist/elysia/middleware.cjs +261 -0
- package/dist/elysia/middleware.cjs.map +1 -0
- package/dist/elysia/middleware.d.cts +14 -0
- package/dist/elysia/middleware.d.ts +14 -0
- package/dist/elysia/middleware.js +250 -0
- package/dist/elysia/middleware.js.map +1 -0
- package/dist/{otel/index.cjs → elysia/routes.cjs} +16 -7
- package/dist/elysia/routes.cjs.map +1 -0
- package/dist/elysia/routes.d.cts +7 -0
- package/dist/elysia/routes.d.ts +7 -0
- package/dist/elysia/routes.js +14 -0
- package/dist/elysia/routes.js.map +1 -0
- package/dist/exceptions.cjs +81 -0
- package/dist/exceptions.cjs.map +1 -0
- package/dist/exceptions.d.cts +7 -0
- package/dist/exceptions.d.ts +7 -0
- package/dist/exceptions.js +55 -0
- package/dist/exceptions.js.map +1 -0
- package/dist/exportSerialization.cjs +56 -0
- package/dist/exportSerialization.cjs.map +1 -0
- package/dist/exportSerialization.d.cts +7 -0
- package/dist/exportSerialization.d.ts +7 -0
- package/dist/exportSerialization.js +32 -0
- package/dist/exportSerialization.js.map +1 -0
- package/dist/exportWorker.cjs +305 -0
- package/dist/exportWorker.cjs.map +1 -0
- package/dist/exportWorker.d.cts +46 -0
- package/dist/exportWorker.d.ts +46 -0
- package/dist/exportWorker.js +279 -0
- package/dist/exportWorker.js.map +1 -0
- package/dist/express/index.cjs +9 -4
- package/dist/express/index.cjs.map +1 -1
- package/dist/express/index.d.cts +7 -10
- package/dist/express/index.d.ts +7 -10
- package/dist/express/index.js +8 -2
- package/dist/express/index.js.map +1 -1
- package/dist/express/install.cjs +45 -0
- package/dist/express/install.cjs.map +1 -0
- package/dist/express/install.d.cts +10 -0
- package/dist/express/install.d.ts +10 -0
- package/dist/express/install.js +21 -0
- package/dist/express/install.js.map +1 -0
- package/dist/express/middleware.cjs +87 -331
- package/dist/express/middleware.cjs.map +1 -1
- package/dist/express/middleware.d.cts +3 -21
- package/dist/express/middleware.d.ts +3 -21
- package/dist/express/middleware.js +91 -327
- package/dist/express/middleware.js.map +1 -1
- package/dist/express/register.cjs +20 -0
- package/dist/express/register.cjs.map +1 -0
- package/dist/express/register.d.cts +2 -0
- package/dist/express/register.d.ts +2 -0
- package/dist/express/register.js +19 -0
- package/dist/express/register.js.map +1 -0
- package/dist/express/routes.cjs +429 -0
- package/dist/express/routes.cjs.map +1 -0
- package/dist/express/routes.d.cts +14 -0
- package/dist/express/routes.d.ts +14 -0
- package/dist/express/routes.js +401 -0
- package/dist/express/routes.js.map +1 -0
- package/dist/fastify/index.cjs +10 -5
- package/dist/fastify/index.cjs.map +1 -1
- package/dist/fastify/index.d.cts +7 -11
- package/dist/fastify/index.d.ts +7 -11
- package/dist/fastify/index.js +9 -3
- package/dist/fastify/index.js.map +1 -1
- package/dist/{loggers/index.cjs → fastify/install.cjs} +17 -19
- package/dist/fastify/install.cjs.map +1 -0
- package/dist/fastify/install.d.cts +10 -0
- package/dist/fastify/install.d.ts +10 -0
- package/dist/fastify/install.js +15 -0
- package/dist/fastify/install.js.map +1 -0
- package/dist/fastify/middleware.cjs +135 -0
- package/dist/fastify/middleware.cjs.map +1 -0
- package/dist/fastify/middleware.d.cts +7 -0
- package/dist/fastify/middleware.d.ts +7 -0
- package/dist/fastify/middleware.js +114 -0
- package/dist/fastify/middleware.js.map +1 -0
- package/dist/{common/paramValidation.cjs → fastify/routes.cjs} +15 -17
- package/dist/fastify/routes.cjs.map +1 -0
- package/dist/fastify/routes.d.cts +8 -0
- package/dist/fastify/routes.d.ts +8 -0
- package/dist/fastify/routes.js +14 -0
- package/dist/fastify/routes.js.map +1 -0
- package/dist/h3/index.cjs +28 -4
- package/dist/h3/index.cjs.map +1 -1
- package/dist/h3/index.d.cts +8 -10
- package/dist/h3/index.d.ts +8 -10
- package/dist/h3/index.js +26 -2
- package/dist/h3/index.js.map +1 -1
- package/dist/h3/middleware.cjs +210 -0
- package/dist/h3/middleware.cjs.map +1 -0
- package/dist/h3/middleware.d.cts +5 -0
- package/dist/h3/middleware.d.ts +5 -0
- package/dist/h3/middleware.js +194 -0
- package/dist/h3/middleware.js.map +1 -0
- package/dist/h3/routes.cjs +66 -0
- package/dist/h3/routes.cjs.map +1 -0
- package/dist/h3/routes.d.cts +8 -0
- package/dist/h3/routes.d.ts +8 -0
- package/dist/h3/routes.js +41 -0
- package/dist/h3/routes.js.map +1 -0
- package/dist/hapi/index.cjs +15 -4
- package/dist/hapi/index.cjs.map +1 -1
- package/dist/hapi/index.d.cts +8 -10
- package/dist/hapi/index.d.ts +8 -10
- package/dist/hapi/index.js +13 -2
- package/dist/hapi/index.js.map +1 -1
- package/dist/{loggers/hapi.cjs → hapi/install.cjs} +20 -26
- package/dist/hapi/install.cjs.map +1 -0
- package/dist/hapi/install.d.cts +8 -0
- package/dist/hapi/install.d.ts +8 -0
- package/dist/hapi/install.js +22 -0
- package/dist/hapi/install.js.map +1 -0
- package/dist/hapi/middleware.cjs +158 -0
- package/dist/hapi/middleware.cjs.map +1 -0
- package/dist/hapi/middleware.d.cts +5 -0
- package/dist/hapi/middleware.d.ts +5 -0
- package/dist/hapi/middleware.js +137 -0
- package/dist/hapi/middleware.js.map +1 -0
- package/dist/{common/logging.cjs → hapi/routes.cjs} +14 -17
- package/dist/hapi/routes.cjs.map +1 -0
- package/dist/hapi/routes.d.cts +8 -0
- package/dist/hapi/routes.d.ts +8 -0
- package/dist/hapi/routes.js +12 -0
- package/dist/hapi/routes.js.map +1 -0
- package/dist/hono/index.cjs +13 -3
- package/dist/hono/index.cjs.map +1 -1
- package/dist/hono/index.d.cts +7 -10
- package/dist/hono/index.d.ts +7 -10
- package/dist/hono/index.js +13 -2
- package/dist/hono/index.js.map +1 -1
- package/dist/hono/middleware.cjs +219 -127
- package/dist/hono/middleware.cjs.map +1 -1
- package/dist/hono/middleware.d.cts +3 -18
- package/dist/hono/middleware.d.ts +3 -18
- package/dist/hono/middleware.js +229 -126
- package/dist/hono/middleware.js.map +1 -1
- package/dist/hono/routes.cjs +74 -0
- package/dist/hono/routes.cjs.map +1 -0
- package/dist/hono/routes.d.cts +8 -0
- package/dist/hono/routes.d.ts +8 -0
- package/dist/hono/routes.js +49 -0
- package/dist/hono/routes.js.map +1 -0
- package/dist/index.cjs +108 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +29 -1
- package/dist/index.d.ts +29 -1
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -1
- package/dist/koa/index.cjs +13 -3
- package/dist/koa/index.cjs.map +1 -1
- package/dist/koa/index.d.cts +7 -10
- package/dist/koa/index.d.ts +7 -10
- package/dist/koa/index.js +13 -2
- package/dist/koa/index.js.map +1 -1
- package/dist/koa/middleware.cjs +85 -184
- package/dist/koa/middleware.cjs.map +1 -1
- package/dist/koa/middleware.d.cts +3 -13
- package/dist/koa/middleware.d.ts +3 -13
- package/dist/koa/middleware.js +88 -183
- package/dist/koa/middleware.js.map +1 -1
- package/dist/koa/routes.cjs +71 -0
- package/dist/koa/routes.cjs.map +1 -0
- package/dist/koa/routes.d.cts +8 -0
- package/dist/koa/routes.d.ts +8 -0
- package/dist/koa/routes.js +46 -0
- package/dist/koa/routes.js.map +1 -0
- package/dist/logCapture.cjs +417 -0
- package/dist/logCapture.cjs.map +1 -0
- package/dist/logCapture.d.cts +18 -0
- package/dist/logCapture.d.ts +18 -0
- package/dist/logCapture.js +390 -0
- package/dist/logCapture.js.map +1 -0
- package/dist/logRecordExporter.cjs +51 -0
- package/dist/logRecordExporter.cjs.map +1 -0
- package/dist/logRecordExporter.d.cts +14 -0
- package/dist/logRecordExporter.d.ts +14 -0
- package/dist/logRecordExporter.js +27 -0
- package/dist/logRecordExporter.js.map +1 -0
- package/dist/logRecordProcessor.cjs +137 -0
- package/dist/logRecordProcessor.cjs.map +1 -0
- package/dist/logRecordProcessor.d.cts +27 -0
- package/dist/logRecordProcessor.d.ts +27 -0
- package/dist/logRecordProcessor.js +113 -0
- package/dist/logRecordProcessor.js.map +1 -0
- package/dist/logger.cjs +62 -0
- package/dist/logger.cjs.map +1 -0
- package/dist/logger.d.cts +7 -0
- package/dist/logger.d.ts +7 -0
- package/dist/logger.js +34 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics.cjs +171 -0
- package/dist/metrics.cjs.map +1 -0
- package/dist/metrics.d.cts +26 -0
- package/dist/metrics.d.ts +26 -0
- package/dist/metrics.js +153 -0
- package/dist/metrics.js.map +1 -0
- package/dist/nestjs/index.cjs +81 -71
- package/dist/nestjs/index.cjs.map +1 -1
- package/dist/nestjs/index.d.cts +4 -11
- package/dist/nestjs/index.d.ts +4 -11
- package/dist/nestjs/index.js +81 -61
- package/dist/nestjs/index.js.map +1 -1
- package/dist/packageVersion.cjs +67 -0
- package/dist/packageVersion.cjs.map +1 -0
- package/dist/packageVersion.d.cts +5 -0
- package/dist/packageVersion.d.ts +5 -0
- package/dist/packageVersion.js +39 -0
- package/dist/packageVersion.js.map +1 -0
- package/dist/providers.cjs +149 -0
- package/dist/providers.cjs.map +1 -0
- package/dist/providers.d.cts +15 -0
- package/dist/providers.d.ts +15 -0
- package/dist/providers.js +136 -0
- package/dist/providers.js.map +1 -0
- package/dist/redaction.cjs +116 -0
- package/dist/redaction.cjs.map +1 -0
- package/dist/redaction.d.cts +17 -0
- package/dist/redaction.d.ts +17 -0
- package/dist/redaction.js +98 -0
- package/dist/redaction.js.map +1 -0
- package/dist/{common/packageVersions.cjs → requestAttributes.cjs} +21 -19
- package/dist/requestAttributes.cjs.map +1 -0
- package/dist/requestAttributes.d.cts +10 -0
- package/dist/requestAttributes.d.ts +10 -0
- package/dist/requestAttributes.js +22 -0
- package/dist/requestAttributes.js.map +1 -0
- package/dist/requestObservation.cjs +246 -0
- package/dist/requestObservation.cjs.map +1 -0
- package/dist/requestObservation.d.cts +62 -0
- package/dist/requestObservation.d.ts +62 -0
- package/dist/requestObservation.js +226 -0
- package/dist/requestObservation.js.map +1 -0
- package/dist/requestObservationNode.cjs +193 -0
- package/dist/requestObservationNode.cjs.map +1 -0
- package/dist/requestObservationNode.d.cts +31 -0
- package/dist/requestObservationNode.d.ts +31 -0
- package/dist/requestObservationNode.js +170 -0
- package/dist/requestObservationNode.js.map +1 -0
- package/dist/requestObservationWeb.cjs +202 -0
- package/dist/requestObservationWeb.cjs.map +1 -0
- package/dist/requestObservationWeb.d.cts +34 -0
- package/dist/requestObservationWeb.d.ts +34 -0
- package/dist/requestObservationWeb.js +182 -0
- package/dist/requestObservationWeb.js.map +1 -0
- package/dist/sentry.cjs +103 -0
- package/dist/sentry.cjs.map +1 -0
- package/dist/sentry.d.cts +3 -0
- package/dist/sentry.d.ts +3 -0
- package/dist/sentry.js +79 -0
- package/dist/sentry.js.map +1 -0
- package/dist/serverErrors.cjs +118 -0
- package/dist/serverErrors.cjs.map +1 -0
- package/dist/serverErrors.d.cts +8 -0
- package/dist/serverErrors.d.ts +8 -0
- package/dist/serverErrors.js +91 -0
- package/dist/serverErrors.js.map +1 -0
- package/dist/spanExporter.cjs +217 -0
- package/dist/spanExporter.cjs.map +1 -0
- package/dist/spanExporter.d.cts +34 -0
- package/dist/spanExporter.d.ts +34 -0
- package/dist/spanExporter.js +193 -0
- package/dist/spanExporter.js.map +1 -0
- package/dist/spanProcessor.cjs +535 -0
- package/dist/spanProcessor.cjs.map +1 -0
- package/dist/spanProcessor.d.cts +70 -0
- package/dist/spanProcessor.d.ts +70 -0
- package/dist/spanProcessor.js +513 -0
- package/dist/spanProcessor.js.map +1 -0
- package/dist/spool.cjs +314 -0
- package/dist/spool.cjs.map +1 -0
- package/dist/spool.d.cts +49 -0
- package/dist/spool.d.ts +49 -0
- package/dist/spool.js +297 -0
- package/dist/spool.js.map +1 -0
- package/dist/startup.cjs +98 -0
- package/dist/startup.cjs.map +1 -0
- package/dist/startup.d.cts +15 -0
- package/dist/startup.d.ts +15 -0
- package/dist/startup.js +73 -0
- package/dist/startup.js.map +1 -0
- package/dist/tracing.cjs +116 -0
- package/dist/tracing.cjs.map +1 -0
- package/dist/tracing.d.cts +5 -0
- package/dist/tracing.d.ts +5 -0
- package/dist/tracing.js +96 -0
- package/dist/tracing.js.map +1 -0
- package/dist/validationErrors.cjs +229 -0
- package/dist/validationErrors.cjs.map +1 -0
- package/dist/validationErrors.d.cts +21 -0
- package/dist/validationErrors.d.ts +21 -0
- package/dist/validationErrors.js +195 -0
- package/dist/validationErrors.js.map +1 -0
- package/package.json +113 -154
- package/dist/common/client.cjs +0 -335
- package/dist/common/client.cjs.map +0 -1
- package/dist/common/client.d.cts +0 -50
- package/dist/common/client.d.ts +0 -50
- package/dist/common/client.js +0 -302
- package/dist/common/client.js.map +0 -1
- package/dist/common/consumerRegistry.cjs +0 -86
- package/dist/common/consumerRegistry.cjs.map +0 -1
- package/dist/common/consumerRegistry.d.cts +0 -20
- package/dist/common/consumerRegistry.d.ts +0 -20
- package/dist/common/consumerRegistry.js +0 -62
- package/dist/common/consumerRegistry.js.map +0 -1
- package/dist/common/headers.cjs +0 -55
- package/dist/common/headers.cjs.map +0 -1
- package/dist/common/headers.d.cts +0 -6
- package/dist/common/headers.d.ts +0 -6
- package/dist/common/headers.js +0 -31
- package/dist/common/headers.js.map +0 -1
- package/dist/common/instance.cjs +0 -158
- package/dist/common/instance.cjs.map +0 -1
- package/dist/common/instance.d.cts +0 -4
- package/dist/common/instance.d.ts +0 -4
- package/dist/common/instance.js +0 -134
- package/dist/common/instance.js.map +0 -1
- package/dist/common/logging.cjs.map +0 -1
- package/dist/common/logging.d.cts +0 -11
- package/dist/common/logging.d.ts +0 -11
- package/dist/common/logging.js +0 -17
- package/dist/common/logging.js.map +0 -1
- package/dist/common/packageVersions.cjs.map +0 -1
- package/dist/common/packageVersions.d.cts +0 -3
- package/dist/common/packageVersions.d.ts +0 -3
- package/dist/common/packageVersions.js +0 -21
- package/dist/common/packageVersions.js.map +0 -1
- package/dist/common/paramValidation.cjs.map +0 -1
- package/dist/common/paramValidation.d.cts +0 -4
- package/dist/common/paramValidation.d.ts +0 -4
- package/dist/common/paramValidation.js +0 -17
- package/dist/common/paramValidation.js.map +0 -1
- package/dist/common/requestCounter.cjs +0 -114
- package/dist/common/requestCounter.cjs.map +0 -1
- package/dist/common/requestCounter.d.cts +0 -24
- package/dist/common/requestCounter.d.ts +0 -24
- package/dist/common/requestCounter.js +0 -91
- package/dist/common/requestCounter.js.map +0 -1
- package/dist/common/requestLogger.cjs +0 -543
- package/dist/common/requestLogger.cjs.map +0 -1
- package/dist/common/requestLogger.d.cts +0 -85
- package/dist/common/requestLogger.d.ts +0 -85
- package/dist/common/requestLogger.js +0 -508
- package/dist/common/requestLogger.js.map +0 -1
- package/dist/common/resources.cjs +0 -49
- package/dist/common/resources.cjs.map +0 -1
- package/dist/common/resources.d.cts +0 -6
- package/dist/common/resources.d.ts +0 -6
- package/dist/common/resources.js +0 -26
- package/dist/common/resources.js.map +0 -1
- package/dist/common/response.cjs +0 -104
- package/dist/common/response.cjs.map +0 -1
- package/dist/common/response.d.cts +0 -15
- package/dist/common/response.d.ts +0 -15
- package/dist/common/response.js +0 -80
- package/dist/common/response.js.map +0 -1
- package/dist/common/sentry.cjs +0 -56
- package/dist/common/sentry.cjs.map +0 -1
- package/dist/common/sentry.d.cts +0 -6
- package/dist/common/sentry.d.ts +0 -6
- package/dist/common/sentry.js +0 -23
- package/dist/common/sentry.js.map +0 -1
- package/dist/common/serverErrorCounter.cjs +0 -123
- package/dist/common/serverErrorCounter.cjs.map +0 -1
- package/dist/common/serverErrorCounter.d.cts +0 -23
- package/dist/common/serverErrorCounter.d.ts +0 -23
- package/dist/common/serverErrorCounter.js +0 -98
- package/dist/common/serverErrorCounter.js.map +0 -1
- package/dist/common/spanCollector.cjs +0 -201
- package/dist/common/spanCollector.cjs.map +0 -1
- package/dist/common/spanCollector.d.cts +0 -45
- package/dist/common/spanCollector.d.ts +0 -45
- package/dist/common/spanCollector.js +0 -177
- package/dist/common/spanCollector.js.map +0 -1
- package/dist/common/tempGzipFile.cjs +0 -127
- package/dist/common/tempGzipFile.cjs.map +0 -1
- package/dist/common/tempGzipFile.d.cts +0 -19
- package/dist/common/tempGzipFile.d.ts +0 -19
- package/dist/common/tempGzipFile.js +0 -103
- package/dist/common/tempGzipFile.js.map +0 -1
- package/dist/common/types.cjs +0 -17
- package/dist/common/types.cjs.map +0 -1
- package/dist/common/types.d.cts +0 -95
- package/dist/common/types.d.ts +0 -95
- package/dist/common/types.js +0 -1
- package/dist/common/types.js.map +0 -1
- package/dist/common/validationErrorCounter.cjs +0 -79
- package/dist/common/validationErrorCounter.cjs.map +0 -1
- package/dist/common/validationErrorCounter.d.cts +0 -20
- package/dist/common/validationErrorCounter.d.ts +0 -20
- package/dist/common/validationErrorCounter.js +0 -56
- package/dist/common/validationErrorCounter.js.map +0 -1
- package/dist/elysia/plugin.cjs +0 -242
- package/dist/elysia/plugin.cjs.map +0 -1
- package/dist/elysia/plugin.d.cts +0 -70
- package/dist/elysia/plugin.d.ts +0 -70
- package/dist/elysia/plugin.js +0 -219
- package/dist/elysia/plugin.js.map +0 -1
- package/dist/elysia/utils.cjs +0 -77
- package/dist/elysia/utils.cjs.map +0 -1
- package/dist/elysia/utils.d.cts +0 -14
- package/dist/elysia/utils.d.ts +0 -14
- package/dist/elysia/utils.js +0 -54
- package/dist/elysia/utils.js.map +0 -1
- package/dist/express/utils.cjs +0 -217
- package/dist/express/utils.cjs.map +0 -1
- package/dist/express/utils.d.cts +0 -37
- package/dist/express/utils.d.ts +0 -37
- package/dist/express/utils.js +0 -189
- package/dist/express/utils.js.map +0 -1
- package/dist/fastify/plugin.cjs +0 -319
- package/dist/fastify/plugin.cjs.map +0 -1
- package/dist/fastify/plugin.d.cts +0 -34
- package/dist/fastify/plugin.d.ts +0 -34
- package/dist/fastify/plugin.js +0 -284
- package/dist/fastify/plugin.js.map +0 -1
- package/dist/h3/plugin.cjs +0 -183
- package/dist/h3/plugin.cjs.map +0 -1
- package/dist/h3/plugin.d.cts +0 -27
- package/dist/h3/plugin.d.ts +0 -27
- package/dist/h3/plugin.js +0 -159
- package/dist/h3/plugin.js.map +0 -1
- package/dist/h3/utils.cjs +0 -77
- package/dist/h3/utils.cjs.map +0 -1
- package/dist/h3/utils.d.cts +0 -14
- package/dist/h3/utils.d.ts +0 -14
- package/dist/h3/utils.js +0 -54
- package/dist/h3/utils.js.map +0 -1
- package/dist/hapi/plugin.cjs +0 -212
- package/dist/hapi/plugin.cjs.map +0 -1
- package/dist/hapi/plugin.d.cts +0 -40
- package/dist/hapi/plugin.d.ts +0 -40
- package/dist/hapi/plugin.js +0 -188
- package/dist/hapi/plugin.js.map +0 -1
- package/dist/hapi/utils.cjs +0 -77
- package/dist/hapi/utils.cjs.map +0 -1
- package/dist/hapi/utils.d.cts +0 -16
- package/dist/hapi/utils.d.ts +0 -16
- package/dist/hapi/utils.js +0 -53
- package/dist/hapi/utils.js.map +0 -1
- package/dist/hono/utils.cjs +0 -113
- package/dist/hono/utils.cjs.map +0 -1
- package/dist/hono/utils.d.cts +0 -16
- package/dist/hono/utils.d.ts +0 -16
- package/dist/hono/utils.js +0 -88
- package/dist/hono/utils.js.map +0 -1
- package/dist/loggers/console.cjs +0 -67
- package/dist/loggers/console.cjs.map +0 -1
- package/dist/loggers/console.d.cts +0 -11
- package/dist/loggers/console.d.ts +0 -11
- package/dist/loggers/console.js +0 -44
- package/dist/loggers/console.js.map +0 -1
- package/dist/loggers/hapi.cjs.map +0 -1
- package/dist/loggers/hapi.d.cts +0 -12
- package/dist/loggers/hapi.d.ts +0 -12
- package/dist/loggers/hapi.js +0 -29
- package/dist/loggers/hapi.js.map +0 -1
- package/dist/loggers/index.cjs.map +0 -1
- package/dist/loggers/index.d.cts +0 -13
- package/dist/loggers/index.d.ts +0 -13
- package/dist/loggers/index.js +0 -13
- package/dist/loggers/index.js.map +0 -1
- package/dist/loggers/nestjs.cjs +0 -104
- package/dist/loggers/nestjs.cjs.map +0 -1
- package/dist/loggers/nestjs.d.cts +0 -11
- package/dist/loggers/nestjs.d.ts +0 -11
- package/dist/loggers/nestjs.js +0 -71
- package/dist/loggers/nestjs.js.map +0 -1
- package/dist/loggers/pino.cjs +0 -152
- package/dist/loggers/pino.cjs.map +0 -1
- package/dist/loggers/pino.d.cts +0 -11
- package/dist/loggers/pino.d.ts +0 -11
- package/dist/loggers/pino.js +0 -119
- package/dist/loggers/pino.js.map +0 -1
- package/dist/loggers/utils.cjs +0 -64
- package/dist/loggers/utils.cjs.map +0 -1
- package/dist/loggers/utils.d.cts +0 -6
- package/dist/loggers/utils.d.ts +0 -6
- package/dist/loggers/utils.js +0 -40
- package/dist/loggers/utils.js.map +0 -1
- package/dist/loggers/winston.cjs +0 -101
- package/dist/loggers/winston.cjs.map +0 -1
- package/dist/loggers/winston.d.cts +0 -11
- package/dist/loggers/winston.d.ts +0 -11
- package/dist/loggers/winston.js +0 -68
- package/dist/loggers/winston.js.map +0 -1
- package/dist/otel/index.cjs.map +0 -1
- package/dist/otel/index.d.cts +0 -2
- package/dist/otel/index.d.ts +0 -2
- package/dist/otel/index.js +0 -5
- package/dist/otel/index.js.map +0 -1
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { ReadWriteLogRecord } from '@opentelemetry/sdk-logs';
|
|
2
|
+
import { ReadableSpan } from '@opentelemetry/sdk-trace-base';
|
|
3
|
+
|
|
4
|
+
type BodyMaskingCallback = (body: Buffer, span: ReadableSpan) => Buffer | null;
|
|
5
|
+
type LogRecordMaskingCallback = (logRecord: ReadWriteLogRecord) => ReadWriteLogRecord | null | undefined;
|
|
6
|
+
type SamplingCallback = (span: ReadableSpan) => number | boolean | undefined;
|
|
7
|
+
interface ApitallyOptions {
|
|
8
|
+
writeToken?: string;
|
|
9
|
+
env?: string;
|
|
10
|
+
appVersion?: string;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
captureLogs?: boolean;
|
|
13
|
+
captureRequestHeaders?: boolean;
|
|
14
|
+
captureRequestBody?: boolean;
|
|
15
|
+
captureResponseHeaders?: boolean;
|
|
16
|
+
captureResponseBody?: boolean;
|
|
17
|
+
maskQueryParams?: RegExp[];
|
|
18
|
+
maskHeaders?: RegExp[];
|
|
19
|
+
maskBodyFields?: RegExp[];
|
|
20
|
+
maskRequestBody?: BodyMaskingCallback;
|
|
21
|
+
maskResponseBody?: BodyMaskingCallback;
|
|
22
|
+
maskLogRecord?: LogRecordMaskingCallback;
|
|
23
|
+
excludePaths?: RegExp[];
|
|
24
|
+
sampleRate?: number;
|
|
25
|
+
sampleOnRequest?: SamplingCallback;
|
|
26
|
+
sampleOnResponse?: SamplingCallback;
|
|
27
|
+
}
|
|
28
|
+
type OptionalConfigKeys = "appVersion" | "maskRequestBody" | "maskResponseBody" | "maskLogRecord" | "sampleOnRequest" | "sampleOnResponse";
|
|
29
|
+
type ApitallyConfig = Required<Omit<ApitallyOptions, OptionalConfigKeys>> & Pick<ApitallyOptions, OptionalConfigKeys> & {
|
|
30
|
+
otlpEndpoint: string;
|
|
31
|
+
};
|
|
32
|
+
declare const DEFAULT_ENV = "dev";
|
|
33
|
+
declare const DEFAULT_MASK_QUERY_PARAMS: string[];
|
|
34
|
+
declare const DEFAULT_MASK_HEADERS: string[];
|
|
35
|
+
declare const DEFAULT_MASK_BODY_FIELDS: string[];
|
|
36
|
+
declare const DEFAULT_EXCLUDE_PATHS: string[];
|
|
37
|
+
declare const EXCLUDE_USER_AGENTS: string[];
|
|
38
|
+
declare function setConfig(options?: ApitallyOptions): ApitallyConfig;
|
|
39
|
+
declare function getConfig(): ApitallyConfig;
|
|
40
|
+
declare function isValidWriteToken(value: string): boolean;
|
|
41
|
+
declare function isApitallyDisabledViaEnv(): boolean;
|
|
42
|
+
declare function matchesAny(patterns: RegExp[], value: string): boolean;
|
|
43
|
+
declare function compilePatterns(defaults: string[], userPatterns?: RegExp[]): RegExp[];
|
|
44
|
+
|
|
45
|
+
export { type ApitallyConfig, type ApitallyOptions, type BodyMaskingCallback, DEFAULT_ENV, DEFAULT_EXCLUDE_PATHS, DEFAULT_MASK_BODY_FIELDS, DEFAULT_MASK_HEADERS, DEFAULT_MASK_QUERY_PARAMS, EXCLUDE_USER_AGENTS, type LogRecordMaskingCallback, type SamplingCallback, compilePatterns, getConfig, isApitallyDisabledViaEnv, isValidWriteToken, matchesAny, setConfig };
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { logError, logWarning } from "./logger.js";
|
|
2
|
+
const DEFAULT_OTLP_ENDPOINT = "https://otlp.apitally.io";
|
|
3
|
+
const DEFAULT_ENV = "dev";
|
|
4
|
+
const DEFAULT_MASK_QUERY_PARAMS = [
|
|
5
|
+
"auth",
|
|
6
|
+
"api[-_]?key",
|
|
7
|
+
"secret",
|
|
8
|
+
"token",
|
|
9
|
+
"password",
|
|
10
|
+
"pwd"
|
|
11
|
+
];
|
|
12
|
+
const DEFAULT_MASK_HEADERS = ["auth", "api[-_]?key", "secret", "token", "cookie"];
|
|
13
|
+
const DEFAULT_MASK_BODY_FIELDS = [
|
|
14
|
+
"password",
|
|
15
|
+
"pwd",
|
|
16
|
+
"token",
|
|
17
|
+
"secret",
|
|
18
|
+
"auth",
|
|
19
|
+
"card[-_ ]?number",
|
|
20
|
+
"ccv",
|
|
21
|
+
"ssn"
|
|
22
|
+
];
|
|
23
|
+
const DEFAULT_EXCLUDE_PATHS = [
|
|
24
|
+
"/_?healthz?/?$",
|
|
25
|
+
"/_?health[-_]?checks?/?$",
|
|
26
|
+
"/_?heart[-_]?beats?/?$",
|
|
27
|
+
"/ping/?$",
|
|
28
|
+
"/ready/?$",
|
|
29
|
+
"/live/?$",
|
|
30
|
+
"/favicon(?:-[\\w-]+)?\\.(ico|png|svg)$",
|
|
31
|
+
"/apple-touch-icon(?:-[\\w-]+)?\\.png$",
|
|
32
|
+
"/robots\\.txt$",
|
|
33
|
+
"/sitemap\\.xml$",
|
|
34
|
+
"/manifest\\.json$",
|
|
35
|
+
"/site\\.webmanifest$",
|
|
36
|
+
"/service-worker\\.js$",
|
|
37
|
+
"/sw\\.js$",
|
|
38
|
+
"/\\.well-known/"
|
|
39
|
+
];
|
|
40
|
+
const EXCLUDE_USER_AGENTS = [
|
|
41
|
+
"health[-_ ]?check",
|
|
42
|
+
"microsoft-azure-application-lb",
|
|
43
|
+
"googlehc",
|
|
44
|
+
"kube-probe"
|
|
45
|
+
];
|
|
46
|
+
const WRITE_TOKEN_FORMAT = /^apt_[a-zA-Z0-9]{24}$/;
|
|
47
|
+
const TRUE_VALUES = /* @__PURE__ */ new Set(["1", "true", "yes"]);
|
|
48
|
+
const GLOBAL_CONFIG_KEY = /* @__PURE__ */ Symbol.for("apitally.config");
|
|
49
|
+
const configHolder = globalThis;
|
|
50
|
+
function setConfig(options = {}) {
|
|
51
|
+
const { config, error } = resolveConfig(options);
|
|
52
|
+
const currentConfig = configHolder[GLOBAL_CONFIG_KEY];
|
|
53
|
+
if (currentConfig) {
|
|
54
|
+
if (!isSameConfig(config, currentConfig)) {
|
|
55
|
+
logWarning(
|
|
56
|
+
"useApitally() was called again with different options; the first call's configuration stays in effect"
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
return currentConfig;
|
|
60
|
+
}
|
|
61
|
+
if (error) {
|
|
62
|
+
logError(error);
|
|
63
|
+
}
|
|
64
|
+
configHolder[GLOBAL_CONFIG_KEY] = config;
|
|
65
|
+
return config;
|
|
66
|
+
}
|
|
67
|
+
function getConfig() {
|
|
68
|
+
return configHolder[GLOBAL_CONFIG_KEY] ?? resolveConfig({}).config;
|
|
69
|
+
}
|
|
70
|
+
function isValidWriteToken(value) {
|
|
71
|
+
return WRITE_TOKEN_FORMAT.test(value);
|
|
72
|
+
}
|
|
73
|
+
function isApitallyDisabledViaEnv() {
|
|
74
|
+
return isTruthyEnvValue(process.env.APITALLY_DISABLED);
|
|
75
|
+
}
|
|
76
|
+
function matchesAny(patterns, value) {
|
|
77
|
+
return patterns.some((pattern) => {
|
|
78
|
+
pattern.lastIndex = 0;
|
|
79
|
+
return pattern.test(value);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
function compilePatterns(defaults, userPatterns = []) {
|
|
83
|
+
return [
|
|
84
|
+
...defaults.map((pattern) => new RegExp(pattern, "i")),
|
|
85
|
+
...userPatterns.map((pattern) => new RegExp(pattern))
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
function resolveConfig(options) {
|
|
89
|
+
const config = {
|
|
90
|
+
writeToken: options.writeToken ?? nonEmptyEnvVar("APITALLY_WRITE_TOKEN") ?? "",
|
|
91
|
+
env: options.env ?? nonEmptyEnvVar("APITALLY_ENV") ?? DEFAULT_ENV,
|
|
92
|
+
appVersion: options.appVersion,
|
|
93
|
+
disabled: options.disabled === true || isTruthyEnvValue(process.env.APITALLY_DISABLED) || isTruthyEnvValue(process.env.OTEL_SDK_DISABLED),
|
|
94
|
+
captureLogs: options.captureLogs ?? true,
|
|
95
|
+
captureRequestHeaders: options.captureRequestHeaders ?? false,
|
|
96
|
+
captureRequestBody: options.captureRequestBody ?? false,
|
|
97
|
+
captureResponseHeaders: options.captureResponseHeaders ?? true,
|
|
98
|
+
captureResponseBody: options.captureResponseBody ?? false,
|
|
99
|
+
maskQueryParams: dropNonRegExpPatterns("maskQueryParams", options.maskQueryParams),
|
|
100
|
+
maskHeaders: dropNonRegExpPatterns("maskHeaders", options.maskHeaders),
|
|
101
|
+
maskBodyFields: dropNonRegExpPatterns("maskBodyFields", options.maskBodyFields),
|
|
102
|
+
maskRequestBody: options.maskRequestBody,
|
|
103
|
+
maskResponseBody: options.maskResponseBody,
|
|
104
|
+
maskLogRecord: options.maskLogRecord,
|
|
105
|
+
excludePaths: dropNonRegExpPatterns("excludePaths", options.excludePaths),
|
|
106
|
+
// An invalid sampleRate resolves to capturing everything: no data is lost, so no warning.
|
|
107
|
+
sampleRate: typeof options.sampleRate === "number" && options.sampleRate >= 0 && options.sampleRate <= 1 ? options.sampleRate : 1,
|
|
108
|
+
sampleOnRequest: options.sampleOnRequest,
|
|
109
|
+
sampleOnResponse: options.sampleOnResponse,
|
|
110
|
+
otlpEndpoint: nonEmptyEnvVar("APITALLY_OTLP_ENDPOINT") ?? DEFAULT_OTLP_ENDPOINT
|
|
111
|
+
};
|
|
112
|
+
if (config.disabled) {
|
|
113
|
+
return { config };
|
|
114
|
+
}
|
|
115
|
+
if (!config.writeToken) {
|
|
116
|
+
config.disabled = true;
|
|
117
|
+
return {
|
|
118
|
+
config,
|
|
119
|
+
error: "Apitally write token is missing (set the writeToken option or the APITALLY_WRITE_TOKEN environment variable)"
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
if (!isValidWriteToken(config.writeToken)) {
|
|
123
|
+
config.disabled = true;
|
|
124
|
+
return {
|
|
125
|
+
config,
|
|
126
|
+
error: `Apitally write token has an invalid format: ${config.writeToken.slice(0, 8)}...`
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
if (!isHttpUrl(config.otlpEndpoint)) {
|
|
130
|
+
config.disabled = true;
|
|
131
|
+
return {
|
|
132
|
+
config,
|
|
133
|
+
error: `Apitally OTLP endpoint is not a valid HTTP or HTTPS URL: ${config.otlpEndpoint}`
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
return { config };
|
|
137
|
+
}
|
|
138
|
+
function isHttpUrl(value) {
|
|
139
|
+
let url;
|
|
140
|
+
try {
|
|
141
|
+
url = new URL(value);
|
|
142
|
+
} catch {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
return url.protocol === "http:" || url.protocol === "https:";
|
|
146
|
+
}
|
|
147
|
+
function dropNonRegExpPatterns(optionName, patterns = []) {
|
|
148
|
+
return patterns.filter((pattern) => {
|
|
149
|
+
if (pattern instanceof RegExp) {
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
logError(`Pattern in ${optionName} ignored because it is not a RegExp: ${String(pattern)}`);
|
|
153
|
+
return false;
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
function isSameConfig(a, b) {
|
|
157
|
+
return Object.keys(a).every((key) => {
|
|
158
|
+
const left = a[key];
|
|
159
|
+
const right = b[key];
|
|
160
|
+
if (Array.isArray(left) && Array.isArray(right)) {
|
|
161
|
+
return left.length === right.length && left.every((item, index) => {
|
|
162
|
+
const other = right[index];
|
|
163
|
+
return item instanceof RegExp && other instanceof RegExp && item.source === other.source && item.flags === other.flags;
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
if (typeof left === "function" && typeof right === "function") {
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
return left === right;
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
function isTruthyEnvValue(value) {
|
|
173
|
+
return value !== void 0 && TRUE_VALUES.has(value.trim().toLowerCase());
|
|
174
|
+
}
|
|
175
|
+
function nonEmptyEnvVar(name) {
|
|
176
|
+
return process.env[name]?.trim() || void 0;
|
|
177
|
+
}
|
|
178
|
+
export {
|
|
179
|
+
DEFAULT_ENV,
|
|
180
|
+
DEFAULT_EXCLUDE_PATHS,
|
|
181
|
+
DEFAULT_MASK_BODY_FIELDS,
|
|
182
|
+
DEFAULT_MASK_HEADERS,
|
|
183
|
+
DEFAULT_MASK_QUERY_PARAMS,
|
|
184
|
+
EXCLUDE_USER_AGENTS,
|
|
185
|
+
compilePatterns,
|
|
186
|
+
getConfig,
|
|
187
|
+
isApitallyDisabledViaEnv,
|
|
188
|
+
isValidWriteToken,
|
|
189
|
+
matchesAny,
|
|
190
|
+
setConfig
|
|
191
|
+
};
|
|
192
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config.ts"],"sourcesContent":["import type { ReadWriteLogRecord } from \"@opentelemetry/sdk-logs\";\nimport type { ReadableSpan } from \"@opentelemetry/sdk-trace-base\";\nimport { logError, logWarning } from \"./logger.js\";\n\nexport type BodyMaskingCallback = (body: Buffer, span: ReadableSpan) => Buffer | null;\nexport type LogRecordMaskingCallback = (\n logRecord: ReadWriteLogRecord,\n) => ReadWriteLogRecord | null | undefined;\nexport type SamplingCallback = (span: ReadableSpan) => number | boolean | undefined;\n\nexport interface ApitallyOptions {\n writeToken?: string;\n env?: string;\n appVersion?: string;\n disabled?: boolean;\n captureLogs?: boolean;\n captureRequestHeaders?: boolean;\n captureRequestBody?: boolean;\n captureResponseHeaders?: boolean;\n captureResponseBody?: boolean;\n maskQueryParams?: RegExp[];\n maskHeaders?: RegExp[];\n maskBodyFields?: RegExp[];\n maskRequestBody?: BodyMaskingCallback;\n maskResponseBody?: BodyMaskingCallback;\n maskLogRecord?: LogRecordMaskingCallback;\n excludePaths?: RegExp[];\n sampleRate?: number;\n sampleOnRequest?: SamplingCallback;\n sampleOnResponse?: SamplingCallback;\n}\n\ntype OptionalConfigKeys =\n | \"appVersion\"\n | \"maskRequestBody\"\n | \"maskResponseBody\"\n | \"maskLogRecord\"\n | \"sampleOnRequest\"\n | \"sampleOnResponse\";\n\nexport type ApitallyConfig = Required<Omit<ApitallyOptions, OptionalConfigKeys>> &\n Pick<ApitallyOptions, OptionalConfigKeys> & { otlpEndpoint: string };\n\nconst DEFAULT_OTLP_ENDPOINT = \"https://otlp.apitally.io\";\nexport const DEFAULT_ENV = \"dev\";\n\n// User-supplied patterns extend these defaults, never replace them.\nexport const DEFAULT_MASK_QUERY_PARAMS = [\n \"auth\",\n \"api[-_]?key\",\n \"secret\",\n \"token\",\n \"password\",\n \"pwd\",\n];\nexport const DEFAULT_MASK_HEADERS = [\"auth\", \"api[-_]?key\", \"secret\", \"token\", \"cookie\"];\nexport const DEFAULT_MASK_BODY_FIELDS = [\n \"password\",\n \"pwd\",\n \"token\",\n \"secret\",\n \"auth\",\n \"card[-_ ]?number\",\n \"ccv\",\n \"ssn\",\n];\nexport const DEFAULT_EXCLUDE_PATHS = [\n \"/_?healthz?/?$\",\n \"/_?health[-_]?checks?/?$\",\n \"/_?heart[-_]?beats?/?$\",\n \"/ping/?$\",\n \"/ready/?$\",\n \"/live/?$\",\n \"/favicon(?:-[\\\\w-]+)?\\\\.(ico|png|svg)$\",\n \"/apple-touch-icon(?:-[\\\\w-]+)?\\\\.png$\",\n \"/robots\\\\.txt$\",\n \"/sitemap\\\\.xml$\",\n \"/manifest\\\\.json$\",\n \"/site\\\\.webmanifest$\",\n \"/service-worker\\\\.js$\",\n \"/sw\\\\.js$\",\n \"/\\\\.well-known/\",\n];\nexport const EXCLUDE_USER_AGENTS = [\n \"health[-_ ]?check\",\n \"microsoft-azure-application-lb\",\n \"googlehc\",\n \"kube-probe\",\n];\n\nconst WRITE_TOKEN_FORMAT = /^apt_[a-zA-Z0-9]{24}$/;\nconst TRUE_VALUES = new Set([\"1\", \"true\", \"yes\"]);\n\n// The ESM and CJS builds can load together, so a Symbol.for key gives both\n// copies the same configuration.\nconst GLOBAL_CONFIG_KEY = Symbol.for(\"apitally.config\");\nconst configHolder = globalThis as Record<symbol, ApitallyConfig | undefined>;\n\nexport function setConfig(options: ApitallyOptions = {}): ApitallyConfig {\n const { config, error } = resolveConfig(options);\n const currentConfig = configHolder[GLOBAL_CONFIG_KEY];\n if (currentConfig) {\n if (!isSameConfig(config, currentConfig)) {\n logWarning(\n \"useApitally() was called again with different options; the first call's configuration stays in effect\",\n );\n }\n return currentConfig;\n }\n if (error) {\n logError(error);\n }\n configHolder[GLOBAL_CONFIG_KEY] = config;\n return config;\n}\n\nexport function getConfig(): ApitallyConfig {\n return configHolder[GLOBAL_CONFIG_KEY] ?? resolveConfig({}).config;\n}\n\nexport function isValidWriteToken(value: string): boolean {\n return WRITE_TOKEN_FORMAT.test(value);\n}\n\n// The emergency kill switch, re-checked at the activation boundary so it wins\n// even over an explicit disabled: false option.\nexport function isApitallyDisabledViaEnv(): boolean {\n return isTruthyEnvValue(process.env.APITALLY_DISABLED);\n}\n\nexport function matchesAny(patterns: RegExp[], value: string): boolean {\n return patterns.some((pattern) => {\n pattern.lastIndex = 0;\n return pattern.test(value);\n });\n}\n\nexport function compilePatterns(defaults: string[], userPatterns: RegExp[] = []): RegExp[] {\n return [\n ...defaults.map((pattern) => new RegExp(pattern, \"i\")),\n ...userPatterns.map((pattern) => new RegExp(pattern)),\n ];\n}\n\nfunction resolveConfig(options: ApitallyOptions): {\n config: ApitallyConfig;\n error?: string;\n} {\n const config: ApitallyConfig = {\n writeToken: options.writeToken ?? nonEmptyEnvVar(\"APITALLY_WRITE_TOKEN\") ?? \"\",\n env: options.env ?? nonEmptyEnvVar(\"APITALLY_ENV\") ?? DEFAULT_ENV,\n appVersion: options.appVersion,\n disabled:\n options.disabled === true ||\n isTruthyEnvValue(process.env.APITALLY_DISABLED) ||\n isTruthyEnvValue(process.env.OTEL_SDK_DISABLED),\n captureLogs: options.captureLogs ?? true,\n captureRequestHeaders: options.captureRequestHeaders ?? false,\n captureRequestBody: options.captureRequestBody ?? false,\n captureResponseHeaders: options.captureResponseHeaders ?? true,\n captureResponseBody: options.captureResponseBody ?? false,\n maskQueryParams: dropNonRegExpPatterns(\"maskQueryParams\", options.maskQueryParams),\n maskHeaders: dropNonRegExpPatterns(\"maskHeaders\", options.maskHeaders),\n maskBodyFields: dropNonRegExpPatterns(\"maskBodyFields\", options.maskBodyFields),\n maskRequestBody: options.maskRequestBody,\n maskResponseBody: options.maskResponseBody,\n maskLogRecord: options.maskLogRecord,\n excludePaths: dropNonRegExpPatterns(\"excludePaths\", options.excludePaths),\n // An invalid sampleRate resolves to capturing everything: no data is lost, so no warning.\n sampleRate:\n typeof options.sampleRate === \"number\" && options.sampleRate >= 0 && options.sampleRate <= 1\n ? options.sampleRate\n : 1,\n sampleOnRequest: options.sampleOnRequest,\n sampleOnResponse: options.sampleOnResponse,\n otlpEndpoint: nonEmptyEnvVar(\"APITALLY_OTLP_ENDPOINT\") ?? DEFAULT_OTLP_ENDPOINT,\n };\n if (config.disabled) {\n return { config };\n }\n if (!config.writeToken) {\n config.disabled = true;\n return {\n config,\n error:\n \"Apitally write token is missing (set the writeToken option or the APITALLY_WRITE_TOKEN environment variable)\",\n };\n }\n if (!isValidWriteToken(config.writeToken)) {\n config.disabled = true;\n // The write token is a credential and must never appear unmasked in logs.\n return {\n config,\n error: `Apitally write token has an invalid format: ${config.writeToken.slice(0, 8)}...`,\n };\n }\n if (!isHttpUrl(config.otlpEndpoint)) {\n config.disabled = true;\n return {\n config,\n error: `Apitally OTLP endpoint is not a valid HTTP or HTTPS URL: ${config.otlpEndpoint}`,\n };\n }\n return { config };\n}\n\nfunction isHttpUrl(value: string): boolean {\n let url: URL;\n try {\n url = new URL(value);\n } catch {\n return false;\n }\n return url.protocol === \"http:\" || url.protocol === \"https:\";\n}\n\n// Invalid pattern values could leave data unredacted, so they are logged and omitted.\nfunction dropNonRegExpPatterns(optionName: string, patterns: RegExp[] = []): RegExp[] {\n return patterns.filter((pattern) => {\n if (pattern instanceof RegExp) {\n return true;\n }\n logError(`Pattern in ${optionName} ignored because it is not a RegExp: ${String(pattern)}`);\n return false;\n });\n}\n\nfunction isSameConfig(a: ApitallyConfig, b: ApitallyConfig): boolean {\n return (Object.keys(a) as (keyof ApitallyConfig)[]).every((key) => {\n const left = a[key];\n const right = b[key];\n if (Array.isArray(left) && Array.isArray(right)) {\n return (\n left.length === right.length &&\n left.every((item, index) => {\n const other = right[index];\n return (\n item instanceof RegExp &&\n other instanceof RegExp &&\n item.source === other.source &&\n item.flags === other.flags\n );\n })\n );\n }\n // Callback identity says nothing about sameness; app factories create them inline.\n if (typeof left === \"function\" && typeof right === \"function\") {\n return true;\n }\n return left === right;\n });\n}\n\nfunction isTruthyEnvValue(value: string | undefined): boolean {\n return value !== undefined && TRUE_VALUES.has(value.trim().toLowerCase());\n}\n\nfunction nonEmptyEnvVar(name: string): string | undefined {\n return process.env[name]?.trim() || undefined;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var consumer_exports = {};
|
|
20
|
+
__export(consumer_exports, {
|
|
21
|
+
setConsumer: () => setConsumer,
|
|
22
|
+
writeConsumerAttributesFromContext: () => writeConsumerAttributesFromContext
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(consumer_exports);
|
|
25
|
+
var import_context = require('./context.cjs');
|
|
26
|
+
var import_logger = require('./logger.cjs');
|
|
27
|
+
var import_requestAttributes = require('./requestAttributes.cjs');
|
|
28
|
+
const CONSUMER_IDENTIFIER_ATTRIBUTE = "apitally.consumer.identifier";
|
|
29
|
+
const CONSUMER_NAME_ATTRIBUTE = "apitally.consumer.name";
|
|
30
|
+
const CONSUMER_GROUP_ATTRIBUTE = "apitally.consumer.group";
|
|
31
|
+
function setConsumer(consumer) {
|
|
32
|
+
try {
|
|
33
|
+
const holder = (0, import_context.getConsumerHolder)();
|
|
34
|
+
const record = (0, import_context.getRequestRecord)();
|
|
35
|
+
const normalized = normalizeConsumer(consumer);
|
|
36
|
+
if (!holder && !record || !normalized) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (holder) {
|
|
40
|
+
holder.identifier = normalized.identifier;
|
|
41
|
+
holder.name = normalized.name;
|
|
42
|
+
holder.group = normalized.group;
|
|
43
|
+
}
|
|
44
|
+
writeConsumerAttributes((0, import_context.getServerSpan)(), record, normalized);
|
|
45
|
+
} catch (error) {
|
|
46
|
+
(0, import_logger.logDebug)(`Error setting consumer: ${String(error)}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function writeConsumerAttributesFromContext(parentContext, span, record) {
|
|
50
|
+
const holder = parentContext.getValue(import_context.CONSUMER_HOLDER_KEY);
|
|
51
|
+
if (!holder?.identifier) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const consumer = normalizeConsumer({
|
|
55
|
+
identifier: holder.identifier,
|
|
56
|
+
name: holder.name,
|
|
57
|
+
group: holder.group
|
|
58
|
+
});
|
|
59
|
+
if (consumer) {
|
|
60
|
+
writeConsumerAttributes(span, record, consumer);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function writeConsumerAttributes(span, record, consumer) {
|
|
64
|
+
(0, import_requestAttributes.writeRequestAttribute)(span, record, CONSUMER_IDENTIFIER_ATTRIBUTE, consumer.identifier);
|
|
65
|
+
if (consumer.name) {
|
|
66
|
+
(0, import_requestAttributes.writeRequestAttribute)(span, record, CONSUMER_NAME_ATTRIBUTE, consumer.name);
|
|
67
|
+
}
|
|
68
|
+
if (consumer.group) {
|
|
69
|
+
(0, import_requestAttributes.writeRequestAttribute)(span, record, CONSUMER_GROUP_ATTRIBUTE, consumer.group);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function normalizeConsumer(consumer) {
|
|
73
|
+
if (typeof consumer === "object" && consumer !== null) {
|
|
74
|
+
const identifier2 = trimAndCap(consumer.identifier, 128);
|
|
75
|
+
if (!identifier2) {
|
|
76
|
+
return void 0;
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
identifier: identifier2,
|
|
80
|
+
name: trimAndCap(consumer.name, 64),
|
|
81
|
+
group: trimAndCap(consumer.group, 64)
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const identifier = trimAndCap(consumer, 128);
|
|
85
|
+
return identifier ? { identifier } : void 0;
|
|
86
|
+
}
|
|
87
|
+
function trimAndCap(value, maxLength) {
|
|
88
|
+
if (typeof value !== "string" && typeof value !== "number") {
|
|
89
|
+
return void 0;
|
|
90
|
+
}
|
|
91
|
+
return String(value).trim().slice(0, maxLength) || void 0;
|
|
92
|
+
}
|
|
93
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
94
|
+
0 && (module.exports = {
|
|
95
|
+
setConsumer,
|
|
96
|
+
writeConsumerAttributesFromContext
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=consumer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/consumer.ts"],"sourcesContent":["import type { Context, Span } from \"@opentelemetry/api\";\nimport {\n CONSUMER_HOLDER_KEY,\n type ConsumerHolder,\n getConsumerHolder,\n getRequestRecord,\n getServerSpan,\n type RequestRecord,\n} from \"./context.js\";\nimport { logDebug } from \"./logger.js\";\nimport { writeRequestAttribute } from \"./requestAttributes.js\";\n\nexport interface ApitallyConsumer {\n identifier: string;\n name?: string | null;\n group?: string | null;\n}\n\nconst CONSUMER_IDENTIFIER_ATTRIBUTE = \"apitally.consumer.identifier\";\nconst CONSUMER_NAME_ATTRIBUTE = \"apitally.consumer.name\";\nconst CONSUMER_GROUP_ATTRIBUTE = \"apitally.consumer.group\";\n\nexport function setConsumer(consumer: ApitallyConsumer | string | null | undefined): void {\n try {\n const holder = getConsumerHolder();\n const record = getRequestRecord();\n const normalized = normalizeConsumer(consumer);\n if ((!holder && !record) || !normalized) {\n return;\n }\n if (holder) {\n holder.identifier = normalized.identifier;\n holder.name = normalized.name;\n holder.group = normalized.group;\n }\n writeConsumerAttributes(getServerSpan(), record, normalized);\n } catch (error) {\n logDebug(`Error setting consumer: ${String(error)}`);\n }\n}\n\n// Applies a consumer inherited in the parent context when a SERVER span starts.\nexport function writeConsumerAttributesFromContext(\n parentContext: Context,\n span: Span,\n record: RequestRecord | undefined,\n): void {\n const holder = parentContext.getValue(CONSUMER_HOLDER_KEY) as ConsumerHolder | undefined;\n if (!holder?.identifier) {\n return;\n }\n const consumer = normalizeConsumer({\n identifier: holder.identifier,\n name: holder.name,\n group: holder.group,\n });\n if (consumer) {\n writeConsumerAttributes(span, record, consumer);\n }\n}\n\nfunction writeConsumerAttributes(\n span: Span | undefined,\n record: RequestRecord | undefined,\n consumer: ApitallyConsumer,\n): void {\n writeRequestAttribute(span, record, CONSUMER_IDENTIFIER_ATTRIBUTE, consumer.identifier);\n if (consumer.name) {\n writeRequestAttribute(span, record, CONSUMER_NAME_ATTRIBUTE, consumer.name);\n }\n if (consumer.group) {\n writeRequestAttribute(span, record, CONSUMER_GROUP_ATTRIBUTE, consumer.group);\n }\n}\n\nfunction normalizeConsumer(consumer: ApitallyConsumer | string | number | null | undefined) {\n if (typeof consumer === \"object\" && consumer !== null) {\n const identifier = trimAndCap(consumer.identifier, 128);\n if (!identifier) {\n return undefined;\n }\n return {\n identifier,\n name: trimAndCap(consumer.name, 64),\n group: trimAndCap(consumer.group, 64),\n };\n }\n const identifier = trimAndCap(consumer, 128);\n return identifier ? { identifier } : undefined;\n}\n\nfunction trimAndCap(value: unknown, maxLength: number): string | undefined {\n if (typeof value !== \"string\" && typeof value !== \"number\") {\n return undefined;\n }\n return String(value).trim().slice(0, maxLength) || undefined;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAOO;AACP,oBAAyB;AACzB,+BAAsC;AAQtC,MAAM,gCAAgC;AACtC,MAAM,0BAA0B;AAChC,MAAM,2BAA2B;AAE1B,SAAS,YAAY,UAA8D;AACxF,MAAI;AACF,UAAM,aAAS,kCAAkB;AACjC,UAAM,aAAS,iCAAiB;AAChC,UAAM,aAAa,kBAAkB,QAAQ;AAC7C,QAAK,CAAC,UAAU,CAAC,UAAW,CAAC,YAAY;AACvC;AAAA,IACF;AACA,QAAI,QAAQ;AACV,aAAO,aAAa,WAAW;AAC/B,aAAO,OAAO,WAAW;AACzB,aAAO,QAAQ,WAAW;AAAA,IAC5B;AACA,gCAAwB,8BAAc,GAAG,QAAQ,UAAU;AAAA,EAC7D,SAAS,OAAO;AACd,gCAAS,2BAA2B,OAAO,KAAK,CAAC,EAAE;AAAA,EACrD;AACF;AAGO,SAAS,mCACd,eACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,SAAS,kCAAmB;AACzD,MAAI,CAAC,QAAQ,YAAY;AACvB;AAAA,EACF;AACA,QAAM,WAAW,kBAAkB;AAAA,IACjC,YAAY,OAAO;AAAA,IACnB,MAAM,OAAO;AAAA,IACb,OAAO,OAAO;AAAA,EAChB,CAAC;AACD,MAAI,UAAU;AACZ,4BAAwB,MAAM,QAAQ,QAAQ;AAAA,EAChD;AACF;AAEA,SAAS,wBACP,MACA,QACA,UACM;AACN,sDAAsB,MAAM,QAAQ,+BAA+B,SAAS,UAAU;AACtF,MAAI,SAAS,MAAM;AACjB,wDAAsB,MAAM,QAAQ,yBAAyB,SAAS,IAAI;AAAA,EAC5E;AACA,MAAI,SAAS,OAAO;AAClB,wDAAsB,MAAM,QAAQ,0BAA0B,SAAS,KAAK;AAAA,EAC9E;AACF;AAEA,SAAS,kBAAkB,UAAiE;AAC1F,MAAI,OAAO,aAAa,YAAY,aAAa,MAAM;AACrD,UAAMA,cAAa,WAAW,SAAS,YAAY,GAAG;AACtD,QAAI,CAACA,aAAY;AACf,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,YAAAA;AAAA,MACA,MAAM,WAAW,SAAS,MAAM,EAAE;AAAA,MAClC,OAAO,WAAW,SAAS,OAAO,EAAE;AAAA,IACtC;AAAA,EACF;AACA,QAAM,aAAa,WAAW,UAAU,GAAG;AAC3C,SAAO,aAAa,EAAE,WAAW,IAAI;AACvC;AAEA,SAAS,WAAW,OAAgB,WAAuC;AACzE,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC1D,WAAO;AAAA,EACT;AACA,SAAO,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK;AACrD;","names":["identifier"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Context, Span } from '@opentelemetry/api';
|
|
2
|
+
import { RequestRecord } from './context.cjs';
|
|
3
|
+
import '@opentelemetry/core';
|
|
4
|
+
import './validationErrors.cjs';
|
|
5
|
+
import '@opentelemetry/api-logs';
|
|
6
|
+
|
|
7
|
+
interface ApitallyConsumer {
|
|
8
|
+
identifier: string;
|
|
9
|
+
name?: string | null;
|
|
10
|
+
group?: string | null;
|
|
11
|
+
}
|
|
12
|
+
declare function setConsumer(consumer: ApitallyConsumer | string | null | undefined): void;
|
|
13
|
+
declare function writeConsumerAttributesFromContext(parentContext: Context, span: Span, record: RequestRecord | undefined): void;
|
|
14
|
+
|
|
15
|
+
export { type ApitallyConsumer, setConsumer, writeConsumerAttributesFromContext };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Context, Span } from '@opentelemetry/api';
|
|
2
|
+
import { RequestRecord } from './context.js';
|
|
3
|
+
import '@opentelemetry/core';
|
|
4
|
+
import './validationErrors.js';
|
|
5
|
+
import '@opentelemetry/api-logs';
|
|
6
|
+
|
|
7
|
+
interface ApitallyConsumer {
|
|
8
|
+
identifier: string;
|
|
9
|
+
name?: string | null;
|
|
10
|
+
group?: string | null;
|
|
11
|
+
}
|
|
12
|
+
declare function setConsumer(consumer: ApitallyConsumer | string | null | undefined): void;
|
|
13
|
+
declare function writeConsumerAttributesFromContext(parentContext: Context, span: Span, record: RequestRecord | undefined): void;
|
|
14
|
+
|
|
15
|
+
export { type ApitallyConsumer, setConsumer, writeConsumerAttributesFromContext };
|
package/dist/consumer.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CONSUMER_HOLDER_KEY,
|
|
3
|
+
getConsumerHolder,
|
|
4
|
+
getRequestRecord,
|
|
5
|
+
getServerSpan
|
|
6
|
+
} from "./context.js";
|
|
7
|
+
import { logDebug } from "./logger.js";
|
|
8
|
+
import { writeRequestAttribute } from "./requestAttributes.js";
|
|
9
|
+
const CONSUMER_IDENTIFIER_ATTRIBUTE = "apitally.consumer.identifier";
|
|
10
|
+
const CONSUMER_NAME_ATTRIBUTE = "apitally.consumer.name";
|
|
11
|
+
const CONSUMER_GROUP_ATTRIBUTE = "apitally.consumer.group";
|
|
12
|
+
function setConsumer(consumer) {
|
|
13
|
+
try {
|
|
14
|
+
const holder = getConsumerHolder();
|
|
15
|
+
const record = getRequestRecord();
|
|
16
|
+
const normalized = normalizeConsumer(consumer);
|
|
17
|
+
if (!holder && !record || !normalized) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (holder) {
|
|
21
|
+
holder.identifier = normalized.identifier;
|
|
22
|
+
holder.name = normalized.name;
|
|
23
|
+
holder.group = normalized.group;
|
|
24
|
+
}
|
|
25
|
+
writeConsumerAttributes(getServerSpan(), record, normalized);
|
|
26
|
+
} catch (error) {
|
|
27
|
+
logDebug(`Error setting consumer: ${String(error)}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function writeConsumerAttributesFromContext(parentContext, span, record) {
|
|
31
|
+
const holder = parentContext.getValue(CONSUMER_HOLDER_KEY);
|
|
32
|
+
if (!holder?.identifier) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const consumer = normalizeConsumer({
|
|
36
|
+
identifier: holder.identifier,
|
|
37
|
+
name: holder.name,
|
|
38
|
+
group: holder.group
|
|
39
|
+
});
|
|
40
|
+
if (consumer) {
|
|
41
|
+
writeConsumerAttributes(span, record, consumer);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function writeConsumerAttributes(span, record, consumer) {
|
|
45
|
+
writeRequestAttribute(span, record, CONSUMER_IDENTIFIER_ATTRIBUTE, consumer.identifier);
|
|
46
|
+
if (consumer.name) {
|
|
47
|
+
writeRequestAttribute(span, record, CONSUMER_NAME_ATTRIBUTE, consumer.name);
|
|
48
|
+
}
|
|
49
|
+
if (consumer.group) {
|
|
50
|
+
writeRequestAttribute(span, record, CONSUMER_GROUP_ATTRIBUTE, consumer.group);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function normalizeConsumer(consumer) {
|
|
54
|
+
if (typeof consumer === "object" && consumer !== null) {
|
|
55
|
+
const identifier2 = trimAndCap(consumer.identifier, 128);
|
|
56
|
+
if (!identifier2) {
|
|
57
|
+
return void 0;
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
identifier: identifier2,
|
|
61
|
+
name: trimAndCap(consumer.name, 64),
|
|
62
|
+
group: trimAndCap(consumer.group, 64)
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const identifier = trimAndCap(consumer, 128);
|
|
66
|
+
return identifier ? { identifier } : void 0;
|
|
67
|
+
}
|
|
68
|
+
function trimAndCap(value, maxLength) {
|
|
69
|
+
if (typeof value !== "string" && typeof value !== "number") {
|
|
70
|
+
return void 0;
|
|
71
|
+
}
|
|
72
|
+
return String(value).trim().slice(0, maxLength) || void 0;
|
|
73
|
+
}
|
|
74
|
+
export {
|
|
75
|
+
setConsumer,
|
|
76
|
+
writeConsumerAttributesFromContext
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=consumer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/consumer.ts"],"sourcesContent":["import type { Context, Span } from \"@opentelemetry/api\";\nimport {\n CONSUMER_HOLDER_KEY,\n type ConsumerHolder,\n getConsumerHolder,\n getRequestRecord,\n getServerSpan,\n type RequestRecord,\n} from \"./context.js\";\nimport { logDebug } from \"./logger.js\";\nimport { writeRequestAttribute } from \"./requestAttributes.js\";\n\nexport interface ApitallyConsumer {\n identifier: string;\n name?: string | null;\n group?: string | null;\n}\n\nconst CONSUMER_IDENTIFIER_ATTRIBUTE = \"apitally.consumer.identifier\";\nconst CONSUMER_NAME_ATTRIBUTE = \"apitally.consumer.name\";\nconst CONSUMER_GROUP_ATTRIBUTE = \"apitally.consumer.group\";\n\nexport function setConsumer(consumer: ApitallyConsumer | string | null | undefined): void {\n try {\n const holder = getConsumerHolder();\n const record = getRequestRecord();\n const normalized = normalizeConsumer(consumer);\n if ((!holder && !record) || !normalized) {\n return;\n }\n if (holder) {\n holder.identifier = normalized.identifier;\n holder.name = normalized.name;\n holder.group = normalized.group;\n }\n writeConsumerAttributes(getServerSpan(), record, normalized);\n } catch (error) {\n logDebug(`Error setting consumer: ${String(error)}`);\n }\n}\n\n// Applies a consumer inherited in the parent context when a SERVER span starts.\nexport function writeConsumerAttributesFromContext(\n parentContext: Context,\n span: Span,\n record: RequestRecord | undefined,\n): void {\n const holder = parentContext.getValue(CONSUMER_HOLDER_KEY) as ConsumerHolder | undefined;\n if (!holder?.identifier) {\n return;\n }\n const consumer = normalizeConsumer({\n identifier: holder.identifier,\n name: holder.name,\n group: holder.group,\n });\n if (consumer) {\n writeConsumerAttributes(span, record, consumer);\n }\n}\n\nfunction writeConsumerAttributes(\n span: Span | undefined,\n record: RequestRecord | undefined,\n consumer: ApitallyConsumer,\n): void {\n writeRequestAttribute(span, record, CONSUMER_IDENTIFIER_ATTRIBUTE, consumer.identifier);\n if (consumer.name) {\n writeRequestAttribute(span, record, CONSUMER_NAME_ATTRIBUTE, consumer.name);\n }\n if (consumer.group) {\n writeRequestAttribute(span, record, CONSUMER_GROUP_ATTRIBUTE, consumer.group);\n }\n}\n\nfunction normalizeConsumer(consumer: ApitallyConsumer | string | number | null | undefined) {\n if (typeof consumer === \"object\" && consumer !== null) {\n const identifier = trimAndCap(consumer.identifier, 128);\n if (!identifier) {\n return undefined;\n }\n return {\n identifier,\n name: trimAndCap(consumer.name, 64),\n group: trimAndCap(consumer.group, 64),\n };\n }\n const identifier = trimAndCap(consumer, 128);\n return identifier ? { identifier } : undefined;\n}\n\nfunction trimAndCap(value: unknown, maxLength: number): string | undefined {\n if (typeof value !== \"string\" && typeof value !== \"number\") {\n return undefined;\n }\n return String(value).trim().slice(0, maxLength) || undefined;\n}\n"],"mappings":"AACA;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,gBAAgB;AACzB,SAAS,6BAA6B;AAQtC,MAAM,gCAAgC;AACtC,MAAM,0BAA0B;AAChC,MAAM,2BAA2B;AAE1B,SAAS,YAAY,UAA8D;AACxF,MAAI;AACF,UAAM,SAAS,kBAAkB;AACjC,UAAM,SAAS,iBAAiB;AAChC,UAAM,aAAa,kBAAkB,QAAQ;AAC7C,QAAK,CAAC,UAAU,CAAC,UAAW,CAAC,YAAY;AACvC;AAAA,IACF;AACA,QAAI,QAAQ;AACV,aAAO,aAAa,WAAW;AAC/B,aAAO,OAAO,WAAW;AACzB,aAAO,QAAQ,WAAW;AAAA,IAC5B;AACA,4BAAwB,cAAc,GAAG,QAAQ,UAAU;AAAA,EAC7D,SAAS,OAAO;AACd,aAAS,2BAA2B,OAAO,KAAK,CAAC,EAAE;AAAA,EACrD;AACF;AAGO,SAAS,mCACd,eACA,MACA,QACM;AACN,QAAM,SAAS,cAAc,SAAS,mBAAmB;AACzD,MAAI,CAAC,QAAQ,YAAY;AACvB;AAAA,EACF;AACA,QAAM,WAAW,kBAAkB;AAAA,IACjC,YAAY,OAAO;AAAA,IACnB,MAAM,OAAO;AAAA,IACb,OAAO,OAAO;AAAA,EAChB,CAAC;AACD,MAAI,UAAU;AACZ,4BAAwB,MAAM,QAAQ,QAAQ;AAAA,EAChD;AACF;AAEA,SAAS,wBACP,MACA,QACA,UACM;AACN,wBAAsB,MAAM,QAAQ,+BAA+B,SAAS,UAAU;AACtF,MAAI,SAAS,MAAM;AACjB,0BAAsB,MAAM,QAAQ,yBAAyB,SAAS,IAAI;AAAA,EAC5E;AACA,MAAI,SAAS,OAAO;AAClB,0BAAsB,MAAM,QAAQ,0BAA0B,SAAS,KAAK;AAAA,EAC9E;AACF;AAEA,SAAS,kBAAkB,UAAiE;AAC1F,MAAI,OAAO,aAAa,YAAY,aAAa,MAAM;AACrD,UAAMA,cAAa,WAAW,SAAS,YAAY,GAAG;AACtD,QAAI,CAACA,aAAY;AACf,aAAO;AAAA,IACT;AACA,WAAO;AAAA,MACL,YAAAA;AAAA,MACA,MAAM,WAAW,SAAS,MAAM,EAAE;AAAA,MAClC,OAAO,WAAW,SAAS,OAAO,EAAE;AAAA,IACtC;AAAA,EACF;AACA,QAAM,aAAa,WAAW,UAAU,GAAG;AAC3C,SAAO,aAAa,EAAE,WAAW,IAAI;AACvC;AAEA,SAAS,WAAW,OAAgB,WAAuC;AACzE,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC1D,WAAO;AAAA,EACT;AACA,SAAO,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK;AACrD;","names":["identifier"]}
|
package/dist/context.cjs
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var context_exports = {};
|
|
20
|
+
__export(context_exports, {
|
|
21
|
+
CONSUMER_HOLDER_KEY: () => CONSUMER_HOLDER_KEY,
|
|
22
|
+
REQUEST_RECORD_KEY: () => REQUEST_RECORD_KEY,
|
|
23
|
+
SPAN_HANDLE_KEY: () => SPAN_HANDLE_KEY,
|
|
24
|
+
attachRequestRecordToRpcMetadata: () => attachRequestRecordToRpcMetadata,
|
|
25
|
+
getConsumerHolder: () => getConsumerHolder,
|
|
26
|
+
getRequestRecord: () => getRequestRecord,
|
|
27
|
+
getServerSpan: () => getServerSpan,
|
|
28
|
+
withRequestHolders: () => withRequestHolders
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(context_exports);
|
|
31
|
+
var import_api = require("@opentelemetry/api");
|
|
32
|
+
var import_core = require("@opentelemetry/core");
|
|
33
|
+
const SPAN_HANDLE_KEY = (0, import_api.createContextKey)("apitally-span-handle");
|
|
34
|
+
const REQUEST_RECORD_KEY = (0, import_api.createContextKey)("apitally-request-record");
|
|
35
|
+
const CONSUMER_HOLDER_KEY = (0, import_api.createContextKey)("apitally-consumer-holder");
|
|
36
|
+
const RPC_REQUEST_RECORD_KEY = /* @__PURE__ */ Symbol.for("apitally.rpcRequestRecord");
|
|
37
|
+
function withRequestHolders(baseContext, spanHandle, record, consumerHolder) {
|
|
38
|
+
return baseContext.setValue(SPAN_HANDLE_KEY, spanHandle).setValue(REQUEST_RECORD_KEY, record).setValue(CONSUMER_HOLDER_KEY, consumerHolder);
|
|
39
|
+
}
|
|
40
|
+
function attachRequestRecordToRpcMetadata(rpcMetadata, record) {
|
|
41
|
+
if (rpcMetadata) {
|
|
42
|
+
rpcMetadata[RPC_REQUEST_RECORD_KEY] = record;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function getServerSpan(activeContext = import_api.context.active()) {
|
|
46
|
+
const spanHandle = activeContext.getValue(SPAN_HANDLE_KEY);
|
|
47
|
+
const rpcMetadata = (0, import_core.getRPCMetadata)(activeContext);
|
|
48
|
+
return spanHandle?.span ?? (rpcMetadata?.type === import_core.RPCType.HTTP && rpcMetadata[RPC_REQUEST_RECORD_KEY] ? rpcMetadata.span : void 0);
|
|
49
|
+
}
|
|
50
|
+
function getRequestRecord(activeContext = import_api.context.active()) {
|
|
51
|
+
const rpcMetadata = (0, import_core.getRPCMetadata)(activeContext);
|
|
52
|
+
return activeContext.getValue(REQUEST_RECORD_KEY) ?? rpcMetadata?.[RPC_REQUEST_RECORD_KEY];
|
|
53
|
+
}
|
|
54
|
+
function getConsumerHolder(activeContext = import_api.context.active()) {
|
|
55
|
+
return activeContext.getValue(CONSUMER_HOLDER_KEY);
|
|
56
|
+
}
|
|
57
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
58
|
+
0 && (module.exports = {
|
|
59
|
+
CONSUMER_HOLDER_KEY,
|
|
60
|
+
REQUEST_RECORD_KEY,
|
|
61
|
+
SPAN_HANDLE_KEY,
|
|
62
|
+
attachRequestRecordToRpcMetadata,
|
|
63
|
+
getConsumerHolder,
|
|
64
|
+
getRequestRecord,
|
|
65
|
+
getServerSpan,
|
|
66
|
+
withRequestHolders
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=context.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/context.ts"],"sourcesContent":["import {\n type Attributes,\n type Context,\n context,\n createContextKey,\n type Span,\n} from \"@opentelemetry/api\";\nimport { getRPCMetadata, type RPCMetadata, RPCType } from \"@opentelemetry/core\";\nimport type { ValidationErrorDetail } from \"./validationErrors.js\";\n\n// Write sites resolve the request's SERVER span through this handle: under a child\n// span, the active span is not the SERVER span, and OTel has no public upward walk.\nexport interface SpanHandle {\n span?: Span;\n // This set-once reference preserves lifecycle ownership if span later changes.\n ownSpan?: Span;\n}\n\nexport interface ConsumerHolder {\n identifier?: string;\n name?: string;\n group?: string;\n}\n\n// Requests dropped for these reasons are still counted in request metrics,\n// except preflight and websocket requests, which are never recorded.\nexport type RequestDropReason = \"excluded\" | \"method\" | \"scheme\" | \"sampled-out\";\n\n// Transport attributes are applied to exported spans last and used for metrics,\n// so transport values take precedence.\nexport interface RequestRecord {\n attributes: Attributes;\n serverSpanId?: string;\n // Transport-measured request duration, set at completion; the duration\n // histogram records it independent of span timing.\n durationSeconds?: number;\n dropReason?: RequestDropReason;\n // Error state for the validation and server error events; it exists\n // independently of the SERVER span and of the drop decision.\n exception?: unknown;\n validationErrors?: ValidationErrorDetail[];\n}\n\nexport const SPAN_HANDLE_KEY = createContextKey(\"apitally-span-handle\");\nexport const REQUEST_RECORD_KEY = createContextKey(\"apitally-request-record\");\nexport const CONSUMER_HOLDER_KEY = createContextKey(\"apitally-consumer-holder\");\n\nconst RPC_REQUEST_RECORD_KEY = Symbol.for(\"apitally.rpcRequestRecord\");\n\ntype RPCMetadataWithRequestRecord = RPCMetadata & {\n [RPC_REQUEST_RECORD_KEY]?: RequestRecord;\n};\n\n// Mutable holders carry changing request state because OTel contexts are immutable.\nexport function withRequestHolders(\n baseContext: Context,\n spanHandle: SpanHandle,\n record: RequestRecord,\n consumerHolder: ConsumerHolder,\n): Context {\n return baseContext\n .setValue(SPAN_HANDLE_KEY, spanHandle)\n .setValue(REQUEST_RECORD_KEY, record)\n .setValue(CONSUMER_HOLDER_KEY, consumerHolder);\n}\n\nexport function attachRequestRecordToRpcMetadata(\n rpcMetadata: RPCMetadata | undefined,\n record: RequestRecord,\n): void {\n if (rpcMetadata) {\n (rpcMetadata as RPCMetadataWithRequestRecord)[RPC_REQUEST_RECORD_KEY] = record;\n }\n}\n\nexport function getServerSpan(activeContext: Context = context.active()): Span | undefined {\n const spanHandle = activeContext.getValue(SPAN_HANDLE_KEY) as SpanHandle | undefined;\n const rpcMetadata = getRPCMetadata(activeContext) as RPCMetadataWithRequestRecord | undefined;\n return (\n spanHandle?.span ??\n (rpcMetadata?.type === RPCType.HTTP && rpcMetadata[RPC_REQUEST_RECORD_KEY]\n ? rpcMetadata.span\n : undefined)\n );\n}\n\nexport function getRequestRecord(\n activeContext: Context = context.active(),\n): RequestRecord | undefined {\n const rpcMetadata = getRPCMetadata(activeContext) as RPCMetadataWithRequestRecord | undefined;\n return (\n (activeContext.getValue(REQUEST_RECORD_KEY) as RequestRecord | undefined) ??\n rpcMetadata?.[RPC_REQUEST_RECORD_KEY]\n );\n}\n\nexport function getConsumerHolder(\n activeContext: Context = context.active(),\n): ConsumerHolder | undefined {\n return activeContext.getValue(CONSUMER_HOLDER_KEY) as ConsumerHolder | undefined;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAMO;AACP,kBAA0D;AAoCnD,MAAM,sBAAkB,6BAAiB,sBAAsB;AAC/D,MAAM,yBAAqB,6BAAiB,yBAAyB;AACrE,MAAM,0BAAsB,6BAAiB,0BAA0B;AAE9E,MAAM,yBAAyB,uBAAO,IAAI,2BAA2B;AAO9D,SAAS,mBACd,aACA,YACA,QACA,gBACS;AACT,SAAO,YACJ,SAAS,iBAAiB,UAAU,EACpC,SAAS,oBAAoB,MAAM,EACnC,SAAS,qBAAqB,cAAc;AACjD;AAEO,SAAS,iCACd,aACA,QACM;AACN,MAAI,aAAa;AACf,IAAC,YAA6C,sBAAsB,IAAI;AAAA,EAC1E;AACF;AAEO,SAAS,cAAc,gBAAyB,mBAAQ,OAAO,GAAqB;AACzF,QAAM,aAAa,cAAc,SAAS,eAAe;AACzD,QAAM,kBAAc,4BAAe,aAAa;AAChD,SACE,YAAY,SACX,aAAa,SAAS,oBAAQ,QAAQ,YAAY,sBAAsB,IACrE,YAAY,OACZ;AAER;AAEO,SAAS,iBACd,gBAAyB,mBAAQ,OAAO,GACb;AAC3B,QAAM,kBAAc,4BAAe,aAAa;AAChD,SACG,cAAc,SAAS,kBAAkB,KAC1C,cAAc,sBAAsB;AAExC;AAEO,SAAS,kBACd,gBAAyB,mBAAQ,OAAO,GACZ;AAC5B,SAAO,cAAc,SAAS,mBAAmB;AACnD;","names":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Attributes, Span, Context } from '@opentelemetry/api';
|
|
2
|
+
import { RPCMetadata } from '@opentelemetry/core';
|
|
3
|
+
import { ValidationErrorDetail } from './validationErrors.cjs';
|
|
4
|
+
import '@opentelemetry/api-logs';
|
|
5
|
+
|
|
6
|
+
interface SpanHandle {
|
|
7
|
+
span?: Span;
|
|
8
|
+
ownSpan?: Span;
|
|
9
|
+
}
|
|
10
|
+
interface ConsumerHolder {
|
|
11
|
+
identifier?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
group?: string;
|
|
14
|
+
}
|
|
15
|
+
type RequestDropReason = "excluded" | "method" | "scheme" | "sampled-out";
|
|
16
|
+
interface RequestRecord {
|
|
17
|
+
attributes: Attributes;
|
|
18
|
+
serverSpanId?: string;
|
|
19
|
+
durationSeconds?: number;
|
|
20
|
+
dropReason?: RequestDropReason;
|
|
21
|
+
exception?: unknown;
|
|
22
|
+
validationErrors?: ValidationErrorDetail[];
|
|
23
|
+
}
|
|
24
|
+
declare const SPAN_HANDLE_KEY: symbol;
|
|
25
|
+
declare const REQUEST_RECORD_KEY: symbol;
|
|
26
|
+
declare const CONSUMER_HOLDER_KEY: symbol;
|
|
27
|
+
declare function withRequestHolders(baseContext: Context, spanHandle: SpanHandle, record: RequestRecord, consumerHolder: ConsumerHolder): Context;
|
|
28
|
+
declare function attachRequestRecordToRpcMetadata(rpcMetadata: RPCMetadata | undefined, record: RequestRecord): void;
|
|
29
|
+
declare function getServerSpan(activeContext?: Context): Span | undefined;
|
|
30
|
+
declare function getRequestRecord(activeContext?: Context): RequestRecord | undefined;
|
|
31
|
+
declare function getConsumerHolder(activeContext?: Context): ConsumerHolder | undefined;
|
|
32
|
+
|
|
33
|
+
export { CONSUMER_HOLDER_KEY, type ConsumerHolder, REQUEST_RECORD_KEY, type RequestDropReason, type RequestRecord, SPAN_HANDLE_KEY, type SpanHandle, attachRequestRecordToRpcMetadata, getConsumerHolder, getRequestRecord, getServerSpan, withRequestHolders };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Attributes, Span, Context } from '@opentelemetry/api';
|
|
2
|
+
import { RPCMetadata } from '@opentelemetry/core';
|
|
3
|
+
import { ValidationErrorDetail } from './validationErrors.js';
|
|
4
|
+
import '@opentelemetry/api-logs';
|
|
5
|
+
|
|
6
|
+
interface SpanHandle {
|
|
7
|
+
span?: Span;
|
|
8
|
+
ownSpan?: Span;
|
|
9
|
+
}
|
|
10
|
+
interface ConsumerHolder {
|
|
11
|
+
identifier?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
group?: string;
|
|
14
|
+
}
|
|
15
|
+
type RequestDropReason = "excluded" | "method" | "scheme" | "sampled-out";
|
|
16
|
+
interface RequestRecord {
|
|
17
|
+
attributes: Attributes;
|
|
18
|
+
serverSpanId?: string;
|
|
19
|
+
durationSeconds?: number;
|
|
20
|
+
dropReason?: RequestDropReason;
|
|
21
|
+
exception?: unknown;
|
|
22
|
+
validationErrors?: ValidationErrorDetail[];
|
|
23
|
+
}
|
|
24
|
+
declare const SPAN_HANDLE_KEY: symbol;
|
|
25
|
+
declare const REQUEST_RECORD_KEY: symbol;
|
|
26
|
+
declare const CONSUMER_HOLDER_KEY: symbol;
|
|
27
|
+
declare function withRequestHolders(baseContext: Context, spanHandle: SpanHandle, record: RequestRecord, consumerHolder: ConsumerHolder): Context;
|
|
28
|
+
declare function attachRequestRecordToRpcMetadata(rpcMetadata: RPCMetadata | undefined, record: RequestRecord): void;
|
|
29
|
+
declare function getServerSpan(activeContext?: Context): Span | undefined;
|
|
30
|
+
declare function getRequestRecord(activeContext?: Context): RequestRecord | undefined;
|
|
31
|
+
declare function getConsumerHolder(activeContext?: Context): ConsumerHolder | undefined;
|
|
32
|
+
|
|
33
|
+
export { CONSUMER_HOLDER_KEY, type ConsumerHolder, REQUEST_RECORD_KEY, type RequestDropReason, type RequestRecord, SPAN_HANDLE_KEY, type SpanHandle, attachRequestRecordToRpcMetadata, getConsumerHolder, getRequestRecord, getServerSpan, withRequestHolders };
|