From 9cf0df53b5c645d3a4f3635d616bd815cbaf2d6d Mon Sep 17 00:00:00 2001 From: Harminder Virk Date: Fri, 13 Sep 2024 12:36:54 +0530 Subject: [PATCH] feature: add telemetry to the HTTP layer (#9116) --------- Co-authored-by: adrien2p --- .../middlewares/authenticate-middleware.ts | 9 +- .../framework/framework/src/http/router.ts | 122 +++- .../framework/framework/src/http/types.ts | 2 +- packages/medusa/package.json | 5 + .../utils/maybe-apply-price-lists-filter.ts | 6 +- .../src/api/utils/maybe-apply-link-filter.ts | 23 +- .../medusa/src/api/utils/validate-body.ts | 6 +- .../medusa/src/api/utils/validate-query.ts | 6 +- packages/medusa/src/commands/start.ts | 64 +- packages/medusa/src/index.js | 1 + packages/medusa/src/instrumentation/index.ts | 151 +++++ yarn.lock | 600 +++++++++++++++++- 12 files changed, 951 insertions(+), 44 deletions(-) create mode 100644 packages/medusa/src/instrumentation/index.ts diff --git a/packages/framework/framework/src/http/middlewares/authenticate-middleware.ts b/packages/framework/framework/src/http/middlewares/authenticate-middleware.ts index 628f9f25d9..3f2461ed1f 100644 --- a/packages/framework/framework/src/http/middlewares/authenticate-middleware.ts +++ b/packages/framework/framework/src/http/middlewares/authenticate-middleware.ts @@ -20,7 +20,10 @@ const API_KEY_AUTH = "api-key" // This is the only hard-coded actor type, as API keys have special handling for now. We could also generalize API keys to carry the actor type with them. const ADMIN_ACTOR_TYPE = "user" -type AuthType = typeof SESSION_AUTH | typeof BEARER_AUTH | typeof API_KEY_AUTH +export type AuthType = + | typeof SESSION_AUTH + | typeof BEARER_AUTH + | typeof API_KEY_AUTH type MedusaSession = { auth_context: AuthContext @@ -31,7 +34,7 @@ export const authenticate = ( authType: AuthType | AuthType[], options: { allowUnauthenticated?: boolean; allowUnregistered?: boolean } = {} ): RequestHandler => { - const handler = async ( + const authenticateMiddleware = async ( req: MedusaRequest, res: MedusaResponse, next: NextFunction @@ -105,7 +108,7 @@ export const authenticate = ( res.status(401).json({ message: "Unauthorized" }) } - return handler as unknown as RequestHandler + return authenticateMiddleware as unknown as RequestHandler } const getApiKeyInfo = async (req: MedusaRequest): Promise => { diff --git a/packages/framework/framework/src/http/router.ts b/packages/framework/framework/src/http/router.ts index a7ff8bee2d..ff83dc0f39 100644 --- a/packages/framework/framework/src/http/router.ts +++ b/packages/framework/framework/src/http/router.ts @@ -1,6 +1,13 @@ import { parseCorsOrigins, promiseAll, wrapHandler } from "@medusajs/utils" import cors from "cors" -import { type Express, json, Router, text, urlencoded } from "express" +import { + type Express, + json, + RequestHandler, + Router, + text, + urlencoded, +} from "express" import { readdir } from "fs/promises" import { extname, join, parse, sep } from "path" import { @@ -8,15 +15,17 @@ import { HTTP_METHODS, MedusaRequest, MedusaResponse, + MiddlewareFunction, MiddlewareRoute, MiddlewaresConfig, MiddlewareVerb, ParserConfigArgs, RouteConfig, RouteDescriptor, + RouteHandler, RouteVerb, } from "./types" -import { authenticate, errorHandler } from "./middlewares" +import { authenticate, AuthType, errorHandler } from "./middlewares" import { configManager } from "../config" import { logger } from "../logger" @@ -212,6 +221,24 @@ class ApiRoutesLoader { */ readonly #sourceDir: string + /** + * Wrap the original route handler implementation for + * instrumentation. + */ + static traceRoute?: ( + handler: RouteHandler, + route: { route: string; method: string } + ) => RouteHandler + + /** + * Wrap the original middleware handler implementation for + * instrumentation. + */ + static traceMiddleware?: ( + handler: RequestHandler | MiddlewareFunction, + route: { route: string; method?: string } + ) => RequestHandler + constructor({ app, activityId, @@ -560,6 +587,27 @@ class ApiRoutesLoader { return } + /** + * Applies the route middleware on a route. Encapsulates the logic + * needed to pass the middleware via the trace calls + */ + applyAuthMiddleware( + route: string, + actorType: string | string[], + authType: AuthType | AuthType[], + options?: { allowUnauthenticated?: boolean; allowUnregistered?: boolean } + ) { + let authenticateMiddleware = authenticate(actorType, authType, options) + if (ApiRoutesLoader.traceMiddleware) { + authenticateMiddleware = ApiRoutesLoader.traceMiddleware( + authenticateMiddleware, + { route: route } + ) + } + + this.#router.use(route, authenticateMiddleware) + } + /** * Apply the route specific middlewares to the router, * this includes the cors, authentication and @@ -629,20 +677,22 @@ class ApiRoutesLoader { // We only apply the auth middleware to store routes to populate the auth context. For actual authentication, users can just reapply the middleware. if (!config.optedOutOfAuth && config.routeType === "store") { - this.#router.use( + this.applyAuthMiddleware( descriptor.route, - authenticate("customer", ["bearer", "session"], { + "customer", + ["bearer", "session"], + { allowUnauthenticated: true, - }) + } ) } if (!config.optedOutOfAuth && config.routeType === "admin") { - // We probably don't want to allow access to all endpoints using an api key, but it will do until we revamp our routing. - this.#router.use( - descriptor.route, - authenticate("user", ["bearer", "session", "api-key"]) - ) + this.applyAuthMiddleware(descriptor.route, "user", [ + "bearer", + "session", + "api-key", + ]) } for (const route of routes) { @@ -708,13 +758,26 @@ class ApiRoutesLoader { }`, }) + let handler: RequestHandler | RouteHandler = route.handler + + /** + * Give handler to the trace route handler for instrumentation + * from outside-in. + */ + if (ApiRoutesLoader.traceRoute) { + handler = ApiRoutesLoader.traceRoute(handler, { + method: route.method!, + route: descriptor.route, + }) + } + /** * If the user hasn't opted out of error handling then * we wrap the handler in a try/catch block. */ - const handler = shouldWrapHandler - ? wrapHandler(route.handler as Parameters[0]) - : route.handler + if (shouldWrapHandler) { + handler = wrapHandler(handler as Parameters[0]) + } this.#router[route.method!.toLowerCase()](descriptor.route, handler) } @@ -756,7 +819,17 @@ class ApiRoutesLoader { message: `Registering middleware [${method}] - ${route.matcher}`, }) - this.#router[method.toLowerCase()](route.matcher, ...route.middlewares) + let middlewares = route.middlewares + if (ApiRoutesLoader.traceMiddleware) { + middlewares = middlewares.map((middleware) => + ApiRoutesLoader.traceMiddleware!(middleware, { + route: String(route.matcher), + method, + }) + ) + } + + this.#router[method.toLowerCase()](route.matcher, ...middlewares) } } } @@ -840,6 +913,27 @@ export class RoutesLoader { */ readonly #sourceDir: string | string[] + static instrument: { + /** + * Instrument middleware function calls by wrapping the original + * middleware handler inside a custom implementation + */ + middleware: (callback: (typeof ApiRoutesLoader)["traceMiddleware"]) => void + + /** + * Instrument route handler function calls by wrapping the original + * middleware handler inside a custom implementation + */ + route: (callback: (typeof ApiRoutesLoader)["traceRoute"]) => void + } = { + middleware(callback) { + ApiRoutesLoader.traceMiddleware = callback + }, + route(callback) { + ApiRoutesLoader.traceRoute = callback + }, + } + constructor({ app, activityId, diff --git a/packages/framework/framework/src/http/types.ts b/packages/framework/framework/src/http/types.ts index 62ef7a0037..e85efae67c 100644 --- a/packages/framework/framework/src/http/types.ts +++ b/packages/framework/framework/src/http/types.ts @@ -36,7 +36,7 @@ export type AsyncRouteHandler = ( res: MedusaResponse ) => Promise -type RouteHandler = SyncRouteHandler | AsyncRouteHandler +export type RouteHandler = SyncRouteHandler | AsyncRouteHandler export type RouteImplementation = { method?: RouteVerb diff --git a/packages/medusa/package.json b/packages/medusa/package.json index 34aa1545bb..0d7f367a24 100644 --- a/packages/medusa/package.json +++ b/packages/medusa/package.json @@ -22,6 +22,11 @@ "license": "MIT", "devDependencies": { "@medusajs/types": "^1.11.16", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation-pg": "^0.44.0", + "@opentelemetry/resources": "^1.26.0", + "@opentelemetry/sdk-node": "^0.53.0", + "@opentelemetry/sdk-trace-node": "^1.26.0", "@swc/jest": "^0.2.36", "@types/express": "^4.17.17", "@types/ioredis": "^4.28.10", diff --git a/packages/medusa/src/api/admin/products/utils/maybe-apply-price-lists-filter.ts b/packages/medusa/src/api/admin/products/utils/maybe-apply-price-lists-filter.ts index 0d26a23fce..3edbf4e7be 100644 --- a/packages/medusa/src/api/admin/products/utils/maybe-apply-price-lists-filter.ts +++ b/packages/medusa/src/api/admin/products/utils/maybe-apply-price-lists-filter.ts @@ -7,7 +7,11 @@ import { NextFunction } from "express" import { MedusaRequest } from "../../../../types/routing" export function maybeApplyPriceListsFilter() { - return async (req: MedusaRequest, _, next: NextFunction) => { + return async function applyPriceListsFilter( + req: MedusaRequest, + _, + next: NextFunction + ) { const filterableFields: HttpTypes.AdminProductListParams = req.filterableFields diff --git a/packages/medusa/src/api/utils/maybe-apply-link-filter.ts b/packages/medusa/src/api/utils/maybe-apply-link-filter.ts index 9498789f83..68db5f2f62 100644 --- a/packages/medusa/src/api/utils/maybe-apply-link-filter.ts +++ b/packages/medusa/src/api/utils/maybe-apply-link-filter.ts @@ -12,7 +12,7 @@ export function maybeApplyLinkFilter({ filterableField, filterByField = "id", }) { - return async (req: MedusaRequest, _, next: NextFunction) => { + return async function linkFilter(req: MedusaRequest, _, next: NextFunction) { const filterableFields = req.filterableFields if (!filterableFields?.[filterableField]) { @@ -76,27 +76,26 @@ export function maybeApplyLinkFilter({ } */ function transformFilterableFields(filterableFields: Record) { - const result = {}; + const result = {} for (const key of Object.keys(filterableFields)) { - const value = filterableFields[key]; - const keys = key.split("."); - let current = result; + const value = filterableFields[key] + const keys = key.split(".") + let current = result // Iterate over the keys, creating nested objects as needed for (let i = 0; i < keys.length; i++) { - const part = keys[i]; - current[part] ??= {}; + const part = keys[i] + current[part] ??= {} if (i === keys.length - 1) { // If its the last key, assign the value - current[part] = value; - break; + current[part] = value + break } - current = current[part]; + current = current[part] } } - return result; + return result } - diff --git a/packages/medusa/src/api/utils/validate-body.ts b/packages/medusa/src/api/utils/validate-body.ts index 8512228175..e600f44631 100644 --- a/packages/medusa/src/api/utils/validate-body.ts +++ b/packages/medusa/src/api/utils/validate-body.ts @@ -14,7 +14,11 @@ export function validateAndTransformBody( res: MedusaResponse, next: NextFunction ) => Promise { - return async (req: MedusaRequest, _: MedusaResponse, next: NextFunction) => { + return async function validateBody( + req: MedusaRequest, + _: MedusaResponse, + next: NextFunction + ) { try { let schema: z.ZodObject | z.ZodEffects if (typeof zodSchema === "function") { diff --git a/packages/medusa/src/api/utils/validate-query.ts b/packages/medusa/src/api/utils/validate-query.ts index 434aeabb09..6987b3fbab 100644 --- a/packages/medusa/src/api/utils/validate-query.ts +++ b/packages/medusa/src/api/utils/validate-query.ts @@ -65,7 +65,11 @@ export function validateAndTransformQuery( res: MedusaResponse, next: NextFunction ) => Promise { - return async (req: MedusaRequest, _: MedusaResponse, next: NextFunction) => { + return async function validateQuery( + req: MedusaRequest, + _: MedusaResponse, + next: NextFunction + ) { try { const allowed = (req.allowed ?? queryConfig.allowed ?? []) as string[] delete req.allowed diff --git a/packages/medusa/src/commands/start.ts b/packages/medusa/src/commands/start.ts index 562d88bec6..bfdbdf312f 100644 --- a/packages/medusa/src/commands/start.ts +++ b/packages/medusa/src/commands/start.ts @@ -1,21 +1,59 @@ +import path from "path" import express from "express" import { track } from "medusa-telemetry" import { scheduleJob } from "node-schedule" -import { gqlSchemaToTypes, logger } from "@medusajs/framework" import { GracefulShutdownServer } from "@medusajs/utils" +import http, { IncomingMessage, ServerResponse } from "http" +import { gqlSchemaToTypes, logger } from "@medusajs/framework" + import loaders from "../loaders" -import path from "path" const EVERY_SIXTH_HOUR = "0 */6 * * *" const CRON_SCHEDULE = EVERY_SIXTH_HOUR -export default async function ({ port, directory, types }) { - async function start() { +/** + * Imports the "instrumentation.js" file from the root of the + * directory and invokes the register function. The existence + * of this file is optional, hence we ignore "ENOENT" + * errors. + */ +async function registerInstrumentation(directory: string) { + try { + const instrumentation = await import( + path.join(directory, "instrumentation.js") + ) + if (typeof instrumentation.register === "function") { + logger.info("OTEL registered") + instrumentation.register() + } + } catch (error) { + if (!["ENOENT", "MODULE_NOT_FOUND"].includes(error.code)) { + throw error + } + } +} + +async function start({ port, directory, types }) { + async function internalStart() { track("CLI_START") + await registerInstrumentation(directory) const app = express() + const http_ = http.createServer(async (req, res) => { + await start.traceRequestHandler( + async () => { + return new Promise((resolve) => { + res.on("finish", resolve) + app(req, res) + }) + }, + req, + res + ) + }) + try { const { shutdown, gqlSchema } = await loaders({ directory, @@ -33,7 +71,7 @@ export default async function ({ port, directory, types }) { const serverActivity = logger.activity(`Creating server`) const server = GracefulShutdownServer.create( - app.listen(port).on("listening", () => { + http_.listen(port).on("listening", () => { logger.success(serverActivity, `Server is ready on port: ${port}`) track("CLI_START_COMPLETED") }) @@ -68,5 +106,19 @@ export default async function ({ port, directory, types }) { } } - await start() + await internalStart() } + +/** + * Wrap request handler inside custom implementation to enabled + * instrumentation. + */ +start.traceRequestHandler = async ( + requestHandler: () => Promise, + _: IncomingMessage, + __: ServerResponse +) => { + return await requestHandler() +} + +export default start diff --git a/packages/medusa/src/index.js b/packages/medusa/src/index.js index 101104da5d..d25b391cb4 100644 --- a/packages/medusa/src/index.js +++ b/packages/medusa/src/index.js @@ -5,3 +5,4 @@ export * from "./types/middlewares" export * from "./types/routing" export * from "./types/subscribers" export * from "./utils" +export * from "./instrumentation" diff --git a/packages/medusa/src/instrumentation/index.ts b/packages/medusa/src/instrumentation/index.ts new file mode 100644 index 0000000000..dc027be4d8 --- /dev/null +++ b/packages/medusa/src/instrumentation/index.ts @@ -0,0 +1,151 @@ +import { snakeCase } from "lodash" +import { NodeSDK } from "@opentelemetry/sdk-node" +import { Resource } from "@opentelemetry/resources" +import { SpanStatusCode } from "@opentelemetry/api" +import { RoutesLoader, Tracer } from "@medusajs/framework" +import { + type SpanExporter, + SimpleSpanProcessor, +} from "@opentelemetry/sdk-trace-node" +import { PgInstrumentation } from "@opentelemetry/instrumentation-pg" +import type { Instrumentation } from "@opentelemetry/instrumentation" + +import start from "../commands/start" + +const EXCLUDED_RESOURCES = [".vite", "virtual:"] + +function shouldExcludeResource(resource: string) { + return EXCLUDED_RESOURCES.some((excludedResource) => + resource.includes(excludedResource) + ) +} + +/** + * Instrumenting the first touch point of the Http layer to report traces to + * OpenTelemetry + */ +export function instrumentHttpLayer() { + const HTTPTracer = new Tracer("@medusajs/http", "2.0.0") + + start.traceRequestHandler = async (requestHandler, req, res) => { + if (shouldExcludeResource(req.url!)) { + return await requestHandler() + } + + const traceName = `${req.method} ${req.url}` + await HTTPTracer.trace(traceName, async (span) => { + span.setAttributes({ + "http.url": req.url, + "http.method": req.method, + ...req.headers, + }) + + try { + await requestHandler() + } finally { + span.setAttributes({ "http.statusCode": res.statusCode }) + span.end() + } + }) + } + + /** + * Instrumenting the route handler to report traces to + * OpenTelemetry + */ + RoutesLoader.instrument.route((handler) => { + const traceName = `route: ${ + handler.name ? snakeCase(handler.name) : `anonymous` + }` + + return async (req, res) => { + if (shouldExcludeResource(req.originalUrl)) { + return await handler(req, res) + } + + await HTTPTracer.trace(traceName, async (span) => { + try { + await handler(req, res) + } catch (error) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: error.message || "Failed", + }) + } finally { + span.end() + } + }) + } + }) + + /** + * Instrumenting the middleware handler to report traces to + * OpenTelemetry + */ + RoutesLoader.instrument.middleware((handler) => { + const traceName = `middleware: ${ + handler.name ? snakeCase(handler.name) : `anonymous` + }` + + return async (req, res, next) => { + if (shouldExcludeResource(req.originalUrl)) { + return handler(req, res, next) + } + + await HTTPTracer.trace(traceName, async (span) => { + return new Promise((resolve, reject) => { + const _next = (error?: any) => { + if (error) { + span.setStatus({ + code: SpanStatusCode.ERROR, + message: error.message || "Failed", + }) + span.end() + reject(error) + } else { + span.end() + resolve() + } + } + + handler(req, res, _next) + }) + }) + .catch(next) + .then(next) + } + }) +} + +/** + * A helper function to configure the OpenTelemetry SDK with some defaults. + * For better/more control, please configure the SDK manually. + * + * You will have to install the following packages within your app for + * telemetry to work + * + * - @opentelemetry/sdk-node + * - @opentelemetry/resources + * - @opentelemetry/sdk-trace-node + * - @opentelemetry/instrumentation-pg + * - @opentelemetry/instrumentation + */ +export function registerOtel(options: { + serviceName: string + exporter: SpanExporter + instrumentations?: Instrumentation[] +}) { + const sdk = new NodeSDK({ + serviceName: options.serviceName, + resource: new Resource({ + "service.name": options.serviceName, + }), + spanProcessor: new SimpleSpanProcessor(options.exporter), + instrumentations: [ + new PgInstrumentation(), + ...(options.instrumentations || []), + ], + }) + sdk.start() + return sdk +} diff --git a/yarn.lock b/yarn.lock index 266530145a..086edeb606 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4700,6 +4700,30 @@ __metadata: languageName: node linkType: hard +"@grpc/grpc-js@npm:^1.7.1": + version: 1.11.2 + resolution: "@grpc/grpc-js@npm:1.11.2" + dependencies: + "@grpc/proto-loader": ^0.7.13 + "@js-sdsl/ordered-map": ^4.4.2 + checksum: d69a1db3726d7a09a54394971bd54c77dfc2e8f48b23384771a2074ecc947b240ea065b4f1d74300e76fd47d7914071460d98702bd1512b7a9d6085eac6a6012 + languageName: node + linkType: hard + +"@grpc/proto-loader@npm:^0.7.13": + version: 0.7.13 + resolution: "@grpc/proto-loader@npm:0.7.13" + dependencies: + lodash.camelcase: ^4.3.0 + long: ^5.0.0 + protobufjs: ^7.2.5 + yargs: ^17.7.2 + bin: + proto-loader-gen-types: build/bin/proto-loader-gen-types.js + checksum: dc8ed7aa1454c15e224707cc53d84a166b98d76f33606a9f334c7a6fb1aedd3e3614dcd2c2b02a6ffaf140587d19494f93b3a56346c6c2e26bc564f6deddbbf3 + languageName: node + linkType: hard + "@hapi/boom@npm:^10.0.1": version: 10.0.1 resolution: "@hapi/boom@npm:10.0.1" @@ -5397,6 +5421,13 @@ __metadata: languageName: node linkType: hard +"@js-sdsl/ordered-map@npm:^4.4.2": + version: 4.4.2 + resolution: "@js-sdsl/ordered-map@npm:4.4.2" + checksum: cc7e15dc4acf6d9ef663757279600bab70533d847dcc1ab01332e9e680bd30b77cdf9ad885cc774276f51d98b05a013571c940e5b360985af5eb798dc1a2ee2b + languageName: node + linkType: hard + "@jsdevtools/ono@npm:^7.1.3": version: 7.1.3 resolution: "@jsdevtools/ono@npm:7.1.3" @@ -6140,6 +6171,11 @@ __metadata: "@medusajs/types": ^1.11.16 "@medusajs/utils": ^1.11.9 "@medusajs/workflows-sdk": ^0.1.6 + "@opentelemetry/instrumentation": ^0.53.0 + "@opentelemetry/instrumentation-pg": ^0.44.0 + "@opentelemetry/resources": ^1.26.0 + "@opentelemetry/sdk-node": ^0.53.0 + "@opentelemetry/sdk-trace-node": ^1.26.0 "@swc/core": 1.5.7 "@swc/helpers": ^0.5.11 "@swc/jest": ^0.2.36 @@ -7238,13 +7274,355 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/api@npm:^1.9.0": +"@opentelemetry/api-logs@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/api-logs@npm:0.53.0" + dependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 969ad3bbb74e3de6fdfe8eb9b3ab86d3dc284ca7bffd0ca67eef64efd08c97a4305696afe0b7b03e5d356f15d0a1a67ac517e5fa7d1ddee6fdc249eef2209fcb + languageName: node + linkType: hard + +"@opentelemetry/api@npm:^1.0.0, @opentelemetry/api@npm:^1.9.0": version: 1.9.0 resolution: "@opentelemetry/api@npm:1.9.0" checksum: 9aae2fe6e8a3a3eeb6c1fdef78e1939cf05a0f37f8a4fae4d6bf2e09eb1e06f966ece85805626e01ba5fab48072b94f19b835449e58b6d26720ee19a58298add languageName: node linkType: hard +"@opentelemetry/context-async-hooks@npm:1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/context-async-hooks@npm:1.26.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 76ed53be50a472cbfe26a62620cb2a34f031474d08d302d31eb95d71cac2ed1567c6fa302c7ac5498e9d467d7d8e64f8d0e58c5c8b7bd987a352baafe5d9b213 + languageName: node + linkType: hard + +"@opentelemetry/core@npm:1.26.0, @opentelemetry/core@npm:^1.1.0": + version: 1.26.0 + resolution: "@opentelemetry/core@npm:1.26.0" + dependencies: + "@opentelemetry/semantic-conventions": 1.27.0 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 8038a3b9124a0b3b48dceb3949f88726c6853eac33b79fc049856f78dcf4b7ee453db1e6f4d5205a79b315caba809cb7d2f853946cf14773e50ce6a87fd5260e + languageName: node + linkType: hard + +"@opentelemetry/exporter-logs-otlp-grpc@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/exporter-logs-otlp-grpc@npm:0.53.0" + dependencies: + "@grpc/grpc-js": ^1.7.1 + "@opentelemetry/core": 1.26.0 + "@opentelemetry/otlp-grpc-exporter-base": 0.53.0 + "@opentelemetry/otlp-transformer": 0.53.0 + "@opentelemetry/sdk-logs": 0.53.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: b09fa8d15ff1879aab2b7de3cdf3fbde86985e8db8d5a3d7d617971402798a0f95b58a892940d14699f92621910721151e7398793ca9581a17764353b8bf6b68 + languageName: node + linkType: hard + +"@opentelemetry/exporter-logs-otlp-http@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/exporter-logs-otlp-http@npm:0.53.0" + dependencies: + "@opentelemetry/api-logs": 0.53.0 + "@opentelemetry/core": 1.26.0 + "@opentelemetry/otlp-exporter-base": 0.53.0 + "@opentelemetry/otlp-transformer": 0.53.0 + "@opentelemetry/sdk-logs": 0.53.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 85f0babba08cd2cba209284d0efaba3a993ebbc0ae0703c7545d013eb58bc9c52351fb5b99f9f3155bca03a54a5c12e32114f7f583b627d634c24a5e911e0e7d + languageName: node + linkType: hard + +"@opentelemetry/exporter-logs-otlp-proto@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/exporter-logs-otlp-proto@npm:0.53.0" + dependencies: + "@opentelemetry/api-logs": 0.53.0 + "@opentelemetry/core": 1.26.0 + "@opentelemetry/otlp-exporter-base": 0.53.0 + "@opentelemetry/otlp-transformer": 0.53.0 + "@opentelemetry/resources": 1.26.0 + "@opentelemetry/sdk-logs": 0.53.0 + "@opentelemetry/sdk-trace-base": 1.26.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 82dd9e6d6c1199d4cf1d35e8a87953ebf3354b277c8016dc75b092ddeafd1633ddf0a796a067acedf1490f64850613bfba00311d116862c8d77ad3a5a85ca971 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-grpc@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/exporter-trace-otlp-grpc@npm:0.53.0" + dependencies: + "@grpc/grpc-js": ^1.7.1 + "@opentelemetry/core": 1.26.0 + "@opentelemetry/otlp-grpc-exporter-base": 0.53.0 + "@opentelemetry/otlp-transformer": 0.53.0 + "@opentelemetry/resources": 1.26.0 + "@opentelemetry/sdk-trace-base": 1.26.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 7933e1d4ed2ea8c470a7d7783de0ed84adcbf125a11420c67842f17f5d68baefdb6e7db9635287b22eb3cec6f2fd791ab4f5c7eb22152a4c0c2ce9a201b0b110 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-http@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.53.0" + dependencies: + "@opentelemetry/core": 1.26.0 + "@opentelemetry/otlp-exporter-base": 0.53.0 + "@opentelemetry/otlp-transformer": 0.53.0 + "@opentelemetry/resources": 1.26.0 + "@opentelemetry/sdk-trace-base": 1.26.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 234fd44b87608e9332e9756a93db41b86ea5a976fb3b66242b79df05bce73256435fe767fd1dd2304ffac6fc8c49ea44c6b31b52fbff12d4ca120e2b49efce30 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-proto@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/exporter-trace-otlp-proto@npm:0.53.0" + dependencies: + "@opentelemetry/core": 1.26.0 + "@opentelemetry/otlp-exporter-base": 0.53.0 + "@opentelemetry/otlp-transformer": 0.53.0 + "@opentelemetry/resources": 1.26.0 + "@opentelemetry/sdk-trace-base": 1.26.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: fa1b2d67d20fccbb14252c9edb56c9d47ae305fa211f17cc8a3213f2645c5aa9f47334bb0a4b636dd0bfba8509199d3577a8a517f618be738b3ac2e5b5e078ab + languageName: node + linkType: hard + +"@opentelemetry/exporter-zipkin@npm:1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/exporter-zipkin@npm:1.26.0" + dependencies: + "@opentelemetry/core": 1.26.0 + "@opentelemetry/resources": 1.26.0 + "@opentelemetry/sdk-trace-base": 1.26.0 + "@opentelemetry/semantic-conventions": 1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 062cedd03fd2cc4c98468143ab19ae87697b3195f7b33419f71a23428bc910ca5e2783882ca42a38aa0c05d8d321403c18c6cc1dbb12d8b37ae1549b0b3cf5e6 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-pg@npm:^0.44.0": + version: 0.44.0 + resolution: "@opentelemetry/instrumentation-pg@npm:0.44.0" + dependencies: + "@opentelemetry/instrumentation": ^0.53.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + "@opentelemetry/sql-common": ^0.40.1 + "@types/pg": 8.6.1 + "@types/pg-pool": 2.0.6 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: d20db7b7791d40cf65751dc9d79feae8694b2eb156985ef1dc1ee3ff9a230424305b24534192d9f234b87465b47d6b622e8f9e001e4665ea17d9017825835b80 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:0.53.0, @opentelemetry/instrumentation@npm:^0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/instrumentation@npm:0.53.0" + dependencies: + "@opentelemetry/api-logs": 0.53.0 + "@types/shimmer": ^1.2.0 + import-in-the-middle: ^1.8.1 + require-in-the-middle: ^7.1.1 + semver: ^7.5.2 + shimmer: ^1.2.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 943e289926812272cb77cda5e0a6b662bc6a92812b66420ceeca1c764f2e3a13364f6bbed7c9e84a17ad677474101ea3c598ef6a6cca982c35bfd24be6f6a25e + languageName: node + linkType: hard + +"@opentelemetry/otlp-exporter-base@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/otlp-exporter-base@npm:0.53.0" + dependencies: + "@opentelemetry/core": 1.26.0 + "@opentelemetry/otlp-transformer": 0.53.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: bc68d59106c095627bfbc522b9c3c7e1770e0d9e5e5abfd1912585209cd892ded1ac06002c57015ca51c5335fed2f82ab6c1fb7ac23686621eb72cc890c4dfdc + languageName: node + linkType: hard + +"@opentelemetry/otlp-grpc-exporter-base@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/otlp-grpc-exporter-base@npm:0.53.0" + dependencies: + "@grpc/grpc-js": ^1.7.1 + "@opentelemetry/core": 1.26.0 + "@opentelemetry/otlp-exporter-base": 0.53.0 + "@opentelemetry/otlp-transformer": 0.53.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 8a1b616d8b5026998c3744fdb76c6ee986ca6cfd8efb30d51bf6ed8bd6a58fa73f0e433a9074d0e8c2af9138ad25be451fbd0a3be1c90772417ecec2a269cfb0 + languageName: node + linkType: hard + +"@opentelemetry/otlp-transformer@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/otlp-transformer@npm:0.53.0" + dependencies: + "@opentelemetry/api-logs": 0.53.0 + "@opentelemetry/core": 1.26.0 + "@opentelemetry/resources": 1.26.0 + "@opentelemetry/sdk-logs": 0.53.0 + "@opentelemetry/sdk-metrics": 1.26.0 + "@opentelemetry/sdk-trace-base": 1.26.0 + protobufjs: ^7.3.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: d9a43bb00ce5386aeb477cd95e72cd86114ed01b2e11e8f39c3988aa2bb56cbda16b533ffd55396ed374961c32e1cc76face565e21b6cedcc85e844776912666 + languageName: node + linkType: hard + +"@opentelemetry/propagator-b3@npm:1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/propagator-b3@npm:1.26.0" + dependencies: + "@opentelemetry/core": 1.26.0 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 7b1e42872929b167a2d4155732d9253adfec65a307dbb05509b88ade2d7f68a8759714141a17c8e646199ad80a60529c02a45098a1fcce27f0cf0c69d90932d3 + languageName: node + linkType: hard + +"@opentelemetry/propagator-jaeger@npm:1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/propagator-jaeger@npm:1.26.0" + dependencies: + "@opentelemetry/core": 1.26.0 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 167a250f0c10223897f24335025af848b8fe0e5c550eafb5e9a011f301243faf3633ad74caebc6b38dfaac4ed4b138b1bf8149a33eadc2816c3d405d955fbc25 + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:1.26.0, @opentelemetry/resources@npm:^1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/resources@npm:1.26.0" + dependencies: + "@opentelemetry/core": 1.26.0 + "@opentelemetry/semantic-conventions": 1.27.0 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 62ffbf7edee8676055661cf608b32a52bfa46fedb1a88830b4d4d0faf6664edbcbf7922034d3690d11fe9ebef9d9f5ffcb05645e8c7b27c707bf57d5289617e9 + languageName: node + linkType: hard + +"@opentelemetry/sdk-logs@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/sdk-logs@npm:0.53.0" + dependencies: + "@opentelemetry/api-logs": 0.53.0 + "@opentelemetry/core": 1.26.0 + "@opentelemetry/resources": 1.26.0 + peerDependencies: + "@opentelemetry/api": ">=1.4.0 <1.10.0" + checksum: bd47e9a70966c53ac7b394ba0f27a4400b4fdebfbe781027f53457954b79b1c821301936bc87f5fe09a462af579c02c4fa27f353b6d9a1dca0b760cc284ec068 + languageName: node + linkType: hard + +"@opentelemetry/sdk-metrics@npm:1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/sdk-metrics@npm:1.26.0" + dependencies: + "@opentelemetry/core": 1.26.0 + "@opentelemetry/resources": 1.26.0 + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 640a0dcfa4af73a029ef57b51f8ecc1d08dfb0c3a5242552876fab36c7f9ae7c410fa52dbc5202a2d8675fcfe61df3c49205079963f1c11acfe42981d1d01a76 + languageName: node + linkType: hard + +"@opentelemetry/sdk-node@npm:^0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/sdk-node@npm:0.53.0" + dependencies: + "@opentelemetry/api-logs": 0.53.0 + "@opentelemetry/core": 1.26.0 + "@opentelemetry/exporter-logs-otlp-grpc": 0.53.0 + "@opentelemetry/exporter-logs-otlp-http": 0.53.0 + "@opentelemetry/exporter-logs-otlp-proto": 0.53.0 + "@opentelemetry/exporter-trace-otlp-grpc": 0.53.0 + "@opentelemetry/exporter-trace-otlp-http": 0.53.0 + "@opentelemetry/exporter-trace-otlp-proto": 0.53.0 + "@opentelemetry/exporter-zipkin": 1.26.0 + "@opentelemetry/instrumentation": 0.53.0 + "@opentelemetry/resources": 1.26.0 + "@opentelemetry/sdk-logs": 0.53.0 + "@opentelemetry/sdk-metrics": 1.26.0 + "@opentelemetry/sdk-trace-base": 1.26.0 + "@opentelemetry/sdk-trace-node": 1.26.0 + "@opentelemetry/semantic-conventions": 1.27.0 + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 77b9d054dae897408f96cf0a411a3668d7a61766c21eaa7781d551b56d19d1b8d267ece10ac80731ba9416fb474e9d34c86de79f3f038595e8742b3292b93e35 + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-base@npm:1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/sdk-trace-base@npm:1.26.0" + dependencies: + "@opentelemetry/core": 1.26.0 + "@opentelemetry/resources": 1.26.0 + "@opentelemetry/semantic-conventions": 1.27.0 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 0d5fc19179375f1599edae91b7232f432faf8631746835a10d0cd0c4907d0ca3ed156cc8087d4e78efdfbd9ba5ba414cc9e1399172c2aa68d7e0cd5190394d87 + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-node@npm:1.26.0, @opentelemetry/sdk-trace-node@npm:^1.26.0": + version: 1.26.0 + resolution: "@opentelemetry/sdk-trace-node@npm:1.26.0" + dependencies: + "@opentelemetry/context-async-hooks": 1.26.0 + "@opentelemetry/core": 1.26.0 + "@opentelemetry/propagator-b3": 1.26.0 + "@opentelemetry/propagator-jaeger": 1.26.0 + "@opentelemetry/sdk-trace-base": 1.26.0 + semver: ^7.5.2 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 6924c565b4d187810c48a7b92215f8f986a8831bc24620856aaaeb057bf19dd8916f070a77cc45aa76182f6b70b534749274ba168d27941f0ed752d171ca3b51 + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:1.27.0, @opentelemetry/semantic-conventions@npm:^1.27.0": + version: 1.27.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.27.0" + checksum: b859773ba06b7e53dd9c6b45a171bf3000e405733adbf462ae91004ed011bc80edb5beecb817fb344a085adfd06045ab5b729c9bd0f1479650ad377134fb798c + languageName: node + linkType: hard + +"@opentelemetry/sql-common@npm:^0.40.1": + version: 0.40.1 + resolution: "@opentelemetry/sql-common@npm:0.40.1" + dependencies: + "@opentelemetry/core": ^1.1.0 + peerDependencies: + "@opentelemetry/api": ^1.1.0 + checksum: 60a70358f0c94f610e2995333e96b406626d67d03d38ed03b15a3461ad0f8d64afbf6275cca7cb58fe955ecdce832f3ffc9b73f9d88503bba5d2a620bbd6d351 + languageName: node + linkType: hard + "@peculiar/asn1-schema@npm:^2.3.8": version: 2.3.13 resolution: "@peculiar/asn1-schema@npm:2.3.13" @@ -7285,6 +7663,79 @@ __metadata: languageName: node linkType: hard +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: a83343a468ff5b5ec6bff36fd788a64c839e48a07ff9f4f813564f58caf44d011cd6504ed2147bf34835bd7a7dd2107052af755961c6b098fd8902b4f6500d0f + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: eec925e681081af190b8ee231f9bad3101e189abbc182ff279da6b531e7dbd2a56f1f306f37a80b1be9e00aa2d271690d08dcc5f326f71c9eed8546675c8caf6 + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 26ae337c5659e41f091606d16465bbcc1df1f37cc1ed462438b1f67be0c1e28dfb2ca9f294f39100c52161aef82edf758c95d6d75650a1ddf31f7ddee1440b43 + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 1eb0a75180e5206d1033e4138212a8c7089a3d418c6dfa5a6ce42e593a4ae2e5892c4ef7421f38092badba4040ea6a45f0928869989411001d8c1018ea9a6e70 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": ^1.1.1 + "@protobufjs/inquire": ^1.1.0 + checksum: cda6a3dc2d50a182c5865b160f72077aac197046600091dbb005dd0a66db9cce3c5eaed6d470ac8ed49d7bcbeef6ee5f0bc288db5ff9a70cbd003e5909065233 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 18f2bdede76ffcf0170708af15c9c9db6259b771e6b84c51b06df34a9c339dbbeec267d14ce0bddd20acc142b1d980d983d31434398df7f98eb0c94a0eb79069 + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: 64372482efcba1fb4d166a2664a6395fa978b557803857c9c03500e0ac1013eb4b1aacc9ed851dd5fc22f81583670b4f4431bae186f3373fedcfde863ef5921a + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: cece0a938e7f5dfd2fa03f8c14f2f1cf8b0d6e13ac7326ff4c96ea311effd5fb7ae0bba754fbf505312af2e38500250c90e68506b97c02360a43793d88a0d8b4 + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: eda2718b7f222ac6e6ad36f758a92ef90d26526026a19f4f17f668f45e0306a5bd734def3f48f51f8134ae0978b6262a5c517c08b115a551756d1a3aadfcf038 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: a3fe31fe3fa29aa3349e2e04ee13dc170cc6af7c23d92ad49e3eeaf79b9766264544d3da824dba93b7855bd6a2982fb40032ef40693da98a136d835752beb487 + languageName: node + linkType: hard + "@radix-ui/number@npm:1.0.1": version: 1.0.1 resolution: "@radix-ui/number@npm:1.0.1" @@ -13434,6 +13885,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:>=13.7.0": + version: 22.5.4 + resolution: "@types/node@npm:22.5.4" + dependencies: + undici-types: ~6.19.2 + checksum: b445daa7eecd761ad4d778b882d6ff7bcc3b4baad2086ea9804db7c5d4a4ab0298b00d7f5315fc640a73b5a1d52bbf9628e09c9fec0cf44dbf9b4df674a8717d + languageName: node + linkType: hard + "@types/node@npm:^12.7.1": version: 12.20.55 resolution: "@types/node@npm:12.20.55" @@ -13505,6 +13965,37 @@ __metadata: languageName: node linkType: hard +"@types/pg-pool@npm:2.0.6": + version: 2.0.6 + resolution: "@types/pg-pool@npm:2.0.6" + dependencies: + "@types/pg": "*" + checksum: 41965d4d0b677c54ce45d36add760e496d356b78019cb062d124af40287cf6b0fd4d86e3b0085f443856c185983a60c8b0795ff76d15683e2a93c62f5ac0125f + languageName: node + linkType: hard + +"@types/pg@npm:*": + version: 8.11.9 + resolution: "@types/pg@npm:8.11.9" + dependencies: + "@types/node": "*" + pg-protocol: "*" + pg-types: ^4.0.1 + checksum: fec741d90db9a627d4aa5e4852b34dade1b374de8eaf6a819dbdb43b309282f71f1331fcb99b79bd32a45be36fb7006c2e2ebc3762c0b51fdf766f86838d62e7 + languageName: node + linkType: hard + +"@types/pg@npm:8.6.1": + version: 8.6.1 + resolution: "@types/pg@npm:8.6.1" + dependencies: + "@types/node": "*" + pg-protocol: "*" + pg-types: ^2.2.0 + checksum: 8d16660c9a4f050d6d5e391c59f9a62e9d377a2a6a7eb5865f8828082dbdfeab700fd707e585f42d67b29e796b32863aea5bd6d5cbb8ceda2d598da5d0c61693 + languageName: node + linkType: hard + "@types/pg@npm:^8.6.6": version: 8.11.6 resolution: "@types/pg@npm:8.11.6" @@ -13640,6 +14131,13 @@ __metadata: languageName: node linkType: hard +"@types/shimmer@npm:^1.2.0": + version: 1.2.0 + resolution: "@types/shimmer@npm:1.2.0" + checksum: 6f7bfe1b55601cfc3ae713fc74a03341f3834253b8b91cb2add926d5949e4a63f7e666f59c2a6e40a883a5f9e2f3e3af10f9d3aed9b60fced0bda87659e58d8d + languageName: node + linkType: hard + "@types/simple-oauth2@npm:^5.0.7": version: 5.0.7 resolution: "@types/simple-oauth2@npm:5.0.7" @@ -14375,6 +14873,15 @@ __metadata: languageName: node linkType: hard +"acorn-import-attributes@npm:^1.9.5": + version: 1.9.5 + resolution: "acorn-import-attributes@npm:1.9.5" + peerDependencies: + acorn: ^8 + checksum: 5926eaaead2326d5a86f322ff1b617b0f698aa61dc719a5baa0e9d955c9885cc71febac3fb5bacff71bbf2c4f9c12db2056883c68c53eb962c048b952e1e013d + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.1, acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -16171,6 +16678,13 @@ __metadata: languageName: node linkType: hard +"cjs-module-lexer@npm:^1.2.2": + version: 1.4.1 + resolution: "cjs-module-lexer@npm:1.4.1" + checksum: 5a7d8279629c9ba8ccf38078c2fed75b7737973ced22b9b5a54180efa57fb2fe2bb7bec6aec55e3b8f3f5044f5d7b240347ad9bd285e7c3d0ee5b0a1d0504dfc + languageName: node + linkType: hard + "classnames@npm:^2.3.2": version: 2.5.1 resolution: "classnames@npm:2.5.1" @@ -17633,6 +18147,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.5": + version: 4.3.7 + resolution: "debug@npm:4.3.7" + dependencies: + ms: ^2.1.3 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b + languageName: node + linkType: hard + "decamelize-keys@npm:^1.1.0": version: 1.1.1 resolution: "decamelize-keys@npm:1.1.1" @@ -21429,6 +21955,18 @@ __metadata: languageName: node linkType: hard +"import-in-the-middle@npm:^1.8.1": + version: 1.11.0 + resolution: "import-in-the-middle@npm:1.11.0" + dependencies: + acorn: ^8.8.2 + acorn-import-attributes: ^1.9.5 + cjs-module-lexer: ^1.2.2 + module-details-from-path: ^1.0.3 + checksum: b5b52b635450f69640289b9b597fef796ef9aa6c231ae22583a1c2e97bd1b61aa0048d7fc143b4af3ec5bffb7d64131302ed0882f62e0e2d60f0a4f009daff3f + languageName: node + linkType: hard + "import-lazy@npm:~4.0.0": version: 4.0.0 resolution: "import-lazy@npm:4.0.0" @@ -24121,6 +24659,13 @@ __metadata: languageName: node linkType: hard +"long@npm:^5.0.0": + version: 5.2.3 + resolution: "long@npm:5.2.3" + checksum: 6a0da658f5ef683b90330b1af76f06790c623e148222da9d75b60e266bbf88f803232dd21464575681638894a84091616e7f89557aa087fd14116c0f4e0e43d9 + languageName: node + linkType: hard + "loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" @@ -25067,6 +25612,13 @@ __metadata: languageName: node linkType: hard +"module-details-from-path@npm:^1.0.3": + version: 1.0.3 + resolution: "module-details-from-path@npm:1.0.3" + checksum: 3d881f3410c142e4c2b1307835a2862ba04e5b3ec6e90655614a0ee2c4b299b4c1d117fb525d2435bf436990026f18d338a197b54ad6bd36252f465c336ff423 + languageName: node + linkType: hard + "moment@npm:^2.19.3, moment@npm:~2.30.1": version: 2.30.1 resolution: "moment@npm:2.30.1" @@ -25115,7 +25667,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 @@ -26535,7 +27087,7 @@ __metadata: languageName: node linkType: hard -"pg-types@npm:^2.1.0": +"pg-types@npm:^2.1.0, pg-types@npm:^2.2.0": version: 2.2.0 resolution: "pg-types@npm:2.2.0" dependencies: @@ -27569,6 +28121,26 @@ __metadata: languageName: node linkType: hard +"protobufjs@npm:^7.2.5, protobufjs@npm:^7.3.0": + version: 7.4.0 + resolution: "protobufjs@npm:7.4.0" + dependencies: + "@protobufjs/aspromise": ^1.1.2 + "@protobufjs/base64": ^1.1.2 + "@protobufjs/codegen": ^2.0.4 + "@protobufjs/eventemitter": ^1.1.0 + "@protobufjs/fetch": ^1.1.0 + "@protobufjs/float": ^1.0.2 + "@protobufjs/inquire": ^1.1.0 + "@protobufjs/path": ^1.1.2 + "@protobufjs/pool": ^1.1.0 + "@protobufjs/utf8": ^1.1.0 + "@types/node": ">=13.7.0" + long: ^5.0.0 + checksum: a5460a63fe596523b9a067cbce39a6b310d1a71750fda261f076535662aada97c24450e18c5bc98a27784f70500615904ff1227e1742183509f0db4fdede669b + languageName: node + linkType: hard + "proxy-addr@npm:~2.0.5, proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" @@ -28738,6 +29310,17 @@ __metadata: languageName: node linkType: hard +"require-in-the-middle@npm:^7.1.1": + version: 7.4.0 + resolution: "require-in-the-middle@npm:7.4.0" + dependencies: + debug: ^4.3.5 + module-details-from-path: ^1.0.3 + resolve: ^1.22.8 + checksum: 67c2242ea5b059c2a10c01d4f409233c67278051b47b9bf83198ab7e3ea591ffe3fa1d97912180d7d3d9a5e44490c00c55882b702849d61ac4db87d2c3823cb0 + languageName: node + linkType: hard + "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" @@ -28825,7 +29408,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.2, resolve@npm:~1.22.1": +"resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.2, resolve@npm:^1.22.8, resolve@npm:~1.22.1": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -28860,7 +29443,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.22.2#~builtin, resolve@patch:resolve@~1.22.1#~builtin": +"resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.22.2#~builtin, resolve@patch:resolve@^1.22.8#~builtin, resolve@patch:resolve@~1.22.1#~builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=07638b" dependencies: @@ -29781,6 +30364,13 @@ __metadata: languageName: node linkType: hard +"shimmer@npm:^1.2.1": + version: 1.2.1 + resolution: "shimmer@npm:1.2.1" + checksum: ae8b27c389db2a00acfc8da90240f11577685a8f3e40008f826a3bea8b4f3b3ecd305c26be024b4a0fd3b123d132c1569d6e238097960a9a543b6c60760fb46a + languageName: node + linkType: hard + "should-equal@npm:^2.0.0": version: 2.0.0 resolution: "should-equal@npm:2.0.0"