generated from nhcarrigan/template
feat: set up announcement and cors logic for server
This commit is contained in:
299
pnpm-lock.yaml
generated
299
pnpm-lock.yaml
generated
@ -10,13 +10,13 @@ importers:
|
|||||||
devDependencies:
|
devDependencies:
|
||||||
'@nhcarrigan/eslint-config':
|
'@nhcarrigan/eslint-config':
|
||||||
specifier: 5.2.0
|
specifier: 5.2.0
|
||||||
version: 5.2.0(@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3))(eslint@9.30.1(jiti@1.21.7))(playwright@1.53.2)(react@19.1.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1))
|
version: 5.2.0(@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(playwright@1.53.2)(react@19.1.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3))
|
||||||
'@nhcarrigan/typescript-config':
|
'@nhcarrigan/typescript-config':
|
||||||
specifier: 4.0.0
|
specifier: 4.0.0
|
||||||
version: 4.0.0(typescript@5.8.3)
|
version: 4.0.0(typescript@5.8.3)
|
||||||
eslint:
|
eslint:
|
||||||
specifier: 9.30.1
|
specifier: 9.30.1
|
||||||
version: 9.30.1(jiti@1.21.7)
|
version: 9.30.1(jiti@2.4.2)
|
||||||
turbo:
|
turbo:
|
||||||
specifier: 2.5.4
|
specifier: 2.5.4
|
||||||
version: 2.5.4
|
version: 2.5.4
|
||||||
@ -56,7 +56,7 @@ importers:
|
|||||||
devDependencies:
|
devDependencies:
|
||||||
'@angular/build':
|
'@angular/build':
|
||||||
specifier: 20.0.5
|
specifier: 20.0.5
|
||||||
version: 20.0.5(@angular/compiler-cli@20.0.6(@angular/compiler@20.0.6)(typescript@5.8.3))(@angular/compiler@20.0.6)(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@20.0.6(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.0.10)(chokidar@4.0.3)(jiti@1.21.7)(karma@6.4.4)(less@4.3.0)(postcss@8.5.6)(terser@5.39.1)(tslib@2.8.1)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1))
|
version: 20.0.5(@angular/compiler-cli@20.0.6(@angular/compiler@20.0.6)(typescript@5.8.3))(@angular/compiler@20.0.6)(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@20.0.6(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.0.10)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(less@4.3.0)(postcss@8.5.6)(terser@5.39.1)(tslib@2.8.1)(tsx@4.20.3)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3))
|
||||||
'@angular/cli':
|
'@angular/cli':
|
||||||
specifier: 20.0.5
|
specifier: 20.0.5
|
||||||
version: 20.0.5(@types/node@24.0.10)(chokidar@4.0.3)
|
version: 20.0.5(@types/node@24.0.10)(chokidar@4.0.3)
|
||||||
@ -93,6 +93,9 @@ importers:
|
|||||||
'@nhcarrigan/logger':
|
'@nhcarrigan/logger':
|
||||||
specifier: 1.0.0
|
specifier: 1.0.0
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
|
'@prisma/client':
|
||||||
|
specifier: 6.11.1
|
||||||
|
version: 6.11.1(prisma@6.11.1(typescript@5.8.3))(typescript@5.8.3)
|
||||||
fastify:
|
fastify:
|
||||||
specifier: 5.4.0
|
specifier: 5.4.0
|
||||||
version: 5.4.0
|
version: 5.4.0
|
||||||
@ -100,6 +103,12 @@ importers:
|
|||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: 24.0.10
|
specifier: 24.0.10
|
||||||
version: 24.0.10
|
version: 24.0.10
|
||||||
|
prisma:
|
||||||
|
specifier: 6.11.1
|
||||||
|
version: 6.11.1(typescript@5.8.3)
|
||||||
|
tsx:
|
||||||
|
specifier: 4.20.3
|
||||||
|
version: 4.20.3
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
@ -1074,6 +1083,36 @@ packages:
|
|||||||
resolution: {integrity: sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==}
|
resolution: {integrity: sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==}
|
||||||
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
|
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
|
||||||
|
|
||||||
|
'@prisma/client@6.11.1':
|
||||||
|
resolution: {integrity: sha512-5CLFh8QP6KxRm83pJ84jaVCeSVPQr8k0L2SEtOJHwdkS57/VQDcI/wQpGmdyOZi+D9gdNabdo8tj1Uk+w+upsQ==}
|
||||||
|
engines: {node: '>=18.18'}
|
||||||
|
peerDependencies:
|
||||||
|
prisma: '*'
|
||||||
|
typescript: '>=5.1.0'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
prisma:
|
||||||
|
optional: true
|
||||||
|
typescript:
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
'@prisma/config@6.11.1':
|
||||||
|
resolution: {integrity: sha512-z6rCTQN741wxDq82cpdzx2uVykpnQIXalLhrWQSR0jlBVOxCIkz3HZnd8ern3uYTcWKfB3IpVAF7K2FU8t/8AQ==}
|
||||||
|
|
||||||
|
'@prisma/debug@6.11.1':
|
||||||
|
resolution: {integrity: sha512-lWRb/YSWu8l4Yum1UXfGLtqFzZkVS2ygkWYpgkbgMHn9XJlMITIgeMvJyX5GepChzhmxuSuiq/MY/kGFweOpGw==}
|
||||||
|
|
||||||
|
'@prisma/engines-version@6.11.1-1.f40f79ec31188888a2e33acda0ecc8fd10a853a9':
|
||||||
|
resolution: {integrity: sha512-swFJTOOg4tHyOM1zB/pHb3MeH0i6t7jFKn5l+ZsB23d9AQACuIRo9MouvuKGvnDogzkcjbWnXi/NvOZ0+n5Jfw==}
|
||||||
|
|
||||||
|
'@prisma/engines@6.11.1':
|
||||||
|
resolution: {integrity: sha512-6eKEcV6V8W2eZAUwX2xTktxqPM4vnx3sxz3SDtpZwjHKpC6lhOtc4vtAtFUuf5+eEqBk+dbJ9Dcaj6uQU+FNNg==}
|
||||||
|
|
||||||
|
'@prisma/fetch-engine@6.11.1':
|
||||||
|
resolution: {integrity: sha512-NBYzmkXTkj9+LxNPRSndaAeALOL1Gr3tjvgRYNqruIPlZ6/ixLeuE/5boYOewant58tnaYFZ5Ne0jFBPfGXHpQ==}
|
||||||
|
|
||||||
|
'@prisma/get-platform@6.11.1':
|
||||||
|
resolution: {integrity: sha512-b2Z8oV2gwvdCkFemBTFd0x4lsL4O2jLSx8lB7D+XqoFALOQZPa7eAPE1NU0Mj1V8gPHRxIsHnyUNtw2i92psUw==}
|
||||||
|
|
||||||
'@rollup/rollup-android-arm-eabi@4.40.2':
|
'@rollup/rollup-android-arm-eabi@4.40.2':
|
||||||
resolution: {integrity: sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==}
|
resolution: {integrity: sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==}
|
||||||
cpu: [arm]
|
cpu: [arm]
|
||||||
@ -2385,6 +2424,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
|
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
|
|
||||||
|
get-tsconfig@4.10.1:
|
||||||
|
resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
|
||||||
|
|
||||||
glob-parent@5.1.2:
|
glob-parent@5.1.2:
|
||||||
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
|
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
|
||||||
engines: {node: '>= 6'}
|
engines: {node: '>= 6'}
|
||||||
@ -2741,8 +2783,8 @@ packages:
|
|||||||
jasmine-core@5.8.0:
|
jasmine-core@5.8.0:
|
||||||
resolution: {integrity: sha512-Q9dqmpUAfptwyueW3+HqBOkSuYd9I/clZSSfN97wXE/Nr2ROFNCwIBEC1F6kb3QXS9Fcz0LjFYSDQT+BiwjuhA==}
|
resolution: {integrity: sha512-Q9dqmpUAfptwyueW3+HqBOkSuYd9I/clZSSfN97wXE/Nr2ROFNCwIBEC1F6kb3QXS9Fcz0LjFYSDQT+BiwjuhA==}
|
||||||
|
|
||||||
jiti@1.21.7:
|
jiti@2.4.2:
|
||||||
resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
|
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
js-tokens@4.0.0:
|
js-tokens@4.0.0:
|
||||||
@ -3353,6 +3395,16 @@ packages:
|
|||||||
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
|
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
|
||||||
engines: {node: '>= 0.8.0'}
|
engines: {node: '>= 0.8.0'}
|
||||||
|
|
||||||
|
prisma@6.11.1:
|
||||||
|
resolution: {integrity: sha512-VzJToRlV0s9Vu2bfqHiRJw73hZNCG/AyJeX+kopbu4GATTjTUdEWUteO3p4BLYoHpMS4o8pD3v6tF44BHNZI1w==}
|
||||||
|
engines: {node: '>=18.18'}
|
||||||
|
hasBin: true
|
||||||
|
peerDependencies:
|
||||||
|
typescript: '>=5.1.0'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
typescript:
|
||||||
|
optional: true
|
||||||
|
|
||||||
proc-log@5.0.0:
|
proc-log@5.0.0:
|
||||||
resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==}
|
resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==}
|
||||||
engines: {node: ^18.17.0 || >=20.5.0}
|
engines: {node: ^18.17.0 || >=20.5.0}
|
||||||
@ -3467,6 +3519,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
|
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
|
||||||
engines: {node: '>=4'}
|
engines: {node: '>=4'}
|
||||||
|
|
||||||
|
resolve-pkg-maps@1.0.0:
|
||||||
|
resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
|
||||||
|
|
||||||
resolve@1.22.10:
|
resolve@1.22.10:
|
||||||
resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
|
resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
@ -3869,6 +3924,11 @@ packages:
|
|||||||
tslib@2.8.1:
|
tslib@2.8.1:
|
||||||
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
|
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
|
||||||
|
|
||||||
|
tsx@4.20.3:
|
||||||
|
resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==}
|
||||||
|
engines: {node: '>=18.0.0'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
tuf-js@3.1.0:
|
tuf-js@3.1.0:
|
||||||
resolution: {integrity: sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==}
|
resolution: {integrity: sha512-3T3T04WzowbwV2FDiGXBbr81t64g1MUGGJRgT4x5o97N+8ArdhVCAF9IxFrxuSJmM3E5Asn7nKHkao0ibcZXAg==}
|
||||||
engines: {node: ^18.17.0 || >=20.5.0}
|
engines: {node: ^18.17.0 || >=20.5.0}
|
||||||
@ -4281,7 +4341,7 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- chokidar
|
- chokidar
|
||||||
|
|
||||||
'@angular/build@20.0.5(@angular/compiler-cli@20.0.6(@angular/compiler@20.0.6)(typescript@5.8.3))(@angular/compiler@20.0.6)(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@20.0.6(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.0.10)(chokidar@4.0.3)(jiti@1.21.7)(karma@6.4.4)(less@4.3.0)(postcss@8.5.6)(terser@5.39.1)(tslib@2.8.1)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1))':
|
'@angular/build@20.0.5(@angular/compiler-cli@20.0.6(@angular/compiler@20.0.6)(typescript@5.8.3))(@angular/compiler@20.0.6)(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@20.0.6(@angular/common@20.0.6(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)))(@types/node@24.0.10)(chokidar@4.0.3)(jiti@2.4.2)(karma@6.4.4)(less@4.3.0)(postcss@8.5.6)(terser@5.39.1)(tslib@2.8.1)(tsx@4.20.3)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@ampproject/remapping': 2.3.0
|
'@ampproject/remapping': 2.3.0
|
||||||
'@angular-devkit/architect': 0.2000.5(chokidar@4.0.3)
|
'@angular-devkit/architect': 0.2000.5(chokidar@4.0.3)
|
||||||
@ -4291,7 +4351,7 @@ snapshots:
|
|||||||
'@babel/helper-annotate-as-pure': 7.27.1
|
'@babel/helper-annotate-as-pure': 7.27.1
|
||||||
'@babel/helper-split-export-declaration': 7.24.7
|
'@babel/helper-split-export-declaration': 7.24.7
|
||||||
'@inquirer/confirm': 5.1.10(@types/node@24.0.10)
|
'@inquirer/confirm': 5.1.10(@types/node@24.0.10)
|
||||||
'@vitejs/plugin-basic-ssl': 2.0.0(vite@6.3.5(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1))
|
'@vitejs/plugin-basic-ssl': 2.0.0(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3))
|
||||||
beasties: 0.3.4
|
beasties: 0.3.4
|
||||||
browserslist: 4.25.1
|
browserslist: 4.25.1
|
||||||
esbuild: 0.25.5
|
esbuild: 0.25.5
|
||||||
@ -4311,7 +4371,7 @@ snapshots:
|
|||||||
tinyglobby: 0.2.13
|
tinyglobby: 0.2.13
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
vite: 6.3.5(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)
|
vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3)
|
||||||
watchpack: 2.4.2
|
watchpack: 2.4.2
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@angular/core': 20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)
|
'@angular/core': 20.0.6(@angular/compiler@20.0.6)(rxjs@7.8.2)(zone.js@0.15.1)
|
||||||
@ -4320,7 +4380,7 @@ snapshots:
|
|||||||
less: 4.3.0
|
less: 4.3.0
|
||||||
lmdb: 3.3.0
|
lmdb: 3.3.0
|
||||||
postcss: 8.5.6
|
postcss: 8.5.6
|
||||||
vitest: 3.2.4(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)
|
vitest: 3.2.4(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@types/node'
|
- '@types/node'
|
||||||
- chokidar
|
- chokidar
|
||||||
@ -4662,22 +4722,22 @@ snapshots:
|
|||||||
'@esbuild/win32-x64@0.25.5':
|
'@esbuild/win32-x64@0.25.5':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.30.1(jiti@1.21.7))':
|
'@eslint-community/eslint-plugin-eslint-comments@4.4.1(eslint@9.30.1(jiti@2.4.2))':
|
||||||
dependencies:
|
dependencies:
|
||||||
escape-string-regexp: 4.0.0
|
escape-string-regexp: 4.0.0
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
ignore: 5.3.2
|
ignore: 5.3.2
|
||||||
|
|
||||||
'@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@1.21.7))':
|
'@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@2.4.2))':
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
eslint-visitor-keys: 3.4.3
|
eslint-visitor-keys: 3.4.3
|
||||||
|
|
||||||
'@eslint-community/regexpp@4.12.1': {}
|
'@eslint-community/regexpp@4.12.1': {}
|
||||||
|
|
||||||
'@eslint/compat@1.2.4(eslint@9.30.1(jiti@1.21.7))':
|
'@eslint/compat@1.2.4(eslint@9.30.1(jiti@2.4.2))':
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
|
|
||||||
'@eslint/config-array@0.21.0':
|
'@eslint/config-array@0.21.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -5046,29 +5106,29 @@ snapshots:
|
|||||||
'@napi-rs/nice-win32-x64-msvc': 1.0.2
|
'@napi-rs/nice-win32-x64-msvc': 1.0.2
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@nhcarrigan/eslint-config@5.2.0(@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3))(eslint@9.30.1(jiti@1.21.7))(playwright@1.53.2)(react@19.1.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1))':
|
'@nhcarrigan/eslint-config@5.2.0(@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(playwright@1.53.2)(react@19.1.0)(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.30.1(jiti@1.21.7))
|
'@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.30.1(jiti@2.4.2))
|
||||||
'@eslint/compat': 1.2.4(eslint@9.30.1(jiti@1.21.7))
|
'@eslint/compat': 1.2.4(eslint@9.30.1(jiti@2.4.2))
|
||||||
'@eslint/eslintrc': 3.2.0
|
'@eslint/eslintrc': 3.2.0
|
||||||
'@eslint/js': 9.17.0
|
'@eslint/js': 9.17.0
|
||||||
'@stylistic/eslint-plugin': 2.12.1(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)
|
'@stylistic/eslint-plugin': 2.12.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||||
'@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3))(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)
|
'@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||||
'@typescript-eslint/parser': 8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)
|
'@typescript-eslint/parser': 8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||||
'@vitest/eslint-plugin': 1.1.24(@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3))(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1))
|
'@vitest/eslint-plugin': 1.1.24(@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3))
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
eslint-plugin-deprecation: 3.0.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)
|
eslint-plugin-deprecation: 3.0.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||||
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3))(eslint@9.30.1(jiti@1.21.7))
|
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))
|
||||||
eslint-plugin-jsdoc: 50.6.1(eslint@9.30.1(jiti@1.21.7))
|
eslint-plugin-jsdoc: 50.6.1(eslint@9.30.1(jiti@2.4.2))
|
||||||
eslint-plugin-playwright: 2.1.0(eslint@9.30.1(jiti@1.21.7))
|
eslint-plugin-playwright: 2.1.0(eslint@9.30.1(jiti@2.4.2))
|
||||||
eslint-plugin-react: 7.37.3(eslint@9.30.1(jiti@1.21.7))
|
eslint-plugin-react: 7.37.3(eslint@9.30.1(jiti@2.4.2))
|
||||||
eslint-plugin-sort-keys-fix: 1.1.2
|
eslint-plugin-sort-keys-fix: 1.1.2
|
||||||
eslint-plugin-unicorn: 56.0.1(eslint@9.30.1(jiti@1.21.7))
|
eslint-plugin-unicorn: 56.0.1(eslint@9.30.1(jiti@2.4.2))
|
||||||
globals: 15.14.0
|
globals: 15.14.0
|
||||||
playwright: 1.53.2
|
playwright: 1.53.2
|
||||||
react: 19.1.0
|
react: 19.1.0
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
vitest: 3.2.4(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)
|
vitest: 3.2.4(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@typescript-eslint/utils'
|
- '@typescript-eslint/utils'
|
||||||
- eslint-import-resolver-typescript
|
- eslint-import-resolver-typescript
|
||||||
@ -5218,6 +5278,36 @@ snapshots:
|
|||||||
|
|
||||||
'@pkgr/core@0.1.2': {}
|
'@pkgr/core@0.1.2': {}
|
||||||
|
|
||||||
|
'@prisma/client@6.11.1(prisma@6.11.1(typescript@5.8.3))(typescript@5.8.3)':
|
||||||
|
optionalDependencies:
|
||||||
|
prisma: 6.11.1(typescript@5.8.3)
|
||||||
|
typescript: 5.8.3
|
||||||
|
|
||||||
|
'@prisma/config@6.11.1':
|
||||||
|
dependencies:
|
||||||
|
jiti: 2.4.2
|
||||||
|
|
||||||
|
'@prisma/debug@6.11.1': {}
|
||||||
|
|
||||||
|
'@prisma/engines-version@6.11.1-1.f40f79ec31188888a2e33acda0ecc8fd10a853a9': {}
|
||||||
|
|
||||||
|
'@prisma/engines@6.11.1':
|
||||||
|
dependencies:
|
||||||
|
'@prisma/debug': 6.11.1
|
||||||
|
'@prisma/engines-version': 6.11.1-1.f40f79ec31188888a2e33acda0ecc8fd10a853a9
|
||||||
|
'@prisma/fetch-engine': 6.11.1
|
||||||
|
'@prisma/get-platform': 6.11.1
|
||||||
|
|
||||||
|
'@prisma/fetch-engine@6.11.1':
|
||||||
|
dependencies:
|
||||||
|
'@prisma/debug': 6.11.1
|
||||||
|
'@prisma/engines-version': 6.11.1-1.f40f79ec31188888a2e33acda0ecc8fd10a853a9
|
||||||
|
'@prisma/get-platform': 6.11.1
|
||||||
|
|
||||||
|
'@prisma/get-platform@6.11.1':
|
||||||
|
dependencies:
|
||||||
|
'@prisma/debug': 6.11.1
|
||||||
|
|
||||||
'@rollup/rollup-android-arm-eabi@4.40.2':
|
'@rollup/rollup-android-arm-eabi@4.40.2':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
@ -5382,10 +5472,10 @@ snapshots:
|
|||||||
|
|
||||||
'@socket.io/component-emitter@3.1.2': {}
|
'@socket.io/component-emitter@3.1.2': {}
|
||||||
|
|
||||||
'@stylistic/eslint-plugin@2.12.1(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)':
|
'@stylistic/eslint-plugin@2.12.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)
|
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
eslint-visitor-keys: 4.2.1
|
eslint-visitor-keys: 4.2.1
|
||||||
espree: 10.4.0
|
espree: 10.4.0
|
||||||
estraverse: 5.3.0
|
estraverse: 5.3.0
|
||||||
@ -5427,15 +5517,15 @@ snapshots:
|
|||||||
|
|
||||||
'@types/normalize-package-data@2.4.4': {}
|
'@types/normalize-package-data@2.4.4': {}
|
||||||
|
|
||||||
'@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3))(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)':
|
'@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/regexpp': 4.12.1
|
'@eslint-community/regexpp': 4.12.1
|
||||||
'@typescript-eslint/parser': 8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)
|
'@typescript-eslint/parser': 8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||||
'@typescript-eslint/scope-manager': 8.19.0
|
'@typescript-eslint/scope-manager': 8.19.0
|
||||||
'@typescript-eslint/type-utils': 8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)
|
'@typescript-eslint/type-utils': 8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||||
'@typescript-eslint/utils': 8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)
|
'@typescript-eslint/utils': 8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||||
'@typescript-eslint/visitor-keys': 8.19.0
|
'@typescript-eslint/visitor-keys': 8.19.0
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
graphemer: 1.4.0
|
graphemer: 1.4.0
|
||||||
ignore: 5.3.2
|
ignore: 5.3.2
|
||||||
natural-compare: 1.4.0
|
natural-compare: 1.4.0
|
||||||
@ -5444,14 +5534,14 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)':
|
'@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/scope-manager': 8.19.0
|
'@typescript-eslint/scope-manager': 8.19.0
|
||||||
'@typescript-eslint/types': 8.19.0
|
'@typescript-eslint/types': 8.19.0
|
||||||
'@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3)
|
'@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3)
|
||||||
'@typescript-eslint/visitor-keys': 8.19.0
|
'@typescript-eslint/visitor-keys': 8.19.0
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@ -5484,12 +5574,12 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
|
|
||||||
'@typescript-eslint/type-utils@8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)':
|
'@typescript-eslint/type-utils@8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3)
|
'@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3)
|
||||||
'@typescript-eslint/utils': 8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)
|
'@typescript-eslint/utils': 8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
ts-api-utils: 1.4.3(typescript@5.8.3)
|
ts-api-utils: 1.4.3(typescript@5.8.3)
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@ -5546,35 +5636,35 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/utils@7.18.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)':
|
'@typescript-eslint/utils@7.18.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@1.21.7))
|
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
|
||||||
'@typescript-eslint/scope-manager': 7.18.0
|
'@typescript-eslint/scope-manager': 7.18.0
|
||||||
'@typescript-eslint/types': 7.18.0
|
'@typescript-eslint/types': 7.18.0
|
||||||
'@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3)
|
'@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3)
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
- typescript
|
- typescript
|
||||||
|
|
||||||
'@typescript-eslint/utils@8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)':
|
'@typescript-eslint/utils@8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@1.21.7))
|
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
|
||||||
'@typescript-eslint/scope-manager': 8.19.0
|
'@typescript-eslint/scope-manager': 8.19.0
|
||||||
'@typescript-eslint/types': 8.19.0
|
'@typescript-eslint/types': 8.19.0
|
||||||
'@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3)
|
'@typescript-eslint/typescript-estree': 8.19.0(typescript@5.8.3)
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)':
|
'@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@1.21.7))
|
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
|
||||||
'@typescript-eslint/scope-manager': 8.35.1
|
'@typescript-eslint/scope-manager': 8.35.1
|
||||||
'@typescript-eslint/types': 8.35.1
|
'@typescript-eslint/types': 8.35.1
|
||||||
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
|
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@ -5594,17 +5684,17 @@ snapshots:
|
|||||||
'@typescript-eslint/types': 8.35.1
|
'@typescript-eslint/types': 8.35.1
|
||||||
eslint-visitor-keys: 4.2.1
|
eslint-visitor-keys: 4.2.1
|
||||||
|
|
||||||
'@vitejs/plugin-basic-ssl@2.0.0(vite@6.3.5(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1))':
|
'@vitejs/plugin-basic-ssl@2.0.0(vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
vite: 6.3.5(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)
|
vite: 6.3.5(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3)
|
||||||
|
|
||||||
'@vitest/eslint-plugin@1.1.24(@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3))(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1))':
|
'@vitest/eslint-plugin@1.1.24(@typescript-eslint/utils@8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)
|
'@typescript-eslint/utils': 8.35.1(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
vitest: 3.2.4(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)
|
vitest: 3.2.4(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3)
|
||||||
|
|
||||||
'@vitest/expect@3.2.4':
|
'@vitest/expect@3.2.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -5614,13 +5704,13 @@ snapshots:
|
|||||||
chai: 5.2.0
|
chai: 5.2.0
|
||||||
tinyrainbow: 2.0.0
|
tinyrainbow: 2.0.0
|
||||||
|
|
||||||
'@vitest/mocker@3.2.4(vite@7.0.1(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1))':
|
'@vitest/mocker@3.2.4(vite@7.0.1(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vitest/spy': 3.2.4
|
'@vitest/spy': 3.2.4
|
||||||
estree-walker: 3.0.3
|
estree-walker: 3.0.3
|
||||||
magic-string: 0.30.17
|
magic-string: 0.30.17
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
vite: 7.0.1(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)
|
vite: 7.0.1(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3)
|
||||||
|
|
||||||
'@vitest/pretty-format@3.2.4':
|
'@vitest/pretty-format@3.2.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -6359,27 +6449,27 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.1(jiti@1.21.7)):
|
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.1(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 3.2.7
|
debug: 3.2.7
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@typescript-eslint/parser': 8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)
|
'@typescript-eslint/parser': 8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
eslint-import-resolver-node: 0.3.9
|
eslint-import-resolver-node: 0.3.9
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
eslint-plugin-deprecation@3.0.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3):
|
eslint-plugin-deprecation@3.0.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/utils': 7.18.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)
|
'@typescript-eslint/utils': 7.18.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
ts-api-utils: 1.4.3(typescript@5.8.3)
|
ts-api-utils: 1.4.3(typescript@5.8.3)
|
||||||
tslib: 2.8.1
|
tslib: 2.8.1
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3))(eslint@9.30.1(jiti@1.21.7)):
|
eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@rtsao/scc': 1.1.0
|
'@rtsao/scc': 1.1.0
|
||||||
array-includes: 3.1.9
|
array-includes: 3.1.9
|
||||||
@ -6388,9 +6478,9 @@ snapshots:
|
|||||||
array.prototype.flatmap: 1.3.3
|
array.prototype.flatmap: 1.3.3
|
||||||
debug: 3.2.7
|
debug: 3.2.7
|
||||||
doctrine: 2.1.0
|
doctrine: 2.1.0
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
eslint-import-resolver-node: 0.3.9
|
eslint-import-resolver-node: 0.3.9
|
||||||
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.1(jiti@1.21.7))
|
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.30.1(jiti@2.4.2))
|
||||||
hasown: 2.0.2
|
hasown: 2.0.2
|
||||||
is-core-module: 2.16.1
|
is-core-module: 2.16.1
|
||||||
is-glob: 4.0.3
|
is-glob: 4.0.3
|
||||||
@ -6402,20 +6492,20 @@ snapshots:
|
|||||||
string.prototype.trimend: 1.0.9
|
string.prototype.trimend: 1.0.9
|
||||||
tsconfig-paths: 3.15.0
|
tsconfig-paths: 3.15.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@typescript-eslint/parser': 8.19.0(eslint@9.30.1(jiti@1.21.7))(typescript@5.8.3)
|
'@typescript-eslint/parser': 8.19.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- eslint-import-resolver-typescript
|
- eslint-import-resolver-typescript
|
||||||
- eslint-import-resolver-webpack
|
- eslint-import-resolver-webpack
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
eslint-plugin-jsdoc@50.6.1(eslint@9.30.1(jiti@1.21.7)):
|
eslint-plugin-jsdoc@50.6.1(eslint@9.30.1(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@es-joy/jsdoccomment': 0.49.0
|
'@es-joy/jsdoccomment': 0.49.0
|
||||||
are-docs-informative: 0.0.2
|
are-docs-informative: 0.0.2
|
||||||
comment-parser: 1.4.1
|
comment-parser: 1.4.1
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
escape-string-regexp: 4.0.0
|
escape-string-regexp: 4.0.0
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
espree: 10.4.0
|
espree: 10.4.0
|
||||||
esquery: 1.6.0
|
esquery: 1.6.0
|
||||||
parse-imports: 2.2.1
|
parse-imports: 2.2.1
|
||||||
@ -6425,12 +6515,12 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
eslint-plugin-playwright@2.1.0(eslint@9.30.1(jiti@1.21.7)):
|
eslint-plugin-playwright@2.1.0(eslint@9.30.1(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
globals: 13.24.0
|
globals: 13.24.0
|
||||||
|
|
||||||
eslint-plugin-react@7.37.3(eslint@9.30.1(jiti@1.21.7)):
|
eslint-plugin-react@7.37.3(eslint@9.30.1(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
array-includes: 3.1.9
|
array-includes: 3.1.9
|
||||||
array.prototype.findlast: 1.2.5
|
array.prototype.findlast: 1.2.5
|
||||||
@ -6438,7 +6528,7 @@ snapshots:
|
|||||||
array.prototype.tosorted: 1.1.4
|
array.prototype.tosorted: 1.1.4
|
||||||
doctrine: 2.1.0
|
doctrine: 2.1.0
|
||||||
es-iterator-helpers: 1.2.1
|
es-iterator-helpers: 1.2.1
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
estraverse: 5.3.0
|
estraverse: 5.3.0
|
||||||
hasown: 2.0.2
|
hasown: 2.0.2
|
||||||
jsx-ast-utils: 3.3.5
|
jsx-ast-utils: 3.3.5
|
||||||
@ -6459,14 +6549,14 @@ snapshots:
|
|||||||
natural-compare: 1.4.0
|
natural-compare: 1.4.0
|
||||||
requireindex: 1.2.0
|
requireindex: 1.2.0
|
||||||
|
|
||||||
eslint-plugin-unicorn@56.0.1(eslint@9.30.1(jiti@1.21.7)):
|
eslint-plugin-unicorn@56.0.1(eslint@9.30.1(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/helper-validator-identifier': 7.27.1
|
'@babel/helper-validator-identifier': 7.27.1
|
||||||
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@1.21.7))
|
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
|
||||||
ci-info: 4.2.0
|
ci-info: 4.2.0
|
||||||
clean-regexp: 1.0.0
|
clean-regexp: 1.0.0
|
||||||
core-js-compat: 3.43.0
|
core-js-compat: 3.43.0
|
||||||
eslint: 9.30.1(jiti@1.21.7)
|
eslint: 9.30.1(jiti@2.4.2)
|
||||||
esquery: 1.6.0
|
esquery: 1.6.0
|
||||||
globals: 15.14.0
|
globals: 15.14.0
|
||||||
indent-string: 4.0.0
|
indent-string: 4.0.0
|
||||||
@ -6490,9 +6580,9 @@ snapshots:
|
|||||||
|
|
||||||
eslint-visitor-keys@4.2.1: {}
|
eslint-visitor-keys@4.2.1: {}
|
||||||
|
|
||||||
eslint@9.30.1(jiti@1.21.7):
|
eslint@9.30.1(jiti@2.4.2):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@1.21.7))
|
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
|
||||||
'@eslint-community/regexpp': 4.12.1
|
'@eslint-community/regexpp': 4.12.1
|
||||||
'@eslint/config-array': 0.21.0
|
'@eslint/config-array': 0.21.0
|
||||||
'@eslint/config-helpers': 0.3.0
|
'@eslint/config-helpers': 0.3.0
|
||||||
@ -6528,7 +6618,7 @@ snapshots:
|
|||||||
natural-compare: 1.4.0
|
natural-compare: 1.4.0
|
||||||
optionator: 0.9.4
|
optionator: 0.9.4
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
jiti: 1.21.7
|
jiti: 2.4.2
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@ -6754,6 +6844,10 @@ snapshots:
|
|||||||
es-errors: 1.3.0
|
es-errors: 1.3.0
|
||||||
get-intrinsic: 1.3.0
|
get-intrinsic: 1.3.0
|
||||||
|
|
||||||
|
get-tsconfig@4.10.1:
|
||||||
|
dependencies:
|
||||||
|
resolve-pkg-maps: 1.0.0
|
||||||
|
|
||||||
glob-parent@5.1.2:
|
glob-parent@5.1.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-glob: 4.0.3
|
is-glob: 4.0.3
|
||||||
@ -7132,8 +7226,7 @@ snapshots:
|
|||||||
|
|
||||||
jasmine-core@5.8.0: {}
|
jasmine-core@5.8.0: {}
|
||||||
|
|
||||||
jiti@1.21.7:
|
jiti@2.4.2: {}
|
||||||
optional: true
|
|
||||||
|
|
||||||
js-tokens@4.0.0: {}
|
js-tokens@4.0.0: {}
|
||||||
|
|
||||||
@ -7838,6 +7931,13 @@ snapshots:
|
|||||||
|
|
||||||
prelude-ls@1.2.1: {}
|
prelude-ls@1.2.1: {}
|
||||||
|
|
||||||
|
prisma@6.11.1(typescript@5.8.3):
|
||||||
|
dependencies:
|
||||||
|
'@prisma/config': 6.11.1
|
||||||
|
'@prisma/engines': 6.11.1
|
||||||
|
optionalDependencies:
|
||||||
|
typescript: 5.8.3
|
||||||
|
|
||||||
proc-log@5.0.0: {}
|
proc-log@5.0.0: {}
|
||||||
|
|
||||||
process-warning@4.0.1: {}
|
process-warning@4.0.1: {}
|
||||||
@ -7944,6 +8044,8 @@ snapshots:
|
|||||||
|
|
||||||
resolve-from@4.0.0: {}
|
resolve-from@4.0.0: {}
|
||||||
|
|
||||||
|
resolve-pkg-maps@1.0.0: {}
|
||||||
|
|
||||||
resolve@1.22.10:
|
resolve@1.22.10:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-core-module: 2.16.1
|
is-core-module: 2.16.1
|
||||||
@ -8452,6 +8554,13 @@ snapshots:
|
|||||||
|
|
||||||
tslib@2.8.1: {}
|
tslib@2.8.1: {}
|
||||||
|
|
||||||
|
tsx@4.20.3:
|
||||||
|
dependencies:
|
||||||
|
esbuild: 0.25.5
|
||||||
|
get-tsconfig: 4.10.1
|
||||||
|
optionalDependencies:
|
||||||
|
fsevents: 2.3.3
|
||||||
|
|
||||||
tuf-js@3.1.0:
|
tuf-js@3.1.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tufjs/models': 3.0.1
|
'@tufjs/models': 3.0.1
|
||||||
@ -8583,13 +8692,13 @@ snapshots:
|
|||||||
|
|
||||||
vary@1.1.2: {}
|
vary@1.1.2: {}
|
||||||
|
|
||||||
vite-node@3.2.4(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1):
|
vite-node@3.2.4(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
cac: 6.7.14
|
cac: 6.7.14
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
es-module-lexer: 1.7.0
|
es-module-lexer: 1.7.0
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
vite: 7.0.1(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)
|
vite: 7.0.1(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@types/node'
|
- '@types/node'
|
||||||
- jiti
|
- jiti
|
||||||
@ -8604,7 +8713,7 @@ snapshots:
|
|||||||
- tsx
|
- tsx
|
||||||
- yaml
|
- yaml
|
||||||
|
|
||||||
vite@6.3.5(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1):
|
vite@6.3.5(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild: 0.25.5
|
esbuild: 0.25.5
|
||||||
fdir: 6.4.6(picomatch@4.0.2)
|
fdir: 6.4.6(picomatch@4.0.2)
|
||||||
@ -8615,12 +8724,13 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@types/node': 24.0.10
|
'@types/node': 24.0.10
|
||||||
fsevents: 2.3.3
|
fsevents: 2.3.3
|
||||||
jiti: 1.21.7
|
jiti: 2.4.2
|
||||||
less: 4.3.0
|
less: 4.3.0
|
||||||
sass: 1.88.0
|
sass: 1.88.0
|
||||||
terser: 5.39.1
|
terser: 5.39.1
|
||||||
|
tsx: 4.20.3
|
||||||
|
|
||||||
vite@7.0.1(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1):
|
vite@7.0.1(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild: 0.25.5
|
esbuild: 0.25.5
|
||||||
fdir: 6.4.6(picomatch@4.0.2)
|
fdir: 6.4.6(picomatch@4.0.2)
|
||||||
@ -8631,16 +8741,17 @@ snapshots:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@types/node': 24.0.10
|
'@types/node': 24.0.10
|
||||||
fsevents: 2.3.3
|
fsevents: 2.3.3
|
||||||
jiti: 1.21.7
|
jiti: 2.4.2
|
||||||
less: 4.3.0
|
less: 4.3.0
|
||||||
sass: 1.88.0
|
sass: 1.88.0
|
||||||
terser: 5.39.1
|
terser: 5.39.1
|
||||||
|
tsx: 4.20.3
|
||||||
|
|
||||||
vitest@3.2.4(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1):
|
vitest@3.2.4(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/chai': 5.2.2
|
'@types/chai': 5.2.2
|
||||||
'@vitest/expect': 3.2.4
|
'@vitest/expect': 3.2.4
|
||||||
'@vitest/mocker': 3.2.4(vite@7.0.1(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1))
|
'@vitest/mocker': 3.2.4(vite@7.0.1(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3))
|
||||||
'@vitest/pretty-format': 3.2.4
|
'@vitest/pretty-format': 3.2.4
|
||||||
'@vitest/runner': 3.2.4
|
'@vitest/runner': 3.2.4
|
||||||
'@vitest/snapshot': 3.2.4
|
'@vitest/snapshot': 3.2.4
|
||||||
@ -8658,8 +8769,8 @@ snapshots:
|
|||||||
tinyglobby: 0.2.14
|
tinyglobby: 0.2.14
|
||||||
tinypool: 1.1.1
|
tinypool: 1.1.1
|
||||||
tinyrainbow: 2.0.0
|
tinyrainbow: 2.0.0
|
||||||
vite: 7.0.1(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)
|
vite: 7.0.1(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3)
|
||||||
vite-node: 3.2.4(@types/node@24.0.10)(jiti@1.21.7)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)
|
vite-node: 3.2.4(@types/node@24.0.10)(jiti@2.4.2)(less@4.3.0)(sass@1.88.0)(terser@5.39.1)(tsx@4.20.3)
|
||||||
why-is-node-running: 2.3.0
|
why-is-node-running: 2.3.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@types/node': 24.0.10
|
'@types/node': 24.0.10
|
||||||
|
5
server/dev.env
Normal file
5
server/dev.env
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
LOG_TOKEN="op://Environment Variables - Naomi/Alert Server/api_auth"
|
||||||
|
MONGO_URI="op://Environment Variables - Naomi/Hikari/mongo_uri"
|
||||||
|
DISCORD_TOKEN="op://Environment Variables - Naomi/Hikari/discord_token"
|
||||||
|
FORUM_API_KEY="op://Environment Variables - Naomi/Hikari/discourse_key"
|
||||||
|
ANNOUNCEMENT_TOKEN="op://Environment Variables - Naomi/Hikari/announcement_token"
|
@ -1,5 +1,18 @@
|
|||||||
import NaomisConfig from '@nhcarrigan/eslint-config';
|
import NaomisConfig from '@nhcarrigan/eslint-config';
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
...NaomisConfig
|
...NaomisConfig,
|
||||||
|
{
|
||||||
|
files: ["src/routes/*.ts"],
|
||||||
|
rules: {
|
||||||
|
"max-lines-per-function": "off",
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
files: ["src/routes/*.ts"],
|
||||||
|
rules: {
|
||||||
|
// We turn this off so we can use the async plugin syntax without needing to await.
|
||||||
|
"@typescript-eslint/require-await": "off",
|
||||||
|
}
|
||||||
|
}
|
||||||
]
|
]
|
@ -6,6 +6,7 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "eslint ./src --max-warnings 0",
|
"lint": "eslint ./src --max-warnings 0",
|
||||||
|
"dev": "op run --env-file=./dev.env -- tsx watch ./src/index.ts",
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"start": "op run --env-file=./prod.env -- node ./prod/index.js",
|
"start": "op run --env-file=./prod.env -- node ./prod/index.js",
|
||||||
"test": "echo 'No tests yet' && exit 0"
|
"test": "echo 'No tests yet' && exit 0"
|
||||||
@ -16,9 +17,12 @@
|
|||||||
"packageManager": "pnpm@10.12.3",
|
"packageManager": "pnpm@10.12.3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nhcarrigan/logger": "1.0.0",
|
"@nhcarrigan/logger": "1.0.0",
|
||||||
|
"@prisma/client": "6.11.1",
|
||||||
"fastify": "5.4.0"
|
"fastify": "5.4.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "24.0.10"
|
"@types/node": "24.0.10",
|
||||||
|
"prisma": "6.11.1",
|
||||||
|
"tsx": "4.20.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
19
server/prisma/schema.prisma
Normal file
19
server/prisma/schema.prisma
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
// This is your Prisma schema file,
|
||||||
|
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
||||||
|
|
||||||
|
generator client {
|
||||||
|
provider = "prisma-client-js"
|
||||||
|
}
|
||||||
|
|
||||||
|
datasource db {
|
||||||
|
provider = "mongodb"
|
||||||
|
url = env("MONGO_URI")
|
||||||
|
}
|
||||||
|
|
||||||
|
model Announcements {
|
||||||
|
id String @id @default(auto()) @map("_id") @db.ObjectId
|
||||||
|
title String
|
||||||
|
content String
|
||||||
|
type String
|
||||||
|
createdAt DateTime @default(now()) @unique
|
||||||
|
}
|
@ -1 +1,5 @@
|
|||||||
LOG_TOKEN="op://Environment Variables - Naomi/Alert Server/api_auth"
|
LOG_TOKEN="op://Environment Variables - Naomi/Alert Server/api_auth"
|
||||||
|
MONGO_URI="op://Environment Variables - Naomi/Hikari/mongo_uri"
|
||||||
|
DISCORD_TOKEN="op://Environment Variables - Naomi/Hikari/discord_token"
|
||||||
|
FORUM_API_KEY="op://Environment Variables - Naomi/Hikari/discourse_key"
|
||||||
|
ANNOUNCEMENT_TOKEN="op://Environment Variables - Naomi/Hikari/announcement_token"
|
15
server/src/config/routesWithoutCors.ts
Normal file
15
server/src/config/routesWithoutCors.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/**
|
||||||
|
* @copyright nhcarrigan
|
||||||
|
* @license Naomi's Public License
|
||||||
|
* @author Naomi Carrigan
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If you want a route to allow any origin for CORS, add
|
||||||
|
* the full path to this array.
|
||||||
|
*/
|
||||||
|
export const routesWithoutCors = [
|
||||||
|
"/",
|
||||||
|
"/announcement",
|
||||||
|
"/health",
|
||||||
|
];
|
24
server/src/db/database.ts
Normal file
24
server/src/db/database.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/**
|
||||||
|
* @copyright nhcarrigan
|
||||||
|
* @license Naomi's Public License
|
||||||
|
* @author Naomi Carrigan
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { PrismaClient } from "@prisma/client";
|
||||||
|
|
||||||
|
class Database {
|
||||||
|
private readonly instance: PrismaClient;
|
||||||
|
|
||||||
|
public constructor() {
|
||||||
|
this.instance = new PrismaClient();
|
||||||
|
void this.instance.$connect();
|
||||||
|
}
|
||||||
|
|
||||||
|
public getInstance(): PrismaClient {
|
||||||
|
return this.instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const database = new Database();
|
||||||
|
|
||||||
|
export { database };
|
28
server/src/hooks/cors.ts
Normal file
28
server/src/hooks/cors.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* @copyright nhcarrigan
|
||||||
|
* @license Naomi's Public License
|
||||||
|
* @author Naomi Carrigan
|
||||||
|
*/
|
||||||
|
|
||||||
|
import type { onRequestHookHandler } from "fastify";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures that form submissions only come from our web application.
|
||||||
|
* @param request - The request payload from the server.
|
||||||
|
* @param response - The reply handler from Fastify.
|
||||||
|
* @returns A Fastify reply if the request is invalid, otherwise undefined.
|
||||||
|
*/
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises -- For reasons I cannot comprehend, Fastify seems to require us to return a request?
|
||||||
|
export const corsHook: onRequestHookHandler = async(request, response) => {
|
||||||
|
if (!request.url.startsWith("/submit")) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
if (request.headers.origin !== "https://forms.nhcarrigan.com") {
|
||||||
|
return await response.
|
||||||
|
status(403).
|
||||||
|
send({
|
||||||
|
error: "Forms can only be submitted through our website. Thanks.",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
};
|
@ -5,19 +5,19 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import fastify from "fastify";
|
import fastify from "fastify";
|
||||||
|
import { corsHook } from "./hooks/cors.js";
|
||||||
|
import { announcementRoutes } from "./routes/announcement.js";
|
||||||
|
import { baseRoutes } from "./routes/base.js";
|
||||||
import { logger } from "./utils/logger.js";
|
import { logger } from "./utils/logger.js";
|
||||||
|
|
||||||
const server = fastify({
|
const server = fastify({
|
||||||
logger: false,
|
logger: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
server.get("/", async(_request, reply) => {
|
server.addHook("preHandler", corsHook);
|
||||||
reply.redirect("https://hikari.nhcarrigan.com");
|
|
||||||
});
|
|
||||||
|
|
||||||
server.get("/health", async(_request, reply) => {
|
server.register(baseRoutes);
|
||||||
reply.status(200).send("OK~!");
|
server.register(announcementRoutes);
|
||||||
});
|
|
||||||
|
|
||||||
server.listen({ port: 20_000 }, (error) => {
|
server.listen({ port: 20_000 }, (error) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
|
65
server/src/modules/announceOnDiscord.ts
Normal file
65
server/src/modules/announceOnDiscord.ts
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/**
|
||||||
|
* @copyright nhcarrigan
|
||||||
|
* @license Naomi's Public License
|
||||||
|
* @author Naomi Carrigan
|
||||||
|
*/
|
||||||
|
/* eslint-disable @typescript-eslint/naming-convention -- we are making raw API calls. */
|
||||||
|
|
||||||
|
const channelIds = {
|
||||||
|
community: "1386105484313886820",
|
||||||
|
products: "1386105452881776661",
|
||||||
|
} as const;
|
||||||
|
const roleIds = {
|
||||||
|
community: "1386107941224054895",
|
||||||
|
products: "1386107909699666121",
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forwards an announcement to our Discord server.
|
||||||
|
* @param title - The title of the announcement.
|
||||||
|
* @param content - The main body of the announcement.
|
||||||
|
* @param type - Whether the announcement is for a product or community.
|
||||||
|
* @returns A message indicating the success or failure of the operation.
|
||||||
|
*/
|
||||||
|
export const announceOnDiscord = async(
|
||||||
|
title: string,
|
||||||
|
content: string,
|
||||||
|
type: "products" | "community",
|
||||||
|
): Promise<string> => {
|
||||||
|
const messageRequest = await fetch(
|
||||||
|
`https://discord.com/api/v10/channels/${channelIds[type]}/messages`,
|
||||||
|
{
|
||||||
|
body: JSON.stringify({
|
||||||
|
allowed_mentions: { parse: [ "users", "roles" ] },
|
||||||
|
content: `# ${title}\n\n${content}\n-# <@&${roleIds[type]}>`,
|
||||||
|
}),
|
||||||
|
headers: {
|
||||||
|
"Authorization": `Bot ${process.env.DISCORD_TOKEN ?? ""}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
method: "POST",
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (messageRequest.status !== 200) {
|
||||||
|
return "Failed to send message to Discord.";
|
||||||
|
}
|
||||||
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- fetch does not accept generics.
|
||||||
|
const message = await messageRequest.json() as { id?: string };
|
||||||
|
if (message.id === undefined) {
|
||||||
|
return "Failed to parse message ID, cannot crosspost.";
|
||||||
|
}
|
||||||
|
const crosspostRequest = await fetch(
|
||||||
|
`https://discord.com/api/v10/channels/${channelIds[type]}/messages/${message.id}/crosspost`,
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
"Authorization": `Bot ${process.env.DISCORD_TOKEN ?? ""}`,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
method: "POST",
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (!crosspostRequest.ok) {
|
||||||
|
return "Failed to crosspost message to Discord.";
|
||||||
|
}
|
||||||
|
return "Successfully sent and published message to Discord.";
|
||||||
|
};
|
40
server/src/modules/announceOnForum.ts
Normal file
40
server/src/modules/announceOnForum.ts
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/**
|
||||||
|
* @copyright nhcarrigan
|
||||||
|
* @license Naomi's Public License
|
||||||
|
* @author Naomi Carrigan
|
||||||
|
*/
|
||||||
|
/* eslint-disable @typescript-eslint/naming-convention -- we are making raw API calls. */
|
||||||
|
/**
|
||||||
|
* Forwards an announcement to our Discord server.
|
||||||
|
* @param title - The title of the announcement.
|
||||||
|
* @param content - The main body of the announcement.
|
||||||
|
* @param type - Whether the announcement is for a product or community.
|
||||||
|
* @returns A message indicating the success or failure of the operation.
|
||||||
|
*/
|
||||||
|
export const announceOnForum = async(
|
||||||
|
title: string,
|
||||||
|
content: string,
|
||||||
|
type: "products" | "community",
|
||||||
|
): Promise<string> => {
|
||||||
|
const forumRequest = await fetch(
|
||||||
|
`https://forum.nhcarrigan.com/posts.json`,
|
||||||
|
{
|
||||||
|
body: JSON.stringify({
|
||||||
|
category: 14,
|
||||||
|
raw: content,
|
||||||
|
tags: [ type ],
|
||||||
|
title: title,
|
||||||
|
}),
|
||||||
|
headers: {
|
||||||
|
"Api-Key": process.env.FORUM_API_KEY ?? "",
|
||||||
|
"Api-Username": "Hikari",
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
method: "POST",
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (forumRequest.status !== 200) {
|
||||||
|
return "Failed to send message to forum.";
|
||||||
|
}
|
||||||
|
return "Successfully sent message to forum.";
|
||||||
|
};
|
95
server/src/routes/announcement.ts
Normal file
95
server/src/routes/announcement.ts
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/**
|
||||||
|
* @copyright nhcarrigan
|
||||||
|
* @license Naomi's Public License
|
||||||
|
* @author Naomi Carrigan
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { database } from "../db/database.js";
|
||||||
|
import { announceOnDiscord } from "../modules/announceOnDiscord.js";
|
||||||
|
import { announceOnForum } from "../modules/announceOnForum.js";
|
||||||
|
import type { FastifyPluginAsync } from "fastify";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mounts the entry routes for the application. These routes
|
||||||
|
* should not require CORS, as they are used by external services
|
||||||
|
* such as our uptime monitor.
|
||||||
|
* @param server - The Fastify server instance.
|
||||||
|
*/
|
||||||
|
export const announcementRoutes: FastifyPluginAsync = async(server) => {
|
||||||
|
server.get("/announcements", async(_request, reply) => {
|
||||||
|
const announcements = await database.getInstance().announcements.findMany({
|
||||||
|
orderBy: {
|
||||||
|
createdAt: "desc",
|
||||||
|
},
|
||||||
|
take: 10,
|
||||||
|
});
|
||||||
|
return await reply.status(200).type("application/json").
|
||||||
|
send(announcements);
|
||||||
|
});
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/naming-convention -- Fastify requires Body instead of body.
|
||||||
|
server.post<{ Body: { title: string; content: string; type: string } }>(
|
||||||
|
"/announcement",
|
||||||
|
// eslint-disable-next-line complexity -- This is a complex route, but it is necessary to validate the announcement.
|
||||||
|
async(request, reply) => {
|
||||||
|
const token = request.headers.authorization;
|
||||||
|
if (token === undefined || token !== process.env.ANNOUNCEMENT_TOKEN) {
|
||||||
|
return await reply.status(401).send({
|
||||||
|
error:
|
||||||
|
// eslint-disable-next-line stylistic/max-len -- Big boi string.
|
||||||
|
"This endpoint requires a special auth token. If you believe you should have access, please contact Naomi.",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const { title, content, type } = request.body;
|
||||||
|
if (
|
||||||
|
typeof title !== "string"
|
||||||
|
|| typeof content !== "string"
|
||||||
|
|| typeof type !== "string"
|
||||||
|
|| title.length === 0
|
||||||
|
|| content.length === 0
|
||||||
|
|| type.length === 0
|
||||||
|
) {
|
||||||
|
return await reply.status(400).send({
|
||||||
|
error: "Missing required fields.",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (title.length < 20) {
|
||||||
|
return await reply.status(400).send({
|
||||||
|
error:
|
||||||
|
// eslint-disable-next-line stylistic/max-len -- Big boi string.
|
||||||
|
"Title must be at least 20 characters long so that it may be posted on our forum.",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (content.length < 50) {
|
||||||
|
return await reply.status(400).send({
|
||||||
|
error:
|
||||||
|
// eslint-disable-next-line stylistic/max-len -- Big boi string.
|
||||||
|
"Content must be at least 50 characters long so that it may be posted on our forum.",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type !== "products" && type !== "community") {
|
||||||
|
return await reply.status(400).send({
|
||||||
|
error: "Invalid announcement type.",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
await database.getInstance().announcements.create({
|
||||||
|
data: {
|
||||||
|
content,
|
||||||
|
title,
|
||||||
|
type,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const discord = await announceOnDiscord(title, content, type);
|
||||||
|
const forum = await announceOnForum(title, content, type);
|
||||||
|
return await reply.status(201).send({
|
||||||
|
message: `Announcement processed. Discord: ${discord}, Forum: ${forum}`,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
);
|
||||||
|
};
|
23
server/src/routes/base.ts
Normal file
23
server/src/routes/base.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* @copyright nhcarrigan
|
||||||
|
* @license Naomi's Public License
|
||||||
|
* @author Naomi Carrigan
|
||||||
|
*/
|
||||||
|
|
||||||
|
import type { FastifyPluginAsync } from "fastify";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mounts the entry routes for the application. These routes
|
||||||
|
* should not require CORS, as they are used by external services
|
||||||
|
* such as our uptime monitor.
|
||||||
|
* @param server - The Fastify server instance.
|
||||||
|
*/
|
||||||
|
export const baseRoutes: FastifyPluginAsync = async(server) => {
|
||||||
|
server.get("/", async(_request, reply) => {
|
||||||
|
return await reply.redirect("https://hikari.nhcarrigan.com");
|
||||||
|
});
|
||||||
|
|
||||||
|
server.get("/health", async(_request, reply) => {
|
||||||
|
return await reply.status(200).send("OK~!");
|
||||||
|
});
|
||||||
|
};
|
Reference in New Issue
Block a user