Spaces:
Paused
✅ Add tests setup + test sign in flow
Browse files* replace EthicsModal by LoginModal and start binding auth logic
* start implementing login modal + give a try to
@auth
/sveltekit
using Github oauth as a test
* start custom auth implementation instead of auth.js for consistency with moon-landing
* fetch user data from provider
* add migration from anonymous to user + bind frontend
* add missing auth secret + only migrate conversations for pre-existing users
* remove email scope as it's not needed
Co-authored-by: Eliott C. <[email protected]>
* no need to define .well-known path
Co-authored-by: Eliott C. <[email protected]>
* use env var for hf hub website url
* move sessionId to signature on csrf token exchange
* remove ethic modal check and set default settings on new users
* anonymous users can read only + modal on write tries
* refresh session cookie when existing user signin again rather than use the old one
* allow users to keep using the app without loging-in if env var is not present
* typo
* handle denied login
* do not use a form action for login as there is nothing post-ed
* use requiresUser instead of env var to define login modal or not
* move back to a form action for login so user can't be linked to /login directly
* show login modal even for pre-existing users
* fix logic of account creation/updates
* settings insertOne instead of updateOne
* fix missing userId to settings creation
* fix missing updatedAt when updating settings of pre-existing users
* show login modal for everyone + add comments
* fix login modal condition for both required/not required login
* 🔨
* bring back missing form values in login modal
* refactor default settings spread around to a constant
* missing default settings
* typo
* rename a bunch of things to remove SSO references
* always migrate conversations
* remove unneeded sha256 Node specific function, replace with browser crypto API
* fix typings
* Update src/lib/components/LoginModal.svelte
* use authCondition() in callback
* add logout
* 🐛 Fix signout
cc @Grsmto, because "path" of the cookie should be "/"
* fixup! 🐛 Fix signout
* add basic test setup with Vitest + tests of login DB updates
* add test for cookie
* try to run tests on CI
* try to fix docker compose not able to ignore .env file
* oopsy
* moved back .env before running tests
* add comment about docker compose .env workaround
* try to run mongo directly from github actions instead of docker-compose
* oopsy
* do we need to wait for mongo?
* move tested code back to relevant place + rename
* fix linting
* revert unnecessary change
---------
Co-authored-by: Eliott C. <[email protected]>
- .github/workflows/lint-and-test.yml +22 -0
- package-lock.json +547 -1
- package.json +4 -2
- src/lib/server/database.ts +1 -1
- src/routes/login/callback/+server.ts +3 -73
- src/routes/login/callback/updateUser.spec.ts +144 -0
- src/routes/login/callback/updateUser.ts +79 -0
|
@@ -25,3 +25,25 @@ jobs:
|
|
| 25 |
- name: "Checking type errors"
|
| 26 |
run: |
|
| 27 |
npm run check
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
- name: "Checking type errors"
|
| 26 |
run: |
|
| 27 |
npm run check
|
| 28 |
+
test:
|
| 29 |
+
runs-on: ubuntu-latest
|
| 30 |
+
timeout-minutes: 10
|
| 31 |
+
|
| 32 |
+
services:
|
| 33 |
+
mongodb:
|
| 34 |
+
image: mongo:6.0.5
|
| 35 |
+
ports:
|
| 36 |
+
- 27017:27017
|
| 37 |
+
|
| 38 |
+
steps:
|
| 39 |
+
- uses: actions/checkout@v3
|
| 40 |
+
|
| 41 |
+
- uses: actions/setup-node@v3
|
| 42 |
+
with:
|
| 43 |
+
node-version: "18"
|
| 44 |
+
cache: "npm"
|
| 45 |
+
- run: |
|
| 46 |
+
npm ci
|
| 47 |
+
- name: "Tests"
|
| 48 |
+
run: |
|
| 49 |
+
npm run test
|
|
@@ -44,7 +44,8 @@
|
|
| 44 |
"tslib": "^2.4.1",
|
| 45 |
"typescript": "^4.9.3",
|
| 46 |
"unplugin-icons": "^0.16.1",
|
| 47 |
-
"vite": "^4.0.0"
|
|
|
|
| 48 |
}
|
| 49 |
},
|
| 50 |
"node_modules/@antfu/install-pkg": {
|
|
@@ -879,6 +880,21 @@
|
|
| 879 |
"node": ">=4"
|
| 880 |
}
|
| 881 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 882 |
"node_modules/@types/cookie": {
|
| 883 |
"version": "0.5.1",
|
| 884 |
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz",
|
|
@@ -1146,6 +1162,102 @@
|
|
| 1146 |
"url": "https://opencollective.com/typescript-eslint"
|
| 1147 |
}
|
| 1148 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1149 |
"node_modules/acorn": {
|
| 1150 |
"version": "8.8.2",
|
| 1151 |
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
|
|
@@ -1167,6 +1279,15 @@
|
|
| 1167 |
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
|
| 1168 |
}
|
| 1169 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1170 |
"node_modules/ajv": {
|
| 1171 |
"version": "6.12.6",
|
| 1172 |
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
|
@@ -1244,6 +1365,15 @@
|
|
| 1244 |
"node": ">=8"
|
| 1245 |
}
|
| 1246 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1247 |
"node_modules/autoprefixer": {
|
| 1248 |
"version": "10.4.14",
|
| 1249 |
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
|
|
@@ -1314,6 +1444,12 @@
|
|
| 1314 |
"integrity": "sha512-u4cBQNepWxYA55FunZSM7wMi55yQaN0otnhhilNoWHq0MfOfJeQx0v0mRRpolGOExPjZcl6FtB0BB8Xkb88F0g==",
|
| 1315 |
"optional": true
|
| 1316 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1317 |
"node_modules/brace-expansion": {
|
| 1318 |
"version": "1.1.11",
|
| 1319 |
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
|
@@ -1410,6 +1546,15 @@
|
|
| 1410 |
"node": ">=10.16.0"
|
| 1411 |
}
|
| 1412 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1413 |
"node_modules/callsites": {
|
| 1414 |
"version": "3.1.0",
|
| 1415 |
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
|
@@ -1446,6 +1591,24 @@
|
|
| 1446 |
}
|
| 1447 |
]
|
| 1448 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1449 |
"node_modules/chalk": {
|
| 1450 |
"version": "4.1.2",
|
| 1451 |
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
|
@@ -1462,6 +1625,15 @@
|
|
| 1462 |
"url": "https://github.com/chalk/chalk?sponsor=1"
|
| 1463 |
}
|
| 1464 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1465 |
"node_modules/chokidar": {
|
| 1466 |
"version": "3.5.3",
|
| 1467 |
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
|
|
@@ -1535,6 +1707,25 @@
|
|
| 1535 |
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
| 1536 |
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
|
| 1537 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1538 |
"node_modules/cookie": {
|
| 1539 |
"version": "0.5.0",
|
| 1540 |
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
|
|
@@ -1581,6 +1772,18 @@
|
|
| 1581 |
"url": "https://opencollective.com/date-fns"
|
| 1582 |
}
|
| 1583 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1584 |
"node_modules/debug": {
|
| 1585 |
"version": "4.3.4",
|
| 1586 |
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
|
@@ -1598,6 +1801,18 @@
|
|
| 1598 |
}
|
| 1599 |
}
|
| 1600 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1601 |
"node_modules/deep-is": {
|
| 1602 |
"version": "0.1.4",
|
| 1603 |
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
|
@@ -2031,6 +2246,12 @@
|
|
| 2031 |
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
| 2032 |
"dev": true
|
| 2033 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2034 |
"node_modules/fast-glob": {
|
| 2035 |
"version": "3.2.12",
|
| 2036 |
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
|
|
@@ -2170,6 +2391,15 @@
|
|
| 2170 |
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
| 2171 |
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
|
| 2172 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2173 |
"node_modules/get-stream": {
|
| 2174 |
"version": "6.0.1",
|
| 2175 |
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
|
|
@@ -2504,6 +2734,15 @@
|
|
| 2504 |
"url": "https://opencollective.com/js-sdsl"
|
| 2505 |
}
|
| 2506 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2507 |
"node_modules/js-yaml": {
|
| 2508 |
"version": "4.1.0",
|
| 2509 |
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
|
|
@@ -2528,6 +2767,12 @@
|
|
| 2528 |
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
|
| 2529 |
"dev": true
|
| 2530 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2531 |
"node_modules/kleur": {
|
| 2532 |
"version": "4.1.5",
|
| 2533 |
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
|
|
@@ -2602,6 +2847,12 @@
|
|
| 2602 |
"url": "https://github.com/sponsors/sindresorhus"
|
| 2603 |
}
|
| 2604 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2605 |
"node_modules/lodash.castarray": {
|
| 2606 |
"version": "4.4.0",
|
| 2607 |
"resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
|
|
@@ -2620,6 +2871,15 @@
|
|
| 2620 |
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
|
| 2621 |
"dev": true
|
| 2622 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2623 |
"node_modules/lru-cache": {
|
| 2624 |
"version": "6.0.0",
|
| 2625 |
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
|
@@ -2664,6 +2924,18 @@
|
|
| 2664 |
"node": ">= 12"
|
| 2665 |
}
|
| 2666 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2667 |
"node_modules/memory-pager": {
|
| 2668 |
"version": "1.5.0",
|
| 2669 |
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
|
|
@@ -2758,6 +3030,18 @@
|
|
| 2758 |
"mkdirp": "bin/cmd.js"
|
| 2759 |
}
|
| 2760 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2761 |
"node_modules/mongodb": {
|
| 2762 |
"version": "5.3.0",
|
| 2763 |
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.3.0.tgz",
|
|
@@ -3104,6 +3388,21 @@
|
|
| 3104 |
"node": ">=8"
|
| 3105 |
}
|
| 3106 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3107 |
"node_modules/picocolors": {
|
| 3108 |
"version": "1.0.0",
|
| 3109 |
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
|
@@ -3136,6 +3435,17 @@
|
|
| 3136 |
"node": ">= 6"
|
| 3137 |
}
|
| 3138 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3139 |
"node_modules/postcss": {
|
| 3140 |
"version": "8.4.23",
|
| 3141 |
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz",
|
|
@@ -3401,6 +3711,32 @@
|
|
| 3401 |
}
|
| 3402 |
}
|
| 3403 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3404 |
"node_modules/punycode": {
|
| 3405 |
"version": "2.3.0",
|
| 3406 |
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
|
@@ -3448,6 +3784,12 @@
|
|
| 3448 |
"url": "https://github.com/sponsors/sindresorhus"
|
| 3449 |
}
|
| 3450 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3451 |
"node_modules/read-cache": {
|
| 3452 |
"version": "1.0.0",
|
| 3453 |
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
|
@@ -3656,6 +3998,12 @@
|
|
| 3656 |
"node": ">=8"
|
| 3657 |
}
|
| 3658 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3659 |
"node_modules/signal-exit": {
|
| 3660 |
"version": "3.0.7",
|
| 3661 |
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
|
|
@@ -3744,6 +4092,18 @@
|
|
| 3744 |
"memory-pager": "^1.0.2"
|
| 3745 |
}
|
| 3746 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3747 |
"node_modules/streamsearch": {
|
| 3748 |
"version": "1.1.0",
|
| 3749 |
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
|
|
@@ -3798,6 +4158,18 @@
|
|
| 3798 |
"url": "https://github.com/sponsors/sindresorhus"
|
| 3799 |
}
|
| 3800 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3801 |
"node_modules/sucrase": {
|
| 3802 |
"version": "3.32.0",
|
| 3803 |
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
|
|
@@ -4131,6 +4503,15 @@
|
|
| 4131 |
"node": ">= 4.1.0"
|
| 4132 |
}
|
| 4133 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4134 |
"node_modules/tiny-glob": {
|
| 4135 |
"version": "0.2.9",
|
| 4136 |
"resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
|
|
@@ -4141,6 +4522,30 @@
|
|
| 4141 |
"globrex": "^0.1.2"
|
| 4142 |
}
|
| 4143 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4144 |
"node_modules/to-regex-range": {
|
| 4145 |
"version": "5.0.1",
|
| 4146 |
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
|
@@ -4216,6 +4621,15 @@
|
|
| 4216 |
"node": ">= 0.8.0"
|
| 4217 |
}
|
| 4218 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4219 |
"node_modules/type-fest": {
|
| 4220 |
"version": "0.20.2",
|
| 4221 |
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
|
|
@@ -4241,6 +4655,12 @@
|
|
| 4241 |
"node": ">=4.2.0"
|
| 4242 |
}
|
| 4243 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4244 |
"node_modules/undici": {
|
| 4245 |
"version": "5.22.0",
|
| 4246 |
"resolved": "https://registry.npmjs.org/undici/-/undici-5.22.0.tgz",
|
|
@@ -4395,6 +4815,29 @@
|
|
| 4395 |
}
|
| 4396 |
}
|
| 4397 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4398 |
"node_modules/vitefu": {
|
| 4399 |
"version": "0.2.4",
|
| 4400 |
"resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz",
|
|
@@ -4409,6 +4852,84 @@
|
|
| 4409 |
}
|
| 4410 |
}
|
| 4411 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4412 |
"node_modules/webidl-conversions": {
|
| 4413 |
"version": "7.0.0",
|
| 4414 |
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
|
@@ -4432,6 +4953,15 @@
|
|
| 4432 |
"integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==",
|
| 4433 |
"dev": true
|
| 4434 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4435 |
"node_modules/whatwg-url": {
|
| 4436 |
"version": "11.0.0",
|
| 4437 |
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
|
|
@@ -4459,6 +4989,22 @@
|
|
| 4459 |
"node": ">= 8"
|
| 4460 |
}
|
| 4461 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4462 |
"node_modules/word-wrap": {
|
| 4463 |
"version": "1.2.3",
|
| 4464 |
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
|
|
|
| 44 |
"tslib": "^2.4.1",
|
| 45 |
"typescript": "^4.9.3",
|
| 46 |
"unplugin-icons": "^0.16.1",
|
| 47 |
+
"vite": "^4.0.0",
|
| 48 |
+
"vitest": "^0.31.0"
|
| 49 |
}
|
| 50 |
},
|
| 51 |
"node_modules/@antfu/install-pkg": {
|
|
|
|
| 880 |
"node": ">=4"
|
| 881 |
}
|
| 882 |
},
|
| 883 |
+
"node_modules/@types/chai": {
|
| 884 |
+
"version": "4.3.5",
|
| 885 |
+
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz",
|
| 886 |
+
"integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==",
|
| 887 |
+
"dev": true
|
| 888 |
+
},
|
| 889 |
+
"node_modules/@types/chai-subset": {
|
| 890 |
+
"version": "1.3.3",
|
| 891 |
+
"resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz",
|
| 892 |
+
"integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==",
|
| 893 |
+
"dev": true,
|
| 894 |
+
"dependencies": {
|
| 895 |
+
"@types/chai": "*"
|
| 896 |
+
}
|
| 897 |
+
},
|
| 898 |
"node_modules/@types/cookie": {
|
| 899 |
"version": "0.5.1",
|
| 900 |
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz",
|
|
|
|
| 1162 |
"url": "https://opencollective.com/typescript-eslint"
|
| 1163 |
}
|
| 1164 |
},
|
| 1165 |
+
"node_modules/@vitest/expect": {
|
| 1166 |
+
"version": "0.31.0",
|
| 1167 |
+
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.31.0.tgz",
|
| 1168 |
+
"integrity": "sha512-Jlm8ZTyp6vMY9iz9Ny9a0BHnCG4fqBa8neCF6Pk/c/6vkUk49Ls6UBlgGAU82QnzzoaUs9E/mUhq/eq9uMOv/g==",
|
| 1169 |
+
"dev": true,
|
| 1170 |
+
"dependencies": {
|
| 1171 |
+
"@vitest/spy": "0.31.0",
|
| 1172 |
+
"@vitest/utils": "0.31.0",
|
| 1173 |
+
"chai": "^4.3.7"
|
| 1174 |
+
},
|
| 1175 |
+
"funding": {
|
| 1176 |
+
"url": "https://opencollective.com/vitest"
|
| 1177 |
+
}
|
| 1178 |
+
},
|
| 1179 |
+
"node_modules/@vitest/runner": {
|
| 1180 |
+
"version": "0.31.0",
|
| 1181 |
+
"resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.31.0.tgz",
|
| 1182 |
+
"integrity": "sha512-H1OE+Ly7JFeBwnpHTrKyCNm/oZgr+16N4qIlzzqSG/YRQDATBYmJb/KUn3GrZaiQQyL7GwpNHVZxSQd6juLCgw==",
|
| 1183 |
+
"dev": true,
|
| 1184 |
+
"dependencies": {
|
| 1185 |
+
"@vitest/utils": "0.31.0",
|
| 1186 |
+
"concordance": "^5.0.4",
|
| 1187 |
+
"p-limit": "^4.0.0",
|
| 1188 |
+
"pathe": "^1.1.0"
|
| 1189 |
+
},
|
| 1190 |
+
"funding": {
|
| 1191 |
+
"url": "https://opencollective.com/vitest"
|
| 1192 |
+
}
|
| 1193 |
+
},
|
| 1194 |
+
"node_modules/@vitest/runner/node_modules/p-limit": {
|
| 1195 |
+
"version": "4.0.0",
|
| 1196 |
+
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
|
| 1197 |
+
"integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
|
| 1198 |
+
"dev": true,
|
| 1199 |
+
"dependencies": {
|
| 1200 |
+
"yocto-queue": "^1.0.0"
|
| 1201 |
+
},
|
| 1202 |
+
"engines": {
|
| 1203 |
+
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
| 1204 |
+
},
|
| 1205 |
+
"funding": {
|
| 1206 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
| 1207 |
+
}
|
| 1208 |
+
},
|
| 1209 |
+
"node_modules/@vitest/runner/node_modules/yocto-queue": {
|
| 1210 |
+
"version": "1.0.0",
|
| 1211 |
+
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
|
| 1212 |
+
"integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
|
| 1213 |
+
"dev": true,
|
| 1214 |
+
"engines": {
|
| 1215 |
+
"node": ">=12.20"
|
| 1216 |
+
},
|
| 1217 |
+
"funding": {
|
| 1218 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
| 1219 |
+
}
|
| 1220 |
+
},
|
| 1221 |
+
"node_modules/@vitest/snapshot": {
|
| 1222 |
+
"version": "0.31.0",
|
| 1223 |
+
"resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.31.0.tgz",
|
| 1224 |
+
"integrity": "sha512-5dTXhbHnyUMTMOujZPB0wjFjQ6q5x9c8TvAsSPUNKjp1tVU7i9pbqcKPqntyu2oXtmVxKbuHCqrOd+Ft60r4tg==",
|
| 1225 |
+
"dev": true,
|
| 1226 |
+
"dependencies": {
|
| 1227 |
+
"magic-string": "^0.30.0",
|
| 1228 |
+
"pathe": "^1.1.0",
|
| 1229 |
+
"pretty-format": "^27.5.1"
|
| 1230 |
+
},
|
| 1231 |
+
"funding": {
|
| 1232 |
+
"url": "https://opencollective.com/vitest"
|
| 1233 |
+
}
|
| 1234 |
+
},
|
| 1235 |
+
"node_modules/@vitest/spy": {
|
| 1236 |
+
"version": "0.31.0",
|
| 1237 |
+
"resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.31.0.tgz",
|
| 1238 |
+
"integrity": "sha512-IzCEQ85RN26GqjQNkYahgVLLkULOxOm5H/t364LG0JYb3Apg0PsYCHLBYGA006+SVRMWhQvHlBBCyuByAMFmkg==",
|
| 1239 |
+
"dev": true,
|
| 1240 |
+
"dependencies": {
|
| 1241 |
+
"tinyspy": "^2.1.0"
|
| 1242 |
+
},
|
| 1243 |
+
"funding": {
|
| 1244 |
+
"url": "https://opencollective.com/vitest"
|
| 1245 |
+
}
|
| 1246 |
+
},
|
| 1247 |
+
"node_modules/@vitest/utils": {
|
| 1248 |
+
"version": "0.31.0",
|
| 1249 |
+
"resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.31.0.tgz",
|
| 1250 |
+
"integrity": "sha512-kahaRyLX7GS1urekRXN2752X4gIgOGVX4Wo8eDUGUkTWlGpXzf5ZS6N9RUUS+Re3XEE8nVGqNyxkSxF5HXlGhQ==",
|
| 1251 |
+
"dev": true,
|
| 1252 |
+
"dependencies": {
|
| 1253 |
+
"concordance": "^5.0.4",
|
| 1254 |
+
"loupe": "^2.3.6",
|
| 1255 |
+
"pretty-format": "^27.5.1"
|
| 1256 |
+
},
|
| 1257 |
+
"funding": {
|
| 1258 |
+
"url": "https://opencollective.com/vitest"
|
| 1259 |
+
}
|
| 1260 |
+
},
|
| 1261 |
"node_modules/acorn": {
|
| 1262 |
"version": "8.8.2",
|
| 1263 |
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
|
|
|
|
| 1279 |
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
|
| 1280 |
}
|
| 1281 |
},
|
| 1282 |
+
"node_modules/acorn-walk": {
|
| 1283 |
+
"version": "8.2.0",
|
| 1284 |
+
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
|
| 1285 |
+
"integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
|
| 1286 |
+
"dev": true,
|
| 1287 |
+
"engines": {
|
| 1288 |
+
"node": ">=0.4.0"
|
| 1289 |
+
}
|
| 1290 |
+
},
|
| 1291 |
"node_modules/ajv": {
|
| 1292 |
"version": "6.12.6",
|
| 1293 |
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
|
|
|
| 1365 |
"node": ">=8"
|
| 1366 |
}
|
| 1367 |
},
|
| 1368 |
+
"node_modules/assertion-error": {
|
| 1369 |
+
"version": "1.1.0",
|
| 1370 |
+
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
|
| 1371 |
+
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
|
| 1372 |
+
"dev": true,
|
| 1373 |
+
"engines": {
|
| 1374 |
+
"node": "*"
|
| 1375 |
+
}
|
| 1376 |
+
},
|
| 1377 |
"node_modules/autoprefixer": {
|
| 1378 |
"version": "10.4.14",
|
| 1379 |
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
|
|
|
|
| 1444 |
"integrity": "sha512-u4cBQNepWxYA55FunZSM7wMi55yQaN0otnhhilNoWHq0MfOfJeQx0v0mRRpolGOExPjZcl6FtB0BB8Xkb88F0g==",
|
| 1445 |
"optional": true
|
| 1446 |
},
|
| 1447 |
+
"node_modules/blueimp-md5": {
|
| 1448 |
+
"version": "2.19.0",
|
| 1449 |
+
"resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz",
|
| 1450 |
+
"integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==",
|
| 1451 |
+
"dev": true
|
| 1452 |
+
},
|
| 1453 |
"node_modules/brace-expansion": {
|
| 1454 |
"version": "1.1.11",
|
| 1455 |
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
|
|
|
| 1546 |
"node": ">=10.16.0"
|
| 1547 |
}
|
| 1548 |
},
|
| 1549 |
+
"node_modules/cac": {
|
| 1550 |
+
"version": "6.7.14",
|
| 1551 |
+
"resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
|
| 1552 |
+
"integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
|
| 1553 |
+
"dev": true,
|
| 1554 |
+
"engines": {
|
| 1555 |
+
"node": ">=8"
|
| 1556 |
+
}
|
| 1557 |
+
},
|
| 1558 |
"node_modules/callsites": {
|
| 1559 |
"version": "3.1.0",
|
| 1560 |
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
|
|
|
| 1591 |
}
|
| 1592 |
]
|
| 1593 |
},
|
| 1594 |
+
"node_modules/chai": {
|
| 1595 |
+
"version": "4.3.7",
|
| 1596 |
+
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz",
|
| 1597 |
+
"integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==",
|
| 1598 |
+
"dev": true,
|
| 1599 |
+
"dependencies": {
|
| 1600 |
+
"assertion-error": "^1.1.0",
|
| 1601 |
+
"check-error": "^1.0.2",
|
| 1602 |
+
"deep-eql": "^4.1.2",
|
| 1603 |
+
"get-func-name": "^2.0.0",
|
| 1604 |
+
"loupe": "^2.3.1",
|
| 1605 |
+
"pathval": "^1.1.1",
|
| 1606 |
+
"type-detect": "^4.0.5"
|
| 1607 |
+
},
|
| 1608 |
+
"engines": {
|
| 1609 |
+
"node": ">=4"
|
| 1610 |
+
}
|
| 1611 |
+
},
|
| 1612 |
"node_modules/chalk": {
|
| 1613 |
"version": "4.1.2",
|
| 1614 |
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
|
|
|
| 1625 |
"url": "https://github.com/chalk/chalk?sponsor=1"
|
| 1626 |
}
|
| 1627 |
},
|
| 1628 |
+
"node_modules/check-error": {
|
| 1629 |
+
"version": "1.0.2",
|
| 1630 |
+
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
|
| 1631 |
+
"integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
|
| 1632 |
+
"dev": true,
|
| 1633 |
+
"engines": {
|
| 1634 |
+
"node": "*"
|
| 1635 |
+
}
|
| 1636 |
+
},
|
| 1637 |
"node_modules/chokidar": {
|
| 1638 |
"version": "3.5.3",
|
| 1639 |
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
|
|
|
|
| 1707 |
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
| 1708 |
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
|
| 1709 |
},
|
| 1710 |
+
"node_modules/concordance": {
|
| 1711 |
+
"version": "5.0.4",
|
| 1712 |
+
"resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz",
|
| 1713 |
+
"integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==",
|
| 1714 |
+
"dev": true,
|
| 1715 |
+
"dependencies": {
|
| 1716 |
+
"date-time": "^3.1.0",
|
| 1717 |
+
"esutils": "^2.0.3",
|
| 1718 |
+
"fast-diff": "^1.2.0",
|
| 1719 |
+
"js-string-escape": "^1.0.1",
|
| 1720 |
+
"lodash": "^4.17.15",
|
| 1721 |
+
"md5-hex": "^3.0.1",
|
| 1722 |
+
"semver": "^7.3.2",
|
| 1723 |
+
"well-known-symbols": "^2.0.0"
|
| 1724 |
+
},
|
| 1725 |
+
"engines": {
|
| 1726 |
+
"node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14"
|
| 1727 |
+
}
|
| 1728 |
+
},
|
| 1729 |
"node_modules/cookie": {
|
| 1730 |
"version": "0.5.0",
|
| 1731 |
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
|
|
|
|
| 1772 |
"url": "https://opencollective.com/date-fns"
|
| 1773 |
}
|
| 1774 |
},
|
| 1775 |
+
"node_modules/date-time": {
|
| 1776 |
+
"version": "3.1.0",
|
| 1777 |
+
"resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz",
|
| 1778 |
+
"integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==",
|
| 1779 |
+
"dev": true,
|
| 1780 |
+
"dependencies": {
|
| 1781 |
+
"time-zone": "^1.0.0"
|
| 1782 |
+
},
|
| 1783 |
+
"engines": {
|
| 1784 |
+
"node": ">=6"
|
| 1785 |
+
}
|
| 1786 |
+
},
|
| 1787 |
"node_modules/debug": {
|
| 1788 |
"version": "4.3.4",
|
| 1789 |
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
|
|
|
| 1801 |
}
|
| 1802 |
}
|
| 1803 |
},
|
| 1804 |
+
"node_modules/deep-eql": {
|
| 1805 |
+
"version": "4.1.3",
|
| 1806 |
+
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
|
| 1807 |
+
"integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
|
| 1808 |
+
"dev": true,
|
| 1809 |
+
"dependencies": {
|
| 1810 |
+
"type-detect": "^4.0.0"
|
| 1811 |
+
},
|
| 1812 |
+
"engines": {
|
| 1813 |
+
"node": ">=6"
|
| 1814 |
+
}
|
| 1815 |
+
},
|
| 1816 |
"node_modules/deep-is": {
|
| 1817 |
"version": "0.1.4",
|
| 1818 |
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
|
|
|
| 2246 |
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
|
| 2247 |
"dev": true
|
| 2248 |
},
|
| 2249 |
+
"node_modules/fast-diff": {
|
| 2250 |
+
"version": "1.2.0",
|
| 2251 |
+
"resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
|
| 2252 |
+
"integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
|
| 2253 |
+
"dev": true
|
| 2254 |
+
},
|
| 2255 |
"node_modules/fast-glob": {
|
| 2256 |
"version": "3.2.12",
|
| 2257 |
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
|
|
|
|
| 2391 |
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
| 2392 |
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
|
| 2393 |
},
|
| 2394 |
+
"node_modules/get-func-name": {
|
| 2395 |
+
"version": "2.0.0",
|
| 2396 |
+
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
|
| 2397 |
+
"integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==",
|
| 2398 |
+
"dev": true,
|
| 2399 |
+
"engines": {
|
| 2400 |
+
"node": "*"
|
| 2401 |
+
}
|
| 2402 |
+
},
|
| 2403 |
"node_modules/get-stream": {
|
| 2404 |
"version": "6.0.1",
|
| 2405 |
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
|
|
|
|
| 2734 |
"url": "https://opencollective.com/js-sdsl"
|
| 2735 |
}
|
| 2736 |
},
|
| 2737 |
+
"node_modules/js-string-escape": {
|
| 2738 |
+
"version": "1.0.1",
|
| 2739 |
+
"resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
|
| 2740 |
+
"integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==",
|
| 2741 |
+
"dev": true,
|
| 2742 |
+
"engines": {
|
| 2743 |
+
"node": ">= 0.8"
|
| 2744 |
+
}
|
| 2745 |
+
},
|
| 2746 |
"node_modules/js-yaml": {
|
| 2747 |
"version": "4.1.0",
|
| 2748 |
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
|
|
|
|
| 2767 |
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
|
| 2768 |
"dev": true
|
| 2769 |
},
|
| 2770 |
+
"node_modules/jsonc-parser": {
|
| 2771 |
+
"version": "3.2.0",
|
| 2772 |
+
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
|
| 2773 |
+
"integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
|
| 2774 |
+
"dev": true
|
| 2775 |
+
},
|
| 2776 |
"node_modules/kleur": {
|
| 2777 |
"version": "4.1.5",
|
| 2778 |
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
|
|
|
|
| 2847 |
"url": "https://github.com/sponsors/sindresorhus"
|
| 2848 |
}
|
| 2849 |
},
|
| 2850 |
+
"node_modules/lodash": {
|
| 2851 |
+
"version": "4.17.21",
|
| 2852 |
+
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
| 2853 |
+
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
| 2854 |
+
"dev": true
|
| 2855 |
+
},
|
| 2856 |
"node_modules/lodash.castarray": {
|
| 2857 |
"version": "4.4.0",
|
| 2858 |
"resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz",
|
|
|
|
| 2871 |
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
|
| 2872 |
"dev": true
|
| 2873 |
},
|
| 2874 |
+
"node_modules/loupe": {
|
| 2875 |
+
"version": "2.3.6",
|
| 2876 |
+
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz",
|
| 2877 |
+
"integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==",
|
| 2878 |
+
"dev": true,
|
| 2879 |
+
"dependencies": {
|
| 2880 |
+
"get-func-name": "^2.0.0"
|
| 2881 |
+
}
|
| 2882 |
+
},
|
| 2883 |
"node_modules/lru-cache": {
|
| 2884 |
"version": "6.0.0",
|
| 2885 |
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
|
|
|
| 2924 |
"node": ">= 12"
|
| 2925 |
}
|
| 2926 |
},
|
| 2927 |
+
"node_modules/md5-hex": {
|
| 2928 |
+
"version": "3.0.1",
|
| 2929 |
+
"resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz",
|
| 2930 |
+
"integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==",
|
| 2931 |
+
"dev": true,
|
| 2932 |
+
"dependencies": {
|
| 2933 |
+
"blueimp-md5": "^2.10.0"
|
| 2934 |
+
},
|
| 2935 |
+
"engines": {
|
| 2936 |
+
"node": ">=8"
|
| 2937 |
+
}
|
| 2938 |
+
},
|
| 2939 |
"node_modules/memory-pager": {
|
| 2940 |
"version": "1.5.0",
|
| 2941 |
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
|
|
|
|
| 3030 |
"mkdirp": "bin/cmd.js"
|
| 3031 |
}
|
| 3032 |
},
|
| 3033 |
+
"node_modules/mlly": {
|
| 3034 |
+
"version": "1.2.1",
|
| 3035 |
+
"resolved": "https://registry.npmjs.org/mlly/-/mlly-1.2.1.tgz",
|
| 3036 |
+
"integrity": "sha512-1aMEByaWgBPEbWV2BOPEMySRrzl7rIHXmQxam4DM8jVjalTQDjpN2ZKOLUrwyhfZQO7IXHml2StcHMhooDeEEQ==",
|
| 3037 |
+
"dev": true,
|
| 3038 |
+
"dependencies": {
|
| 3039 |
+
"acorn": "^8.8.2",
|
| 3040 |
+
"pathe": "^1.1.0",
|
| 3041 |
+
"pkg-types": "^1.0.3",
|
| 3042 |
+
"ufo": "^1.1.2"
|
| 3043 |
+
}
|
| 3044 |
+
},
|
| 3045 |
"node_modules/mongodb": {
|
| 3046 |
"version": "5.3.0",
|
| 3047 |
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.3.0.tgz",
|
|
|
|
| 3388 |
"node": ">=8"
|
| 3389 |
}
|
| 3390 |
},
|
| 3391 |
+
"node_modules/pathe": {
|
| 3392 |
+
"version": "1.1.0",
|
| 3393 |
+
"resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.0.tgz",
|
| 3394 |
+
"integrity": "sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==",
|
| 3395 |
+
"dev": true
|
| 3396 |
+
},
|
| 3397 |
+
"node_modules/pathval": {
|
| 3398 |
+
"version": "1.1.1",
|
| 3399 |
+
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
|
| 3400 |
+
"integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
|
| 3401 |
+
"dev": true,
|
| 3402 |
+
"engines": {
|
| 3403 |
+
"node": "*"
|
| 3404 |
+
}
|
| 3405 |
+
},
|
| 3406 |
"node_modules/picocolors": {
|
| 3407 |
"version": "1.0.0",
|
| 3408 |
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
|
|
|
|
| 3435 |
"node": ">= 6"
|
| 3436 |
}
|
| 3437 |
},
|
| 3438 |
+
"node_modules/pkg-types": {
|
| 3439 |
+
"version": "1.0.3",
|
| 3440 |
+
"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz",
|
| 3441 |
+
"integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==",
|
| 3442 |
+
"dev": true,
|
| 3443 |
+
"dependencies": {
|
| 3444 |
+
"jsonc-parser": "^3.2.0",
|
| 3445 |
+
"mlly": "^1.2.0",
|
| 3446 |
+
"pathe": "^1.1.0"
|
| 3447 |
+
}
|
| 3448 |
+
},
|
| 3449 |
"node_modules/postcss": {
|
| 3450 |
"version": "8.4.23",
|
| 3451 |
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz",
|
|
|
|
| 3711 |
}
|
| 3712 |
}
|
| 3713 |
},
|
| 3714 |
+
"node_modules/pretty-format": {
|
| 3715 |
+
"version": "27.5.1",
|
| 3716 |
+
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
|
| 3717 |
+
"integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
|
| 3718 |
+
"dev": true,
|
| 3719 |
+
"dependencies": {
|
| 3720 |
+
"ansi-regex": "^5.0.1",
|
| 3721 |
+
"ansi-styles": "^5.0.0",
|
| 3722 |
+
"react-is": "^17.0.1"
|
| 3723 |
+
},
|
| 3724 |
+
"engines": {
|
| 3725 |
+
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
|
| 3726 |
+
}
|
| 3727 |
+
},
|
| 3728 |
+
"node_modules/pretty-format/node_modules/ansi-styles": {
|
| 3729 |
+
"version": "5.2.0",
|
| 3730 |
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
|
| 3731 |
+
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
|
| 3732 |
+
"dev": true,
|
| 3733 |
+
"engines": {
|
| 3734 |
+
"node": ">=10"
|
| 3735 |
+
},
|
| 3736 |
+
"funding": {
|
| 3737 |
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
| 3738 |
+
}
|
| 3739 |
+
},
|
| 3740 |
"node_modules/punycode": {
|
| 3741 |
"version": "2.3.0",
|
| 3742 |
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
|
|
|
| 3784 |
"url": "https://github.com/sponsors/sindresorhus"
|
| 3785 |
}
|
| 3786 |
},
|
| 3787 |
+
"node_modules/react-is": {
|
| 3788 |
+
"version": "17.0.2",
|
| 3789 |
+
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
|
| 3790 |
+
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
|
| 3791 |
+
"dev": true
|
| 3792 |
+
},
|
| 3793 |
"node_modules/read-cache": {
|
| 3794 |
"version": "1.0.0",
|
| 3795 |
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
|
|
|
|
| 3998 |
"node": ">=8"
|
| 3999 |
}
|
| 4000 |
},
|
| 4001 |
+
"node_modules/siginfo": {
|
| 4002 |
+
"version": "2.0.0",
|
| 4003 |
+
"resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
|
| 4004 |
+
"integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
|
| 4005 |
+
"dev": true
|
| 4006 |
+
},
|
| 4007 |
"node_modules/signal-exit": {
|
| 4008 |
"version": "3.0.7",
|
| 4009 |
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
|
|
|
|
| 4092 |
"memory-pager": "^1.0.2"
|
| 4093 |
}
|
| 4094 |
},
|
| 4095 |
+
"node_modules/stackback": {
|
| 4096 |
+
"version": "0.0.2",
|
| 4097 |
+
"resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
|
| 4098 |
+
"integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
|
| 4099 |
+
"dev": true
|
| 4100 |
+
},
|
| 4101 |
+
"node_modules/std-env": {
|
| 4102 |
+
"version": "3.3.3",
|
| 4103 |
+
"resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.3.tgz",
|
| 4104 |
+
"integrity": "sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg==",
|
| 4105 |
+
"dev": true
|
| 4106 |
+
},
|
| 4107 |
"node_modules/streamsearch": {
|
| 4108 |
"version": "1.1.0",
|
| 4109 |
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
|
|
|
|
| 4158 |
"url": "https://github.com/sponsors/sindresorhus"
|
| 4159 |
}
|
| 4160 |
},
|
| 4161 |
+
"node_modules/strip-literal": {
|
| 4162 |
+
"version": "1.0.1",
|
| 4163 |
+
"resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.0.1.tgz",
|
| 4164 |
+
"integrity": "sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==",
|
| 4165 |
+
"dev": true,
|
| 4166 |
+
"dependencies": {
|
| 4167 |
+
"acorn": "^8.8.2"
|
| 4168 |
+
},
|
| 4169 |
+
"funding": {
|
| 4170 |
+
"url": "https://github.com/sponsors/antfu"
|
| 4171 |
+
}
|
| 4172 |
+
},
|
| 4173 |
"node_modules/sucrase": {
|
| 4174 |
"version": "3.32.0",
|
| 4175 |
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz",
|
|
|
|
| 4503 |
"node": ">= 4.1.0"
|
| 4504 |
}
|
| 4505 |
},
|
| 4506 |
+
"node_modules/time-zone": {
|
| 4507 |
+
"version": "1.0.0",
|
| 4508 |
+
"resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz",
|
| 4509 |
+
"integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==",
|
| 4510 |
+
"dev": true,
|
| 4511 |
+
"engines": {
|
| 4512 |
+
"node": ">=4"
|
| 4513 |
+
}
|
| 4514 |
+
},
|
| 4515 |
"node_modules/tiny-glob": {
|
| 4516 |
"version": "0.2.9",
|
| 4517 |
"resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz",
|
|
|
|
| 4522 |
"globrex": "^0.1.2"
|
| 4523 |
}
|
| 4524 |
},
|
| 4525 |
+
"node_modules/tinybench": {
|
| 4526 |
+
"version": "2.5.0",
|
| 4527 |
+
"resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.0.tgz",
|
| 4528 |
+
"integrity": "sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA==",
|
| 4529 |
+
"dev": true
|
| 4530 |
+
},
|
| 4531 |
+
"node_modules/tinypool": {
|
| 4532 |
+
"version": "0.5.0",
|
| 4533 |
+
"resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.5.0.tgz",
|
| 4534 |
+
"integrity": "sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ==",
|
| 4535 |
+
"dev": true,
|
| 4536 |
+
"engines": {
|
| 4537 |
+
"node": ">=14.0.0"
|
| 4538 |
+
}
|
| 4539 |
+
},
|
| 4540 |
+
"node_modules/tinyspy": {
|
| 4541 |
+
"version": "2.1.0",
|
| 4542 |
+
"resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.1.0.tgz",
|
| 4543 |
+
"integrity": "sha512-7eORpyqImoOvkQJCSkL0d0mB4NHHIFAy4b1u8PHdDa7SjGS2njzl6/lyGoZLm+eyYEtlUmFGE0rFj66SWxZgQQ==",
|
| 4544 |
+
"dev": true,
|
| 4545 |
+
"engines": {
|
| 4546 |
+
"node": ">=14.0.0"
|
| 4547 |
+
}
|
| 4548 |
+
},
|
| 4549 |
"node_modules/to-regex-range": {
|
| 4550 |
"version": "5.0.1",
|
| 4551 |
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
|
|
|
| 4621 |
"node": ">= 0.8.0"
|
| 4622 |
}
|
| 4623 |
},
|
| 4624 |
+
"node_modules/type-detect": {
|
| 4625 |
+
"version": "4.0.8",
|
| 4626 |
+
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
|
| 4627 |
+
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
|
| 4628 |
+
"dev": true,
|
| 4629 |
+
"engines": {
|
| 4630 |
+
"node": ">=4"
|
| 4631 |
+
}
|
| 4632 |
+
},
|
| 4633 |
"node_modules/type-fest": {
|
| 4634 |
"version": "0.20.2",
|
| 4635 |
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
|
|
|
|
| 4655 |
"node": ">=4.2.0"
|
| 4656 |
}
|
| 4657 |
},
|
| 4658 |
+
"node_modules/ufo": {
|
| 4659 |
+
"version": "1.1.2",
|
| 4660 |
+
"resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.2.tgz",
|
| 4661 |
+
"integrity": "sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==",
|
| 4662 |
+
"dev": true
|
| 4663 |
+
},
|
| 4664 |
"node_modules/undici": {
|
| 4665 |
"version": "5.22.0",
|
| 4666 |
"resolved": "https://registry.npmjs.org/undici/-/undici-5.22.0.tgz",
|
|
|
|
| 4815 |
}
|
| 4816 |
}
|
| 4817 |
},
|
| 4818 |
+
"node_modules/vite-node": {
|
| 4819 |
+
"version": "0.31.0",
|
| 4820 |
+
"resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.31.0.tgz",
|
| 4821 |
+
"integrity": "sha512-8x1x1LNuPvE2vIvkSB7c1mApX5oqlgsxzHQesYF7l5n1gKrEmrClIiZuOFbFDQcjLsmcWSwwmrWrcGWm9Fxc/g==",
|
| 4822 |
+
"dev": true,
|
| 4823 |
+
"dependencies": {
|
| 4824 |
+
"cac": "^6.7.14",
|
| 4825 |
+
"debug": "^4.3.4",
|
| 4826 |
+
"mlly": "^1.2.0",
|
| 4827 |
+
"pathe": "^1.1.0",
|
| 4828 |
+
"picocolors": "^1.0.0",
|
| 4829 |
+
"vite": "^3.0.0 || ^4.0.0"
|
| 4830 |
+
},
|
| 4831 |
+
"bin": {
|
| 4832 |
+
"vite-node": "vite-node.mjs"
|
| 4833 |
+
},
|
| 4834 |
+
"engines": {
|
| 4835 |
+
"node": ">=v14.18.0"
|
| 4836 |
+
},
|
| 4837 |
+
"funding": {
|
| 4838 |
+
"url": "https://opencollective.com/vitest"
|
| 4839 |
+
}
|
| 4840 |
+
},
|
| 4841 |
"node_modules/vitefu": {
|
| 4842 |
"version": "0.2.4",
|
| 4843 |
"resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz",
|
|
|
|
| 4852 |
}
|
| 4853 |
}
|
| 4854 |
},
|
| 4855 |
+
"node_modules/vitest": {
|
| 4856 |
+
"version": "0.31.0",
|
| 4857 |
+
"resolved": "https://registry.npmjs.org/vitest/-/vitest-0.31.0.tgz",
|
| 4858 |
+
"integrity": "sha512-JwWJS9p3GU9GxkG7eBSmr4Q4x4bvVBSswaCFf1PBNHiPx00obfhHRJfgHcnI0ffn+NMlIh9QGvG75FlaIBdKGA==",
|
| 4859 |
+
"dev": true,
|
| 4860 |
+
"dependencies": {
|
| 4861 |
+
"@types/chai": "^4.3.4",
|
| 4862 |
+
"@types/chai-subset": "^1.3.3",
|
| 4863 |
+
"@types/node": "*",
|
| 4864 |
+
"@vitest/expect": "0.31.0",
|
| 4865 |
+
"@vitest/runner": "0.31.0",
|
| 4866 |
+
"@vitest/snapshot": "0.31.0",
|
| 4867 |
+
"@vitest/spy": "0.31.0",
|
| 4868 |
+
"@vitest/utils": "0.31.0",
|
| 4869 |
+
"acorn": "^8.8.2",
|
| 4870 |
+
"acorn-walk": "^8.2.0",
|
| 4871 |
+
"cac": "^6.7.14",
|
| 4872 |
+
"chai": "^4.3.7",
|
| 4873 |
+
"concordance": "^5.0.4",
|
| 4874 |
+
"debug": "^4.3.4",
|
| 4875 |
+
"local-pkg": "^0.4.3",
|
| 4876 |
+
"magic-string": "^0.30.0",
|
| 4877 |
+
"pathe": "^1.1.0",
|
| 4878 |
+
"picocolors": "^1.0.0",
|
| 4879 |
+
"std-env": "^3.3.2",
|
| 4880 |
+
"strip-literal": "^1.0.1",
|
| 4881 |
+
"tinybench": "^2.4.0",
|
| 4882 |
+
"tinypool": "^0.5.0",
|
| 4883 |
+
"vite": "^3.0.0 || ^4.0.0",
|
| 4884 |
+
"vite-node": "0.31.0",
|
| 4885 |
+
"why-is-node-running": "^2.2.2"
|
| 4886 |
+
},
|
| 4887 |
+
"bin": {
|
| 4888 |
+
"vitest": "vitest.mjs"
|
| 4889 |
+
},
|
| 4890 |
+
"engines": {
|
| 4891 |
+
"node": ">=v14.18.0"
|
| 4892 |
+
},
|
| 4893 |
+
"funding": {
|
| 4894 |
+
"url": "https://opencollective.com/vitest"
|
| 4895 |
+
},
|
| 4896 |
+
"peerDependencies": {
|
| 4897 |
+
"@edge-runtime/vm": "*",
|
| 4898 |
+
"@vitest/browser": "*",
|
| 4899 |
+
"@vitest/ui": "*",
|
| 4900 |
+
"happy-dom": "*",
|
| 4901 |
+
"jsdom": "*",
|
| 4902 |
+
"playwright": "*",
|
| 4903 |
+
"safaridriver": "*",
|
| 4904 |
+
"webdriverio": "*"
|
| 4905 |
+
},
|
| 4906 |
+
"peerDependenciesMeta": {
|
| 4907 |
+
"@edge-runtime/vm": {
|
| 4908 |
+
"optional": true
|
| 4909 |
+
},
|
| 4910 |
+
"@vitest/browser": {
|
| 4911 |
+
"optional": true
|
| 4912 |
+
},
|
| 4913 |
+
"@vitest/ui": {
|
| 4914 |
+
"optional": true
|
| 4915 |
+
},
|
| 4916 |
+
"happy-dom": {
|
| 4917 |
+
"optional": true
|
| 4918 |
+
},
|
| 4919 |
+
"jsdom": {
|
| 4920 |
+
"optional": true
|
| 4921 |
+
},
|
| 4922 |
+
"playwright": {
|
| 4923 |
+
"optional": true
|
| 4924 |
+
},
|
| 4925 |
+
"safaridriver": {
|
| 4926 |
+
"optional": true
|
| 4927 |
+
},
|
| 4928 |
+
"webdriverio": {
|
| 4929 |
+
"optional": true
|
| 4930 |
+
}
|
| 4931 |
+
}
|
| 4932 |
+
},
|
| 4933 |
"node_modules/webidl-conversions": {
|
| 4934 |
"version": "7.0.0",
|
| 4935 |
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
|
|
|
| 4953 |
"integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==",
|
| 4954 |
"dev": true
|
| 4955 |
},
|
| 4956 |
+
"node_modules/well-known-symbols": {
|
| 4957 |
+
"version": "2.0.0",
|
| 4958 |
+
"resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz",
|
| 4959 |
+
"integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==",
|
| 4960 |
+
"dev": true,
|
| 4961 |
+
"engines": {
|
| 4962 |
+
"node": ">=6"
|
| 4963 |
+
}
|
| 4964 |
+
},
|
| 4965 |
"node_modules/whatwg-url": {
|
| 4966 |
"version": "11.0.0",
|
| 4967 |
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
|
|
|
|
| 4989 |
"node": ">= 8"
|
| 4990 |
}
|
| 4991 |
},
|
| 4992 |
+
"node_modules/why-is-node-running": {
|
| 4993 |
+
"version": "2.2.2",
|
| 4994 |
+
"resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz",
|
| 4995 |
+
"integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==",
|
| 4996 |
+
"dev": true,
|
| 4997 |
+
"dependencies": {
|
| 4998 |
+
"siginfo": "^2.0.0",
|
| 4999 |
+
"stackback": "0.0.2"
|
| 5000 |
+
},
|
| 5001 |
+
"bin": {
|
| 5002 |
+
"why-is-node-running": "cli.js"
|
| 5003 |
+
},
|
| 5004 |
+
"engines": {
|
| 5005 |
+
"node": ">=8"
|
| 5006 |
+
}
|
| 5007 |
+
},
|
| 5008 |
"node_modules/word-wrap": {
|
| 5009 |
"version": "1.2.3",
|
| 5010 |
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
|
|
@@ -10,7 +10,8 @@
|
|
| 10 |
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
| 11 |
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
| 12 |
"lint": "prettier --plugin-search-dir . --check . && eslint .",
|
| 13 |
-
"format": "prettier --plugin-search-dir . --write ."
|
|
|
|
| 14 |
},
|
| 15 |
"devDependencies": {
|
| 16 |
"@iconify-json/carbon": "^1.1.16",
|
|
@@ -32,7 +33,8 @@
|
|
| 32 |
"tslib": "^2.4.1",
|
| 33 |
"typescript": "^4.9.3",
|
| 34 |
"unplugin-icons": "^0.16.1",
|
| 35 |
-
"vite": "^4.0.0"
|
|
|
|
| 36 |
},
|
| 37 |
"type": "module",
|
| 38 |
"dependencies": {
|
|
|
|
| 10 |
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
| 11 |
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
| 12 |
"lint": "prettier --plugin-search-dir . --check . && eslint .",
|
| 13 |
+
"format": "prettier --plugin-search-dir . --write .",
|
| 14 |
+
"test": "MONGODB_URL=mongodb://127.0.0.1:27017/ vitest"
|
| 15 |
},
|
| 16 |
"devDependencies": {
|
| 17 |
"@iconify-json/carbon": "^1.1.16",
|
|
|
|
| 33 |
"tslib": "^2.4.1",
|
| 34 |
"typescript": "^4.9.3",
|
| 35 |
"unplugin-icons": "^0.16.1",
|
| 36 |
+
"vite": "^4.0.0",
|
| 37 |
+
"vitest": "^0.31.0"
|
| 38 |
},
|
| 39 |
"type": "module",
|
| 40 |
"dependencies": {
|
|
@@ -18,7 +18,7 @@ const client = new MongoClient(MONGODB_URL, {
|
|
| 18 |
|
| 19 |
export const connectPromise = client.connect().catch(console.error);
|
| 20 |
|
| 21 |
-
const db = client.db(MONGODB_DB_NAME);
|
| 22 |
|
| 23 |
const conversations = db.collection<Conversation>("conversations");
|
| 24 |
const sharedConversations = db.collection<SharedConversation>("sharedConversations");
|
|
|
|
| 18 |
|
| 19 |
export const connectPromise = client.connect().catch(console.error);
|
| 20 |
|
| 21 |
+
const db = client.db(MONGODB_DB_NAME + (import.meta.env.MODE === "test" ? "-test" : ""));
|
| 22 |
|
| 23 |
const conversations = db.collection<Conversation>("conversations");
|
| 24 |
const sharedConversations = db.collection<SharedConversation>("sharedConversations");
|
|
@@ -1,16 +1,8 @@
|
|
| 1 |
import { redirect, error } from "@sveltejs/kit";
|
| 2 |
-
import {
|
| 3 |
-
authCondition,
|
| 4 |
-
getOIDCUserData,
|
| 5 |
-
getRedirectURI,
|
| 6 |
-
refreshSessionCookie,
|
| 7 |
-
validateCsrfToken,
|
| 8 |
-
} from "$lib/server/auth";
|
| 9 |
import { z } from "zod";
|
| 10 |
-
import { collections } from "$lib/server/database";
|
| 11 |
-
import { ObjectId } from "mongodb";
|
| 12 |
import { base } from "$app/paths";
|
| 13 |
-
import {
|
| 14 |
|
| 15 |
export async function GET({ url, locals, cookies }) {
|
| 16 |
const { error: errorName } = z
|
|
@@ -41,69 +33,7 @@ export async function GET({ url, locals, cookies }) {
|
|
| 41 |
|
| 42 |
const { userData } = await getOIDCUserData({ redirectURI: getRedirectURI(url) }, code);
|
| 43 |
|
| 44 |
-
|
| 45 |
-
preferred_username: username,
|
| 46 |
-
name,
|
| 47 |
-
picture: avatarUrl,
|
| 48 |
-
sub: hfUserId,
|
| 49 |
-
} = z
|
| 50 |
-
.object({
|
| 51 |
-
preferred_username: z.string(),
|
| 52 |
-
name: z.string(),
|
| 53 |
-
picture: z.string(),
|
| 54 |
-
sub: z.string(),
|
| 55 |
-
})
|
| 56 |
-
.parse(userData);
|
| 57 |
-
|
| 58 |
-
const existingUser = await collections.users.findOne({ hfUserId });
|
| 59 |
-
let userId = existingUser?._id;
|
| 60 |
-
|
| 61 |
-
if (existingUser) {
|
| 62 |
-
// update existing user if any
|
| 63 |
-
await collections.users.updateOne(
|
| 64 |
-
{ _id: existingUser._id },
|
| 65 |
-
{ $set: { username, name, avatarUrl } }
|
| 66 |
-
);
|
| 67 |
-
// refresh session cookie
|
| 68 |
-
refreshSessionCookie(cookies, existingUser.sessionId);
|
| 69 |
-
} else {
|
| 70 |
-
// user doesn't exist yet, create a new one
|
| 71 |
-
const { insertedId } = await collections.users.insertOne({
|
| 72 |
-
_id: new ObjectId(),
|
| 73 |
-
createdAt: new Date(),
|
| 74 |
-
updatedAt: new Date(),
|
| 75 |
-
username,
|
| 76 |
-
name,
|
| 77 |
-
avatarUrl,
|
| 78 |
-
hfUserId,
|
| 79 |
-
sessionId: locals.sessionId,
|
| 80 |
-
});
|
| 81 |
-
|
| 82 |
-
userId = insertedId;
|
| 83 |
-
|
| 84 |
-
// update pre-existing settings
|
| 85 |
-
const { matchedCount } = await collections.settings.updateOne(authCondition(locals), {
|
| 86 |
-
$set: { userId, updatedAt: new Date() },
|
| 87 |
-
$unset: { sessionId: "" },
|
| 88 |
-
});
|
| 89 |
-
|
| 90 |
-
if (!matchedCount) {
|
| 91 |
-
// update settings if existing or create new default ones
|
| 92 |
-
await collections.settings.insertOne({
|
| 93 |
-
userId,
|
| 94 |
-
ethicsModalAcceptedAt: new Date(),
|
| 95 |
-
updatedAt: new Date(),
|
| 96 |
-
createdAt: new Date(),
|
| 97 |
-
...DEFAULT_SETTINGS,
|
| 98 |
-
});
|
| 99 |
-
}
|
| 100 |
-
}
|
| 101 |
-
|
| 102 |
-
// migrate pre-existing conversations
|
| 103 |
-
await collections.conversations.updateMany(authCondition(locals), {
|
| 104 |
-
$set: { userId },
|
| 105 |
-
$unset: { sessionId: "" },
|
| 106 |
-
});
|
| 107 |
|
| 108 |
throw redirect(302, base || "/");
|
| 109 |
}
|
|
|
|
| 1 |
import { redirect, error } from "@sveltejs/kit";
|
| 2 |
+
import { getOIDCUserData, getRedirectURI, validateCsrfToken } from "$lib/server/auth";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
import { z } from "zod";
|
|
|
|
|
|
|
| 4 |
import { base } from "$app/paths";
|
| 5 |
+
import { updateUser } from "./updateUser";
|
| 6 |
|
| 7 |
export async function GET({ url, locals, cookies }) {
|
| 8 |
const { error: errorName } = z
|
|
|
|
| 33 |
|
| 34 |
const { userData } = await getOIDCUserData({ redirectURI: getRedirectURI(url) }, code);
|
| 35 |
|
| 36 |
+
await updateUser({ userData, locals, cookies });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
|
| 38 |
throw redirect(302, base || "/");
|
| 39 |
}
|
|
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { assert, it, describe, afterEach, vi, expect } from "vitest";
|
| 2 |
+
import type { Cookies } from "@sveltejs/kit";
|
| 3 |
+
import { collections } from "$lib/server/database";
|
| 4 |
+
import { updateUser } from "./updateUser";
|
| 5 |
+
import { ObjectId } from "mongodb";
|
| 6 |
+
import { DEFAULT_SETTINGS } from "$lib/types/Settings";
|
| 7 |
+
import { defaultModel } from "$lib/server/models";
|
| 8 |
+
|
| 9 |
+
const userData = {
|
| 10 |
+
preferred_username: "new-username",
|
| 11 |
+
name: "name",
|
| 12 |
+
picture: "https://example.com/avatar.png",
|
| 13 |
+
sub: "1234567890",
|
| 14 |
+
};
|
| 15 |
+
|
| 16 |
+
const locals = {
|
| 17 |
+
userId: "1234567890",
|
| 18 |
+
sessionId: "1234567890",
|
| 19 |
+
};
|
| 20 |
+
|
| 21 |
+
// @ts-expect-error SvelteKit cookies dumb mock
|
| 22 |
+
const cookiesMock: Cookies = {
|
| 23 |
+
set: vi.fn(),
|
| 24 |
+
};
|
| 25 |
+
|
| 26 |
+
const insertRandomUser = async () => {
|
| 27 |
+
const res = await collections.users.insertOne({
|
| 28 |
+
_id: new ObjectId(),
|
| 29 |
+
createdAt: new Date(),
|
| 30 |
+
updatedAt: new Date(),
|
| 31 |
+
username: "base-username",
|
| 32 |
+
name: userData.name,
|
| 33 |
+
avatarUrl: userData.picture,
|
| 34 |
+
hfUserId: userData.sub,
|
| 35 |
+
sessionId: locals.sessionId,
|
| 36 |
+
});
|
| 37 |
+
|
| 38 |
+
return res.insertedId;
|
| 39 |
+
};
|
| 40 |
+
|
| 41 |
+
const insertRandomConversations = async (count: number) => {
|
| 42 |
+
const res = await collections.conversations.insertMany(
|
| 43 |
+
new Array(count).fill(0).map(() => ({
|
| 44 |
+
_id: new ObjectId(),
|
| 45 |
+
title: "random title",
|
| 46 |
+
messages: [],
|
| 47 |
+
model: defaultModel.id,
|
| 48 |
+
createdAt: new Date(),
|
| 49 |
+
updatedAt: new Date(),
|
| 50 |
+
sessionId: locals.sessionId,
|
| 51 |
+
}))
|
| 52 |
+
);
|
| 53 |
+
|
| 54 |
+
return res.insertedIds;
|
| 55 |
+
};
|
| 56 |
+
|
| 57 |
+
describe("login", () => {
|
| 58 |
+
it("should update user if existing", async () => {
|
| 59 |
+
await insertRandomUser();
|
| 60 |
+
|
| 61 |
+
await updateUser({ userData, locals, cookies: cookiesMock });
|
| 62 |
+
|
| 63 |
+
const existingUser = await collections.users.findOne({ hfUserId: userData.sub });
|
| 64 |
+
|
| 65 |
+
assert.equal(existingUser?.name, userData.name);
|
| 66 |
+
|
| 67 |
+
expect(cookiesMock.set).toBeCalledTimes(1);
|
| 68 |
+
});
|
| 69 |
+
|
| 70 |
+
it("should migrate pre-existing conversations for new user", async () => {
|
| 71 |
+
const insertedId = await insertRandomUser();
|
| 72 |
+
|
| 73 |
+
await insertRandomConversations(2);
|
| 74 |
+
|
| 75 |
+
await updateUser({ userData, locals, cookies: cookiesMock });
|
| 76 |
+
|
| 77 |
+
const conversationCount = await collections.conversations.countDocuments({
|
| 78 |
+
userId: insertedId,
|
| 79 |
+
sessionId: { $exists: false },
|
| 80 |
+
});
|
| 81 |
+
|
| 82 |
+
assert.equal(conversationCount, 2);
|
| 83 |
+
|
| 84 |
+
await collections.conversations.deleteMany({ userId: insertedId });
|
| 85 |
+
});
|
| 86 |
+
|
| 87 |
+
it("should create default settings for new user", async () => {
|
| 88 |
+
await updateUser({ userData, locals, cookies: cookiesMock });
|
| 89 |
+
|
| 90 |
+
const user = await collections.users.findOne({ sessionId: locals.sessionId });
|
| 91 |
+
|
| 92 |
+
assert.exists(user);
|
| 93 |
+
|
| 94 |
+
const settings = await collections.settings.findOne({ userId: user?._id });
|
| 95 |
+
|
| 96 |
+
expect(settings).toMatchObject({
|
| 97 |
+
userId: user?._id,
|
| 98 |
+
updatedAt: expect.any(Date),
|
| 99 |
+
createdAt: expect.any(Date),
|
| 100 |
+
ethicsModalAcceptedAt: expect.any(Date),
|
| 101 |
+
...DEFAULT_SETTINGS,
|
| 102 |
+
});
|
| 103 |
+
|
| 104 |
+
await collections.settings.deleteOne({ userId: user?._id });
|
| 105 |
+
});
|
| 106 |
+
|
| 107 |
+
it("should migrate pre-existing settings for pre-existing user", async () => {
|
| 108 |
+
const { insertedId } = await collections.settings.insertOne({
|
| 109 |
+
sessionId: locals.sessionId,
|
| 110 |
+
ethicsModalAcceptedAt: new Date(),
|
| 111 |
+
updatedAt: new Date(),
|
| 112 |
+
createdAt: new Date(),
|
| 113 |
+
...DEFAULT_SETTINGS,
|
| 114 |
+
shareConversationsWithModelAuthors: false,
|
| 115 |
+
});
|
| 116 |
+
|
| 117 |
+
await updateUser({ userData, locals, cookies: cookiesMock });
|
| 118 |
+
|
| 119 |
+
const settings = await collections.settings.findOne({
|
| 120 |
+
_id: insertedId,
|
| 121 |
+
sessionId: { $exists: false },
|
| 122 |
+
});
|
| 123 |
+
|
| 124 |
+
assert.exists(settings);
|
| 125 |
+
|
| 126 |
+
const user = await collections.users.findOne({ hfUserId: userData.sub });
|
| 127 |
+
|
| 128 |
+
expect(settings).toMatchObject({
|
| 129 |
+
userId: user?._id,
|
| 130 |
+
updatedAt: expect.any(Date),
|
| 131 |
+
createdAt: expect.any(Date),
|
| 132 |
+
ethicsModalAcceptedAt: expect.any(Date),
|
| 133 |
+
...DEFAULT_SETTINGS,
|
| 134 |
+
shareConversationsWithModelAuthors: false,
|
| 135 |
+
});
|
| 136 |
+
|
| 137 |
+
await collections.settings.deleteOne({ userId: user?._id });
|
| 138 |
+
});
|
| 139 |
+
});
|
| 140 |
+
|
| 141 |
+
afterEach(async () => {
|
| 142 |
+
await collections.users.deleteMany({ hfUserId: userData.sub });
|
| 143 |
+
vi.clearAllMocks();
|
| 144 |
+
});
|
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { authCondition, refreshSessionCookie } from "$lib/server/auth";
|
| 2 |
+
import { collections } from "$lib/server/database";
|
| 3 |
+
import { ObjectId } from "mongodb";
|
| 4 |
+
import { DEFAULT_SETTINGS } from "$lib/types/Settings";
|
| 5 |
+
import { z } from "zod";
|
| 6 |
+
import type { UserinfoResponse } from "openid-client";
|
| 7 |
+
import type { Cookies } from "@sveltejs/kit";
|
| 8 |
+
|
| 9 |
+
export async function updateUser(params: {
|
| 10 |
+
userData: UserinfoResponse;
|
| 11 |
+
locals: App.Locals;
|
| 12 |
+
cookies: Cookies;
|
| 13 |
+
}) {
|
| 14 |
+
const { userData, locals, cookies } = params;
|
| 15 |
+
|
| 16 |
+
const {
|
| 17 |
+
preferred_username: username,
|
| 18 |
+
name,
|
| 19 |
+
picture: avatarUrl,
|
| 20 |
+
sub: hfUserId,
|
| 21 |
+
} = z
|
| 22 |
+
.object({
|
| 23 |
+
preferred_username: z.string(),
|
| 24 |
+
name: z.string(),
|
| 25 |
+
picture: z.string(),
|
| 26 |
+
sub: z.string(),
|
| 27 |
+
})
|
| 28 |
+
.parse(userData);
|
| 29 |
+
|
| 30 |
+
const existingUser = await collections.users.findOne({ hfUserId });
|
| 31 |
+
let userId = existingUser?._id;
|
| 32 |
+
|
| 33 |
+
if (existingUser) {
|
| 34 |
+
// update existing user if any
|
| 35 |
+
await collections.users.updateOne(
|
| 36 |
+
{ _id: existingUser._id },
|
| 37 |
+
{ $set: { username, name, avatarUrl } }
|
| 38 |
+
);
|
| 39 |
+
// refresh session cookie
|
| 40 |
+
refreshSessionCookie(cookies, existingUser.sessionId);
|
| 41 |
+
} else {
|
| 42 |
+
// user doesn't exist yet, create a new one
|
| 43 |
+
const { insertedId } = await collections.users.insertOne({
|
| 44 |
+
_id: new ObjectId(),
|
| 45 |
+
createdAt: new Date(),
|
| 46 |
+
updatedAt: new Date(),
|
| 47 |
+
username,
|
| 48 |
+
name,
|
| 49 |
+
avatarUrl,
|
| 50 |
+
hfUserId,
|
| 51 |
+
sessionId: locals.sessionId,
|
| 52 |
+
});
|
| 53 |
+
|
| 54 |
+
userId = insertedId;
|
| 55 |
+
|
| 56 |
+
// update pre-existing settings
|
| 57 |
+
const { matchedCount } = await collections.settings.updateOne(authCondition(locals), {
|
| 58 |
+
$set: { userId, updatedAt: new Date() },
|
| 59 |
+
$unset: { sessionId: "" },
|
| 60 |
+
});
|
| 61 |
+
|
| 62 |
+
if (!matchedCount) {
|
| 63 |
+
// create new default settings
|
| 64 |
+
await collections.settings.insertOne({
|
| 65 |
+
userId,
|
| 66 |
+
ethicsModalAcceptedAt: new Date(),
|
| 67 |
+
updatedAt: new Date(),
|
| 68 |
+
createdAt: new Date(),
|
| 69 |
+
...DEFAULT_SETTINGS,
|
| 70 |
+
});
|
| 71 |
+
}
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
// migrate pre-existing conversations
|
| 75 |
+
await collections.conversations.updateMany(authCondition(locals), {
|
| 76 |
+
$set: { userId },
|
| 77 |
+
$unset: { sessionId: "" },
|
| 78 |
+
});
|
| 79 |
+
}
|