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/spool.cjs
ADDED
|
@@ -0,0 +1,314 @@
|
|
|
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 spool_exports = {};
|
|
20
|
+
__export(spool_exports, {
|
|
21
|
+
Spool: () => Spool,
|
|
22
|
+
SpoolFile: () => SpoolFile
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(spool_exports);
|
|
25
|
+
var import_node_crypto = require("node:crypto");
|
|
26
|
+
var import_node_fs = require("node:fs");
|
|
27
|
+
var import_promises = require("node:fs/promises");
|
|
28
|
+
var import_node_os = require("node:os");
|
|
29
|
+
var import_node_path = require("node:path");
|
|
30
|
+
var import_node_zlib = require("node:zlib");
|
|
31
|
+
var import_logger = require('./logger.cjs');
|
|
32
|
+
const WRITE_FAILURE_WARNING = "Error writing to disk, dropping buffered telemetry";
|
|
33
|
+
const SIGNALS = ["traces", "logs", "metrics"];
|
|
34
|
+
const MAX_UNCOMPRESSED_FILE_SIZE = 4e6;
|
|
35
|
+
const MAX_RETRY_TIME_AFTER_FIRST_ATTEMPT_MILLIS = 59 * 60 * 1e3;
|
|
36
|
+
const MAX_SPOOL_SIZE_DISK = 5e7;
|
|
37
|
+
const MAX_SPOOL_SIZE_MEMORY = 1e7;
|
|
38
|
+
const MAX_UNTOUCHED_FILE_AGE_MILLIS = 2 * 60 * 60 * 1e3;
|
|
39
|
+
const SPOOL_FILE_NAME_PATTERN = /^apitally-.*\.gz$/;
|
|
40
|
+
class Spool {
|
|
41
|
+
inMemory;
|
|
42
|
+
maxSize;
|
|
43
|
+
current = /* @__PURE__ */ new Map();
|
|
44
|
+
closed = [];
|
|
45
|
+
tempDir;
|
|
46
|
+
queues = {
|
|
47
|
+
traces: Promise.resolve(),
|
|
48
|
+
logs: Promise.resolve(),
|
|
49
|
+
metrics: Promise.resolve()
|
|
50
|
+
};
|
|
51
|
+
constructor(tempDir = (0, import_node_os.tmpdir)()) {
|
|
52
|
+
this.tempDir = tempDir;
|
|
53
|
+
this.inMemory = !isTempDirWritable(tempDir);
|
|
54
|
+
if (this.inMemory) {
|
|
55
|
+
(0, import_logger.logWarning)(
|
|
56
|
+
`Unable to create temporary files, buffering telemetry in memory (max ${MAX_SPOOL_SIZE_MEMORY / 1e6} MB)`
|
|
57
|
+
);
|
|
58
|
+
} else {
|
|
59
|
+
cleanupOrphanedFiles(tempDir);
|
|
60
|
+
}
|
|
61
|
+
this.maxSize = this.inMemory ? MAX_SPOOL_SIZE_MEMORY : MAX_SPOOL_SIZE_DISK;
|
|
62
|
+
}
|
|
63
|
+
append(signal, payload) {
|
|
64
|
+
return this.enqueue(signal, async () => {
|
|
65
|
+
let file = this.current.get(signal);
|
|
66
|
+
if (file && file.uncompressedSize + payload.length > MAX_UNCOMPRESSED_FILE_SIZE) {
|
|
67
|
+
await this.closeCurrentFile(signal);
|
|
68
|
+
file = void 0;
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
if (!file) {
|
|
72
|
+
file = new SpoolFile(signal, this.inMemory ? void 0 : this.tempDir);
|
|
73
|
+
this.current.set(signal, file);
|
|
74
|
+
}
|
|
75
|
+
await file.write(payload);
|
|
76
|
+
(0, import_logger.resetWarning)(WRITE_FAILURE_WARNING);
|
|
77
|
+
} catch {
|
|
78
|
+
(0, import_logger.logWarning)(WRITE_FAILURE_WARNING);
|
|
79
|
+
await this.discardCurrentFile(signal);
|
|
80
|
+
}
|
|
81
|
+
await this.evict();
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
// Current files close only when no backlog exists, avoiding one file per cycle.
|
|
85
|
+
// Sequential rotation preserves send order.
|
|
86
|
+
async rotateForExport() {
|
|
87
|
+
for (const signal of SIGNALS) {
|
|
88
|
+
await this.enqueue(signal, async () => {
|
|
89
|
+
if (this.current.has(signal) && !this.closed.some((file) => file.signal === signal)) {
|
|
90
|
+
await this.closeCurrentFile(signal);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
await this.evict();
|
|
95
|
+
}
|
|
96
|
+
async closeCurrentFiles() {
|
|
97
|
+
for (const signal of SIGNALS) {
|
|
98
|
+
await this.enqueue(signal, () => this.closeCurrentFile(signal));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
pendingFiles() {
|
|
102
|
+
return [...this.closed];
|
|
103
|
+
}
|
|
104
|
+
async deleteFile(file) {
|
|
105
|
+
const index = this.closed.indexOf(file);
|
|
106
|
+
if (index >= 0) {
|
|
107
|
+
this.closed.splice(index, 1);
|
|
108
|
+
}
|
|
109
|
+
await file.delete();
|
|
110
|
+
}
|
|
111
|
+
// Apitally ingest deduplicates for one hour; a later retry could ingest the file twice.
|
|
112
|
+
deleteIfExpired(file) {
|
|
113
|
+
if (!file.isExpired()) {
|
|
114
|
+
return void 0;
|
|
115
|
+
}
|
|
116
|
+
(0, import_logger.logWarning)(`Buffered ${file.signal} could not be delivered within an hour and were dropped`);
|
|
117
|
+
return this.deleteFile(file);
|
|
118
|
+
}
|
|
119
|
+
// Refresh mtimes so orphan cleanup in another process preserves live files.
|
|
120
|
+
touchFiles() {
|
|
121
|
+
for (const file of [...this.current.values(), ...this.closed]) {
|
|
122
|
+
file.touch();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
async clear() {
|
|
126
|
+
await Promise.all(
|
|
127
|
+
SIGNALS.map((signal) => this.enqueue(signal, () => this.discardCurrentFile(signal)))
|
|
128
|
+
);
|
|
129
|
+
const files = this.closed.splice(0);
|
|
130
|
+
await Promise.all(files.map((file) => file.delete()));
|
|
131
|
+
}
|
|
132
|
+
enqueue(signal, operation) {
|
|
133
|
+
const result = this.queues[signal].then(operation);
|
|
134
|
+
this.queues[signal] = result.catch(() => void 0);
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
async closeCurrentFile(signal) {
|
|
138
|
+
const file = this.current.get(signal);
|
|
139
|
+
if (!file) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
this.current.delete(signal);
|
|
143
|
+
try {
|
|
144
|
+
await file.close();
|
|
145
|
+
this.closed.push(file);
|
|
146
|
+
} catch {
|
|
147
|
+
(0, import_logger.logWarning)(WRITE_FAILURE_WARNING);
|
|
148
|
+
await file.delete();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async discardCurrentFile(signal) {
|
|
152
|
+
const file = this.current.get(signal);
|
|
153
|
+
if (file) {
|
|
154
|
+
this.current.delete(signal);
|
|
155
|
+
await file.delete();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async evict() {
|
|
159
|
+
const deletions = [...this.closed].map((file) => this.deleteIfExpired(file));
|
|
160
|
+
while (this.totalSize() > this.maxSize) {
|
|
161
|
+
const oldest = this.closed.find((file) => file.signal !== "metrics") ?? this.closed[0];
|
|
162
|
+
if (!oldest) {
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
(0, import_logger.logWarning)(`Buffer size limit reached, dropping oldest buffered ${oldest.signal}`);
|
|
166
|
+
deletions.push(this.deleteFile(oldest));
|
|
167
|
+
}
|
|
168
|
+
await Promise.all(deletions);
|
|
169
|
+
}
|
|
170
|
+
totalSize() {
|
|
171
|
+
let total = 0;
|
|
172
|
+
for (const file of [...this.closed, ...this.current.values()]) {
|
|
173
|
+
total += file.storedSize;
|
|
174
|
+
}
|
|
175
|
+
return total;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
class SpoolFile {
|
|
179
|
+
signal;
|
|
180
|
+
path;
|
|
181
|
+
firstAttemptAtMillis;
|
|
182
|
+
uncompressedSize = 0;
|
|
183
|
+
gzip;
|
|
184
|
+
fileStream;
|
|
185
|
+
memoryChunks;
|
|
186
|
+
memorySize = 0;
|
|
187
|
+
streamError;
|
|
188
|
+
closedPromise;
|
|
189
|
+
constructor(signal, tempDir) {
|
|
190
|
+
this.signal = signal;
|
|
191
|
+
this.gzip = (0, import_node_zlib.createGzip)();
|
|
192
|
+
let closeTarget;
|
|
193
|
+
let closeEvent;
|
|
194
|
+
if (tempDir === void 0) {
|
|
195
|
+
const chunks = [];
|
|
196
|
+
this.memoryChunks = chunks;
|
|
197
|
+
this.gzip.on("data", (chunk) => {
|
|
198
|
+
chunks.push(chunk);
|
|
199
|
+
this.memorySize += chunk.length;
|
|
200
|
+
});
|
|
201
|
+
closeTarget = this.gzip;
|
|
202
|
+
closeEvent = "end";
|
|
203
|
+
} else {
|
|
204
|
+
this.path = (0, import_node_path.join)(tempDir, `apitally-${(0, import_node_crypto.randomUUID)()}.gz`);
|
|
205
|
+
const fd = (0, import_node_fs.openSync)(this.path, "wx", 384);
|
|
206
|
+
this.fileStream = (0, import_node_fs.createWriteStream)(this.path, { fd });
|
|
207
|
+
this.gzip.pipe(this.fileStream);
|
|
208
|
+
closeTarget = this.fileStream;
|
|
209
|
+
closeEvent = "close";
|
|
210
|
+
}
|
|
211
|
+
const streams = this.fileStream ? [this.gzip, this.fileStream] : [this.gzip];
|
|
212
|
+
this.closedPromise = new Promise((resolve, reject) => {
|
|
213
|
+
closeTarget.once(closeEvent, resolve);
|
|
214
|
+
for (const stream of streams) {
|
|
215
|
+
stream.once("error", reject);
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
this.closedPromise.catch(() => void 0);
|
|
219
|
+
for (const stream of streams) {
|
|
220
|
+
stream.on("error", (error) => {
|
|
221
|
+
this.streamError ??= error;
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
write(payload) {
|
|
226
|
+
return new Promise((resolve, reject) => {
|
|
227
|
+
if (this.streamError) {
|
|
228
|
+
reject(this.streamError);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
this.gzip.write(payload, (error) => {
|
|
232
|
+
const failure = error ?? this.streamError;
|
|
233
|
+
if (failure) {
|
|
234
|
+
reject(failure);
|
|
235
|
+
} else {
|
|
236
|
+
this.uncompressedSize += payload.length;
|
|
237
|
+
resolve();
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
async close() {
|
|
243
|
+
if (this.streamError) {
|
|
244
|
+
throw this.streamError;
|
|
245
|
+
}
|
|
246
|
+
this.gzip.end();
|
|
247
|
+
await this.closedPromise;
|
|
248
|
+
}
|
|
249
|
+
get storedSize() {
|
|
250
|
+
return this.fileStream ? this.fileStream.bytesWritten : this.memorySize;
|
|
251
|
+
}
|
|
252
|
+
markAttempt() {
|
|
253
|
+
this.firstAttemptAtMillis ??= performance.now();
|
|
254
|
+
}
|
|
255
|
+
isExpired() {
|
|
256
|
+
return this.firstAttemptAtMillis !== void 0 && performance.now() - this.firstAttemptAtMillis > MAX_RETRY_TIME_AFTER_FIRST_ATTEMPT_MILLIS;
|
|
257
|
+
}
|
|
258
|
+
touch() {
|
|
259
|
+
if (this.path) {
|
|
260
|
+
try {
|
|
261
|
+
const now = /* @__PURE__ */ new Date();
|
|
262
|
+
(0, import_node_fs.utimesSync)(this.path, now, now);
|
|
263
|
+
} catch {
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
readStoredBytes() {
|
|
268
|
+
if (this.path) {
|
|
269
|
+
return (0, import_promises.readFile)(this.path);
|
|
270
|
+
}
|
|
271
|
+
return Promise.resolve(Buffer.concat(this.memoryChunks ?? []));
|
|
272
|
+
}
|
|
273
|
+
async delete() {
|
|
274
|
+
this.gzip.destroy();
|
|
275
|
+
this.fileStream?.destroy();
|
|
276
|
+
if (this.path) {
|
|
277
|
+
await (0, import_promises.unlink)(this.path).catch(() => void 0);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
function isTempDirWritable(tempDir) {
|
|
282
|
+
const probePath = (0, import_node_path.join)(tempDir, `apitally-${(0, import_node_crypto.randomUUID)()}.gz`);
|
|
283
|
+
try {
|
|
284
|
+
(0, import_node_fs.writeFileSync)(probePath, "", { flag: "wx", mode: 384 });
|
|
285
|
+
(0, import_node_fs.unlinkSync)(probePath);
|
|
286
|
+
return true;
|
|
287
|
+
} catch {
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
function cleanupOrphanedFiles(tempDir) {
|
|
292
|
+
const cutoff = Date.now() - MAX_UNTOUCHED_FILE_AGE_MILLIS;
|
|
293
|
+
try {
|
|
294
|
+
for (const name of (0, import_node_fs.readdirSync)(tempDir)) {
|
|
295
|
+
if (!SPOOL_FILE_NAME_PATTERN.test(name)) {
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
try {
|
|
299
|
+
const filePath = (0, import_node_path.join)(tempDir, name);
|
|
300
|
+
if ((0, import_node_fs.statSync)(filePath).mtimeMs < cutoff) {
|
|
301
|
+
(0, import_node_fs.unlinkSync)(filePath);
|
|
302
|
+
}
|
|
303
|
+
} catch {
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
} catch {
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
310
|
+
0 && (module.exports = {
|
|
311
|
+
Spool,
|
|
312
|
+
SpoolFile
|
|
313
|
+
});
|
|
314
|
+
//# sourceMappingURL=spool.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/spool.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n createWriteStream,\n openSync,\n readdirSync,\n statSync,\n unlinkSync,\n utimesSync,\n type WriteStream,\n writeFileSync,\n} from \"node:fs\";\nimport { readFile, unlink } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { createGzip, type Gzip } from \"node:zlib\";\nimport { logWarning, resetWarning } from \"./logger.js\";\n\nconst WRITE_FAILURE_WARNING = \"Error writing to disk, dropping buffered telemetry\";\n\nconst SIGNALS = [\"traces\", \"logs\", \"metrics\"] as const;\nexport type Signal = (typeof SIGNALS)[number];\n\nconst MAX_UNCOMPRESSED_FILE_SIZE = 4_000_000;\nconst MAX_RETRY_TIME_AFTER_FIRST_ATTEMPT_MILLIS = 59 * 60 * 1000;\nconst MAX_SPOOL_SIZE_DISK = 50_000_000;\nconst MAX_SPOOL_SIZE_MEMORY = 10_000_000;\nconst MAX_UNTOUCHED_FILE_AGE_MILLIS = 2 * 60 * 60 * 1000;\nconst SPOOL_FILE_NAME_PATTERN = /^apitally-.*\\.gz$/;\n\n// Operations for each signal are serialized because gzip and file streams\n// complete asynchronously.\nexport class Spool {\n readonly inMemory: boolean;\n maxSize: number;\n readonly current = new Map<Signal, SpoolFile>();\n private readonly closed: SpoolFile[] = [];\n private readonly tempDir: string;\n private readonly queues: Record<Signal, Promise<void>> = {\n traces: Promise.resolve(),\n logs: Promise.resolve(),\n metrics: Promise.resolve(),\n };\n\n constructor(tempDir: string = tmpdir()) {\n this.tempDir = tempDir;\n this.inMemory = !isTempDirWritable(tempDir);\n if (this.inMemory) {\n logWarning(\n `Unable to create temporary files, buffering telemetry in memory (max ${MAX_SPOOL_SIZE_MEMORY / 1_000_000} MB)`,\n );\n } else {\n cleanupOrphanedFiles(tempDir);\n }\n this.maxSize = this.inMemory ? MAX_SPOOL_SIZE_MEMORY : MAX_SPOOL_SIZE_DISK;\n }\n\n append(signal: Signal, payload: Uint8Array): Promise<void> {\n return this.enqueue(signal, async () => {\n let file = this.current.get(signal);\n if (file && file.uncompressedSize + payload.length > MAX_UNCOMPRESSED_FILE_SIZE) {\n await this.closeCurrentFile(signal);\n file = undefined;\n }\n try {\n if (!file) {\n file = new SpoolFile(signal, this.inMemory ? undefined : this.tempDir);\n this.current.set(signal, file);\n }\n await file.write(payload);\n // Writes recovered; the write-failure warning may fire again later.\n resetWarning(WRITE_FAILURE_WARNING);\n } catch {\n logWarning(WRITE_FAILURE_WARNING);\n await this.discardCurrentFile(signal);\n }\n await this.evict();\n });\n }\n\n // Current files close only when no backlog exists, avoiding one file per cycle.\n // Sequential rotation preserves send order.\n async rotateForExport(): Promise<void> {\n for (const signal of SIGNALS) {\n await this.enqueue(signal, async () => {\n if (this.current.has(signal) && !this.closed.some((file) => file.signal === signal)) {\n await this.closeCurrentFile(signal);\n }\n });\n }\n await this.evict();\n }\n\n async closeCurrentFiles(): Promise<void> {\n for (const signal of SIGNALS) {\n await this.enqueue(signal, () => this.closeCurrentFile(signal));\n }\n }\n\n pendingFiles(): SpoolFile[] {\n return [...this.closed];\n }\n\n async deleteFile(file: SpoolFile): Promise<void> {\n const index = this.closed.indexOf(file);\n if (index >= 0) {\n this.closed.splice(index, 1);\n }\n await file.delete();\n }\n\n // Apitally ingest deduplicates for one hour; a later retry could ingest the file twice.\n deleteIfExpired(file: SpoolFile): Promise<void> | undefined {\n if (!file.isExpired()) {\n return undefined;\n }\n logWarning(`Buffered ${file.signal} could not be delivered within an hour and were dropped`);\n return this.deleteFile(file);\n }\n\n // Refresh mtimes so orphan cleanup in another process preserves live files.\n touchFiles(): void {\n for (const file of [...this.current.values(), ...this.closed]) {\n file.touch();\n }\n }\n\n async clear(): Promise<void> {\n await Promise.all(\n SIGNALS.map((signal) => this.enqueue(signal, () => this.discardCurrentFile(signal))),\n );\n const files = this.closed.splice(0);\n await Promise.all(files.map((file) => file.delete()));\n }\n\n private enqueue(signal: Signal, operation: () => Promise<void>): Promise<void> {\n const result = this.queues[signal].then(operation);\n this.queues[signal] = result.catch(() => undefined);\n return result;\n }\n\n private async closeCurrentFile(signal: Signal): Promise<void> {\n const file = this.current.get(signal);\n if (!file) {\n return;\n }\n this.current.delete(signal);\n try {\n await file.close();\n this.closed.push(file);\n } catch {\n logWarning(WRITE_FAILURE_WARNING);\n await file.delete();\n }\n }\n\n private async discardCurrentFile(signal: Signal): Promise<void> {\n const file = this.current.get(signal);\n if (file) {\n this.current.delete(signal);\n await file.delete();\n }\n }\n\n private async evict(): Promise<void> {\n const deletions = [...this.closed].map((file) => this.deleteIfExpired(file));\n while (this.totalSize() > this.maxSize) {\n // Prefer retaining metrics, but enforce the size limit when only metrics remain.\n const oldest = this.closed.find((file) => file.signal !== \"metrics\") ?? this.closed[0];\n if (!oldest) {\n break;\n }\n logWarning(`Buffer size limit reached, dropping oldest buffered ${oldest.signal}`);\n deletions.push(this.deleteFile(oldest));\n }\n await Promise.all(deletions);\n }\n\n private totalSize(): number {\n let total = 0;\n for (const file of [...this.closed, ...this.current.values()]) {\n total += file.storedSize;\n }\n return total;\n }\n}\n\n// One gzip stream of concatenated OTLP request payloads for a single signal,\n// written through to a temp file or, as fallback, an in-memory buffer.\nexport class SpoolFile {\n readonly signal: Signal;\n readonly path?: string;\n firstAttemptAtMillis?: number;\n uncompressedSize = 0;\n readonly gzip: Gzip;\n private readonly fileStream?: WriteStream;\n private readonly memoryChunks?: Buffer[];\n private memorySize = 0;\n private streamError?: Error;\n private readonly closedPromise: Promise<void>;\n\n constructor(signal: Signal, tempDir?: string) {\n this.signal = signal;\n this.gzip = createGzip();\n let closeTarget: Gzip | WriteStream;\n let closeEvent: string;\n if (tempDir === undefined) {\n const chunks: Buffer[] = [];\n this.memoryChunks = chunks;\n this.gzip.on(\"data\", (chunk: Buffer) => {\n chunks.push(chunk);\n this.memorySize += chunk.length;\n });\n closeTarget = this.gzip;\n closeEvent = \"end\";\n } else {\n this.path = join(tempDir, `apitally-${randomUUID()}.gz`);\n // A synchronous exclusive open reports creation errors to the triggering append.\n const fd = openSync(this.path, \"wx\", 0o600);\n this.fileStream = createWriteStream(this.path, { fd });\n this.gzip.pipe(this.fileStream);\n closeTarget = this.fileStream;\n closeEvent = \"close\";\n }\n const streams: (Gzip | WriteStream)[] = this.fileStream\n ? [this.gzip, this.fileStream]\n : [this.gzip];\n this.closedPromise = new Promise((resolve, reject) => {\n closeTarget.once(closeEvent, resolve);\n for (const stream of streams) {\n stream.once(\"error\", reject);\n }\n });\n // Stream errors can occur outside an awaited operation; rejection handling\n // prevents an unhandled rejection.\n this.closedPromise.catch(() => undefined);\n for (const stream of streams) {\n stream.on(\"error\", (error: Error) => {\n this.streamError ??= error;\n });\n }\n }\n\n write(payload: Uint8Array): Promise<void> {\n return new Promise((resolve, reject) => {\n if (this.streamError) {\n reject(this.streamError);\n return;\n }\n this.gzip.write(payload, (error) => {\n const failure = error ?? this.streamError;\n if (failure) {\n reject(failure);\n } else {\n this.uncompressedSize += payload.length;\n resolve();\n }\n });\n });\n }\n\n async close(): Promise<void> {\n if (this.streamError) {\n throw this.streamError;\n }\n this.gzip.end();\n await this.closedPromise;\n }\n\n get storedSize(): number {\n return this.fileStream ? this.fileStream.bytesWritten : this.memorySize;\n }\n\n markAttempt(): void {\n this.firstAttemptAtMillis ??= performance.now();\n }\n\n isExpired(): boolean {\n return (\n this.firstAttemptAtMillis !== undefined &&\n performance.now() - this.firstAttemptAtMillis > MAX_RETRY_TIME_AFTER_FIRST_ATTEMPT_MILLIS\n );\n }\n\n touch(): void {\n if (this.path) {\n try {\n const now = new Date();\n utimesSync(this.path, now, now);\n } catch {\n // The file may already be gone; orphan cleanup only targets stale files.\n }\n }\n }\n\n readStoredBytes(): Promise<Buffer> {\n if (this.path) {\n return readFile(this.path);\n }\n return Promise.resolve(Buffer.concat(this.memoryChunks ?? []));\n }\n\n async delete(): Promise<void> {\n this.gzip.destroy();\n this.fileStream?.destroy();\n if (this.path) {\n await unlink(this.path).catch(() => undefined);\n }\n }\n}\n\nfunction isTempDirWritable(tempDir: string): boolean {\n const probePath = join(tempDir, `apitally-${randomUUID()}.gz`);\n try {\n writeFileSync(probePath, \"\", { flag: \"wx\", mode: 0o600 });\n unlinkSync(probePath);\n return true;\n } catch {\n return false;\n }\n}\n\n// Live processes refresh mtimes each cycle, so only stale spool files from dead\n// processes are removed.\nfunction cleanupOrphanedFiles(tempDir: string): void {\n const cutoff = Date.now() - MAX_UNTOUCHED_FILE_AGE_MILLIS;\n try {\n for (const name of readdirSync(tempDir)) {\n if (!SPOOL_FILE_NAME_PATTERN.test(name)) {\n continue;\n }\n try {\n const filePath = join(tempDir, name);\n if (statSync(filePath).mtimeMs < cutoff) {\n unlinkSync(filePath);\n }\n } catch {\n // Another process may have removed the file first.\n }\n }\n } catch {\n // Reading the temporary directory is best-effort.\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/spool.d.cts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Gzip } from 'node:zlib';
|
|
2
|
+
|
|
3
|
+
declare const SIGNALS: readonly ["traces", "logs", "metrics"];
|
|
4
|
+
type Signal = (typeof SIGNALS)[number];
|
|
5
|
+
declare class Spool {
|
|
6
|
+
readonly inMemory: boolean;
|
|
7
|
+
maxSize: number;
|
|
8
|
+
readonly current: Map<"traces" | "logs" | "metrics", SpoolFile>;
|
|
9
|
+
private readonly closed;
|
|
10
|
+
private readonly tempDir;
|
|
11
|
+
private readonly queues;
|
|
12
|
+
constructor(tempDir?: string);
|
|
13
|
+
append(signal: Signal, payload: Uint8Array): Promise<void>;
|
|
14
|
+
rotateForExport(): Promise<void>;
|
|
15
|
+
closeCurrentFiles(): Promise<void>;
|
|
16
|
+
pendingFiles(): SpoolFile[];
|
|
17
|
+
deleteFile(file: SpoolFile): Promise<void>;
|
|
18
|
+
deleteIfExpired(file: SpoolFile): Promise<void> | undefined;
|
|
19
|
+
touchFiles(): void;
|
|
20
|
+
clear(): Promise<void>;
|
|
21
|
+
private enqueue;
|
|
22
|
+
private closeCurrentFile;
|
|
23
|
+
private discardCurrentFile;
|
|
24
|
+
private evict;
|
|
25
|
+
private totalSize;
|
|
26
|
+
}
|
|
27
|
+
declare class SpoolFile {
|
|
28
|
+
readonly signal: Signal;
|
|
29
|
+
readonly path?: string;
|
|
30
|
+
firstAttemptAtMillis?: number;
|
|
31
|
+
uncompressedSize: number;
|
|
32
|
+
readonly gzip: Gzip;
|
|
33
|
+
private readonly fileStream?;
|
|
34
|
+
private readonly memoryChunks?;
|
|
35
|
+
private memorySize;
|
|
36
|
+
private streamError?;
|
|
37
|
+
private readonly closedPromise;
|
|
38
|
+
constructor(signal: Signal, tempDir?: string);
|
|
39
|
+
write(payload: Uint8Array): Promise<void>;
|
|
40
|
+
close(): Promise<void>;
|
|
41
|
+
get storedSize(): number;
|
|
42
|
+
markAttempt(): void;
|
|
43
|
+
isExpired(): boolean;
|
|
44
|
+
touch(): void;
|
|
45
|
+
readStoredBytes(): Promise<Buffer>;
|
|
46
|
+
delete(): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { type Signal, Spool, SpoolFile };
|
package/dist/spool.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Gzip } from 'node:zlib';
|
|
2
|
+
|
|
3
|
+
declare const SIGNALS: readonly ["traces", "logs", "metrics"];
|
|
4
|
+
type Signal = (typeof SIGNALS)[number];
|
|
5
|
+
declare class Spool {
|
|
6
|
+
readonly inMemory: boolean;
|
|
7
|
+
maxSize: number;
|
|
8
|
+
readonly current: Map<"traces" | "logs" | "metrics", SpoolFile>;
|
|
9
|
+
private readonly closed;
|
|
10
|
+
private readonly tempDir;
|
|
11
|
+
private readonly queues;
|
|
12
|
+
constructor(tempDir?: string);
|
|
13
|
+
append(signal: Signal, payload: Uint8Array): Promise<void>;
|
|
14
|
+
rotateForExport(): Promise<void>;
|
|
15
|
+
closeCurrentFiles(): Promise<void>;
|
|
16
|
+
pendingFiles(): SpoolFile[];
|
|
17
|
+
deleteFile(file: SpoolFile): Promise<void>;
|
|
18
|
+
deleteIfExpired(file: SpoolFile): Promise<void> | undefined;
|
|
19
|
+
touchFiles(): void;
|
|
20
|
+
clear(): Promise<void>;
|
|
21
|
+
private enqueue;
|
|
22
|
+
private closeCurrentFile;
|
|
23
|
+
private discardCurrentFile;
|
|
24
|
+
private evict;
|
|
25
|
+
private totalSize;
|
|
26
|
+
}
|
|
27
|
+
declare class SpoolFile {
|
|
28
|
+
readonly signal: Signal;
|
|
29
|
+
readonly path?: string;
|
|
30
|
+
firstAttemptAtMillis?: number;
|
|
31
|
+
uncompressedSize: number;
|
|
32
|
+
readonly gzip: Gzip;
|
|
33
|
+
private readonly fileStream?;
|
|
34
|
+
private readonly memoryChunks?;
|
|
35
|
+
private memorySize;
|
|
36
|
+
private streamError?;
|
|
37
|
+
private readonly closedPromise;
|
|
38
|
+
constructor(signal: Signal, tempDir?: string);
|
|
39
|
+
write(payload: Uint8Array): Promise<void>;
|
|
40
|
+
close(): Promise<void>;
|
|
41
|
+
get storedSize(): number;
|
|
42
|
+
markAttempt(): void;
|
|
43
|
+
isExpired(): boolean;
|
|
44
|
+
touch(): void;
|
|
45
|
+
readStoredBytes(): Promise<Buffer>;
|
|
46
|
+
delete(): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { type Signal, Spool, SpoolFile };
|