Refactor webhook handler service and update dependencies

Refactor to make database webhook handler service a function. This change introduces the function `getDatabaseWebhookHandlerService()` to return an instance of the service, allowing easier management of instances. Dependencies are updated as well, including bringing `react-i18next` to version 14.1.1(i18next@23.11.3) and `@react-email/components` to version 0.0.17 and others.
This commit is contained in:
giancarlo
2024-04-30 02:36:48 +07:00
parent faaa26c4e8
commit 14dee4f347
6 changed files with 199 additions and 248 deletions

View File

@@ -1,22 +1,18 @@
import { DatabaseWebhookHandlerService } from '@kit/database-webhooks';
const service = new DatabaseWebhookHandlerService();
const response = (status: number) => new Response(null, { status });
import { getDatabaseWebhookHandlerService } from '@kit/database-webhooks';
/**
* @name POST
* @description POST handler for the webhook route that handles the webhook event
* @param request
* @constructor
*/
export async function POST(request: Request) {
const service = getDatabaseWebhookHandlerService();
try {
// handle the webhook event
await service.handleWebhook(request);
return response(200);
return new Response(null, { status: 200 });
} catch {
return response(500);
return new Response(null, { status: 500 });
}
}

View File

@@ -7,23 +7,31 @@ import { RecordChange, Tables } from '../record-change.type';
import { DatabaseWebhookRouterService } from './database-webhook-router.service';
import { getDatabaseWebhookVerifier } from './verifier';
export class DatabaseWebhookHandlerService {
export function getDatabaseWebhookHandlerService() {
return new DatabaseWebhookHandlerService();
}
class DatabaseWebhookHandlerService {
private readonly namespace = 'database-webhook-handler';
/**
* @name handleWebhook
* @description Handle the webhook event
* @param request
*/
async handleWebhook(request: Request) {
const logger = await getLogger();
const json = await request.clone().json();
const { table, type } = json as RecordChange<keyof Tables>;
logger.info(
{
const ctx = {
name: this.namespace,
table,
type,
},
'Received webhook from DB. Processing...',
);
};
logger.info(ctx, 'Received webhook from DB. Processing...');
// check if the signature is valid
const verifier = await getDatabaseWebhookVerifier();
@@ -45,20 +53,11 @@ export class DatabaseWebhookHandlerService {
// handle the webhook event based on the table
await service.handleWebhook(json);
logger.info(
{
name: this.namespace,
table,
type,
},
'Webhook processed successfully',
);
logger.info(ctx, 'Webhook processed successfully');
} catch (error) {
logger.error(
{
name: this.namespace,
table,
type,
...ctx,
error,
},
'Failed to process webhook',

View File

@@ -13,7 +13,7 @@
".": "./src/index.ts"
},
"dependencies": {
"@react-email/components": "0.0.16"
"@react-email/components": "0.0.17"
},
"devDependencies": {
"@kit/eslint-config": "workspace:*",

View File

@@ -25,7 +25,7 @@
"react-i18next": "^14.1.1"
},
"dependencies": {
"i18next": "^23.11.2",
"i18next": "^23.11.3",
"i18next-browser-languagedetector": "7.2.1",
"i18next-resources-to-backend": "^1.2.1"
},

386
pnpm-lock.yaml generated
View File

@@ -167,7 +167,7 @@ importers:
version: 7.51.3(react@18.3.1)
react-i18next:
specifier: ^14.1.1
version: 14.1.1(i18next@23.11.2)(react-dom@18.3.1)(react@18.3.1)
version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1)
recharts:
specifier: ^2.12.6
version: 2.12.6(react-dom@18.3.1)(react@18.3.1)
@@ -312,7 +312,7 @@ importers:
version: 7.51.3(react@18.3.1)
react-i18next:
specifier: ^14.1.1
version: 14.1.1(i18next@23.11.2)(react-dom@18.3.1)(react@18.3.1)
version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1)
zod:
specifier: ^3.23.4
version: 3.23.4
@@ -524,8 +524,8 @@ importers:
packages/email-templates:
dependencies:
'@react-email/components':
specifier: 0.0.16
version: 0.0.16(react@18.2.0)
specifier: 0.0.17
version: 0.0.17(react@18.3.1)
devDependencies:
'@kit/eslint-config':
specifier: workspace:*
@@ -620,7 +620,7 @@ importers:
version: 7.51.3(react@18.3.1)
react-i18next:
specifier: ^14.1.1
version: 14.1.1(i18next@23.11.2)(react-dom@18.3.1)(react@18.3.1)
version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1)
sonner:
specifier: ^1.4.41
version: 1.4.41(react-dom@18.3.1)(react@18.3.1)
@@ -743,7 +743,7 @@ importers:
version: 7.51.3(react@18.3.1)
react-i18next:
specifier: ^14.1.1
version: 14.1.1(i18next@23.11.2)(react-dom@18.3.1)(react@18.3.1)
version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1)
sonner:
specifier: ^1.4.41
version: 1.4.41(react-dom@18.3.1)(react@18.3.1)
@@ -772,7 +772,7 @@ importers:
specifier: workspace:*
version: link:../../ui
'@supabase/supabase-js':
specifier: 2.42.7
specifier: ^2.42.7
version: 2.42.7
'@types/react':
specifier: ^18.3.1
@@ -784,11 +784,11 @@ importers:
specifier: 18.3.1
version: 18.3.1
react-dom:
specifier: ^18.3.1
specifier: 18.3.1
version: 18.3.1(react@18.3.1)
react-i18next:
specifier: ^14.1.1
version: 14.1.1(i18next@23.11.2)(react-dom@18.3.1)(react@18.3.1)
version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1)
packages/features/team-accounts:
dependencies:
@@ -876,7 +876,7 @@ importers:
version: 7.51.3(react@18.3.1)
react-i18next:
specifier: ^14.1.1
version: 14.1.1(i18next@23.11.2)(react-dom@18.3.1)(react@18.3.1)
version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1)
sonner:
specifier: ^1.4.41
version: 1.4.41(react-dom@18.3.1)(react@18.3.1)
@@ -887,8 +887,8 @@ importers:
packages/i18n:
dependencies:
i18next:
specifier: ^23.11.2
version: 23.11.2
specifier: ^23.11.3
version: 23.11.3
i18next-browser-languagedetector:
specifier: 7.2.1
version: 7.2.1
@@ -916,7 +916,7 @@ importers:
version: 5.32.0(react@18.3.1)
react-i18next:
specifier: ^14.1.1
version: 14.1.1(i18next@23.11.2)(react-dom@18.3.1)(react@18.3.1)
version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1)
packages/mailers:
dependencies:
@@ -1290,7 +1290,7 @@ importers:
version: 7.51.3(react@18.3.1)
react-i18next:
specifier: ^14.1.1
version: 14.1.1(i18next@23.11.2)(react-dom@18.3.1)(react@18.3.1)
version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1)
sonner:
specifier: ^1.4.41
version: 1.4.41(react-dom@18.3.1)(react@18.3.1)
@@ -1322,11 +1322,11 @@ importers:
specifier: ^8.56.10
version: 8.56.10
'@typescript-eslint/eslint-plugin':
specifier: ^7.7.1
version: 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.4.5)
specifier: ^7.8.0
version: 7.8.0(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser':
specifier: ^7.7.1
version: 7.7.1(eslint@8.57.0)(typescript@5.4.5)
specifier: ^7.8.0
version: 7.8.0(eslint@8.57.0)(typescript@5.4.5)
eslint-config-prettier:
specifier: ^9.1.0
version: 9.1.0(eslint@8.57.0)
@@ -1335,7 +1335,7 @@ importers:
version: 1.13.3(eslint@8.57.0)
eslint-plugin-import:
specifier: ^2.29.1
version: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)
version: 2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)
eslint-plugin-react:
specifier: ^7.34.1
version: 7.34.1(eslint@8.57.0)
@@ -3363,19 +3363,6 @@ packages:
react: 18.3.1
dev: false
/@radix-ui/react-compose-refs@1.0.1(react@18.2.0):
resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0
peerDependenciesMeta:
'@types/react':
optional: true
dependencies:
'@babel/runtime': 7.24.4
react: 18.2.0
dev: false
/@radix-ui/react-context@1.0.1(@types/react@18.3.1)(react@18.3.1):
resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==}
peerDependencies:
@@ -3936,20 +3923,6 @@ packages:
react: 18.3.1
dev: false
/@radix-ui/react-slot@1.0.2(react@18.2.0):
resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==}
peerDependencies:
'@types/react': '*'
react: ^16.8 || ^17.0 || ^18.0
peerDependenciesMeta:
'@types/react':
optional: true
dependencies:
'@babel/runtime': 7.24.4
'@radix-ui/react-compose-refs': 1.0.1(react@18.2.0)
react: 18.2.0
dev: false
/@radix-ui/react-tabs@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.1)(react-dom@18.3.1)(react@18.3.1):
resolution: {integrity: sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==}
peerDependencies:
@@ -4868,219 +4841,219 @@ packages:
react: 18.3.1
dev: false
/@react-email/body@0.0.7(react@18.2.0):
resolution: {integrity: sha512-vjJ5P1MUNWV0KNivaEWA6MGj/I3c764qQJMsKjCHlW6mkFJ4SXbm2OlQFtKAb++Bj8LDqBlnE6oW77bWcMc0NA==}
/@react-email/body@0.0.8(react@18.3.1):
resolution: {integrity: sha512-gqdkNYlIaIw0OdpWu8KjIcQSIFvx7t2bZpXVxMMvBS859Ia1+1X3b5RNbjI3S1ZqLddUf7owOHkO4MiXGE+nxg==}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/button@0.0.14(react@18.2.0):
resolution: {integrity: sha512-SMk40moGcAvkHIALX4XercQlK0PNeeEIam6OXHw68ea9WtzzqVwiK4pzLY0iiMI9B4xWHcaS2lCPf3cKbQBf1Q==}
/@react-email/button@0.0.15(react@18.3.1):
resolution: {integrity: sha512-9Zi6SO3E8PoHYDfcJTecImiHLyitYWmIRs0HE3Ogra60ZzlWP2EXu+AZqwQnhXuq+9pbgwBWNWxB5YPetNPTNA==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/code-block@0.0.3(react@18.2.0):
resolution: {integrity: sha512-nxhl7WjjM2cOYtl0boBZfSObTrUCz2LbarcMyHkTVAsA9rbjbtWAQF7jmlefXJusk3Uol5l2c8hTh2lHLlHTRQ==}
/@react-email/code-block@0.0.4(react@18.3.1):
resolution: {integrity: sha512-xjVLi/9dFNJ70N7hYme+21eQWa3b9/kgp4V+FKQJkQCuIMobxPRCIGM5jKD/0Vo2OqrE5chYv/dkg/aP8a8sPg==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
prismjs: 1.29.0
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/code-inline@0.0.1(react@18.2.0):
resolution: {integrity: sha512-SeZKTB9Q4+TUafzeUm/8tGK3dFgywUHb1od/BrAiJCo/im65aT+oJfggJLjK2jCdSsus8odcK2kReeM3/FCNTQ==}
/@react-email/code-inline@0.0.2(react@18.3.1):
resolution: {integrity: sha512-0cmgbbibFeOJl0q04K9jJlPDuJ+SEiX/OG6m3Ko7UOkG3TqjRD8Dtvkij6jNDVfUh/zESpqJCP2CxrCLLMUjdA==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/column@0.0.9(react@18.2.0):
resolution: {integrity: sha512-1ekqNBgmbS6m97/sUFOnVvQtLYljUWamw8Y44VId95v6SjiJ4ca+hMcdOteHWBH67xkRofEOWTvqDRea5SBV8w==}
/@react-email/column@0.0.10(react@18.3.1):
resolution: {integrity: sha512-MnP8Mnwipr0X3XtdD6jMLckb0sI5/IlS6Kl/2F6/rsSWBJy5Gg6nizlekTdkwDmy0kNSe3/1nGU0Zqo98pl63Q==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/components@0.0.16(react@18.2.0):
resolution: {integrity: sha512-1WATpMSH03cRvhfNjGl/Up3seZJOzN9KLzlk3Q9g/cqNhZEJ7HYxoZM4AQKAI0V3ttXzzxKv8Oj+AZQLHDiICA==}
/@react-email/components@0.0.17(react@18.3.1):
resolution: {integrity: sha512-x5gGQaK0QchbwHvUrCBVnE8GCWdO5osTVuTSA54Fwzels6ZDeNTHEYRx9gI3Nwcf/dkoVYkVH4rzWST0SF0MLA==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
'@react-email/body': 0.0.7(react@18.2.0)
'@react-email/button': 0.0.14(react@18.2.0)
'@react-email/code-block': 0.0.3(react@18.2.0)
'@react-email/code-inline': 0.0.1(react@18.2.0)
'@react-email/column': 0.0.9(react@18.2.0)
'@react-email/container': 0.0.11(react@18.2.0)
'@react-email/font': 0.0.5(react@18.2.0)
'@react-email/head': 0.0.7(react@18.2.0)
'@react-email/heading': 0.0.11(react@18.2.0)
'@react-email/hr': 0.0.7(react@18.2.0)
'@react-email/html': 0.0.7(react@18.2.0)
'@react-email/img': 0.0.7(react@18.2.0)
'@react-email/link': 0.0.7(react@18.2.0)
'@react-email/markdown': 0.0.9(react@18.2.0)
'@react-email/preview': 0.0.8(react@18.2.0)
'@react-email/render': 0.0.12
'@react-email/row': 0.0.7(react@18.2.0)
'@react-email/section': 0.0.11(react@18.2.0)
'@react-email/tailwind': 0.0.15(react@18.2.0)
'@react-email/text': 0.0.7(react@18.2.0)
react: 18.2.0
'@react-email/body': 0.0.8(react@18.3.1)
'@react-email/button': 0.0.15(react@18.3.1)
'@react-email/code-block': 0.0.4(react@18.3.1)
'@react-email/code-inline': 0.0.2(react@18.3.1)
'@react-email/column': 0.0.10(react@18.3.1)
'@react-email/container': 0.0.12(react@18.3.1)
'@react-email/font': 0.0.6(react@18.3.1)
'@react-email/head': 0.0.8(react@18.3.1)
'@react-email/heading': 0.0.12(react@18.3.1)
'@react-email/hr': 0.0.8(react@18.3.1)
'@react-email/html': 0.0.8(react@18.3.1)
'@react-email/img': 0.0.8(react@18.3.1)
'@react-email/link': 0.0.8(react@18.3.1)
'@react-email/markdown': 0.0.10(react@18.3.1)
'@react-email/preview': 0.0.9(react@18.3.1)
'@react-email/render': 0.0.13
'@react-email/row': 0.0.8(react@18.3.1)
'@react-email/section': 0.0.12(react@18.3.1)
'@react-email/tailwind': 0.0.16(react@18.3.1)
'@react-email/text': 0.0.8(react@18.3.1)
react: 18.3.1
transitivePeerDependencies:
- '@types/react'
dev: false
/@react-email/container@0.0.11(react@18.2.0):
resolution: {integrity: sha512-jzl/EHs0ClXIRFamfH+NR/cqv4GsJJscqRhdYtnWYuRAsWpKBM1muycrrPqIVhWvWi6sFHInWTt07jX+bDc3SQ==}
/@react-email/container@0.0.12(react@18.3.1):
resolution: {integrity: sha512-HFu8Pu5COPFfeZxSL+wKv/TV5uO/sp4zQ0XkRCdnGkj/xoq0lqOHVDL4yC2Pu6fxXF/9C3PHDA++5uEYV5WVJw==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/font@0.0.5(react@18.2.0):
resolution: {integrity: sha512-if/qKYmH3rJ2egQJoKbV8SfKCPavu+ikUq/naT/UkCr8Q0lkk309tRA0x7fXG/WeIrmcipjMzFRGTm2TxTecDw==}
/@react-email/font@0.0.6(react@18.3.1):
resolution: {integrity: sha512-sZZFvEZ4U3vNCAZ8wXqIO3DuGJR2qE/8m2fEH+tdqwa532zGO3zW+UlCTg0b9455wkJSzEBeaWik0IkNvjXzxw==}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/head@0.0.7(react@18.2.0):
resolution: {integrity: sha512-IcXL4jc0H1qzAXJCD9ajcRFBQdbUHkjKJyiUeogpaYSVZSq6cVDWQuGaI23TA9k+pI2TFeQimogUFb3Kgeeudw==}
/@react-email/head@0.0.8(react@18.3.1):
resolution: {integrity: sha512-8/NI0gtQmLIilAe6rebK1TWw3IXHxtrR02rInkQq8yQ7zKbYbzx7Q/FhmsJgAk+uYh2Er/KhgYJ0sHZyDhfMTQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/heading@0.0.11(react@18.2.0):
resolution: {integrity: sha512-EF5ZtRCxhHPw3m+8iibKKg0RAvAeHj1AP68sjU7s6+J+kvRgllr/E972Wi5Y8UvcIGossCvpX1WrSMDzeB4puA==}
/@react-email/heading@0.0.12(react@18.3.1):
resolution: {integrity: sha512-eB7mpnAvDmwvQLoPuwEiPRH4fPXWe6ltz6Ptbry2BlI88F0a2k11Ghb4+sZHBqg7vVw/MKbqEgtLqr3QJ/KfCQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
'@radix-ui/react-slot': 1.0.2(react@18.2.0)
react: 18.2.0
'@radix-ui/react-slot': 1.0.2(@types/react@18.3.1)(react@18.3.1)
react: 18.3.1
transitivePeerDependencies:
- '@types/react'
dev: false
/@react-email/hr@0.0.7(react@18.2.0):
resolution: {integrity: sha512-8suK0M/deXHt0DBSeKhSC4bnCBCBm37xk6KJh9M0/FIKlvdltQBem52YUiuqVl1XLB87Y6v6tvspn3SZ9fuxEA==}
/@react-email/hr@0.0.8(react@18.3.1):
resolution: {integrity: sha512-JLVvpCg2wYKEB+n/PGCggWG9fRU5e4lxsGdpK5SDLsCL0ic3OLKSpHMfeE+ZSuw0GixAVVQN7F64PVJHQkd4MQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/html@0.0.7(react@18.2.0):
resolution: {integrity: sha512-oy7OoRtoOKApVI/5Lz1OZptMKmMYJu9Xn6+lOmdBQchAuSdQtWJqxhrSj/iI/mm8HZWo6MZEQ6SFpfOuf8/P6Q==}
/@react-email/html@0.0.8(react@18.3.1):
resolution: {integrity: sha512-arII3wBNLpeJtwyIJXPaILm5BPKhA+nvdC1F9QkuKcOBJv2zXctn8XzPqyGqDfdplV692ulNJP7XY55YqbKp6w==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/img@0.0.7(react@18.2.0):
resolution: {integrity: sha512-up9tM2/dJ24u/CFjcvioKbyGuPw1yeJg605QA7VkrygEhd0CoQEjjgumfugpJ+VJgIt4ZjT9xMVCK5QWTIWoaA==}
/@react-email/img@0.0.8(react@18.3.1):
resolution: {integrity: sha512-jx/rPuKo31tV18fu7P5rRqelaH5wkhg83Dq7uLwJpfqhbi4KFBGeBfD0Y3PiLPPoh+WvYf+Adv9W2ghNW8nOMQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/link@0.0.7(react@18.2.0):
resolution: {integrity: sha512-hXPChT3ZMyKnUSA60BLEMD2maEgyB2A37yg5bASbLMrXmsExHi6/IS1h2XiUPLDK4KqH5KFaFxi2cdNo1JOKwA==}
/@react-email/link@0.0.8(react@18.3.1):
resolution: {integrity: sha512-nVikuTi8WJHa6Baad4VuRUbUCa/7EtZ1Qy73TRejaCHn+vhetc39XGqHzKLNh+Z/JFL8Hv9g+4AgG16o2R0ogQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/markdown@0.0.9(react@18.2.0):
resolution: {integrity: sha512-t//19Zz+W5svKqrSrqoOLpf6dq70jbwYxX8Z+NEMi4LqylklccOaYAyKrkYyulfZwhW7KDH9d2wjVk5jfUABxQ==}
/@react-email/markdown@0.0.10(react@18.3.1):
resolution: {integrity: sha512-MH0xO+NJ4IuJcx9nyxbgGKAMXyudFjCZ0A2GQvuWajemW9qy2hgnJ3mW3/z5lwcenG+JPn7JyO/iZpizQ7u1tA==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
md-to-react-email: 5.0.2(react@18.2.0)
react: 18.2.0
md-to-react-email: 5.0.2(react@18.3.1)
react: 18.3.1
dev: false
/@react-email/preview@0.0.8(react@18.2.0):
resolution: {integrity: sha512-Jm0KUYBZQd2w0s2QRMQy0zfHdo3Ns+9bYSE1OybjknlvhANirjuZw9E5KfWgdzO7PyrRtB1OBOQD8//Obc4uIQ==}
/@react-email/preview@0.0.9(react@18.3.1):
resolution: {integrity: sha512-2fyAA/zzZYfYmxfyn3p2YOIU30klyA6Dq4ytyWq4nfzQWWglt5hNDE0cMhObvRtfjM9ghMSVtoELAb0MWiF/kw==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/render@0.0.12:
resolution: {integrity: sha512-S8WRv/PqECEi6x0QJBj0asnAb5GFtJaHlnByxLETLkgJjc76cxMYDH4r9wdbuJ4sjkcbpwP3LPnVzwS+aIjT7g==}
/@react-email/render@0.0.13:
resolution: {integrity: sha512-lmBizrV+rQeSa3GjiL8/kPU0gENqO/wv+4xrlWANabp9UY3lTLXzy7HMRSE8YFBES9AbxP5VX1iRKuEnsoBDew==}
engines: {node: '>=18.0.0'}
dependencies:
html-to-text: 9.0.5
js-beautify: 1.15.1
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
dev: false
/@react-email/row@0.0.7(react@18.2.0):
resolution: {integrity: sha512-h7pwrLVGk5CIx7Ai/oPxBgCCAGY7BEpCUQ7FCzi4+eThcs5IdjSwDPefLEkwaFS8KZc56UNwTAH92kNq5B7blg==}
/@react-email/row@0.0.8(react@18.3.1):
resolution: {integrity: sha512-JsB6pxs/ZyjYpEML3nbwJRGAerjcN/Pa/QG48XUwnT/MioDWrUuyQuefw+CwCrSUZ2P1IDrv2tUD3/E3xzcoKw==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/section@0.0.11(react@18.2.0):
resolution: {integrity: sha512-3bZ/DuvX1julATI7oqYza6pOtWZgLJDBaa62LFFEvYjisyN+k6lrP2KOucPsDKu2DOkUzlQgK0FOm6VQJX+C0w==}
/@react-email/section@0.0.12(react@18.3.1):
resolution: {integrity: sha512-UCD/N/BeOTN4h3VZBUaFdiSem6HnpuxD1Q51TdBFnqeNqS5hBomp8LWJJ9s4gzwHWk1XPdNfLA3I/fJwulJshg==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/tailwind@0.0.15(react@18.2.0):
resolution: {integrity: sha512-TE3NQ7VKhhvv3Zv0Z1NtoV6AF7aOWiG4juVezMZw1hZCG0mkN6iXC63u23vPQi12y6xCp20ZUHfg67kQeDSP/g==}
/@react-email/tailwind@0.0.16(react@18.3.1):
resolution: {integrity: sha512-uMifPxCEHaHLhpS1kVCMGyTeEL+aMYzHT4bgj8CkgCiBoF9wNNfIVMUlHGzHUTv4ZTEPaMfZgC/Hi8RqzL/Ogw==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-email/text@0.0.7(react@18.2.0):
resolution: {integrity: sha512-eHCx0mdllGcgK9X7wiLKjNZCBRfxRVNjD3NNYRmOc3Icbl8M9JHriJIfxBuGCmGg2UAORK5P3KmaLQ8b99/pbA==}
/@react-email/text@0.0.8(react@18.3.1):
resolution: {integrity: sha512-uvN2TNWMrfC9wv/LLmMLbbEN1GrMWZb9dBK14eYxHHAEHCeyvGb5ePZZ2MPyzO7Y5yTC+vFEnCEr76V+hWMxCQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: 18.2.0
react: ^18.2.0
dependencies:
react: 18.2.0
react: 18.3.1
dev: false
/@react-stately/calendar@3.4.4(react@18.3.1):
@@ -6397,8 +6370,8 @@ packages:
dependencies:
'@types/node': 20.12.7
/@typescript-eslint/eslint-plugin@7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==}
/@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
'@typescript-eslint/parser': ^7.0.0
@@ -6409,11 +6382,11 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.7.1
'@typescript-eslint/type-utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.7.1
'@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.8.0
'@typescript-eslint/type-utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.8.0
debug: 4.3.4
eslint: 8.57.0
graphemer: 1.4.0
@@ -6426,8 +6399,8 @@ packages:
- supports-color
dev: false
/@typescript-eslint/parser@7.7.1(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==}
/@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@@ -6436,10 +6409,10 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/scope-manager': 7.7.1
'@typescript-eslint/types': 7.7.1
'@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.7.1
'@typescript-eslint/scope-manager': 7.8.0
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.8.0
debug: 4.3.4
eslint: 8.57.0
typescript: 5.4.5
@@ -6447,16 +6420,16 @@ packages:
- supports-color
dev: false
/@typescript-eslint/scope-manager@7.7.1:
resolution: {integrity: sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==}
/@typescript-eslint/scope-manager@7.8.0:
resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==}
engines: {node: ^18.18.0 || >=20.0.0}
dependencies:
'@typescript-eslint/types': 7.7.1
'@typescript-eslint/visitor-keys': 7.7.1
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/visitor-keys': 7.8.0
dev: false
/@typescript-eslint/type-utils@7.7.1(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==}
/@typescript-eslint/type-utils@7.8.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@@ -6465,8 +6438,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5)
'@typescript-eslint/utils': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5)
debug: 4.3.4
eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.4.5)
@@ -6475,13 +6448,13 @@ packages:
- supports-color
dev: false
/@typescript-eslint/types@7.7.1:
resolution: {integrity: sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==}
/@typescript-eslint/types@7.8.0:
resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==}
engines: {node: ^18.18.0 || >=20.0.0}
dev: false
/@typescript-eslint/typescript-estree@7.7.1(typescript@5.4.5):
resolution: {integrity: sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==}
/@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5):
resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
typescript: '*'
@@ -6489,8 +6462,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/types': 7.7.1
'@typescript-eslint/visitor-keys': 7.7.1
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/visitor-keys': 7.8.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
@@ -6502,8 +6475,8 @@ packages:
- supports-color
dev: false
/@typescript-eslint/utils@7.7.1(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==}
/@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@@ -6511,9 +6484,9 @@ packages:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
'@typescript-eslint/scope-manager': 7.7.1
'@typescript-eslint/types': 7.7.1
'@typescript-eslint/typescript-estree': 7.7.1(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.8.0
'@typescript-eslint/types': 7.8.0
'@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5)
eslint: 8.57.0
semver: 7.6.0
transitivePeerDependencies:
@@ -6521,11 +6494,11 @@ packages:
- typescript
dev: false
/@typescript-eslint/visitor-keys@7.7.1:
resolution: {integrity: sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==}
/@typescript-eslint/visitor-keys@7.8.0:
resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==}
engines: {node: ^18.18.0 || >=20.0.0}
dependencies:
'@typescript-eslint/types': 7.7.1
'@typescript-eslint/types': 7.8.0
eslint-visitor-keys: 3.4.3
dev: false
@@ -7888,7 +7861,7 @@ packages:
- supports-color
dev: false
/eslint-module-utils@2.8.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0):
/eslint-module-utils@2.8.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0):
resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==}
engines: {node: '>=4'}
peerDependencies:
@@ -7909,7 +7882,7 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
'@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5)
debug: 3.2.7
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
@@ -7917,7 +7890,7 @@ packages:
- supports-color
dev: false
/eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0):
/eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.8.0)(eslint@8.57.0):
resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
engines: {node: '>=4'}
peerDependencies:
@@ -7927,7 +7900,7 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
'@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5)
array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5
array.prototype.flat: 1.3.2
@@ -7936,7 +7909,7 @@ packages:
doctrine: 2.1.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.7.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0)
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.8.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0)
hasown: 2.0.2
is-core-module: 2.13.1
is-glob: 4.0.3
@@ -8727,8 +8700,8 @@ packages:
'@babel/runtime': 7.24.4
dev: false
/i18next@23.11.2:
resolution: {integrity: sha512-qMBm7+qT8jdpmmDw/kQD16VpmkL9BdL+XNAK5MNbNFaf1iQQq35ZbPrSlqmnNPOSUY4m342+c0t0evinF5l7sA==}
/i18next@23.11.3:
resolution: {integrity: sha512-Pq/aSKowir7JM0rj+Wa23Kb6KKDUGno/HjG+wRQu0PxoTbpQ4N89MAT0rFGvXmLkRLNMb1BbBOKGozl01dabzg==}
dependencies:
'@babel/runtime': 7.24.4
@@ -9464,13 +9437,13 @@ packages:
remove-accents: 0.5.0
dev: false
/md-to-react-email@5.0.2(react@18.2.0):
/md-to-react-email@5.0.2(react@18.3.1):
resolution: {integrity: sha512-x6kkpdzIzUhecda/yahltfEl53mH26QdWu4abUF9+S0Jgam8P//Ciro8cdhyMHnT5MQUJYrIbO6ORM2UxPiNNA==}
peerDependencies:
react: 18.x
dependencies:
marked: 7.0.4
react: 18.2.0
react: 18.3.1
dev: false
/mdast-util-find-and-replace@3.0.1:
@@ -11102,16 +11075,6 @@ packages:
react: 18.3.1
dev: true
/react-dom@18.2.0(react@18.2.0):
resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
peerDependencies:
react: ^18.2.0
dependencies:
loose-envify: 1.4.0
react: 18.2.0
scheduler: 0.23.2
dev: false
/react-dom@18.3.1(react@18.3.1):
resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
peerDependencies:
@@ -11138,7 +11101,7 @@ packages:
dependencies:
react: 18.3.1
/react-i18next@14.1.1(i18next@23.11.2)(react-dom@18.3.1)(react@18.3.1):
/react-i18next@14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1):
resolution: {integrity: sha512-QSiKw+ihzJ/CIeIYWrarCmXJUySHDwQr5y8uaNIkbxoGRm/5DukkxZs+RPla79IKyyDPzC/DRlgQCABHtrQuQQ==}
peerDependencies:
i18next: '>= 23.2.3'
@@ -11153,7 +11116,7 @@ packages:
dependencies:
'@babel/runtime': 7.24.4
html-parse-stringify: 3.0.1
i18next: 23.11.2
i18next: 23.11.3
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -11249,13 +11212,6 @@ packages:
react-dom: 18.3.1(react@18.3.1)
dev: false
/react@18.2.0:
resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
engines: {node: '>=0.10.0'}
dependencies:
loose-envify: 1.4.0
dev: false
/react@18.3.1:
resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
engines: {node: '>=0.10.0'}

View File

@@ -17,8 +17,8 @@
"@tanstack/react-table": "^8.16.0",
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
"@types/eslint": "^8.56.10",
"@typescript-eslint/eslint-plugin": "^7.7.1",
"@typescript-eslint/parser": "^7.7.1",
"@typescript-eslint/eslint-plugin": "^7.8.0",
"@typescript-eslint/parser": "^7.8.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-turbo": "^1.13.3",
"eslint-plugin-import": "^2.29.1",