diff --git a/apps/api/package.json b/apps/api/package.json index e250d1c1..4819f1b3 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -11,9 +11,9 @@ "typecheck": "tsc --noEmit" }, "dependencies": { + "@baselime/pino-transport": "^0.1.5", "@fastify/cors": "^9.0.0", "@fastify/websocket": "^8.3.1", - "@logtail/pino": "^0.4.19", "@openpanel/common": "workspace:*", "@openpanel/db": "workspace:*", "@openpanel/queue": "workspace:*", diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index c362b693..88f591dc 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -23,9 +23,7 @@ const port = parseInt(process.env.API_PORT || '3000', 10); const startServer = async () => { logInfo('Starting server'); try { - const fastify = Fastify({ - logger: logger, - }); + const fastify = Fastify(); fastify.register(cors, { origin: '*', @@ -38,7 +36,7 @@ const startServer = async () => { fastify.register(miscRouter, { prefix: '/misc' }); fastify.register(exportRouter, { prefix: '/export' }); fastify.setErrorHandler((error) => { - fastify.log.error(error); + logger.error(error, 'Error in request'); }); fastify.get('/', (_request, reply) => { reply.send({ name: 'openpanel sdk api' }); @@ -70,7 +68,7 @@ const startServer = async () => { // Notify when keys expires redisPub.config('SET', 'notify-keyspace-events', 'Ex'); } catch (e) { - console.error(e); + logger.error(e, 'Failed to start server'); } }; diff --git a/apps/api/src/routes/event.router.ts b/apps/api/src/routes/event.router.ts index 54343f65..b9544a85 100644 --- a/apps/api/src/routes/event.router.ts +++ b/apps/api/src/routes/event.router.ts @@ -1,6 +1,7 @@ import { isBot } from '@/bots'; import * as controller from '@/controllers/event.controller'; import { validateSdkRequest } from '@/utils/auth'; +import { logger } from '@/utils/logger'; import type { FastifyPluginCallback, FastifyRequest } from 'fastify'; import { createBotEvent } from '@openpanel/db'; @@ -17,7 +18,7 @@ const eventRouter: FastifyPluginCallback = (fastify, opts, done) => { ) => { try { const projectId = await validateSdkRequest(req.headers).catch( - req.log.error + logger.error ); if (!projectId) { return reply.status(401).send(); @@ -31,7 +32,7 @@ const eventRouter: FastifyPluginCallback = (fastify, opts, done) => { if (bot) { const path = (req.body?.properties?.__path || req.body?.properties?.path) as string | undefined; - req.log.warn({ ...req.headers, bot }, 'Bot detected (event)'); + logger.warn({ ...req.headers, bot }, 'Bot detected (event)'); await createBotEvent({ ...bot, projectId, @@ -41,7 +42,7 @@ const eventRouter: FastifyPluginCallback = (fastify, opts, done) => { reply.status(202).send('OK'); } } catch (e) { - req.log.error(e, 'Failed to create bot event'); + logger.error(e, 'Failed to create bot event'); reply.status(401).send(); return; } diff --git a/apps/api/src/routes/profile.router.ts b/apps/api/src/routes/profile.router.ts index 2ad932f1..8536352d 100644 --- a/apps/api/src/routes/profile.router.ts +++ b/apps/api/src/routes/profile.router.ts @@ -1,13 +1,14 @@ import { isBot } from '@/bots'; import * as controller from '@/controllers/profile.controller'; import { validateSdkRequest } from '@/utils/auth'; +import { logger } from '@/utils/logger'; import type { FastifyPluginCallback } from 'fastify'; const eventRouter: FastifyPluginCallback = (fastify, opts, done) => { fastify.addHook('preHandler', async (req, reply) => { try { const projectId = await validateSdkRequest(req.headers).catch( - req.log.error + logger.error ); if (!projectId) { return reply.status(401).send(); diff --git a/apps/api/src/utils/logger.ts b/apps/api/src/utils/logger.ts index eb3bf857..a8db73d0 100644 --- a/apps/api/src/utils/logger.ts +++ b/apps/api/src/utils/logger.ts @@ -5,8 +5,8 @@ const targets: TransportTargetOptions[] = process.env.NODE_ENV === 'production' ? [ { - target: '@logtail/pino', - options: { sourceToken: process.env.BETTERSTACK_TOKEN }, + target: '@baselime/pino-transport', + options: { baselimeApiKey: process.env.BASELIME_API_KEY }, }, ] : [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9966736a..238c6717 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,15 +26,15 @@ importers: apps/api: dependencies: + '@baselime/pino-transport': + specifier: ^0.1.5 + version: 0.1.5 '@fastify/cors': specifier: ^9.0.0 version: 9.0.1 '@fastify/websocket': specifier: ^8.3.1 version: 8.3.1 - '@logtail/pino': - specifier: ^0.4.19 - version: 0.4.19(pino@8.19.0) '@openpanel/common': specifier: workspace:* version: link:../../packages/common @@ -2806,6 +2806,15 @@ packages: - supports-color dev: false + /@baselime/pino-transport@0.1.5: + resolution: {integrity: sha512-ZWvI6Z0+54bGZ+95EDCcjIciKvDf+j/CrPzQufueSk09tHW94/gikOirPCwjO0uNxqa5u/ZL02YURXhGZZxi6A==} + dependencies: + axios: 1.6.8 + pino-abstract-transport: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /@braintree/sanitize-url@6.0.4: resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} dev: false @@ -4184,54 +4193,6 @@ packages: resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} dev: false - /@logtail/core@0.4.19: - resolution: {integrity: sha512-IjvMwSyv2LucVoS+2PXzAVG5cTd/50W3dENpC+ePMlAfbKAR5h4eTIOT9GC7zcEBtog6RBJChHApyj4rOvgbYA==} - dependencies: - '@logtail/tools': 0.4.19 - '@logtail/types': 0.4.19 - serialize-error: 8.1.0 - dev: false - - /@logtail/node@0.4.19: - resolution: {integrity: sha512-Z8tIf4DBqnxBWw18XBXNfuA/FtarM3CRda58glySaoQex0yg/296gndsljIXfviy5AUOvOwGXkfde3i8YA23vA==} - dependencies: - '@logtail/core': 0.4.19 - '@logtail/types': 0.4.19 - '@msgpack/msgpack': 2.8.0 - '@types/stack-trace': 0.0.29 - cross-fetch: 3.1.8 - minimatch: 3.1.2 - serialize-error: 8.1.0 - stack-trace: 0.0.10 - transitivePeerDependencies: - - encoding - dev: false - - /@logtail/pino@0.4.19(pino@8.19.0): - resolution: {integrity: sha512-7cCVTOEe3xHJ+Ln266AJDeYZpDEWgQWQelLJNXQr1msRe/IH+qfzUB19N/kFt4FdmheQhFsI2Jste47ZKS+0fQ==} - peerDependencies: - pino: ^7.0.0 || ^8.0.0 - dependencies: - '@logtail/node': 0.4.19 - '@logtail/types': 0.4.19 - pino: 8.19.0 - pino-abstract-transport: 1.1.0 - transitivePeerDependencies: - - encoding - dev: false - - /@logtail/tools@0.4.19: - resolution: {integrity: sha512-6wtf5iJgKMpF2sn8mHOEA2GzluXlBjt6aK0YXzv6IuRhKL4dzk52jjkFWXwgVfA4xf53nhHRGA/SrGOPm6K9bQ==} - dependencies: - '@logtail/types': 0.4.19 - dev: false - - /@logtail/types@0.4.19: - resolution: {integrity: sha512-VlrysIpc2H8faZkR0u07pUnuqAArLRgfCVbSD0dtvXgLbkCAGgCCqveAZk99uv6XVxXH/GhH3OUoUoFaGUSTwg==} - dependencies: - js: 0.1.0 - dev: false - /@mapbox/node-pre-gyp@1.0.11: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true @@ -4284,11 +4245,6 @@ packages: react: 18.2.0 dev: false - /@msgpack/msgpack@2.8.0: - resolution: {integrity: sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==} - engines: {node: '>= 10'} - dev: false - /@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2: resolution: {integrity: sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==} cpu: [arm64] @@ -7506,10 +7462,6 @@ packages: resolution: {integrity: sha512-lVRe4Iz9UNgiHelKVo8QlC8fb5nfY8+p+jNQNE+UVsuuVlQnWhyWmQ/wF5pE8Ys6TdjfVpqTG9O9i2vi6E0+Sg==} dev: true - /@types/stack-trace@0.0.29: - resolution: {integrity: sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==} - dev: false - /@types/stack-utils@2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: false @@ -8880,13 +8832,6 @@ packages: resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} dev: false - /commander@1.1.1: - resolution: {integrity: sha512-71Rod2AhcH3JhkBikVpNd0pA+fWsmAaVoti6OR38T76chA7vE3pSerS0Jor4wDw+tOueD2zLVvFOw5H0Rcj7rA==} - engines: {node: '>= 0.6.x'} - dependencies: - keypress: 0.1.0 - dev: false - /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: false @@ -12306,13 +12251,6 @@ packages: dependencies: argparse: 2.0.1 - /js@0.1.0: - resolution: {integrity: sha512-ZBbGYOpact8QAH9RprFWL4RAESYwbDodxiuDjOnzwzzk9pBzKycoifGuUrHHcDixE/eLMKPHRaXenTgu1qXBqA==} - hasBin: true - dependencies: - commander: 1.1.1 - dev: false - /jsc-android@250231.0.0: resolution: {integrity: sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==} dev: false @@ -12445,10 +12383,6 @@ packages: commander: 8.3.0 dev: false - /keypress@0.1.0: - resolution: {integrity: sha512-x0yf9PL/nx9Nw9oLL8ZVErFAk85/lslwEP7Vz7s5SI1ODXZIgit3C5qyWjw4DxOuO/3Hb4866SQh28a1V1d+WA==} - dev: false - /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: @@ -14891,6 +14825,22 @@ packages: camelcase-css: 2.0.1 postcss: 8.4.35 + /postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.1.0 + yaml: 2.3.4 + dev: true + /postcss-load-config@4.0.2(postcss@8.4.35): resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} @@ -16283,13 +16233,6 @@ packages: engines: {node: '>=0.10.0'} dev: false - /serialize-error@8.1.0: - resolution: {integrity: sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==} - engines: {node: '>=10'} - dependencies: - type-fest: 0.20.2 - dev: false - /serve-static@1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} @@ -16592,10 +16535,6 @@ packages: minipass: 3.3.6 dev: false - /stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - dev: false - /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -17174,6 +17113,7 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + requiresBuild: true dev: false /tsup@7.3.0(typescript@5.3.3): @@ -17201,7 +17141,7 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.4.35) + postcss-load-config: 4.0.2 resolve-from: 5.0.0 rollup: 4.12.0 source-map: 0.8.0-beta.0