diff --git a/package.json b/package.json index 60e6944..1e298e5 100644 --- a/package.json +++ b/package.json @@ -16,18 +16,19 @@ "@prisma/client": "4.14.1", "@tailwindcss/typography": "^0.5.9", "@tanstack/react-query": "^4.29.7", - "@trpc/client": "10.26.0", - "@trpc/next": "10.26.0", - "@trpc/react-query": "10.26.0", - "@trpc/server": "10.26.0", + "@trpc/client": "10.27.1", + "@trpc/next": "10.27.1", + "@trpc/react-query": "10.27.1", + "@trpc/server": "10.27.1", "@types/json2csv": "^5.0.3", "@types/next-pwa": "^5.6.2", "ably": "^1.2.39", "autoprefixer": "^10.4.14", "daisyui": "^2.51.6", + "fms-ts": "^0.1.6", "ioredis": "^5.3.2", "json2csv": "6.0.0-alpha.2", - "next": "^13.4.2", + "next": "^13.4.3", "next-auth": "^4.22.1", "next-pwa": "^5.6.0", "postcss": "^8.4.23", @@ -45,8 +46,8 @@ "@types/react-dom": "^18.2.4", "@typescript-eslint/eslint-plugin": "^5.59.6", "@typescript-eslint/parser": "^5.59.6", - "eslint": "^8.40.0", - "eslint-config-next": "^13.4.2", + "eslint": "^8.41.0", + "eslint-config-next": "^13.4.3", "prisma": "4.14.1", "typescript": "^5.0.4" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 45c6626..a73111e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,17 +17,17 @@ dependencies: specifier: ^4.29.7 version: 4.29.7(react-dom@18.2.0)(react@18.2.0) '@trpc/client': - specifier: 10.26.0 - version: 10.26.0(@trpc/server@10.26.0) + specifier: 10.27.1 + version: 10.27.1(@trpc/server@10.27.1) '@trpc/next': - specifier: 10.26.0 - version: 10.26.0(@tanstack/react-query@4.29.7)(@trpc/client@10.26.0)(@trpc/react-query@10.26.0)(@trpc/server@10.26.0)(next@13.4.2)(react-dom@18.2.0)(react@18.2.0) + specifier: 10.27.1 + version: 10.27.1(@tanstack/react-query@4.29.7)(@trpc/client@10.27.1)(@trpc/react-query@10.27.1)(@trpc/server@10.27.1)(next@13.4.3)(react-dom@18.2.0)(react@18.2.0) '@trpc/react-query': - specifier: 10.26.0 - version: 10.26.0(@tanstack/react-query@4.29.7)(@trpc/client@10.26.0)(@trpc/server@10.26.0)(react-dom@18.2.0)(react@18.2.0) + specifier: 10.27.1 + version: 10.27.1(@tanstack/react-query@4.29.7)(@trpc/client@10.27.1)(@trpc/server@10.27.1)(react-dom@18.2.0)(react@18.2.0) '@trpc/server': - specifier: 10.26.0 - version: 10.26.0 + specifier: 10.27.1 + version: 10.27.1 '@types/json2csv': specifier: ^5.0.3 version: 5.0.3 @@ -43,6 +43,9 @@ dependencies: daisyui: specifier: ^2.51.6 version: 2.51.6(autoprefixer@10.4.14)(postcss@8.4.23) + fms-ts: + specifier: ^0.1.6 + version: 0.1.6 ioredis: specifier: ^5.3.2 version: 5.3.2 @@ -50,14 +53,14 @@ dependencies: specifier: 6.0.0-alpha.2 version: 6.0.0-alpha.2 next: - specifier: ^13.4.2 - version: 13.4.2(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + specifier: ^13.4.3 + version: 13.4.3(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) next-auth: specifier: ^4.22.1 - version: 4.22.1(next@13.4.2)(react-dom@18.2.0)(react@18.2.0) + version: 4.22.1(next@13.4.3)(react-dom@18.2.0)(react@18.2.0) next-pwa: specifier: ^5.6.0 - version: 5.6.0(@babel/core@7.21.8)(next@13.4.2)(webpack@5.83.1) + version: 5.6.0(@babel/core@7.21.8)(next@13.4.3)(webpack@5.83.1) postcss: specifier: ^8.4.23 version: 8.4.23 @@ -95,16 +98,16 @@ devDependencies: version: 18.2.4 '@typescript-eslint/eslint-plugin': specifier: ^5.59.6 - version: 5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.40.0)(typescript@5.0.4) + version: 5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.41.0)(typescript@5.0.4) '@typescript-eslint/parser': specifier: ^5.59.6 - version: 5.59.6(eslint@8.40.0)(typescript@5.0.4) + version: 5.59.6(eslint@8.41.0)(typescript@5.0.4) eslint: - specifier: ^8.40.0 - version: 8.40.0 + specifier: ^8.41.0 + version: 8.41.0 eslint-config-next: - specifier: ^13.4.2 - version: 13.4.2(eslint@8.40.0)(typescript@5.0.4) + specifier: ^13.4.3 + version: 13.4.3(eslint@8.41.0)(typescript@5.0.4) prisma: specifier: 4.14.1 version: 4.14.1 @@ -1308,13 +1311,13 @@ packages: to-fast-properties: 2.0.0 dev: false - /@eslint-community/eslint-utils@4.4.0(eslint@8.40.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.41.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.40.0 + eslint: 8.41.0 eslint-visitor-keys: 3.4.1 dev: true @@ -1340,8 +1343,8 @@ packages: - supports-color dev: true - /@eslint/js@8.40.0: - resolution: {integrity: sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==} + /@eslint/js@8.41.0: + resolution: {integrity: sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -1417,21 +1420,21 @@ packages: next-auth: ^4 dependencies: '@prisma/client': 4.14.1(prisma@4.14.1) - next-auth: 4.22.1(next@13.4.2)(react-dom@18.2.0)(react@18.2.0) + next-auth: 4.22.1(next@13.4.3)(react-dom@18.2.0)(react@18.2.0) dev: false - /@next/env@13.4.2: - resolution: {integrity: sha512-Wqvo7lDeS0KGwtwg9TT9wKQ8raelmUxt+TQKWvG/xKfcmDXNOtCuaszcfCF8JzlBG1q0VhpI6CKaRMbVPMDWgw==} + /@next/env@13.4.3: + resolution: {integrity: sha512-pa1ErjyFensznttAk3EIv77vFbfSYT6cLzVRK5jx4uiRuCQo+m2wCFAREaHKIy63dlgvOyMlzh6R8Inu8H3KrQ==} dev: false - /@next/eslint-plugin-next@13.4.2: - resolution: {integrity: sha512-ZeFWgrxwckxTpYM+ANeUL9E7LOGPbZKmI94LJIjbDU69iEIgqd4WD0l2pVbOJMr/+vgoZmJ9Dx1m0WJ7WScXHA==} + /@next/eslint-plugin-next@13.4.3: + resolution: {integrity: sha512-5B0uOnh7wyUY9vNNdIA6NUvWozhrZaTMZOzdirYAefqD0ZBK5C/h3+KMYdCKrR7JrXGvVpWnHtv54b3dCzwICA==} dependencies: glob: 7.1.7 dev: true - /@next/swc-darwin-arm64@13.4.2: - resolution: {integrity: sha512-6BBlqGu3ewgJflv9iLCwO1v1hqlecaIH2AotpKfVUEzUxuuDNJQZ2a4KLb4MBl8T9/vca1YuWhSqtbF6ZuUJJw==} + /@next/swc-darwin-arm64@13.4.3: + resolution: {integrity: sha512-yx18udH/ZmR4Bw4M6lIIPE3JxsAZwo04iaucEfA2GMt1unXr2iodHUX/LAKNyi6xoLP2ghi0E+Xi1f4Qb8f1LQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -1439,8 +1442,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64@13.4.2: - resolution: {integrity: sha512-iZuYr7ZvGLPjPmfhhMl0ISm+z8EiyLBC1bLyFwGBxkWmPXqdJ60mzuTaDSr5WezDwv0fz32HB7JHmRC6JVHSZg==} + /@next/swc-darwin-x64@13.4.3: + resolution: {integrity: sha512-Mi8xJWh2IOjryAM1mx18vwmal9eokJ2njY4nDh04scy37F0LEGJ/diL6JL6kTXi0UfUCGbMsOItf7vpReNiD2A==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -1448,8 +1451,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu@13.4.2: - resolution: {integrity: sha512-2xVabFtIge6BJTcJrW8YuUnYTuQjh4jEuRuS2mscyNVOj6zUZkom3CQg+egKOoS+zh2rrro66ffSKIS+ztFJTg==} + /@next/swc-linux-arm64-gnu@13.4.3: + resolution: {integrity: sha512-aBvtry4bxJ1xwKZ/LVPeBGBwWVwxa4bTnNkRRw6YffJnn/f4Tv4EGDPaVeYHZGQVA56wsGbtA6nZMuWs/EIk4Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1457,8 +1460,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl@13.4.2: - resolution: {integrity: sha512-wKRCQ27xCUJx5d6IivfjYGq8oVngqIhlhSAJntgXLt7Uo9sRT/3EppMHqUZRfyuNBTbykEre1s5166z+pvRB5A==} + /@next/swc-linux-arm64-musl@13.4.3: + resolution: {integrity: sha512-krT+2G3kEsEUvZoYte3/2IscscDraYPc2B+fDJFipPktJmrv088Pei/RjrhWm5TMIy5URYjZUoDZdh5k940Dyw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -1466,8 +1469,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu@13.4.2: - resolution: {integrity: sha512-NpCa+UVhhuNeaFVUP1Bftm0uqtvLWq2JTm7+Ta48+2Uqj2mNXrDIvyn1DY/ZEfmW/1yvGBRaUAv9zkMkMRixQA==} + /@next/swc-linux-x64-gnu@13.4.3: + resolution: {integrity: sha512-AMdFX6EKJjC0G/CM6hJvkY8wUjCcbdj3Qg7uAQJ7PVejRWaVt0sDTMavbRfgMchx8h8KsAudUCtdFkG9hlEClw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1475,8 +1478,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl@13.4.2: - resolution: {integrity: sha512-ZWVC72x0lW4aj44e3khvBrj2oSYj1bD0jESmyah3zG/3DplEy/FOtYkMzbMjHTdDSheso7zH8GIlW6CDQnKhmQ==} + /@next/swc-linux-x64-musl@13.4.3: + resolution: {integrity: sha512-jySgSXE48shaLtcQbiFO9ajE9mqz7pcAVLnVLvRIlUHyQYR/WyZdK8ehLs65Mz6j9cLrJM+YdmdJPyV4WDaz2g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -1484,8 +1487,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc@13.4.2: - resolution: {integrity: sha512-pLT+OWYpzJig5K4VKhLttlIfBcVZfr2+Xbjra0Tjs83NQSkFS+y7xx+YhCwvpEmXYLIvaggj2ONPyjbiigOvHQ==} + /@next/swc-win32-arm64-msvc@13.4.3: + resolution: {integrity: sha512-5DxHo8uYcaADiE9pHrg8o28VMt/1kR8voDehmfs9AqS0qSClxAAl+CchjdboUvbCjdNWL1MISCvEfKY2InJ3JA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -1493,8 +1496,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc@13.4.2: - resolution: {integrity: sha512-dhpiksQCyGca4WY0fJyzK3FxMDFoqMb0Cn+uDB+9GYjpU2K5//UGPQlCwiK4JHxuhg8oLMag5Nf3/IPSJNG8jw==} + /@next/swc-win32-ia32-msvc@13.4.3: + resolution: {integrity: sha512-LaqkF3d+GXRA5X6zrUjQUrXm2MN/3E2arXBtn5C7avBCNYfm9G3Xc646AmmmpN3DJZVaMYliMyCIQCMDEzk80w==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -1502,8 +1505,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc@13.4.2: - resolution: {integrity: sha512-O7bort1Vld00cu8g0jHZq3cbSTUNMohOEvYqsqE10+yfohhdPHzvzO+ziJRz4Dyyr/fYKREwS7gR4JC0soSOMw==} + /@next/swc-win32-x64-msvc@13.4.3: + resolution: {integrity: sha512-jglUk/x7ZWeOJWlVoKyIAkHLTI+qEkOriOOV+3hr1GyiywzcqfI7TpFSiwC7kk1scOiH7NTFKp8mA3XPNO9bDw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1690,53 +1693,53 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - /@trpc/client@10.26.0(@trpc/server@10.26.0): - resolution: {integrity: sha512-ojHxQFIE97rBEGPK8p1ijbzo0T1IdEBoJ9fFSgWWL9FMuEEA/DNQ9s0uuiOrDKhCCdTFT1unfRharoJhB2/O2w==} + /@trpc/client@10.27.1(@trpc/server@10.27.1): + resolution: {integrity: sha512-e9Syj6F41OHDSUg3JvT67fgoD22UbxPzYgp9Bno13NFpyeJc6vkXRlAgDc8ZuouqUPQuouJWll/I90CsuxEqvA==} peerDependencies: - '@trpc/server': 10.26.0 + '@trpc/server': 10.27.1 dependencies: - '@trpc/server': 10.26.0 + '@trpc/server': 10.27.1 dev: false - /@trpc/next@10.26.0(@tanstack/react-query@4.29.7)(@trpc/client@10.26.0)(@trpc/react-query@10.26.0)(@trpc/server@10.26.0)(next@13.4.2)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-p328crXBH6C228LKxjqbpDEXdLmy4+LdgsZuYK3oFMqaJEmCT22b+zcQ9IvQrcPfDxhKOpJym0QpuDNaWpG2qg==} + /@trpc/next@10.27.1(@tanstack/react-query@4.29.7)(@trpc/client@10.27.1)(@trpc/react-query@10.27.1)(@trpc/server@10.27.1)(next@13.4.3)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3aMGjhJXiJOj/tjqkyMot3x/nbxbHeEcCWjgYiCHmiXVk9h9liIG73f2is8jWEPs3o/eJ+eNwNSzkfhrhIWq2g==} peerDependencies: '@tanstack/react-query': ^4.18.0 - '@trpc/client': 10.26.0 - '@trpc/react-query': 10.26.0 - '@trpc/server': 10.26.0 + '@trpc/client': 10.27.1 + '@trpc/react-query': 10.27.1 + '@trpc/server': 10.27.1 next: '*' react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: '@tanstack/react-query': 4.29.7(react-dom@18.2.0)(react@18.2.0) - '@trpc/client': 10.26.0(@trpc/server@10.26.0) - '@trpc/react-query': 10.26.0(@tanstack/react-query@4.29.7)(@trpc/client@10.26.0)(@trpc/server@10.26.0)(react-dom@18.2.0)(react@18.2.0) - '@trpc/server': 10.26.0 - next: 13.4.2(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + '@trpc/client': 10.27.1(@trpc/server@10.27.1) + '@trpc/react-query': 10.27.1(@tanstack/react-query@4.29.7)(@trpc/client@10.27.1)(@trpc/server@10.27.1)(react-dom@18.2.0)(react@18.2.0) + '@trpc/server': 10.27.1 + next: 13.4.3(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-ssr-prepass: 1.5.0(react@18.2.0) dev: false - /@trpc/react-query@10.26.0(@tanstack/react-query@4.29.7)(@trpc/client@10.26.0)(@trpc/server@10.26.0)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-n+enpalaCZhd3A/mbZmXeydRZHsAJo7mzc2ncgHn5S+C3SrfOM897uQdbHdj02Li25ULxzP1O92w+vZzmFbgkA==} + /@trpc/react-query@10.27.1(@tanstack/react-query@4.29.7)(@trpc/client@10.27.1)(@trpc/server@10.27.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-6Q6B5cGKvxnmy/B5VsOjOG4sBl19VJJrGloFp93jc3Hq3+EfniOssdoA81VLI3fInif8ns0Z4jgWUIpq8741cA==} peerDependencies: '@tanstack/react-query': ^4.18.0 - '@trpc/client': 10.26.0 - '@trpc/server': 10.26.0 + '@trpc/client': 10.27.1 + '@trpc/server': 10.27.1 react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: '@tanstack/react-query': 4.29.7(react-dom@18.2.0)(react@18.2.0) - '@trpc/client': 10.26.0(@trpc/server@10.26.0) - '@trpc/server': 10.26.0 + '@trpc/client': 10.27.1(@trpc/server@10.27.1) + '@trpc/server': 10.27.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@trpc/server@10.26.0: - resolution: {integrity: sha512-+Wt0NFAeflVSNiUnHIDNN3C8jP7XIRmYrcgJ6IsAnm0lK4p/FkpCpeu1aig5qxrgZx30PHNDLZ/3FttVSEW2aQ==} + /@trpc/server@10.27.1: + resolution: {integrity: sha512-oMTNpei0+CAet0BuDdBE9cup0SseJAOlWRhWhcTAU05rETsJnzCA5DfNkf+aP3XiAM8rMJfrTfC0Z3aeADhHaA==} dev: false /@types/cacheable-request@6.0.3: @@ -1806,7 +1809,7 @@ packages: resolution: {integrity: sha512-K5zLZSzrJCOQBay5E7abGp7gQ0q1Pv58dE3RuBo5LQXYQFaCO4JPju0XYdzgLoQ20yhBVZ43AwIcSgCzx9KvqA==} dependencies: '@types/react': 18.2.6 - next: 13.4.2(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.3(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) workbox-build: 6.5.4 transitivePeerDependencies: - '@babel/core' @@ -1863,7 +1866,7 @@ packages: resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} dev: false - /@typescript-eslint/eslint-plugin@5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.40.0)(typescript@5.0.4): + /@typescript-eslint/eslint-plugin@5.59.6(@typescript-eslint/parser@5.59.6)(eslint@8.41.0)(typescript@5.0.4): resolution: {integrity: sha512-sXtOgJNEuRU5RLwPUb1jxtToZbgvq3M6FPpY4QENxoOggK+UpTxUBpj6tD8+Qh2g46Pi9We87E+eHnUw8YcGsw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1875,12 +1878,12 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.59.6(eslint@8.40.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.59.6(eslint@8.41.0)(typescript@5.0.4) '@typescript-eslint/scope-manager': 5.59.6 - '@typescript-eslint/type-utils': 5.59.6(eslint@8.40.0)(typescript@5.0.4) - '@typescript-eslint/utils': 5.59.6(eslint@8.40.0)(typescript@5.0.4) + '@typescript-eslint/type-utils': 5.59.6(eslint@8.41.0)(typescript@5.0.4) + '@typescript-eslint/utils': 5.59.6(eslint@8.41.0)(typescript@5.0.4) debug: 4.3.4 - eslint: 8.40.0 + eslint: 8.41.0 grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 @@ -1891,7 +1894,7 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@5.59.6(eslint@8.40.0)(typescript@5.0.4): + /@typescript-eslint/parser@5.59.6(eslint@8.41.0)(typescript@5.0.4): resolution: {integrity: sha512-7pCa6al03Pv1yf/dUg/s1pXz/yGMUBAw5EeWqNTFiSueKvRNonze3hma3lhdsOrQcaOXhbk5gKu2Fludiho9VA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1905,7 +1908,7 @@ packages: '@typescript-eslint/types': 5.59.6 '@typescript-eslint/typescript-estree': 5.59.6(typescript@5.0.4) debug: 4.3.4 - eslint: 8.40.0 + eslint: 8.41.0 typescript: 5.0.4 transitivePeerDependencies: - supports-color @@ -1919,7 +1922,7 @@ packages: '@typescript-eslint/visitor-keys': 5.59.6 dev: true - /@typescript-eslint/type-utils@5.59.6(eslint@8.40.0)(typescript@5.0.4): + /@typescript-eslint/type-utils@5.59.6(eslint@8.41.0)(typescript@5.0.4): resolution: {integrity: sha512-A4tms2Mp5yNvLDlySF+kAThV9VTBPCvGf0Rp8nl/eoDX9Okun8byTKoj3fJ52IJitjWOk0fKPNQhXEB++eNozQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1930,9 +1933,9 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 5.59.6(typescript@5.0.4) - '@typescript-eslint/utils': 5.59.6(eslint@8.40.0)(typescript@5.0.4) + '@typescript-eslint/utils': 5.59.6(eslint@8.41.0)(typescript@5.0.4) debug: 4.3.4 - eslint: 8.40.0 + eslint: 8.41.0 tsutils: 3.21.0(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: @@ -1965,19 +1968,19 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.59.6(eslint@8.40.0)(typescript@5.0.4): + /@typescript-eslint/utils@5.59.6(eslint@8.41.0)(typescript@5.0.4): resolution: {integrity: sha512-vzaaD6EXbTS29cVH0JjXBdzMt6VBlv+hE31XktDRMX1j3462wZCJa7VzO2AxXEXcIl8GQqZPcOPuW/Z1tZVogg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.40.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) '@types/json-schema': 7.0.11 '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 5.59.6 '@typescript-eslint/types': 5.59.6 '@typescript-eslint/typescript-estree': 5.59.6(typescript@5.0.4) - eslint: 8.40.0 + eslint: 8.41.0 eslint-scope: 5.1.1 semver: 7.5.1 transitivePeerDependencies: @@ -2431,8 +2434,8 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001488 - electron-to-chromium: 1.4.400 - node-releases: 2.0.10 + electron-to-chromium: 1.4.402 + node-releases: 2.0.11 update-browserslist-db: 1.0.11(browserslist@4.21.5) dev: false @@ -2631,7 +2634,7 @@ packages: resolution: {integrity: sha512-MaQ9FwzlZ/KLeVCLhzI3rZw0EhrIryfZa3AyT4agVybR0DjlkDHA8898lamLD6kfkf9MMn8D+zDAUR4+GxaymQ==} engines: {node: '>=12.13'} dependencies: - is-what: 4.1.9 + is-what: 4.1.10 dev: false /core-js-compat@3.30.2: @@ -2840,8 +2843,8 @@ packages: jake: 10.8.6 dev: false - /electron-to-chromium@1.4.400: - resolution: {integrity: sha512-Lsvf7cvwbIxCfB8VqbnVtEsjGi3+48ejDiQZfWo5gkT+1vQ2DHQI5pl0nUvPD6z1IQk6JgFeMC5ZQJqVhalEHg==} + /electron-to-chromium@1.4.402: + resolution: {integrity: sha512-gWYvJSkohOiBE6ecVYXkrDgNaUjo47QEKK0kQzmWyhkH+yoYiG44bwuicTGNSIQRG3WDMsWVZJLRnJnLNkbWvA==} dev: false /emoji-regex@9.2.2: @@ -2960,8 +2963,8 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-next@13.4.2(eslint@8.40.0)(typescript@5.0.4): - resolution: {integrity: sha512-zjLJ9B9bbeWSo5q+iHfdt8gVYyT+y2BpWDfjR6XMBtFRSMKRGjllDKxnuKBV1q2Y/QpwLM2PXHJTMRyblCmRAg==} + /eslint-config-next@13.4.3(eslint@8.41.0)(typescript@5.0.4): + resolution: {integrity: sha512-1lXwdFi29fKxzeugof/TUE7lpHyJQt5+U4LaUHyvQfHjvsWO77vFNicJv5sX6k0VDVSbnfz0lw+avxI+CinbMg==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -2969,16 +2972,16 @@ packages: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 13.4.2 + '@next/eslint-plugin-next': 13.4.3 '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/parser': 5.59.6(eslint@8.40.0)(typescript@5.0.4) - eslint: 8.40.0 + '@typescript-eslint/parser': 5.59.6(eslint@8.41.0)(typescript@5.0.4) + eslint: 8.41.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.40.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-typescript@3.5.5)(eslint@8.40.0) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.40.0) - eslint-plugin-react: 7.32.2(eslint@8.40.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.40.0) + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.41.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-typescript@3.5.5)(eslint@8.41.0) + eslint-plugin-jsx-a11y: 6.7.1(eslint@8.41.0) + eslint-plugin-react: 7.32.2(eslint@8.41.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.41.0) typescript: 5.0.4 transitivePeerDependencies: - eslint-import-resolver-webpack @@ -2995,7 +2998,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.40.0): + /eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.41.0): resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -3004,9 +3007,9 @@ packages: dependencies: debug: 4.3.4 enhanced-resolve: 5.14.0 - eslint: 8.40.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.40.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-typescript@3.5.5)(eslint@8.40.0) + eslint: 8.41.0 + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.41.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-typescript@3.5.5)(eslint@8.41.0) get-tsconfig: 4.5.0 globby: 13.1.4 is-core-module: 2.12.1 @@ -3019,7 +3022,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.40.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.41.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -3040,16 +3043,16 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.59.6(eslint@8.40.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.59.6(eslint@8.41.0)(typescript@5.0.4) debug: 3.2.7 - eslint: 8.40.0 + eslint: 8.41.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.40.0) + eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.27.5)(eslint@8.41.0) transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-typescript@3.5.5)(eslint@8.40.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-typescript@3.5.5)(eslint@8.41.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -3059,15 +3062,15 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.59.6(eslint@8.40.0)(typescript@5.0.4) + '@typescript-eslint/parser': 5.59.6(eslint@8.41.0)(typescript@5.0.4) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.40.0 + eslint: 8.41.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.40.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.59.6)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.41.0) has: 1.0.3 is-core-module: 2.12.1 is-glob: 4.0.3 @@ -3082,7 +3085,7 @@ packages: - supports-color dev: true - /eslint-plugin-jsx-a11y@6.7.1(eslint@8.40.0): + /eslint-plugin-jsx-a11y@6.7.1(eslint@8.41.0): resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: @@ -3097,7 +3100,7 @@ packages: axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.40.0 + eslint: 8.41.0 has: 1.0.3 jsx-ast-utils: 3.3.3 language-tags: 1.0.5 @@ -3107,16 +3110,16 @@ packages: semver: 6.3.0 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.40.0): + /eslint-plugin-react-hooks@4.6.0(eslint@8.41.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.40.0 + eslint: 8.41.0 dev: true - /eslint-plugin-react@7.32.2(eslint@8.40.0): + /eslint-plugin-react@7.32.2(eslint@8.41.0): resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} peerDependencies: @@ -3126,7 +3129,7 @@ packages: array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.40.0 + eslint: 8.41.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.3 minimatch: 3.1.2 @@ -3160,15 +3163,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.40.0: - resolution: {integrity: sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==} + /eslint@8.41.0: + resolution: {integrity: sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.40.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.41.0) '@eslint-community/regexpp': 4.5.1 '@eslint/eslintrc': 2.0.3 - '@eslint/js': 8.40.0 + '@eslint/js': 8.41.0 '@humanwhocodes/config-array': 0.11.8 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -3188,13 +3191,12 @@ packages: find-up: 5.0.0 glob-parent: 6.0.2 globals: 13.20.0 - grapheme-splitter: 1.0.4 + graphemer: 1.4.0 ignore: 5.2.4 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-sdsl: 4.4.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -3367,6 +3369,10 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true + /fms-ts@0.1.6: + resolution: {integrity: sha512-udJ0KwyFEIF27DQDl0PUptyTYrWczBr8P9g/b4j+Zri4cxQZcKCqcLfHUeDaD8usoThpk4WO0jVjftcjs9fYRw==} + dev: false + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -3580,6 +3586,10 @@ packages: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} @@ -3896,8 +3906,8 @@ packages: get-intrinsic: 1.2.1 dev: true - /is-what@4.1.9: - resolution: {integrity: sha512-I3FU0rkVvwhgLLEs6iITwZ/JaLXe7tQcHyzupXky8jigt1vu4KM0UOqDr963j36JRvJ835EATVIm6MnGz/i1/g==} + /is-what@4.1.10: + resolution: {integrity: sha512-JBy26nXqBUwzTfgj6T5Y/UgXSmRd+03FTq5v3P+N1cOmOtI1hz7dBn+ZfqM7c86qqWTNBEH98h3pkpmI6USnQA==} engines: {node: '>=12.13'} dev: false @@ -3954,10 +3964,6 @@ packages: resolution: {integrity: sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==} dev: false - /js-sdsl@4.4.0: - resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} - dev: true - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -4278,7 +4284,7 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: false - /next-auth@4.22.1(next@13.4.2)(react-dom@18.2.0)(react@18.2.0): + /next-auth@4.22.1(next@13.4.3)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-NTR3f6W7/AWXKw8GSsgSyQcDW6jkslZLH8AiZa5PQ09w1kR8uHtR9rez/E9gAq/o17+p0JYHE8QjF3RoniiObA==} peerDependencies: next: ^12.2.5 || ^13 @@ -4293,7 +4299,7 @@ packages: '@panva/hkdf': 1.1.1 cookie: 0.5.0 jose: 4.14.4 - next: 13.4.2(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.3(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) oauth: 0.9.15 openid-client: 5.4.2 preact: 10.14.1 @@ -4303,7 +4309,7 @@ packages: uuid: 8.3.2 dev: false - /next-pwa@5.6.0(@babel/core@7.21.8)(next@13.4.2)(webpack@5.83.1): + /next-pwa@5.6.0(@babel/core@7.21.8)(next@13.4.3)(webpack@5.83.1): resolution: {integrity: sha512-XV8g8C6B7UmViXU8askMEYhWwQ4qc/XqJGnexbLV68hzKaGHZDMtHsm2TNxFcbR7+ypVuth/wwpiIlMwpRJJ5A==} peerDependencies: next: '>=9.0.0' @@ -4311,7 +4317,7 @@ packages: babel-loader: 8.3.0(@babel/core@7.21.8)(webpack@5.83.1) clean-webpack-plugin: 4.0.0(webpack@5.83.1) globby: 11.1.0 - next: 13.4.2(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) + next: 13.4.3(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0) terser-webpack-plugin: 5.3.9(webpack@5.83.1) workbox-webpack-plugin: 6.5.4(webpack@5.83.1) workbox-window: 6.5.4 @@ -4325,8 +4331,8 @@ packages: - webpack dev: false - /next@13.4.2(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-aNFqLs3a3nTGvLWlO9SUhCuMUHVPSFQC0+tDNGAsDXqx+WJDFSbvc233gOJ5H19SBc7nw36A9LwQepOJ2u/8Kg==} + /next@13.4.3(@babel/core@7.21.8)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-FV3pBrAAnAIfOclTvncw9dDohyeuEEXPe5KNcva91anT/rdycWbgtu3IjUj4n5yHnWK8YEPo0vrUecHmnmUNbA==} engines: {node: '>=16.8.0'} hasBin: true peerDependencies: @@ -4346,7 +4352,7 @@ packages: sass: optional: true dependencies: - '@next/env': 13.4.2 + '@next/env': 13.4.3 '@swc/helpers': 0.5.1 busboy: 1.6.0 caniuse-lite: 1.0.30001488 @@ -4356,22 +4362,22 @@ packages: styled-jsx: 5.1.1(@babel/core@7.21.8)(react@18.2.0) zod: 3.21.4 optionalDependencies: - '@next/swc-darwin-arm64': 13.4.2 - '@next/swc-darwin-x64': 13.4.2 - '@next/swc-linux-arm64-gnu': 13.4.2 - '@next/swc-linux-arm64-musl': 13.4.2 - '@next/swc-linux-x64-gnu': 13.4.2 - '@next/swc-linux-x64-musl': 13.4.2 - '@next/swc-win32-arm64-msvc': 13.4.2 - '@next/swc-win32-ia32-msvc': 13.4.2 - '@next/swc-win32-x64-msvc': 13.4.2 + '@next/swc-darwin-arm64': 13.4.3 + '@next/swc-darwin-x64': 13.4.3 + '@next/swc-linux-arm64-gnu': 13.4.3 + '@next/swc-linux-arm64-musl': 13.4.3 + '@next/swc-linux-x64-gnu': 13.4.3 + '@next/swc-linux-x64-musl': 13.4.3 + '@next/swc-win32-arm64-msvc': 13.4.3 + '@next/swc-win32-ia32-msvc': 13.4.3 + '@next/swc-win32-x64-msvc': 13.4.3 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros dev: false - /node-releases@2.0.10: - resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + /node-releases@2.0.11: + resolution: {integrity: sha512-+M0PwXeU80kRohZ3aT4J/OnR+l9/KD2nVLNNoRgFtnf+umQVFdGBAO2N8+nCnEi0xlh/Wk3zOGC+vNNx+uM79Q==} dev: false /normalize-path@3.0.0: diff --git a/src/server/api/routers/user.ts b/src/server/api/routers/user.ts index 2eeac13..7c71292 100644 --- a/src/server/api/routers/user.ts +++ b/src/server/api/routers/user.ts @@ -1,7 +1,8 @@ import type { User } from "@prisma/client"; import { z } from "zod"; +import { env } from "~/env.mjs"; import { createTRPCRouter, protectedProcedure } from "~/server/api/trpc"; -import { sendMail } from "~/server/jmap"; +import { sendMail } from "fms-ts"; import { fetchFromCache, writeToCache, deleteFromCache } from "~/server/redis"; import type { Role } from "~/utils/types"; @@ -113,7 +114,13 @@ export const userRouter = createTRPCRouter({ "-- \n" + "Sprint Padawan Admin - Atridad \n"; - await sendMail(subject, body, user.email); + await sendMail( + env.JMAP_USERNAME, + env.JMAP_TOKEN, + subject, + body, + user.email + ); await deleteFromCache(`kv_usercount_admin`); await deleteFromCache(`kv_userlist_admin`); } diff --git a/src/server/auth.ts b/src/server/auth.ts index 834b762..8ae7a6a 100644 --- a/src/server/auth.ts +++ b/src/server/auth.ts @@ -10,7 +10,7 @@ import { PrismaAdapter } from "@next-auth/prisma-adapter"; import { env } from "~/env.mjs"; import { prisma } from "~/server/db"; import type { Role } from "~/utils/types"; -import { sendMail } from "./jmap"; +import { sendMail } from "fms-ts"; import { deleteFromCache } from "./redis"; /** @@ -59,7 +59,13 @@ export const authOptions: NextAuthOptions = { "-- \n" + "Sprint Padawan Admin - Atridad \n"; - await sendMail(subject, body, user.email); + await sendMail( + env.JMAP_USERNAME, + env.JMAP_TOKEN, + subject, + body, + user.email + ); await deleteFromCache(`kv_userlist_admin`); await deleteFromCache(`kv_usercount_admin`); } diff --git a/src/server/jmap.ts b/src/server/jmap.ts deleted file mode 100644 index fd37d48..0000000 --- a/src/server/jmap.ts +++ /dev/null @@ -1,118 +0,0 @@ -/* eslint-disable */ -import { env } from "~/env.mjs"; - -const hostname = env.JMAP_HOSTNAME || "api.fastmail.com"; -const username = env.JMAP_USERNAME; - -const authUrl = `https://${hostname}/.well-known/jmap`; -const headers = { - "Content-Type": "application/json", - Authorization: `Bearer ${env.JMAP_TOKEN}`, -}; - -export const getSession = async () => { - const response = await fetch(authUrl, { - method: "GET", - headers, - }); - return response.json(); -}; - -export const mailboxQuery = async (apiUrl: string, accountId: string) => { - const response = await fetch(apiUrl, { - method: "POST", - headers, - body: JSON.stringify({ - using: ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail"], - methodCalls: [ - ["Mailbox/query", { accountId, filter: { name: "Drafts" } }, "a"], - ], - }), - }); - const data = await response.json(); - - return await data["methodResponses"][0][1].ids[0]; -}; - -export const identityQuery = async (apiUrl: string, accountId: string) => { - const response = await fetch(apiUrl, { - method: "POST", - headers, - body: JSON.stringify({ - using: [ - "urn:ietf:params:jmap:core", - "urn:ietf:params:jmap:mail", - "urn:ietf:params:jmap:submission", - ], - methodCalls: [["Identity/get", { accountId, ids: null }, "a"]], - }), - }); - const data = await response.json(); - - return await data["methodResponses"][0][1].list.filter( - // eslint-disable-line - (identity: any) => identity.email === username - )[0].id; -}; - -export const draftResponse = async ( - apiUrl: string, - accountId: string, - draftId: string, - identityId: string, - subject: string, - messageBody: string, - sendTo: string -) => { - const draftObject = { - from: [{ email: username }], - to: [{ email: sendTo }], - subject, - keywords: { $draft: true }, - mailboxIds: { [draftId]: true }, - bodyValues: { body: { value: messageBody, charset: "utf-8" } }, - textBody: [{ partId: "body", type: "text/plain" }], - }; - - const response = await fetch(apiUrl, { - method: "POST", - headers, - body: JSON.stringify({ - using: [ - "urn:ietf:params:jmap:core", - "urn:ietf:params:jmap:mail", - "urn:ietf:params:jmap:submission", - ], - methodCalls: [ - ["Email/set", { accountId, create: { draft: draftObject } }, "a"], - [ - "EmailSubmission/set", - { - accountId, - onSuccessDestroyEmail: ["#sendIt"], - create: { sendIt: { emailId: "#draft", identityId } }, - }, - "b", - ], - ], - }), - }); - - const data = await response.json(); - console.log(JSON.stringify(data, null, 2)); -}; - -export const sendMail = async ( - subject: string, - body: string, - sendTo: string -) => { - const session = await getSession(); - const apiUrl = session.apiUrl; - const accountId = session.primaryAccounts["urn:ietf:params:jmap:mail"]; - - const draftId = await mailboxQuery(apiUrl, accountId); - - const identityId = await identityQuery(apiUrl, accountId); - draftResponse(apiUrl, accountId, draftId, identityId, subject, body, sendTo); -};