├── .env.example ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── LICENSE ├── README.md ├── package.json ├── pnpm-lock.yaml ├── setup.sql ├── src ├── app.d.ts ├── app.html ├── hooks.server.ts ├── lib │ └── server │ │ ├── db.ts │ │ ├── oauth.ts │ │ ├── rate-limit.ts │ │ ├── session.ts │ │ └── user.ts └── routes │ ├── +layout.svelte │ ├── +page.server.ts │ ├── +page.svelte │ └── login │ ├── +page.server.ts │ ├── +page.svelte │ └── github │ ├── +server.ts │ └── callback │ └── +server.ts ├── svelte.config.js ├── tsconfig.json └── vite.config.ts /.env.example: -------------------------------------------------------------------------------- 1 | GITHUB_CLIENT_ID="" 2 | GITHUB_CLIENT_SECRET="" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | # Output 4 | .output 5 | .vercel 6 | /.svelte-kit 7 | /build 8 | 9 | # OS 10 | .DS_Store 11 | Thumbs.db 12 | 13 | # Env 14 | .env 15 | .env.* 16 | !.env.example 17 | !.env.test 18 | 19 | # Vite 20 | vite.config.js.timestamp-* 21 | vite.config.ts.timestamp-* 22 | 23 | sqlite.db -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Package Managers 2 | package-lock.json 3 | pnpm-lock.yaml 4 | yarn.lock 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "trailingComma": "none", 4 | "printWidth": 120, 5 | "plugins": ["prettier-plugin-svelte"], 6 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] 7 | } 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2024 pilcrowOnPaper and contributors 2 | 3 | Permission to use, copy, modify, and/or distribute this software for 4 | any purpose with or without fee is hereby granted. 5 | 6 | THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL 7 | WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES 8 | OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE 9 | FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY 10 | DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN 11 | AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT 12 | OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GitHub OAuth example in SvelteKit 2 | 3 | Uses SQLite. Rate limiting is implemented using JavaScript `Map`. 4 | 5 | ## Initialize project 6 | 7 | Create a GitHub OAuth app with the redirect URI pointed to `/login/github/callback`. 8 | 9 | ``` 10 | http://localhost:5173/login/github/callback 11 | ``` 12 | 13 | Paste the client ID and secret to a `.env` file. 14 | 15 | ```bash 16 | GITHUB_CLIENT_ID="" 17 | GITHUB_CLIENT_SECRET=" 18 | ``` 19 | 20 | Create `sqlite.db` and run `setup.sql`. 21 | 22 | ``` 23 | sqlite3 sqlite.db 24 | ``` 25 | 26 | Run the application: 27 | 28 | ``` 29 | pnpm dev 30 | ``` 31 | 32 | ## Notes 33 | 34 | - TODO: Update redirect URI 35 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example-sveltekit-github-oauth", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vite dev", 7 | "build": "vite build", 8 | "preview": "vite preview", 9 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 10 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 11 | "lint": "prettier --check .", 12 | "format": "prettier --write ." 13 | }, 14 | "devDependencies": { 15 | "@sveltejs/adapter-auto": "^3.0.0", 16 | "@sveltejs/kit": "^2.0.0", 17 | "@sveltejs/vite-plugin-svelte": "^3.0.0", 18 | "@types/better-sqlite3": "^7.6.11", 19 | "prettier": "^3.1.1", 20 | "prettier-plugin-svelte": "^3.1.2", 21 | "svelte": "^4.2.7", 22 | "svelte-check": "^4.0.0", 23 | "typescript": "^5.0.0", 24 | "vite": "^5.0.3" 25 | }, 26 | "type": "module", 27 | "dependencies": { 28 | "@oslojs/binary": "^1.0.0", 29 | "@oslojs/crypto": "^1.0.1", 30 | "@oslojs/encoding": "^1.1.0", 31 | "@pilcrowjs/db-query": "^0.0.2", 32 | "@pilcrowjs/object-parser": "^0.0.4", 33 | "arctic": "2.0.0-next.9", 34 | "better-sqlite3": "^11.3.0" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@oslojs/binary': 12 | specifier: ^1.0.0 13 | version: 1.0.0 14 | '@oslojs/crypto': 15 | specifier: ^1.0.1 16 | version: 1.0.1 17 | '@oslojs/encoding': 18 | specifier: ^1.1.0 19 | version: 1.1.0 20 | '@pilcrowjs/db-query': 21 | specifier: ^0.0.2 22 | version: 0.0.2 23 | '@pilcrowjs/object-parser': 24 | specifier: ^0.0.4 25 | version: 0.0.4 26 | arctic: 27 | specifier: 2.0.0-next.9 28 | version: 2.0.0-next.9 29 | better-sqlite3: 30 | specifier: ^11.3.0 31 | version: 11.3.0 32 | devDependencies: 33 | '@sveltejs/adapter-auto': 34 | specifier: ^3.0.0 35 | version: 3.2.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)))(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2))) 36 | '@sveltejs/kit': 37 | specifier: ^2.0.0 38 | version: 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)))(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)) 39 | '@sveltejs/vite-plugin-svelte': 40 | specifier: ^3.0.0 41 | version: 3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)) 42 | '@types/better-sqlite3': 43 | specifier: ^7.6.11 44 | version: 7.6.11 45 | prettier: 46 | specifier: ^3.1.1 47 | version: 3.3.3 48 | prettier-plugin-svelte: 49 | specifier: ^3.1.2 50 | version: 3.2.6(prettier@3.3.3)(svelte@4.2.19) 51 | svelte: 52 | specifier: ^4.2.7 53 | version: 4.2.19 54 | svelte-check: 55 | specifier: ^4.0.0 56 | version: 4.0.2(svelte@4.2.19)(typescript@5.6.2) 57 | typescript: 58 | specifier: ^5.0.0 59 | version: 5.6.2 60 | vite: 61 | specifier: ^5.0.3 62 | version: 5.4.8(@types/node@22.7.2) 63 | 64 | packages: 65 | 66 | '@ampproject/remapping@2.3.0': 67 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 68 | engines: {node: '>=6.0.0'} 69 | 70 | '@esbuild/aix-ppc64@0.21.5': 71 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 72 | engines: {node: '>=12'} 73 | cpu: [ppc64] 74 | os: [aix] 75 | 76 | '@esbuild/android-arm64@0.21.5': 77 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 78 | engines: {node: '>=12'} 79 | cpu: [arm64] 80 | os: [android] 81 | 82 | '@esbuild/android-arm@0.21.5': 83 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 84 | engines: {node: '>=12'} 85 | cpu: [arm] 86 | os: [android] 87 | 88 | '@esbuild/android-x64@0.21.5': 89 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 90 | engines: {node: '>=12'} 91 | cpu: [x64] 92 | os: [android] 93 | 94 | '@esbuild/darwin-arm64@0.21.5': 95 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 96 | engines: {node: '>=12'} 97 | cpu: [arm64] 98 | os: [darwin] 99 | 100 | '@esbuild/darwin-x64@0.21.5': 101 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 102 | engines: {node: '>=12'} 103 | cpu: [x64] 104 | os: [darwin] 105 | 106 | '@esbuild/freebsd-arm64@0.21.5': 107 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 108 | engines: {node: '>=12'} 109 | cpu: [arm64] 110 | os: [freebsd] 111 | 112 | '@esbuild/freebsd-x64@0.21.5': 113 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 114 | engines: {node: '>=12'} 115 | cpu: [x64] 116 | os: [freebsd] 117 | 118 | '@esbuild/linux-arm64@0.21.5': 119 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 120 | engines: {node: '>=12'} 121 | cpu: [arm64] 122 | os: [linux] 123 | 124 | '@esbuild/linux-arm@0.21.5': 125 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 126 | engines: {node: '>=12'} 127 | cpu: [arm] 128 | os: [linux] 129 | 130 | '@esbuild/linux-ia32@0.21.5': 131 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 132 | engines: {node: '>=12'} 133 | cpu: [ia32] 134 | os: [linux] 135 | 136 | '@esbuild/linux-loong64@0.21.5': 137 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 138 | engines: {node: '>=12'} 139 | cpu: [loong64] 140 | os: [linux] 141 | 142 | '@esbuild/linux-mips64el@0.21.5': 143 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 144 | engines: {node: '>=12'} 145 | cpu: [mips64el] 146 | os: [linux] 147 | 148 | '@esbuild/linux-ppc64@0.21.5': 149 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 150 | engines: {node: '>=12'} 151 | cpu: [ppc64] 152 | os: [linux] 153 | 154 | '@esbuild/linux-riscv64@0.21.5': 155 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 156 | engines: {node: '>=12'} 157 | cpu: [riscv64] 158 | os: [linux] 159 | 160 | '@esbuild/linux-s390x@0.21.5': 161 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 162 | engines: {node: '>=12'} 163 | cpu: [s390x] 164 | os: [linux] 165 | 166 | '@esbuild/linux-x64@0.21.5': 167 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 168 | engines: {node: '>=12'} 169 | cpu: [x64] 170 | os: [linux] 171 | 172 | '@esbuild/netbsd-x64@0.21.5': 173 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 174 | engines: {node: '>=12'} 175 | cpu: [x64] 176 | os: [netbsd] 177 | 178 | '@esbuild/openbsd-x64@0.21.5': 179 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 180 | engines: {node: '>=12'} 181 | cpu: [x64] 182 | os: [openbsd] 183 | 184 | '@esbuild/sunos-x64@0.21.5': 185 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 186 | engines: {node: '>=12'} 187 | cpu: [x64] 188 | os: [sunos] 189 | 190 | '@esbuild/win32-arm64@0.21.5': 191 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 192 | engines: {node: '>=12'} 193 | cpu: [arm64] 194 | os: [win32] 195 | 196 | '@esbuild/win32-ia32@0.21.5': 197 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 198 | engines: {node: '>=12'} 199 | cpu: [ia32] 200 | os: [win32] 201 | 202 | '@esbuild/win32-x64@0.21.5': 203 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 204 | engines: {node: '>=12'} 205 | cpu: [x64] 206 | os: [win32] 207 | 208 | '@jridgewell/gen-mapping@0.3.5': 209 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 210 | engines: {node: '>=6.0.0'} 211 | 212 | '@jridgewell/resolve-uri@3.1.2': 213 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 214 | engines: {node: '>=6.0.0'} 215 | 216 | '@jridgewell/set-array@1.2.1': 217 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 218 | engines: {node: '>=6.0.0'} 219 | 220 | '@jridgewell/sourcemap-codec@1.5.0': 221 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 222 | 223 | '@jridgewell/trace-mapping@0.3.25': 224 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 225 | 226 | '@oslojs/asn1@0.2.2': 227 | resolution: {integrity: sha512-/c7DTaOdmk3Xb482b4CFnPdWLo5e2WQuozhc89KVb91kohA+VvVNTd9IPyLsZpDUf9u3iwP4HcuMEXBcYmGFnQ==} 228 | 229 | '@oslojs/asn1@1.0.0': 230 | resolution: {integrity: sha512-zw/wn0sj0j0QKbIXfIlnEcTviaCzYOY3V5rAyjR6YtOByFtJiT574+8p9Wlach0lZH9fddD4yb9laEAIl4vXQA==} 231 | 232 | '@oslojs/binary@0.2.3': 233 | resolution: {integrity: sha512-pBJvvl5wpBBmkbP8cMZvPXzxPd7WN+NDBHPEg2N6WTDSnYCCPmqghIz6W+Cw16hhAju9wgmOeHryjHFbNezr1w==} 234 | 235 | '@oslojs/binary@1.0.0': 236 | resolution: {integrity: sha512-9RCU6OwXU6p67H4NODbuxv2S3eenuQ4/WFLrsq+K/k682xrznH5EVWA7N4VFk9VYVcbFtKqur5YQQZc0ySGhsQ==} 237 | 238 | '@oslojs/crypto@0.6.0': 239 | resolution: {integrity: sha512-MAwQt2BwW/oLvYaX1SuVHBqBXV+3CsF7ied23LDqeVeesFTPxLLIqW6pbQ6SMUPnGEJXQx4OTfm2BYSLLvp5Hg==} 240 | 241 | '@oslojs/crypto@1.0.1': 242 | resolution: {integrity: sha512-7n08G8nWjAr/Yu3vu9zzrd0L9XnrJfpMioQcvCMxBIiF5orECHe5/3J0jmXRVvgfqMm/+4oxlQ+Sq39COYLcNQ==} 243 | 244 | '@oslojs/encoding@0.4.1': 245 | resolution: {integrity: sha512-hkjo6MuIK/kQR5CrGNdAPZhS01ZCXuWDRJ187zh6qqF2+yMHZpD9fAYpX8q2bOO6Ryhl3XpCT6kUX76N8hhm4Q==} 246 | 247 | '@oslojs/encoding@1.1.0': 248 | resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} 249 | 250 | '@oslojs/jwt@0.1.0': 251 | resolution: {integrity: sha512-g6JHWeCl9OkHLeoaaKUZoQUfCzhn2U5hYnyoT7/Uh/HY0AGpf0odmFViW6AhPKaOOVXKITvoOArEhec1vEd6GA==} 252 | 253 | '@pilcrowjs/db-query@0.0.2': 254 | resolution: {integrity: sha512-d1iARoIxeUL2cTGhJe4JPhp/n1sXtgnM1mL7elrfsKjdwwjWTDyPDtVcGQy6W7RvrtZ40Wh0pdeYdBnboQjewg==} 255 | 256 | '@pilcrowjs/object-parser@0.0.4': 257 | resolution: {integrity: sha512-mBy3FMv2lvl/sZX/q03wvl3Km8FWg7kbrqQ/qMxK49uZcBssD76Js5k+o7VuCDJI8SNvsrbIX8y6vclx7bWeSg==} 258 | 259 | '@polka/url@1.0.0-next.28': 260 | resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} 261 | 262 | '@rollup/rollup-android-arm-eabi@4.22.4': 263 | resolution: {integrity: sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==} 264 | cpu: [arm] 265 | os: [android] 266 | 267 | '@rollup/rollup-android-arm64@4.22.4': 268 | resolution: {integrity: sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==} 269 | cpu: [arm64] 270 | os: [android] 271 | 272 | '@rollup/rollup-darwin-arm64@4.22.4': 273 | resolution: {integrity: sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==} 274 | cpu: [arm64] 275 | os: [darwin] 276 | 277 | '@rollup/rollup-darwin-x64@4.22.4': 278 | resolution: {integrity: sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==} 279 | cpu: [x64] 280 | os: [darwin] 281 | 282 | '@rollup/rollup-linux-arm-gnueabihf@4.22.4': 283 | resolution: {integrity: sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==} 284 | cpu: [arm] 285 | os: [linux] 286 | 287 | '@rollup/rollup-linux-arm-musleabihf@4.22.4': 288 | resolution: {integrity: sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==} 289 | cpu: [arm] 290 | os: [linux] 291 | 292 | '@rollup/rollup-linux-arm64-gnu@4.22.4': 293 | resolution: {integrity: sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==} 294 | cpu: [arm64] 295 | os: [linux] 296 | 297 | '@rollup/rollup-linux-arm64-musl@4.22.4': 298 | resolution: {integrity: sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==} 299 | cpu: [arm64] 300 | os: [linux] 301 | 302 | '@rollup/rollup-linux-powerpc64le-gnu@4.22.4': 303 | resolution: {integrity: sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==} 304 | cpu: [ppc64] 305 | os: [linux] 306 | 307 | '@rollup/rollup-linux-riscv64-gnu@4.22.4': 308 | resolution: {integrity: sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==} 309 | cpu: [riscv64] 310 | os: [linux] 311 | 312 | '@rollup/rollup-linux-s390x-gnu@4.22.4': 313 | resolution: {integrity: sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==} 314 | cpu: [s390x] 315 | os: [linux] 316 | 317 | '@rollup/rollup-linux-x64-gnu@4.22.4': 318 | resolution: {integrity: sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==} 319 | cpu: [x64] 320 | os: [linux] 321 | 322 | '@rollup/rollup-linux-x64-musl@4.22.4': 323 | resolution: {integrity: sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==} 324 | cpu: [x64] 325 | os: [linux] 326 | 327 | '@rollup/rollup-win32-arm64-msvc@4.22.4': 328 | resolution: {integrity: sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==} 329 | cpu: [arm64] 330 | os: [win32] 331 | 332 | '@rollup/rollup-win32-ia32-msvc@4.22.4': 333 | resolution: {integrity: sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==} 334 | cpu: [ia32] 335 | os: [win32] 336 | 337 | '@rollup/rollup-win32-x64-msvc@4.22.4': 338 | resolution: {integrity: sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==} 339 | cpu: [x64] 340 | os: [win32] 341 | 342 | '@sveltejs/adapter-auto@3.2.5': 343 | resolution: {integrity: sha512-27LR+uKccZ62lgq4N/hvyU2G+hTP9fxWEAfnZcl70HnyfAjMSsGk1z/SjAPXNCD1mVJIE7IFu3TQ8cQ/UH3c0A==} 344 | peerDependencies: 345 | '@sveltejs/kit': ^2.0.0 346 | 347 | '@sveltejs/kit@2.5.28': 348 | resolution: {integrity: sha512-/O7pvFGBsQPcFa9UrW8eUC5uHTOXLsUp3SN0dY6YmRAL9nfPSrJsSJk//j5vMpinSshzUjteAFcfQTU+04Ka1w==} 349 | engines: {node: '>=18.13'} 350 | hasBin: true 351 | peerDependencies: 352 | '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 353 | svelte: ^4.0.0 || ^5.0.0-next.0 354 | vite: ^5.0.3 355 | 356 | '@sveltejs/vite-plugin-svelte-inspector@2.1.0': 357 | resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==} 358 | engines: {node: ^18.0.0 || >=20} 359 | peerDependencies: 360 | '@sveltejs/vite-plugin-svelte': ^3.0.0 361 | svelte: ^4.0.0 || ^5.0.0-next.0 362 | vite: ^5.0.0 363 | 364 | '@sveltejs/vite-plugin-svelte@3.1.2': 365 | resolution: {integrity: sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==} 366 | engines: {node: ^18.0.0 || >=20} 367 | peerDependencies: 368 | svelte: ^4.0.0 || ^5.0.0-next.0 369 | vite: ^5.0.0 370 | 371 | '@types/better-sqlite3@7.6.11': 372 | resolution: {integrity: sha512-i8KcD3PgGtGBLl3+mMYA8PdKkButvPyARxA7IQAd6qeslht13qxb1zzO8dRCtE7U3IoJS782zDBAeoKiM695kg==} 373 | 374 | '@types/cookie@0.6.0': 375 | resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} 376 | 377 | '@types/estree@1.0.5': 378 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 379 | 380 | '@types/estree@1.0.6': 381 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 382 | 383 | '@types/node@22.7.2': 384 | resolution: {integrity: sha512-866lXSrpGpgyHBZUa2m9YNWqHDjjM0aBTJlNtYaGEw4rqY/dcD7deRVTbBBAJelfA7oaGDbNftXF/TL/A6RgoA==} 385 | 386 | acorn@8.12.1: 387 | resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} 388 | engines: {node: '>=0.4.0'} 389 | hasBin: true 390 | 391 | anymatch@3.1.3: 392 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 393 | engines: {node: '>= 8'} 394 | 395 | arctic@2.0.0-next.9: 396 | resolution: {integrity: sha512-VUi47ekY8oWEa+NE4AcEl5fwZF5lMn0/PCQUsPieLP8wFVXVFR+vxDKESkMQg+d8Ffd7LBLXWW/DTIgvD8zRtw==} 397 | 398 | aria-query@5.3.2: 399 | resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 400 | engines: {node: '>= 0.4'} 401 | 402 | axobject-query@4.1.0: 403 | resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 404 | engines: {node: '>= 0.4'} 405 | 406 | base64-js@1.5.1: 407 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 408 | 409 | better-sqlite3@11.3.0: 410 | resolution: {integrity: sha512-iHt9j8NPYF3oKCNOO5ZI4JwThjt3Z6J6XrcwG85VNMVzv1ByqrHWv5VILEbCMFWDsoHhXvQ7oC8vgRXFAKgl9w==} 411 | 412 | binary-extensions@2.3.0: 413 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 414 | engines: {node: '>=8'} 415 | 416 | bindings@1.5.0: 417 | resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} 418 | 419 | bl@4.1.0: 420 | resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} 421 | 422 | braces@3.0.3: 423 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 424 | engines: {node: '>=8'} 425 | 426 | buffer@5.7.1: 427 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 428 | 429 | chokidar@3.6.0: 430 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 431 | engines: {node: '>= 8.10.0'} 432 | 433 | chownr@1.1.4: 434 | resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} 435 | 436 | code-red@1.0.4: 437 | resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==} 438 | 439 | cookie@0.6.0: 440 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 441 | engines: {node: '>= 0.6'} 442 | 443 | css-tree@2.3.1: 444 | resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} 445 | engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} 446 | 447 | debug@4.3.7: 448 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 449 | engines: {node: '>=6.0'} 450 | peerDependencies: 451 | supports-color: '*' 452 | peerDependenciesMeta: 453 | supports-color: 454 | optional: true 455 | 456 | decompress-response@6.0.0: 457 | resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} 458 | engines: {node: '>=10'} 459 | 460 | deep-extend@0.6.0: 461 | resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 462 | engines: {node: '>=4.0.0'} 463 | 464 | deepmerge@4.3.1: 465 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 466 | engines: {node: '>=0.10.0'} 467 | 468 | detect-libc@2.0.3: 469 | resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} 470 | engines: {node: '>=8'} 471 | 472 | devalue@5.1.1: 473 | resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==} 474 | 475 | end-of-stream@1.4.4: 476 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 477 | 478 | esbuild@0.21.5: 479 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 480 | engines: {node: '>=12'} 481 | hasBin: true 482 | 483 | esm-env@1.0.0: 484 | resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} 485 | 486 | estree-walker@3.0.3: 487 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 488 | 489 | expand-template@2.0.3: 490 | resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} 491 | engines: {node: '>=6'} 492 | 493 | fdir@6.3.0: 494 | resolution: {integrity: sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==} 495 | peerDependencies: 496 | picomatch: ^3 || ^4 497 | peerDependenciesMeta: 498 | picomatch: 499 | optional: true 500 | 501 | file-uri-to-path@1.0.0: 502 | resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} 503 | 504 | fill-range@7.1.1: 505 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 506 | engines: {node: '>=8'} 507 | 508 | fs-constants@1.0.0: 509 | resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} 510 | 511 | fsevents@2.3.3: 512 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 513 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 514 | os: [darwin] 515 | 516 | github-from-package@0.0.0: 517 | resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} 518 | 519 | glob-parent@5.1.2: 520 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 521 | engines: {node: '>= 6'} 522 | 523 | globalyzer@0.1.0: 524 | resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} 525 | 526 | globrex@0.1.2: 527 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 528 | 529 | ieee754@1.2.1: 530 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 531 | 532 | import-meta-resolve@4.1.0: 533 | resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} 534 | 535 | inherits@2.0.4: 536 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 537 | 538 | ini@1.3.8: 539 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 540 | 541 | is-binary-path@2.1.0: 542 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 543 | engines: {node: '>=8'} 544 | 545 | is-extglob@2.1.1: 546 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 547 | engines: {node: '>=0.10.0'} 548 | 549 | is-glob@4.0.3: 550 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 551 | engines: {node: '>=0.10.0'} 552 | 553 | is-number@7.0.0: 554 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 555 | engines: {node: '>=0.12.0'} 556 | 557 | is-reference@3.0.2: 558 | resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} 559 | 560 | kleur@4.1.5: 561 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 562 | engines: {node: '>=6'} 563 | 564 | locate-character@3.0.0: 565 | resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 566 | 567 | magic-string@0.30.11: 568 | resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} 569 | 570 | mdn-data@2.0.30: 571 | resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} 572 | 573 | mimic-response@3.1.0: 574 | resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} 575 | engines: {node: '>=10'} 576 | 577 | minimist@1.2.8: 578 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 579 | 580 | mkdirp-classic@0.5.3: 581 | resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} 582 | 583 | mri@1.2.0: 584 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 585 | engines: {node: '>=4'} 586 | 587 | mrmime@2.0.0: 588 | resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} 589 | engines: {node: '>=10'} 590 | 591 | ms@2.1.3: 592 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 593 | 594 | nanoid@3.3.7: 595 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 596 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 597 | hasBin: true 598 | 599 | napi-build-utils@1.0.2: 600 | resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} 601 | 602 | node-abi@3.68.0: 603 | resolution: {integrity: sha512-7vbj10trelExNjFSBm5kTvZXXa7pZyKWx9RCKIyqe6I9Ev3IzGpQoqBP3a+cOdxY+pWj6VkP28n/2wWysBHD/A==} 604 | engines: {node: '>=10'} 605 | 606 | normalize-path@3.0.0: 607 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 608 | engines: {node: '>=0.10.0'} 609 | 610 | once@1.4.0: 611 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 612 | 613 | periscopic@3.1.0: 614 | resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} 615 | 616 | picocolors@1.1.0: 617 | resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} 618 | 619 | picomatch@2.3.1: 620 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 621 | engines: {node: '>=8.6'} 622 | 623 | postcss@8.4.47: 624 | resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} 625 | engines: {node: ^10 || ^12 || >=14} 626 | 627 | prebuild-install@7.1.2: 628 | resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==} 629 | engines: {node: '>=10'} 630 | hasBin: true 631 | 632 | prettier-plugin-svelte@3.2.6: 633 | resolution: {integrity: sha512-Y1XWLw7vXUQQZmgv1JAEiLcErqUniAF2wO7QJsw8BVMvpLET2dI5WpEIEJx1r11iHVdSMzQxivyfrH9On9t2IQ==} 634 | peerDependencies: 635 | prettier: ^3.0.0 636 | svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 637 | 638 | prettier@3.3.3: 639 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} 640 | engines: {node: '>=14'} 641 | hasBin: true 642 | 643 | pump@3.0.2: 644 | resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} 645 | 646 | rc@1.2.8: 647 | resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 648 | hasBin: true 649 | 650 | readable-stream@3.6.2: 651 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 652 | engines: {node: '>= 6'} 653 | 654 | readdirp@3.6.0: 655 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 656 | engines: {node: '>=8.10.0'} 657 | 658 | rollup@4.22.4: 659 | resolution: {integrity: sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==} 660 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 661 | hasBin: true 662 | 663 | sade@1.8.1: 664 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 665 | engines: {node: '>=6'} 666 | 667 | safe-buffer@5.2.1: 668 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 669 | 670 | semver@7.6.3: 671 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 672 | engines: {node: '>=10'} 673 | hasBin: true 674 | 675 | set-cookie-parser@2.7.0: 676 | resolution: {integrity: sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==} 677 | 678 | simple-concat@1.0.1: 679 | resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} 680 | 681 | simple-get@4.0.1: 682 | resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} 683 | 684 | sirv@2.0.4: 685 | resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} 686 | engines: {node: '>= 10'} 687 | 688 | source-map-js@1.2.1: 689 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 690 | engines: {node: '>=0.10.0'} 691 | 692 | string_decoder@1.3.0: 693 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 694 | 695 | strip-json-comments@2.0.1: 696 | resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} 697 | engines: {node: '>=0.10.0'} 698 | 699 | svelte-check@4.0.2: 700 | resolution: {integrity: sha512-w2yqcG9ELJe2RJCnAvB7v0OgkHhL3czzz/tVoxGFfO6y4mOrF6QHCDhXijeXzsU7LVKEwWS3Qd9tza4JBuDxqA==} 701 | engines: {node: '>= 18.0.0'} 702 | hasBin: true 703 | peerDependencies: 704 | svelte: ^4.0.0 || ^5.0.0-next.0 705 | typescript: '>=5.0.0' 706 | 707 | svelte-hmr@0.16.0: 708 | resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==} 709 | engines: {node: ^12.20 || ^14.13.1 || >= 16} 710 | peerDependencies: 711 | svelte: ^3.19.0 || ^4.0.0 712 | 713 | svelte@4.2.19: 714 | resolution: {integrity: sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==} 715 | engines: {node: '>=16'} 716 | 717 | tar-fs@2.1.1: 718 | resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} 719 | 720 | tar-stream@2.2.0: 721 | resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} 722 | engines: {node: '>=6'} 723 | 724 | tiny-glob@0.2.9: 725 | resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} 726 | 727 | to-regex-range@5.0.1: 728 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 729 | engines: {node: '>=8.0'} 730 | 731 | totalist@3.0.1: 732 | resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 733 | engines: {node: '>=6'} 734 | 735 | tunnel-agent@0.6.0: 736 | resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} 737 | 738 | typescript@5.6.2: 739 | resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} 740 | engines: {node: '>=14.17'} 741 | hasBin: true 742 | 743 | undici-types@6.19.8: 744 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 745 | 746 | util-deprecate@1.0.2: 747 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 748 | 749 | vite@5.4.8: 750 | resolution: {integrity: sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==} 751 | engines: {node: ^18.0.0 || >=20.0.0} 752 | hasBin: true 753 | peerDependencies: 754 | '@types/node': ^18.0.0 || >=20.0.0 755 | less: '*' 756 | lightningcss: ^1.21.0 757 | sass: '*' 758 | sass-embedded: '*' 759 | stylus: '*' 760 | sugarss: '*' 761 | terser: ^5.4.0 762 | peerDependenciesMeta: 763 | '@types/node': 764 | optional: true 765 | less: 766 | optional: true 767 | lightningcss: 768 | optional: true 769 | sass: 770 | optional: true 771 | sass-embedded: 772 | optional: true 773 | stylus: 774 | optional: true 775 | sugarss: 776 | optional: true 777 | terser: 778 | optional: true 779 | 780 | vitefu@0.2.5: 781 | resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} 782 | peerDependencies: 783 | vite: ^3.0.0 || ^4.0.0 || ^5.0.0 784 | peerDependenciesMeta: 785 | vite: 786 | optional: true 787 | 788 | wrappy@1.0.2: 789 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 790 | 791 | snapshots: 792 | 793 | '@ampproject/remapping@2.3.0': 794 | dependencies: 795 | '@jridgewell/gen-mapping': 0.3.5 796 | '@jridgewell/trace-mapping': 0.3.25 797 | 798 | '@esbuild/aix-ppc64@0.21.5': 799 | optional: true 800 | 801 | '@esbuild/android-arm64@0.21.5': 802 | optional: true 803 | 804 | '@esbuild/android-arm@0.21.5': 805 | optional: true 806 | 807 | '@esbuild/android-x64@0.21.5': 808 | optional: true 809 | 810 | '@esbuild/darwin-arm64@0.21.5': 811 | optional: true 812 | 813 | '@esbuild/darwin-x64@0.21.5': 814 | optional: true 815 | 816 | '@esbuild/freebsd-arm64@0.21.5': 817 | optional: true 818 | 819 | '@esbuild/freebsd-x64@0.21.5': 820 | optional: true 821 | 822 | '@esbuild/linux-arm64@0.21.5': 823 | optional: true 824 | 825 | '@esbuild/linux-arm@0.21.5': 826 | optional: true 827 | 828 | '@esbuild/linux-ia32@0.21.5': 829 | optional: true 830 | 831 | '@esbuild/linux-loong64@0.21.5': 832 | optional: true 833 | 834 | '@esbuild/linux-mips64el@0.21.5': 835 | optional: true 836 | 837 | '@esbuild/linux-ppc64@0.21.5': 838 | optional: true 839 | 840 | '@esbuild/linux-riscv64@0.21.5': 841 | optional: true 842 | 843 | '@esbuild/linux-s390x@0.21.5': 844 | optional: true 845 | 846 | '@esbuild/linux-x64@0.21.5': 847 | optional: true 848 | 849 | '@esbuild/netbsd-x64@0.21.5': 850 | optional: true 851 | 852 | '@esbuild/openbsd-x64@0.21.5': 853 | optional: true 854 | 855 | '@esbuild/sunos-x64@0.21.5': 856 | optional: true 857 | 858 | '@esbuild/win32-arm64@0.21.5': 859 | optional: true 860 | 861 | '@esbuild/win32-ia32@0.21.5': 862 | optional: true 863 | 864 | '@esbuild/win32-x64@0.21.5': 865 | optional: true 866 | 867 | '@jridgewell/gen-mapping@0.3.5': 868 | dependencies: 869 | '@jridgewell/set-array': 1.2.1 870 | '@jridgewell/sourcemap-codec': 1.5.0 871 | '@jridgewell/trace-mapping': 0.3.25 872 | 873 | '@jridgewell/resolve-uri@3.1.2': {} 874 | 875 | '@jridgewell/set-array@1.2.1': {} 876 | 877 | '@jridgewell/sourcemap-codec@1.5.0': {} 878 | 879 | '@jridgewell/trace-mapping@0.3.25': 880 | dependencies: 881 | '@jridgewell/resolve-uri': 3.1.2 882 | '@jridgewell/sourcemap-codec': 1.5.0 883 | 884 | '@oslojs/asn1@0.2.2': 885 | dependencies: 886 | '@oslojs/binary': 0.2.3 887 | 888 | '@oslojs/asn1@1.0.0': 889 | dependencies: 890 | '@oslojs/binary': 1.0.0 891 | 892 | '@oslojs/binary@0.2.3': {} 893 | 894 | '@oslojs/binary@1.0.0': {} 895 | 896 | '@oslojs/crypto@0.6.0': 897 | dependencies: 898 | '@oslojs/asn1': 0.2.2 899 | '@oslojs/binary': 0.2.3 900 | 901 | '@oslojs/crypto@1.0.1': 902 | dependencies: 903 | '@oslojs/asn1': 1.0.0 904 | '@oslojs/binary': 1.0.0 905 | 906 | '@oslojs/encoding@0.4.1': {} 907 | 908 | '@oslojs/encoding@1.1.0': {} 909 | 910 | '@oslojs/jwt@0.1.0': 911 | dependencies: 912 | '@oslojs/encoding': 0.4.1 913 | 914 | '@pilcrowjs/db-query@0.0.2': {} 915 | 916 | '@pilcrowjs/object-parser@0.0.4': {} 917 | 918 | '@polka/url@1.0.0-next.28': {} 919 | 920 | '@rollup/rollup-android-arm-eabi@4.22.4': 921 | optional: true 922 | 923 | '@rollup/rollup-android-arm64@4.22.4': 924 | optional: true 925 | 926 | '@rollup/rollup-darwin-arm64@4.22.4': 927 | optional: true 928 | 929 | '@rollup/rollup-darwin-x64@4.22.4': 930 | optional: true 931 | 932 | '@rollup/rollup-linux-arm-gnueabihf@4.22.4': 933 | optional: true 934 | 935 | '@rollup/rollup-linux-arm-musleabihf@4.22.4': 936 | optional: true 937 | 938 | '@rollup/rollup-linux-arm64-gnu@4.22.4': 939 | optional: true 940 | 941 | '@rollup/rollup-linux-arm64-musl@4.22.4': 942 | optional: true 943 | 944 | '@rollup/rollup-linux-powerpc64le-gnu@4.22.4': 945 | optional: true 946 | 947 | '@rollup/rollup-linux-riscv64-gnu@4.22.4': 948 | optional: true 949 | 950 | '@rollup/rollup-linux-s390x-gnu@4.22.4': 951 | optional: true 952 | 953 | '@rollup/rollup-linux-x64-gnu@4.22.4': 954 | optional: true 955 | 956 | '@rollup/rollup-linux-x64-musl@4.22.4': 957 | optional: true 958 | 959 | '@rollup/rollup-win32-arm64-msvc@4.22.4': 960 | optional: true 961 | 962 | '@rollup/rollup-win32-ia32-msvc@4.22.4': 963 | optional: true 964 | 965 | '@rollup/rollup-win32-x64-msvc@4.22.4': 966 | optional: true 967 | 968 | '@sveltejs/adapter-auto@3.2.5(@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)))(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)))': 969 | dependencies: 970 | '@sveltejs/kit': 2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)))(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)) 971 | import-meta-resolve: 4.1.0 972 | 973 | '@sveltejs/kit@2.5.28(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)))(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2))': 974 | dependencies: 975 | '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)) 976 | '@types/cookie': 0.6.0 977 | cookie: 0.6.0 978 | devalue: 5.1.1 979 | esm-env: 1.0.0 980 | import-meta-resolve: 4.1.0 981 | kleur: 4.1.5 982 | magic-string: 0.30.11 983 | mrmime: 2.0.0 984 | sade: 1.8.1 985 | set-cookie-parser: 2.7.0 986 | sirv: 2.0.4 987 | svelte: 4.2.19 988 | tiny-glob: 0.2.9 989 | vite: 5.4.8(@types/node@22.7.2) 990 | 991 | '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)))(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2))': 992 | dependencies: 993 | '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)) 994 | debug: 4.3.7 995 | svelte: 4.2.19 996 | vite: 5.4.8(@types/node@22.7.2) 997 | transitivePeerDependencies: 998 | - supports-color 999 | 1000 | '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2))': 1001 | dependencies: 1002 | '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)))(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.2)) 1003 | debug: 4.3.7 1004 | deepmerge: 4.3.1 1005 | kleur: 4.1.5 1006 | magic-string: 0.30.11 1007 | svelte: 4.2.19 1008 | svelte-hmr: 0.16.0(svelte@4.2.19) 1009 | vite: 5.4.8(@types/node@22.7.2) 1010 | vitefu: 0.2.5(vite@5.4.8(@types/node@22.7.2)) 1011 | transitivePeerDependencies: 1012 | - supports-color 1013 | 1014 | '@types/better-sqlite3@7.6.11': 1015 | dependencies: 1016 | '@types/node': 22.7.2 1017 | 1018 | '@types/cookie@0.6.0': {} 1019 | 1020 | '@types/estree@1.0.5': {} 1021 | 1022 | '@types/estree@1.0.6': {} 1023 | 1024 | '@types/node@22.7.2': 1025 | dependencies: 1026 | undici-types: 6.19.8 1027 | 1028 | acorn@8.12.1: {} 1029 | 1030 | anymatch@3.1.3: 1031 | dependencies: 1032 | normalize-path: 3.0.0 1033 | picomatch: 2.3.1 1034 | 1035 | arctic@2.0.0-next.9: 1036 | dependencies: 1037 | '@oslojs/crypto': 0.6.0 1038 | '@oslojs/encoding': 0.4.1 1039 | '@oslojs/jwt': 0.1.0 1040 | 1041 | aria-query@5.3.2: {} 1042 | 1043 | axobject-query@4.1.0: {} 1044 | 1045 | base64-js@1.5.1: {} 1046 | 1047 | better-sqlite3@11.3.0: 1048 | dependencies: 1049 | bindings: 1.5.0 1050 | prebuild-install: 7.1.2 1051 | 1052 | binary-extensions@2.3.0: {} 1053 | 1054 | bindings@1.5.0: 1055 | dependencies: 1056 | file-uri-to-path: 1.0.0 1057 | 1058 | bl@4.1.0: 1059 | dependencies: 1060 | buffer: 5.7.1 1061 | inherits: 2.0.4 1062 | readable-stream: 3.6.2 1063 | 1064 | braces@3.0.3: 1065 | dependencies: 1066 | fill-range: 7.1.1 1067 | 1068 | buffer@5.7.1: 1069 | dependencies: 1070 | base64-js: 1.5.1 1071 | ieee754: 1.2.1 1072 | 1073 | chokidar@3.6.0: 1074 | dependencies: 1075 | anymatch: 3.1.3 1076 | braces: 3.0.3 1077 | glob-parent: 5.1.2 1078 | is-binary-path: 2.1.0 1079 | is-glob: 4.0.3 1080 | normalize-path: 3.0.0 1081 | readdirp: 3.6.0 1082 | optionalDependencies: 1083 | fsevents: 2.3.3 1084 | 1085 | chownr@1.1.4: {} 1086 | 1087 | code-red@1.0.4: 1088 | dependencies: 1089 | '@jridgewell/sourcemap-codec': 1.5.0 1090 | '@types/estree': 1.0.6 1091 | acorn: 8.12.1 1092 | estree-walker: 3.0.3 1093 | periscopic: 3.1.0 1094 | 1095 | cookie@0.6.0: {} 1096 | 1097 | css-tree@2.3.1: 1098 | dependencies: 1099 | mdn-data: 2.0.30 1100 | source-map-js: 1.2.1 1101 | 1102 | debug@4.3.7: 1103 | dependencies: 1104 | ms: 2.1.3 1105 | 1106 | decompress-response@6.0.0: 1107 | dependencies: 1108 | mimic-response: 3.1.0 1109 | 1110 | deep-extend@0.6.0: {} 1111 | 1112 | deepmerge@4.3.1: {} 1113 | 1114 | detect-libc@2.0.3: {} 1115 | 1116 | devalue@5.1.1: {} 1117 | 1118 | end-of-stream@1.4.4: 1119 | dependencies: 1120 | once: 1.4.0 1121 | 1122 | esbuild@0.21.5: 1123 | optionalDependencies: 1124 | '@esbuild/aix-ppc64': 0.21.5 1125 | '@esbuild/android-arm': 0.21.5 1126 | '@esbuild/android-arm64': 0.21.5 1127 | '@esbuild/android-x64': 0.21.5 1128 | '@esbuild/darwin-arm64': 0.21.5 1129 | '@esbuild/darwin-x64': 0.21.5 1130 | '@esbuild/freebsd-arm64': 0.21.5 1131 | '@esbuild/freebsd-x64': 0.21.5 1132 | '@esbuild/linux-arm': 0.21.5 1133 | '@esbuild/linux-arm64': 0.21.5 1134 | '@esbuild/linux-ia32': 0.21.5 1135 | '@esbuild/linux-loong64': 0.21.5 1136 | '@esbuild/linux-mips64el': 0.21.5 1137 | '@esbuild/linux-ppc64': 0.21.5 1138 | '@esbuild/linux-riscv64': 0.21.5 1139 | '@esbuild/linux-s390x': 0.21.5 1140 | '@esbuild/linux-x64': 0.21.5 1141 | '@esbuild/netbsd-x64': 0.21.5 1142 | '@esbuild/openbsd-x64': 0.21.5 1143 | '@esbuild/sunos-x64': 0.21.5 1144 | '@esbuild/win32-arm64': 0.21.5 1145 | '@esbuild/win32-ia32': 0.21.5 1146 | '@esbuild/win32-x64': 0.21.5 1147 | 1148 | esm-env@1.0.0: {} 1149 | 1150 | estree-walker@3.0.3: 1151 | dependencies: 1152 | '@types/estree': 1.0.6 1153 | 1154 | expand-template@2.0.3: {} 1155 | 1156 | fdir@6.3.0: {} 1157 | 1158 | file-uri-to-path@1.0.0: {} 1159 | 1160 | fill-range@7.1.1: 1161 | dependencies: 1162 | to-regex-range: 5.0.1 1163 | 1164 | fs-constants@1.0.0: {} 1165 | 1166 | fsevents@2.3.3: 1167 | optional: true 1168 | 1169 | github-from-package@0.0.0: {} 1170 | 1171 | glob-parent@5.1.2: 1172 | dependencies: 1173 | is-glob: 4.0.3 1174 | 1175 | globalyzer@0.1.0: {} 1176 | 1177 | globrex@0.1.2: {} 1178 | 1179 | ieee754@1.2.1: {} 1180 | 1181 | import-meta-resolve@4.1.0: {} 1182 | 1183 | inherits@2.0.4: {} 1184 | 1185 | ini@1.3.8: {} 1186 | 1187 | is-binary-path@2.1.0: 1188 | dependencies: 1189 | binary-extensions: 2.3.0 1190 | 1191 | is-extglob@2.1.1: {} 1192 | 1193 | is-glob@4.0.3: 1194 | dependencies: 1195 | is-extglob: 2.1.1 1196 | 1197 | is-number@7.0.0: {} 1198 | 1199 | is-reference@3.0.2: 1200 | dependencies: 1201 | '@types/estree': 1.0.6 1202 | 1203 | kleur@4.1.5: {} 1204 | 1205 | locate-character@3.0.0: {} 1206 | 1207 | magic-string@0.30.11: 1208 | dependencies: 1209 | '@jridgewell/sourcemap-codec': 1.5.0 1210 | 1211 | mdn-data@2.0.30: {} 1212 | 1213 | mimic-response@3.1.0: {} 1214 | 1215 | minimist@1.2.8: {} 1216 | 1217 | mkdirp-classic@0.5.3: {} 1218 | 1219 | mri@1.2.0: {} 1220 | 1221 | mrmime@2.0.0: {} 1222 | 1223 | ms@2.1.3: {} 1224 | 1225 | nanoid@3.3.7: {} 1226 | 1227 | napi-build-utils@1.0.2: {} 1228 | 1229 | node-abi@3.68.0: 1230 | dependencies: 1231 | semver: 7.6.3 1232 | 1233 | normalize-path@3.0.0: {} 1234 | 1235 | once@1.4.0: 1236 | dependencies: 1237 | wrappy: 1.0.2 1238 | 1239 | periscopic@3.1.0: 1240 | dependencies: 1241 | '@types/estree': 1.0.6 1242 | estree-walker: 3.0.3 1243 | is-reference: 3.0.2 1244 | 1245 | picocolors@1.1.0: {} 1246 | 1247 | picomatch@2.3.1: {} 1248 | 1249 | postcss@8.4.47: 1250 | dependencies: 1251 | nanoid: 3.3.7 1252 | picocolors: 1.1.0 1253 | source-map-js: 1.2.1 1254 | 1255 | prebuild-install@7.1.2: 1256 | dependencies: 1257 | detect-libc: 2.0.3 1258 | expand-template: 2.0.3 1259 | github-from-package: 0.0.0 1260 | minimist: 1.2.8 1261 | mkdirp-classic: 0.5.3 1262 | napi-build-utils: 1.0.2 1263 | node-abi: 3.68.0 1264 | pump: 3.0.2 1265 | rc: 1.2.8 1266 | simple-get: 4.0.1 1267 | tar-fs: 2.1.1 1268 | tunnel-agent: 0.6.0 1269 | 1270 | prettier-plugin-svelte@3.2.6(prettier@3.3.3)(svelte@4.2.19): 1271 | dependencies: 1272 | prettier: 3.3.3 1273 | svelte: 4.2.19 1274 | 1275 | prettier@3.3.3: {} 1276 | 1277 | pump@3.0.2: 1278 | dependencies: 1279 | end-of-stream: 1.4.4 1280 | once: 1.4.0 1281 | 1282 | rc@1.2.8: 1283 | dependencies: 1284 | deep-extend: 0.6.0 1285 | ini: 1.3.8 1286 | minimist: 1.2.8 1287 | strip-json-comments: 2.0.1 1288 | 1289 | readable-stream@3.6.2: 1290 | dependencies: 1291 | inherits: 2.0.4 1292 | string_decoder: 1.3.0 1293 | util-deprecate: 1.0.2 1294 | 1295 | readdirp@3.6.0: 1296 | dependencies: 1297 | picomatch: 2.3.1 1298 | 1299 | rollup@4.22.4: 1300 | dependencies: 1301 | '@types/estree': 1.0.5 1302 | optionalDependencies: 1303 | '@rollup/rollup-android-arm-eabi': 4.22.4 1304 | '@rollup/rollup-android-arm64': 4.22.4 1305 | '@rollup/rollup-darwin-arm64': 4.22.4 1306 | '@rollup/rollup-darwin-x64': 4.22.4 1307 | '@rollup/rollup-linux-arm-gnueabihf': 4.22.4 1308 | '@rollup/rollup-linux-arm-musleabihf': 4.22.4 1309 | '@rollup/rollup-linux-arm64-gnu': 4.22.4 1310 | '@rollup/rollup-linux-arm64-musl': 4.22.4 1311 | '@rollup/rollup-linux-powerpc64le-gnu': 4.22.4 1312 | '@rollup/rollup-linux-riscv64-gnu': 4.22.4 1313 | '@rollup/rollup-linux-s390x-gnu': 4.22.4 1314 | '@rollup/rollup-linux-x64-gnu': 4.22.4 1315 | '@rollup/rollup-linux-x64-musl': 4.22.4 1316 | '@rollup/rollup-win32-arm64-msvc': 4.22.4 1317 | '@rollup/rollup-win32-ia32-msvc': 4.22.4 1318 | '@rollup/rollup-win32-x64-msvc': 4.22.4 1319 | fsevents: 2.3.3 1320 | 1321 | sade@1.8.1: 1322 | dependencies: 1323 | mri: 1.2.0 1324 | 1325 | safe-buffer@5.2.1: {} 1326 | 1327 | semver@7.6.3: {} 1328 | 1329 | set-cookie-parser@2.7.0: {} 1330 | 1331 | simple-concat@1.0.1: {} 1332 | 1333 | simple-get@4.0.1: 1334 | dependencies: 1335 | decompress-response: 6.0.0 1336 | once: 1.4.0 1337 | simple-concat: 1.0.1 1338 | 1339 | sirv@2.0.4: 1340 | dependencies: 1341 | '@polka/url': 1.0.0-next.28 1342 | mrmime: 2.0.0 1343 | totalist: 3.0.1 1344 | 1345 | source-map-js@1.2.1: {} 1346 | 1347 | string_decoder@1.3.0: 1348 | dependencies: 1349 | safe-buffer: 5.2.1 1350 | 1351 | strip-json-comments@2.0.1: {} 1352 | 1353 | svelte-check@4.0.2(svelte@4.2.19)(typescript@5.6.2): 1354 | dependencies: 1355 | '@jridgewell/trace-mapping': 0.3.25 1356 | chokidar: 3.6.0 1357 | fdir: 6.3.0 1358 | picocolors: 1.1.0 1359 | sade: 1.8.1 1360 | svelte: 4.2.19 1361 | typescript: 5.6.2 1362 | transitivePeerDependencies: 1363 | - picomatch 1364 | 1365 | svelte-hmr@0.16.0(svelte@4.2.19): 1366 | dependencies: 1367 | svelte: 4.2.19 1368 | 1369 | svelte@4.2.19: 1370 | dependencies: 1371 | '@ampproject/remapping': 2.3.0 1372 | '@jridgewell/sourcemap-codec': 1.5.0 1373 | '@jridgewell/trace-mapping': 0.3.25 1374 | '@types/estree': 1.0.6 1375 | acorn: 8.12.1 1376 | aria-query: 5.3.2 1377 | axobject-query: 4.1.0 1378 | code-red: 1.0.4 1379 | css-tree: 2.3.1 1380 | estree-walker: 3.0.3 1381 | is-reference: 3.0.2 1382 | locate-character: 3.0.0 1383 | magic-string: 0.30.11 1384 | periscopic: 3.1.0 1385 | 1386 | tar-fs@2.1.1: 1387 | dependencies: 1388 | chownr: 1.1.4 1389 | mkdirp-classic: 0.5.3 1390 | pump: 3.0.2 1391 | tar-stream: 2.2.0 1392 | 1393 | tar-stream@2.2.0: 1394 | dependencies: 1395 | bl: 4.1.0 1396 | end-of-stream: 1.4.4 1397 | fs-constants: 1.0.0 1398 | inherits: 2.0.4 1399 | readable-stream: 3.6.2 1400 | 1401 | tiny-glob@0.2.9: 1402 | dependencies: 1403 | globalyzer: 0.1.0 1404 | globrex: 0.1.2 1405 | 1406 | to-regex-range@5.0.1: 1407 | dependencies: 1408 | is-number: 7.0.0 1409 | 1410 | totalist@3.0.1: {} 1411 | 1412 | tunnel-agent@0.6.0: 1413 | dependencies: 1414 | safe-buffer: 5.2.1 1415 | 1416 | typescript@5.6.2: {} 1417 | 1418 | undici-types@6.19.8: {} 1419 | 1420 | util-deprecate@1.0.2: {} 1421 | 1422 | vite@5.4.8(@types/node@22.7.2): 1423 | dependencies: 1424 | esbuild: 0.21.5 1425 | postcss: 8.4.47 1426 | rollup: 4.22.4 1427 | optionalDependencies: 1428 | '@types/node': 22.7.2 1429 | fsevents: 2.3.3 1430 | 1431 | vitefu@0.2.5(vite@5.4.8(@types/node@22.7.2)): 1432 | optionalDependencies: 1433 | vite: 5.4.8(@types/node@22.7.2) 1434 | 1435 | wrappy@1.0.2: {} 1436 | -------------------------------------------------------------------------------- /setup.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE user ( 2 | id INTEGER NOT NULL PRIMARY KEY, 3 | github_id INTEGER NOT NULL UNIQUE, 4 | email TEXT NOT NULL UNIQUE, 5 | username TEXT NOT NULL 6 | ); 7 | 8 | CREATE INDEX github_id_index ON user(github_id); 9 | 10 | CREATE TABLE session ( 11 | id TEXT NOT NULL PRIMARY KEY, 12 | user_id INTEGER NOT NULL REFERENCES user(id), 13 | expires_at INTEGER NOT NULL 14 | ); -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | import type { User } from "$lib/server/user"; 4 | import type { Session } from "$lib/server/session"; 5 | 6 | declare global { 7 | namespace App { 8 | // interface Error {} 9 | interface Locals { 10 | user: User | null; 11 | session: Session | null; 12 | } 13 | // interface PageData {} 14 | // interface PageState {} 15 | // interface Platform {} 16 | } 17 | } 18 | 19 | export {}; 20 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 | %sveltekit.head% 8 | 9 | 10 |Email: {data.user.email}
14 | 17 | -------------------------------------------------------------------------------- /src/routes/login/+page.server.ts: -------------------------------------------------------------------------------- 1 | import { redirect } from "@sveltejs/kit"; 2 | 3 | import type { RequestEvent } from "./$types"; 4 | 5 | export async function load(event: RequestEvent) { 6 | if (event.locals.session !== null && event.locals.user !== null) { 7 | return redirect(302, "/"); 8 | } 9 | return {}; 10 | } 11 | -------------------------------------------------------------------------------- /src/routes/login/+page.svelte: -------------------------------------------------------------------------------- 1 |