diff --git a/packages/backend/server/package.json b/packages/backend/server/package.json index 196277b3f..dda9267c0 100644 --- a/packages/backend/server/package.json +++ b/packages/backend/server/package.json @@ -22,6 +22,7 @@ "@apollo/server": "^4.11.2", "@aws-sdk/client-s3": "^3.709.0", "@fal-ai/serverless-client": "^0.15.0", + "@google-cloud/logging-winston": "^6.0.0", "@google-cloud/opentelemetry-cloud-monitoring-exporter": "^0.20.0", "@google-cloud/opentelemetry-cloud-trace-exporter": "^2.4.1", "@google-cloud/opentelemetry-resource-util": "^2.4.0", @@ -73,6 +74,7 @@ "mustache": "^4.2.0", "nanoid": "^5.0.9", "nest-commander": "^3.15.0", + "nest-winston": "^1.9.7", "nestjs-throttler-storage-redis": "^0.5.1", "nodemailer": "^6.9.16", "on-headers": "^1.0.2", @@ -86,6 +88,7 @@ "stripe": "^17.4.0", "ts-node": "^10.9.2", "typescript": "^5.7.2", + "winston": "^3.17.0", "yjs": "^13.6.21", "zod": "^3.24.1" }, diff --git a/packages/backend/server/src/app.module.ts b/packages/backend/server/src/app.module.ts index d6764ab9c..43ce7204e 100644 --- a/packages/backend/server/src/app.module.ts +++ b/packages/backend/server/src/app.module.ts @@ -15,6 +15,7 @@ import { ErrorModule } from './base/error'; import { EventModule } from './base/event'; import { GqlModule } from './base/graphql'; import { HelpersModule } from './base/helpers'; +import { LoggerModule } from './base/logger'; import { MailModule } from './base/mailer'; import { MetricsModule } from './base/metrics'; import { MutexModule } from './base/mutex'; @@ -53,6 +54,7 @@ export const FunctionalityModules = [ StorageProviderModule, HelpersModule, ErrorModule, + LoggerModule, ]; function filterOptionalModule( diff --git a/packages/backend/server/src/app.ts b/packages/backend/server/src/app.ts index a070e4b49..1175eee16 100644 --- a/packages/backend/server/src/app.ts +++ b/packages/backend/server/src/app.ts @@ -20,7 +20,6 @@ export async function createApp() { cors: true, rawBody: true, bodyParser: true, - logger: AFFiNE.affine.stable ? ['log'] : ['verbose'], }); if (AFFiNE.server.path) { diff --git a/packages/backend/server/src/base/index.ts b/packages/backend/server/src/base/index.ts index 1e5d1422a..368d457b2 100644 --- a/packages/backend/server/src/base/index.ts +++ b/packages/backend/server/src/base/index.ts @@ -18,6 +18,7 @@ export { EventEmitter, type EventPayload, OnEvent } from './event'; export type { GraphqlContext } from './graphql'; export * from './guard'; export { CryptoHelper, URLHelper } from './helpers'; +export { AFFiNELogger } from './logger'; export { MailService } from './mailer'; export { CallMetric, metrics } from './metrics'; export { Lock, Locker, Mutex, RequestMutex } from './mutex'; diff --git a/packages/backend/server/src/base/logger/index.ts b/packages/backend/server/src/base/logger/index.ts new file mode 100644 index 000000000..433821f38 --- /dev/null +++ b/packages/backend/server/src/base/logger/index.ts @@ -0,0 +1,14 @@ +import { Global, Module } from '@nestjs/common'; + +import { ConfigModule } from '../config'; +import { loggerProvider } from './service'; + +@Global() +@Module({ + imports: [ConfigModule], + providers: [loggerProvider], + exports: [loggerProvider], +}) +export class LoggerModule {} + +export { AFFiNELogger } from './logger'; diff --git a/packages/backend/server/src/base/logger/logger.ts b/packages/backend/server/src/base/logger/logger.ts new file mode 100644 index 000000000..29fb95b9d --- /dev/null +++ b/packages/backend/server/src/base/logger/logger.ts @@ -0,0 +1,17 @@ +import { WinstonLogger } from 'nest-winston'; + +export class AFFiNELogger extends WinstonLogger { + override error( + message: any, + trace?: Error | string | unknown, + context?: string + ) { + if (trace && trace instanceof Error) { + super.error(message, trace.stack, context); + } else if (typeof trace === 'string' || trace === undefined) { + super.error(message, trace, context); + } else { + super.error(message, undefined, context); + } + } +} diff --git a/packages/backend/server/src/base/logger/service.ts b/packages/backend/server/src/base/logger/service.ts new file mode 100644 index 000000000..3cb9831db --- /dev/null +++ b/packages/backend/server/src/base/logger/service.ts @@ -0,0 +1,30 @@ +import { LoggingWinston } from '@google-cloud/logging-winston'; +import { ConsoleLogger, LoggerService, Provider, Scope } from '@nestjs/common'; +import { createLogger, transports } from 'winston'; + +import { Config } from '../config'; +import { AFFiNELogger } from './logger'; + +export const loggerProvider: Provider = { + provide: AFFiNELogger, + useFactory: (config: Config) => { + if (config.NODE_ENV !== 'production') { + return new ConsoleLogger(); + } + const loggingWinston = new LoggingWinston(); + // Create a Winston logger that streams to Cloud Logging + const instance = createLogger({ + level: config.affine.stable ? 'log' : 'verbose', + transports: [ + new transports.Console(), + // Add Cloud Logging + loggingWinston, + ], + }); + return new AFFiNELogger(instance); + }, + inject: [Config], + // use transient to make sure the logger is created for each di context + // to make the `setContext` method works as expected + scope: Scope.TRANSIENT, +}; diff --git a/packages/backend/server/src/core/doc/job.ts b/packages/backend/server/src/core/doc/job.ts index c1e6052b4..7b4d689a9 100644 --- a/packages/backend/server/src/core/doc/job.ts +++ b/packages/backend/server/src/core/doc/job.ts @@ -1,8 +1,9 @@ -import { Injectable, Logger, OnModuleInit, Optional } from '@nestjs/common'; +import { Injectable, OnModuleInit, Optional } from '@nestjs/common'; import { Cron, CronExpression, SchedulerRegistry } from '@nestjs/schedule'; import { PrismaClient } from '@prisma/client'; import { + AFFiNELogger, CallMetric, Config, type EventPayload, @@ -13,15 +14,17 @@ import { PgWorkspaceDocStorageAdapter } from './adapters/workspace'; @Injectable() export class DocStorageCronJob implements OnModuleInit { - private readonly logger = new Logger(DocStorageCronJob.name); private busy = false; constructor( private readonly config: Config, private readonly db: PrismaClient, private readonly workspace: PgWorkspaceDocStorageAdapter, + private readonly logger: AFFiNELogger, @Optional() private readonly registry?: SchedulerRegistry - ) {} + ) { + this.logger.setContext(DocStorageCronJob.name); + } onModuleInit() { if (this.registry && this.config.doc.manager.enableUpdateAutoMerging) { diff --git a/packages/backend/server/src/middleware/timing.ts b/packages/backend/server/src/middleware/timing.ts index d476bcb38..2950df14a 100644 --- a/packages/backend/server/src/middleware/timing.ts +++ b/packages/backend/server/src/middleware/timing.ts @@ -16,7 +16,7 @@ export const serverTimingAndCache = ( const serverTiming = res.getHeader('Server-Timing') as string | undefined; const serverTimingValue = `${ serverTiming ? `${serverTiming}, ` : '' - }total;dur=${costInMilliseconds}`; + }affine-server;dur=${costInMilliseconds}`; res.setHeader('Server-Timing', serverTimingValue); }); diff --git a/yarn.lock b/yarn.lock index 60a461f27..fd067e476 100644 --- a/yarn.lock +++ b/yarn.lock @@ -756,6 +756,7 @@ __metadata: "@apollo/server": "npm:^4.11.2" "@aws-sdk/client-s3": "npm:^3.709.0" "@fal-ai/serverless-client": "npm:^0.15.0" + "@google-cloud/logging-winston": "npm:^6.0.0" "@google-cloud/opentelemetry-cloud-monitoring-exporter": "npm:^0.20.0" "@google-cloud/opentelemetry-cloud-trace-exporter": "npm:^2.4.1" "@google-cloud/opentelemetry-resource-util": "npm:^2.4.0" @@ -823,6 +824,7 @@ __metadata: mustache: "npm:^4.2.0" nanoid: "npm:^5.0.9" nest-commander: "npm:^3.15.0" + nest-winston: "npm:^1.9.7" nestjs-throttler-storage-redis: "npm:^0.5.1" nodemailer: "npm:^6.9.16" nodemon: "npm:^3.1.7" @@ -839,6 +841,7 @@ __metadata: supertest: "npm:^7.0.0" ts-node: "npm:^10.9.2" typescript: "npm:^5.7.2" + winston: "npm:^3.17.0" yjs: "npm:^13.6.21" zod: "npm:^3.24.1" bin: @@ -4279,6 +4282,13 @@ __metadata: languageName: node linkType: hard +"@colors/colors@npm:1.6.0, @colors/colors@npm:^1.6.0": + version: 1.6.0 + resolution: "@colors/colors@npm:1.6.0" + checksum: 10/66d00284a3a9a21e5e853b256942e17edbb295f4bd7b9aa7ef06bbb603568d5173eb41b0f64c1e51748bc29d382a23a67d99956e57e7431c64e47e74324182d9 + languageName: node + linkType: hard + "@commitlint/cli@npm:^19.6.0, @commitlint/cli@npm:^19.6.1": version: 19.6.1 resolution: "@commitlint/cli@npm:19.6.1" @@ -4486,6 +4496,17 @@ __metadata: languageName: node linkType: hard +"@dabh/diagnostics@npm:^2.0.2": + version: 2.0.3 + resolution: "@dabh/diagnostics@npm:2.0.3" + dependencies: + colorspace: "npm:1.1.x" + enabled: "npm:2.0.x" + kuler: "npm:^2.0.0" + checksum: 10/14e449a7f42f063f959b472f6ce02d16457a756e852a1910aaa831b63fc21d86f6c32b2a1aa98a4835b856548c926643b51062d241fb6e9b2b7117996053e6b9 + languageName: node + linkType: hard + "@datastructures-js/binary-search-tree@npm:^5.3.2": version: 5.3.2 resolution: "@datastructures-js/binary-search-tree@npm:5.3.2" @@ -6017,6 +6038,61 @@ __metadata: languageName: node linkType: hard +"@google-cloud/common@npm:^5.0.0": + version: 5.0.2 + resolution: "@google-cloud/common@npm:5.0.2" + dependencies: + "@google-cloud/projectify": "npm:^4.0.0" + "@google-cloud/promisify": "npm:^4.0.0" + arrify: "npm:^2.0.1" + duplexify: "npm:^4.1.1" + extend: "npm:^3.0.2" + google-auth-library: "npm:^9.0.0" + html-entities: "npm:^2.5.2" + retry-request: "npm:^7.0.0" + teeny-request: "npm:^9.0.0" + checksum: 10/a21a07d5cb3ab7bbe8c2756dd5b853210eacdd11b7866610003c1c87b93d4ae176373b163fe80bd5dbdb6e8fae3e0a3f999f546ed5d1c177eeae2af9a4e7b701 + languageName: node + linkType: hard + +"@google-cloud/logging-winston@npm:^6.0.0": + version: 6.0.0 + resolution: "@google-cloud/logging-winston@npm:6.0.0" + dependencies: + "@google-cloud/logging": "npm:^11.0.0" + google-auth-library: "npm:^9.0.0" + lodash.mapvalues: "npm:^4.6.0" + winston-transport: "npm:^4.3.0" + peerDependencies: + winston: ">=3.2.1" + checksum: 10/276b3a392d30a27c0ad34e19494bbcb5543263a4e3bb1834348931eb47ad4c735233400fe66d394cbb78ad3a390812de6dd499a29f58913dc11dd293fbd24b98 + languageName: node + linkType: hard + +"@google-cloud/logging@npm:^11.0.0": + version: 11.2.0 + resolution: "@google-cloud/logging@npm:11.2.0" + dependencies: + "@google-cloud/common": "npm:^5.0.0" + "@google-cloud/paginator": "npm:^5.0.0" + "@google-cloud/projectify": "npm:^4.0.0" + "@google-cloud/promisify": "npm:^4.0.0" + "@opentelemetry/api": "npm:^1.7.0" + arrify: "npm:^2.0.1" + dot-prop: "npm:^6.0.0" + eventid: "npm:^2.0.0" + extend: "npm:^3.0.2" + gcp-metadata: "npm:^6.0.0" + google-auth-library: "npm:^9.0.0" + google-gax: "npm:^4.0.3" + on-finished: "npm:^2.3.0" + pumpify: "npm:^2.0.1" + stream-events: "npm:^1.0.5" + uuid: "npm:^9.0.0" + checksum: 10/45e9af8e0673ae1c6d40da8f4b40a5717abdfc14ab153694c38bb2e323cb08f02341658a259f4f4f43868f0a1af249bfb13632387c502818ad4eb01294f564b3 + languageName: node + linkType: hard + "@google-cloud/opentelemetry-cloud-monitoring-exporter@npm:^0.20.0": version: 0.20.0 resolution: "@google-cloud/opentelemetry-cloud-monitoring-exporter@npm:0.20.0" @@ -6063,6 +6139,16 @@ __metadata: languageName: node linkType: hard +"@google-cloud/paginator@npm:^5.0.0": + version: 5.0.2 + resolution: "@google-cloud/paginator@npm:5.0.2" + dependencies: + arrify: "npm:^2.0.0" + extend: "npm:^3.0.2" + checksum: 10/b64ba2029b77fdcf3c827aea0b6d128122fd1d2f4aa8c1ba70747cba0659d4216a283769fb3bbeb8f726176f5282624637f02c30f118a010e05838411da0cb76 + languageName: node + linkType: hard + "@google-cloud/precise-date@npm:^4.0.0": version: 4.0.0 resolution: "@google-cloud/precise-date@npm:4.0.0" @@ -6070,6 +6156,20 @@ __metadata: languageName: node linkType: hard +"@google-cloud/projectify@npm:^4.0.0": + version: 4.0.0 + resolution: "@google-cloud/projectify@npm:4.0.0" + checksum: 10/fdccdda0b50855c35541d71c46a6603f3302ff1a00108d946272cb2167435da00e2a2da5963fe489f4f5a4a9eb6320abeb97d3269974a972ae89f5df8451922d + languageName: node + linkType: hard + +"@google-cloud/promisify@npm:^4.0.0": + version: 4.0.0 + resolution: "@google-cloud/promisify@npm:4.0.0" + checksum: 10/c5de81321b3a5c567edcbe0b941fb32644611147f3ba22f20575918c225a979988a99bc2ebda05ac914fa8714b0a54c69be72c3f46c7a64c3b19db7d7fba8d04 + languageName: node + linkType: hard + "@googleapis/androidpublisher@npm:^22.0.0": version: 22.0.0 resolution: "@googleapis/androidpublisher@npm:22.0.0" @@ -6760,7 +6860,7 @@ __metadata: languageName: node linkType: hard -"@grpc/grpc-js@npm:^1.1.8, @grpc/grpc-js@npm:^1.7.1": +"@grpc/grpc-js@npm:^1.1.8, @grpc/grpc-js@npm:^1.10.9, @grpc/grpc-js@npm:^1.7.1": version: 1.12.5 resolution: "@grpc/grpc-js@npm:1.12.5" dependencies: @@ -9541,7 +9641,7 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/api@npm:^1.0.0, @opentelemetry/api@npm:^1.3.0, @opentelemetry/api@npm:^1.8, @opentelemetry/api@npm:^1.9.0": +"@opentelemetry/api@npm:^1.0.0, @opentelemetry/api@npm:^1.3.0, @opentelemetry/api@npm:^1.7.0, @opentelemetry/api@npm:^1.8, @opentelemetry/api@npm:^1.9.0": version: 1.9.0 resolution: "@opentelemetry/api@npm:1.9.0" checksum: 10/a607f0eef971893c4f2ee2a4c2069aade6ec3e84e2a1f5c2aac19f65c5d9eeea41aa72db917c1029faafdd71789a1a040bdc18f40d63690e22ccae5d7070f194 @@ -14109,6 +14209,13 @@ __metadata: languageName: node linkType: hard +"@types/caseless@npm:*": + version: 0.12.5 + resolution: "@types/caseless@npm:0.12.5" + checksum: 10/f6a3628add76d27005495914c9c3873a93536957edaa5b69c63b46fe10b4649a6fecf16b676c1695f46aab851da47ec6047dcf3570fa8d9b6883492ff6d074e0 + languageName: node + linkType: hard + "@types/connect-history-api-fallback@npm:^1.5.4": version: 1.5.4 resolution: "@types/connect-history-api-fallback@npm:1.5.4" @@ -14824,6 +14931,18 @@ __metadata: languageName: node linkType: hard +"@types/request@npm:^2.48.8": + version: 2.48.12 + resolution: "@types/request@npm:2.48.12" + dependencies: + "@types/caseless": "npm:*" + "@types/node": "npm:*" + "@types/tough-cookie": "npm:*" + form-data: "npm:^2.5.0" + checksum: 10/a7b3f9f14cacc18fe235bb8e57eff1232a04bd3fa3dad29371f24a5d96db2cd295a0c8b6b34ed7efa3efbbcff845febb02c9635cd68c54811c947ea66ae22090 + languageName: node + linkType: hard + "@types/resolve@npm:^1.20.2": version: 1.20.6 resolution: "@types/resolve@npm:1.20.6" @@ -14970,13 +15089,20 @@ __metadata: languageName: node linkType: hard -"@types/tough-cookie@npm:^4.0.5": +"@types/tough-cookie@npm:*, @types/tough-cookie@npm:^4.0.5": version: 4.0.5 resolution: "@types/tough-cookie@npm:4.0.5" checksum: 10/01fd82efc8202670865928629697b62fe9bf0c0dcbc5b1c115831caeb073a2c0abb871ff393d7df1ae94ea41e256cb87d2a5a91fd03cdb1b0b4384e08d4ee482 languageName: node linkType: hard +"@types/triple-beam@npm:^1.3.2": + version: 1.3.5 + resolution: "@types/triple-beam@npm:1.3.5" + checksum: 10/519b6a1b30d4571965c9706ad5400a200b94e4050feca3e7856e3ea7ac00ec9903e32e9a10e2762d0f7e472d5d03e5f4b29c16c0bd8c1f77c8876c683b2231f1 + languageName: node + linkType: hard + "@types/trusted-types@npm:^2.0.2, @types/trusted-types@npm:^2.0.7": version: 2.0.7 resolution: "@types/trusted-types@npm:2.0.7" @@ -16390,6 +16516,13 @@ __metadata: languageName: node linkType: hard +"arrify@npm:^2.0.0, arrify@npm:^2.0.1": + version: 2.0.1 + resolution: "arrify@npm:2.0.1" + checksum: 10/067c4c1afd182806a82e4c1cb8acee16ab8b5284fbca1ce29408e6e91281c36bb5b612f6ddfbd40a0f7a7e0c75bf2696eb94c027f6e328d6e9c52465c98e4209 + languageName: node + linkType: hard + "arrify@npm:^3.0.0": version: 3.0.0 resolution: "arrify@npm:3.0.0" @@ -18083,6 +18216,15 @@ __metadata: languageName: node linkType: hard +"color-convert@npm:^1.9.3": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10/ffa319025045f2973919d155f25e7c00d08836b6b33ea2d205418c59bd63a665d713c52d9737a9e0fe467fb194b40fbef1d849bae80d674568ee220a31ef3d10 + languageName: node + linkType: hard + "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" @@ -18099,6 +18241,13 @@ __metadata: languageName: node linkType: hard +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10/09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + "color-name@npm:^1.0.0, color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" @@ -18106,7 +18255,7 @@ __metadata: languageName: node linkType: hard -"color-string@npm:^1.9.0": +"color-string@npm:^1.6.0, color-string@npm:^1.9.0": version: 1.9.1 resolution: "color-string@npm:1.9.1" dependencies: @@ -18125,6 +18274,16 @@ __metadata: languageName: node linkType: hard +"color@npm:^3.1.3": + version: 3.2.1 + resolution: "color@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.3" + color-string: "npm:^1.6.0" + checksum: 10/bf70438e0192f4f62f4bfbb303e7231289e8cc0d15ff6b6cbdb722d51f680049f38d4fdfc057a99cb641895cf5e350478c61d98586400b060043afc44285e7ae + languageName: node + linkType: hard + "color@npm:^4.2.3": version: 4.2.3 resolution: "color@npm:4.2.3" @@ -18149,7 +18308,17 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.8": +"colorspace@npm:1.1.x": + version: 1.1.4 + resolution: "colorspace@npm:1.1.4" + dependencies: + color: "npm:^3.1.3" + text-hex: "npm:1.0.x" + checksum: 10/bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" dependencies: @@ -19643,6 +19812,15 @@ __metadata: languageName: node linkType: hard +"dot-prop@npm:^6.0.0": + version: 6.0.1 + resolution: "dot-prop@npm:6.0.1" + dependencies: + is-obj: "npm:^2.0.0" + checksum: 10/1200a4f6f81151161b8526c37966d60738cf12619b0ed1f55be01bdb55790bf0a5cd1398b8f2c296dcc07d0a7c2dd0e650baf0b069c367e74bb5df2f6603aba0 + languageName: node + linkType: hard + "dotenv-expand@npm:^11.0.6": version: 11.0.7 resolution: "dotenv-expand@npm:11.0.7" @@ -19702,6 +19880,18 @@ __metadata: languageName: node linkType: hard +"duplexify@npm:^4.0.0, duplexify@npm:^4.1.1": + version: 4.1.3 + resolution: "duplexify@npm:4.1.3" + dependencies: + end-of-stream: "npm:^1.4.1" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + stream-shift: "npm:^1.0.2" + checksum: 10/b44b98ba0ffac3a658b4b1bf877219e996db288c5ae6f3dc55ca9b2cbef7df60c10eabfdd947f3d73a623eb9975a74a66d6d61e6f26bff90155315adb362aa77 + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -19992,6 +20182,13 @@ __metadata: languageName: node linkType: hard +"enabled@npm:2.0.x": + version: 2.0.0 + resolution: "enabled@npm:2.0.0" + checksum: 10/9d256d89f4e8a46ff988c6a79b22fa814b4ffd82826c4fdacd9b42e9b9465709d3b748866d0ab4d442dfc6002d81de7f7b384146ccd1681f6a7f868d2acca063 + languageName: node + linkType: hard + "encode-utf8@npm:^1.0.3": version: 1.0.3 resolution: "encode-utf8@npm:1.0.3" @@ -20937,6 +21134,15 @@ __metadata: languageName: node linkType: hard +"eventid@npm:^2.0.0": + version: 2.0.1 + resolution: "eventid@npm:2.0.1" + dependencies: + uuid: "npm:^8.0.0" + checksum: 10/951957a9b23653fe4e6f2318e1469b35fcb46eef55ba18a0e40762c7d0ee9a2759efab4359055e36230bc6be22e4dac97a9fbff1c3dd211d2cd9b0210ea3594c + languageName: node + linkType: hard + "events@npm:^3.2.0": version: 3.3.0 resolution: "events@npm:3.3.0" @@ -21325,6 +21531,13 @@ __metadata: languageName: node linkType: hard +"fecha@npm:^4.2.0": + version: 4.2.3 + resolution: "fecha@npm:4.2.3" + checksum: 10/534ce630c8f63c116292145607fc18c0f06bfa2fd74094357bf65daacc5d3f4f2b285bf8eb112c3bbf98c5caa6d386cced797f44b9b1b33da0c0a81020444826 + languageName: node + linkType: hard + "fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": version: 3.2.0 resolution: "fetch-blob@npm:3.2.0" @@ -21577,6 +21790,13 @@ __metadata: languageName: node linkType: hard +"fn.name@npm:1.x.x": + version: 1.1.0 + resolution: "fn.name@npm:1.1.0" + checksum: 10/000198af190ae02f0138ac5fa4310da733224c628e0230c81e3fff7c4e094af7e0e8bb9f4357cabd21db601759d89f3445da744afbae20623cfa41edf3888397 + languageName: node + linkType: hard + "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.15.6": version: 1.15.9 resolution: "follow-redirects@npm:1.15.9" @@ -21604,6 +21824,18 @@ __metadata: languageName: node linkType: hard +"form-data@npm:^2.5.0": + version: 2.5.2 + resolution: "form-data@npm:2.5.2" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.6" + mime-types: "npm:^2.1.12" + safe-buffer: "npm:^5.2.1" + checksum: 10/ef602e52f0bfcc8f8c346b8783f6dbd2fb271596788d42cf929dddaa50bd61e97da21f01464b4524e77872682264765e53c75ac1ab1466ea23f5c96de585faff + languageName: node + linkType: hard + "form-data@npm:^4.0.0": version: 4.0.1 resolution: "form-data@npm:4.0.1" @@ -22390,7 +22622,7 @@ __metadata: languageName: node linkType: hard -"google-auth-library@npm:^9.0.0, google-auth-library@npm:^9.7.0": +"google-auth-library@npm:^9.0.0, google-auth-library@npm:^9.3.0, google-auth-library@npm:^9.7.0": version: 9.15.0 resolution: "google-auth-library@npm:9.15.0" dependencies: @@ -22404,6 +22636,26 @@ __metadata: languageName: node linkType: hard +"google-gax@npm:^4.0.3": + version: 4.4.1 + resolution: "google-gax@npm:4.4.1" + dependencies: + "@grpc/grpc-js": "npm:^1.10.9" + "@grpc/proto-loader": "npm:^0.7.13" + "@types/long": "npm:^4.0.0" + abort-controller: "npm:^3.0.0" + duplexify: "npm:^4.0.0" + google-auth-library: "npm:^9.3.0" + node-fetch: "npm:^2.7.0" + object-hash: "npm:^3.0.0" + proto3-json-serializer: "npm:^2.0.2" + protobufjs: "npm:^7.3.2" + retry-request: "npm:^7.0.0" + uuid: "npm:^9.0.1" + checksum: 10/c569e603b9191a1036b01daf442fbcc786c14c66abf7cc8d7451d396ee7d7ae1f52f7c020b22410b6e82e71807a6000bef582c7fb6e4faf9ff19b93f498cfdf0 + languageName: node + linkType: hard + "googleapis-common@npm:^7.0.0": version: 7.2.0 resolution: "googleapis-common@npm:7.2.0" @@ -22820,6 +23072,13 @@ __metadata: languageName: node linkType: hard +"html-entities@npm:^2.5.2": + version: 2.5.2 + resolution: "html-entities@npm:2.5.2" + checksum: 10/4ec12ebdf2d5ba8192c68e1aef3c1e4a4f36b29246a0a88464fe278a54517d0196d3489af46a3145c7ecacb4fc5fd50497be19eb713b810acab3f0efcf36fdc2 + languageName: node + linkType: hard + "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -24591,6 +24850,13 @@ __metadata: languageName: node linkType: hard +"kuler@npm:^2.0.0": + version: 2.0.0 + resolution: "kuler@npm:2.0.0" + checksum: 10/9e10b5a1659f9ed8761d38df3c35effabffbd19fc6107324095238e4ef0ff044392cae9ac64a1c2dda26e532426485342226b93806bd97504b174b0dcf04ed81 + languageName: node + linkType: hard + "launch-editor@npm:^2.6.1": version: 2.9.1 resolution: "launch-editor@npm:2.9.1" @@ -24978,6 +25244,13 @@ __metadata: languageName: node linkType: hard +"lodash.mapvalues@npm:^4.6.0": + version: 4.6.0 + resolution: "lodash.mapvalues@npm:4.6.0" + checksum: 10/566032abaacbc5dc7e74673e589830d2694ec03dc979ac134c93985b47409ac845cbd4eea3786cc0b4db4e80d726a32c1119af63d0151520e27789568aa76bd2 + languageName: node + linkType: hard + "lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" @@ -25113,6 +25386,20 @@ __metadata: languageName: node linkType: hard +"logform@npm:^2.7.0": + version: 2.7.0 + resolution: "logform@npm:2.7.0" + dependencies: + "@colors/colors": "npm:1.6.0" + "@types/triple-beam": "npm:^1.3.2" + fecha: "npm:^4.2.0" + ms: "npm:^2.1.1" + safe-stable-stringify: "npm:^2.3.1" + triple-beam: "npm:^1.3.0" + checksum: 10/4b861bfd67efe599ab41113ae3ffe92b1873bf86793fb442f58971852430d8f416f9904da69e5043071fb3725690e2499a13acbfe92a57ba7d21690004f9edc0 + languageName: node + linkType: hard + "loglevel@npm:^1.6.8": version: 1.9.2 resolution: "loglevel@npm:1.9.2" @@ -26825,6 +27112,18 @@ __metadata: languageName: node linkType: hard +"nest-winston@npm:^1.9.7": + version: 1.10.0 + resolution: "nest-winston@npm:1.10.0" + dependencies: + fast-safe-stringify: "npm:^2.1.1" + peerDependencies: + "@nestjs/common": ^5.0.0 || ^6.6.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 + winston: ^3.0.0 + checksum: 10/ade9556c0dd8604b2326f92310de33982723c967eb70ddddf8f218b84104bc5299f475697572befe42fa54129bebfdb69b44efeecf8243b4f34f8d4318ba631c + languageName: node + linkType: hard + "nestjs-throttler-storage-redis@npm:^0.5.1": version: 0.5.1 resolution: "nestjs-throttler-storage-redis@npm:0.5.1" @@ -27313,7 +27612,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1, on-finished@npm:^2.4.1": +"on-finished@npm:2.4.1, on-finished@npm:^2.3.0, on-finished@npm:^2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: @@ -27338,6 +27637,15 @@ __metadata: languageName: node linkType: hard +"one-time@npm:^1.0.0": + version: 1.0.0 + resolution: "one-time@npm:1.0.0" + dependencies: + fn.name: "npm:1.x.x" + checksum: 10/64d0160480eeae4e3b2a6fc0a02f452e05bb0cc8373a4ed56a4fc08c3939dcb91bc20075003ed499655bd16919feb63ca56f86eee7932c5251f7d629b55dfc90 + languageName: node + linkType: hard + "onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" @@ -28995,7 +29303,16 @@ __metadata: languageName: node linkType: hard -"protobufjs@npm:^7.2.5, protobufjs@npm:^7.3.0": +"proto3-json-serializer@npm:^2.0.2": + version: 2.0.2 + resolution: "proto3-json-serializer@npm:2.0.2" + dependencies: + protobufjs: "npm:^7.2.5" + checksum: 10/d588337f9a24a94ac14a456261af48ea07e6d0a8a00faebb0b689e79e83925383b9d3ea713184d6336d0bb743dd803f188710e3e8fbfb316586cd1e3f7862a56 + languageName: node + linkType: hard + +"protobufjs@npm:^7.2.5, protobufjs@npm:^7.3.0, protobufjs@npm:^7.3.2": version: 7.4.0 resolution: "protobufjs@npm:7.4.0" dependencies: @@ -29058,6 +29375,17 @@ __metadata: languageName: node linkType: hard +"pumpify@npm:^2.0.1": + version: 2.0.1 + resolution: "pumpify@npm:2.0.1" + dependencies: + duplexify: "npm:^4.1.1" + inherits: "npm:^2.0.3" + pump: "npm:^3.0.0" + checksum: 10/54bfdd04a30f459de5f1d1d022dc729e7257748900adf567a3b009f5aefe4a862ca91f3fb272f86c621eae631c4cc41f0efe5ee270752e2f9a90e7e63a9f8570 + languageName: node + linkType: hard + "punycode.js@npm:^2.3.1": version: 2.3.1 resolution: "punycode.js@npm:2.3.1" @@ -29574,7 +29902,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:3, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": +"readable-stream@npm:3, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -30169,6 +30497,17 @@ __metadata: languageName: node linkType: hard +"retry-request@npm:^7.0.0": + version: 7.0.2 + resolution: "retry-request@npm:7.0.2" + dependencies: + "@types/request": "npm:^2.48.8" + extend: "npm:^3.0.2" + teeny-request: "npm:^9.0.0" + checksum: 10/8f4c927d41dd575fc460aad7b762fb0a33542097201c3c1a31529ad17fa8af3ac0d2a45bf4a2024d079913e9c2dd431566070fe33321c667ac87ebb400de5917 + languageName: node + linkType: hard + "retry@npm:0.13.1, retry@npm:^0.13.1": version: 0.13.1 resolution: "retry@npm:0.13.1" @@ -30459,7 +30798,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 @@ -30473,6 +30812,13 @@ __metadata: languageName: node linkType: hard +"safe-stable-stringify@npm:^2.3.1": + version: 2.5.0 + resolution: "safe-stable-stringify@npm:2.5.0" + checksum: 10/2697fa186c17c38c3ca5309637b4ac6de2f1c3d282da27cd5e1e3c88eca0fb1f9aea568a6aabdf284111592c8782b94ee07176f17126031be72ab1313ed46c5c + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -31491,6 +31837,13 @@ __metadata: languageName: node linkType: hard +"stack-trace@npm:0.0.x": + version: 0.0.10 + resolution: "stack-trace@npm:0.0.10" + checksum: 10/7bd633f0e9ac46e81a0b0fe6538482c1d77031959cf94478228731709db4672fbbed59176f5b9a9fd89fec656b5dae03d084ef2d1b0c4c2f5683e05f2dbb1405 + languageName: node + linkType: hard + "stack-utils@npm:^2.0.6": version: 2.0.6 resolution: "stack-utils@npm:2.0.6" @@ -31621,6 +31974,22 @@ __metadata: languageName: node linkType: hard +"stream-events@npm:^1.0.5": + version: 1.0.5 + resolution: "stream-events@npm:1.0.5" + dependencies: + stubs: "npm:^3.0.0" + checksum: 10/969ce82e34bfbef5734629cc06f9d7f3705a9ceb8fcd6a526332f9159f1f8bbfdb1a453f3ced0b728083454f7706adbbe8428bceb788a0287ca48ba2642dc3fc + languageName: node + linkType: hard + +"stream-shift@npm:^1.0.2": + version: 1.0.3 + resolution: "stream-shift@npm:1.0.3" + checksum: 10/a24c0a3f66a8f9024bd1d579a533a53be283b4475d4e6b4b3211b964031447bdf6532dd1f3c2b0ad66752554391b7c62bd7ca4559193381f766534e723d50242 + languageName: node + linkType: hard + "streamsearch@npm:^1.1.0": version: 1.1.0 resolution: "streamsearch@npm:1.1.0" @@ -31884,6 +32253,13 @@ __metadata: languageName: node linkType: hard +"stubs@npm:^3.0.0": + version: 3.0.0 + resolution: "stubs@npm:3.0.0" + checksum: 10/dec7b82186e3743317616235c59bfb53284acc312cb9f4c3e97e2205c67a5c158b0ca89db5927e52351582e90a2672822eeaec9db396e23e56893d2a8676e024 + languageName: node + linkType: hard + "style-loader@npm:^4.0.0": version: 4.0.0 resolution: "style-loader@npm:4.0.0" @@ -32223,6 +32599,19 @@ __metadata: languageName: node linkType: hard +"teeny-request@npm:^9.0.0": + version: 9.0.0 + resolution: "teeny-request@npm:9.0.0" + dependencies: + http-proxy-agent: "npm:^5.0.0" + https-proxy-agent: "npm:^5.0.0" + node-fetch: "npm:^2.6.9" + stream-events: "npm:^1.0.5" + uuid: "npm:^9.0.0" + checksum: 10/44daabb6c2e239c3daed0218ebdafb50c7141c16d7257a6cfef786dbff56d7853c2c02c97934f7ed57818ce5861ac16c5f52f3a16fa292bd4caf53483d386443 + languageName: node + linkType: hard + "temp-dir@npm:^3.0.0": version: 3.0.0 resolution: "temp-dir@npm:3.0.0" @@ -32315,6 +32704,13 @@ __metadata: languageName: node linkType: hard +"text-hex@npm:1.0.x": + version: 1.0.0 + resolution: "text-hex@npm:1.0.0" + checksum: 10/1138f68adc97bf4381a302a24e2352f04992b7b1316c5003767e9b0d3367ffd0dc73d65001ea02b07cd0ecc2a9d186de0cf02f3c2d880b8a522d4ccb9342244a + languageName: node + linkType: hard + "text-segmentation@npm:^1.0.3": version: 1.0.3 resolution: "text-segmentation@npm:1.0.3" @@ -32634,6 +33030,13 @@ __metadata: languageName: node linkType: hard +"triple-beam@npm:^1.3.0": + version: 1.4.1 + resolution: "triple-beam@npm:1.4.1" + checksum: 10/2e881a3e8e076b6f2b85b9ec9dd4a900d3f5016e6d21183ed98e78f9abcc0149e7d54d79a3f432b23afde46b0885bdcdcbff789f39bc75de796316961ec07f61 + languageName: node + linkType: hard + "trough@npm:^2.0.0": version: 2.2.0 resolution: "trough@npm:2.2.0" @@ -33570,7 +33973,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^8.3.2": +"uuid@npm:^8.0.0, uuid@npm:^8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" bin: @@ -34218,6 +34621,36 @@ __metadata: languageName: node linkType: hard +"winston-transport@npm:^4.3.0, winston-transport@npm:^4.9.0": + version: 4.9.0 + resolution: "winston-transport@npm:4.9.0" + dependencies: + logform: "npm:^2.7.0" + readable-stream: "npm:^3.6.2" + triple-beam: "npm:^1.3.0" + checksum: 10/5946918720baadd7447823929e94cf0935f92c4cff6d9451c6fcb009bd9d20a3b3df9ad606109e79d1e9f4d2ff678477bf09f81cfefce2025baaf27a617129bb + languageName: node + linkType: hard + +"winston@npm:^3.17.0": + version: 3.17.0 + resolution: "winston@npm:3.17.0" + dependencies: + "@colors/colors": "npm:^1.6.0" + "@dabh/diagnostics": "npm:^2.0.2" + async: "npm:^3.2.3" + is-stream: "npm:^2.0.0" + logform: "npm:^2.7.0" + one-time: "npm:^1.0.0" + readable-stream: "npm:^3.4.0" + safe-stable-stringify: "npm:^2.3.1" + stack-trace: "npm:0.0.x" + triple-beam: "npm:^1.3.0" + winston-transport: "npm:^4.9.0" + checksum: 10/220309a0ead36c1171158ab28cb9133f8597fba19c8c1c190df9329555530565b58f3af0037c1b80e0c49f7f9b6b3b01791d0c56536eb0be38678d36e316c2a3 + languageName: node + linkType: hard + "word-wrap@npm:^1.2.3, word-wrap@npm:^1.2.5": version: 1.2.5 resolution: "word-wrap@npm:1.2.5"