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
|
@@ -4,22 +4,18 @@
|
|
|
4
4
|
})
|
|
5
5
|
}}}
|
|
6
6
|
import env from '#start/env'
|
|
7
|
-
import app from '@adonisjs/core/services/app'
|
|
8
7
|
import { defineConfig } from 'apitally/adonisjs'
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
env: env.get('APITALLY_ENV'
|
|
13
|
-
{{#if
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
},
|
|
9
|
+
export default defineConfig({
|
|
10
|
+
writeToken: env.get('APITALLY_WRITE_TOKEN'),
|
|
11
|
+
env: env.get('APITALLY_ENV'),
|
|
12
|
+
{{#if captureRequestHeaders}}
|
|
13
|
+
captureRequestHeaders: true,
|
|
14
|
+
{{/if}}
|
|
15
|
+
{{#if captureRequestBody}}
|
|
16
|
+
captureRequestBody: true,
|
|
17
|
+
{{/if}}
|
|
18
|
+
{{#if captureResponseBody}}
|
|
19
|
+
captureResponseBody: true,
|
|
22
20
|
{{/if}}
|
|
23
21
|
})
|
|
24
|
-
|
|
25
|
-
export default apitallyConfig
|
|
@@ -0,0 +1,128 @@
|
|
|
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 bodyCapture_exports = {};
|
|
20
|
+
__export(bodyCapture_exports, {
|
|
21
|
+
BODY_TOO_LARGE: () => BODY_TOO_LARGE,
|
|
22
|
+
BODY_TOO_LARGE_BUFFER: () => BODY_TOO_LARGE_BUFFER,
|
|
23
|
+
BodyCapture: () => BodyCapture,
|
|
24
|
+
MAX_BODY_SIZE: () => MAX_BODY_SIZE
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(bodyCapture_exports);
|
|
27
|
+
const MAX_BODY_SIZE = 5e4;
|
|
28
|
+
const BODY_TOO_LARGE = "[BODY_TOO_LARGE]";
|
|
29
|
+
const BODY_TOO_LARGE_BUFFER = Buffer.from(BODY_TOO_LARGE);
|
|
30
|
+
const ALLOWED_CONTENT_TYPES = [
|
|
31
|
+
"application/json",
|
|
32
|
+
"application/problem+json",
|
|
33
|
+
"application/vnd.api+json",
|
|
34
|
+
"application/ld+json",
|
|
35
|
+
"application/x-ndjson",
|
|
36
|
+
"text/markdown",
|
|
37
|
+
"text/plain"
|
|
38
|
+
];
|
|
39
|
+
class BodyCapture {
|
|
40
|
+
shouldCapture;
|
|
41
|
+
declaredSize;
|
|
42
|
+
tooLarge;
|
|
43
|
+
chunks = [];
|
|
44
|
+
bufferedLength = 0;
|
|
45
|
+
observedLength = 0;
|
|
46
|
+
completed = false;
|
|
47
|
+
constructor(options) {
|
|
48
|
+
this.shouldCapture = options.captureBody && isAllowedContentType(options.contentType);
|
|
49
|
+
const transferEncoding = Array.isArray(options.transferEncoding) ? options.transferEncoding.join(",") : options.transferEncoding;
|
|
50
|
+
const isChunkedTransferEncoding = typeof transferEncoding === "string" && transferEncoding.toLowerCase().includes("chunked");
|
|
51
|
+
this.declaredSize = isChunkedTransferEncoding ? void 0 : parseContentLength(options.contentLength);
|
|
52
|
+
this.tooLarge = this.shouldCapture && this.declaredSize !== void 0 && this.declaredSize > MAX_BODY_SIZE;
|
|
53
|
+
}
|
|
54
|
+
get isBuffering() {
|
|
55
|
+
return this.shouldCapture && !this.tooLarge;
|
|
56
|
+
}
|
|
57
|
+
addChunk(chunk, encoding) {
|
|
58
|
+
const byteLength = typeof chunk === "string" ? Buffer.byteLength(chunk, encoding) : chunk.byteLength;
|
|
59
|
+
this.observedLength += byteLength;
|
|
60
|
+
if (!this.shouldCapture || this.tooLarge) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const bytes = typeof chunk === "string" ? Buffer.from(chunk, encoding) : chunk;
|
|
64
|
+
this.bufferedLength += byteLength;
|
|
65
|
+
if (this.bufferedLength > MAX_BODY_SIZE) {
|
|
66
|
+
this.tooLarge = true;
|
|
67
|
+
this.chunks = [];
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
this.chunks.push(bytes);
|
|
71
|
+
}
|
|
72
|
+
stopBuffering() {
|
|
73
|
+
this.shouldCapture = false;
|
|
74
|
+
this.tooLarge = false;
|
|
75
|
+
this.chunks = [];
|
|
76
|
+
this.bufferedLength = 0;
|
|
77
|
+
}
|
|
78
|
+
markComplete() {
|
|
79
|
+
this.completed = true;
|
|
80
|
+
}
|
|
81
|
+
// The sentinel is exported even when the stream never completed; a partial
|
|
82
|
+
// buffer from an aborted stream never is.
|
|
83
|
+
get body() {
|
|
84
|
+
if (this.tooLarge) {
|
|
85
|
+
return BODY_TOO_LARGE_BUFFER;
|
|
86
|
+
}
|
|
87
|
+
if (!this.completed || this.bufferedLength === 0) {
|
|
88
|
+
return void 0;
|
|
89
|
+
}
|
|
90
|
+
return Buffer.concat(this.chunks);
|
|
91
|
+
}
|
|
92
|
+
// The trusted declared size, else the running byte count once the stream was
|
|
93
|
+
// observed to completion; undefined means no size attribute.
|
|
94
|
+
get size() {
|
|
95
|
+
if (this.declaredSize !== void 0) {
|
|
96
|
+
return this.declaredSize;
|
|
97
|
+
}
|
|
98
|
+
return this.completed ? this.observedLength : void 0;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function isAllowedContentType(contentType) {
|
|
102
|
+
if (!contentType) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
const normalized = contentType.trim().toLowerCase();
|
|
106
|
+
return ALLOWED_CONTENT_TYPES.some((allowed) => normalized.startsWith(allowed));
|
|
107
|
+
}
|
|
108
|
+
function parseContentLength(value) {
|
|
109
|
+
if (typeof value === "number") {
|
|
110
|
+
return value;
|
|
111
|
+
}
|
|
112
|
+
if (typeof value === "string") {
|
|
113
|
+
const parsed = Number.parseInt(value, 10);
|
|
114
|
+
return Number.isNaN(parsed) ? void 0 : parsed;
|
|
115
|
+
}
|
|
116
|
+
if (Array.isArray(value)) {
|
|
117
|
+
return parseContentLength(value[0]);
|
|
118
|
+
}
|
|
119
|
+
return void 0;
|
|
120
|
+
}
|
|
121
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
122
|
+
0 && (module.exports = {
|
|
123
|
+
BODY_TOO_LARGE,
|
|
124
|
+
BODY_TOO_LARGE_BUFFER,
|
|
125
|
+
BodyCapture,
|
|
126
|
+
MAX_BODY_SIZE
|
|
127
|
+
});
|
|
128
|
+
//# sourceMappingURL=bodyCapture.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/bodyCapture.ts"],"sourcesContent":["// Captured bodies above the cap are represented by a sentinel and never\n// exported truncated.\nexport const MAX_BODY_SIZE = 50_000;\nexport const BODY_TOO_LARGE = \"[BODY_TOO_LARGE]\";\nexport const BODY_TOO_LARGE_BUFFER = Buffer.from(BODY_TOO_LARGE);\n\nconst ALLOWED_CONTENT_TYPES = [\n \"application/json\",\n \"application/problem+json\",\n \"application/vnd.api+json\",\n \"application/ld+json\",\n \"application/x-ndjson\",\n \"text/markdown\",\n \"text/plain\",\n];\n\ninterface BodyCaptureOptions {\n captureBody: boolean;\n contentType?: string | null;\n contentLength?: string | number | string[] | null;\n transferEncoding?: string | string[] | null;\n}\n\n// Capture eligibility and declared oversize decisions use headers only; all\n// observed bytes still count toward size.\nexport class BodyCapture {\n private shouldCapture: boolean;\n private readonly declaredSize?: number;\n private tooLarge: boolean;\n private chunks: Uint8Array[] = [];\n private bufferedLength = 0;\n private observedLength = 0;\n private completed = false;\n\n constructor(options: BodyCaptureOptions) {\n this.shouldCapture = options.captureBody && isAllowedContentType(options.contentType);\n // Transfer-Encoding: chunked makes Content-Length unusable, so observed\n // decoded bytes determine size.\n const transferEncoding = Array.isArray(options.transferEncoding)\n ? options.transferEncoding.join(\",\")\n : options.transferEncoding;\n const isChunkedTransferEncoding =\n typeof transferEncoding === \"string\" && transferEncoding.toLowerCase().includes(\"chunked\");\n this.declaredSize = isChunkedTransferEncoding\n ? undefined\n : parseContentLength(options.contentLength);\n this.tooLarge =\n this.shouldCapture && this.declaredSize !== undefined && this.declaredSize > MAX_BODY_SIZE;\n }\n\n get isBuffering(): boolean {\n return this.shouldCapture && !this.tooLarge;\n }\n\n addChunk(chunk: Buffer | Uint8Array | string, encoding?: BufferEncoding): void {\n const byteLength =\n typeof chunk === \"string\" ? Buffer.byteLength(chunk, encoding) : chunk.byteLength;\n this.observedLength += byteLength;\n if (!this.shouldCapture || this.tooLarge) {\n return;\n }\n const bytes = typeof chunk === \"string\" ? Buffer.from(chunk, encoding) : chunk;\n this.bufferedLength += byteLength;\n if (this.bufferedLength > MAX_BODY_SIZE) {\n // A body must never be exported truncated, so crossing the cap discards\n // the buffer and yields the sentinel.\n this.tooLarge = true;\n this.chunks = [];\n return;\n }\n this.chunks.push(bytes);\n }\n\n stopBuffering(): void {\n this.shouldCapture = false;\n this.tooLarge = false;\n this.chunks = [];\n this.bufferedLength = 0;\n }\n\n markComplete(): void {\n this.completed = true;\n }\n\n // The sentinel is exported even when the stream never completed; a partial\n // buffer from an aborted stream never is.\n get body(): Buffer | undefined {\n if (this.tooLarge) {\n return BODY_TOO_LARGE_BUFFER;\n }\n if (!this.completed || this.bufferedLength === 0) {\n return undefined;\n }\n return Buffer.concat(this.chunks);\n }\n\n // The trusted declared size, else the running byte count once the stream was\n // observed to completion; undefined means no size attribute.\n get size(): number | undefined {\n if (this.declaredSize !== undefined) {\n return this.declaredSize;\n }\n return this.completed ? this.observedLength : undefined;\n }\n}\n\nexport interface CapturedBody {\n body?: Buffer;\n size?: number;\n}\n\nfunction isAllowedContentType(contentType: string | null | undefined): boolean {\n if (!contentType) {\n return false;\n }\n const normalized = contentType.trim().toLowerCase();\n return ALLOWED_CONTENT_TYPES.some((allowed) => normalized.startsWith(allowed));\n}\n\nfunction parseContentLength(\n value: string | number | string[] | null | undefined,\n): number | undefined {\n if (typeof value === \"number\") {\n return value;\n }\n if (typeof value === \"string\") {\n const parsed = Number.parseInt(value, 10);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n if (Array.isArray(value)) {\n return parseContentLength(value[0]);\n }\n return undefined;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,gBAAgB;AACtB,MAAM,iBAAiB;AACvB,MAAM,wBAAwB,OAAO,KAAK,cAAc;AAE/D,MAAM,wBAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAWO,MAAM,YAAY;AAAA,EACf;AAAA,EACS;AAAA,EACT;AAAA,EACA,SAAuB,CAAC;AAAA,EACxB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,YAAY;AAAA,EAEpB,YAAY,SAA6B;AACvC,SAAK,gBAAgB,QAAQ,eAAe,qBAAqB,QAAQ,WAAW;AAGpF,UAAM,mBAAmB,MAAM,QAAQ,QAAQ,gBAAgB,IAC3D,QAAQ,iBAAiB,KAAK,GAAG,IACjC,QAAQ;AACZ,UAAM,4BACJ,OAAO,qBAAqB,YAAY,iBAAiB,YAAY,EAAE,SAAS,SAAS;AAC3F,SAAK,eAAe,4BAChB,SACA,mBAAmB,QAAQ,aAAa;AAC5C,SAAK,WACH,KAAK,iBAAiB,KAAK,iBAAiB,UAAa,KAAK,eAAe;AAAA,EACjF;AAAA,EAEA,IAAI,cAAuB;AACzB,WAAO,KAAK,iBAAiB,CAAC,KAAK;AAAA,EACrC;AAAA,EAEA,SAAS,OAAqC,UAAiC;AAC7E,UAAM,aACJ,OAAO,UAAU,WAAW,OAAO,WAAW,OAAO,QAAQ,IAAI,MAAM;AACzE,SAAK,kBAAkB;AACvB,QAAI,CAAC,KAAK,iBAAiB,KAAK,UAAU;AACxC;AAAA,IACF;AACA,UAAM,QAAQ,OAAO,UAAU,WAAW,OAAO,KAAK,OAAO,QAAQ,IAAI;AACzE,SAAK,kBAAkB;AACvB,QAAI,KAAK,iBAAiB,eAAe;AAGvC,WAAK,WAAW;AAChB,WAAK,SAAS,CAAC;AACf;AAAA,IACF;AACA,SAAK,OAAO,KAAK,KAAK;AAAA,EACxB;AAAA,EAEA,gBAAsB;AACpB,SAAK,gBAAgB;AACrB,SAAK,WAAW;AAChB,SAAK,SAAS,CAAC;AACf,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEA,eAAqB;AACnB,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA;AAAA,EAIA,IAAI,OAA2B;AAC7B,QAAI,KAAK,UAAU;AACjB,aAAO;AAAA,IACT;AACA,QAAI,CAAC,KAAK,aAAa,KAAK,mBAAmB,GAAG;AAChD,aAAO;AAAA,IACT;AACA,WAAO,OAAO,OAAO,KAAK,MAAM;AAAA,EAClC;AAAA;AAAA;AAAA,EAIA,IAAI,OAA2B;AAC7B,QAAI,KAAK,iBAAiB,QAAW;AACnC,aAAO,KAAK;AAAA,IACd;AACA,WAAO,KAAK,YAAY,KAAK,iBAAiB;AAAA,EAChD;AACF;AAOA,SAAS,qBAAqB,aAAiD;AAC7E,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AACA,QAAM,aAAa,YAAY,KAAK,EAAE,YAAY;AAClD,SAAO,sBAAsB,KAAK,CAAC,YAAY,WAAW,WAAW,OAAO,CAAC;AAC/E;AAEA,SAAS,mBACP,OACoB;AACpB,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,SAAS,OAAO,SAAS,OAAO,EAAE;AACxC,WAAO,OAAO,MAAM,MAAM,IAAI,SAAY;AAAA,EAC5C;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,mBAAmB,MAAM,CAAC,CAAC;AAAA,EACpC;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
declare const MAX_BODY_SIZE = 50000;
|
|
2
|
+
declare const BODY_TOO_LARGE = "[BODY_TOO_LARGE]";
|
|
3
|
+
declare const BODY_TOO_LARGE_BUFFER: Buffer<ArrayBuffer>;
|
|
4
|
+
interface BodyCaptureOptions {
|
|
5
|
+
captureBody: boolean;
|
|
6
|
+
contentType?: string | null;
|
|
7
|
+
contentLength?: string | number | string[] | null;
|
|
8
|
+
transferEncoding?: string | string[] | null;
|
|
9
|
+
}
|
|
10
|
+
declare class BodyCapture {
|
|
11
|
+
private shouldCapture;
|
|
12
|
+
private readonly declaredSize?;
|
|
13
|
+
private tooLarge;
|
|
14
|
+
private chunks;
|
|
15
|
+
private bufferedLength;
|
|
16
|
+
private observedLength;
|
|
17
|
+
private completed;
|
|
18
|
+
constructor(options: BodyCaptureOptions);
|
|
19
|
+
get isBuffering(): boolean;
|
|
20
|
+
addChunk(chunk: Buffer | Uint8Array | string, encoding?: BufferEncoding): void;
|
|
21
|
+
stopBuffering(): void;
|
|
22
|
+
markComplete(): void;
|
|
23
|
+
get body(): Buffer | undefined;
|
|
24
|
+
get size(): number | undefined;
|
|
25
|
+
}
|
|
26
|
+
interface CapturedBody {
|
|
27
|
+
body?: Buffer;
|
|
28
|
+
size?: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { BODY_TOO_LARGE, BODY_TOO_LARGE_BUFFER, BodyCapture, type CapturedBody, MAX_BODY_SIZE };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
declare const MAX_BODY_SIZE = 50000;
|
|
2
|
+
declare const BODY_TOO_LARGE = "[BODY_TOO_LARGE]";
|
|
3
|
+
declare const BODY_TOO_LARGE_BUFFER: Buffer<ArrayBuffer>;
|
|
4
|
+
interface BodyCaptureOptions {
|
|
5
|
+
captureBody: boolean;
|
|
6
|
+
contentType?: string | null;
|
|
7
|
+
contentLength?: string | number | string[] | null;
|
|
8
|
+
transferEncoding?: string | string[] | null;
|
|
9
|
+
}
|
|
10
|
+
declare class BodyCapture {
|
|
11
|
+
private shouldCapture;
|
|
12
|
+
private readonly declaredSize?;
|
|
13
|
+
private tooLarge;
|
|
14
|
+
private chunks;
|
|
15
|
+
private bufferedLength;
|
|
16
|
+
private observedLength;
|
|
17
|
+
private completed;
|
|
18
|
+
constructor(options: BodyCaptureOptions);
|
|
19
|
+
get isBuffering(): boolean;
|
|
20
|
+
addChunk(chunk: Buffer | Uint8Array | string, encoding?: BufferEncoding): void;
|
|
21
|
+
stopBuffering(): void;
|
|
22
|
+
markComplete(): void;
|
|
23
|
+
get body(): Buffer | undefined;
|
|
24
|
+
get size(): number | undefined;
|
|
25
|
+
}
|
|
26
|
+
interface CapturedBody {
|
|
27
|
+
body?: Buffer;
|
|
28
|
+
size?: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { BODY_TOO_LARGE, BODY_TOO_LARGE_BUFFER, BodyCapture, type CapturedBody, MAX_BODY_SIZE };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const MAX_BODY_SIZE = 5e4;
|
|
2
|
+
const BODY_TOO_LARGE = "[BODY_TOO_LARGE]";
|
|
3
|
+
const BODY_TOO_LARGE_BUFFER = Buffer.from(BODY_TOO_LARGE);
|
|
4
|
+
const ALLOWED_CONTENT_TYPES = [
|
|
5
|
+
"application/json",
|
|
6
|
+
"application/problem+json",
|
|
7
|
+
"application/vnd.api+json",
|
|
8
|
+
"application/ld+json",
|
|
9
|
+
"application/x-ndjson",
|
|
10
|
+
"text/markdown",
|
|
11
|
+
"text/plain"
|
|
12
|
+
];
|
|
13
|
+
class BodyCapture {
|
|
14
|
+
shouldCapture;
|
|
15
|
+
declaredSize;
|
|
16
|
+
tooLarge;
|
|
17
|
+
chunks = [];
|
|
18
|
+
bufferedLength = 0;
|
|
19
|
+
observedLength = 0;
|
|
20
|
+
completed = false;
|
|
21
|
+
constructor(options) {
|
|
22
|
+
this.shouldCapture = options.captureBody && isAllowedContentType(options.contentType);
|
|
23
|
+
const transferEncoding = Array.isArray(options.transferEncoding) ? options.transferEncoding.join(",") : options.transferEncoding;
|
|
24
|
+
const isChunkedTransferEncoding = typeof transferEncoding === "string" && transferEncoding.toLowerCase().includes("chunked");
|
|
25
|
+
this.declaredSize = isChunkedTransferEncoding ? void 0 : parseContentLength(options.contentLength);
|
|
26
|
+
this.tooLarge = this.shouldCapture && this.declaredSize !== void 0 && this.declaredSize > MAX_BODY_SIZE;
|
|
27
|
+
}
|
|
28
|
+
get isBuffering() {
|
|
29
|
+
return this.shouldCapture && !this.tooLarge;
|
|
30
|
+
}
|
|
31
|
+
addChunk(chunk, encoding) {
|
|
32
|
+
const byteLength = typeof chunk === "string" ? Buffer.byteLength(chunk, encoding) : chunk.byteLength;
|
|
33
|
+
this.observedLength += byteLength;
|
|
34
|
+
if (!this.shouldCapture || this.tooLarge) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const bytes = typeof chunk === "string" ? Buffer.from(chunk, encoding) : chunk;
|
|
38
|
+
this.bufferedLength += byteLength;
|
|
39
|
+
if (this.bufferedLength > MAX_BODY_SIZE) {
|
|
40
|
+
this.tooLarge = true;
|
|
41
|
+
this.chunks = [];
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this.chunks.push(bytes);
|
|
45
|
+
}
|
|
46
|
+
stopBuffering() {
|
|
47
|
+
this.shouldCapture = false;
|
|
48
|
+
this.tooLarge = false;
|
|
49
|
+
this.chunks = [];
|
|
50
|
+
this.bufferedLength = 0;
|
|
51
|
+
}
|
|
52
|
+
markComplete() {
|
|
53
|
+
this.completed = true;
|
|
54
|
+
}
|
|
55
|
+
// The sentinel is exported even when the stream never completed; a partial
|
|
56
|
+
// buffer from an aborted stream never is.
|
|
57
|
+
get body() {
|
|
58
|
+
if (this.tooLarge) {
|
|
59
|
+
return BODY_TOO_LARGE_BUFFER;
|
|
60
|
+
}
|
|
61
|
+
if (!this.completed || this.bufferedLength === 0) {
|
|
62
|
+
return void 0;
|
|
63
|
+
}
|
|
64
|
+
return Buffer.concat(this.chunks);
|
|
65
|
+
}
|
|
66
|
+
// The trusted declared size, else the running byte count once the stream was
|
|
67
|
+
// observed to completion; undefined means no size attribute.
|
|
68
|
+
get size() {
|
|
69
|
+
if (this.declaredSize !== void 0) {
|
|
70
|
+
return this.declaredSize;
|
|
71
|
+
}
|
|
72
|
+
return this.completed ? this.observedLength : void 0;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function isAllowedContentType(contentType) {
|
|
76
|
+
if (!contentType) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
const normalized = contentType.trim().toLowerCase();
|
|
80
|
+
return ALLOWED_CONTENT_TYPES.some((allowed) => normalized.startsWith(allowed));
|
|
81
|
+
}
|
|
82
|
+
function parseContentLength(value) {
|
|
83
|
+
if (typeof value === "number") {
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
86
|
+
if (typeof value === "string") {
|
|
87
|
+
const parsed = Number.parseInt(value, 10);
|
|
88
|
+
return Number.isNaN(parsed) ? void 0 : parsed;
|
|
89
|
+
}
|
|
90
|
+
if (Array.isArray(value)) {
|
|
91
|
+
return parseContentLength(value[0]);
|
|
92
|
+
}
|
|
93
|
+
return void 0;
|
|
94
|
+
}
|
|
95
|
+
export {
|
|
96
|
+
BODY_TOO_LARGE,
|
|
97
|
+
BODY_TOO_LARGE_BUFFER,
|
|
98
|
+
BodyCapture,
|
|
99
|
+
MAX_BODY_SIZE
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=bodyCapture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/bodyCapture.ts"],"sourcesContent":["// Captured bodies above the cap are represented by a sentinel and never\n// exported truncated.\nexport const MAX_BODY_SIZE = 50_000;\nexport const BODY_TOO_LARGE = \"[BODY_TOO_LARGE]\";\nexport const BODY_TOO_LARGE_BUFFER = Buffer.from(BODY_TOO_LARGE);\n\nconst ALLOWED_CONTENT_TYPES = [\n \"application/json\",\n \"application/problem+json\",\n \"application/vnd.api+json\",\n \"application/ld+json\",\n \"application/x-ndjson\",\n \"text/markdown\",\n \"text/plain\",\n];\n\ninterface BodyCaptureOptions {\n captureBody: boolean;\n contentType?: string | null;\n contentLength?: string | number | string[] | null;\n transferEncoding?: string | string[] | null;\n}\n\n// Capture eligibility and declared oversize decisions use headers only; all\n// observed bytes still count toward size.\nexport class BodyCapture {\n private shouldCapture: boolean;\n private readonly declaredSize?: number;\n private tooLarge: boolean;\n private chunks: Uint8Array[] = [];\n private bufferedLength = 0;\n private observedLength = 0;\n private completed = false;\n\n constructor(options: BodyCaptureOptions) {\n this.shouldCapture = options.captureBody && isAllowedContentType(options.contentType);\n // Transfer-Encoding: chunked makes Content-Length unusable, so observed\n // decoded bytes determine size.\n const transferEncoding = Array.isArray(options.transferEncoding)\n ? options.transferEncoding.join(\",\")\n : options.transferEncoding;\n const isChunkedTransferEncoding =\n typeof transferEncoding === \"string\" && transferEncoding.toLowerCase().includes(\"chunked\");\n this.declaredSize = isChunkedTransferEncoding\n ? undefined\n : parseContentLength(options.contentLength);\n this.tooLarge =\n this.shouldCapture && this.declaredSize !== undefined && this.declaredSize > MAX_BODY_SIZE;\n }\n\n get isBuffering(): boolean {\n return this.shouldCapture && !this.tooLarge;\n }\n\n addChunk(chunk: Buffer | Uint8Array | string, encoding?: BufferEncoding): void {\n const byteLength =\n typeof chunk === \"string\" ? Buffer.byteLength(chunk, encoding) : chunk.byteLength;\n this.observedLength += byteLength;\n if (!this.shouldCapture || this.tooLarge) {\n return;\n }\n const bytes = typeof chunk === \"string\" ? Buffer.from(chunk, encoding) : chunk;\n this.bufferedLength += byteLength;\n if (this.bufferedLength > MAX_BODY_SIZE) {\n // A body must never be exported truncated, so crossing the cap discards\n // the buffer and yields the sentinel.\n this.tooLarge = true;\n this.chunks = [];\n return;\n }\n this.chunks.push(bytes);\n }\n\n stopBuffering(): void {\n this.shouldCapture = false;\n this.tooLarge = false;\n this.chunks = [];\n this.bufferedLength = 0;\n }\n\n markComplete(): void {\n this.completed = true;\n }\n\n // The sentinel is exported even when the stream never completed; a partial\n // buffer from an aborted stream never is.\n get body(): Buffer | undefined {\n if (this.tooLarge) {\n return BODY_TOO_LARGE_BUFFER;\n }\n if (!this.completed || this.bufferedLength === 0) {\n return undefined;\n }\n return Buffer.concat(this.chunks);\n }\n\n // The trusted declared size, else the running byte count once the stream was\n // observed to completion; undefined means no size attribute.\n get size(): number | undefined {\n if (this.declaredSize !== undefined) {\n return this.declaredSize;\n }\n return this.completed ? this.observedLength : undefined;\n }\n}\n\nexport interface CapturedBody {\n body?: Buffer;\n size?: number;\n}\n\nfunction isAllowedContentType(contentType: string | null | undefined): boolean {\n if (!contentType) {\n return false;\n }\n const normalized = contentType.trim().toLowerCase();\n return ALLOWED_CONTENT_TYPES.some((allowed) => normalized.startsWith(allowed));\n}\n\nfunction parseContentLength(\n value: string | number | string[] | null | undefined,\n): number | undefined {\n if (typeof value === \"number\") {\n return value;\n }\n if (typeof value === \"string\") {\n const parsed = Number.parseInt(value, 10);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n if (Array.isArray(value)) {\n return parseContentLength(value[0]);\n }\n return undefined;\n}\n"],"mappings":"AAEO,MAAM,gBAAgB;AACtB,MAAM,iBAAiB;AACvB,MAAM,wBAAwB,OAAO,KAAK,cAAc;AAE/D,MAAM,wBAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAWO,MAAM,YAAY;AAAA,EACf;AAAA,EACS;AAAA,EACT;AAAA,EACA,SAAuB,CAAC;AAAA,EACxB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,YAAY;AAAA,EAEpB,YAAY,SAA6B;AACvC,SAAK,gBAAgB,QAAQ,eAAe,qBAAqB,QAAQ,WAAW;AAGpF,UAAM,mBAAmB,MAAM,QAAQ,QAAQ,gBAAgB,IAC3D,QAAQ,iBAAiB,KAAK,GAAG,IACjC,QAAQ;AACZ,UAAM,4BACJ,OAAO,qBAAqB,YAAY,iBAAiB,YAAY,EAAE,SAAS,SAAS;AAC3F,SAAK,eAAe,4BAChB,SACA,mBAAmB,QAAQ,aAAa;AAC5C,SAAK,WACH,KAAK,iBAAiB,KAAK,iBAAiB,UAAa,KAAK,eAAe;AAAA,EACjF;AAAA,EAEA,IAAI,cAAuB;AACzB,WAAO,KAAK,iBAAiB,CAAC,KAAK;AAAA,EACrC;AAAA,EAEA,SAAS,OAAqC,UAAiC;AAC7E,UAAM,aACJ,OAAO,UAAU,WAAW,OAAO,WAAW,OAAO,QAAQ,IAAI,MAAM;AACzE,SAAK,kBAAkB;AACvB,QAAI,CAAC,KAAK,iBAAiB,KAAK,UAAU;AACxC;AAAA,IACF;AACA,UAAM,QAAQ,OAAO,UAAU,WAAW,OAAO,KAAK,OAAO,QAAQ,IAAI;AACzE,SAAK,kBAAkB;AACvB,QAAI,KAAK,iBAAiB,eAAe;AAGvC,WAAK,WAAW;AAChB,WAAK,SAAS,CAAC;AACf;AAAA,IACF;AACA,SAAK,OAAO,KAAK,KAAK;AAAA,EACxB;AAAA,EAEA,gBAAsB;AACpB,SAAK,gBAAgB;AACrB,SAAK,WAAW;AAChB,SAAK,SAAS,CAAC;AACf,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEA,eAAqB;AACnB,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA;AAAA,EAIA,IAAI,OAA2B;AAC7B,QAAI,KAAK,UAAU;AACjB,aAAO;AAAA,IACT;AACA,QAAI,CAAC,KAAK,aAAa,KAAK,mBAAmB,GAAG;AAChD,aAAO;AAAA,IACT;AACA,WAAO,OAAO,OAAO,KAAK,MAAM;AAAA,EAClC;AAAA;AAAA;AAAA,EAIA,IAAI,OAA2B;AAC7B,QAAI,KAAK,iBAAiB,QAAW;AACnC,aAAO,KAAK;AAAA,IACd;AACA,WAAO,KAAK,YAAY,KAAK,iBAAiB;AAAA,EAChD;AACF;AAOA,SAAS,qBAAqB,aAAiD;AAC7E,MAAI,CAAC,aAAa;AAChB,WAAO;AAAA,EACT;AACA,QAAM,aAAa,YAAY,KAAK,EAAE,YAAY;AAClD,SAAO,sBAAsB,KAAK,CAAC,YAAY,WAAW,WAAW,OAAO,CAAC;AAC/E;AAEA,SAAS,mBACP,OACoB;AACpB,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,UAAM,SAAS,OAAO,SAAS,OAAO,EAAE;AACxC,WAAO,OAAO,MAAM,MAAM,IAAI,SAAY;AAAA,EAC5C;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,mBAAmB,MAAM,CAAC,CAAC;AAAA,EACpC;AACA,SAAO;AACT;","names":[]}
|
package/dist/config.cjs
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
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 config_exports = {};
|
|
20
|
+
__export(config_exports, {
|
|
21
|
+
DEFAULT_ENV: () => DEFAULT_ENV,
|
|
22
|
+
DEFAULT_EXCLUDE_PATHS: () => DEFAULT_EXCLUDE_PATHS,
|
|
23
|
+
DEFAULT_MASK_BODY_FIELDS: () => DEFAULT_MASK_BODY_FIELDS,
|
|
24
|
+
DEFAULT_MASK_HEADERS: () => DEFAULT_MASK_HEADERS,
|
|
25
|
+
DEFAULT_MASK_QUERY_PARAMS: () => DEFAULT_MASK_QUERY_PARAMS,
|
|
26
|
+
EXCLUDE_USER_AGENTS: () => EXCLUDE_USER_AGENTS,
|
|
27
|
+
compilePatterns: () => compilePatterns,
|
|
28
|
+
getConfig: () => getConfig,
|
|
29
|
+
isApitallyDisabledViaEnv: () => isApitallyDisabledViaEnv,
|
|
30
|
+
isValidWriteToken: () => isValidWriteToken,
|
|
31
|
+
matchesAny: () => matchesAny,
|
|
32
|
+
setConfig: () => setConfig
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(config_exports);
|
|
35
|
+
var import_logger = require('./logger.cjs');
|
|
36
|
+
const DEFAULT_OTLP_ENDPOINT = "https://otlp.apitally.io";
|
|
37
|
+
const DEFAULT_ENV = "dev";
|
|
38
|
+
const DEFAULT_MASK_QUERY_PARAMS = [
|
|
39
|
+
"auth",
|
|
40
|
+
"api[-_]?key",
|
|
41
|
+
"secret",
|
|
42
|
+
"token",
|
|
43
|
+
"password",
|
|
44
|
+
"pwd"
|
|
45
|
+
];
|
|
46
|
+
const DEFAULT_MASK_HEADERS = ["auth", "api[-_]?key", "secret", "token", "cookie"];
|
|
47
|
+
const DEFAULT_MASK_BODY_FIELDS = [
|
|
48
|
+
"password",
|
|
49
|
+
"pwd",
|
|
50
|
+
"token",
|
|
51
|
+
"secret",
|
|
52
|
+
"auth",
|
|
53
|
+
"card[-_ ]?number",
|
|
54
|
+
"ccv",
|
|
55
|
+
"ssn"
|
|
56
|
+
];
|
|
57
|
+
const DEFAULT_EXCLUDE_PATHS = [
|
|
58
|
+
"/_?healthz?/?$",
|
|
59
|
+
"/_?health[-_]?checks?/?$",
|
|
60
|
+
"/_?heart[-_]?beats?/?$",
|
|
61
|
+
"/ping/?$",
|
|
62
|
+
"/ready/?$",
|
|
63
|
+
"/live/?$",
|
|
64
|
+
"/favicon(?:-[\\w-]+)?\\.(ico|png|svg)$",
|
|
65
|
+
"/apple-touch-icon(?:-[\\w-]+)?\\.png$",
|
|
66
|
+
"/robots\\.txt$",
|
|
67
|
+
"/sitemap\\.xml$",
|
|
68
|
+
"/manifest\\.json$",
|
|
69
|
+
"/site\\.webmanifest$",
|
|
70
|
+
"/service-worker\\.js$",
|
|
71
|
+
"/sw\\.js$",
|
|
72
|
+
"/\\.well-known/"
|
|
73
|
+
];
|
|
74
|
+
const EXCLUDE_USER_AGENTS = [
|
|
75
|
+
"health[-_ ]?check",
|
|
76
|
+
"microsoft-azure-application-lb",
|
|
77
|
+
"googlehc",
|
|
78
|
+
"kube-probe"
|
|
79
|
+
];
|
|
80
|
+
const WRITE_TOKEN_FORMAT = /^apt_[a-zA-Z0-9]{24}$/;
|
|
81
|
+
const TRUE_VALUES = /* @__PURE__ */ new Set(["1", "true", "yes"]);
|
|
82
|
+
const GLOBAL_CONFIG_KEY = /* @__PURE__ */ Symbol.for("apitally.config");
|
|
83
|
+
const configHolder = globalThis;
|
|
84
|
+
function setConfig(options = {}) {
|
|
85
|
+
const { config, error } = resolveConfig(options);
|
|
86
|
+
const currentConfig = configHolder[GLOBAL_CONFIG_KEY];
|
|
87
|
+
if (currentConfig) {
|
|
88
|
+
if (!isSameConfig(config, currentConfig)) {
|
|
89
|
+
(0, import_logger.logWarning)(
|
|
90
|
+
"useApitally() was called again with different options; the first call's configuration stays in effect"
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
return currentConfig;
|
|
94
|
+
}
|
|
95
|
+
if (error) {
|
|
96
|
+
(0, import_logger.logError)(error);
|
|
97
|
+
}
|
|
98
|
+
configHolder[GLOBAL_CONFIG_KEY] = config;
|
|
99
|
+
return config;
|
|
100
|
+
}
|
|
101
|
+
function getConfig() {
|
|
102
|
+
return configHolder[GLOBAL_CONFIG_KEY] ?? resolveConfig({}).config;
|
|
103
|
+
}
|
|
104
|
+
function isValidWriteToken(value) {
|
|
105
|
+
return WRITE_TOKEN_FORMAT.test(value);
|
|
106
|
+
}
|
|
107
|
+
function isApitallyDisabledViaEnv() {
|
|
108
|
+
return isTruthyEnvValue(process.env.APITALLY_DISABLED);
|
|
109
|
+
}
|
|
110
|
+
function matchesAny(patterns, value) {
|
|
111
|
+
return patterns.some((pattern) => {
|
|
112
|
+
pattern.lastIndex = 0;
|
|
113
|
+
return pattern.test(value);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
function compilePatterns(defaults, userPatterns = []) {
|
|
117
|
+
return [
|
|
118
|
+
...defaults.map((pattern) => new RegExp(pattern, "i")),
|
|
119
|
+
...userPatterns.map((pattern) => new RegExp(pattern))
|
|
120
|
+
];
|
|
121
|
+
}
|
|
122
|
+
function resolveConfig(options) {
|
|
123
|
+
const config = {
|
|
124
|
+
writeToken: options.writeToken ?? nonEmptyEnvVar("APITALLY_WRITE_TOKEN") ?? "",
|
|
125
|
+
env: options.env ?? nonEmptyEnvVar("APITALLY_ENV") ?? DEFAULT_ENV,
|
|
126
|
+
appVersion: options.appVersion,
|
|
127
|
+
disabled: options.disabled === true || isTruthyEnvValue(process.env.APITALLY_DISABLED) || isTruthyEnvValue(process.env.OTEL_SDK_DISABLED),
|
|
128
|
+
captureLogs: options.captureLogs ?? true,
|
|
129
|
+
captureRequestHeaders: options.captureRequestHeaders ?? false,
|
|
130
|
+
captureRequestBody: options.captureRequestBody ?? false,
|
|
131
|
+
captureResponseHeaders: options.captureResponseHeaders ?? true,
|
|
132
|
+
captureResponseBody: options.captureResponseBody ?? false,
|
|
133
|
+
maskQueryParams: dropNonRegExpPatterns("maskQueryParams", options.maskQueryParams),
|
|
134
|
+
maskHeaders: dropNonRegExpPatterns("maskHeaders", options.maskHeaders),
|
|
135
|
+
maskBodyFields: dropNonRegExpPatterns("maskBodyFields", options.maskBodyFields),
|
|
136
|
+
maskRequestBody: options.maskRequestBody,
|
|
137
|
+
maskResponseBody: options.maskResponseBody,
|
|
138
|
+
maskLogRecord: options.maskLogRecord,
|
|
139
|
+
excludePaths: dropNonRegExpPatterns("excludePaths", options.excludePaths),
|
|
140
|
+
// An invalid sampleRate resolves to capturing everything: no data is lost, so no warning.
|
|
141
|
+
sampleRate: typeof options.sampleRate === "number" && options.sampleRate >= 0 && options.sampleRate <= 1 ? options.sampleRate : 1,
|
|
142
|
+
sampleOnRequest: options.sampleOnRequest,
|
|
143
|
+
sampleOnResponse: options.sampleOnResponse,
|
|
144
|
+
otlpEndpoint: nonEmptyEnvVar("APITALLY_OTLP_ENDPOINT") ?? DEFAULT_OTLP_ENDPOINT
|
|
145
|
+
};
|
|
146
|
+
if (config.disabled) {
|
|
147
|
+
return { config };
|
|
148
|
+
}
|
|
149
|
+
if (!config.writeToken) {
|
|
150
|
+
config.disabled = true;
|
|
151
|
+
return {
|
|
152
|
+
config,
|
|
153
|
+
error: "Apitally write token is missing (set the writeToken option or the APITALLY_WRITE_TOKEN environment variable)"
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
if (!isValidWriteToken(config.writeToken)) {
|
|
157
|
+
config.disabled = true;
|
|
158
|
+
return {
|
|
159
|
+
config,
|
|
160
|
+
error: `Apitally write token has an invalid format: ${config.writeToken.slice(0, 8)}...`
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
if (!isHttpUrl(config.otlpEndpoint)) {
|
|
164
|
+
config.disabled = true;
|
|
165
|
+
return {
|
|
166
|
+
config,
|
|
167
|
+
error: `Apitally OTLP endpoint is not a valid HTTP or HTTPS URL: ${config.otlpEndpoint}`
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
return { config };
|
|
171
|
+
}
|
|
172
|
+
function isHttpUrl(value) {
|
|
173
|
+
let url;
|
|
174
|
+
try {
|
|
175
|
+
url = new URL(value);
|
|
176
|
+
} catch {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
return url.protocol === "http:" || url.protocol === "https:";
|
|
180
|
+
}
|
|
181
|
+
function dropNonRegExpPatterns(optionName, patterns = []) {
|
|
182
|
+
return patterns.filter((pattern) => {
|
|
183
|
+
if (pattern instanceof RegExp) {
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
(0, import_logger.logError)(`Pattern in ${optionName} ignored because it is not a RegExp: ${String(pattern)}`);
|
|
187
|
+
return false;
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
function isSameConfig(a, b) {
|
|
191
|
+
return Object.keys(a).every((key) => {
|
|
192
|
+
const left = a[key];
|
|
193
|
+
const right = b[key];
|
|
194
|
+
if (Array.isArray(left) && Array.isArray(right)) {
|
|
195
|
+
return left.length === right.length && left.every((item, index) => {
|
|
196
|
+
const other = right[index];
|
|
197
|
+
return item instanceof RegExp && other instanceof RegExp && item.source === other.source && item.flags === other.flags;
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
if (typeof left === "function" && typeof right === "function") {
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
return left === right;
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
function isTruthyEnvValue(value) {
|
|
207
|
+
return value !== void 0 && TRUE_VALUES.has(value.trim().toLowerCase());
|
|
208
|
+
}
|
|
209
|
+
function nonEmptyEnvVar(name) {
|
|
210
|
+
return process.env[name]?.trim() || void 0;
|
|
211
|
+
}
|
|
212
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
213
|
+
0 && (module.exports = {
|
|
214
|
+
DEFAULT_ENV,
|
|
215
|
+
DEFAULT_EXCLUDE_PATHS,
|
|
216
|
+
DEFAULT_MASK_BODY_FIELDS,
|
|
217
|
+
DEFAULT_MASK_HEADERS,
|
|
218
|
+
DEFAULT_MASK_QUERY_PARAMS,
|
|
219
|
+
EXCLUDE_USER_AGENTS,
|
|
220
|
+
compilePatterns,
|
|
221
|
+
getConfig,
|
|
222
|
+
isApitallyDisabledViaEnv,
|
|
223
|
+
isValidWriteToken,
|
|
224
|
+
matchesAny,
|
|
225
|
+
setConfig
|
|
226
|
+
});
|
|
227
|
+
//# sourceMappingURL=config.cjs.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,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 };
|