Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
M
meanspec-backend
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Operate
Environments
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
MeanSpec (SCE338 2024-2 Group 1)
meanspec-backend
Commits
909292a2
Commit
909292a2
authored
7 months ago
by
Lee WooChang
Browse files
Options
Downloads
Patches
Plain Diff
feat: auth 서비스에 Redis 적용
parent
2a58eebe
No related branches found
No related tags found
1 merge request
!9
Auth 서비스에 Redis 적용
Pipeline
#10521
passed
7 months ago
Stage: test
Changes
4
Pipelines
1
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
package-lock.json
+280
-267
280 additions, 267 deletions
package-lock.json
src/routes/auth.js
+4
-8
4 additions, 8 deletions
src/routes/auth.js
src/services/authService.js
+31
-6
31 additions, 6 deletions
src/services/authService.js
yarn.lock
+402
-486
402 additions, 486 deletions
yarn.lock
with
717 additions
and
767 deletions
package-lock.json
+
280
−
267
View file @
909292a2
...
@@ -13,13 +13,13 @@
...
@@ -13,13 +13,13 @@
"dotenv"
:
"^16.4.5"
,
"dotenv"
:
"^16.4.5"
,
"express"
:
"^4.21.1"
,
"express"
:
"^4.21.1"
,
"jsonwebtoken"
:
"^9.0.2"
,
"jsonwebtoken"
:
"^9.0.2"
,
"
nodemailer
"
:
"^
6.9
.1
6
"
,
"
pg
"
:
"^
8.13
.1"
,
"
pg"
:
"^8.13.1
"
"
redis"
:
"^4.7.0
"
},
},
"devDependencies"
:
{
"devDependencies"
:
{
"@eslint/js"
:
"^9.15.0"
,
"@eslint/js"
:
"^9.15.0"
,
"@types/pg"
:
"^8.11.10"
,
"@types/pg"
:
"^8.11.10"
,
"eslint"
:
"^
8.57.1
"
,
"eslint"
:
"^
9.15.0
"
,
"eslint-config-airbnb-base"
:
"^15.0.0"
,
"eslint-config-airbnb-base"
:
"^15.0.0"
,
"eslint-config-prettier"
:
"^9.1.0"
,
"eslint-config-prettier"
:
"^9.1.0"
,
"eslint-plugin-import"
:
"^2.31.0"
,
"eslint-plugin-import"
:
"^2.31.0"
,
...
@@ -57,17 +57,42 @@
...
@@ -57,17 +57,42 @@
"node"
:
"^12.0.0 || ^14.0.0 || >=16.0.0"
"node"
:
"^12.0.0 || ^14.0.0 || >=16.0.0"
}
}
},
},
"node_modules/@eslint/config-array"
:
{
"version"
:
"0.19.0"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.0.tgz"
,
"integrity"
:
"sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"dependencies"
:
{
"@eslint/object-schema"
:
"^2.1.4"
,
"debug"
:
"^4.3.1"
,
"minimatch"
:
"^3.1.2"
},
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/core"
:
{
"version"
:
"0.9.0"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz"
,
"integrity"
:
"sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/eslintrc"
:
{
"node_modules/@eslint/eslintrc"
:
{
"version"
:
"
2.1.4
"
,
"version"
:
"
3.2.0
"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-
2.1.4
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-
3.2.0
.tgz"
,
"integrity"
:
"sha512-
269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ
=="
,
"integrity"
:
"sha512-
grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w
=="
,
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"MIT"
,
"license"
:
"MIT"
,
"dependencies"
:
{
"dependencies"
:
{
"ajv"
:
"^6.12.4"
,
"ajv"
:
"^6.12.4"
,
"debug"
:
"^4.3.2"
,
"debug"
:
"^4.3.2"
,
"espree"
:
"^
9.6.0
"
,
"espree"
:
"^
10.0.1
"
,
"globals"
:
"^1
3.19
.0"
,
"globals"
:
"^1
4.0
.0"
,
"ignore"
:
"^5.2.0"
,
"ignore"
:
"^5.2.0"
,
"import-fresh"
:
"^3.2.1"
,
"import-fresh"
:
"^3.2.1"
,
"js-yaml"
:
"^4.1.0"
,
"js-yaml"
:
"^4.1.0"
,
...
@@ -75,52 +100,94 @@
...
@@ -75,52 +100,94 @@
"strip-json-comments"
:
"^3.1.1"
"strip-json-comments"
:
"^3.1.1"
},
},
"engines"
:
{
"engines"
:
{
"node"
:
"^1
2.22
.0 || ^
14.17
.0 || >=
16.0
.0"
"node"
:
"^1
8.18
.0 || ^
20.9
.0 || >=
21.1
.0"
},
},
"funding"
:
{
"funding"
:
{
"url"
:
"https://opencollective.com/eslint"
"url"
:
"https://opencollective.com/eslint"
}
}
},
},
"node_modules/@eslint/eslintrc/node_modules/globals"
:
{
"node_modules/@eslint/eslintrc/node_modules/globals"
:
{
"version"
:
"1
3.24
.0"
,
"version"
:
"1
4.0
.0"
,
"resolved"
:
"https://registry.npmjs.org/globals/-/globals-1
3.24
.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/globals/-/globals-1
4.0
.0.tgz"
,
"integrity"
:
"sha512-
AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mF
Q=="
,
"integrity"
:
"sha512-
oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwt
Q=="
,
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"MIT"
,
"license"
:
"MIT"
,
"dependencies"
:
{
"type-fest"
:
"^0.20.2"
},
"engines"
:
{
"engines"
:
{
"node"
:
">=8"
"node"
:
">=
1
8"
},
},
"funding"
:
{
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
"url"
:
"https://github.com/sponsors/sindresorhus"
}
}
},
},
"node_modules/@eslint/js"
:
{
"node_modules/@eslint/js"
:
{
"version"
:
"9.1
5
.0"
,
"version"
:
"9.1
6
.0"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/js/-/js-9.1
5
.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/js/-/js-9.1
6
.0.tgz"
,
"integrity"
:
"sha512-t
MTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7l
g=="
,
"integrity"
:
"sha512-t
w2HxzQkrbeuvyj1tG2Yqq+0H9wGoI2IMk4EOsQeX+vmd75FtJAzf+gTA69WF+baUKRYQ3x2kbLE08js5OsTV
g=="
,
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"MIT"
,
"license"
:
"MIT"
,
"engines"
:
{
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
}
}
},
},
"node_modules/@humanwhocodes/config-array"
:
{
"node_modules/@eslint/object-schema"
:
{
"version"
:
"0.13.0"
,
"version"
:
"2.1.4"
,
"resolved"
:
"https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz"
,
"integrity"
:
"sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw=="
,
"integrity"
:
"sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ=="
,
"deprecated"
:
"Use @eslint/config-array instead"
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@eslint/plugin-kit"
:
{
"version"
:
"0.2.3"
,
"resolved"
:
"https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz"
,
"integrity"
:
"sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA=="
,
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"license"
:
"Apache-2.0"
,
"dependencies"
:
{
"dependencies"
:
{
"@humanwhocodes/object-schema"
:
"^2.0.3"
,
"levn"
:
"^0.4.1"
"debug"
:
"^4.3.1"
,
},
"minimatch"
:
"^3.0.5"
"engines"
:
{
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
},
"node_modules/@humanfs/core"
:
{
"version"
:
"0.19.1"
,
"resolved"
:
"https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz"
,
"integrity"
:
"sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"engines"
:
{
"engines"
:
{
"node"
:
">=10.10.0"
"node"
:
">=18.18.0"
}
},
"node_modules/@humanfs/node"
:
{
"version"
:
"0.16.6"
,
"resolved"
:
"https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz"
,
"integrity"
:
"sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"dependencies"
:
{
"@humanfs/core"
:
"^0.19.1"
,
"@humanwhocodes/retry"
:
"^0.3.0"
},
"engines"
:
{
"node"
:
">=18.18.0"
}
},
"node_modules/@humanfs/node/node_modules/@humanwhocodes/retry"
:
{
"version"
:
"0.3.1"
,
"resolved"
:
"https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz"
,
"integrity"
:
"sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"engines"
:
{
"node"
:
">=18.18"
},
"funding"
:
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/nzakas"
}
}
},
},
"node_modules/@humanwhocodes/module-importer"
:
{
"node_modules/@humanwhocodes/module-importer"
:
{
...
@@ -137,13 +204,19 @@
...
@@ -137,13 +204,19 @@
"url"
:
"https://github.com/sponsors/nzakas"
"url"
:
"https://github.com/sponsors/nzakas"
}
}
},
},
"node_modules/@humanwhocodes/object-schema"
:
{
"node_modules/@humanwhocodes/retry"
:
{
"version"
:
"2.0.3"
,
"version"
:
"0.4.1"
,
"resolved"
:
"https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz"
,
"integrity"
:
"sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA=="
,
"integrity"
:
"sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA=="
,
"deprecated"
:
"Use @eslint/object-schema instead"
,
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"BSD-3-Clause"
"license"
:
"Apache-2.0"
,
"engines"
:
{
"node"
:
">=18.18"
},
"funding"
:
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/nzakas"
}
},
},
"node_modules/@mapbox/node-pre-gyp"
:
{
"node_modules/@mapbox/node-pre-gyp"
:
{
"version"
:
"1.0.11"
,
"version"
:
"1.0.11"
,
...
@@ -177,55 +250,76 @@
...
@@ -177,55 +250,76 @@
"node"
:
">=10"
"node"
:
">=10"
}
}
},
},
"node_modules/@
nodelib/fs.scandir
"
:
{
"node_modules/@
pkgr/core
"
:
{
"version"
:
"
2
.1.
5
"
,
"version"
:
"
0
.1.
1
"
,
"resolved"
:
"https://registry.npmjs.org/@
nodelib/fs.scandir/-/fs.scandir-2
.1.
5
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@
pkgr/core/-/core-0
.1.
1
.tgz"
,
"integrity"
:
"sha512-
vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g
=="
,
"integrity"
:
"sha512-
cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA
=="
,
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"MIT"
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@nodelib/fs.stat"
:
"2.0.5"
,
"run-parallel"
:
"^1.1.9"
},
"engines"
:
{
"engines"
:
{
"node"
:
">= 8"
"node"
:
"^12.20.0 || ^14.18.0 || >=16.0.0"
},
"funding"
:
{
"url"
:
"https://opencollective.com/unts"
}
}
},
},
"node_modules/@nodelib/fs.stat"
:
{
"node_modules/@redis/bloom"
:
{
"version"
:
"2.0.5"
,
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz"
,
"integrity"
:
"sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
,
"integrity"
:
"sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"license"
:
"MIT"
,
"
engin
es"
:
{
"
peerDependenci
es"
:
{
"
node"
:
">= 8
"
"
@redis/client"
:
"^1.0.0
"
}
}
},
},
"node_modules/@nodelib/fs.walk"
:
{
"node_modules/@redis/client"
:
{
"version"
:
"1.2.8"
,
"version"
:
"1.6.0"
,
"resolved"
:
"https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@redis/client/-/client-1.6.0.tgz"
,
"integrity"
:
"sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="
,
"integrity"
:
"sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"license"
:
"MIT"
,
"dependencies"
:
{
"dependencies"
:
{
"@nodelib/fs.scandir"
:
"2.1.5"
,
"cluster-key-slot"
:
"1.1.2"
,
"fastq"
:
"^1.6.0"
"generic-pool"
:
"3.9.0"
,
"yallist"
:
"4.0.0"
},
},
"engines"
:
{
"engines"
:
{
"node"
:
">=
8
"
"node"
:
">=
14
"
}
}
},
},
"node_modules/@pkgr/core"
:
{
"node_modules/@redis/graph"
:
{
"version"
:
"0.1.1"
,
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@redis/graph/-/graph-1.1.1.tgz"
,
"integrity"
:
"sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA=="
,
"integrity"
:
"sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"license"
:
"MIT"
,
"engines"
:
{
"peerDependencies"
:
{
"node"
:
"^12.20.0 || ^14.18.0 || >=16.0.0"
"@redis/client"
:
"^1.0.0"
}
},
},
"funding"
:
{
"node_modules/@redis/json"
:
{
"url"
:
"https://opencollective.com/unts"
"version"
:
"1.0.7"
,
"resolved"
:
"https://registry.npmjs.org/@redis/json/-/json-1.0.7.tgz"
,
"integrity"
:
"sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ=="
,
"license"
:
"MIT"
,
"peerDependencies"
:
{
"@redis/client"
:
"^1.0.0"
}
},
"node_modules/@redis/search"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/@redis/search/-/search-1.2.0.tgz"
,
"integrity"
:
"sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw=="
,
"license"
:
"MIT"
,
"peerDependencies"
:
{
"@redis/client"
:
"^1.0.0"
}
},
"node_modules/@redis/time-series"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/@redis/time-series/-/time-series-1.1.0.tgz"
,
"integrity"
:
"sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g=="
,
"license"
:
"MIT"
,
"peerDependencies"
:
{
"@redis/client"
:
"^1.0.0"
}
}
},
},
"node_modules/@rtsao/scc"
:
{
"node_modules/@rtsao/scc"
:
{
...
@@ -235,6 +329,20 @@
...
@@ -235,6 +329,20 @@
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"MIT"
"license"
:
"MIT"
},
},
"node_modules/@types/estree"
:
{
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz"
,
"integrity"
:
"sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/@types/json-schema"
:
{
"version"
:
"7.0.15"
,
"resolved"
:
"https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz"
,
"integrity"
:
"sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/@types/json5"
:
{
"node_modules/@types/json5"
:
{
"version"
:
"0.0.29"
,
"version"
:
"0.0.29"
,
"resolved"
:
"https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
,
"resolved"
:
"https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
,
...
@@ -264,13 +372,6 @@
...
@@ -264,13 +372,6 @@
"pg-types"
:
"^4.0.1"
"pg-types"
:
"^4.0.1"
}
}
},
},
"node_modules/@ungap/structured-clone"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz"
,
"integrity"
:
"sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
,
"dev"
:
true
,
"license"
:
"ISC"
},
"node_modules/abbrev"
:
{
"node_modules/abbrev"
:
{
"version"
:
"1.1.1"
,
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"
,
...
@@ -675,6 +776,15 @@
...
@@ -675,6 +776,15 @@
"node"
:
">=10"
"node"
:
">=10"
}
}
},
},
"node_modules/cluster-key-slot"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz"
,
"integrity"
:
"sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="
,
"license"
:
"Apache-2.0"
,
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/color-convert"
:
{
"node_modules/color-convert"
:
{
"version"
:
"2.0.1"
,
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
,
...
@@ -921,19 +1031,6 @@
...
@@ -921,19 +1031,6 @@
"node"
:
">=8"
"node"
:
">=8"
}
}
},
},
"node_modules/doctrine"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz"
,
"integrity"
:
"sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="
,
"dev"
:
true
,
"license"
:
"Apache-2.0"
,
"dependencies"
:
{
"esutils"
:
"^2.0.2"
},
"engines"
:
{
"node"
:
">=6.0.0"
}
},
"node_modules/dotenv"
:
{
"node_modules/dotenv"
:
{
"version"
:
"16.4.5"
,
"version"
:
"16.4.5"
,
"resolved"
:
"https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz"
,
"resolved"
:
"https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz"
,
...
@@ -1134,60 +1231,63 @@
...
@@ -1134,60 +1231,63 @@
}
}
},
},
"node_modules/eslint"
:
{
"node_modules/eslint"
:
{
"version"
:
"8.57.1"
,
"version"
:
"9.16.0"
,
"resolved"
:
"https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/eslint/-/eslint-9.16.0.tgz"
,
"integrity"
:
"sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA=="
,
"integrity"
:
"sha512-whp8mSQI4C8VXd+fLgSM0lh3UlmcFtVwUQjyKCFfsp+2ItAIYhlq/hqGahGqHE6cv9unM41VlqKk2VtKYR2TaA=="
,
"deprecated"
:
"This version is no longer supported. Please see https://eslint.org/version-support for other options."
,
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"MIT"
,
"license"
:
"MIT"
,
"dependencies"
:
{
"dependencies"
:
{
"@eslint-community/eslint-utils"
:
"^4.2.0"
,
"@eslint-community/eslint-utils"
:
"^4.2.0"
,
"@eslint-community/regexpp"
:
"^4.6.1"
,
"@eslint-community/regexpp"
:
"^4.12.1"
,
"@eslint/eslintrc"
:
"^2.1.4"
,
"@eslint/config-array"
:
"^0.19.0"
,
"@eslint/js"
:
"8.57.1"
,
"@eslint/core"
:
"^0.9.0"
,
"@humanwhocodes/config-array"
:
"^0.13.0"
,
"@eslint/eslintrc"
:
"^3.2.0"
,
"@eslint/js"
:
"9.16.0"
,
"@eslint/plugin-kit"
:
"^0.2.3"
,
"@humanfs/node"
:
"^0.16.6"
,
"@humanwhocodes/module-importer"
:
"^1.0.1"
,
"@humanwhocodes/module-importer"
:
"^1.0.1"
,
"@nodelib/fs.walk"
:
"^1.2.8"
,
"@humanwhocodes/retry"
:
"^0.4.1"
,
"@ungap/structured-clone"
:
"^1.2.0"
,
"@types/estree"
:
"^1.0.6"
,
"@types/json-schema"
:
"^7.0.15"
,
"ajv"
:
"^6.12.4"
,
"ajv"
:
"^6.12.4"
,
"chalk"
:
"^4.0.0"
,
"chalk"
:
"^4.0.0"
,
"cross-spawn"
:
"^7.0.
2
"
,
"cross-spawn"
:
"^7.0.
5
"
,
"debug"
:
"^4.3.2"
,
"debug"
:
"^4.3.2"
,
"doctrine"
:
"^3.0.0"
,
"escape-string-regexp"
:
"^4.0.0"
,
"escape-string-regexp"
:
"^4.0.0"
,
"eslint-scope"
:
"^
7
.2.
2
"
,
"eslint-scope"
:
"^
8
.2.
0
"
,
"eslint-visitor-keys"
:
"^
3.4.3
"
,
"eslint-visitor-keys"
:
"^
4.2.0
"
,
"espree"
:
"^
9.6.1
"
,
"espree"
:
"^
10.3.0
"
,
"esquery"
:
"^1.
4.2
"
,
"esquery"
:
"^1.
5.0
"
,
"esutils"
:
"^2.0.2"
,
"esutils"
:
"^2.0.2"
,
"fast-deep-equal"
:
"^3.1.3"
,
"fast-deep-equal"
:
"^3.1.3"
,
"file-entry-cache"
:
"^
6
.0.
1
"
,
"file-entry-cache"
:
"^
8
.0.
0
"
,
"find-up"
:
"^5.0.0"
,
"find-up"
:
"^5.0.0"
,
"glob-parent"
:
"^6.0.2"
,
"glob-parent"
:
"^6.0.2"
,
"globals"
:
"^13.19.0"
,
"graphemer"
:
"^1.4.0"
,
"ignore"
:
"^5.2.0"
,
"ignore"
:
"^5.2.0"
,
"imurmurhash"
:
"^0.1.4"
,
"imurmurhash"
:
"^0.1.4"
,
"is-glob"
:
"^4.0.0"
,
"is-glob"
:
"^4.0.0"
,
"is-path-inside"
:
"^3.0.3"
,
"js-yaml"
:
"^4.1.0"
,
"json-stable-stringify-without-jsonify"
:
"^1.0.1"
,
"json-stable-stringify-without-jsonify"
:
"^1.0.1"
,
"levn"
:
"^0.4.1"
,
"lodash.merge"
:
"^4.6.2"
,
"lodash.merge"
:
"^4.6.2"
,
"minimatch"
:
"^3.1.2"
,
"minimatch"
:
"^3.1.2"
,
"natural-compare"
:
"^1.4.0"
,
"natural-compare"
:
"^1.4.0"
,
"optionator"
:
"^0.9.3"
,
"optionator"
:
"^0.9.3"
"strip-ansi"
:
"^6.0.1"
,
"text-table"
:
"^0.2.0"
},
},
"bin"
:
{
"bin"
:
{
"eslint"
:
"bin/eslint.js"
"eslint"
:
"bin/eslint.js"
},
},
"engines"
:
{
"engines"
:
{
"node"
:
"^1
2.22
.0 || ^
14.17
.0 || >=
16.0
.0"
"node"
:
"^1
8.18
.0 || ^
20.9
.0 || >=
21.1
.0"
},
},
"funding"
:
{
"funding"
:
{
"url"
:
"https://opencollective.com/eslint"
"url"
:
"https://eslint.org/donate"
},
"peerDependencies"
:
{
"jiti"
:
"*"
},
"peerDependenciesMeta"
:
{
"jiti"
:
{
"optional"
:
true
}
}
}
},
},
"node_modules/eslint-config-airbnb-base"
:
{
"node_modules/eslint-config-airbnb-base"
:
{
...
@@ -1362,9 +1462,9 @@
...
@@ -1362,9 +1462,9 @@
}
}
},
},
"node_modules/eslint-scope"
:
{
"node_modules/eslint-scope"
:
{
"version"
:
"
7
.2.
2
"
,
"version"
:
"
8
.2.
0
"
,
"resolved"
:
"https://registry.npmjs.org/eslint-scope/-/eslint-scope-
7
.2.
2
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/eslint-scope/-/eslint-scope-
8
.2.
0
.tgz"
,
"integrity"
:
"sha512-
dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg
=="
,
"integrity"
:
"sha512-
PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A
=="
,
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"BSD-2-Clause"
,
"license"
:
"BSD-2-Clause"
,
"dependencies"
:
{
"dependencies"
:
{
...
@@ -1372,7 +1472,7 @@
...
@@ -1372,7 +1472,7 @@
"estraverse"
:
"^5.2.0"
"estraverse"
:
"^5.2.0"
},
},
"engines"
:
{
"engines"
:
{
"node"
:
"^1
2.22
.0 || ^
14.17
.0 || >=
16.0
.0"
"node"
:
"^1
8.18
.0 || ^
20.9
.0 || >=
21.1
.0"
},
},
"funding"
:
{
"funding"
:
{
"url"
:
"https://opencollective.com/eslint"
"url"
:
"https://opencollective.com/eslint"
...
@@ -1391,45 +1491,45 @@
...
@@ -1391,45 +1491,45 @@
"url"
:
"https://opencollective.com/eslint"
"url"
:
"https://opencollective.com/eslint"
}
}
},
},
"node_modules/eslint/node_modules/
@
eslint
/j
s"
:
{
"node_modules/eslint/node_modules/eslint
-visitor-key
s"
:
{
"version"
:
"
8.57.1
"
,
"version"
:
"
4.2.0
"
,
"resolved"
:
"https://registry.npmjs.org/
@
eslint
/js/-/js-8.57.1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/eslint
-visitor-keys/-/eslint-visitor-keys-4.2.0
.tgz"
,
"integrity"
:
"sha512-
d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q
=="
,
"integrity"
:
"sha512-
UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw
=="
,
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"
MIT
"
,
"license"
:
"
Apache-2.0
"
,
"engines"
:
{
"engines"
:
{
"node"
:
"^12.22.0 || ^14.17.0 || >=16.0.0"
"node"
:
"^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding"
:
{
"url"
:
"https://opencollective.com/eslint"
}
}
},
},
"node_modules/es
lint/node_modules/globals
"
:
{
"node_modules/es
pree
"
:
{
"version"
:
"1
3.24
.0"
,
"version"
:
"1
0.3
.0"
,
"resolved"
:
"https://registry.npmjs.org/
globals/-/globals-13.24
.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/
espree/-/espree-10.3
.0.tgz"
,
"integrity"
:
"sha512-
AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ
=="
,
"integrity"
:
"sha512-
0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg
=="
,
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"
MIT
"
,
"license"
:
"
BSD-2-Clause
"
,
"dependencies"
:
{
"dependencies"
:
{
"type-fest"
:
"^0.20.2"
"acorn"
:
"^8.14.0"
,
"acorn-jsx"
:
"^5.3.2"
,
"eslint-visitor-keys"
:
"^4.2.0"
},
},
"engines"
:
{
"engines"
:
{
"node"
:
"
>=8
"
"node"
:
"
^18.18.0 || ^20.9.0 || >=21.1.0
"
},
},
"funding"
:
{
"funding"
:
{
"url"
:
"https://
github.com/sponsors/sindresorhus
"
"url"
:
"https://
opencollective.com/eslint
"
}
}
},
},
"node_modules/espree"
:
{
"node_modules/espree
/node_modules/eslint-visitor-keys
"
:
{
"version"
:
"
9.6.1
"
,
"version"
:
"
4.2.0
"
,
"resolved"
:
"https://registry.npmjs.org/es
pree/-/espree-9.6.1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/es
lint-visitor-keys/-/eslint-visitor-keys-4.2.0
.tgz"
,
"integrity"
:
"sha512-
oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ
=="
,
"integrity"
:
"sha512-
UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw
=="
,
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"BSD-2-Clause"
,
"license"
:
"Apache-2.0"
,
"dependencies"
:
{
"acorn"
:
"^8.9.0"
,
"acorn-jsx"
:
"^5.3.2"
,
"eslint-visitor-keys"
:
"^3.4.1"
},
"engines"
:
{
"engines"
:
{
"node"
:
"^1
2.22
.0 || ^
14.17
.0 || >=
16.0
.0"
"node"
:
"^1
8.18
.0 || ^
20.9
.0 || >=
21.1
.0"
},
},
"funding"
:
{
"funding"
:
{
"url"
:
"https://opencollective.com/eslint"
"url"
:
"https://opencollective.com/eslint"
...
@@ -1575,27 +1675,17 @@
...
@@ -1575,27 +1675,17 @@
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"MIT"
"license"
:
"MIT"
},
},
"node_modules/fastq"
:
{
"version"
:
"1.17.1"
,
"resolved"
:
"https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz"
,
"integrity"
:
"sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w=="
,
"dev"
:
true
,
"license"
:
"ISC"
,
"dependencies"
:
{
"reusify"
:
"^1.0.4"
}
},
"node_modules/file-entry-cache"
:
{
"node_modules/file-entry-cache"
:
{
"version"
:
"
6
.0.
1
"
,
"version"
:
"
8
.0.
0
"
,
"resolved"
:
"https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-
6
.0.
1
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-
8
.0.
0
.tgz"
,
"integrity"
:
"sha512-
7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg
=="
,
"integrity"
:
"sha512-
XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ
=="
,
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"MIT"
,
"license"
:
"MIT"
,
"dependencies"
:
{
"dependencies"
:
{
"flat-cache"
:
"^
3
.0.
4
"
"flat-cache"
:
"^
4
.0.
0
"
},
},
"engines"
:
{
"engines"
:
{
"node"
:
"
^10.12.0 ||
>=1
2
.0.0"
"node"
:
">=1
6
.0.0"
}
}
},
},
"node_modules/finalhandler"
:
{
"node_modules/finalhandler"
:
{
...
@@ -1649,18 +1739,17 @@
...
@@ -1649,18 +1739,17 @@
}
}
},
},
"node_modules/flat-cache"
:
{
"node_modules/flat-cache"
:
{
"version"
:
"
3.2.0
"
,
"version"
:
"
4.0.1
"
,
"resolved"
:
"https://registry.npmjs.org/flat-cache/-/flat-cache-
3.2.0
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/flat-cache/-/flat-cache-
4.0.1
.tgz"
,
"integrity"
:
"sha512-
CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vb
w=="
,
"integrity"
:
"sha512-
f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGy
w=="
,
"dev"
:
true
,
"dev"
:
true
,
"license"
:
"MIT"
,
"license"
:
"MIT"
,
"dependencies"
:
{
"dependencies"
:
{
"flatted"
:
"^3.2.9"
,
"flatted"
:
"^3.2.9"
,
"keyv"
:
"^4.5.3"
,
"keyv"
:
"^4.5.4"
"rimraf"
:
"^3.0.2"
},
},
"engines"
:
{
"engines"
:
{
"node"
:
"
^10.12.0 || >=12.0.0
"
"node"
:
"
>=16
"
}
}
},
},
"node_modules/flatted"
:
{
"node_modules/flatted"
:
{
...
@@ -1787,6 +1876,15 @@
...
@@ -1787,6 +1876,15 @@
"node"
:
">=10"
"node"
:
">=10"
}
}
},
},
"node_modules/generic-pool"
:
{
"version"
:
"3.9.0"
,
"resolved"
:
"https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz"
,
"integrity"
:
"sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g=="
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">= 4"
}
},
"node_modules/get-intrinsic"
:
{
"node_modules/get-intrinsic"
:
{
"version"
:
"1.2.4"
,
"version"
:
"1.2.4"
,
"resolved"
:
"https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz"
,
"resolved"
:
"https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz"
,
...
@@ -1900,13 +1998,6 @@
...
@@ -1900,13 +1998,6 @@
"url"
:
"https://github.com/sponsors/ljharb"
"url"
:
"https://github.com/sponsors/ljharb"
}
}
},
},
"node_modules/graphemer"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz"
,
"integrity"
:
"sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/has-bigints"
:
{
"node_modules/has-bigints"
:
{
"version"
:
"1.0.2"
,
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz"
,
...
@@ -2285,16 +2376,6 @@
...
@@ -2285,16 +2376,6 @@
"url"
:
"https://github.com/sponsors/ljharb"
"url"
:
"https://github.com/sponsors/ljharb"
}
}
},
},
"node_modules/is-path-inside"
:
{
"version"
:
"3.0.3"
,
"resolved"
:
"https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz"
,
"integrity"
:
"sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"node"
:
">=8"
}
},
"node_modules/is-regex"
:
{
"node_modules/is-regex"
:
{
"version"
:
"1.1.4"
,
"version"
:
"1.1.4"
,
"resolved"
:
"https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz"
,
"resolved"
:
"https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz"
,
...
@@ -2785,15 +2866,6 @@
...
@@ -2785,15 +2866,6 @@
}
}
}
}
},
},
"node_modules/nodemailer"
:
{
"version"
:
"6.9.16"
,
"resolved"
:
"https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.16.tgz"
,
"integrity"
:
"sha512-psAuZdTIRN08HKVd/E8ObdV6NO7NTBY3KsC30F7M4H1OnmLCUNaS56FpYxyb26zWLSyYF9Ozch9KYHhHegsiOQ=="
,
"license"
:
"MIT-0"
,
"engines"
:
{
"node"
:
">=6.0.0"
}
},
"node_modules/nopt"
:
{
"node_modules/nopt"
:
{
"version"
:
"5.0.0"
,
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz"
,
...
@@ -3375,27 +3447,6 @@
...
@@ -3375,27 +3447,6 @@
"url"
:
"https://github.com/sponsors/ljharb"
"url"
:
"https://github.com/sponsors/ljharb"
}
}
},
},
"node_modules/queue-microtask"
:
{
"version"
:
"1.2.3"
,
"resolved"
:
"https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
,
"integrity"
:
"sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
,
"dev"
:
true
,
"funding"
:
[
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/feross"
},
{
"type"
:
"patreon"
,
"url"
:
"https://www.patreon.com/feross"
},
{
"type"
:
"consulting"
,
"url"
:
"https://feross.org/support"
}
],
"license"
:
"MIT"
},
"node_modules/range-parser"
:
{
"node_modules/range-parser"
:
{
"version"
:
"1.2.1"
,
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"
,
...
@@ -3434,6 +3485,23 @@
...
@@ -3434,6 +3485,23 @@
"node"
:
">= 6"
"node"
:
">= 6"
}
}
},
},
"node_modules/redis"
:
{
"version"
:
"4.7.0"
,
"resolved"
:
"https://registry.npmjs.org/redis/-/redis-4.7.0.tgz"
,
"integrity"
:
"sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ=="
,
"license"
:
"MIT"
,
"workspaces"
:
[
"./packages/*"
],
"dependencies"
:
{
"@redis/bloom"
:
"1.2.0"
,
"@redis/client"
:
"1.6.0"
,
"@redis/graph"
:
"1.1.1"
,
"@redis/json"
:
"1.0.7"
,
"@redis/search"
:
"1.2.0"
,
"@redis/time-series"
:
"1.1.0"
}
},
"node_modules/regexp.prototype.flags"
:
{
"node_modules/regexp.prototype.flags"
:
{
"version"
:
"1.5.3"
,
"version"
:
"1.5.3"
,
"resolved"
:
"https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz"
,
"resolved"
:
"https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz"
,
...
@@ -3481,17 +3549,6 @@
...
@@ -3481,17 +3549,6 @@
"node"
:
">=4"
"node"
:
">=4"
}
}
},
},
"node_modules/reusify"
:
{
"version"
:
"1.0.4"
,
"resolved"
:
"https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
,
"integrity"
:
"sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
"iojs"
:
">=1.0.0"
,
"node"
:
">=0.10.0"
}
},
"node_modules/rimraf"
:
{
"node_modules/rimraf"
:
{
"version"
:
"3.0.2"
,
"version"
:
"3.0.2"
,
"resolved"
:
"https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
,
...
@@ -3508,30 +3565,6 @@
...
@@ -3508,30 +3565,6 @@
"url"
:
"https://github.com/sponsors/isaacs"
"url"
:
"https://github.com/sponsors/isaacs"
}
}
},
},
"node_modules/run-parallel"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
,
"integrity"
:
"sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="
,
"dev"
:
true
,
"funding"
:
[
{
"type"
:
"github"
,
"url"
:
"https://github.com/sponsors/feross"
},
{
"type"
:
"patreon"
,
"url"
:
"https://www.patreon.com/feross"
},
{
"type"
:
"consulting"
,
"url"
:
"https://feross.org/support"
}
],
"license"
:
"MIT"
,
"dependencies"
:
{
"queue-microtask"
:
"^1.2.2"
}
},
"node_modules/safe-array-concat"
:
{
"node_modules/safe-array-concat"
:
{
"version"
:
"1.1.2"
,
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz"
,
...
@@ -3947,13 +3980,6 @@
...
@@ -3947,13 +3980,6 @@
"node"
:
">=10"
"node"
:
">=10"
}
}
},
},
"node_modules/text-table"
:
{
"version"
:
"0.2.0"
,
"resolved"
:
"https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
,
"integrity"
:
"sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
,
"dev"
:
true
,
"license"
:
"MIT"
},
"node_modules/toidentifier"
:
{
"node_modules/toidentifier"
:
{
"version"
:
"1.0.1"
,
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz"
,
...
@@ -4002,19 +4028,6 @@
...
@@ -4002,19 +4028,6 @@
"node"
:
">= 0.8.0"
"node"
:
">= 0.8.0"
}
}
},
},
"node_modules/type-fest"
:
{
"version"
:
"0.20.2"
,
"resolved"
:
"https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
,
"integrity"
:
"sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
,
"dev"
:
true
,
"license"
:
"(MIT OR CC0-1.0)"
,
"engines"
:
{
"node"
:
">=10"
},
"funding"
:
{
"url"
:
"https://github.com/sponsors/sindresorhus"
}
},
"node_modules/type-is"
:
{
"node_modules/type-is"
:
{
"version"
:
"1.6.18"
,
"version"
:
"1.6.18"
,
"resolved"
:
"https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
,
"resolved"
:
"https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
,
...
...
This diff is collapsed.
Click to expand it.
src/routes/auth.js
+
4
−
8
View file @
909292a2
...
@@ -44,18 +44,13 @@ authRouter.get(
...
@@ -44,18 +44,13 @@ authRouter.get(
}
}
})
})
);
);
authRouter
.
post
(
authRouter
.
post
(
'
/verify/email
'
,
'
/verify/email
'
,
wrapAsync
(
async
(
req
,
res
)
=>
{
wrapAsync
(
async
(
req
,
res
)
=>
{
const
{
email
}
=
req
.
body
;
const
{
email
}
=
req
.
body
;
const
data
=
await
authService
.
checkEmail
(
email
);
if
(
data
.
isDuplicated
)
{
const
data
=
await
authService
.
sendEmailCode
(
email
);
res
.
sendResponse
(
'
이미 존재하는 이메일입니다.
'
,
200
,
data
);
}
else
{
res
.
sendResponse
(
'
인증번호가 해당 이메일로 발송되었습니다.
'
,
200
,
data
);
res
.
sendResponse
(
'
인증번호가 해당 이메일로 발송되었습니다.
'
,
200
,
data
);
}
})
})
);
);
...
@@ -63,7 +58,8 @@ authRouter.put(
...
@@ -63,7 +58,8 @@ authRouter.put(
'
/verify/email
'
,
'
/verify/email
'
,
wrapAsync
(
async
(
req
,
res
)
=>
{
wrapAsync
(
async
(
req
,
res
)
=>
{
const
{
email
,
code
}
=
req
.
body
;
const
{
email
,
code
}
=
req
.
body
;
const
data
=
await
authService
.
verifyEmailCode
(
email
,
code
);
const
data
=
await
authService
.
getEmailCode
(
email
,
code
);
res
.
sendResponse
(
'
이메일 인증이 완료되었습니다.
'
,
200
,
data
);
res
.
sendResponse
(
'
이메일 인증이 완료되었습니다.
'
,
200
,
data
);
})
})
);
);
...
...
This diff is collapsed.
Click to expand it.
src/services/authService.js
+
31
−
6
View file @
909292a2
...
@@ -2,6 +2,7 @@ import bcrypt from 'bcrypt';
...
@@ -2,6 +2,7 @@ import bcrypt from 'bcrypt';
import
jwt
from
'
jsonwebtoken
'
;
import
jwt
from
'
jsonwebtoken
'
;
import
userRepository
from
'
../repositories/userRepository.js
'
;
import
userRepository
from
'
../repositories/userRepository.js
'
;
import
{
ReportableError
}
from
'
../errors.js
'
;
import
{
ReportableError
}
from
'
../errors.js
'
;
import
{
Redis
}
from
'
../redis.js
'
;
const
authService
=
{
const
authService
=
{
async
signup
(
email
,
password
,
nickname
)
{
async
signup
(
email
,
password
,
nickname
)
{
...
@@ -100,24 +101,48 @@ const authService = {
...
@@ -100,24 +101,48 @@ const authService = {
};
};
},
},
async
verifyEmailCode
(
email
,
code
)
{
async
sendEmailCode
(
email
)
{
if
(
!
email
)
{
throw
new
ReportableError
(
400
,
'
이메일이 필요합니다.
'
);
}
const
existingCode
=
await
Redis
.
get
(
`email:code:
${
email
}
`
);
const
isSent
=
await
Redis
.
SISMEMBER
(
'
email:queue:recipient
'
,
email
);
if
(
existingCode
||
isSent
)
{
throw
new
ReportableError
(
400
,
'
이미 인증번호가 발송되었습니다. 만료 후 다시 시도해주세요.
'
);
}
const
verificationCode
=
Math
.
floor
(
100000
+
Math
.
random
()
*
900000
).
toString
();
const
queueData
=
`
${
email
}
:
${
verificationCode
}
`
;
await
Redis
.
rPush
(
'
email:queue
'
,
queueData
);
await
Redis
.
SADD
(
'
email:queue:recipient
'
,
email
);
return
{};
},
async
getEmailCode
(
email
,
code
)
{
if
(
!
email
||
!
code
)
{
if
(
!
email
||
!
code
)
{
throw
new
ReportableError
(
400
,
'
이메일과 인증번호가 필요합니다.
'
);
throw
new
ReportableError
(
400
,
'
이메일과 인증번호가 필요합니다.
'
);
}
}
const
storedCode
=
''
;
const
storedCode
=
await
Redis
.
get
(
`email:code:
${
email
}
`
)
;
if
(
!
storedCode
)
{
if
(
!
storedCode
)
{
throw
new
ReportableError
(
404
,
'
해당 이메일에 대한 인증번호가 없습니다.
'
);
throw
new
ReportableError
(
404
,
'
해당 이메일에 대한 인증번호가 없습니다.
'
);
}
}
if
(
storedCode
!==
code
)
{
if
(
storedCode
!==
code
)
{
throw
new
ReportableError
(
400
,
'
인증번호가
일치
하지 않습니다.
'
);
throw
new
ReportableError
(
400
,
'
인증번호가
유효
하지 않습니다.
'
);
}
}
await
userRepository
.
markEmailAsVerified
(
email
);
return
{};
return
{
success
:
true
};
},
},
};
};
...
...
This diff is collapsed.
Click to expand it.
yarn.lock
+
402
−
486
View file @
909292a2
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment