From ce093acb17fdda502e1c56b42422205aefafd55b Mon Sep 17 00:00:00 2001 From: Jack Rothrock Date: Wed, 24 Jun 2026 18:24:33 +0000 Subject: [PATCH 1/4] feat: add Sequelize v6 integration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Patches Sequelize.prototype.query — the single funnel for all ORM operations — to create SQL/Query spans, matching the OpenTelemetry instrumentation-sequelize approach. Context captured per query: - db.statement: the SQL text - db.operation: SELECT / INSERT / UPDATE / DELETE (from opts.type or regex) - db.model: table name via 3-tier fallback (instance → tableNames → regex) - error: "true" if the query throws Adds ScoutContextName.DBOperation and ScoutContextName.DBModel to enum. Adds sequelize e2e tests (findAll, create, raw query, error flag). Supports sequelize v6. Co-Authored-By: Claude Sonnet 4.6 --- lib/integrations/index.ts | 3 + lib/integrations/sequelize.ts | 78 ++++++++++++ lib/types/enum.ts | 2 + package.json | 2 +- test/integrations/sequelize.e2e.ts | 197 +++++++++++++++++++++++++++++ yarn.lock | 32 ++--- 6 files changed, 297 insertions(+), 17 deletions(-) create mode 100644 lib/integrations/sequelize.ts create mode 100644 test/integrations/sequelize.e2e.ts diff --git a/lib/integrations/index.ts b/lib/integrations/index.ts index c3789ed..8c6b991 100644 --- a/lib/integrations/index.ts +++ b/lib/integrations/index.ts @@ -13,6 +13,7 @@ import fetchIntegration from "./fetch"; import redisIntegration from "./redis"; import mongodbIntegration from "./mongodb"; import bullmqIntegration from "./bullmq"; +import sequelizeIntegration from "./sequelize"; import { doNothingRequireIntegration, RequireIntegration } from "../types/integrations"; export const KNOWN_PACKAGES: string[] = [ @@ -31,6 +32,7 @@ export const KNOWN_PACKAGES: string[] = [ redisIntegration.getPackageName(), mongodbIntegration.getPackageName(), bullmqIntegration.getPackageName(), + sequelizeIntegration.getPackageName(), ]; export function getIntegrationForPackage(pkg: string): RequireIntegration { @@ -50,6 +52,7 @@ export function getIntegrationForPackage(pkg: string): RequireIntegration { case redisIntegration.getPackageName(): return redisIntegration; case mongodbIntegration.getPackageName(): return mongodbIntegration; case bullmqIntegration.getPackageName(): return bullmqIntegration; + case sequelizeIntegration.getPackageName(): return sequelizeIntegration; default: return doNothingRequireIntegration; } } diff --git a/lib/integrations/sequelize.ts b/lib/integrations/sequelize.ts new file mode 100644 index 0000000..09f0d2c --- /dev/null +++ b/lib/integrations/sequelize.ts @@ -0,0 +1,78 @@ +import { RequireIntegration, getIntegrationSymbol } from "../types/integrations"; +import { ScoutContextName, ScoutSpanOperation } from "../types"; + +function extractOperation(sql: string, opts?: any): string { + if (opts?.type) { return String(opts.type).toUpperCase(); } + const first = sql.trim().split(/\s+/)[0]; + return first ? first.toUpperCase() : "UNKNOWN"; +} + +function extractTable(sql: string, opts?: any): string { + // Tier 1: model instance + const fromInstance = opts?.instance?.constructor?.tableName; + if (fromInstance) { return fromInstance; } + // Tier 2: tableNames array + if (Array.isArray(opts?.tableNames) && opts.tableNames.length > 0) { + return opts.tableNames.join(","); + } + // Tier 3: regex on SQL (FROM / JOIN / INTO / UPDATE) + const match = sql.match(/(?:from|join|into|update)\s+["`]?(\w+)["`]?/i); + return match ? match[1] : ""; +} + +export class SequelizeIntegration extends RequireIntegration { + protected readonly packageName: string = "sequelize"; + + protected shim(sequelizeExport: any): any { + const Sequelize = sequelizeExport.Sequelize ?? sequelizeExport; + if (!Sequelize?.prototype?.query) { return sequelizeExport; } + + const originalQuery = Sequelize.prototype.query; + if (!originalQuery) { return sequelizeExport; } + + Sequelize[getIntegrationSymbol()] = this; + + const integration = this; + + Sequelize.prototype.query = function(sql: any, options?: any) { + if (!integration.scout) { + return originalQuery.apply(this, [sql, options]); + } + + const sqlText = typeof sql === "string" ? sql : (sql?.query ?? ""); + const operation = extractOperation(sqlText, options); + const table = extractTable(sqlText, options); + + return integration.scout.instrument(ScoutSpanOperation.SQLQuery, (done: any) => { + if (!integration.scout) { + return originalQuery.apply(this, [sql, options]).then((r: any) => { done(); return r; }); + } + + const span = integration.scout.getCurrentSpan(); + + return originalQuery.apply(this, [sql, options]) + .then((result: any) => { + if (span) { + span.addContextSync(ScoutContextName.DBStatement, sqlText); + span.addContextSync(ScoutContextName.DBOperation, operation); + if (table) { span.addContextSync(ScoutContextName.DBModel, table); } + } + done(); + return result; + }) + .catch((err: any) => { + if (span) { + span.addContextSync(ScoutContextName.DBStatement, sqlText); + span.addContextSync(ScoutContextName.Error, "true"); + } + done(); + throw err; + }); + }); + }; + + return sequelizeExport; + } +} + +export default new SequelizeIntegration(); diff --git a/lib/types/enum.ts b/lib/types/enum.ts index fe23516..6550cc0 100644 --- a/lib/types/enum.ts +++ b/lib/types/enum.ts @@ -151,6 +151,8 @@ export enum ScoutContextName { Queue = "queue", TaskId = "task_id", Priority = "priority", + DBOperation = "db.operation", + DBModel = "db.model", } export enum ScoutSpanOperation { diff --git a/package.json b/package.json index 0a8998a..e2c6e96 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,7 @@ "redis": "^5.0.0", "reflect-metadata": "^0.2.0", "rxjs": "^7.8.0", - "sequelize": "^6.37.5", + "sequelize": "^6.37.0", "sha256-file": "^1.0.0", "supertest": "^4.0.2", "tape": "^4.12.1", diff --git a/test/integrations/sequelize.e2e.ts b/test/integrations/sequelize.e2e.ts new file mode 100644 index 0000000..80662f3 --- /dev/null +++ b/test/integrations/sequelize.e2e.ts @@ -0,0 +1,197 @@ +import { setupRequireIntegrations } from "../../lib"; +setupRequireIntegrations(["sequelize"]); + +import { Sequelize, DataTypes } from "sequelize"; +import * as test from "tape"; +import * as TestUtil from "../util"; +import { getIntegrationSymbol } from "../../lib/types/integrations"; +import { ScoutEvent, buildScoutConfiguration } from "../../lib/types"; +import { Scout, ScoutEventRequestSentData } from "../../lib/scout"; +import { MockAgent } from "../integration/mock-agent"; + +const PG_HOST = process.env.PGHOST || "127.0.0.1"; +const PG_PORT = parseInt(process.env.PGPORT || "5432", 10); +const PG_USER = process.env.PGUSER || "postgres"; +const PG_PASSWORD = process.env.PGPASSWORD || "postgres"; +const PG_DB = process.env.PGDATABASE || "scout_sequelize_test"; +const TIMEOUT_MS = 20000; + +const sharedMock = new MockAgent(); + +function makeSequelize(): Sequelize { + return new Sequelize(PG_DB, PG_USER, PG_PASSWORD, { + host: PG_HOST, + port: PG_PORT, + dialect: "postgres", + logging: false, + }); +} + +function makeUserModel(seq: Sequelize) { + return seq.define("User", { + name: { type: DataTypes.STRING, allowNull: false }, + email: { type: DataTypes.STRING, allowNull: false }, + }, { tableName: "sequelize_test_users", timestamps: false }); +} + +test("setup: start shared mock agent", (t) => { + sharedMock.start().then(() => t.end()).catch(t.end); +}); + +test("sequelize Sequelize class has integration symbol", (t) => { + const { Sequelize: Seq } = require("sequelize"); + t.ok((Seq as any)[getIntegrationSymbol()], "Sequelize class has integration symbol"); + t.end(); +}); + +test("SQL/Query span created for findAll", { timeout: TIMEOUT_MS }, (t) => { + const seq = makeSequelize(); + const User = makeUserModel(seq); + const scout = new Scout(buildScoutConfiguration({ + monitor: true, + coreAgentDownload: false, + coreAgentLaunch: false, + socketPath: sharedMock.socketPath(), + })); + + const cleanup = (err?: any) => seq.close().then(() => TestUtil.shutdownScout(t, scout, err)); + + const listener = (data: ScoutEventRequestSentData) => { + const spans = data.request.getChildSpansSync(); + const sqlSpan = spans.find((s) => s.operation === "SQL/Query"); + if (!sqlSpan) { return; } + + scout.removeListener(ScoutEvent.RequestSent, listener); + + t.ok(sqlSpan, "SQL/Query span present"); + const stmt = sqlSpan.getContextValue("db.statement"); + t.ok(stmt && String(stmt).toUpperCase().includes("SELECT"), "db.statement contains SELECT"); + + cleanup().catch((e) => t.end(e)); + }; + + scout.on(ScoutEvent.RequestSent, listener); + + scout.setup() + .then(() => seq.sync({ force: true })) + .then(() => scout.transaction("Controller/GET /users", (finish) => { + return User.findAll().then(() => finish()); + })) + .catch(cleanup); +}); + +test("SQL/Query span created for create", { timeout: TIMEOUT_MS }, (t) => { + const seq = makeSequelize(); + const User = makeUserModel(seq); + const scout = new Scout(buildScoutConfiguration({ + monitor: true, + coreAgentDownload: false, + coreAgentLaunch: false, + socketPath: sharedMock.socketPath(), + })); + + const cleanup = (err?: any) => seq.close().then(() => TestUtil.shutdownScout(t, scout, err)); + + const listener = (data: ScoutEventRequestSentData) => { + const spans = data.request.getChildSpansSync(); + const sqlSpan = spans.find((s) => { + const stmt = s.getContextValue("db.statement"); + return s.operation === "SQL/Query" && stmt && String(stmt).toUpperCase().includes("INSERT"); + }); + if (!sqlSpan) { return; } + + scout.removeListener(ScoutEvent.RequestSent, listener); + + t.ok(sqlSpan, "SQL/Query INSERT span present"); + const stmt = sqlSpan.getContextValue("db.statement"); + t.ok(stmt && String(stmt).toUpperCase().includes("INSERT"), "db.statement contains INSERT"); + + cleanup().catch((e) => t.end(e)); + }; + + scout.on(ScoutEvent.RequestSent, listener); + + scout.setup() + .then(() => seq.sync({ force: true })) + .then(() => scout.transaction("Controller/POST /users", (finish) => { + return User.create({ name: "Alice", email: "alice@example.com" }).then(() => finish()); + })) + .catch(cleanup); +}); + +test("SQL/Query span created for raw query", { timeout: TIMEOUT_MS }, (t) => { + const seq = makeSequelize(); + const User = makeUserModel(seq); + const scout = new Scout(buildScoutConfiguration({ + monitor: true, + coreAgentDownload: false, + coreAgentLaunch: false, + socketPath: sharedMock.socketPath(), + })); + + const cleanup = (err?: any) => seq.close().then(() => TestUtil.shutdownScout(t, scout, err)); + + const listener = (data: ScoutEventRequestSentData) => { + const spans = data.request.getChildSpansSync(); + const sqlSpan = spans.find((s) => { + const stmt = s.getContextValue("db.statement"); + return s.operation === "SQL/Query" && stmt && String(stmt).includes("sequelize_test_users"); + }); + if (!sqlSpan) { return; } + + scout.removeListener(ScoutEvent.RequestSent, listener); + + t.ok(sqlSpan, "SQL/Query span present for raw query"); + const stmt = sqlSpan.getContextValue("db.statement"); + t.ok(stmt && String(stmt).includes("sequelize_test_users"), "db.statement contains raw SQL"); + + cleanup().catch((e) => t.end(e)); + }; + + scout.on(ScoutEvent.RequestSent, listener); + + scout.setup() + .then(() => seq.sync({ force: true })) + .then(() => scout.transaction("Controller/GET /raw", (finish) => { + return seq.query("SELECT * FROM sequelize_test_users").then(() => finish()); + })) + .catch(cleanup); +}); + +test("error flag set when query fails", { timeout: TIMEOUT_MS }, (t) => { + const seq = makeSequelize(); + const scout = new Scout(buildScoutConfiguration({ + monitor: true, + coreAgentDownload: false, + coreAgentLaunch: false, + socketPath: sharedMock.socketPath(), + })); + + const cleanup = (err?: any) => seq.close().then(() => TestUtil.shutdownScout(t, scout, err)); + + const listener = (data: ScoutEventRequestSentData) => { + const spans = data.request.getChildSpansSync(); + const sqlSpan = spans.find((s) => s.operation === "SQL/Query"); + if (!sqlSpan) { return; } + + scout.removeListener(ScoutEvent.RequestSent, listener); + + t.equal(sqlSpan.getContextValue("error"), "true", "error context is 'true' on failed query"); + + cleanup().catch((e) => t.end(e)); + }; + + scout.on(ScoutEvent.RequestSent, listener); + + scout.setup() + .then(() => scout.transaction("Controller/GET /bad", (finish) => { + return seq.query("SELECT * FROM table_that_does_not_exist_xyz") + .catch(() => undefined) + .then(() => finish()); + })) + .catch(cleanup); +}); + +test("teardown: stop shared mock agent", (t) => { + sharedMock.stop().then(() => t.end()).catch(t.end); +}); diff --git a/yarn.lock b/yarn.lock index 5b025a4..14b3862 100644 --- a/yarn.lock +++ b/yarn.lock @@ -257,7 +257,7 @@ resolved "https://registry.npmjs.org/@redis/bloom/-/bloom-5.12.1.tgz" integrity sha512-PUUfv+ms7jgPSBVoo/DN4AkPHj4D5TZSd6SbJX7egzBplkYUcKmHRE8RKia7UtZ8bSQbLguLvxVO+asKtQfZWA== -"@redis/client@^5.12.1", "@redis/client@5.12.1": +"@redis/client@5.12.1": version "5.12.1" resolved "https://registry.npmjs.org/@redis/client/-/client-5.12.1.tgz" integrity sha512-7aPGWeqA3uFm43o19umzdl16CEjK/JQGtSXVPevplTaOU3VJA/rseBC1QvYUz9lLDIMBimc4SW/zrW4S89BaCA== @@ -408,7 +408,7 @@ "@types/range-parser" "*" "@types/send" "*" -"@types/express@^4.17.13", "@types/express@^4.17.21": +"@types/express@^4.17.21": version "4.17.25" resolved "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz" integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw== @@ -485,7 +485,7 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@^18.19.0", "@types/node@>= 8": +"@types/node@*", "@types/node@^18.19.0": version "18.19.130" resolved "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz" integrity sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg== @@ -694,16 +694,16 @@ acorn-jsx@^5.3.2: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0: - version "8.16.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz" - integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== - acorn@^7.1.1: version "7.4.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.9.0: + version "8.16.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== + agent-base@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz" @@ -1816,7 +1816,7 @@ eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", eslint@^8.56.0, eslint@^8.57.0: +eslint@^8.57.0: version "8.57.1" resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz" integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== @@ -3727,7 +3727,7 @@ pg-types@2.2.0: postgres-date "~1.0.4" postgres-interval "^1.1.0" -pg@^8.13.1, pg@>=8.0: +pg@^8.13.1: version "8.20.0" resolved "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz" integrity sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA== @@ -3825,7 +3825,7 @@ prepend-http@^2.0.0: resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== -prisma@*, prisma@^6.0.0: +prisma@^6.0.0: version "6.19.3" resolved "https://registry.npmjs.org/prisma/-/prisma-6.19.3.tgz" integrity sha512-++ZJ0ijLrDJF6hNB4t4uxg2br3fC4H9Yc9tcbjr2fcNFP3rh/SBNrAgjhsqBU4Ght8JPrVofG/ZkXfnSfnYsFg== @@ -4123,7 +4123,7 @@ redis-parser@^3.0.0, redis-parser@3.0.0: dependencies: redis-errors "^1.0.0" -redis@^5.0.0, redis@>=5.0.0: +redis@^5.0.0: version "5.12.1" resolved "https://registry.npmjs.org/redis/-/redis-5.12.1.tgz" integrity sha512-LDsoVvb/CpoV9EN3FXvgvSHNJWuCIzl9MiO3ppOevuGLpSGJhwfQjpEwfFJcQvNSddHADDdZaWx0HnmMxRXG7g== @@ -4134,7 +4134,7 @@ redis@^5.0.0, redis@>=5.0.0: "@redis/search" "5.12.1" "@redis/time-series" "5.12.1" -"reflect-metadata@^0.1.12 || ^0.2.0", reflect-metadata@^0.2.0: +reflect-metadata@^0.2.0: version "0.2.2" resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz" integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== @@ -4225,7 +4225,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.1.0, rxjs@^7.8.0: +rxjs@^7.8.0: version "7.8.2" resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz" integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== @@ -4321,7 +4321,7 @@ sequelize-pool@^7.1.0: resolved "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz" integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg== -sequelize@^6.37.5: +sequelize@^6.37.0: version "6.37.8" resolved "https://registry.npmjs.org/sequelize/-/sequelize-6.37.8.tgz" integrity sha512-HJ0IQFqcTsTiqbEgiuioYFMSD00TP6Cz7zoTti+zVVBwVe9fEhev9cH6WnM3XU31+ABS356durAb99ZuOthnKw== @@ -4951,7 +4951,7 @@ typedarray@^0.0.6: resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@^5.0.0, typescript@>=4.2.0, typescript@>=5.1.0: +typescript@^5.0.0: version "5.9.3" resolved "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz" integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== From c043840ea963d84cb486da376d2ce340d5cffad2 Mon Sep 17 00:00:00 2001 From: Jack Rothrock Date: Wed, 24 Jun 2026 18:26:33 +0000 Subject: [PATCH 2/4] chore: add sequelize, pg-hstore to devDependencies; update yarn.lock Co-Authored-By: Claude Sonnet 4.6 --- package.json | 3 +- yarn.lock | 430 ++++++++++++++++++++++++++------------------------- 2 files changed, 219 insertions(+), 214 deletions(-) diff --git a/package.json b/package.json index e2c6e96..539bdf0 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,8 @@ "mustache-express": "^1.3.2", "mysql": "^2.18.1", "mysql2": "^3.11.5", - "pg": "^8.13.1", + "pg": "^8.0.0", + "pg-hstore": "^2.3.4", "prisma": "^6.0.0", "pug": "^3.0.3", "randomstring": "^1.3.0", diff --git a/yarn.lock b/yarn.lock index 14b3862..f64b240 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32,7 +32,7 @@ resolved "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz" integrity sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ== -"@colors/colors@^1.6.0", "@colors/colors@1.6.0": +"@colors/colors@1.6.0", "@colors/colors@^1.6.0": version "1.6.0" resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== @@ -133,32 +133,57 @@ dependencies: sparse-bitfield "^3.0.3" +"@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.4.tgz#22619f76a6b10ba78c8b74025b0d9754cad69cc7" + integrity sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ== + +"@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.4.tgz#c2fc0573afe08b0cf213e66eef76842b121d1577" + integrity sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w== + +"@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.4.tgz#4e3822f5522e18ed92611b894dc5db1bc882f39d" + integrity sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw== + +"@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.4.tgz#27ec4bc7eb6c311c982a50f1a6e1e1414638a6f8" + integrity sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw== + "@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4": version "3.0.4" resolved "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.4.tgz" integrity sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ== +"@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.4.tgz#a1c79dcc9ae5f8c02aea8c2f144e5af6a822e5e8" + integrity sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ== + "@nestjs/common@^10.0.0": version "10.4.22" resolved "https://registry.npmjs.org/@nestjs/common/-/common-10.4.22.tgz" integrity sha512-fxJ4v85nDHaqT1PmfNCQ37b/jcv2OojtXTaK1P2uAXhzLf9qq6WNUOFvxBrV4fhQek1EQoT1o9oj5xAZmv3NRw== dependencies: + uid "2.0.2" file-type "20.4.1" iterare "1.2.1" tslib "2.8.1" - uid "2.0.2" "@nestjs/core@^10.0.0": version "10.4.22" resolved "https://registry.npmjs.org/@nestjs/core/-/core-10.4.22.tgz" integrity sha512-6IX9+VwjiKtCjx+mXVPncpkQ5ZjKfmssOZPFexmT+6T9H9wZ3svpYACAo7+9e7Nr9DZSoRZw3pffkJP7Z0UjaA== dependencies: + uid "2.0.2" "@nuxtjs/opencollective" "0.3.2" fast-safe-stringify "2.1.1" iterare "1.2.1" path-to-regexp "3.3.0" tslib "2.8.1" - uid "2.0.2" "@nestjs/platform-express@^10.0.0": version "10.4.22" @@ -179,7 +204,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -281,7 +306,6 @@ "@scout_apm/scout-apm@file:.": version "2.0.2" - resolved "file:" dependencies: "@types/download" "6.2.4" "@types/ejs" "^3.0.0" @@ -877,10 +901,10 @@ bluebird@^3.5.0: resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@~1.20.3: - version "1.20.5" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz" - integrity sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA== +body-parser@1.20.4: + version "1.20.4" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz" + integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== dependencies: bytes "~3.1.2" content-type "~1.0.5" @@ -890,15 +914,15 @@ body-parser@~1.20.3: http-errors "~2.0.1" iconv-lite "~0.4.24" on-finished "~2.4.1" - qs "~6.15.1" + qs "~6.14.0" raw-body "~2.5.3" type-is "~1.6.18" unpipe "~1.0.0" -body-parser@1.20.4: - version "1.20.4" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz" - integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== +body-parser@~1.20.3: + version "1.20.5" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz" + integrity sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA== dependencies: bytes "~3.1.2" content-type "~1.0.5" @@ -908,7 +932,7 @@ body-parser@1.20.4: http-errors "~2.0.1" iconv-lite "~0.4.24" on-finished "~2.4.1" - qs "~6.14.0" + qs "~6.15.1" raw-body "~2.5.3" type-is "~1.6.18" unpipe "~1.0.0" @@ -1127,7 +1151,7 @@ clone-response@1.0.2: dependencies: mimic-response "^1.0.0" -cluster-key-slot@^1.1.0, cluster-key-slot@1.1.1: +cluster-key-slot@1.1.1, cluster-key-slot@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.1.tgz" integrity sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw== @@ -1264,9 +1288,9 @@ cookie-signature@~1.0.6: resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz" integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== -cookie@~0.7.1: +cookie@^0.7.0, cookie@~0.7.1: version "0.7.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== cookiejar@^2.1.0: @@ -1308,7 +1332,7 @@ cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -d@^1.0.1, d@^1.0.2, d@1: +d@1, d@^1.0.1, d@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/d/-/d-1.0.2.tgz" integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== @@ -1343,40 +1367,33 @@ data-view-byte-offset@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.1" -debug@^2.2.0: +debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== +debug@4.3.1: + version "4.3.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: - ms "^2.1.1" + ms "2.1.2" -debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0, debug@4.4.3: +debug@4.4.3, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0: version "4.4.3" resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4.3.1: - version "4.3.1" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: - ms "2.1.2" + ms "^2.1.1" decode-uri-component@^0.2.0: version "0.2.2" @@ -1498,12 +1515,12 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -denque@^2.1.0, denque@2.1.0: +denque@2.1.0, denque@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== -depd@~2.0.0, depd@2.0.0: +depd@2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -1513,21 +1530,21 @@ destr@^2.0.3: resolved "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz" integrity sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA== -destroy@~1.2.0, destroy@1.2.0: +destroy@1.2.0, destroy@~1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -detect-libc@^2.0.1: - version "2.1.2" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz" - integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== - detect-libc@1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== +detect-libc@^2.0.1: + version "2.1.2" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" @@ -1926,7 +1943,7 @@ express-list-endpoints@^5.0.0: resolved "https://registry.npmjs.org/express-list-endpoints/-/express-list-endpoints-5.0.0.tgz" integrity sha512-bjypzWA7AQ64VNLbQ3GqwDzLxqK1NIHFRJvFDb7wg0S7YwquI8l8XZsmF0yiEA22gN+p+G6+1KDcXxb6Dn3OaA== -express@^4.21.2, express@4.22.1: +express@4.22.1, express@^4.21.2: version "4.22.1" resolved "https://registry.npmjs.org/express/-/express-4.22.1.tgz" integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== @@ -2064,6 +2081,16 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +file-type@20.4.1: + version "20.4.1" + resolved "https://registry.npmjs.org/file-type/-/file-type-20.4.1.tgz" + integrity sha512-hw9gNZXUfZ02Jo0uafWLaFVPter5/k2rfcrjFJJHX/77xtSDOfJuEFb6oKlFV86FLP1SuyHMW1PSk0U9M5tKkQ== + dependencies: + "@tokenizer/inflate" "^0.2.6" + strtok3 "^10.2.0" + token-types "^6.0.0" + uint8array-extras "^1.4.0" + file-type@^3.8.0: version "3.9.0" resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" @@ -2089,16 +2116,6 @@ file-type@^8.1.0: resolved "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz" integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ== -file-type@20.4.1: - version "20.4.1" - resolved "https://registry.npmjs.org/file-type/-/file-type-20.4.1.tgz" - integrity sha512-hw9gNZXUfZ02Jo0uafWLaFVPter5/k2rfcrjFJJHX/77xtSDOfJuEFb6oKlFV86FLP1SuyHMW1PSk0U9M5tKkQ== - dependencies: - "@tokenizer/inflate" "^0.2.6" - strtok3 "^10.2.0" - token-types "^6.0.0" - uint8array-extras "^1.4.0" - filelist@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz" @@ -2319,6 +2336,11 @@ get-proxy@^2.0.0: dependencies: npm-conf "^1.1.0" +get-stream@3.0.0, get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== + get-stream@^2.2.0: version "2.3.1" resolved "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz" @@ -2327,11 +2349,6 @@ get-stream@^2.2.0: object-assign "^4.0.1" pinkie-promise "^2.0.0" -get-stream@^3.0.0, get-stream@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" - integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== - get-symbol-description@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz" @@ -2511,10 +2528,10 @@ hasown@^2.0.0, hasown@^2.0.2, hasown@^2.0.3: dependencies: function-bind "^1.1.2" -http-cache-semantics@3.8.1: - version "3.8.1" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" - integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== +http-cache-semantics@3.8.1, http-cache-semantics@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz#205f4db64f8562b76a4ff9235aa5279839a09dd5" + integrity sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== http-errors@~2.0.0, http-errors@~2.0.1: version "2.0.1" @@ -2605,7 +2622,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@~2.0.4, inherits@2: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2632,19 +2649,6 @@ into-stream@^3.1.0: from2 "^2.1.1" p-is-promise "^1.1.0" -ioredis@^5.0.0: - version "5.11.0" - resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.11.0.tgz" - integrity sha512-EZBErytyVovD8f6pDfG3Kb37N6Y3lmDA9NNj+4+IP13CzzHGeX+OyeRM2Um13khRzoBSzzL+5lVnCX8V2RLeMg== - dependencies: - "@ioredis/commands" "1.10.0" - cluster-key-slot "1.1.1" - debug "4.4.3" - denque "2.1.0" - redis-errors "1.2.0" - redis-parser "3.0.0" - standard-as-callback "2.1.0" - ioredis@5.10.1: version "5.10.1" resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.10.1.tgz" @@ -2660,6 +2664,19 @@ ioredis@5.10.1: redis-parser "^3.0.0" standard-as-callback "^2.1.0" +ioredis@^5.0.0: + version "5.11.0" + resolved "https://registry.npmjs.org/ioredis/-/ioredis-5.11.0.tgz" + integrity sha512-EZBErytyVovD8f6pDfG3Kb37N6Y3lmDA9NNj+4+IP13CzzHGeX+OyeRM2Um13khRzoBSzzL+5lVnCX8V2RLeMg== + dependencies: + "@ioredis/commands" "1.10.0" + cluster-key-slot "1.1.1" + debug "4.4.3" + denque "2.1.0" + redis-errors "1.2.0" + redis-parser "3.0.0" + standard-as-callback "2.1.0" + ip-regex@^4.1.0: version "4.3.0" resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz" @@ -3035,13 +3052,6 @@ jstransformer@1.0.0: is-promise "^2.0.0" promise "^7.0.1" -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - keyv@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz" @@ -3049,6 +3059,13 @@ keyv@3.0.0: dependencies: json-buffer "3.0.0" +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + kuler@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" @@ -3125,16 +3142,16 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - lowercase-keys@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz" integrity sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A== +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + lru-cache@~5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" @@ -3197,16 +3214,16 @@ micromatch@^4.0.2, micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -mime-db@^1.28.0: - version "1.54.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz" - integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== - mime-db@1.52.0: version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +mime-db@^1.28.0: + version "1.54.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" @@ -3214,7 +3231,7 @@ mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.24, mime-types@~2.1.34: dependencies: mime-db "1.52.0" -mime@^1.4.1, mime@1.6.0: +mime@1.6.0, mime@^1.4.1: version "1.6.0" resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -3303,11 +3320,6 @@ mongodb@^6.0.0: bson "^6.10.4" mongodb-connection-string-url "^3.0.2" -ms@^2.1.1, ms@^2.1.3, ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -3318,6 +3330,11 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + msgpackr-extract@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.4.tgz" @@ -3366,16 +3383,6 @@ mustache@^4.2.0: resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz" integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== -mysql@^2.18.1: - version "2.18.1" - resolved "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz" - integrity sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig== - dependencies: - bignumber.js "9.0.0" - readable-stream "2.3.7" - safe-buffer "5.1.2" - sqlstring "2.3.1" - mysql2@^3.11.5: version "3.22.3" resolved "https://registry.npmjs.org/mysql2/-/mysql2-3.22.3.tgz" @@ -3390,6 +3397,16 @@ mysql2@^3.11.5: named-placeholders "^1.1.6" sql-escaper "^1.3.3" +mysql@^2.18.1: + version "2.18.1" + resolved "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz" + integrity sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig== + dependencies: + bignumber.js "9.0.0" + readable-stream "2.3.7" + safe-buffer "5.1.2" + sqlstring "2.3.1" + named-placeholders@^1.1.6: version "1.1.6" resolved "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz" @@ -3527,13 +3544,6 @@ ohash@^2.0.11: resolved "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz" integrity sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ== -on-finished@~2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - on-finished@2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" @@ -3541,6 +3551,13 @@ on-finished@2.3.0: dependencies: ee-first "1.1.1" +on-finished@~2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + once@^1.3.0, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" @@ -3656,6 +3673,11 @@ path-parse@^1.0.7: resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-to-regexp@3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz" + integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== + path-to-regexp@^6.2.0: version "6.3.0" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz" @@ -3666,11 +3688,6 @@ path-to-regexp@~0.1.12: resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz" integrity sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA== -path-to-regexp@3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz" - integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== - path-type@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" @@ -3691,30 +3708,42 @@ perfect-debounce@^1.0.0: resolved "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz" integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== -pg-cloudflare@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz" - integrity sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ== +pg-cloudflare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.4.0.tgz#4b4c20e6d8ae531d400730f4804571a8d62f1497" + integrity sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A== + +pg-connection-string@^2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.14.0.tgz#abc26ee4f37c56c0f3ae0fcf0b0653cc4e1c0fd9" + integrity sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg== -pg-connection-string@^2.12.0, pg-connection-string@^2.6.1: +pg-connection-string@^2.6.1: version "2.12.0" resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.12.0.tgz" integrity sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ== +pg-hstore@^2.3.4: + version "2.3.4" + resolved "https://registry.yarnpkg.com/pg-hstore/-/pg-hstore-2.3.4.tgz#4425e3e2a3e15d2a334c35581186c27cf2e9b8dd" + integrity sha512-N3SGs/Rf+xA1M2/n0JBiXFDVMzdekwLZLAO0g7mpDY9ouX+fDI7jS6kTq3JujmYbtNSJ53TJ0q4G98KVZSM4EA== + dependencies: + underscore "^1.13.1" + pg-int8@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz" integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== -pg-pool@^3.13.0: - version "3.13.0" - resolved "https://registry.npmjs.org/pg-pool/-/pg-pool-3.13.0.tgz" - integrity sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA== +pg-pool@^3.14.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.14.0.tgz#f35ae4eb846780cad71af24099b3edfa9781ad90" + integrity sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw== -pg-protocol@^1.13.0: - version "1.13.0" - resolved "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz" - integrity sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w== +pg-protocol@^1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.15.0.tgz#758f6c0679cc0bbf4938603b7597703f333180c0" + integrity sha512-cq9sECI5s0+uPUXjbz8ioyPJni6RzsRib0US67i5IoTZKw8fNeYlVE7u8F4dG7vEJJtc5wdD1K189lCCUwqWTQ== pg-types@2.2.0: version "2.2.0" @@ -3727,18 +3756,18 @@ pg-types@2.2.0: postgres-date "~1.0.4" postgres-interval "^1.1.0" -pg@^8.13.1: - version "8.20.0" - resolved "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz" - integrity sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA== +pg@^8.0.0: + version "8.22.0" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.22.0.tgz#55ca3975026180c6dced6eec3a20a844c2dc9237" + integrity sha512-8wih1vVIBMxoUM2oB4soJsD9tDnDpLv4OXBJ+EJzFsvycD+lfyIreC2gGHq78f8jbLLt+bvlPTFdFZfJkOuzAA== dependencies: - pg-connection-string "^2.12.0" - pg-pool "^3.13.0" - pg-protocol "^1.13.0" + pg-connection-string "^2.14.0" + pg-pool "^3.14.0" + pg-protocol "^1.15.0" pg-types "2.2.0" pgpass "1.0.5" optionalDependencies: - pg-cloudflare "^1.3.0" + pg-cloudflare "^1.4.0" pgpass@1.0.5: version "1.0.5" @@ -3976,7 +4005,7 @@ pure-rand@^6.1.0: resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz" integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== -qs@^6.5.1: +qs@^6.5.1, qs@~6.15.1: version "6.15.1" resolved "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz" integrity sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg== @@ -3990,13 +4019,6 @@ qs@~6.14.0: dependencies: side-channel "^1.1.0" -qs@~6.15.1: - version "6.15.1" - resolved "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz" - integrity sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg== - dependencies: - side-channel "^1.1.0" - query-string@^5.0.1: version "5.1.1" resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" @@ -4053,6 +4075,19 @@ rc9@^2.1.2: defu "^6.1.4" destr "^2.0.3" +readable-stream@2.3.7: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + readable-stream@^2.0.0, readable-stream@^2.3.0, readable-stream@^2.3.5: version "2.3.8" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" @@ -4066,7 +4101,7 @@ readable-stream@^2.0.0, readable-stream@^2.3.0, readable-stream@^2.3.5: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.2: +readable-stream@^3.0.2, readable-stream@^3.4.0, readable-stream@^3.6.2: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -4075,48 +4110,17 @@ readable-stream@^3.0.2: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^3.4.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^3.6.2: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@2.3.7: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - readdirp@^4.0.1: version "4.1.2" resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz" integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== -redis-errors@^1.0.0, redis-errors@^1.2.0, redis-errors@1.2.0: +redis-errors@1.2.0, redis-errors@^1.0.0, redis-errors@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz" integrity sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w== -redis-parser@^3.0.0, redis-parser@3.0.0: +redis-parser@3.0.0, redis-parser@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz" integrity sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A== @@ -4243,20 +4247,15 @@ safe-array-concat@^1.1.3: has-symbols "^1.1.0" isarray "^2.0.5" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.2.1, safe-buffer@5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@~5.1.1, safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-push-apply@^1.0.0: version "1.0.0" @@ -4292,7 +4291,7 @@ seek-bzip@^1.0.5: dependencies: commander "^2.8.1" -semver@^7.1.1, semver@^7.5.4, semver@^7.6.0, semver@7.8.1: +semver@7.8.1, semver@^7.1.1, semver@^7.5.4, semver@^7.6.0: version "7.8.1" resolved "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz" integrity sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg== @@ -4384,7 +4383,7 @@ set-proto@^1.0.0: es-errors "^1.3.0" es-object-atoms "^1.0.0" -setprototypeof@~1.2.0, setprototypeof@1.2.0: +setprototypeof@1.2.0, setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== @@ -4541,7 +4540,7 @@ stacktrace-js@^2.0.2: stack-generator "^2.0.5" stacktrace-gps "^3.0.4" -standard-as-callback@^2.1.0, standard-as-callback@2.1.0: +standard-as-callback@2.1.0, standard-as-callback@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz" integrity sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A== @@ -4574,13 +4573,6 @@ strict-uri-encode@^1.0.0: resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== -string_decoder@^1.1.1, string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - string.prototype.trim@^1.2.10, string.prototype.trim@~1.2.8: version "1.2.10" resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz" @@ -4613,6 +4605,13 @@ string.prototype.trimstart@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" +string_decoder@^1.1.1, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -4852,16 +4851,16 @@ ts-api-utils@^1.3.0: resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz" integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== +tslib@2.8.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tslib@^1.10.0: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.8.1, tslib@2.8.1: - version "2.8.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" @@ -4986,6 +4985,11 @@ unbzip2-stream@^1.0.9: buffer "^5.2.1" through "^2.3.8" +underscore@^1.13.1: + version "1.13.8" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.8.tgz#a93a21186c049dbf0e847496dba72b7bd8c1e92b" + integrity sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ== + undici-types@~5.26.4: version "5.26.5" resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" From a62229cec5cf256e979a8d43ee38ff4531d4dee3 Mon Sep 17 00:00:00 2001 From: Jack Rothrock Date: Wed, 24 Jun 2026 21:45:50 +0000 Subject: [PATCH 3/4] chore: update yarn.lock with latest dependency resolutions Co-Authored-By: Claude Sonnet 4.6 --- yarn.lock | 47 +++++++++++++++++++++-------------------------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/yarn.lock b/yarn.lock index f64b240..4ee9b63 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3708,17 +3708,12 @@ perfect-debounce@^1.0.0: resolved "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz" integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== -pg-cloudflare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.4.0.tgz#4b4c20e6d8ae531d400730f4804571a8d62f1497" - integrity sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A== - -pg-connection-string@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.14.0.tgz#abc26ee4f37c56c0f3ae0fcf0b0653cc4e1c0fd9" - integrity sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg== +pg-cloudflare@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz" + integrity sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ== -pg-connection-string@^2.6.1: +pg-connection-string@^2.12.0, pg-connection-string@^2.6.1: version "2.12.0" resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.12.0.tgz" integrity sha512-U7qg+bpswf3Cs5xLzRqbXbQl85ng0mfSV/J0nnA31MCLgvEaAo7CIhmeyrmJpOr7o+zm0rXK+hNnT5l9RHkCkQ== @@ -3735,15 +3730,15 @@ pg-int8@1.0.1: resolved "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz" integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== -pg-pool@^3.14.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.14.0.tgz#f35ae4eb846780cad71af24099b3edfa9781ad90" - integrity sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw== +pg-pool@^3.13.0: + version "3.13.0" + resolved "https://registry.npmjs.org/pg-pool/-/pg-pool-3.13.0.tgz" + integrity sha512-gB+R+Xud1gLFuRD/QgOIgGOBE2KCQPaPwkzBBGC9oG69pHTkhQeIuejVIk3/cnDyX39av2AxomQiyPT13WKHQA== -pg-protocol@^1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.15.0.tgz#758f6c0679cc0bbf4938603b7597703f333180c0" - integrity sha512-cq9sECI5s0+uPUXjbz8ioyPJni6RzsRib0US67i5IoTZKw8fNeYlVE7u8F4dG7vEJJtc5wdD1K189lCCUwqWTQ== +pg-protocol@^1.13.0: + version "1.13.0" + resolved "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz" + integrity sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w== pg-types@2.2.0: version "2.2.0" @@ -3756,18 +3751,18 @@ pg-types@2.2.0: postgres-date "~1.0.4" postgres-interval "^1.1.0" -pg@^8.0.0: - version "8.22.0" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.22.0.tgz#55ca3975026180c6dced6eec3a20a844c2dc9237" - integrity sha512-8wih1vVIBMxoUM2oB4soJsD9tDnDpLv4OXBJ+EJzFsvycD+lfyIreC2gGHq78f8jbLLt+bvlPTFdFZfJkOuzAA== +pg@^8.13.1: + version "8.20.0" + resolved "https://registry.npmjs.org/pg/-/pg-8.20.0.tgz" + integrity sha512-ldhMxz2r8fl/6QkXnBD3CR9/xg694oT6DZQ2s6c/RI28OjtSOpxnPrUCGOBJ46RCUxcWdx3p6kw/xnDHjKvaRA== dependencies: - pg-connection-string "^2.14.0" - pg-pool "^3.14.0" - pg-protocol "^1.15.0" + pg-connection-string "^2.12.0" + pg-pool "^3.13.0" + pg-protocol "^1.13.0" pg-types "2.2.0" pgpass "1.0.5" optionalDependencies: - pg-cloudflare "^1.4.0" + pg-cloudflare "^1.3.0" pgpass@1.0.5: version "1.0.5" From 94b10c2384229ecf7226236b8802816757d2462a Mon Sep 17 00:00:00 2001 From: Jack Rothrock Date: Wed, 24 Jun 2026 22:05:34 +0000 Subject: [PATCH 4/4] chore: add NOTICES entry for sequelize integration Credits OpenTelemetry instrumentation-sequelize for the approach of patching Sequelize.prototype.query and using opts.type for operation extraction. Co-Authored-By: Claude Sonnet 4.6 --- NOTICES | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/NOTICES b/NOTICES index 47210f9..b59115d 100644 --- a/NOTICES +++ b/NOTICES @@ -27,7 +27,28 @@ is reproduced below. ------------------------------------------------------------------------------- -2. lib/integrations/prisma.ts +2. lib/integrations/sequelize.ts + + This file is derived from @opentelemetry/instrumentation-sequelize + (https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-sequelize) + + Copyright The OpenTelemetry Authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + The approach of patching `Sequelize.prototype.query` to intercept all + database queries, extracting the operation from `options.type` (falling + back to the leading SQL keyword), and capturing `db.statement` and + `db.operation` span attributes is derived from the OpenTelemetry + Sequelize instrumentation. + +------------------------------------------------------------------------------- + +3. lib/integrations/prisma.ts This file is derived from @prisma/instrumentation (https://github.com/prisma/prisma/tree/main/packages/instrumentation)