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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/common/client.ts"],"sourcesContent":["import fetchRetry from \"fetch-retry\";\nimport { randomUUID } from \"node:crypto\";\n\nimport { ConsumerRegistry } from \"./consumerRegistry.js\";\nimport { getOrCreateInstanceUuid } from \"./instance.js\";\nimport { Logger, getLogger } from \"./logging.js\";\nimport { isValidClientId, isValidEnv } from \"./paramValidation.js\";\nimport { RequestCounter } from \"./requestCounter.js\";\nimport { RequestLogger } from \"./requestLogger.js\";\nimport { getCpuMemoryUsage } from \"./resources.js\";\nimport { ServerErrorCounter } from \"./serverErrorCounter.js\";\nimport { SpanCollector } from \"./spanCollector.js\";\nimport {\n ApitallyConfig,\n StartupData,\n StartupPayload,\n SyncPayload,\n} from \"./types.js\";\nimport { ValidationErrorCounter } from \"./validationErrorCounter.js\";\n\nconst SYNC_INTERVAL = 60000; // 60 seconds\nconst INITIAL_SYNC_INTERVAL = 10000; // 10 seconds\nconst INITIAL_SYNC_INTERVAL_DURATION = 3600000; // 1 hour\nconst MAX_QUEUE_TIME = 3.6e6; // 1 hour\n\nclass HTTPError extends Error {\n public response: Response;\n\n constructor(response: Response) {\n const reason = response.status\n ? `status code ${response.status}`\n : \"an unknown error\";\n super(`Request failed with ${reason}`);\n this.response = response;\n }\n}\n\nexport class ApitallyClient {\n private clientId: string;\n private env: string;\n\n private static instance?: ApitallyClient;\n private instanceUuid: string;\n private syncDataQueue: SyncPayload[];\n private syncIntervalId?: NodeJS.Timeout;\n public startupData?: StartupData;\n private startupDataSent: boolean = false;\n private enabled: boolean = true;\n\n public requestCounter: RequestCounter;\n public requestLogger: RequestLogger;\n public spanCollector: SpanCollector;\n public validationErrorCounter: ValidationErrorCounter;\n public serverErrorCounter: ServerErrorCounter;\n public consumerRegistry: ConsumerRegistry;\n public logger: Logger;\n\n constructor({\n clientId,\n env = \"dev\",\n requestLogging,\n requestLoggingConfig,\n logger,\n }: ApitallyConfig) {\n if (ApitallyClient.instance) {\n throw new Error(\"Apitally client is already initialized\");\n }\n\n this.logger = logger ?? getLogger();\n\n if (!isValidClientId(clientId)) {\n this.logger.error(\n `Invalid Apitally client ID '${clientId}' (expecting hexadecimal UUID format)`,\n );\n this.enabled = false;\n }\n if (!isValidEnv(env)) {\n this.logger.error(\n `Invalid Apitally env '${env}' (expecting 1-32 alphanumeric characters and hyphens only)`,\n );\n this.enabled = false;\n }\n if (requestLoggingConfig && !requestLogging) {\n console.warn(\n \"requestLoggingConfig is deprecated, use requestLogging instead.\",\n );\n }\n\n ApitallyClient.instance = this;\n this.clientId = clientId;\n this.env = env;\n this.instanceUuid = getOrCreateInstanceUuid(clientId, env);\n this.syncDataQueue = [];\n this.requestCounter = new RequestCounter();\n this.requestLogger = new RequestLogger(\n requestLogging ?? requestLoggingConfig,\n );\n this.spanCollector = new SpanCollector(\n this.enabled &&\n this.requestLogger.enabled &&\n this.requestLogger.config.captureTraces,\n );\n this.validationErrorCounter = new ValidationErrorCounter();\n this.serverErrorCounter = new ServerErrorCounter();\n this.consumerRegistry = new ConsumerRegistry();\n this.handleShutdown = this.handleShutdown.bind(this);\n }\n\n public static getInstance() {\n if (!ApitallyClient.instance) {\n throw new Error(\"Apitally client is not initialized\");\n }\n return ApitallyClient.instance;\n }\n\n public isEnabled() {\n return this.enabled;\n }\n\n public static async shutdown() {\n if (ApitallyClient.instance) {\n await ApitallyClient.instance.handleShutdown();\n }\n }\n\n public async handleShutdown() {\n this.enabled = false;\n this.stopSync();\n await this.sendSyncData();\n await this.sendLogData();\n await this.spanCollector.shutdown();\n await this.requestLogger.close();\n ApitallyClient.instance = undefined;\n }\n\n private getHubUrlPrefix() {\n const baseURL =\n process.env.APITALLY_HUB_BASE_URL || \"https://hub.apitally.io\";\n const version = \"v2\";\n return `${baseURL}/${version}/${this.clientId}/${this.env}/`;\n }\n\n private async sendData(url: string, payload: any) {\n const fetchWithRetry = fetchRetry(fetch, {\n retries: 3,\n retryDelay: 1000,\n retryOn: [408, 429, 500, 502, 503, 504],\n });\n const response = await fetchWithRetry(this.getHubUrlPrefix() + url, {\n method: \"POST\",\n body: JSON.stringify(payload),\n headers: { \"Content-Type\": \"application/json\" },\n });\n if (!response.ok) {\n throw new HTTPError(response);\n }\n }\n\n public startSync() {\n if (!this.enabled) {\n return;\n }\n this.sync();\n this.syncIntervalId = setInterval(() => {\n this.sync();\n }, INITIAL_SYNC_INTERVAL);\n setTimeout(() => {\n if (this.syncIntervalId) {\n clearInterval(this.syncIntervalId);\n this.syncIntervalId = setInterval(() => {\n this.sync();\n }, SYNC_INTERVAL);\n }\n }, INITIAL_SYNC_INTERVAL_DURATION);\n }\n\n private async sync() {\n try {\n const promises = [this.sendSyncData(), this.sendLogData()];\n if (!this.startupDataSent) {\n promises.push(this.sendStartupData());\n }\n await Promise.all(promises);\n } catch (error) {\n this.logger.error(\"Error while syncing with Apitally Hub\", {\n error,\n });\n }\n }\n\n private stopSync() {\n if (this.syncIntervalId) {\n clearInterval(this.syncIntervalId);\n this.syncIntervalId = undefined;\n }\n }\n\n public setStartupData(data: StartupData) {\n this.startupData = data;\n this.startupDataSent = false;\n }\n\n private async sendStartupData() {\n if (this.startupData) {\n this.logger.debug(\"Sending startup data to Apitally Hub\");\n const payload: StartupPayload = {\n instance_uuid: this.instanceUuid,\n message_uuid: randomUUID(),\n ...this.startupData,\n };\n try {\n await this.sendData(\"startup\", payload);\n this.startupDataSent = true;\n } catch (error) {\n const handled = this.handleHubError(error);\n if (!handled) {\n this.logger.error((error as Error).message);\n this.logger.debug(\n \"Error while sending startup data to Apitally Hub (will retry)\",\n { error },\n );\n }\n }\n }\n }\n\n private async sendSyncData() {\n this.logger.debug(\"Synchronizing data with Apitally Hub\");\n const newPayload: SyncPayload = {\n timestamp: Date.now() / 1000,\n instance_uuid: this.instanceUuid,\n message_uuid: randomUUID(),\n requests: this.requestCounter.getAndResetRequests(),\n validation_errors:\n this.validationErrorCounter.getAndResetValidationErrors(),\n server_errors: this.serverErrorCounter.getAndResetServerErrors(),\n consumers: this.consumerRegistry.getAndResetUpdatedConsumers(),\n resources: getCpuMemoryUsage(),\n };\n this.syncDataQueue.push(newPayload);\n\n let i = 0;\n while (this.syncDataQueue.length > 0) {\n const payload = this.syncDataQueue.shift();\n if (payload) {\n try {\n if (Date.now() - payload.timestamp * 1000 <= MAX_QUEUE_TIME) {\n if (i > 0) {\n await this.randomDelay();\n }\n await this.sendData(\"sync\", payload);\n i += 1;\n }\n } catch (error) {\n const handled = this.handleHubError(error);\n if (!handled) {\n this.logger.debug(\n \"Error while synchronizing data with Apitally Hub (will retry)\",\n { error },\n );\n this.syncDataQueue.push(payload);\n break;\n }\n }\n }\n }\n }\n\n private async sendLogData() {\n this.logger.debug(\"Sending request log data to Apitally Hub\");\n await this.requestLogger.rotateFile();\n\n const fetchWithRetry = fetchRetry(fetch, {\n retries: 3,\n retryDelay: 1000,\n retryOn: [408, 429, 500, 502, 503, 504],\n });\n\n let i = 0;\n let logFile;\n while ((logFile = this.requestLogger.getFile())) {\n if (i > 0) {\n await this.randomDelay();\n }\n\n try {\n const response = await fetchWithRetry(\n `${this.getHubUrlPrefix()}log?uuid=${logFile.uuid}`,\n {\n method: \"POST\",\n body: (await logFile.getContent()) as any,\n },\n );\n\n if (response.status === 402 && response.headers.has(\"Retry-After\")) {\n const retryAfter = parseInt(\n response.headers.get(\"Retry-After\") ?? \"0\",\n );\n if (retryAfter > 0) {\n this.requestLogger.suspendUntil = Date.now() + retryAfter * 1000;\n this.requestLogger.clear();\n return;\n }\n }\n\n if (!response.ok) {\n throw new HTTPError(response);\n }\n\n logFile.delete();\n } catch (error) {\n this.requestLogger.retryFileLater(logFile);\n break;\n }\n\n i++;\n if (i >= 10) break;\n }\n }\n\n private handleHubError(error: unknown) {\n if (error instanceof HTTPError) {\n if (error.response.status === 404) {\n this.logger.error(`Invalid Apitally client ID: '${this.clientId}'`);\n this.enabled = false;\n this.stopSync();\n return true;\n }\n if (error.response.status === 422) {\n this.logger.error(\"Received validation error from Apitally Hub\");\n return true;\n }\n }\n return false;\n }\n\n private async randomDelay() {\n const delay = 100 + Math.random() * 400;\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n}\n"],"mappings":"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","names":["SYNC_INTERVAL","INITIAL_SYNC_INTERVAL","INITIAL_SYNC_INTERVAL_DURATION","MAX_QUEUE_TIME","HTTPError","Error","response","reason","status","ApitallyClient","clientId","env","instanceUuid","syncDataQueue","syncIntervalId","startupData","startupDataSent","enabled","requestCounter","requestLogger","spanCollector","validationErrorCounter","serverErrorCounter","consumerRegistry","logger","requestLogging","requestLoggingConfig","instance","getLogger","isValidClientId","error","isValidEnv","console","warn","getOrCreateInstanceUuid","RequestCounter","RequestLogger","SpanCollector","config","captureTraces","ValidationErrorCounter","ServerErrorCounter","ConsumerRegistry","handleShutdown","bind","getInstance","isEnabled","shutdown","stopSync","sendSyncData","sendLogData","close","undefined","getHubUrlPrefix","baseURL","process","APITALLY_HUB_BASE_URL","version","sendData","url","payload","fetchWithRetry","fetchRetry","fetch","retries","retryDelay","retryOn","method","body","JSON","stringify","headers","ok","startSync","sync","setInterval","setTimeout","clearInterval","promises","push","sendStartupData","Promise","all","setStartupData","data","debug","instance_uuid","message_uuid","randomUUID","handled","handleHubError","message","newPayload","timestamp","Date","now","requests","getAndResetRequests","validation_errors","getAndResetValidationErrors","server_errors","getAndResetServerErrors","consumers","getAndResetUpdatedConsumers","resources","getCpuMemoryUsage","i","length","shift","randomDelay","rotateFile","logFile","getFile","uuid","getContent","has","retryAfter","parseInt","get","suspendUntil","clear","delete","retryFileLater","delay","Math","random","resolve"]}
|
package/dist/common/client.d.cts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { ConsumerRegistry } from './consumerRegistry.cjs';
|
|
2
|
-
import { Logger } from './logging.cjs';
|
|
3
|
-
import { RequestCounter } from './requestCounter.cjs';
|
|
4
|
-
import { RequestLogger } from './requestLogger.cjs';
|
|
5
|
-
import { ServerErrorCounter } from './serverErrorCounter.cjs';
|
|
6
|
-
import { SpanCollector } from './spanCollector.cjs';
|
|
7
|
-
import { StartupData, ApitallyConfig } from './types.cjs';
|
|
8
|
-
import { ValidationErrorCounter } from './validationErrorCounter.cjs';
|
|
9
|
-
import 'winston';
|
|
10
|
-
import 'node:buffer';
|
|
11
|
-
import 'node:http';
|
|
12
|
-
import './tempGzipFile.cjs';
|
|
13
|
-
import '@opentelemetry/sdk-trace-base';
|
|
14
|
-
|
|
15
|
-
declare class ApitallyClient {
|
|
16
|
-
private clientId;
|
|
17
|
-
private env;
|
|
18
|
-
private static instance?;
|
|
19
|
-
private instanceUuid;
|
|
20
|
-
private syncDataQueue;
|
|
21
|
-
private syncIntervalId?;
|
|
22
|
-
startupData?: StartupData;
|
|
23
|
-
private startupDataSent;
|
|
24
|
-
private enabled;
|
|
25
|
-
requestCounter: RequestCounter;
|
|
26
|
-
requestLogger: RequestLogger;
|
|
27
|
-
spanCollector: SpanCollector;
|
|
28
|
-
validationErrorCounter: ValidationErrorCounter;
|
|
29
|
-
serverErrorCounter: ServerErrorCounter;
|
|
30
|
-
consumerRegistry: ConsumerRegistry;
|
|
31
|
-
logger: Logger;
|
|
32
|
-
constructor({ clientId, env, requestLogging, requestLoggingConfig, logger, }: ApitallyConfig);
|
|
33
|
-
static getInstance(): ApitallyClient;
|
|
34
|
-
isEnabled(): boolean;
|
|
35
|
-
static shutdown(): Promise<void>;
|
|
36
|
-
handleShutdown(): Promise<void>;
|
|
37
|
-
private getHubUrlPrefix;
|
|
38
|
-
private sendData;
|
|
39
|
-
startSync(): void;
|
|
40
|
-
private sync;
|
|
41
|
-
private stopSync;
|
|
42
|
-
setStartupData(data: StartupData): void;
|
|
43
|
-
private sendStartupData;
|
|
44
|
-
private sendSyncData;
|
|
45
|
-
private sendLogData;
|
|
46
|
-
private handleHubError;
|
|
47
|
-
private randomDelay;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export { ApitallyClient };
|
package/dist/common/client.d.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { ConsumerRegistry } from './consumerRegistry.js';
|
|
2
|
-
import { Logger } from './logging.js';
|
|
3
|
-
import { RequestCounter } from './requestCounter.js';
|
|
4
|
-
import { RequestLogger } from './requestLogger.js';
|
|
5
|
-
import { ServerErrorCounter } from './serverErrorCounter.js';
|
|
6
|
-
import { SpanCollector } from './spanCollector.js';
|
|
7
|
-
import { StartupData, ApitallyConfig } from './types.js';
|
|
8
|
-
import { ValidationErrorCounter } from './validationErrorCounter.js';
|
|
9
|
-
import 'winston';
|
|
10
|
-
import 'node:buffer';
|
|
11
|
-
import 'node:http';
|
|
12
|
-
import './tempGzipFile.js';
|
|
13
|
-
import '@opentelemetry/sdk-trace-base';
|
|
14
|
-
|
|
15
|
-
declare class ApitallyClient {
|
|
16
|
-
private clientId;
|
|
17
|
-
private env;
|
|
18
|
-
private static instance?;
|
|
19
|
-
private instanceUuid;
|
|
20
|
-
private syncDataQueue;
|
|
21
|
-
private syncIntervalId?;
|
|
22
|
-
startupData?: StartupData;
|
|
23
|
-
private startupDataSent;
|
|
24
|
-
private enabled;
|
|
25
|
-
requestCounter: RequestCounter;
|
|
26
|
-
requestLogger: RequestLogger;
|
|
27
|
-
spanCollector: SpanCollector;
|
|
28
|
-
validationErrorCounter: ValidationErrorCounter;
|
|
29
|
-
serverErrorCounter: ServerErrorCounter;
|
|
30
|
-
consumerRegistry: ConsumerRegistry;
|
|
31
|
-
logger: Logger;
|
|
32
|
-
constructor({ clientId, env, requestLogging, requestLoggingConfig, logger, }: ApitallyConfig);
|
|
33
|
-
static getInstance(): ApitallyClient;
|
|
34
|
-
isEnabled(): boolean;
|
|
35
|
-
static shutdown(): Promise<void>;
|
|
36
|
-
handleShutdown(): Promise<void>;
|
|
37
|
-
private getHubUrlPrefix;
|
|
38
|
-
private sendData;
|
|
39
|
-
startSync(): void;
|
|
40
|
-
private sync;
|
|
41
|
-
private stopSync;
|
|
42
|
-
setStartupData(data: StartupData): void;
|
|
43
|
-
private sendStartupData;
|
|
44
|
-
private sendSyncData;
|
|
45
|
-
private sendLogData;
|
|
46
|
-
private handleHubError;
|
|
47
|
-
private randomDelay;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export { ApitallyClient };
|
package/dist/common/client.js
DELETED
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
4
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
-
var _a;
|
|
6
|
-
import fetchRetry from "fetch-retry";
|
|
7
|
-
import { randomUUID } from "node:crypto";
|
|
8
|
-
import { ConsumerRegistry } from "./consumerRegistry.js";
|
|
9
|
-
import { getOrCreateInstanceUuid } from "./instance.js";
|
|
10
|
-
import { getLogger } from "./logging.js";
|
|
11
|
-
import { isValidClientId, isValidEnv } from "./paramValidation.js";
|
|
12
|
-
import { RequestCounter } from "./requestCounter.js";
|
|
13
|
-
import { RequestLogger } from "./requestLogger.js";
|
|
14
|
-
import { getCpuMemoryUsage } from "./resources.js";
|
|
15
|
-
import { ServerErrorCounter } from "./serverErrorCounter.js";
|
|
16
|
-
import { SpanCollector } from "./spanCollector.js";
|
|
17
|
-
import { ValidationErrorCounter } from "./validationErrorCounter.js";
|
|
18
|
-
const SYNC_INTERVAL = 6e4;
|
|
19
|
-
const INITIAL_SYNC_INTERVAL = 1e4;
|
|
20
|
-
const INITIAL_SYNC_INTERVAL_DURATION = 36e5;
|
|
21
|
-
const MAX_QUEUE_TIME = 36e5;
|
|
22
|
-
let HTTPError = (_a = class extends Error {
|
|
23
|
-
response;
|
|
24
|
-
constructor(response) {
|
|
25
|
-
const reason = response.status ? `status code ${response.status}` : "an unknown error";
|
|
26
|
-
super(`Request failed with ${reason}`);
|
|
27
|
-
this.response = response;
|
|
28
|
-
}
|
|
29
|
-
}, __name(_a, "HTTPError"), _a);
|
|
30
|
-
const _ApitallyClient = class _ApitallyClient {
|
|
31
|
-
clientId;
|
|
32
|
-
env;
|
|
33
|
-
instanceUuid;
|
|
34
|
-
syncDataQueue;
|
|
35
|
-
syncIntervalId;
|
|
36
|
-
startupData;
|
|
37
|
-
startupDataSent = false;
|
|
38
|
-
enabled = true;
|
|
39
|
-
requestCounter;
|
|
40
|
-
requestLogger;
|
|
41
|
-
spanCollector;
|
|
42
|
-
validationErrorCounter;
|
|
43
|
-
serverErrorCounter;
|
|
44
|
-
consumerRegistry;
|
|
45
|
-
logger;
|
|
46
|
-
constructor({ clientId, env = "dev", requestLogging, requestLoggingConfig, logger }) {
|
|
47
|
-
if (_ApitallyClient.instance) {
|
|
48
|
-
throw new Error("Apitally client is already initialized");
|
|
49
|
-
}
|
|
50
|
-
this.logger = logger ?? getLogger();
|
|
51
|
-
if (!isValidClientId(clientId)) {
|
|
52
|
-
this.logger.error(`Invalid Apitally client ID '${clientId}' (expecting hexadecimal UUID format)`);
|
|
53
|
-
this.enabled = false;
|
|
54
|
-
}
|
|
55
|
-
if (!isValidEnv(env)) {
|
|
56
|
-
this.logger.error(`Invalid Apitally env '${env}' (expecting 1-32 alphanumeric characters and hyphens only)`);
|
|
57
|
-
this.enabled = false;
|
|
58
|
-
}
|
|
59
|
-
if (requestLoggingConfig && !requestLogging) {
|
|
60
|
-
console.warn("requestLoggingConfig is deprecated, use requestLogging instead.");
|
|
61
|
-
}
|
|
62
|
-
_ApitallyClient.instance = this;
|
|
63
|
-
this.clientId = clientId;
|
|
64
|
-
this.env = env;
|
|
65
|
-
this.instanceUuid = getOrCreateInstanceUuid(clientId, env);
|
|
66
|
-
this.syncDataQueue = [];
|
|
67
|
-
this.requestCounter = new RequestCounter();
|
|
68
|
-
this.requestLogger = new RequestLogger(requestLogging ?? requestLoggingConfig);
|
|
69
|
-
this.spanCollector = new SpanCollector(this.enabled && this.requestLogger.enabled && this.requestLogger.config.captureTraces);
|
|
70
|
-
this.validationErrorCounter = new ValidationErrorCounter();
|
|
71
|
-
this.serverErrorCounter = new ServerErrorCounter();
|
|
72
|
-
this.consumerRegistry = new ConsumerRegistry();
|
|
73
|
-
this.handleShutdown = this.handleShutdown.bind(this);
|
|
74
|
-
}
|
|
75
|
-
static getInstance() {
|
|
76
|
-
if (!_ApitallyClient.instance) {
|
|
77
|
-
throw new Error("Apitally client is not initialized");
|
|
78
|
-
}
|
|
79
|
-
return _ApitallyClient.instance;
|
|
80
|
-
}
|
|
81
|
-
isEnabled() {
|
|
82
|
-
return this.enabled;
|
|
83
|
-
}
|
|
84
|
-
static async shutdown() {
|
|
85
|
-
if (_ApitallyClient.instance) {
|
|
86
|
-
await _ApitallyClient.instance.handleShutdown();
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
async handleShutdown() {
|
|
90
|
-
this.enabled = false;
|
|
91
|
-
this.stopSync();
|
|
92
|
-
await this.sendSyncData();
|
|
93
|
-
await this.sendLogData();
|
|
94
|
-
await this.spanCollector.shutdown();
|
|
95
|
-
await this.requestLogger.close();
|
|
96
|
-
_ApitallyClient.instance = void 0;
|
|
97
|
-
}
|
|
98
|
-
getHubUrlPrefix() {
|
|
99
|
-
const baseURL = process.env.APITALLY_HUB_BASE_URL || "https://hub.apitally.io";
|
|
100
|
-
const version = "v2";
|
|
101
|
-
return `${baseURL}/${version}/${this.clientId}/${this.env}/`;
|
|
102
|
-
}
|
|
103
|
-
async sendData(url, payload) {
|
|
104
|
-
const fetchWithRetry = fetchRetry(fetch, {
|
|
105
|
-
retries: 3,
|
|
106
|
-
retryDelay: 1e3,
|
|
107
|
-
retryOn: [
|
|
108
|
-
408,
|
|
109
|
-
429,
|
|
110
|
-
500,
|
|
111
|
-
502,
|
|
112
|
-
503,
|
|
113
|
-
504
|
|
114
|
-
]
|
|
115
|
-
});
|
|
116
|
-
const response = await fetchWithRetry(this.getHubUrlPrefix() + url, {
|
|
117
|
-
method: "POST",
|
|
118
|
-
body: JSON.stringify(payload),
|
|
119
|
-
headers: {
|
|
120
|
-
"Content-Type": "application/json"
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
if (!response.ok) {
|
|
124
|
-
throw new HTTPError(response);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
startSync() {
|
|
128
|
-
if (!this.enabled) {
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
this.sync();
|
|
132
|
-
this.syncIntervalId = setInterval(() => {
|
|
133
|
-
this.sync();
|
|
134
|
-
}, INITIAL_SYNC_INTERVAL);
|
|
135
|
-
setTimeout(() => {
|
|
136
|
-
if (this.syncIntervalId) {
|
|
137
|
-
clearInterval(this.syncIntervalId);
|
|
138
|
-
this.syncIntervalId = setInterval(() => {
|
|
139
|
-
this.sync();
|
|
140
|
-
}, SYNC_INTERVAL);
|
|
141
|
-
}
|
|
142
|
-
}, INITIAL_SYNC_INTERVAL_DURATION);
|
|
143
|
-
}
|
|
144
|
-
async sync() {
|
|
145
|
-
try {
|
|
146
|
-
const promises = [
|
|
147
|
-
this.sendSyncData(),
|
|
148
|
-
this.sendLogData()
|
|
149
|
-
];
|
|
150
|
-
if (!this.startupDataSent) {
|
|
151
|
-
promises.push(this.sendStartupData());
|
|
152
|
-
}
|
|
153
|
-
await Promise.all(promises);
|
|
154
|
-
} catch (error) {
|
|
155
|
-
this.logger.error("Error while syncing with Apitally Hub", {
|
|
156
|
-
error
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
stopSync() {
|
|
161
|
-
if (this.syncIntervalId) {
|
|
162
|
-
clearInterval(this.syncIntervalId);
|
|
163
|
-
this.syncIntervalId = void 0;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
setStartupData(data) {
|
|
167
|
-
this.startupData = data;
|
|
168
|
-
this.startupDataSent = false;
|
|
169
|
-
}
|
|
170
|
-
async sendStartupData() {
|
|
171
|
-
if (this.startupData) {
|
|
172
|
-
this.logger.debug("Sending startup data to Apitally Hub");
|
|
173
|
-
const payload = {
|
|
174
|
-
instance_uuid: this.instanceUuid,
|
|
175
|
-
message_uuid: randomUUID(),
|
|
176
|
-
...this.startupData
|
|
177
|
-
};
|
|
178
|
-
try {
|
|
179
|
-
await this.sendData("startup", payload);
|
|
180
|
-
this.startupDataSent = true;
|
|
181
|
-
} catch (error) {
|
|
182
|
-
const handled = this.handleHubError(error);
|
|
183
|
-
if (!handled) {
|
|
184
|
-
this.logger.error(error.message);
|
|
185
|
-
this.logger.debug("Error while sending startup data to Apitally Hub (will retry)", {
|
|
186
|
-
error
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
async sendSyncData() {
|
|
193
|
-
this.logger.debug("Synchronizing data with Apitally Hub");
|
|
194
|
-
const newPayload = {
|
|
195
|
-
timestamp: Date.now() / 1e3,
|
|
196
|
-
instance_uuid: this.instanceUuid,
|
|
197
|
-
message_uuid: randomUUID(),
|
|
198
|
-
requests: this.requestCounter.getAndResetRequests(),
|
|
199
|
-
validation_errors: this.validationErrorCounter.getAndResetValidationErrors(),
|
|
200
|
-
server_errors: this.serverErrorCounter.getAndResetServerErrors(),
|
|
201
|
-
consumers: this.consumerRegistry.getAndResetUpdatedConsumers(),
|
|
202
|
-
resources: getCpuMemoryUsage()
|
|
203
|
-
};
|
|
204
|
-
this.syncDataQueue.push(newPayload);
|
|
205
|
-
let i = 0;
|
|
206
|
-
while (this.syncDataQueue.length > 0) {
|
|
207
|
-
const payload = this.syncDataQueue.shift();
|
|
208
|
-
if (payload) {
|
|
209
|
-
try {
|
|
210
|
-
if (Date.now() - payload.timestamp * 1e3 <= MAX_QUEUE_TIME) {
|
|
211
|
-
if (i > 0) {
|
|
212
|
-
await this.randomDelay();
|
|
213
|
-
}
|
|
214
|
-
await this.sendData("sync", payload);
|
|
215
|
-
i += 1;
|
|
216
|
-
}
|
|
217
|
-
} catch (error) {
|
|
218
|
-
const handled = this.handleHubError(error);
|
|
219
|
-
if (!handled) {
|
|
220
|
-
this.logger.debug("Error while synchronizing data with Apitally Hub (will retry)", {
|
|
221
|
-
error
|
|
222
|
-
});
|
|
223
|
-
this.syncDataQueue.push(payload);
|
|
224
|
-
break;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
async sendLogData() {
|
|
231
|
-
this.logger.debug("Sending request log data to Apitally Hub");
|
|
232
|
-
await this.requestLogger.rotateFile();
|
|
233
|
-
const fetchWithRetry = fetchRetry(fetch, {
|
|
234
|
-
retries: 3,
|
|
235
|
-
retryDelay: 1e3,
|
|
236
|
-
retryOn: [
|
|
237
|
-
408,
|
|
238
|
-
429,
|
|
239
|
-
500,
|
|
240
|
-
502,
|
|
241
|
-
503,
|
|
242
|
-
504
|
|
243
|
-
]
|
|
244
|
-
});
|
|
245
|
-
let i = 0;
|
|
246
|
-
let logFile;
|
|
247
|
-
while (logFile = this.requestLogger.getFile()) {
|
|
248
|
-
if (i > 0) {
|
|
249
|
-
await this.randomDelay();
|
|
250
|
-
}
|
|
251
|
-
try {
|
|
252
|
-
const response = await fetchWithRetry(`${this.getHubUrlPrefix()}log?uuid=${logFile.uuid}`, {
|
|
253
|
-
method: "POST",
|
|
254
|
-
body: await logFile.getContent()
|
|
255
|
-
});
|
|
256
|
-
if (response.status === 402 && response.headers.has("Retry-After")) {
|
|
257
|
-
const retryAfter = parseInt(response.headers.get("Retry-After") ?? "0");
|
|
258
|
-
if (retryAfter > 0) {
|
|
259
|
-
this.requestLogger.suspendUntil = Date.now() + retryAfter * 1e3;
|
|
260
|
-
this.requestLogger.clear();
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
if (!response.ok) {
|
|
265
|
-
throw new HTTPError(response);
|
|
266
|
-
}
|
|
267
|
-
logFile.delete();
|
|
268
|
-
} catch (error) {
|
|
269
|
-
this.requestLogger.retryFileLater(logFile);
|
|
270
|
-
break;
|
|
271
|
-
}
|
|
272
|
-
i++;
|
|
273
|
-
if (i >= 10) break;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
handleHubError(error) {
|
|
277
|
-
if (error instanceof HTTPError) {
|
|
278
|
-
if (error.response.status === 404) {
|
|
279
|
-
this.logger.error(`Invalid Apitally client ID: '${this.clientId}'`);
|
|
280
|
-
this.enabled = false;
|
|
281
|
-
this.stopSync();
|
|
282
|
-
return true;
|
|
283
|
-
}
|
|
284
|
-
if (error.response.status === 422) {
|
|
285
|
-
this.logger.error("Received validation error from Apitally Hub");
|
|
286
|
-
return true;
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
return false;
|
|
290
|
-
}
|
|
291
|
-
async randomDelay() {
|
|
292
|
-
const delay = 100 + Math.random() * 400;
|
|
293
|
-
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
294
|
-
}
|
|
295
|
-
};
|
|
296
|
-
__name(_ApitallyClient, "ApitallyClient");
|
|
297
|
-
__publicField(_ApitallyClient, "instance");
|
|
298
|
-
let ApitallyClient = _ApitallyClient;
|
|
299
|
-
export {
|
|
300
|
-
ApitallyClient
|
|
301
|
-
};
|
|
302
|
-
//# sourceMappingURL=client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/common/client.ts"],"sourcesContent":["import fetchRetry from \"fetch-retry\";\nimport { randomUUID } from \"node:crypto\";\n\nimport { ConsumerRegistry } from \"./consumerRegistry.js\";\nimport { getOrCreateInstanceUuid } from \"./instance.js\";\nimport { Logger, getLogger } from \"./logging.js\";\nimport { isValidClientId, isValidEnv } from \"./paramValidation.js\";\nimport { RequestCounter } from \"./requestCounter.js\";\nimport { RequestLogger } from \"./requestLogger.js\";\nimport { getCpuMemoryUsage } from \"./resources.js\";\nimport { ServerErrorCounter } from \"./serverErrorCounter.js\";\nimport { SpanCollector } from \"./spanCollector.js\";\nimport {\n ApitallyConfig,\n StartupData,\n StartupPayload,\n SyncPayload,\n} from \"./types.js\";\nimport { ValidationErrorCounter } from \"./validationErrorCounter.js\";\n\nconst SYNC_INTERVAL = 60000; // 60 seconds\nconst INITIAL_SYNC_INTERVAL = 10000; // 10 seconds\nconst INITIAL_SYNC_INTERVAL_DURATION = 3600000; // 1 hour\nconst MAX_QUEUE_TIME = 3.6e6; // 1 hour\n\nclass HTTPError extends Error {\n public response: Response;\n\n constructor(response: Response) {\n const reason = response.status\n ? `status code ${response.status}`\n : \"an unknown error\";\n super(`Request failed with ${reason}`);\n this.response = response;\n }\n}\n\nexport class ApitallyClient {\n private clientId: string;\n private env: string;\n\n private static instance?: ApitallyClient;\n private instanceUuid: string;\n private syncDataQueue: SyncPayload[];\n private syncIntervalId?: NodeJS.Timeout;\n public startupData?: StartupData;\n private startupDataSent: boolean = false;\n private enabled: boolean = true;\n\n public requestCounter: RequestCounter;\n public requestLogger: RequestLogger;\n public spanCollector: SpanCollector;\n public validationErrorCounter: ValidationErrorCounter;\n public serverErrorCounter: ServerErrorCounter;\n public consumerRegistry: ConsumerRegistry;\n public logger: Logger;\n\n constructor({\n clientId,\n env = \"dev\",\n requestLogging,\n requestLoggingConfig,\n logger,\n }: ApitallyConfig) {\n if (ApitallyClient.instance) {\n throw new Error(\"Apitally client is already initialized\");\n }\n\n this.logger = logger ?? getLogger();\n\n if (!isValidClientId(clientId)) {\n this.logger.error(\n `Invalid Apitally client ID '${clientId}' (expecting hexadecimal UUID format)`,\n );\n this.enabled = false;\n }\n if (!isValidEnv(env)) {\n this.logger.error(\n `Invalid Apitally env '${env}' (expecting 1-32 alphanumeric characters and hyphens only)`,\n );\n this.enabled = false;\n }\n if (requestLoggingConfig && !requestLogging) {\n console.warn(\n \"requestLoggingConfig is deprecated, use requestLogging instead.\",\n );\n }\n\n ApitallyClient.instance = this;\n this.clientId = clientId;\n this.env = env;\n this.instanceUuid = getOrCreateInstanceUuid(clientId, env);\n this.syncDataQueue = [];\n this.requestCounter = new RequestCounter();\n this.requestLogger = new RequestLogger(\n requestLogging ?? requestLoggingConfig,\n );\n this.spanCollector = new SpanCollector(\n this.enabled &&\n this.requestLogger.enabled &&\n this.requestLogger.config.captureTraces,\n );\n this.validationErrorCounter = new ValidationErrorCounter();\n this.serverErrorCounter = new ServerErrorCounter();\n this.consumerRegistry = new ConsumerRegistry();\n this.handleShutdown = this.handleShutdown.bind(this);\n }\n\n public static getInstance() {\n if (!ApitallyClient.instance) {\n throw new Error(\"Apitally client is not initialized\");\n }\n return ApitallyClient.instance;\n }\n\n public isEnabled() {\n return this.enabled;\n }\n\n public static async shutdown() {\n if (ApitallyClient.instance) {\n await ApitallyClient.instance.handleShutdown();\n }\n }\n\n public async handleShutdown() {\n this.enabled = false;\n this.stopSync();\n await this.sendSyncData();\n await this.sendLogData();\n await this.spanCollector.shutdown();\n await this.requestLogger.close();\n ApitallyClient.instance = undefined;\n }\n\n private getHubUrlPrefix() {\n const baseURL =\n process.env.APITALLY_HUB_BASE_URL || \"https://hub.apitally.io\";\n const version = \"v2\";\n return `${baseURL}/${version}/${this.clientId}/${this.env}/`;\n }\n\n private async sendData(url: string, payload: any) {\n const fetchWithRetry = fetchRetry(fetch, {\n retries: 3,\n retryDelay: 1000,\n retryOn: [408, 429, 500, 502, 503, 504],\n });\n const response = await fetchWithRetry(this.getHubUrlPrefix() + url, {\n method: \"POST\",\n body: JSON.stringify(payload),\n headers: { \"Content-Type\": \"application/json\" },\n });\n if (!response.ok) {\n throw new HTTPError(response);\n }\n }\n\n public startSync() {\n if (!this.enabled) {\n return;\n }\n this.sync();\n this.syncIntervalId = setInterval(() => {\n this.sync();\n }, INITIAL_SYNC_INTERVAL);\n setTimeout(() => {\n if (this.syncIntervalId) {\n clearInterval(this.syncIntervalId);\n this.syncIntervalId = setInterval(() => {\n this.sync();\n }, SYNC_INTERVAL);\n }\n }, INITIAL_SYNC_INTERVAL_DURATION);\n }\n\n private async sync() {\n try {\n const promises = [this.sendSyncData(), this.sendLogData()];\n if (!this.startupDataSent) {\n promises.push(this.sendStartupData());\n }\n await Promise.all(promises);\n } catch (error) {\n this.logger.error(\"Error while syncing with Apitally Hub\", {\n error,\n });\n }\n }\n\n private stopSync() {\n if (this.syncIntervalId) {\n clearInterval(this.syncIntervalId);\n this.syncIntervalId = undefined;\n }\n }\n\n public setStartupData(data: StartupData) {\n this.startupData = data;\n this.startupDataSent = false;\n }\n\n private async sendStartupData() {\n if (this.startupData) {\n this.logger.debug(\"Sending startup data to Apitally Hub\");\n const payload: StartupPayload = {\n instance_uuid: this.instanceUuid,\n message_uuid: randomUUID(),\n ...this.startupData,\n };\n try {\n await this.sendData(\"startup\", payload);\n this.startupDataSent = true;\n } catch (error) {\n const handled = this.handleHubError(error);\n if (!handled) {\n this.logger.error((error as Error).message);\n this.logger.debug(\n \"Error while sending startup data to Apitally Hub (will retry)\",\n { error },\n );\n }\n }\n }\n }\n\n private async sendSyncData() {\n this.logger.debug(\"Synchronizing data with Apitally Hub\");\n const newPayload: SyncPayload = {\n timestamp: Date.now() / 1000,\n instance_uuid: this.instanceUuid,\n message_uuid: randomUUID(),\n requests: this.requestCounter.getAndResetRequests(),\n validation_errors:\n this.validationErrorCounter.getAndResetValidationErrors(),\n server_errors: this.serverErrorCounter.getAndResetServerErrors(),\n consumers: this.consumerRegistry.getAndResetUpdatedConsumers(),\n resources: getCpuMemoryUsage(),\n };\n this.syncDataQueue.push(newPayload);\n\n let i = 0;\n while (this.syncDataQueue.length > 0) {\n const payload = this.syncDataQueue.shift();\n if (payload) {\n try {\n if (Date.now() - payload.timestamp * 1000 <= MAX_QUEUE_TIME) {\n if (i > 0) {\n await this.randomDelay();\n }\n await this.sendData(\"sync\", payload);\n i += 1;\n }\n } catch (error) {\n const handled = this.handleHubError(error);\n if (!handled) {\n this.logger.debug(\n \"Error while synchronizing data with Apitally Hub (will retry)\",\n { error },\n );\n this.syncDataQueue.push(payload);\n break;\n }\n }\n }\n }\n }\n\n private async sendLogData() {\n this.logger.debug(\"Sending request log data to Apitally Hub\");\n await this.requestLogger.rotateFile();\n\n const fetchWithRetry = fetchRetry(fetch, {\n retries: 3,\n retryDelay: 1000,\n retryOn: [408, 429, 500, 502, 503, 504],\n });\n\n let i = 0;\n let logFile;\n while ((logFile = this.requestLogger.getFile())) {\n if (i > 0) {\n await this.randomDelay();\n }\n\n try {\n const response = await fetchWithRetry(\n `${this.getHubUrlPrefix()}log?uuid=${logFile.uuid}`,\n {\n method: \"POST\",\n body: (await logFile.getContent()) as any,\n },\n );\n\n if (response.status === 402 && response.headers.has(\"Retry-After\")) {\n const retryAfter = parseInt(\n response.headers.get(\"Retry-After\") ?? \"0\",\n );\n if (retryAfter > 0) {\n this.requestLogger.suspendUntil = Date.now() + retryAfter * 1000;\n this.requestLogger.clear();\n return;\n }\n }\n\n if (!response.ok) {\n throw new HTTPError(response);\n }\n\n logFile.delete();\n } catch (error) {\n this.requestLogger.retryFileLater(logFile);\n break;\n }\n\n i++;\n if (i >= 10) break;\n }\n }\n\n private handleHubError(error: unknown) {\n if (error instanceof HTTPError) {\n if (error.response.status === 404) {\n this.logger.error(`Invalid Apitally client ID: '${this.clientId}'`);\n this.enabled = false;\n this.stopSync();\n return true;\n }\n if (error.response.status === 422) {\n this.logger.error(\"Received validation error from Apitally Hub\");\n return true;\n }\n }\n return false;\n }\n\n private async randomDelay() {\n const delay = 100 + Math.random() * 400;\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n}\n"],"mappings":"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","names":["fetchRetry","randomUUID","ConsumerRegistry","getOrCreateInstanceUuid","getLogger","isValidClientId","isValidEnv","RequestCounter","RequestLogger","getCpuMemoryUsage","ServerErrorCounter","SpanCollector","ValidationErrorCounter","SYNC_INTERVAL","INITIAL_SYNC_INTERVAL","INITIAL_SYNC_INTERVAL_DURATION","MAX_QUEUE_TIME","HTTPError","Error","response","reason","status","ApitallyClient","clientId","env","instanceUuid","syncDataQueue","syncIntervalId","startupData","startupDataSent","enabled","requestCounter","requestLogger","spanCollector","validationErrorCounter","serverErrorCounter","consumerRegistry","logger","requestLogging","requestLoggingConfig","instance","error","console","warn","config","captureTraces","handleShutdown","bind","getInstance","isEnabled","shutdown","stopSync","sendSyncData","sendLogData","close","undefined","getHubUrlPrefix","baseURL","process","APITALLY_HUB_BASE_URL","version","sendData","url","payload","fetchWithRetry","fetch","retries","retryDelay","retryOn","method","body","JSON","stringify","headers","ok","startSync","sync","setInterval","setTimeout","clearInterval","promises","push","sendStartupData","Promise","all","setStartupData","data","debug","instance_uuid","message_uuid","handled","handleHubError","message","newPayload","timestamp","Date","now","requests","getAndResetRequests","validation_errors","getAndResetValidationErrors","server_errors","getAndResetServerErrors","consumers","getAndResetUpdatedConsumers","resources","i","length","shift","randomDelay","rotateFile","logFile","getFile","uuid","getContent","has","retryAfter","parseInt","get","suspendUntil","clear","delete","retryFileLater","delay","Math","random","resolve"]}
|
|
@@ -1,86 +0,0 @@
|
|
|
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 __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
-
};
|
|
11
|
-
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
-
var consumerRegistry_exports = {};
|
|
21
|
-
__export(consumerRegistry_exports, {
|
|
22
|
-
ConsumerRegistry: () => ConsumerRegistry,
|
|
23
|
-
consumerFromStringOrObject: () => consumerFromStringOrObject,
|
|
24
|
-
default: () => ConsumerRegistry
|
|
25
|
-
});
|
|
26
|
-
module.exports = __toCommonJS(consumerRegistry_exports);
|
|
27
|
-
const consumerFromStringOrObject = /* @__PURE__ */ __name((consumer) => {
|
|
28
|
-
var _a, _b;
|
|
29
|
-
if (typeof consumer === "string") {
|
|
30
|
-
consumer = String(consumer).trim().substring(0, 128);
|
|
31
|
-
return consumer ? {
|
|
32
|
-
identifier: consumer
|
|
33
|
-
} : null;
|
|
34
|
-
} else {
|
|
35
|
-
consumer.identifier = String(consumer.identifier).trim().substring(0, 128);
|
|
36
|
-
consumer.name = (_a = consumer.name) == null ? void 0 : _a.trim().substring(0, 64);
|
|
37
|
-
consumer.group = (_b = consumer.group) == null ? void 0 : _b.trim().substring(0, 64);
|
|
38
|
-
return consumer.identifier ? consumer : null;
|
|
39
|
-
}
|
|
40
|
-
}, "consumerFromStringOrObject");
|
|
41
|
-
const _ConsumerRegistry = class _ConsumerRegistry {
|
|
42
|
-
consumers;
|
|
43
|
-
updated;
|
|
44
|
-
constructor() {
|
|
45
|
-
this.consumers = /* @__PURE__ */ new Map();
|
|
46
|
-
this.updated = /* @__PURE__ */ new Set();
|
|
47
|
-
}
|
|
48
|
-
addOrUpdateConsumer(consumer) {
|
|
49
|
-
if (!consumer || !consumer.name && !consumer.group) {
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
const existing = this.consumers.get(consumer.identifier);
|
|
53
|
-
if (!existing) {
|
|
54
|
-
this.consumers.set(consumer.identifier, consumer);
|
|
55
|
-
this.updated.add(consumer.identifier);
|
|
56
|
-
} else {
|
|
57
|
-
if (consumer.name && consumer.name !== existing.name) {
|
|
58
|
-
existing.name = consumer.name;
|
|
59
|
-
this.updated.add(consumer.identifier);
|
|
60
|
-
}
|
|
61
|
-
if (consumer.group && consumer.group !== existing.group) {
|
|
62
|
-
existing.group = consumer.group;
|
|
63
|
-
this.updated.add(consumer.identifier);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
getAndResetUpdatedConsumers() {
|
|
68
|
-
const data = [];
|
|
69
|
-
this.updated.forEach((identifier) => {
|
|
70
|
-
const consumer = this.consumers.get(identifier);
|
|
71
|
-
if (consumer) {
|
|
72
|
-
data.push(consumer);
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
this.updated.clear();
|
|
76
|
-
return data;
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
__name(_ConsumerRegistry, "ConsumerRegistry");
|
|
80
|
-
let ConsumerRegistry = _ConsumerRegistry;
|
|
81
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
82
|
-
0 && (module.exports = {
|
|
83
|
-
ConsumerRegistry,
|
|
84
|
-
consumerFromStringOrObject
|
|
85
|
-
});
|
|
86
|
-
//# sourceMappingURL=consumerRegistry.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/common/consumerRegistry.ts"],"sourcesContent":["import { ApitallyConsumer } from \"./types.js\";\n\nexport const consumerFromStringOrObject = (\n consumer: ApitallyConsumer | string,\n) => {\n if (typeof consumer === \"string\") {\n consumer = String(consumer).trim().substring(0, 128);\n return consumer ? { identifier: consumer } : null;\n } else {\n consumer.identifier = String(consumer.identifier).trim().substring(0, 128);\n consumer.name = consumer.name?.trim().substring(0, 64);\n consumer.group = consumer.group?.trim().substring(0, 64);\n return consumer.identifier ? consumer : null;\n }\n};\n\nexport default class ConsumerRegistry {\n private consumers: Map<string, ApitallyConsumer>;\n private updated: Set<string>;\n\n constructor() {\n this.consumers = new Map();\n this.updated = new Set();\n }\n\n public addOrUpdateConsumer(consumer?: ApitallyConsumer | null) {\n if (!consumer || (!consumer.name && !consumer.group)) {\n return;\n }\n const existing = this.consumers.get(consumer.identifier);\n if (!existing) {\n this.consumers.set(consumer.identifier, consumer);\n this.updated.add(consumer.identifier);\n } else {\n if (consumer.name && consumer.name !== existing.name) {\n existing.name = consumer.name;\n this.updated.add(consumer.identifier);\n }\n if (consumer.group && consumer.group !== existing.group) {\n existing.group = consumer.group;\n this.updated.add(consumer.identifier);\n }\n }\n }\n\n public getAndResetUpdatedConsumers() {\n const data: Array<ApitallyConsumer> = [];\n this.updated.forEach((identifier) => {\n const consumer = this.consumers.get(identifier);\n if (consumer) {\n data.push(consumer);\n }\n });\n this.updated.clear();\n return data;\n }\n}\n\nexport { ConsumerRegistry };\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAEA;;;;;;;AAAO,MAAMA,6BAA6B,wBACxCC,aAAAA;AADF;AAGE,MAAI,OAAOA,aAAa,UAAU;AAChCA,eAAWC,OAAOD,QAAAA,EAAUE,KAAI,EAAGC,UAAU,GAAG,GAAA;AAChD,WAAOH,WAAW;MAAEI,YAAYJ;IAAS,IAAI;EAC/C,OAAO;AACLA,aAASI,aAAaH,OAAOD,SAASI,UAAU,EAAEF,KAAI,EAAGC,UAAU,GAAG,GAAA;AACtEH,aAASK,QAAOL,cAASK,SAATL,mBAAeE,OAAOC,UAAU,GAAG;AACnDH,aAASM,SAAQN,cAASM,UAATN,mBAAgBE,OAAOC,UAAU,GAAG;AACrD,WAAOH,SAASI,aAAaJ,WAAW;EAC1C;AACF,GAZ0C;AAc1C,MAAqBO,oBAArB,MAAqBA,kBAAAA;EACXC;EACAC;EAER,cAAc;AACZ,SAAKD,YAAY,oBAAIE,IAAAA;AACrB,SAAKD,UAAU,oBAAIE,IAAAA;EACrB;EAEOC,oBAAoBZ,UAAoC;AAC7D,QAAI,CAACA,YAAa,CAACA,SAASK,QAAQ,CAACL,SAASM,OAAQ;AACpD;IACF;AACA,UAAMO,WAAW,KAAKL,UAAUM,IAAId,SAASI,UAAU;AACvD,QAAI,CAACS,UAAU;AACb,WAAKL,UAAUO,IAAIf,SAASI,YAAYJ,QAAAA;AACxC,WAAKS,QAAQO,IAAIhB,SAASI,UAAU;IACtC,OAAO;AACL,UAAIJ,SAASK,QAAQL,SAASK,SAASQ,SAASR,MAAM;AACpDQ,iBAASR,OAAOL,SAASK;AACzB,aAAKI,QAAQO,IAAIhB,SAASI,UAAU;MACtC;AACA,UAAIJ,SAASM,SAASN,SAASM,UAAUO,SAASP,OAAO;AACvDO,iBAASP,QAAQN,SAASM;AAC1B,aAAKG,QAAQO,IAAIhB,SAASI,UAAU;MACtC;IACF;EACF;EAEOa,8BAA8B;AACnC,UAAMC,OAAgC,CAAA;AACtC,SAAKT,QAAQU,QAAQ,CAACf,eAAAA;AACpB,YAAMJ,WAAW,KAAKQ,UAAUM,IAAIV,UAAAA;AACpC,UAAIJ,UAAU;AACZkB,aAAKE,KAAKpB,QAAAA;MACZ;IACF,CAAA;AACA,SAAKS,QAAQY,MAAK;AAClB,WAAOH;EACT;AACF;AAxCqBX;AAArB,IAAqBA,mBAArB;","names":["consumerFromStringOrObject","consumer","String","trim","substring","identifier","name","group","ConsumerRegistry","consumers","updated","Map","Set","addOrUpdateConsumer","existing","get","set","add","getAndResetUpdatedConsumers","data","forEach","push","clear"]}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { ApitallyConsumer } from './types.cjs';
|
|
2
|
-
import './logging.cjs';
|
|
3
|
-
import 'winston';
|
|
4
|
-
import './requestLogger.cjs';
|
|
5
|
-
import 'node:buffer';
|
|
6
|
-
import 'node:http';
|
|
7
|
-
import './spanCollector.cjs';
|
|
8
|
-
import '@opentelemetry/sdk-trace-base';
|
|
9
|
-
import './tempGzipFile.cjs';
|
|
10
|
-
|
|
11
|
-
declare const consumerFromStringOrObject: (consumer: ApitallyConsumer | string) => ApitallyConsumer | null;
|
|
12
|
-
declare class ConsumerRegistry {
|
|
13
|
-
private consumers;
|
|
14
|
-
private updated;
|
|
15
|
-
constructor();
|
|
16
|
-
addOrUpdateConsumer(consumer?: ApitallyConsumer | null): void;
|
|
17
|
-
getAndResetUpdatedConsumers(): ApitallyConsumer[];
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export { ConsumerRegistry, consumerFromStringOrObject, ConsumerRegistry as default };
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { ApitallyConsumer } from './types.js';
|
|
2
|
-
import './logging.js';
|
|
3
|
-
import 'winston';
|
|
4
|
-
import './requestLogger.js';
|
|
5
|
-
import 'node:buffer';
|
|
6
|
-
import 'node:http';
|
|
7
|
-
import './spanCollector.js';
|
|
8
|
-
import '@opentelemetry/sdk-trace-base';
|
|
9
|
-
import './tempGzipFile.js';
|
|
10
|
-
|
|
11
|
-
declare const consumerFromStringOrObject: (consumer: ApitallyConsumer | string) => ApitallyConsumer | null;
|
|
12
|
-
declare class ConsumerRegistry {
|
|
13
|
-
private consumers;
|
|
14
|
-
private updated;
|
|
15
|
-
constructor();
|
|
16
|
-
addOrUpdateConsumer(consumer?: ApitallyConsumer | null): void;
|
|
17
|
-
getAndResetUpdatedConsumers(): ApitallyConsumer[];
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export { ConsumerRegistry, consumerFromStringOrObject, ConsumerRegistry as default };
|