[READ-ONLY] Mirror of https://github.com/flo-bit/atproto-timelocked-secrets.
0

Configure Feed

Select the types of activity you want to include in your feed.

add atproto

+3003 -569
+4
.claude/settings.local.json
··· 5 5 "mcp__plugin_svelte_svelte__list-sections", 6 6 "mcp__plugin_svelte_svelte__get-documentation" 7 7 ] 8 + }, 9 + "sandbox": { 10 + "enabled": true, 11 + "autoAllowBashIfSandboxed": true 8 12 } 9 13 }
+6
.env.example
··· 1 + # Generate both with: pnpm env:setup-dev 2 + CLIENT_ASSERTION_KEY= 3 + COOKIE_SECRET= 4 + 5 + # Set to your tunnel URL to use a confidential client in dev 6 + # OAUTH_PUBLIC_URL=https://your-tunnel.trycloudflare.com
+2
.gitignore
··· 21 21 # Vite 22 22 vite.config.js.timestamp-* 23 23 vite.config.ts.timestamp-* 24 + 25 + .pnpm-store
+17 -3
package.json
··· 11 11 "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 12 12 "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 13 13 "lint": "prettier --check . && eslint .", 14 - "format": "prettier --write ." 14 + "format": "prettier --write .", 15 + "env:generate-key": "npx tsx src/lib/atproto/scripts/generate-key.ts", 16 + "env:generate-secret": "npx tsx src/lib/atproto/scripts/generate-secret.ts", 17 + "env:setup-dev": "npx tsx src/lib/atproto/scripts/setup-dev.ts" 15 18 }, 16 19 "devDependencies": { 20 + "@atcute/atproto": "^3.1.10", 21 + "@atcute/bluesky": "^3.2.19", 22 + "@atcute/client": "^4.2.1", 23 + "@atcute/identity-resolver": "^1.2.2", 24 + "@atcute/lexicons": "^1.2.9", 25 + "@atcute/oauth-node-client": "^1.1.0", 26 + "@atcute/tid": "^1.1.2", 27 + "@cloudflare/workers-types": "^4.20260301.1", 17 28 "@eslint/compat": "^2.0.2", 18 29 "@eslint/js": "^9.39.2", 19 - "@sveltejs/adapter-auto": "^7.0.0", 30 + "@sveltejs/adapter-cloudflare": "^7.2.8", 20 31 "@sveltejs/kit": "^2.50.2", 21 32 "@sveltejs/vite-plugin-svelte": "^6.2.4", 22 33 "@tailwindcss/forms": "^0.5.11", ··· 33 44 "svelte": "^5.51.0", 34 45 "svelte-check": "^4.4.2", 35 46 "tailwindcss": "^4.1.18", 47 + "tsx": "^4.21.0", 36 48 "typescript": "^5.9.3", 37 49 "typescript-eslint": "^8.54.0", 38 50 "vite": "^7.3.1" 39 51 }, 40 52 "dependencies": { 41 53 "@foxui/core": "^0.5.1", 54 + "@foxui/social": "^0.5.1", 42 55 "@foxui/time": "^0.5.1", 43 56 "@internationalized/date": "^3.11.0", 44 57 "@number-flow/svelte": "^0.4.0", 45 58 "bits-ui": "^2.16.2", 46 59 "drand-client": "^1.4.2", 47 - "tlock-js": "^0.9.0" 60 + "tlock-js": "^0.9.0", 61 + "valibot": "^1.2.0" 48 62 } 49 63 }
+1383 -365
pnpm-lock.yaml
··· 10 10 dependencies: 11 11 '@foxui/core': 12 12 specifier: ^0.5.1 13 - version: 0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(tailwindcss@4.2.1) 13 + version: 0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(tailwindcss@4.2.1) 14 + '@foxui/social': 15 + specifier: ^0.5.1 16 + version: 0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(tailwindcss@4.2.1) 14 17 '@foxui/time': 15 18 specifier: ^0.5.1 16 - version: 0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(tailwindcss@4.2.1) 19 + version: 0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(tailwindcss@4.2.1) 17 20 '@internationalized/date': 18 21 specifier: ^3.11.0 19 22 version: 3.11.0 ··· 22 25 version: 0.4.0(svelte@5.53.6) 23 26 bits-ui: 24 27 specifier: ^2.16.2 25 - version: 2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6) 28 + version: 2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6) 26 29 drand-client: 27 30 specifier: ^1.4.2 28 31 version: 1.4.2 29 32 tlock-js: 30 33 specifier: ^0.9.0 31 34 version: 0.9.0 35 + valibot: 36 + specifier: ^1.2.0 37 + version: 1.2.0(typescript@5.9.3) 32 38 devDependencies: 39 + '@atcute/atproto': 40 + specifier: ^3.1.10 41 + version: 3.1.10 42 + '@atcute/bluesky': 43 + specifier: ^3.2.19 44 + version: 3.2.19 45 + '@atcute/client': 46 + specifier: ^4.2.1 47 + version: 4.2.1 48 + '@atcute/identity-resolver': 49 + specifier: ^1.2.2 50 + version: 1.2.2(@atcute/identity@1.1.3) 51 + '@atcute/lexicons': 52 + specifier: ^1.2.9 53 + version: 1.2.9 54 + '@atcute/oauth-node-client': 55 + specifier: ^1.1.0 56 + version: 1.1.0 57 + '@atcute/tid': 58 + specifier: ^1.1.2 59 + version: 1.1.2 60 + '@cloudflare/workers-types': 61 + specifier: ^4.20260301.1 62 + version: 4.20260301.1 33 63 '@eslint/compat': 34 64 specifier: ^2.0.2 35 65 version: 2.0.2(eslint@9.39.3(jiti@2.6.1)) 36 66 '@eslint/js': 37 67 specifier: ^9.39.2 38 68 version: 9.39.3 39 - '@sveltejs/adapter-auto': 40 - specifier: ^7.0.0 41 - version: 7.0.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1))) 69 + '@sveltejs/adapter-cloudflare': 70 + specifier: ^7.2.8 71 + version: 7.2.8(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(wrangler@4.69.0(@cloudflare/workers-types@4.20260301.1)) 42 72 '@sveltejs/kit': 43 73 specifier: ^2.50.2 44 - version: 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)) 74 + version: 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) 45 75 '@sveltejs/vite-plugin-svelte': 46 76 specifier: ^6.2.4 47 - version: 6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)) 77 + version: 6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) 48 78 '@tailwindcss/forms': 49 79 specifier: ^0.5.11 50 80 version: 0.5.11(tailwindcss@4.2.1) ··· 53 83 version: 0.5.19(tailwindcss@4.2.1) 54 84 '@tailwindcss/vite': 55 85 specifier: ^4.1.18 56 - version: 4.2.1(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)) 86 + version: 4.2.1(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) 57 87 '@types/node': 58 88 specifier: ^22 59 89 version: 22.19.13 ··· 87 117 tailwindcss: 88 118 specifier: ^4.1.18 89 119 version: 4.2.1 120 + tsx: 121 + specifier: ^4.21.0 122 + version: 4.21.0 90 123 typescript: 91 124 specifier: ^5.9.3 92 125 version: 5.9.3 ··· 95 128 version: 8.56.1(eslint@9.39.3(jiti@2.6.1))(typescript@5.9.3) 96 129 vite: 97 130 specifier: ^7.3.1 98 - version: 7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1) 131 + version: 7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) 99 132 100 133 packages: 101 134 135 + '@atcute/atproto@3.1.10': 136 + resolution: {integrity: sha512-+GKZpOc0PJcdWMQEkTfg/rSNDAAHxmAUGBl60g2az15etqJn5WaUPNGFE2sB7hKpwi5Ue2h/L0OacINcE/JDDQ==} 137 + 138 + '@atcute/bluesky@3.2.19': 139 + resolution: {integrity: sha512-W/Sy2671A5eKkdWJn6nfCGoixqMFOouEKRbqRV3630I13Er9iS+gA/rGWUXlp5xNpbfCNmsQ6C1pEidUmO+00g==} 140 + 141 + '@atcute/client@4.2.1': 142 + resolution: {integrity: sha512-ZBFM2pW075JtgGFu5g7HHZBecrClhlcNH8GVP9Zz1aViWR+cjjBsTpeE63rJs+FCOHFYlirUyo5L8SGZ4kMINw==} 143 + 144 + '@atcute/identity-resolver@1.2.2': 145 + resolution: {integrity: sha512-eUh/UH4bFvuXS0X7epYCeJC/kj4rbBXfSRumLEH4smMVwNOgTo7cL/0Srty+P/qVPoZEyXdfEbS0PHJyzoXmHw==} 146 + peerDependencies: 147 + '@atcute/identity': ^1.0.0 148 + 149 + '@atcute/identity@1.1.3': 150 + resolution: {integrity: sha512-oIqPoI8TwWeQxvcLmFEZLdN2XdWcaLVtlm8pNk0E72As9HNzzD9pwKPrLr3rmTLRIoULPPFmq9iFNsTeCIU9ng==} 151 + 152 + '@atcute/lexicons@1.2.9': 153 + resolution: {integrity: sha512-/RRHm2Cw9o8Mcsrq0eo8fjS9okKYLGfuFwrQ0YoP/6sdSDsXshaTLJsvLlcUcaDaSJ1YFOuHIo3zr2Om2F/16g==} 154 + 155 + '@atcute/multibase@1.1.8': 156 + resolution: {integrity: sha512-pJgtImMZKCjqwRbu+2GzB+4xQjKBXDwdZOzeqe0u97zYKRGftpGYGvYv3+pMe2xXe+msDyu7Nv8iJp+U14otTA==} 157 + 158 + '@atcute/oauth-crypto@0.1.0': 159 + resolution: {integrity: sha512-qZYDCNLF/4B6AndYT1rsQelN8621AC5u/sL5PHvlr/qqAbmmUwCBGjEgRSyZtHE1AqD60VNiSMlOgAuEQTSl3w==} 160 + 161 + '@atcute/oauth-keyset@0.1.0': 162 + resolution: {integrity: sha512-+wqT/+I5Lg9VzKnKY3g88+N45xbq+wsdT6bHDGqCVa2u57gRvolFF4dY+weMfc/OX641BIZO6/o+zFtKBsMQnQ==} 163 + 164 + '@atcute/oauth-node-client@1.1.0': 165 + resolution: {integrity: sha512-xCp/VfjtvTeKscKR/oI2hdMTp1/DaF/7ll8b6yZOCgbKlVDDfhCn5mmKNVARGTNaoywxrXG3XffbWCIx3/E87w==} 166 + 167 + '@atcute/oauth-types@0.1.1': 168 + resolution: {integrity: sha512-u+3KMjse3Uc/9hDyilu1QVN7IpcnjVXgRzhddzBB8Uh6wePHNVBDdi9wQvFTVVA3zmxtMJVptXRyLLg6Ou9bqg==} 169 + 170 + '@atcute/tid@1.1.2': 171 + resolution: {integrity: sha512-bmPuOX/TOfcm/vsK9vM98spjkcx2wgd9S2PeK5oLgEr8IbNRPq7iMCAPzOL1nu5XAW3LlkOYQEbYRcw5vcQ37w==} 172 + 173 + '@atcute/time-ms@1.2.3': 174 + resolution: {integrity: sha512-pRrkYSVyPDCWHKp77Ygwg3lxgvfwnh52J3kOIWI1z93kM2jWQDSezbTNDLdJFAJT9xm4rnHsA+toN9Rdhrnidw==} 175 + 176 + '@atcute/uint8array@1.1.1': 177 + resolution: {integrity: sha512-3LsC8XB8TKe9q/5hOA5sFuzGaIFdJZJNewC5OKa3o/eU6+K7JR6see9Zy2JbQERNVnRl11EzbNov1efgLMAs4g==} 178 + 179 + '@atcute/util-fetch@1.0.5': 180 + resolution: {integrity: sha512-qjHj01BGxjSjIFdPiAjSARnodJIIyKxnCMMEcXMESo9TAyND6XZQqrie5fia+LlYWVXdpsTds8uFQwc9jdKTig==} 181 + 182 + '@atcute/util-text@1.1.1': 183 + resolution: {integrity: sha512-JH0SxzUQJAmbOBTYyhxQbkkI6M33YpjlVLEcbP5GYt43xgFArzV0FJVmEpvIj0kjsmphHB45b6IitdvxPdec9w==} 184 + 185 + '@atproto/api@0.18.21': 186 + resolution: {integrity: sha512-s35MIJerGT/pKe2xJtKKswqlIr/ola2r2iURBKBL0Mk1OKe6jP4YvTMh1N2d2PEANFzNNTbKoDaLfJPo2Uvc/w==} 187 + 188 + '@atproto/common-web@0.4.17': 189 + resolution: {integrity: sha512-sfxD8NGxyoxhxmM9EUshEFbWcJ3+JHEOZF4Quk6HsCh1UxpHBmLabT/vEsAkDWl+C/8U0ine0+c/gHyE/OZiQQ==} 190 + 191 + '@atproto/lex-data@0.0.12': 192 + resolution: {integrity: sha512-aekJudcK1p6sbTqUv2bJMJBAGZaOJS0mgDclpK3U6VuBREK/au4B6ffunBFWgrDfg0Vwj2JGyEA7E51WZkJcRw==} 193 + 194 + '@atproto/lex-json@0.0.12': 195 + resolution: {integrity: sha512-XlEpnWWZdDJ5BIgG25GyH+6iBfyrFL18BI5JSE6rUfMObbFMrQRaCuRLQfryRXNysVz3L3U+Qb9y8KcXbE8AcA==} 196 + 197 + '@atproto/lexicon@0.6.1': 198 + resolution: {integrity: sha512-/vI1kVlY50Si+5MXpvOucelnYwb0UJ6Qto5mCp+7Q5C+Jtp+SoSykAPVvjVtTnQUH2vrKOFOwpb3C375vSKzXw==} 199 + 200 + '@atproto/syntax@0.4.3': 201 + resolution: {integrity: sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA==} 202 + 203 + '@atproto/xrpc@0.7.7': 204 + resolution: {integrity: sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA==} 205 + 102 206 '@babel/code-frame@7.29.0': 103 - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==, tarball: https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz} 207 + resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} 104 208 engines: {node: '>=6.9.0'} 105 209 106 210 '@babel/generator@7.29.1': 107 - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==, tarball: https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz} 211 + resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} 108 212 engines: {node: '>=6.9.0'} 109 213 110 214 '@babel/helper-globals@7.28.0': 111 - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==, tarball: https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz} 215 + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} 112 216 engines: {node: '>=6.9.0'} 113 217 114 218 '@babel/helper-string-parser@7.27.1': 115 - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, tarball: https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz} 219 + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 116 220 engines: {node: '>=6.9.0'} 117 221 118 222 '@babel/helper-validator-identifier@7.28.5': 119 - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==, tarball: https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz} 223 + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} 120 224 engines: {node: '>=6.9.0'} 121 225 122 226 '@babel/parser@7.29.0': 123 - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==, tarball: https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz} 227 + resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} 124 228 engines: {node: '>=6.0.0'} 125 229 hasBin: true 126 230 127 231 '@babel/template@7.28.6': 128 - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==, tarball: https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz} 232 + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} 129 233 engines: {node: '>=6.9.0'} 130 234 131 235 '@babel/traverse@7.29.0': 132 - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz} 236 + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} 133 237 engines: {node: '>=6.9.0'} 134 238 135 239 '@babel/types@7.29.0': 136 - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==, tarball: https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz} 240 + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} 137 241 engines: {node: '>=6.9.0'} 138 242 243 + '@badrap/valita@0.4.6': 244 + resolution: {integrity: sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==} 245 + engines: {node: '>= 18'} 246 + 247 + '@cloudflare/kv-asset-handler@0.4.2': 248 + resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==} 249 + engines: {node: '>=18.0.0'} 250 + 251 + '@cloudflare/unenv-preset@2.14.0': 252 + resolution: {integrity: sha512-XKAkWhi1nBdNsSEoNG9nkcbyvfUrSjSf+VYVPfOto3gLTZVc3F4g6RASCMh6IixBKCG2yDgZKQIHGKtjcnLnKg==} 253 + peerDependencies: 254 + unenv: 2.0.0-rc.24 255 + workerd: ^1.20260218.0 256 + peerDependenciesMeta: 257 + workerd: 258 + optional: true 259 + 260 + '@cloudflare/workerd-darwin-64@1.20260305.0': 261 + resolution: {integrity: sha512-chhKOpymo0Eh9J3nymrauMqKGboCc4uz/j0gA1G4gioMnKsN2ZDKJ+qjRZDnCoVGy8u2C4pxlmyIfsXCAfIzhQ==} 262 + engines: {node: '>=16'} 263 + cpu: [x64] 264 + os: [darwin] 265 + 266 + '@cloudflare/workerd-darwin-arm64@1.20260305.0': 267 + resolution: {integrity: sha512-K9aG2OQk5bBfOP+fyGPqLcqZ9OR3ra6uwnxJ8f2mveq2A2LsCI7ZeGxQiAj75Ti80ytH/gJffZIx4Np2JtU3aQ==} 268 + engines: {node: '>=16'} 269 + cpu: [arm64] 270 + os: [darwin] 271 + 272 + '@cloudflare/workerd-linux-64@1.20260305.0': 273 + resolution: {integrity: sha512-tt7XUoIw/cYFeGbkPkcZ6XX1aZm26Aju/4ih+DXxOosbBeGshFSrNJDBfAKKOvkjsAZymJ+WWVDBU+hmNaGfwA==} 274 + engines: {node: '>=16'} 275 + cpu: [x64] 276 + os: [linux] 277 + 278 + '@cloudflare/workerd-linux-arm64@1.20260305.0': 279 + resolution: {integrity: sha512-72QTkY5EzylmvCZ8ZTrnJ9DctmQsfSof1OKyOWqu/pv/B2yACfuPMikq8RpPxvVu7hhS0ztGP6ZvXz72Htq4Zg==} 280 + engines: {node: '>=16'} 281 + cpu: [arm64] 282 + os: [linux] 283 + 284 + '@cloudflare/workerd-windows-64@1.20260305.0': 285 + resolution: {integrity: sha512-BA0uaQPOaI2F6mJtBDqplGnQQhpXCzwEMI33p/TnDxtSk9u8CGIfBFuI6uqo8mJ6ijIaPjeBLGOn2CiRMET4qg==} 286 + engines: {node: '>=16'} 287 + cpu: [x64] 288 + os: [win32] 289 + 290 + '@cloudflare/workers-types@4.20260301.1': 291 + resolution: {integrity: sha512-klKnECMb5A4GtVF0P5NH6rCjtyjqIEKJaz6kEtx9YPHhfFO2HUEarO+MI4F8WPchgeZqpGlEpDhRapzrOTw51Q==} 292 + 293 + '@cspotcode/source-map-support@0.8.1': 294 + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 295 + engines: {node: '>=12'} 296 + 297 + '@emnapi/runtime@1.8.1': 298 + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} 299 + 139 300 '@esbuild/aix-ppc64@0.27.3': 140 - resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz} 301 + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} 141 302 engines: {node: '>=18'} 142 303 cpu: [ppc64] 143 304 os: [aix] 144 305 145 306 '@esbuild/android-arm64@0.27.3': 146 - resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz} 307 + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} 147 308 engines: {node: '>=18'} 148 309 cpu: [arm64] 149 310 os: [android] 150 311 151 312 '@esbuild/android-arm@0.27.3': 152 - resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz} 313 + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} 153 314 engines: {node: '>=18'} 154 315 cpu: [arm] 155 316 os: [android] 156 317 157 318 '@esbuild/android-x64@0.27.3': 158 - resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz} 319 + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} 159 320 engines: {node: '>=18'} 160 321 cpu: [x64] 161 322 os: [android] 162 323 163 324 '@esbuild/darwin-arm64@0.27.3': 164 - resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz} 325 + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} 165 326 engines: {node: '>=18'} 166 327 cpu: [arm64] 167 328 os: [darwin] 168 329 169 330 '@esbuild/darwin-x64@0.27.3': 170 - resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz} 331 + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} 171 332 engines: {node: '>=18'} 172 333 cpu: [x64] 173 334 os: [darwin] 174 335 175 336 '@esbuild/freebsd-arm64@0.27.3': 176 - resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz} 337 + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} 177 338 engines: {node: '>=18'} 178 339 cpu: [arm64] 179 340 os: [freebsd] 180 341 181 342 '@esbuild/freebsd-x64@0.27.3': 182 - resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz} 343 + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} 183 344 engines: {node: '>=18'} 184 345 cpu: [x64] 185 346 os: [freebsd] 186 347 187 348 '@esbuild/linux-arm64@0.27.3': 188 - resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz} 349 + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} 189 350 engines: {node: '>=18'} 190 351 cpu: [arm64] 191 352 os: [linux] 192 353 193 354 '@esbuild/linux-arm@0.27.3': 194 - resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz} 355 + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} 195 356 engines: {node: '>=18'} 196 357 cpu: [arm] 197 358 os: [linux] 198 359 199 360 '@esbuild/linux-ia32@0.27.3': 200 - resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz} 361 + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} 201 362 engines: {node: '>=18'} 202 363 cpu: [ia32] 203 364 os: [linux] 204 365 205 366 '@esbuild/linux-loong64@0.27.3': 206 - resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz} 367 + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} 207 368 engines: {node: '>=18'} 208 369 cpu: [loong64] 209 370 os: [linux] 210 371 211 372 '@esbuild/linux-mips64el@0.27.3': 212 - resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz} 373 + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} 213 374 engines: {node: '>=18'} 214 375 cpu: [mips64el] 215 376 os: [linux] 216 377 217 378 '@esbuild/linux-ppc64@0.27.3': 218 - resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz} 379 + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} 219 380 engines: {node: '>=18'} 220 381 cpu: [ppc64] 221 382 os: [linux] 222 383 223 384 '@esbuild/linux-riscv64@0.27.3': 224 - resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz} 385 + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} 225 386 engines: {node: '>=18'} 226 387 cpu: [riscv64] 227 388 os: [linux] 228 389 229 390 '@esbuild/linux-s390x@0.27.3': 230 - resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz} 391 + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} 231 392 engines: {node: '>=18'} 232 393 cpu: [s390x] 233 394 os: [linux] 234 395 235 396 '@esbuild/linux-x64@0.27.3': 236 - resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz} 397 + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} 237 398 engines: {node: '>=18'} 238 399 cpu: [x64] 239 400 os: [linux] 240 401 241 402 '@esbuild/netbsd-arm64@0.27.3': 242 - resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz} 403 + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} 243 404 engines: {node: '>=18'} 244 405 cpu: [arm64] 245 406 os: [netbsd] 246 407 247 408 '@esbuild/netbsd-x64@0.27.3': 248 - resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz} 409 + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} 249 410 engines: {node: '>=18'} 250 411 cpu: [x64] 251 412 os: [netbsd] 252 413 253 414 '@esbuild/openbsd-arm64@0.27.3': 254 - resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz} 415 + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} 255 416 engines: {node: '>=18'} 256 417 cpu: [arm64] 257 418 os: [openbsd] 258 419 259 420 '@esbuild/openbsd-x64@0.27.3': 260 - resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz} 421 + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} 261 422 engines: {node: '>=18'} 262 423 cpu: [x64] 263 424 os: [openbsd] 264 425 265 426 '@esbuild/openharmony-arm64@0.27.3': 266 - resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz} 427 + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} 267 428 engines: {node: '>=18'} 268 429 cpu: [arm64] 269 430 os: [openharmony] 270 431 271 432 '@esbuild/sunos-x64@0.27.3': 272 - resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz} 433 + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} 273 434 engines: {node: '>=18'} 274 435 cpu: [x64] 275 436 os: [sunos] 276 437 277 438 '@esbuild/win32-arm64@0.27.3': 278 - resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz} 439 + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} 279 440 engines: {node: '>=18'} 280 441 cpu: [arm64] 281 442 os: [win32] 282 443 283 444 '@esbuild/win32-ia32@0.27.3': 284 - resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz} 445 + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} 285 446 engines: {node: '>=18'} 286 447 cpu: [ia32] 287 448 os: [win32] 288 449 289 450 '@esbuild/win32-x64@0.27.3': 290 - resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz} 451 + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} 291 452 engines: {node: '>=18'} 292 453 cpu: [x64] 293 454 os: [win32] 294 455 295 456 '@eslint-community/eslint-utils@4.9.1': 296 - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==, tarball: https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz} 457 + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} 297 458 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 298 459 peerDependencies: 299 460 eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 300 461 301 462 '@eslint-community/regexpp@4.12.2': 302 - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==, tarball: https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz} 463 + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} 303 464 engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 304 465 305 466 '@eslint/compat@2.0.2': 306 - resolution: {integrity: sha512-pR1DoD0h3HfF675QZx0xsyrsU8q70Z/plx7880NOhS02NuWLgBCOMDL787nUeQ7EWLkxv3bPQJaarjcPQb2Dwg==, tarball: https://registry.npmjs.org/@eslint/compat/-/compat-2.0.2.tgz} 467 + resolution: {integrity: sha512-pR1DoD0h3HfF675QZx0xsyrsU8q70Z/plx7880NOhS02NuWLgBCOMDL787nUeQ7EWLkxv3bPQJaarjcPQb2Dwg==} 307 468 engines: {node: ^20.19.0 || ^22.13.0 || >=24} 308 469 peerDependencies: 309 470 eslint: ^8.40 || 9 || 10 ··· 312 473 optional: true 313 474 314 475 '@eslint/config-array@0.21.1': 315 - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==, tarball: https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz} 476 + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} 316 477 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 317 478 318 479 '@eslint/config-helpers@0.4.2': 319 - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==, tarball: https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz} 480 + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} 320 481 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 321 482 322 483 '@eslint/core@0.17.0': 323 - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==, tarball: https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz} 484 + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} 324 485 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 325 486 326 487 '@eslint/core@1.1.0': 327 - resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==, tarball: https://registry.npmjs.org/@eslint/core/-/core-1.1.0.tgz} 488 + resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==} 328 489 engines: {node: ^20.19.0 || ^22.13.0 || >=24} 329 490 330 491 '@eslint/eslintrc@3.3.4': 331 - resolution: {integrity: sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ==, tarball: https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.4.tgz} 492 + resolution: {integrity: sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ==} 332 493 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 333 494 334 495 '@eslint/js@9.39.3': 335 - resolution: {integrity: sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==, tarball: https://registry.npmjs.org/@eslint/js/-/js-9.39.3.tgz} 496 + resolution: {integrity: sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==} 336 497 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 337 498 338 499 '@eslint/object-schema@2.1.7': 339 - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==, tarball: https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz} 500 + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} 340 501 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 341 502 342 503 '@eslint/plugin-kit@0.4.1': 343 - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==, tarball: https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz} 504 + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} 344 505 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 345 506 346 507 '@floating-ui/core@1.7.4': 347 - resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==, tarball: https://registry.npmjs.org/@floating-ui/core/-/core-1.7.4.tgz} 508 + resolution: {integrity: sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg==} 348 509 349 510 '@floating-ui/dom@1.7.5': 350 - resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==, tarball: https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.5.tgz} 511 + resolution: {integrity: sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg==} 351 512 352 513 '@floating-ui/utils@0.2.10': 353 - resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==, tarball: https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz} 514 + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} 354 515 355 516 '@foxui/core@0.5.1': 356 - resolution: {integrity: sha512-WhcwTYy2bipsfrBmNjHF88gfmigr10KeWqNBVrwWmkFjAeXy8J9rj9CSLpeRQCHMmrNDqjVq7VahxWRuz0NO9g==, tarball: https://registry.npmjs.org/@foxui/core/-/core-0.5.1.tgz} 517 + resolution: {integrity: sha512-WhcwTYy2bipsfrBmNjHF88gfmigr10KeWqNBVrwWmkFjAeXy8J9rj9CSLpeRQCHMmrNDqjVq7VahxWRuz0NO9g==} 518 + peerDependencies: 519 + svelte: '>=5' 520 + tailwindcss: '>=3' 521 + 522 + '@foxui/social@0.5.1': 523 + resolution: {integrity: sha512-PupbByfLdykQqzxjTZkMpy43LHaLrivI0DEb9Psew0+1PCMDqFSoDk00BVl5vtaPOlBfOwdQsDICa4kR0LApHg==} 357 524 peerDependencies: 358 525 svelte: '>=5' 359 526 tailwindcss: '>=3' 360 527 361 528 '@foxui/time@0.5.1': 362 - resolution: {integrity: sha512-P7mLM0UVarRdAI0owUUVzsa+VTp+ZQWENNM9BD0H9VESG49dIwP6sbfCRFFecCLijUHP+aIcnO3bnuK9BDx3rQ==, tarball: https://registry.npmjs.org/@foxui/time/-/time-0.5.1.tgz} 529 + resolution: {integrity: sha512-P7mLM0UVarRdAI0owUUVzsa+VTp+ZQWENNM9BD0H9VESG49dIwP6sbfCRFFecCLijUHP+aIcnO3bnuK9BDx3rQ==} 363 530 peerDependencies: 364 531 svelte: '>=5' 365 532 tailwindcss: '>=3' 366 533 367 534 '@humanfs/core@0.19.1': 368 - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==, tarball: https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz} 535 + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 369 536 engines: {node: '>=18.18.0'} 370 537 371 538 '@humanfs/node@0.16.7': 372 - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==, tarball: https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz} 539 + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} 373 540 engines: {node: '>=18.18.0'} 374 541 375 542 '@humanwhocodes/module-importer@1.0.1': 376 - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, tarball: https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz} 543 + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 377 544 engines: {node: '>=12.22'} 378 545 379 546 '@humanwhocodes/retry@0.4.3': 380 - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, tarball: https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz} 547 + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} 381 548 engines: {node: '>=18.18'} 382 549 550 + '@img/colour@1.1.0': 551 + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} 552 + engines: {node: '>=18'} 553 + 554 + '@img/sharp-darwin-arm64@0.34.5': 555 + resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} 556 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 557 + cpu: [arm64] 558 + os: [darwin] 559 + 560 + '@img/sharp-darwin-x64@0.34.5': 561 + resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} 562 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 563 + cpu: [x64] 564 + os: [darwin] 565 + 566 + '@img/sharp-libvips-darwin-arm64@1.2.4': 567 + resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} 568 + cpu: [arm64] 569 + os: [darwin] 570 + 571 + '@img/sharp-libvips-darwin-x64@1.2.4': 572 + resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} 573 + cpu: [x64] 574 + os: [darwin] 575 + 576 + '@img/sharp-libvips-linux-arm64@1.2.4': 577 + resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} 578 + cpu: [arm64] 579 + os: [linux] 580 + libc: [glibc] 581 + 582 + '@img/sharp-libvips-linux-arm@1.2.4': 583 + resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} 584 + cpu: [arm] 585 + os: [linux] 586 + libc: [glibc] 587 + 588 + '@img/sharp-libvips-linux-ppc64@1.2.4': 589 + resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} 590 + cpu: [ppc64] 591 + os: [linux] 592 + libc: [glibc] 593 + 594 + '@img/sharp-libvips-linux-riscv64@1.2.4': 595 + resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} 596 + cpu: [riscv64] 597 + os: [linux] 598 + libc: [glibc] 599 + 600 + '@img/sharp-libvips-linux-s390x@1.2.4': 601 + resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} 602 + cpu: [s390x] 603 + os: [linux] 604 + libc: [glibc] 605 + 606 + '@img/sharp-libvips-linux-x64@1.2.4': 607 + resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} 608 + cpu: [x64] 609 + os: [linux] 610 + libc: [glibc] 611 + 612 + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': 613 + resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} 614 + cpu: [arm64] 615 + os: [linux] 616 + libc: [musl] 617 + 618 + '@img/sharp-libvips-linuxmusl-x64@1.2.4': 619 + resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} 620 + cpu: [x64] 621 + os: [linux] 622 + libc: [musl] 623 + 624 + '@img/sharp-linux-arm64@0.34.5': 625 + resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} 626 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 627 + cpu: [arm64] 628 + os: [linux] 629 + libc: [glibc] 630 + 631 + '@img/sharp-linux-arm@0.34.5': 632 + resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} 633 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 634 + cpu: [arm] 635 + os: [linux] 636 + libc: [glibc] 637 + 638 + '@img/sharp-linux-ppc64@0.34.5': 639 + resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} 640 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 641 + cpu: [ppc64] 642 + os: [linux] 643 + libc: [glibc] 644 + 645 + '@img/sharp-linux-riscv64@0.34.5': 646 + resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} 647 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 648 + cpu: [riscv64] 649 + os: [linux] 650 + libc: [glibc] 651 + 652 + '@img/sharp-linux-s390x@0.34.5': 653 + resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} 654 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 655 + cpu: [s390x] 656 + os: [linux] 657 + libc: [glibc] 658 + 659 + '@img/sharp-linux-x64@0.34.5': 660 + resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} 661 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 662 + cpu: [x64] 663 + os: [linux] 664 + libc: [glibc] 665 + 666 + '@img/sharp-linuxmusl-arm64@0.34.5': 667 + resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} 668 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 669 + cpu: [arm64] 670 + os: [linux] 671 + libc: [musl] 672 + 673 + '@img/sharp-linuxmusl-x64@0.34.5': 674 + resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} 675 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 676 + cpu: [x64] 677 + os: [linux] 678 + libc: [musl] 679 + 680 + '@img/sharp-wasm32@0.34.5': 681 + resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} 682 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 683 + cpu: [wasm32] 684 + 685 + '@img/sharp-win32-arm64@0.34.5': 686 + resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} 687 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 688 + cpu: [arm64] 689 + os: [win32] 690 + 691 + '@img/sharp-win32-ia32@0.34.5': 692 + resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} 693 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 694 + cpu: [ia32] 695 + os: [win32] 696 + 697 + '@img/sharp-win32-x64@0.34.5': 698 + resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} 699 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 700 + cpu: [x64] 701 + os: [win32] 702 + 383 703 '@internationalized/date@3.11.0': 384 - resolution: {integrity: sha512-BOx5huLAWhicM9/ZFs84CzP+V3gBW6vlpM02yzsdYC7TGlZJX1OJiEEHcSayF00Z+3jLlm4w79amvSt6RqKN3Q==, tarball: https://registry.npmjs.org/@internationalized/date/-/date-3.11.0.tgz} 704 + resolution: {integrity: sha512-BOx5huLAWhicM9/ZFs84CzP+V3gBW6vlpM02yzsdYC7TGlZJX1OJiEEHcSayF00Z+3jLlm4w79amvSt6RqKN3Q==} 385 705 386 706 '@jridgewell/gen-mapping@0.3.13': 387 - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==, tarball: https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz} 707 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 388 708 389 709 '@jridgewell/remapping@2.3.5': 390 - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, tarball: https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz} 710 + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} 391 711 392 712 '@jridgewell/resolve-uri@3.1.2': 393 - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, tarball: https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz} 713 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 394 714 engines: {node: '>=6.0.0'} 395 715 396 716 '@jridgewell/sourcemap-codec@1.5.5': 397 - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, tarball: https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz} 717 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 398 718 399 719 '@jridgewell/trace-mapping@0.3.31': 400 - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==, tarball: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz} 720 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 721 + 722 + '@jridgewell/trace-mapping@0.3.9': 723 + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 401 724 402 725 '@kevincharm/noble-bn254-drand@0.0.1': 403 - resolution: {integrity: sha512-HU5Gmst+nxYx8OYKMWuaJZyXh+9/oqJL/L9F3B4My4/IOZZBqIkZIfHQMuPN6KoFHBni08YOw0sRQqEyHVpnGg==, tarball: https://registry.npmjs.org/@kevincharm/noble-bn254-drand/-/noble-bn254-drand-0.0.1.tgz} 726 + resolution: {integrity: sha512-HU5Gmst+nxYx8OYKMWuaJZyXh+9/oqJL/L9F3B4My4/IOZZBqIkZIfHQMuPN6KoFHBni08YOw0sRQqEyHVpnGg==} 404 727 engines: {node: '>=18'} 405 728 peerDependencies: 406 729 '@noble/curves': ^1.6.0 407 730 408 731 '@noble/curves@1.9.7': 409 - resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==, tarball: https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz} 732 + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} 410 733 engines: {node: ^14.21.3 || >=16} 411 734 412 735 '@noble/hashes@1.8.0': 413 - resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==, tarball: https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz} 736 + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} 414 737 engines: {node: ^14.21.3 || >=16} 415 738 416 739 '@number-flow/svelte@0.3.13': 417 - resolution: {integrity: sha512-mvbxDeSFa1o/E4vGhrWuawAFCgcn5qTQ/s++FIoD88es5+JQa/aMQUypTy7qXIreTtTvncpIbkKdw9DMnweaSw==, tarball: https://registry.npmjs.org/@number-flow/svelte/-/svelte-0.3.13.tgz} 740 + resolution: {integrity: sha512-mvbxDeSFa1o/E4vGhrWuawAFCgcn5qTQ/s++FIoD88es5+JQa/aMQUypTy7qXIreTtTvncpIbkKdw9DMnweaSw==} 418 741 peerDependencies: 419 742 svelte: ^4 || ^5 420 743 421 744 '@number-flow/svelte@0.4.0': 422 - resolution: {integrity: sha512-9tnowrlZlBV3IVe3Gm1V7yXSf4Ugag2k7iW45xqb04HXSa1ApEImopvGWAjJpHDvS849o+UCb0YH461Mtde9lA==, tarball: https://registry.npmjs.org/@number-flow/svelte/-/svelte-0.4.0.tgz} 745 + resolution: {integrity: sha512-9tnowrlZlBV3IVe3Gm1V7yXSf4Ugag2k7iW45xqb04HXSa1ApEImopvGWAjJpHDvS849o+UCb0YH461Mtde9lA==} 423 746 peerDependencies: 424 747 svelte: ^4 || ^5 425 748 426 749 '@polka/url@1.0.0-next.29': 427 - resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==, tarball: https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz} 750 + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} 751 + 752 + '@poppinss/colors@4.1.6': 753 + resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==} 754 + 755 + '@poppinss/dumper@0.6.5': 756 + resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==} 757 + 758 + '@poppinss/exception@1.2.3': 759 + resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} 428 760 429 761 '@rollup/rollup-android-arm-eabi@4.59.0': 430 - resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz} 762 + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} 431 763 cpu: [arm] 432 764 os: [android] 433 765 434 766 '@rollup/rollup-android-arm64@4.59.0': 435 - resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz} 767 + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} 436 768 cpu: [arm64] 437 769 os: [android] 438 770 439 771 '@rollup/rollup-darwin-arm64@4.59.0': 440 - resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz} 772 + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} 441 773 cpu: [arm64] 442 774 os: [darwin] 443 775 444 776 '@rollup/rollup-darwin-x64@4.59.0': 445 - resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==, tarball: https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz} 777 + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} 446 778 cpu: [x64] 447 779 os: [darwin] 448 780 449 781 '@rollup/rollup-freebsd-arm64@4.59.0': 450 - resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz} 782 + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} 451 783 cpu: [arm64] 452 784 os: [freebsd] 453 785 454 786 '@rollup/rollup-freebsd-x64@4.59.0': 455 - resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==, tarball: https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz} 787 + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} 456 788 cpu: [x64] 457 789 os: [freebsd] 458 790 459 791 '@rollup/rollup-linux-arm-gnueabihf@4.59.0': 460 - resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz} 792 + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} 461 793 cpu: [arm] 462 794 os: [linux] 795 + libc: [glibc] 463 796 464 797 '@rollup/rollup-linux-arm-musleabihf@4.59.0': 465 - resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz} 798 + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} 466 799 cpu: [arm] 467 800 os: [linux] 801 + libc: [musl] 468 802 469 803 '@rollup/rollup-linux-arm64-gnu@4.59.0': 470 - resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz} 804 + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} 471 805 cpu: [arm64] 472 806 os: [linux] 807 + libc: [glibc] 473 808 474 809 '@rollup/rollup-linux-arm64-musl@4.59.0': 475 - resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz} 810 + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} 476 811 cpu: [arm64] 477 812 os: [linux] 813 + libc: [musl] 478 814 479 815 '@rollup/rollup-linux-loong64-gnu@4.59.0': 480 - resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz} 816 + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} 481 817 cpu: [loong64] 482 818 os: [linux] 819 + libc: [glibc] 483 820 484 821 '@rollup/rollup-linux-loong64-musl@4.59.0': 485 - resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz} 822 + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} 486 823 cpu: [loong64] 487 824 os: [linux] 825 + libc: [musl] 488 826 489 827 '@rollup/rollup-linux-ppc64-gnu@4.59.0': 490 - resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz} 828 + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} 491 829 cpu: [ppc64] 492 830 os: [linux] 831 + libc: [glibc] 493 832 494 833 '@rollup/rollup-linux-ppc64-musl@4.59.0': 495 - resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz} 834 + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} 496 835 cpu: [ppc64] 497 836 os: [linux] 837 + libc: [musl] 498 838 499 839 '@rollup/rollup-linux-riscv64-gnu@4.59.0': 500 - resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz} 840 + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} 501 841 cpu: [riscv64] 502 842 os: [linux] 843 + libc: [glibc] 503 844 504 845 '@rollup/rollup-linux-riscv64-musl@4.59.0': 505 - resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz} 846 + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} 506 847 cpu: [riscv64] 507 848 os: [linux] 849 + libc: [musl] 508 850 509 851 '@rollup/rollup-linux-s390x-gnu@4.59.0': 510 - resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz} 852 + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} 511 853 cpu: [s390x] 512 854 os: [linux] 855 + libc: [glibc] 513 856 514 857 '@rollup/rollup-linux-x64-gnu@4.59.0': 515 - resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz} 858 + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} 516 859 cpu: [x64] 517 860 os: [linux] 861 + libc: [glibc] 518 862 519 863 '@rollup/rollup-linux-x64-musl@4.59.0': 520 - resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==, tarball: https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz} 864 + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} 521 865 cpu: [x64] 522 866 os: [linux] 867 + libc: [musl] 523 868 524 869 '@rollup/rollup-openbsd-x64@4.59.0': 525 - resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==, tarball: https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz} 870 + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} 526 871 cpu: [x64] 527 872 os: [openbsd] 528 873 529 874 '@rollup/rollup-openharmony-arm64@4.59.0': 530 - resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==, tarball: https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz} 875 + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} 531 876 cpu: [arm64] 532 877 os: [openharmony] 533 878 534 879 '@rollup/rollup-win32-arm64-msvc@4.59.0': 535 - resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz} 880 + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} 536 881 cpu: [arm64] 537 882 os: [win32] 538 883 539 884 '@rollup/rollup-win32-ia32-msvc@4.59.0': 540 - resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz} 885 + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} 541 886 cpu: [ia32] 542 887 os: [win32] 543 888 544 889 '@rollup/rollup-win32-x64-gnu@4.59.0': 545 - resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz} 890 + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} 546 891 cpu: [x64] 547 892 os: [win32] 548 893 549 894 '@rollup/rollup-win32-x64-msvc@4.59.0': 550 - resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==, tarball: https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz} 895 + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} 551 896 cpu: [x64] 552 897 os: [win32] 553 898 899 + '@sindresorhus/is@7.2.0': 900 + resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} 901 + engines: {node: '>=18'} 902 + 903 + '@speed-highlight/core@1.2.14': 904 + resolution: {integrity: sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==} 905 + 554 906 '@stablelib/aead@1.0.1': 555 - resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==, tarball: https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz} 907 + resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} 556 908 557 909 '@stablelib/binary@1.0.1': 558 - resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==, tarball: https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz} 910 + resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} 559 911 560 912 '@stablelib/chacha20poly1305@1.0.1': 561 - resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==, tarball: https://registry.npmjs.org/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz} 913 + resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} 562 914 563 915 '@stablelib/chacha@1.0.1': 564 - resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==, tarball: https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz} 916 + resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} 565 917 566 918 '@stablelib/constant-time@1.0.1': 567 - resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==, tarball: https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz} 919 + resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} 568 920 569 921 '@stablelib/int@1.0.1': 570 - resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==, tarball: https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz} 922 + resolution: {integrity: sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==} 571 923 572 924 '@stablelib/poly1305@1.0.1': 573 - resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==, tarball: https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz} 925 + resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==} 574 926 575 927 '@stablelib/wipe@1.0.1': 576 - resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==, tarball: https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz} 928 + resolution: {integrity: sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==} 577 929 578 930 '@standard-schema/spec@1.1.0': 579 - resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==, tarball: https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz} 931 + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} 580 932 581 933 '@sveltejs/acorn-typescript@1.0.9': 582 - resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==, tarball: https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz} 934 + resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} 583 935 peerDependencies: 584 936 acorn: ^8.9.0 585 937 586 - '@sveltejs/adapter-auto@7.0.1': 587 - resolution: {integrity: sha512-dvuPm1E7M9NI/+canIQ6KKQDU2AkEefEZ2Dp7cY6uKoPq9Z/PhOXABe526UdW2mN986gjVkuSLkOYIBnS/M2LQ==, tarball: https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-7.0.1.tgz} 938 + '@sveltejs/adapter-cloudflare@7.2.8': 939 + resolution: {integrity: sha512-bIdhY/Fi4AQmqiBdQVKnafH1h9Gw+xbCvHyUu4EouC8rJOU02zwhi14k/FDhQ0mJF1iblIu3m8UNQ8GpGIvIOQ==} 588 940 peerDependencies: 589 941 '@sveltejs/kit': ^2.0.0 942 + wrangler: ^4.0.0 590 943 591 944 '@sveltejs/kit@2.53.4': 592 - resolution: {integrity: sha512-iAIPEahFgDJJyvz8g0jP08KvqnM6JvdW8YfsygZ+pMeMvyM2zssWMltcsotETvjSZ82G3VlitgDtBIvpQSZrTA==, tarball: https://registry.npmjs.org/@sveltejs/kit/-/kit-2.53.4.tgz} 945 + resolution: {integrity: sha512-iAIPEahFgDJJyvz8g0jP08KvqnM6JvdW8YfsygZ+pMeMvyM2zssWMltcsotETvjSZ82G3VlitgDtBIvpQSZrTA==} 593 946 engines: {node: '>=18.13'} 594 947 hasBin: true 595 948 peerDependencies: ··· 605 958 optional: true 606 959 607 960 '@sveltejs/vite-plugin-svelte-inspector@5.0.2': 608 - resolution: {integrity: sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.2.tgz} 961 + resolution: {integrity: sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==} 609 962 engines: {node: ^20.19 || ^22.12 || >=24} 610 963 peerDependencies: 611 964 '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0 ··· 613 966 vite: ^6.3.0 || ^7.0.0 614 967 615 968 '@sveltejs/vite-plugin-svelte@6.2.4': 616 - resolution: {integrity: sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==, tarball: https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.4.tgz} 969 + resolution: {integrity: sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==} 617 970 engines: {node: ^20.19 || ^22.12 || >=24} 618 971 peerDependencies: 619 972 svelte: ^5.0.0 620 973 vite: ^6.3.0 || ^7.0.0 621 974 622 975 '@swc/helpers@0.5.19': 623 - resolution: {integrity: sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==, tarball: https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.19.tgz} 976 + resolution: {integrity: sha512-QamiFeIK3txNjgUTNppE6MiG3p7TdninpZu0E0PbqVh1a9FNLT2FRhisaa4NcaX52XVhA5l7Pk58Ft7Sqi/2sA==} 624 977 625 978 '@tailwindcss/forms@0.5.11': 626 - resolution: {integrity: sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==, tarball: https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.11.tgz} 979 + resolution: {integrity: sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==} 627 980 peerDependencies: 628 981 tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' 629 982 630 983 '@tailwindcss/node@4.2.1': 631 - resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==, tarball: https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.1.tgz} 984 + resolution: {integrity: sha512-jlx6sLk4EOwO6hHe1oCGm1Q4AN/s0rSrTTPBGPM0/RQ6Uylwq17FuU8IeJJKEjtc6K6O07zsvP+gDO6MMWo7pg==} 632 985 633 986 '@tailwindcss/oxide-android-arm64@4.2.1': 634 - resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.1.tgz} 987 + resolution: {integrity: sha512-eZ7G1Zm5EC8OOKaesIKuw77jw++QJ2lL9N+dDpdQiAB/c/B2wDh0QPFHbkBVrXnwNugvrbJFk1gK2SsVjwWReg==} 635 988 engines: {node: '>= 20'} 636 989 cpu: [arm64] 637 990 os: [android] 638 991 639 992 '@tailwindcss/oxide-darwin-arm64@4.2.1': 640 - resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.1.tgz} 993 + resolution: {integrity: sha512-q/LHkOstoJ7pI1J0q6djesLzRvQSIfEto148ppAd+BVQK0JYjQIFSK3JgYZJa+Yzi0DDa52ZsQx2rqytBnf8Hw==} 641 994 engines: {node: '>= 20'} 642 995 cpu: [arm64] 643 996 os: [darwin] 644 997 645 998 '@tailwindcss/oxide-darwin-x64@4.2.1': 646 - resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.1.tgz} 999 + resolution: {integrity: sha512-/f/ozlaXGY6QLbpvd/kFTro2l18f7dHKpB+ieXz+Cijl4Mt9AI2rTrpq7V+t04nK+j9XBQHnSMdeQRhbGyt6fw==} 647 1000 engines: {node: '>= 20'} 648 1001 cpu: [x64] 649 1002 os: [darwin] 650 1003 651 1004 '@tailwindcss/oxide-freebsd-x64@4.2.1': 652 - resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.1.tgz} 1005 + resolution: {integrity: sha512-5e/AkgYJT/cpbkys/OU2Ei2jdETCLlifwm7ogMC7/hksI2fC3iiq6OcXwjibcIjPung0kRtR3TxEITkqgn0TcA==} 653 1006 engines: {node: '>= 20'} 654 1007 cpu: [x64] 655 1008 os: [freebsd] 656 1009 657 1010 '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.1': 658 - resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.1.tgz} 1011 + resolution: {integrity: sha512-Uny1EcVTTmerCKt/1ZuKTkb0x8ZaiuYucg2/kImO5A5Y/kBz41/+j0gxUZl+hTF3xkWpDmHX+TaWhOtba2Fyuw==} 659 1012 engines: {node: '>= 20'} 660 1013 cpu: [arm] 661 1014 os: [linux] 662 1015 663 1016 '@tailwindcss/oxide-linux-arm64-gnu@4.2.1': 664 - resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.1.tgz} 1017 + resolution: {integrity: sha512-CTrwomI+c7n6aSSQlsPL0roRiNMDQ/YzMD9EjcR+H4f0I1SQ8QqIuPnsVp7QgMkC1Qi8rtkekLkOFjo7OlEFRQ==} 665 1018 engines: {node: '>= 20'} 666 1019 cpu: [arm64] 667 1020 os: [linux] 1021 + libc: [glibc] 668 1022 669 1023 '@tailwindcss/oxide-linux-arm64-musl@4.2.1': 670 - resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.1.tgz} 1024 + resolution: {integrity: sha512-WZA0CHRL/SP1TRbA5mp9htsppSEkWuQ4KsSUumYQnyl8ZdT39ntwqmz4IUHGN6p4XdSlYfJwM4rRzZLShHsGAQ==} 671 1025 engines: {node: '>= 20'} 672 1026 cpu: [arm64] 673 1027 os: [linux] 1028 + libc: [musl] 674 1029 675 1030 '@tailwindcss/oxide-linux-x64-gnu@4.2.1': 676 - resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.1.tgz} 1031 + resolution: {integrity: sha512-qMFzxI2YlBOLW5PhblzuSWlWfwLHaneBE0xHzLrBgNtqN6mWfs+qYbhryGSXQjFYB1Dzf5w+LN5qbUTPhW7Y5g==} 677 1032 engines: {node: '>= 20'} 678 1033 cpu: [x64] 679 1034 os: [linux] 1035 + libc: [glibc] 680 1036 681 1037 '@tailwindcss/oxide-linux-x64-musl@4.2.1': 682 - resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.1.tgz} 1038 + resolution: {integrity: sha512-5r1X2FKnCMUPlXTWRYpHdPYUY6a1Ar/t7P24OuiEdEOmms5lyqjDRvVY1yy9Rmioh+AunQ0rWiOTPE8F9A3v5g==} 683 1039 engines: {node: '>= 20'} 684 1040 cpu: [x64] 685 1041 os: [linux] 1042 + libc: [musl] 686 1043 687 1044 '@tailwindcss/oxide-wasm32-wasi@4.2.1': 688 - resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.1.tgz} 1045 + resolution: {integrity: sha512-MGFB5cVPvshR85MTJkEvqDUnuNoysrsRxd6vnk1Lf2tbiqNlXpHYZqkqOQalydienEWOHHFyyuTSYRsLfxFJ2Q==} 689 1046 engines: {node: '>=14.0.0'} 690 1047 cpu: [wasm32] 691 1048 bundledDependencies: ··· 697 1054 - tslib 698 1055 699 1056 '@tailwindcss/oxide-win32-arm64-msvc@4.2.1': 700 - resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.1.tgz} 1057 + resolution: {integrity: sha512-YlUEHRHBGnCMh4Nj4GnqQyBtsshUPdiNroZj8VPkvTZSoHsilRCwXcVKnG9kyi0ZFAS/3u+qKHBdDc81SADTRA==} 701 1058 engines: {node: '>= 20'} 702 1059 cpu: [arm64] 703 1060 os: [win32] 704 1061 705 1062 '@tailwindcss/oxide-win32-x64-msvc@4.2.1': 706 - resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==, tarball: https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.1.tgz} 1063 + resolution: {integrity: sha512-rbO34G5sMWWyrN/idLeVxAZgAKWrn5LiR3/I90Q9MkA67s6T1oB0xtTe+0heoBvHSpbU9Mk7i6uwJnpo4u21XQ==} 707 1064 engines: {node: '>= 20'} 708 1065 cpu: [x64] 709 1066 os: [win32] 710 1067 711 1068 '@tailwindcss/oxide@4.2.1': 712 - resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==, tarball: https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.1.tgz} 1069 + resolution: {integrity: sha512-yv9jeEFWnjKCI6/T3Oq50yQEOqmpmpfzG1hcZsAOaXFQPfzWprWrlHSdGPEF3WQTi8zu8ohC9Mh9J470nT5pUw==} 713 1070 engines: {node: '>= 20'} 714 1071 715 1072 '@tailwindcss/typography@0.5.19': 716 - resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==, tarball: https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz} 1073 + resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} 717 1074 peerDependencies: 718 1075 tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' 719 1076 720 1077 '@tailwindcss/vite@4.2.1': 721 - resolution: {integrity: sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==, tarball: https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.1.tgz} 1078 + resolution: {integrity: sha512-TBf2sJjYeb28jD2U/OhwdW0bbOsxkWPwQ7SrqGf9sVcoYwZj7rkXljroBO9wKBut9XnmQLXanuDUeqQK0lGg/w==} 722 1079 peerDependencies: 723 1080 vite: ^5.2.0 || ^6 || ^7 724 1081 1082 + '@types/bun@1.3.9': 1083 + resolution: {integrity: sha512-KQ571yULOdWJiMH+RIWIOZ7B2RXQGpL1YQrBtLIV3FqDcCu6FsbFUBwhdKUlCKUpS3PJDsHlJ1QKlpxoVR+xtw==} 1084 + 725 1085 '@types/cookie@0.6.0': 726 - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==, tarball: https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz} 1086 + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} 727 1087 728 1088 '@types/estree@1.0.8': 729 - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz} 1089 + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 730 1090 731 1091 '@types/json-schema@7.0.15': 732 - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, tarball: https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz} 1092 + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 733 1093 734 1094 '@types/node@22.19.13': 735 - resolution: {integrity: sha512-akNQMv0wW5uyRpD2v2IEyRSZiR+BeGuoB6L310EgGObO44HSMNT8z1xzio28V8qOrgYaopIDNA18YgdXd+qTiw==, tarball: https://registry.npmjs.org/@types/node/-/node-22.19.13.tgz} 1095 + resolution: {integrity: sha512-akNQMv0wW5uyRpD2v2IEyRSZiR+BeGuoB6L310EgGObO44HSMNT8z1xzio28V8qOrgYaopIDNA18YgdXd+qTiw==} 736 1096 737 1097 '@types/trusted-types@2.0.7': 738 - resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==, tarball: https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz} 1098 + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} 739 1099 740 1100 '@typescript-eslint/eslint-plugin@8.56.1': 741 - resolution: {integrity: sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz} 1101 + resolution: {integrity: sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==} 742 1102 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 743 1103 peerDependencies: 744 1104 '@typescript-eslint/parser': ^8.56.1 ··· 746 1106 typescript: '>=4.8.4 <6.0.0' 747 1107 748 1108 '@typescript-eslint/parser@8.56.1': 749 - resolution: {integrity: sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz} 1109 + resolution: {integrity: sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==} 750 1110 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 751 1111 peerDependencies: 752 1112 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 753 1113 typescript: '>=4.8.4 <6.0.0' 754 1114 755 1115 '@typescript-eslint/project-service@8.56.1': 756 - resolution: {integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==, tarball: https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz} 1116 + resolution: {integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==} 757 1117 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 758 1118 peerDependencies: 759 1119 typescript: '>=4.8.4 <6.0.0' 760 1120 761 1121 '@typescript-eslint/scope-manager@8.56.1': 762 - resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz} 1122 + resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==} 763 1123 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 764 1124 765 1125 '@typescript-eslint/tsconfig-utils@8.56.1': 766 - resolution: {integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==, tarball: https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz} 1126 + resolution: {integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==} 767 1127 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 768 1128 peerDependencies: 769 1129 typescript: '>=4.8.4 <6.0.0' 770 1130 771 1131 '@typescript-eslint/type-utils@8.56.1': 772 - resolution: {integrity: sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz} 1132 + resolution: {integrity: sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==} 773 1133 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 774 1134 peerDependencies: 775 1135 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 776 1136 typescript: '>=4.8.4 <6.0.0' 777 1137 778 1138 '@typescript-eslint/types@8.56.1': 779 - resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz} 1139 + resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} 780 1140 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 781 1141 782 1142 '@typescript-eslint/typescript-estree@8.56.1': 783 - resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz} 1143 + resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==} 784 1144 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 785 1145 peerDependencies: 786 1146 typescript: '>=4.8.4 <6.0.0' 787 1147 788 1148 '@typescript-eslint/utils@8.56.1': 789 - resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz} 1149 + resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==} 790 1150 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 791 1151 peerDependencies: 792 1152 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 793 1153 typescript: '>=4.8.4 <6.0.0' 794 1154 795 1155 '@typescript-eslint/visitor-keys@8.56.1': 796 - resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz} 1156 + resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} 797 1157 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 798 1158 1159 + '@use-gesture/core@10.3.1': 1160 + resolution: {integrity: sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw==} 1161 + 1162 + '@use-gesture/vanilla@10.3.1': 1163 + resolution: {integrity: sha512-lT4scGLu59ovA3zmtUonukAGcA0AdOOh+iwNDS05Bsu7Lq9aZToDHhI6D8Q2qvsVraovtsLLYwPrWdG/noMAKw==} 1164 + 799 1165 acorn-jsx@5.3.2: 800 - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, tarball: https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz} 1166 + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 801 1167 peerDependencies: 802 1168 acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 803 1169 804 1170 acorn@8.16.0: 805 - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==, tarball: https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz} 1171 + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} 806 1172 engines: {node: '>=0.4.0'} 807 1173 hasBin: true 808 1174 809 1175 ajv@6.14.0: 810 - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==, tarball: https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz} 1176 + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} 811 1177 812 1178 ansi-styles@4.3.0: 813 - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz} 1179 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 814 1180 engines: {node: '>=8'} 815 1181 816 1182 argparse@2.0.1: 817 - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, tarball: https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz} 1183 + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 818 1184 819 1185 aria-query@5.3.1: 820 - resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==, tarball: https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz} 1186 + resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} 821 1187 engines: {node: '>= 0.4'} 1188 + 1189 + await-lock@2.2.2: 1190 + resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} 822 1191 823 1192 axobject-query@4.1.0: 824 - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==, tarball: https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz} 1193 + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 825 1194 engines: {node: '>= 0.4'} 826 1195 827 1196 balanced-match@1.0.2: 828 - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, tarball: https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz} 1197 + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 829 1198 830 1199 balanced-match@4.0.4: 831 - resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==, tarball: https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz} 1200 + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} 832 1201 engines: {node: 18 || 20 || >=22} 833 1202 834 1203 base64-js@1.5.1: 835 - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, tarball: https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz} 1204 + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 836 1205 837 1206 bits-ui@2.16.2: 838 - resolution: {integrity: sha512-bgEpRRF7Ck9nRP1pbuKVxpaSMrz+8Pm0y+dmuvlkrSe+uUwIQECef29y6eslFHM6pCAubUh7STrsTLUUp8fzFQ==, tarball: https://registry.npmjs.org/bits-ui/-/bits-ui-2.16.2.tgz} 1207 + resolution: {integrity: sha512-bgEpRRF7Ck9nRP1pbuKVxpaSMrz+8Pm0y+dmuvlkrSe+uUwIQECef29y6eslFHM6pCAubUh7STrsTLUUp8fzFQ==} 839 1208 engines: {node: '>=20'} 840 1209 peerDependencies: 841 1210 '@internationalized/date': ^3.8.1 842 1211 svelte: ^5.33.0 843 1212 1213 + blake3-wasm@2.1.5: 1214 + resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} 1215 + 844 1216 brace-expansion@1.1.12: 845 - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==, tarball: https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz} 1217 + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} 846 1218 847 1219 brace-expansion@5.0.4: 848 - resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==, tarball: https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz} 1220 + resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} 849 1221 engines: {node: 18 || 20 || >=22} 850 1222 851 1223 buffer@6.0.3: 852 - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==, tarball: https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz} 1224 + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 1225 + 1226 + bun-types@1.3.9: 1227 + resolution: {integrity: sha512-+UBWWOakIP4Tswh0Bt0QD0alpTY8cb5hvgiYeWCMet9YukHbzuruIEeXC2D7nMJPB12kbh8C7XJykSexEqGKJg==} 853 1228 854 1229 callsites@3.1.0: 855 - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, tarball: https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz} 1230 + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 856 1231 engines: {node: '>=6'} 857 1232 858 1233 chalk@4.1.2: 859 - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, tarball: https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz} 1234 + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 860 1235 engines: {node: '>=10'} 861 1236 862 1237 chokidar@4.0.3: 863 - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==, tarball: https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz} 1238 + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 864 1239 engines: {node: '>= 14.16.0'} 865 1240 866 1241 clsx@2.1.1: 867 - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, tarball: https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz} 1242 + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 868 1243 engines: {node: '>=6'} 869 1244 870 1245 color-convert@2.0.1: 871 - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, tarball: https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz} 1246 + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 872 1247 engines: {node: '>=7.0.0'} 873 1248 874 1249 color-name@1.1.4: 875 - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz} 1250 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 876 1251 877 1252 concat-map@0.0.1: 878 - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, tarball: https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz} 1253 + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 879 1254 880 1255 cookie@0.6.0: 881 - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==, tarball: https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz} 1256 + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 882 1257 engines: {node: '>= 0.6'} 883 1258 1259 + cookie@1.1.1: 1260 + resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} 1261 + engines: {node: '>=18'} 1262 + 1263 + core-js@3.48.0: 1264 + resolution: {integrity: sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==} 1265 + 884 1266 cross-spawn@7.0.6: 885 - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, tarball: https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz} 1267 + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 886 1268 engines: {node: '>= 8'} 887 1269 888 1270 cssesc@3.0.0: 889 - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, tarball: https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz} 1271 + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 890 1272 engines: {node: '>=4'} 891 1273 hasBin: true 892 1274 1275 + custom-event-polyfill@1.0.7: 1276 + resolution: {integrity: sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==} 1277 + 893 1278 debug@4.4.3: 894 - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, tarball: https://registry.npmjs.org/debug/-/debug-4.4.3.tgz} 1279 + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 895 1280 engines: {node: '>=6.0'} 896 1281 peerDependencies: 897 1282 supports-color: '*' ··· 900 1285 optional: true 901 1286 902 1287 deep-is@0.1.4: 903 - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, tarball: https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz} 1288 + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 904 1289 905 1290 deepmerge@4.3.1: 906 - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, tarball: https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz} 1291 + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 907 1292 engines: {node: '>=0.10.0'} 908 1293 909 1294 dequal@2.0.3: 910 - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, tarball: https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz} 1295 + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 911 1296 engines: {node: '>=6'} 912 1297 913 1298 detect-libc@2.1.2: 914 - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, tarball: https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz} 1299 + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 915 1300 engines: {node: '>=8'} 916 1301 917 1302 devalue@5.6.3: 918 - resolution: {integrity: sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==, tarball: https://registry.npmjs.org/devalue/-/devalue-5.6.3.tgz} 1303 + resolution: {integrity: sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==} 919 1304 920 1305 drand-client@1.2.5: 921 - resolution: {integrity: sha512-fytRLLH7hIoSzZScrG06jgv0P30+neUGIhHoCcykWaNDFgy9PLqD/V4I0BouyVOCiWc03wTgRacH9xxZfyiWug==, tarball: https://registry.npmjs.org/drand-client/-/drand-client-1.2.5.tgz} 1306 + resolution: {integrity: sha512-fytRLLH7hIoSzZScrG06jgv0P30+neUGIhHoCcykWaNDFgy9PLqD/V4I0BouyVOCiWc03wTgRacH9xxZfyiWug==} 922 1307 engines: {node: '>= 10.4.0'} 923 1308 924 1309 drand-client@1.4.2: 925 - resolution: {integrity: sha512-jeNJmrVplfgIA/GVndxxJ5mo8y63BS2pEdNhk1siU4pQ+z/BnxsqRnxjH9ag1ip887s12SEgo0MTZPbQNz27NA==, tarball: https://registry.npmjs.org/drand-client/-/drand-client-1.4.2.tgz} 1310 + resolution: {integrity: sha512-jeNJmrVplfgIA/GVndxxJ5mo8y63BS2pEdNhk1siU4pQ+z/BnxsqRnxjH9ag1ip887s12SEgo0MTZPbQNz27NA==} 926 1311 engines: {node: '>= 10.4.0'} 1312 + 1313 + emoji-picker-element@1.29.1: 1314 + resolution: {integrity: sha512-TOiHzu9Dqib3x4MwcAi3wi3RdyT4SoeB4b15AvH1ks4SBwTl7DeebhZ0d3x6dNi4XfNU7IGRZ7NBQllj0RqwrQ==} 927 1315 928 1316 enhanced-resolve@5.20.0: 929 - resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==, tarball: https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.0.tgz} 1317 + resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} 930 1318 engines: {node: '>=10.13.0'} 931 1319 1320 + error-stack-parser-es@1.0.5: 1321 + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} 1322 + 932 1323 esbuild@0.27.3: 933 - resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==, tarball: https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz} 1324 + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} 934 1325 engines: {node: '>=18'} 935 1326 hasBin: true 936 1327 937 1328 escape-string-regexp@4.0.0: 938 - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz} 1329 + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 939 1330 engines: {node: '>=10'} 940 1331 941 1332 eslint-config-prettier@10.1.8: 942 - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==, tarball: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz} 1333 + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} 943 1334 hasBin: true 944 1335 peerDependencies: 945 1336 eslint: '>=7.0.0' 946 1337 947 1338 eslint-plugin-svelte@3.15.0: 948 - resolution: {integrity: sha512-QKB7zqfuB8aChOfBTComgDptMf2yxiJx7FE04nneCmtQzgTHvY8UJkuh8J2Rz7KB9FFV9aTHX6r7rdYGvG8T9Q==, tarball: https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.15.0.tgz} 1339 + resolution: {integrity: sha512-QKB7zqfuB8aChOfBTComgDptMf2yxiJx7FE04nneCmtQzgTHvY8UJkuh8J2Rz7KB9FFV9aTHX6r7rdYGvG8T9Q==} 949 1340 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 950 1341 peerDependencies: 951 1342 eslint: ^8.57.1 || ^9.0.0 || ^10.0.0 ··· 955 1346 optional: true 956 1347 957 1348 eslint-scope@8.4.0: 958 - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz} 1349 + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} 959 1350 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 960 1351 961 1352 eslint-visitor-keys@3.4.3: 962 - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz} 1353 + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 963 1354 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 964 1355 965 1356 eslint-visitor-keys@4.2.1: 966 - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz} 1357 + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} 967 1358 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 968 1359 969 1360 eslint-visitor-keys@5.0.1: 970 - resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz} 1361 + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} 971 1362 engines: {node: ^20.19.0 || ^22.13.0 || >=24} 972 1363 973 1364 eslint@9.39.3: 974 - resolution: {integrity: sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==, tarball: https://registry.npmjs.org/eslint/-/eslint-9.39.3.tgz} 1365 + resolution: {integrity: sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==} 975 1366 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 976 1367 hasBin: true 977 1368 peerDependencies: ··· 981 1372 optional: true 982 1373 983 1374 esm-env@1.2.2: 984 - resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==, tarball: https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz} 1375 + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} 985 1376 986 1377 espree@10.4.0: 987 - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==, tarball: https://registry.npmjs.org/espree/-/espree-10.4.0.tgz} 1378 + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} 988 1379 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 989 1380 990 1381 esquery@1.7.0: 991 - resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==, tarball: https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz} 1382 + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} 992 1383 engines: {node: '>=0.10'} 993 1384 994 1385 esrap@2.2.3: 995 - resolution: {integrity: sha512-8fOS+GIGCQZl/ZIlhl59htOlms6U8NvX6ZYgYHpRU/b6tVSh3uHkOHZikl3D4cMbYM0JlpBe+p/BkZEi8J9XIQ==, tarball: https://registry.npmjs.org/esrap/-/esrap-2.2.3.tgz} 1386 + resolution: {integrity: sha512-8fOS+GIGCQZl/ZIlhl59htOlms6U8NvX6ZYgYHpRU/b6tVSh3uHkOHZikl3D4cMbYM0JlpBe+p/BkZEi8J9XIQ==} 996 1387 997 1388 esrecurse@4.3.0: 998 - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, tarball: https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz} 1389 + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 999 1390 engines: {node: '>=4.0'} 1000 1391 1001 1392 estraverse@5.3.0: 1002 - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, tarball: https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz} 1393 + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1003 1394 engines: {node: '>=4.0'} 1004 1395 1005 1396 esutils@2.0.3: 1006 - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, tarball: https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz} 1397 + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1007 1398 engines: {node: '>=0.10.0'} 1008 1399 1009 1400 fast-deep-equal@3.1.3: 1010 - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, tarball: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} 1401 + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1011 1402 1012 1403 fast-json-stable-stringify@2.1.0: 1013 - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, tarball: https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz} 1404 + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1014 1405 1015 1406 fast-levenshtein@2.0.6: 1016 - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, tarball: https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz} 1407 + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1017 1408 1018 1409 fdir@6.5.0: 1019 - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, tarball: https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz} 1410 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 1020 1411 engines: {node: '>=12.0.0'} 1021 1412 peerDependencies: 1022 1413 picomatch: ^3 || ^4 ··· 1025 1416 optional: true 1026 1417 1027 1418 file-entry-cache@8.0.0: 1028 - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, tarball: https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz} 1419 + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 1029 1420 engines: {node: '>=16.0.0'} 1030 1421 1031 1422 find-up@5.0.0: 1032 - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, tarball: https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz} 1423 + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1033 1424 engines: {node: '>=10'} 1034 1425 1035 1426 flat-cache@4.0.1: 1036 - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, tarball: https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz} 1427 + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 1037 1428 engines: {node: '>=16'} 1038 1429 1039 1430 flatted@3.3.3: 1040 - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==, tarball: https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz} 1431 + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 1041 1432 1042 1433 fsevents@2.3.3: 1043 - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz} 1434 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1044 1435 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1045 1436 os: [darwin] 1046 1437 1438 + get-tsconfig@4.13.6: 1439 + resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} 1440 + 1047 1441 glob-parent@6.0.2: 1048 - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz} 1442 + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1049 1443 engines: {node: '>=10.13.0'} 1050 1444 1051 1445 globals@14.0.0: 1052 - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, tarball: https://registry.npmjs.org/globals/-/globals-14.0.0.tgz} 1446 + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1053 1447 engines: {node: '>=18'} 1054 1448 1055 1449 globals@16.5.0: 1056 - resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==, tarball: https://registry.npmjs.org/globals/-/globals-16.5.0.tgz} 1450 + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} 1057 1451 engines: {node: '>=18'} 1058 1452 1059 1453 globals@17.4.0: 1060 - resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==, tarball: https://registry.npmjs.org/globals/-/globals-17.4.0.tgz} 1454 + resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==} 1061 1455 engines: {node: '>=18'} 1062 1456 1063 1457 graceful-fs@4.2.11: 1064 - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, tarball: https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz} 1458 + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1065 1459 1066 1460 has-flag@4.0.0: 1067 - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, tarball: https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz} 1461 + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1068 1462 engines: {node: '>=8'} 1069 1463 1464 + hls.js@1.6.15: 1465 + resolution: {integrity: sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==} 1466 + 1070 1467 ieee754@1.2.1: 1071 - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, tarball: https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz} 1468 + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 1072 1469 1073 1470 ignore@5.3.2: 1074 - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, tarball: https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz} 1471 + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1075 1472 engines: {node: '>= 4'} 1076 1473 1077 1474 ignore@7.0.5: 1078 - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==, tarball: https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz} 1475 + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} 1079 1476 engines: {node: '>= 4'} 1080 1477 1081 1478 import-fresh@3.3.1: 1082 - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==, tarball: https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz} 1479 + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 1083 1480 engines: {node: '>=6'} 1084 1481 1085 1482 imurmurhash@0.1.4: 1086 - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, tarball: https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz} 1483 + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1087 1484 engines: {node: '>=0.8.19'} 1088 1485 1089 1486 inline-style-parser@0.2.7: 1090 - resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==, tarball: https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz} 1487 + resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} 1488 + 1489 + is-emoji-supported@0.0.5: 1490 + resolution: {integrity: sha512-WOlXUhDDHxYqcSmFZis+xWhhqXiK2SU0iYiqmth5Ip0FHLZQAt9rKL5ahnilE8/86WH8tZ3bmNNNC+bTzamqlw==} 1091 1491 1092 1492 is-extglob@2.1.1: 1093 - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, tarball: https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz} 1493 + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1094 1494 engines: {node: '>=0.10.0'} 1095 1495 1096 1496 is-glob@4.0.3: 1097 - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, tarball: https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz} 1497 + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1098 1498 engines: {node: '>=0.10.0'} 1099 1499 1100 1500 is-reference@3.0.3: 1101 - resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==, tarball: https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz} 1501 + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} 1102 1502 1103 1503 isexe@2.0.0: 1104 - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, tarball: https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz} 1504 + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1505 + 1506 + iso-datestring-validator@2.2.2: 1507 + resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==} 1105 1508 1106 1509 isomorphic-fetch@3.0.0: 1107 - resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==, tarball: https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz} 1510 + resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} 1108 1511 1109 1512 jiti@2.6.1: 1110 - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==, tarball: https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz} 1513 + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 1111 1514 hasBin: true 1112 1515 1113 1516 js-tokens@4.0.0: 1114 - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, tarball: https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz} 1517 + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1115 1518 1116 1519 js-yaml@4.1.1: 1117 - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==, tarball: https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz} 1520 + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} 1118 1521 hasBin: true 1119 1522 1120 1523 jsesc@3.1.0: 1121 - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, tarball: https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz} 1524 + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 1122 1525 engines: {node: '>=6'} 1123 1526 hasBin: true 1124 1527 1125 1528 json-buffer@3.0.1: 1126 - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, tarball: https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz} 1529 + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1127 1530 1128 1531 json-schema-traverse@0.4.1: 1129 - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, tarball: https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz} 1532 + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1130 1533 1131 1534 json-stable-stringify-without-jsonify@1.0.1: 1132 - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, tarball: https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz} 1535 + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1133 1536 1134 1537 keyv@4.5.4: 1135 - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, tarball: https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz} 1538 + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1136 1539 1137 1540 kleur@4.1.5: 1138 - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==, tarball: https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz} 1541 + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1139 1542 engines: {node: '>=6'} 1140 1543 1141 1544 known-css-properties@0.37.0: 1142 - resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==, tarball: https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz} 1545 + resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} 1143 1546 1144 1547 levn@0.4.1: 1145 - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, tarball: https://registry.npmjs.org/levn/-/levn-0.4.1.tgz} 1548 + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1146 1549 engines: {node: '>= 0.8.0'} 1147 1550 1148 1551 lightningcss-android-arm64@1.31.1: 1149 - resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==, tarball: https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.31.1.tgz} 1552 + resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==} 1150 1553 engines: {node: '>= 12.0.0'} 1151 1554 cpu: [arm64] 1152 1555 os: [android] 1153 1556 1154 1557 lightningcss-darwin-arm64@1.31.1: 1155 - resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==, tarball: https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.31.1.tgz} 1558 + resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==} 1156 1559 engines: {node: '>= 12.0.0'} 1157 1560 cpu: [arm64] 1158 1561 os: [darwin] 1159 1562 1160 1563 lightningcss-darwin-x64@1.31.1: 1161 - resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==, tarball: https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.31.1.tgz} 1564 + resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==} 1162 1565 engines: {node: '>= 12.0.0'} 1163 1566 cpu: [x64] 1164 1567 os: [darwin] 1165 1568 1166 1569 lightningcss-freebsd-x64@1.31.1: 1167 - resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==, tarball: https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.31.1.tgz} 1570 + resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==} 1168 1571 engines: {node: '>= 12.0.0'} 1169 1572 cpu: [x64] 1170 1573 os: [freebsd] 1171 1574 1172 1575 lightningcss-linux-arm-gnueabihf@1.31.1: 1173 - resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==, tarball: https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.31.1.tgz} 1576 + resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==} 1174 1577 engines: {node: '>= 12.0.0'} 1175 1578 cpu: [arm] 1176 1579 os: [linux] 1177 1580 1178 1581 lightningcss-linux-arm64-gnu@1.31.1: 1179 - resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==, tarball: https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.31.1.tgz} 1582 + resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==} 1180 1583 engines: {node: '>= 12.0.0'} 1181 1584 cpu: [arm64] 1182 1585 os: [linux] 1586 + libc: [glibc] 1183 1587 1184 1588 lightningcss-linux-arm64-musl@1.31.1: 1185 - resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==, tarball: https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.31.1.tgz} 1589 + resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==} 1186 1590 engines: {node: '>= 12.0.0'} 1187 1591 cpu: [arm64] 1188 1592 os: [linux] 1593 + libc: [musl] 1189 1594 1190 1595 lightningcss-linux-x64-gnu@1.31.1: 1191 - resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==, tarball: https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.31.1.tgz} 1596 + resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==} 1192 1597 engines: {node: '>= 12.0.0'} 1193 1598 cpu: [x64] 1194 1599 os: [linux] 1600 + libc: [glibc] 1195 1601 1196 1602 lightningcss-linux-x64-musl@1.31.1: 1197 - resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==, tarball: https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.31.1.tgz} 1603 + resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==} 1198 1604 engines: {node: '>= 12.0.0'} 1199 1605 cpu: [x64] 1200 1606 os: [linux] 1607 + libc: [musl] 1201 1608 1202 1609 lightningcss-win32-arm64-msvc@1.31.1: 1203 - resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==, tarball: https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.31.1.tgz} 1610 + resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==} 1204 1611 engines: {node: '>= 12.0.0'} 1205 1612 cpu: [arm64] 1206 1613 os: [win32] 1207 1614 1208 1615 lightningcss-win32-x64-msvc@1.31.1: 1209 - resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==, tarball: https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.31.1.tgz} 1616 + resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==} 1210 1617 engines: {node: '>= 12.0.0'} 1211 1618 cpu: [x64] 1212 1619 os: [win32] 1213 1620 1214 1621 lightningcss@1.31.1: 1215 - resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==, tarball: https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz} 1622 + resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==} 1216 1623 engines: {node: '>= 12.0.0'} 1217 1624 1218 1625 lilconfig@2.1.0: 1219 - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, tarball: https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz} 1626 + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1220 1627 engines: {node: '>=10'} 1221 1628 1629 + loadjs@4.3.0: 1630 + resolution: {integrity: sha512-vNX4ZZLJBeDEOBvdr2v/F+0aN5oMuPu7JTqrMwp+DtgK+AryOlpy6Xtm2/HpNr+azEa828oQjOtWsB6iDtSfSQ==} 1631 + 1222 1632 locate-character@3.0.0: 1223 - resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==, tarball: https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz} 1633 + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 1224 1634 1225 1635 locate-path@6.0.0: 1226 - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, tarball: https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz} 1636 + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1227 1637 engines: {node: '>=10'} 1228 1638 1229 1639 lodash.merge@4.6.2: 1230 - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, tarball: https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz} 1640 + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1231 1641 1232 1642 lz-string@1.5.0: 1233 - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==, tarball: https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz} 1643 + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} 1234 1644 hasBin: true 1235 1645 1236 1646 magic-string@0.30.21: 1237 - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, tarball: https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz} 1647 + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 1238 1648 1239 1649 mini-svg-data-uri@1.4.4: 1240 - resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==, tarball: https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz} 1650 + resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} 1651 + hasBin: true 1652 + 1653 + miniflare@4.20260305.0: 1654 + resolution: {integrity: sha512-jVhtKJtiwaZa3rI+WgoLvSJmEazDsoUmAPYRUmEe2VO6VSbvkhbnDRm+dsPbYRatgNIExwrpqG1rv96jHiSb0w==} 1655 + engines: {node: '>=18.0.0'} 1241 1656 hasBin: true 1242 1657 1243 1658 minimatch@10.2.4: 1244 - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==, tarball: https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz} 1659 + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} 1245 1660 engines: {node: 18 || 20 || >=22} 1246 1661 1247 1662 minimatch@3.1.5: 1248 - resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==, tarball: https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz} 1663 + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} 1249 1664 1250 1665 mode-watcher@1.1.0: 1251 - resolution: {integrity: sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g==, tarball: https://registry.npmjs.org/mode-watcher/-/mode-watcher-1.1.0.tgz} 1666 + resolution: {integrity: sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g==} 1252 1667 peerDependencies: 1253 1668 svelte: ^5.27.0 1254 1669 1255 1670 mri@1.2.0: 1256 - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==, tarball: https://registry.npmjs.org/mri/-/mri-1.2.0.tgz} 1671 + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 1257 1672 engines: {node: '>=4'} 1258 1673 1259 1674 mrmime@2.0.1: 1260 - resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==, tarball: https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz} 1675 + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} 1261 1676 engines: {node: '>=10'} 1262 1677 1263 1678 ms@2.1.3: 1264 - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, tarball: https://registry.npmjs.org/ms/-/ms-2.1.3.tgz} 1679 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1680 + 1681 + multiformats@9.9.0: 1682 + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 1265 1683 1266 1684 nanoid@3.3.11: 1267 - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==, tarball: https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz} 1685 + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1268 1686 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1269 1687 hasBin: true 1270 1688 1689 + nanoid@5.1.6: 1690 + resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} 1691 + engines: {node: ^18 || >=20} 1692 + hasBin: true 1693 + 1271 1694 natural-compare@1.4.0: 1272 - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, tarball: https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz} 1695 + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1273 1696 1274 1697 node-fetch@2.7.0: 1275 - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==, tarball: https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz} 1698 + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} 1276 1699 engines: {node: 4.x || >=6.0.0} 1277 1700 peerDependencies: 1278 1701 encoding: ^0.1.0 ··· 1280 1703 encoding: 1281 1704 optional: true 1282 1705 1706 + node-gyp-build@4.8.4: 1707 + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} 1708 + hasBin: true 1709 + 1283 1710 number-flow@0.5.12: 1284 - resolution: {integrity: sha512-CIs21h2JkfYG4rfgERaUNAk0Cz+Ef14fNJfSCbGGhgRgconQc9b7rcCQfi9SZ36kNjVXmsl2BrzDbjGtEgumAA==, tarball: https://registry.npmjs.org/number-flow/-/number-flow-0.5.12.tgz} 1711 + resolution: {integrity: sha512-CIs21h2JkfYG4rfgERaUNAk0Cz+Ef14fNJfSCbGGhgRgconQc9b7rcCQfi9SZ36kNjVXmsl2BrzDbjGtEgumAA==} 1285 1712 1286 1713 number-flow@0.6.0: 1287 - resolution: {integrity: sha512-K8flNq2Wqus53vjp/btVo3qXFkagF8dIdYavreBfE7hlvFFG/b1HMGEH6nZL+mlrJ+4lbLP9OmPv3t2rmRkpSQ==, tarball: https://registry.npmjs.org/number-flow/-/number-flow-0.6.0.tgz} 1714 + resolution: {integrity: sha512-K8flNq2Wqus53vjp/btVo3qXFkagF8dIdYavreBfE7hlvFFG/b1HMGEH6nZL+mlrJ+4lbLP9OmPv3t2rmRkpSQ==} 1288 1715 1289 1716 obug@2.1.1: 1290 - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==, tarball: https://registry.npmjs.org/obug/-/obug-2.1.1.tgz} 1717 + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} 1291 1718 1292 1719 optionator@0.9.4: 1293 - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, tarball: https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz} 1720 + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1294 1721 engines: {node: '>= 0.8.0'} 1295 1722 1296 1723 p-limit@3.1.0: 1297 - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, tarball: https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz} 1724 + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1298 1725 engines: {node: '>=10'} 1299 1726 1300 1727 p-locate@5.0.0: 1301 - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, tarball: https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz} 1728 + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1302 1729 engines: {node: '>=10'} 1303 1730 1304 1731 parent-module@1.0.1: 1305 - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, tarball: https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz} 1732 + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1306 1733 engines: {node: '>=6'} 1307 1734 1308 1735 path-exists@4.0.0: 1309 - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, tarball: https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz} 1736 + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1310 1737 engines: {node: '>=8'} 1311 1738 1312 1739 path-key@3.1.1: 1313 - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, tarball: https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz} 1740 + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1314 1741 engines: {node: '>=8'} 1315 1742 1743 + path-to-regexp@6.3.0: 1744 + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} 1745 + 1746 + pathe@2.0.3: 1747 + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1748 + 1316 1749 picocolors@1.1.1: 1317 - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, tarball: https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz} 1750 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1318 1751 1319 1752 picomatch@4.0.3: 1320 - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==, tarball: https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz} 1753 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 1321 1754 engines: {node: '>=12'} 1322 1755 1756 + plyr@3.8.4: 1757 + resolution: {integrity: sha512-DrzLbK9Wol3zeiuZCleD9aUOl0KAaBHR9H6WVVVYPZ4Ya+LYxUFTgSF1jooHcMQCv96Ws96wCaZzIoP3bES8pQ==} 1758 + 1323 1759 postcss-load-config@3.1.4: 1324 - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==, tarball: https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz} 1760 + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 1325 1761 engines: {node: '>= 10'} 1326 1762 peerDependencies: 1327 1763 postcss: '>=8.0.9' ··· 1333 1769 optional: true 1334 1770 1335 1771 postcss-safe-parser@7.0.1: 1336 - resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==, tarball: https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz} 1772 + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} 1337 1773 engines: {node: '>=18.0'} 1338 1774 peerDependencies: 1339 1775 postcss: ^8.4.31 1340 1776 1341 1777 postcss-scss@4.0.9: 1342 - resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==, tarball: https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz} 1778 + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} 1343 1779 engines: {node: '>=12.0'} 1344 1780 peerDependencies: 1345 1781 postcss: ^8.4.29 1346 1782 1347 1783 postcss-selector-parser@6.0.10: 1348 - resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==, tarball: https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz} 1784 + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} 1349 1785 engines: {node: '>=4'} 1350 1786 1351 1787 postcss-selector-parser@7.1.1: 1352 - resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==, tarball: https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz} 1788 + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} 1353 1789 engines: {node: '>=4'} 1354 1790 1355 1791 postcss@8.5.6: 1356 - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==, tarball: https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz} 1792 + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 1357 1793 engines: {node: ^10 || ^12 || >=14} 1358 1794 1359 1795 prelude-ls@1.2.1: 1360 - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, tarball: https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz} 1796 + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1361 1797 engines: {node: '>= 0.8.0'} 1362 1798 1363 1799 prettier-plugin-svelte@3.5.0: 1364 - resolution: {integrity: sha512-2lLO/7EupnjO/95t+XZesXs8Bf3nYLIDfCo270h5QWbj/vjLqmrQ1LiRk9LPggxSDsnVYfehamZNf+rgQYApZg==, tarball: https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.5.0.tgz} 1800 + resolution: {integrity: sha512-2lLO/7EupnjO/95t+XZesXs8Bf3nYLIDfCo270h5QWbj/vjLqmrQ1LiRk9LPggxSDsnVYfehamZNf+rgQYApZg==} 1365 1801 peerDependencies: 1366 1802 prettier: ^3.0.0 1367 1803 svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 1368 1804 1369 1805 prettier-plugin-tailwindcss@0.7.2: 1370 - resolution: {integrity: sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==, tarball: https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.7.2.tgz} 1806 + resolution: {integrity: sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==} 1371 1807 engines: {node: '>=20.19'} 1372 1808 peerDependencies: 1373 1809 '@ianvs/prettier-plugin-sort-imports': '*' ··· 1422 1858 optional: true 1423 1859 1424 1860 prettier@3.8.1: 1425 - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==, tarball: https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz} 1861 + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} 1426 1862 engines: {node: '>=14'} 1427 1863 hasBin: true 1428 1864 1429 1865 punycode@2.3.1: 1430 - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, tarball: https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz} 1866 + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1431 1867 engines: {node: '>=6'} 1432 1868 1869 + rangetouch@2.0.1: 1870 + resolution: {integrity: sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==} 1871 + 1433 1872 readdirp@4.1.2: 1434 - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==, tarball: https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz} 1873 + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 1435 1874 engines: {node: '>= 14.18.0'} 1436 1875 1876 + regexparam@3.0.0: 1877 + resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==} 1878 + engines: {node: '>=8'} 1879 + 1437 1880 resolve-from@4.0.0: 1438 - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, tarball: https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz} 1881 + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1439 1882 engines: {node: '>=4'} 1440 1883 1884 + resolve-pkg-maps@1.0.0: 1885 + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 1886 + 1441 1887 rollup@4.59.0: 1442 - resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==, tarball: https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz} 1888 + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} 1443 1889 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1444 1890 hasBin: true 1445 1891 1446 1892 runed@0.23.4: 1447 - resolution: {integrity: sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==, tarball: https://registry.npmjs.org/runed/-/runed-0.23.4.tgz} 1893 + resolution: {integrity: sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==} 1448 1894 peerDependencies: 1449 1895 svelte: ^5.7.0 1450 1896 1451 1897 runed@0.25.0: 1452 - resolution: {integrity: sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg==, tarball: https://registry.npmjs.org/runed/-/runed-0.25.0.tgz} 1898 + resolution: {integrity: sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg==} 1453 1899 peerDependencies: 1454 1900 svelte: ^5.7.0 1455 1901 1456 1902 runed@0.28.0: 1457 - resolution: {integrity: sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ==, tarball: https://registry.npmjs.org/runed/-/runed-0.28.0.tgz} 1903 + resolution: {integrity: sha512-k2xx7RuO9hWcdd9f+8JoBeqWtYrm5CALfgpkg2YDB80ds/QE4w0qqu34A7fqiAwiBBSBQOid7TLxwxVC27ymWQ==} 1458 1904 peerDependencies: 1459 1905 svelte: ^5.7.0 1460 1906 1461 1907 runed@0.35.1: 1462 - resolution: {integrity: sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==, tarball: https://registry.npmjs.org/runed/-/runed-0.35.1.tgz} 1908 + resolution: {integrity: sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==} 1463 1909 peerDependencies: 1464 1910 '@sveltejs/kit': ^2.21.0 1465 1911 svelte: ^5.7.0 ··· 1468 1914 optional: true 1469 1915 1470 1916 sade@1.8.1: 1471 - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==, tarball: https://registry.npmjs.org/sade/-/sade-1.8.1.tgz} 1917 + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 1472 1918 engines: {node: '>=6'} 1473 1919 1474 1920 semver@7.7.4: 1475 - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==, tarball: https://registry.npmjs.org/semver/-/semver-7.7.4.tgz} 1921 + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} 1476 1922 engines: {node: '>=10'} 1477 1923 hasBin: true 1478 1924 1479 1925 set-cookie-parser@3.0.1: 1480 - resolution: {integrity: sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==, tarball: https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.0.1.tgz} 1926 + resolution: {integrity: sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==} 1927 + 1928 + sharp@0.34.5: 1929 + resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} 1930 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 1481 1931 1482 1932 shebang-command@2.0.0: 1483 - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, tarball: https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz} 1933 + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1484 1934 engines: {node: '>=8'} 1485 1935 1486 1936 shebang-regex@3.0.0: 1487 - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, tarball: https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz} 1937 + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1488 1938 engines: {node: '>=8'} 1489 1939 1490 1940 sirv@3.0.2: 1491 - resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==, tarball: https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz} 1941 + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} 1492 1942 engines: {node: '>=18'} 1493 1943 1494 1944 source-map-js@1.2.1: 1495 - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, tarball: https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz} 1945 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1496 1946 engines: {node: '>=0.10.0'} 1497 1947 1498 1948 strip-json-comments@3.1.1: 1499 - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, tarball: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz} 1949 + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1500 1950 engines: {node: '>=8'} 1501 1951 1502 1952 style-to-object@1.0.14: 1503 - resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==, tarball: https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz} 1953 + resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} 1954 + 1955 + supports-color@10.2.2: 1956 + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} 1957 + engines: {node: '>=18'} 1504 1958 1505 1959 supports-color@7.2.0: 1506 - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, tarball: https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz} 1960 + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1507 1961 engines: {node: '>=8'} 1508 1962 1509 1963 svelte-check@4.4.4: 1510 - resolution: {integrity: sha512-F1pGqXc710Oi/wTI4d/x7d6lgPwwfx1U6w3Q35n4xsC2e8C/yN2sM1+mWxjlMcpAfWucjlq4vPi+P4FZ8a14sQ==, tarball: https://registry.npmjs.org/svelte-check/-/svelte-check-4.4.4.tgz} 1964 + resolution: {integrity: sha512-F1pGqXc710Oi/wTI4d/x7d6lgPwwfx1U6w3Q35n4xsC2e8C/yN2sM1+mWxjlMcpAfWucjlq4vPi+P4FZ8a14sQ==} 1511 1965 engines: {node: '>= 18.0.0'} 1512 1966 hasBin: true 1513 1967 peerDependencies: ··· 1515 1969 typescript: '>=5.0.0' 1516 1970 1517 1971 svelte-eslint-parser@1.5.1: 1518 - resolution: {integrity: sha512-UbY7DYoDg+x4AKLUcX5xWuEWylgmm8ZD2Z89YT/AK6Wm/ckeMTnOMwr6AVC99znXbRC26xzWEPhSgmB62E07Gg==, tarball: https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-1.5.1.tgz} 1972 + resolution: {integrity: sha512-UbY7DYoDg+x4AKLUcX5xWuEWylgmm8ZD2Z89YT/AK6Wm/ckeMTnOMwr6AVC99znXbRC26xzWEPhSgmB62E07Gg==} 1519 1973 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.30.2} 1520 1974 peerDependencies: 1521 1975 svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 ··· 1524 1978 optional: true 1525 1979 1526 1980 svelte-sonner@1.0.7: 1527 - resolution: {integrity: sha512-1EUFYmd7q/xfs2qCHwJzGPh9n5VJ3X6QjBN10fof2vxgy8fYE7kVfZ7uGnd7i6fQaWIr5KvXcwYXE/cmTEjk5A==, tarball: https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-1.0.7.tgz} 1981 + resolution: {integrity: sha512-1EUFYmd7q/xfs2qCHwJzGPh9n5VJ3X6QjBN10fof2vxgy8fYE7kVfZ7uGnd7i6fQaWIr5KvXcwYXE/cmTEjk5A==} 1528 1982 peerDependencies: 1529 1983 svelte: ^5.0.0 1530 1984 1531 1985 svelte-toolbelt@0.10.6: 1532 - resolution: {integrity: sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==, tarball: https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.10.6.tgz} 1986 + resolution: {integrity: sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==} 1533 1987 engines: {node: '>=18', pnpm: '>=8.7.0'} 1534 1988 peerDependencies: 1535 1989 svelte: ^5.30.2 1536 1990 1537 1991 svelte-toolbelt@0.7.1: 1538 - resolution: {integrity: sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==, tarball: https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.7.1.tgz} 1992 + resolution: {integrity: sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ==} 1539 1993 engines: {node: '>=18', pnpm: '>=8.7.0'} 1540 1994 peerDependencies: 1541 1995 svelte: ^5.0.0 1542 1996 1543 1997 svelte@5.53.6: 1544 - resolution: {integrity: sha512-lP5DGF3oDDI9fhHcSpaBiJEkFLuS16h92DhM1L5K1lFm0WjOmUh1i2sNkBBk8rkxJRpob0dBE75jRfUzGZUOGA==, tarball: https://registry.npmjs.org/svelte/-/svelte-5.53.6.tgz} 1998 + resolution: {integrity: sha512-lP5DGF3oDDI9fhHcSpaBiJEkFLuS16h92DhM1L5K1lFm0WjOmUh1i2sNkBBk8rkxJRpob0dBE75jRfUzGZUOGA==} 1545 1999 engines: {node: '>=18'} 1546 2000 1547 2001 tabbable@6.4.0: 1548 - resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==, tarball: https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz} 2002 + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} 1549 2003 1550 2004 tailwind-merge@3.5.0: 1551 - resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==, tarball: https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz} 2005 + resolution: {integrity: sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==} 1552 2006 1553 2007 tailwind-variants@3.2.2: 1554 - resolution: {integrity: sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==, tarball: https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.2.2.tgz} 2008 + resolution: {integrity: sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg==} 1555 2009 engines: {node: '>=16.x', pnpm: '>=7.x'} 1556 2010 peerDependencies: 1557 2011 tailwind-merge: '>=3.0.0' ··· 1561 2015 optional: true 1562 2016 1563 2017 tailwindcss@4.2.1: 1564 - resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==, tarball: https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.1.tgz} 2018 + resolution: {integrity: sha512-/tBrSQ36vCleJkAOsy9kbNTgaxvGbyOamC30PRePTQe/o1MFwEKHQk4Cn7BNGaPtjp+PuUrByJehM1hgxfq4sw==} 1565 2019 1566 2020 tapable@2.3.0: 1567 - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==, tarball: https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz} 2021 + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} 1568 2022 engines: {node: '>=6'} 1569 2023 1570 2024 tinyglobby@0.2.15: 1571 - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==, tarball: https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz} 2025 + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 1572 2026 engines: {node: '>=12.0.0'} 1573 2027 2028 + tlds@1.261.0: 2029 + resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==} 2030 + hasBin: true 2031 + 1574 2032 tlock-js@0.9.0: 1575 - resolution: {integrity: sha512-qxBJQ2mP/opLKjqFbbr64uCYs4Y/wQb8ogFRAhYuHE1AO/sIY0iU0PFV4hqZ0HTorMTpQgbjgdjmTUpigrGp3A==, tarball: https://registry.npmjs.org/tlock-js/-/tlock-js-0.9.0.tgz} 2033 + resolution: {integrity: sha512-qxBJQ2mP/opLKjqFbbr64uCYs4Y/wQb8ogFRAhYuHE1AO/sIY0iU0PFV4hqZ0HTorMTpQgbjgdjmTUpigrGp3A==} 1576 2034 engines: {node: '>= 16.0.0'} 1577 2035 1578 2036 totalist@3.0.1: 1579 - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==, tarball: https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz} 2037 + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 1580 2038 engines: {node: '>=6'} 1581 2039 1582 2040 tr46@0.0.3: 1583 - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, tarball: https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz} 2041 + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1584 2042 1585 2043 ts-api-utils@2.4.0: 1586 - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==, tarball: https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz} 2044 + resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} 1587 2045 engines: {node: '>=18.12'} 1588 2046 peerDependencies: 1589 2047 typescript: '>=4.8.4' 1590 2048 1591 2049 tslib@2.8.1: 1592 - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, tarball: https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz} 2050 + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 2051 + 2052 + tsx@4.21.0: 2053 + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} 2054 + engines: {node: '>=18.0.0'} 2055 + hasBin: true 1593 2056 1594 2057 type-check@0.4.0: 1595 - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, tarball: https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz} 2058 + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1596 2059 engines: {node: '>= 0.8.0'} 1597 2060 1598 2061 typescript-eslint@8.56.1: 1599 - resolution: {integrity: sha512-U4lM6pjmBX7J5wk4szltF7I1cGBHXZopnAXCMXb3+fZ3B/0Z3hq3wS/CCUB2NZBNAExK92mCU2tEohWuwVMsDQ==, tarball: https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.56.1.tgz} 2062 + resolution: {integrity: sha512-U4lM6pjmBX7J5wk4szltF7I1cGBHXZopnAXCMXb3+fZ3B/0Z3hq3wS/CCUB2NZBNAExK92mCU2tEohWuwVMsDQ==} 1600 2063 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1601 2064 peerDependencies: 1602 2065 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 1603 2066 typescript: '>=4.8.4 <6.0.0' 1604 2067 1605 2068 typescript@5.9.3: 1606 - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==, tarball: https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz} 2069 + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 1607 2070 engines: {node: '>=14.17'} 1608 2071 hasBin: true 1609 2072 2073 + uint8arrays@3.0.0: 2074 + resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} 2075 + 1610 2076 undici-types@6.21.0: 1611 - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==, tarball: https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz} 2077 + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 2078 + 2079 + undici@7.18.2: 2080 + resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==} 2081 + engines: {node: '>=20.18.1'} 2082 + 2083 + unenv@2.0.0-rc.24: 2084 + resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} 2085 + 2086 + unicode-segmenter@0.14.5: 2087 + resolution: {integrity: sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==} 1612 2088 1613 2089 uri-js@4.4.1: 1614 - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, tarball: https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz} 2090 + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2091 + 2092 + url-polyfill@1.1.14: 2093 + resolution: {integrity: sha512-p4f3TTAG6ADVF3mwbXw7hGw+QJyw5CnNGvYh5fCuQQZIiuKUswqcznyV3pGDP9j0TSmC4UvRKm8kl1QsX1diiQ==} 1615 2094 1616 2095 util-deprecate@1.0.2: 1617 - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, tarball: https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz} 2096 + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 2097 + 2098 + valibot@1.2.0: 2099 + resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} 2100 + peerDependencies: 2101 + typescript: '>=5' 2102 + peerDependenciesMeta: 2103 + typescript: 2104 + optional: true 1618 2105 1619 2106 vite@7.3.1: 1620 - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==, tarball: https://registry.npmjs.org/vite/-/vite-7.3.1.tgz} 2107 + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} 1621 2108 engines: {node: ^20.19.0 || >=22.12.0} 1622 2109 hasBin: true 1623 2110 peerDependencies: ··· 1657 2144 optional: true 1658 2145 1659 2146 vitefu@1.1.2: 1660 - resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==, tarball: https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz} 2147 + resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==} 1661 2148 peerDependencies: 1662 2149 vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0 1663 2150 peerDependenciesMeta: ··· 1665 2152 optional: true 1666 2153 1667 2154 webidl-conversions@3.0.1: 1668 - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, tarball: https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz} 2155 + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1669 2156 1670 2157 whatwg-fetch@3.6.20: 1671 - resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==, tarball: https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz} 2158 + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} 1672 2159 1673 2160 whatwg-url@5.0.0: 1674 - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, tarball: https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz} 2161 + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1675 2162 1676 2163 which@2.0.2: 1677 - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, tarball: https://registry.npmjs.org/which/-/which-2.0.2.tgz} 2164 + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1678 2165 engines: {node: '>= 8'} 1679 2166 hasBin: true 1680 2167 1681 2168 word-wrap@1.2.5: 1682 - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, tarball: https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz} 2169 + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1683 2170 engines: {node: '>=0.10.0'} 1684 2171 2172 + workerd@1.20260305.0: 2173 + resolution: {integrity: sha512-JkhfCLU+w+KbQmZ9k49IcDYc78GBo7eG8Mir8E2+KVjR7otQAmpcLlsous09YLh8WQ3Bt3Mi6/WMStvMAPukeA==} 2174 + engines: {node: '>=16'} 2175 + hasBin: true 2176 + 2177 + worktop@0.8.0-next.18: 2178 + resolution: {integrity: sha512-+TvsA6VAVoMC3XDKR5MoC/qlLqDixEfOBysDEKnPIPou/NvoPWCAuXHXMsswwlvmEuvX56lQjvELLyLuzTKvRw==} 2179 + engines: {node: '>=12'} 2180 + 2181 + wrangler@4.69.0: 2182 + resolution: {integrity: sha512-EmVfIM65I5b4ITHe3Y9R7zQyf4NUBQ1leStakMlWiVR9n6VlDwuEltyQI2l3i0JciDnWyR3uqe+T6C08ivniTQ==} 2183 + engines: {node: '>=20.0.0'} 2184 + hasBin: true 2185 + peerDependencies: 2186 + '@cloudflare/workers-types': ^4.20260305.0 2187 + peerDependenciesMeta: 2188 + '@cloudflare/workers-types': 2189 + optional: true 2190 + 2191 + ws@8.18.0: 2192 + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} 2193 + engines: {node: '>=10.0.0'} 2194 + peerDependencies: 2195 + bufferutil: ^4.0.1 2196 + utf-8-validate: '>=5.0.2' 2197 + peerDependenciesMeta: 2198 + bufferutil: 2199 + optional: true 2200 + utf-8-validate: 2201 + optional: true 2202 + 1685 2203 yaml@1.10.2: 1686 - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, tarball: https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz} 2204 + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 1687 2205 engines: {node: '>= 6'} 1688 2206 1689 2207 yocto-queue@0.1.0: 1690 - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, tarball: https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz} 2208 + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1691 2209 engines: {node: '>=10'} 1692 2210 2211 + youch-core@0.3.3: 2212 + resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==} 2213 + 2214 + youch@4.1.0-beta.10: 2215 + resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} 2216 + 1693 2217 zimmerframe@1.1.4: 1694 - resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==, tarball: https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz} 2218 + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} 2219 + 2220 + zod@3.25.76: 2221 + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} 1695 2222 1696 2223 snapshots: 1697 2224 2225 + '@atcute/atproto@3.1.10': 2226 + dependencies: 2227 + '@atcute/lexicons': 1.2.9 2228 + 2229 + '@atcute/bluesky@3.2.19': 2230 + dependencies: 2231 + '@atcute/atproto': 3.1.10 2232 + '@atcute/lexicons': 1.2.9 2233 + 2234 + '@atcute/client@4.2.1': 2235 + dependencies: 2236 + '@atcute/identity': 1.1.3 2237 + '@atcute/lexicons': 1.2.9 2238 + 2239 + '@atcute/identity-resolver@1.2.2(@atcute/identity@1.1.3)': 2240 + dependencies: 2241 + '@atcute/identity': 1.1.3 2242 + '@atcute/lexicons': 1.2.9 2243 + '@atcute/util-fetch': 1.0.5 2244 + '@badrap/valita': 0.4.6 2245 + 2246 + '@atcute/identity@1.1.3': 2247 + dependencies: 2248 + '@atcute/lexicons': 1.2.9 2249 + '@badrap/valita': 0.4.6 2250 + 2251 + '@atcute/lexicons@1.2.9': 2252 + dependencies: 2253 + '@atcute/uint8array': 1.1.1 2254 + '@atcute/util-text': 1.1.1 2255 + '@standard-schema/spec': 1.1.0 2256 + esm-env: 1.2.2 2257 + 2258 + '@atcute/multibase@1.1.8': 2259 + dependencies: 2260 + '@atcute/uint8array': 1.1.1 2261 + 2262 + '@atcute/oauth-crypto@0.1.0': 2263 + dependencies: 2264 + '@atcute/multibase': 1.1.8 2265 + '@atcute/uint8array': 1.1.1 2266 + '@badrap/valita': 0.4.6 2267 + nanoid: 5.1.6 2268 + 2269 + '@atcute/oauth-keyset@0.1.0': 2270 + dependencies: 2271 + '@atcute/oauth-crypto': 0.1.0 2272 + 2273 + '@atcute/oauth-node-client@1.1.0': 2274 + dependencies: 2275 + '@atcute/client': 4.2.1 2276 + '@atcute/identity': 1.1.3 2277 + '@atcute/identity-resolver': 1.2.2(@atcute/identity@1.1.3) 2278 + '@atcute/lexicons': 1.2.9 2279 + '@atcute/oauth-crypto': 0.1.0 2280 + '@atcute/oauth-keyset': 0.1.0 2281 + '@atcute/oauth-types': 0.1.1 2282 + '@atcute/util-fetch': 1.0.5 2283 + '@badrap/valita': 0.4.6 2284 + nanoid: 5.1.6 2285 + 2286 + '@atcute/oauth-types@0.1.1': 2287 + dependencies: 2288 + '@atcute/identity': 1.1.3 2289 + '@atcute/lexicons': 1.2.9 2290 + '@atcute/oauth-keyset': 0.1.0 2291 + '@badrap/valita': 0.4.6 2292 + 2293 + '@atcute/tid@1.1.2': 2294 + dependencies: 2295 + '@atcute/time-ms': 1.2.3 2296 + 2297 + '@atcute/time-ms@1.2.3': 2298 + dependencies: 2299 + '@types/bun': 1.3.9 2300 + node-gyp-build: 4.8.4 2301 + 2302 + '@atcute/uint8array@1.1.1': {} 2303 + 2304 + '@atcute/util-fetch@1.0.5': 2305 + dependencies: 2306 + '@badrap/valita': 0.4.6 2307 + 2308 + '@atcute/util-text@1.1.1': 2309 + dependencies: 2310 + unicode-segmenter: 0.14.5 2311 + 2312 + '@atproto/api@0.18.21': 2313 + dependencies: 2314 + '@atproto/common-web': 0.4.17 2315 + '@atproto/lexicon': 0.6.1 2316 + '@atproto/syntax': 0.4.3 2317 + '@atproto/xrpc': 0.7.7 2318 + await-lock: 2.2.2 2319 + multiformats: 9.9.0 2320 + tlds: 1.261.0 2321 + zod: 3.25.76 2322 + 2323 + '@atproto/common-web@0.4.17': 2324 + dependencies: 2325 + '@atproto/lex-data': 0.0.12 2326 + '@atproto/lex-json': 0.0.12 2327 + '@atproto/syntax': 0.4.3 2328 + zod: 3.25.76 2329 + 2330 + '@atproto/lex-data@0.0.12': 2331 + dependencies: 2332 + multiformats: 9.9.0 2333 + tslib: 2.8.1 2334 + uint8arrays: 3.0.0 2335 + unicode-segmenter: 0.14.5 2336 + 2337 + '@atproto/lex-json@0.0.12': 2338 + dependencies: 2339 + '@atproto/lex-data': 0.0.12 2340 + tslib: 2.8.1 2341 + 2342 + '@atproto/lexicon@0.6.1': 2343 + dependencies: 2344 + '@atproto/common-web': 0.4.17 2345 + '@atproto/syntax': 0.4.3 2346 + iso-datestring-validator: 2.2.2 2347 + multiformats: 9.9.0 2348 + zod: 3.25.76 2349 + 2350 + '@atproto/syntax@0.4.3': 2351 + dependencies: 2352 + tslib: 2.8.1 2353 + 2354 + '@atproto/xrpc@0.7.7': 2355 + dependencies: 2356 + '@atproto/lexicon': 0.6.1 2357 + zod: 3.25.76 2358 + 1698 2359 '@babel/code-frame@7.29.0': 1699 2360 dependencies: 1700 2361 '@babel/helper-validator-identifier': 7.28.5 ··· 1742 2403 '@babel/helper-string-parser': 7.27.1 1743 2404 '@babel/helper-validator-identifier': 7.28.5 1744 2405 2406 + '@badrap/valita@0.4.6': {} 2407 + 2408 + '@cloudflare/kv-asset-handler@0.4.2': {} 2409 + 2410 + '@cloudflare/unenv-preset@2.14.0(unenv@2.0.0-rc.24)(workerd@1.20260305.0)': 2411 + dependencies: 2412 + unenv: 2.0.0-rc.24 2413 + optionalDependencies: 2414 + workerd: 1.20260305.0 2415 + 2416 + '@cloudflare/workerd-darwin-64@1.20260305.0': 2417 + optional: true 2418 + 2419 + '@cloudflare/workerd-darwin-arm64@1.20260305.0': 2420 + optional: true 2421 + 2422 + '@cloudflare/workerd-linux-64@1.20260305.0': 2423 + optional: true 2424 + 2425 + '@cloudflare/workerd-linux-arm64@1.20260305.0': 2426 + optional: true 2427 + 2428 + '@cloudflare/workerd-windows-64@1.20260305.0': 2429 + optional: true 2430 + 2431 + '@cloudflare/workers-types@4.20260301.1': {} 2432 + 2433 + '@cspotcode/source-map-support@0.8.1': 2434 + dependencies: 2435 + '@jridgewell/trace-mapping': 0.3.9 2436 + 2437 + '@emnapi/runtime@1.8.1': 2438 + dependencies: 2439 + tslib: 2.8.1 2440 + optional: true 2441 + 1745 2442 '@esbuild/aix-ppc64@0.27.3': 1746 2443 optional: true 1747 2444 ··· 1887 2584 1888 2585 '@floating-ui/utils@0.2.10': {} 1889 2586 1890 - '@foxui/core@0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(tailwindcss@4.2.1)': 2587 + '@foxui/core@0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(tailwindcss@4.2.1)': 1891 2588 dependencies: 1892 2589 '@number-flow/svelte': 0.3.13(svelte@5.53.6) 1893 - bits-ui: 2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6) 2590 + bits-ui: 2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6) 1894 2591 clsx: 2.1.1 1895 2592 mode-watcher: 1.1.0(svelte@5.53.6) 1896 2593 svelte: 5.53.6 ··· 1902 2599 - '@internationalized/date' 1903 2600 - '@sveltejs/kit' 1904 2601 1905 - '@foxui/time@0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(tailwindcss@4.2.1)': 2602 + '@foxui/social@0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(tailwindcss@4.2.1)': 1906 2603 dependencies: 1907 - '@foxui/core': 0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(tailwindcss@4.2.1) 2604 + '@atproto/api': 0.18.21 2605 + '@foxui/core': 0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(tailwindcss@4.2.1) 2606 + '@foxui/time': 0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(tailwindcss@4.2.1) 2607 + '@use-gesture/vanilla': 10.3.1 2608 + bits-ui: 2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6) 2609 + emoji-picker-element: 1.29.1 2610 + hls.js: 1.6.15 2611 + is-emoji-supported: 0.0.5 2612 + plyr: 3.8.4 2613 + svelte: 5.53.6 2614 + tailwindcss: 4.2.1 2615 + transitivePeerDependencies: 2616 + - '@internationalized/date' 2617 + - '@sveltejs/kit' 2618 + 2619 + '@foxui/time@0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(tailwindcss@4.2.1)': 2620 + dependencies: 2621 + '@foxui/core': 0.5.1(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(tailwindcss@4.2.1) 1908 2622 '@number-flow/svelte': 0.3.13(svelte@5.53.6) 1909 - bits-ui: 2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6) 2623 + bits-ui: 2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6) 1910 2624 svelte: 5.53.6 1911 2625 tailwindcss: 4.2.1 1912 2626 transitivePeerDependencies: ··· 1924 2638 1925 2639 '@humanwhocodes/retry@0.4.3': {} 1926 2640 2641 + '@img/colour@1.1.0': {} 2642 + 2643 + '@img/sharp-darwin-arm64@0.34.5': 2644 + optionalDependencies: 2645 + '@img/sharp-libvips-darwin-arm64': 1.2.4 2646 + optional: true 2647 + 2648 + '@img/sharp-darwin-x64@0.34.5': 2649 + optionalDependencies: 2650 + '@img/sharp-libvips-darwin-x64': 1.2.4 2651 + optional: true 2652 + 2653 + '@img/sharp-libvips-darwin-arm64@1.2.4': 2654 + optional: true 2655 + 2656 + '@img/sharp-libvips-darwin-x64@1.2.4': 2657 + optional: true 2658 + 2659 + '@img/sharp-libvips-linux-arm64@1.2.4': 2660 + optional: true 2661 + 2662 + '@img/sharp-libvips-linux-arm@1.2.4': 2663 + optional: true 2664 + 2665 + '@img/sharp-libvips-linux-ppc64@1.2.4': 2666 + optional: true 2667 + 2668 + '@img/sharp-libvips-linux-riscv64@1.2.4': 2669 + optional: true 2670 + 2671 + '@img/sharp-libvips-linux-s390x@1.2.4': 2672 + optional: true 2673 + 2674 + '@img/sharp-libvips-linux-x64@1.2.4': 2675 + optional: true 2676 + 2677 + '@img/sharp-libvips-linuxmusl-arm64@1.2.4': 2678 + optional: true 2679 + 2680 + '@img/sharp-libvips-linuxmusl-x64@1.2.4': 2681 + optional: true 2682 + 2683 + '@img/sharp-linux-arm64@0.34.5': 2684 + optionalDependencies: 2685 + '@img/sharp-libvips-linux-arm64': 1.2.4 2686 + optional: true 2687 + 2688 + '@img/sharp-linux-arm@0.34.5': 2689 + optionalDependencies: 2690 + '@img/sharp-libvips-linux-arm': 1.2.4 2691 + optional: true 2692 + 2693 + '@img/sharp-linux-ppc64@0.34.5': 2694 + optionalDependencies: 2695 + '@img/sharp-libvips-linux-ppc64': 1.2.4 2696 + optional: true 2697 + 2698 + '@img/sharp-linux-riscv64@0.34.5': 2699 + optionalDependencies: 2700 + '@img/sharp-libvips-linux-riscv64': 1.2.4 2701 + optional: true 2702 + 2703 + '@img/sharp-linux-s390x@0.34.5': 2704 + optionalDependencies: 2705 + '@img/sharp-libvips-linux-s390x': 1.2.4 2706 + optional: true 2707 + 2708 + '@img/sharp-linux-x64@0.34.5': 2709 + optionalDependencies: 2710 + '@img/sharp-libvips-linux-x64': 1.2.4 2711 + optional: true 2712 + 2713 + '@img/sharp-linuxmusl-arm64@0.34.5': 2714 + optionalDependencies: 2715 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 2716 + optional: true 2717 + 2718 + '@img/sharp-linuxmusl-x64@0.34.5': 2719 + optionalDependencies: 2720 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 2721 + optional: true 2722 + 2723 + '@img/sharp-wasm32@0.34.5': 2724 + dependencies: 2725 + '@emnapi/runtime': 1.8.1 2726 + optional: true 2727 + 2728 + '@img/sharp-win32-arm64@0.34.5': 2729 + optional: true 2730 + 2731 + '@img/sharp-win32-ia32@0.34.5': 2732 + optional: true 2733 + 2734 + '@img/sharp-win32-x64@0.34.5': 2735 + optional: true 2736 + 1927 2737 '@internationalized/date@3.11.0': 1928 2738 dependencies: 1929 2739 '@swc/helpers': 0.5.19 ··· 1943 2753 '@jridgewell/sourcemap-codec@1.5.5': {} 1944 2754 1945 2755 '@jridgewell/trace-mapping@0.3.31': 2756 + dependencies: 2757 + '@jridgewell/resolve-uri': 3.1.2 2758 + '@jridgewell/sourcemap-codec': 1.5.5 2759 + 2760 + '@jridgewell/trace-mapping@0.3.9': 1946 2761 dependencies: 1947 2762 '@jridgewell/resolve-uri': 3.1.2 1948 2763 '@jridgewell/sourcemap-codec': 1.5.5 ··· 1971 2786 1972 2787 '@polka/url@1.0.0-next.29': {} 1973 2788 2789 + '@poppinss/colors@4.1.6': 2790 + dependencies: 2791 + kleur: 4.1.5 2792 + 2793 + '@poppinss/dumper@0.6.5': 2794 + dependencies: 2795 + '@poppinss/colors': 4.1.6 2796 + '@sindresorhus/is': 7.2.0 2797 + supports-color: 10.2.2 2798 + 2799 + '@poppinss/exception@1.2.3': {} 2800 + 1974 2801 '@rollup/rollup-android-arm-eabi@4.59.0': 1975 2802 optional: true 1976 2803 ··· 2046 2873 '@rollup/rollup-win32-x64-msvc@4.59.0': 2047 2874 optional: true 2048 2875 2876 + '@sindresorhus/is@7.2.0': {} 2877 + 2878 + '@speed-highlight/core@1.2.14': {} 2879 + 2049 2880 '@stablelib/aead@1.0.1': {} 2050 2881 2051 2882 '@stablelib/binary@1.0.1': ··· 2083 2914 dependencies: 2084 2915 acorn: 8.16.0 2085 2916 2086 - '@sveltejs/adapter-auto@7.0.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))': 2917 + '@sveltejs/adapter-cloudflare@7.2.8(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(wrangler@4.69.0(@cloudflare/workers-types@4.20260301.1))': 2087 2918 dependencies: 2088 - '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)) 2919 + '@cloudflare/workers-types': 4.20260301.1 2920 + '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) 2921 + worktop: 0.8.0-next.18 2922 + wrangler: 4.69.0(@cloudflare/workers-types@4.20260301.1) 2089 2923 2090 - '@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1))': 2924 + '@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))': 2091 2925 dependencies: 2092 2926 '@standard-schema/spec': 1.1.0 2093 2927 '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) 2094 - '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)) 2928 + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) 2095 2929 '@types/cookie': 0.6.0 2096 2930 acorn: 8.16.0 2097 2931 cookie: 0.6.0 ··· 2103 2937 set-cookie-parser: 3.0.1 2104 2938 sirv: 3.0.2 2105 2939 svelte: 5.53.6 2106 - vite: 7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1) 2940 + vite: 7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) 2107 2941 optionalDependencies: 2108 2942 typescript: 5.9.3 2109 2943 2110 - '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1))': 2944 + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))': 2111 2945 dependencies: 2112 - '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)) 2946 + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) 2113 2947 obug: 2.1.1 2114 2948 svelte: 5.53.6 2115 - vite: 7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1) 2949 + vite: 7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) 2116 2950 2117 - '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1))': 2951 + '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))': 2118 2952 dependencies: 2119 - '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)) 2953 + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) 2120 2954 deepmerge: 4.3.1 2121 2955 magic-string: 0.30.21 2122 2956 obug: 2.1.1 2123 2957 svelte: 5.53.6 2124 - vite: 7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1) 2125 - vitefu: 1.1.2(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)) 2958 + vite: 7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) 2959 + vitefu: 1.1.2(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) 2126 2960 2127 2961 '@swc/helpers@0.5.19': 2128 2962 dependencies: ··· 2199 3033 postcss-selector-parser: 6.0.10 2200 3034 tailwindcss: 4.2.1 2201 3035 2202 - '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1))': 3036 + '@tailwindcss/vite@4.2.1(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0))': 2203 3037 dependencies: 2204 3038 '@tailwindcss/node': 4.2.1 2205 3039 '@tailwindcss/oxide': 4.2.1 2206 3040 tailwindcss: 4.2.1 2207 - vite: 7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1) 3041 + vite: 7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) 3042 + 3043 + '@types/bun@1.3.9': 3044 + dependencies: 3045 + bun-types: 1.3.9 2208 3046 2209 3047 '@types/cookie@0.6.0': {} 2210 3048 ··· 2309 3147 '@typescript-eslint/types': 8.56.1 2310 3148 eslint-visitor-keys: 5.0.1 2311 3149 3150 + '@use-gesture/core@10.3.1': {} 3151 + 3152 + '@use-gesture/vanilla@10.3.1': 3153 + dependencies: 3154 + '@use-gesture/core': 10.3.1 3155 + 2312 3156 acorn-jsx@5.3.2(acorn@8.16.0): 2313 3157 dependencies: 2314 3158 acorn: 8.16.0 ··· 2330 3174 2331 3175 aria-query@5.3.1: {} 2332 3176 3177 + await-lock@2.2.2: {} 3178 + 2333 3179 axobject-query@4.1.0: {} 2334 3180 2335 3181 balanced-match@1.0.2: {} ··· 2338 3184 2339 3185 base64-js@1.5.1: {} 2340 3186 2341 - bits-ui@2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6): 3187 + bits-ui@2.16.2(@internationalized/date@3.11.0)(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6): 2342 3188 dependencies: 2343 3189 '@floating-ui/core': 1.7.4 2344 3190 '@floating-ui/dom': 1.7.5 2345 3191 '@internationalized/date': 3.11.0 2346 3192 esm-env: 1.2.2 2347 - runed: 0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6) 3193 + runed: 0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6) 2348 3194 svelte: 5.53.6 2349 - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6) 3195 + svelte-toolbelt: 0.10.6(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6) 2350 3196 tabbable: 6.4.0 2351 3197 transitivePeerDependencies: 2352 3198 - '@sveltejs/kit' 3199 + 3200 + blake3-wasm@2.1.5: {} 2353 3201 2354 3202 brace-expansion@1.1.12: 2355 3203 dependencies: ··· 2364 3212 dependencies: 2365 3213 base64-js: 1.5.1 2366 3214 ieee754: 1.2.1 3215 + 3216 + bun-types@1.3.9: 3217 + dependencies: 3218 + '@types/node': 22.19.13 2367 3219 2368 3220 callsites@3.1.0: {} 2369 3221 ··· 2388 3240 2389 3241 cookie@0.6.0: {} 2390 3242 3243 + cookie@1.1.1: {} 3244 + 3245 + core-js@3.48.0: {} 3246 + 2391 3247 cross-spawn@7.0.6: 2392 3248 dependencies: 2393 3249 path-key: 3.1.1 ··· 2395 3251 which: 2.0.2 2396 3252 2397 3253 cssesc@3.0.0: {} 3254 + 3255 + custom-event-polyfill@1.0.7: {} 2398 3256 2399 3257 debug@4.4.3: 2400 3258 dependencies: ··· 2427 3285 transitivePeerDependencies: 2428 3286 - encoding 2429 3287 3288 + emoji-picker-element@1.29.1: {} 3289 + 2430 3290 enhanced-resolve@5.20.0: 2431 3291 dependencies: 2432 3292 graceful-fs: 4.2.11 2433 3293 tapable: 2.3.0 3294 + 3295 + error-stack-parser-es@1.0.5: {} 2434 3296 2435 3297 esbuild@0.27.3: 2436 3298 optionalDependencies: ··· 2590 3452 fsevents@2.3.3: 2591 3453 optional: true 2592 3454 3455 + get-tsconfig@4.13.6: 3456 + dependencies: 3457 + resolve-pkg-maps: 1.0.0 3458 + 2593 3459 glob-parent@6.0.2: 2594 3460 dependencies: 2595 3461 is-glob: 4.0.3 ··· 2604 3470 2605 3471 has-flag@4.0.0: {} 2606 3472 3473 + hls.js@1.6.15: {} 3474 + 2607 3475 ieee754@1.2.1: {} 2608 3476 2609 3477 ignore@5.3.2: {} ··· 2619 3487 2620 3488 inline-style-parser@0.2.7: {} 2621 3489 3490 + is-emoji-supported@0.0.5: {} 3491 + 2622 3492 is-extglob@2.1.1: {} 2623 3493 2624 3494 is-glob@4.0.3: ··· 2630 3500 '@types/estree': 1.0.8 2631 3501 2632 3502 isexe@2.0.0: {} 3503 + 3504 + iso-datestring-validator@2.2.2: {} 2633 3505 2634 3506 isomorphic-fetch@3.0.0: 2635 3507 dependencies: ··· 2718 3590 2719 3591 lilconfig@2.1.0: {} 2720 3592 3593 + loadjs@4.3.0: {} 3594 + 2721 3595 locate-character@3.0.0: {} 2722 3596 2723 3597 locate-path@6.0.0: ··· 2734 3608 2735 3609 mini-svg-data-uri@1.4.4: {} 2736 3610 3611 + miniflare@4.20260305.0: 3612 + dependencies: 3613 + '@cspotcode/source-map-support': 0.8.1 3614 + sharp: 0.34.5 3615 + undici: 7.18.2 3616 + workerd: 1.20260305.0 3617 + ws: 8.18.0 3618 + youch: 4.1.0-beta.10 3619 + transitivePeerDependencies: 3620 + - bufferutil 3621 + - utf-8-validate 3622 + 2737 3623 minimatch@10.2.4: 2738 3624 dependencies: 2739 3625 brace-expansion: 5.0.4 ··· 2754 3640 2755 3641 ms@2.1.3: {} 2756 3642 3643 + multiformats@9.9.0: {} 3644 + 2757 3645 nanoid@3.3.11: {} 3646 + 3647 + nanoid@5.1.6: {} 2758 3648 2759 3649 natural-compare@1.4.0: {} 2760 3650 ··· 2762 3652 dependencies: 2763 3653 whatwg-url: 5.0.0 2764 3654 3655 + node-gyp-build@4.8.4: {} 3656 + 2765 3657 number-flow@0.5.12: 2766 3658 dependencies: 2767 3659 esm-env: 1.2.2 ··· 2796 3688 path-exists@4.0.0: {} 2797 3689 2798 3690 path-key@3.1.1: {} 3691 + 3692 + path-to-regexp@6.3.0: {} 3693 + 3694 + pathe@2.0.3: {} 2799 3695 2800 3696 picocolors@1.1.1: {} 2801 3697 2802 3698 picomatch@4.0.3: {} 2803 3699 3700 + plyr@3.8.4: 3701 + dependencies: 3702 + core-js: 3.48.0 3703 + custom-event-polyfill: 1.0.7 3704 + loadjs: 4.3.0 3705 + rangetouch: 2.0.1 3706 + url-polyfill: 1.1.14 3707 + 2804 3708 postcss-load-config@3.1.4(postcss@8.5.6): 2805 3709 dependencies: 2806 3710 lilconfig: 2.1.0 ··· 2849 3753 2850 3754 punycode@2.3.1: {} 2851 3755 3756 + rangetouch@2.0.1: {} 3757 + 2852 3758 readdirp@4.1.2: {} 2853 3759 3760 + regexparam@3.0.0: {} 3761 + 2854 3762 resolve-from@4.0.0: {} 3763 + 3764 + resolve-pkg-maps@1.0.0: {} 2855 3765 2856 3766 rollup@4.59.0: 2857 3767 dependencies: ··· 2899 3809 esm-env: 1.2.2 2900 3810 svelte: 5.53.6 2901 3811 2902 - runed@0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6): 3812 + runed@0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6): 2903 3813 dependencies: 2904 3814 dequal: 2.0.3 2905 3815 esm-env: 1.2.2 2906 3816 lz-string: 1.5.0 2907 3817 svelte: 5.53.6 2908 3818 optionalDependencies: 2909 - '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)) 3819 + '@sveltejs/kit': 2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)) 2910 3820 2911 3821 sade@1.8.1: 2912 3822 dependencies: ··· 2916 3826 2917 3827 set-cookie-parser@3.0.1: {} 2918 3828 3829 + sharp@0.34.5: 3830 + dependencies: 3831 + '@img/colour': 1.1.0 3832 + detect-libc: 2.1.2 3833 + semver: 7.7.4 3834 + optionalDependencies: 3835 + '@img/sharp-darwin-arm64': 0.34.5 3836 + '@img/sharp-darwin-x64': 0.34.5 3837 + '@img/sharp-libvips-darwin-arm64': 1.2.4 3838 + '@img/sharp-libvips-darwin-x64': 1.2.4 3839 + '@img/sharp-libvips-linux-arm': 1.2.4 3840 + '@img/sharp-libvips-linux-arm64': 1.2.4 3841 + '@img/sharp-libvips-linux-ppc64': 1.2.4 3842 + '@img/sharp-libvips-linux-riscv64': 1.2.4 3843 + '@img/sharp-libvips-linux-s390x': 1.2.4 3844 + '@img/sharp-libvips-linux-x64': 1.2.4 3845 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 3846 + '@img/sharp-libvips-linuxmusl-x64': 1.2.4 3847 + '@img/sharp-linux-arm': 0.34.5 3848 + '@img/sharp-linux-arm64': 0.34.5 3849 + '@img/sharp-linux-ppc64': 0.34.5 3850 + '@img/sharp-linux-riscv64': 0.34.5 3851 + '@img/sharp-linux-s390x': 0.34.5 3852 + '@img/sharp-linux-x64': 0.34.5 3853 + '@img/sharp-linuxmusl-arm64': 0.34.5 3854 + '@img/sharp-linuxmusl-x64': 0.34.5 3855 + '@img/sharp-wasm32': 0.34.5 3856 + '@img/sharp-win32-arm64': 0.34.5 3857 + '@img/sharp-win32-ia32': 0.34.5 3858 + '@img/sharp-win32-x64': 0.34.5 3859 + 2919 3860 shebang-command@2.0.0: 2920 3861 dependencies: 2921 3862 shebang-regex: 3.0.0 ··· 2935 3876 style-to-object@1.0.14: 2936 3877 dependencies: 2937 3878 inline-style-parser: 0.2.7 3879 + 3880 + supports-color@10.2.2: {} 2938 3881 2939 3882 supports-color@7.2.0: 2940 3883 dependencies: ··· 2969 3912 runed: 0.28.0(svelte@5.53.6) 2970 3913 svelte: 5.53.6 2971 3914 2972 - svelte-toolbelt@0.10.6(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6): 3915 + svelte-toolbelt@0.10.6(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6): 2973 3916 dependencies: 2974 3917 clsx: 2.1.1 2975 - runed: 0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)))(svelte@5.53.6) 3918 + runed: 0.35.1(@sveltejs/kit@2.53.4(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.53.6)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6)(typescript@5.9.3)(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)))(svelte@5.53.6) 2976 3919 style-to-object: 1.0.14 2977 3920 svelte: 5.53.6 2978 3921 transitivePeerDependencies: ··· 3023 3966 fdir: 6.5.0(picomatch@4.0.3) 3024 3967 picomatch: 4.0.3 3025 3968 3969 + tlds@1.261.0: {} 3970 + 3026 3971 tlock-js@0.9.0: 3027 3972 dependencies: 3028 3973 '@noble/curves': 1.9.7 ··· 3043 3988 3044 3989 tslib@2.8.1: {} 3045 3990 3991 + tsx@4.21.0: 3992 + dependencies: 3993 + esbuild: 0.27.3 3994 + get-tsconfig: 4.13.6 3995 + optionalDependencies: 3996 + fsevents: 2.3.3 3997 + 3046 3998 type-check@0.4.0: 3047 3999 dependencies: 3048 4000 prelude-ls: 1.2.1 ··· 3060 4012 3061 4013 typescript@5.9.3: {} 3062 4014 4015 + uint8arrays@3.0.0: 4016 + dependencies: 4017 + multiformats: 9.9.0 4018 + 3063 4019 undici-types@6.21.0: {} 3064 4020 4021 + undici@7.18.2: {} 4022 + 4023 + unenv@2.0.0-rc.24: 4024 + dependencies: 4025 + pathe: 2.0.3 4026 + 4027 + unicode-segmenter@0.14.5: {} 4028 + 3065 4029 uri-js@4.4.1: 3066 4030 dependencies: 3067 4031 punycode: 2.3.1 3068 4032 4033 + url-polyfill@1.1.14: {} 4034 + 3069 4035 util-deprecate@1.0.2: {} 3070 4036 3071 - vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1): 4037 + valibot@1.2.0(typescript@5.9.3): 4038 + optionalDependencies: 4039 + typescript: 5.9.3 4040 + 4041 + vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0): 3072 4042 dependencies: 3073 4043 esbuild: 0.27.3 3074 4044 fdir: 6.5.0(picomatch@4.0.3) ··· 3081 4051 fsevents: 2.3.3 3082 4052 jiti: 2.6.1 3083 4053 lightningcss: 1.31.1 4054 + tsx: 4.21.0 3084 4055 3085 - vitefu@1.1.2(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)): 4056 + vitefu@1.1.2(vite@7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0)): 3086 4057 optionalDependencies: 3087 - vite: 7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1) 4058 + vite: 7.3.1(@types/node@22.19.13)(jiti@2.6.1)(lightningcss@1.31.1)(tsx@4.21.0) 3088 4059 3089 4060 webidl-conversions@3.0.1: {} 3090 4061 ··· 3101 4072 3102 4073 word-wrap@1.2.5: {} 3103 4074 4075 + workerd@1.20260305.0: 4076 + optionalDependencies: 4077 + '@cloudflare/workerd-darwin-64': 1.20260305.0 4078 + '@cloudflare/workerd-darwin-arm64': 1.20260305.0 4079 + '@cloudflare/workerd-linux-64': 1.20260305.0 4080 + '@cloudflare/workerd-linux-arm64': 1.20260305.0 4081 + '@cloudflare/workerd-windows-64': 1.20260305.0 4082 + 4083 + worktop@0.8.0-next.18: 4084 + dependencies: 4085 + mrmime: 2.0.1 4086 + regexparam: 3.0.0 4087 + 4088 + wrangler@4.69.0(@cloudflare/workers-types@4.20260301.1): 4089 + dependencies: 4090 + '@cloudflare/kv-asset-handler': 0.4.2 4091 + '@cloudflare/unenv-preset': 2.14.0(unenv@2.0.0-rc.24)(workerd@1.20260305.0) 4092 + blake3-wasm: 2.1.5 4093 + esbuild: 0.27.3 4094 + miniflare: 4.20260305.0 4095 + path-to-regexp: 6.3.0 4096 + unenv: 2.0.0-rc.24 4097 + workerd: 1.20260305.0 4098 + optionalDependencies: 4099 + '@cloudflare/workers-types': 4.20260301.1 4100 + fsevents: 2.3.3 4101 + transitivePeerDependencies: 4102 + - bufferutil 4103 + - utf-8-validate 4104 + 4105 + ws@8.18.0: {} 4106 + 3104 4107 yaml@1.10.2: {} 3105 4108 3106 4109 yocto-queue@0.1.0: {} 3107 4110 4111 + youch-core@0.3.3: 4112 + dependencies: 4113 + '@poppinss/exception': 1.2.3 4114 + error-stack-parser-es: 1.0.5 4115 + 4116 + youch@4.1.0-beta.10: 4117 + dependencies: 4118 + '@poppinss/colors': 4.1.6 4119 + '@poppinss/dumper': 0.6.5 4120 + '@speed-highlight/core': 1.2.14 4121 + cookie: 1.1.1 4122 + youch-core: 0.3.3 4123 + 3108 4124 zimmerframe@1.1.4: {} 4125 + 4126 + zod@3.25.76: {}
+22 -2
src/app.d.ts
··· 1 + import type { OAuthSession } from '@atcute/oauth-node-client'; 2 + import type { Client } from '@atcute/client'; 3 + import type { Did } from '@atcute/lexicons'; 4 + 1 5 // See https://svelte.dev/docs/kit/types#app.d.ts 2 6 // for information about these interfaces 3 7 declare global { 4 8 namespace App { 5 9 // interface Error {} 6 - // interface Locals {} 10 + interface Locals { 11 + session: OAuthSession | null; 12 + client: Client | null; 13 + did: Did | null; 14 + } 7 15 // interface PageData {} 8 16 // interface PageState {} 9 - // interface Platform {} 17 + interface Platform { 18 + env: { 19 + OAUTH_SESSIONS: KVNamespace; 20 + OAUTH_STATES: KVNamespace; 21 + CLIENT_ASSERTION_KEY: string; 22 + COOKIE_SECRET: string; 23 + OAUTH_PUBLIC_URL: string; 24 + PROFILE_CACHE?: KVNamespace; 25 + }; 26 + } 10 27 } 11 28 } 12 29 13 30 export {}; 31 + 32 + import type {} from '@atcute/atproto'; 33 + import type {} from '@atcute/bluesky';
+10
src/hooks.server.ts
··· 1 + import type { Handle } from '@sveltejs/kit'; 2 + import { restoreSession } from '$lib/atproto/server/session'; 3 + 4 + export const handle: Handle = async ({ event, resolve }) => { 5 + const { session, client, did } = await restoreSession(event.cookies, event.platform?.env); 6 + event.locals.session = session; 7 + event.locals.client = client; 8 + event.locals.did = did; 9 + return resolve(event); 10 + };
+75
src/lib/atproto/auth.svelte.ts
··· 1 + import { AppBskyActorDefs } from '@atcute/bluesky'; 2 + import type { ActorIdentifier, Did } from '@atcute/lexicons'; 3 + import { page } from '$app/state'; 4 + import { ALLOW_SIGNUP, REDIRECT_TO_LAST_PAGE_ON_LOGIN } from './settings'; 5 + 6 + export const user = { 7 + get profile() { 8 + return (page.data?.profile as AppBskyActorDefs.ProfileViewDetailed | null) ?? null; 9 + }, 10 + get isLoggedIn() { 11 + return !!page.data?.did; 12 + }, 13 + get did() { 14 + return (page.data?.did as Did | null) ?? null; 15 + } 16 + }; 17 + 18 + function saveReturnTo() { 19 + if (REDIRECT_TO_LAST_PAGE_ON_LOGIN) { 20 + document.cookie = `oauth_return_to=${encodeURIComponent(window.location.pathname + window.location.search)};path=/;max-age=600;samesite=lax`; 21 + } 22 + } 23 + 24 + export async function login(handle: string) { 25 + if (handle.startsWith('did:')) { 26 + if (handle.length < 6) throw new Error('DID must be at least 6 characters'); 27 + } else if (handle.includes('.') && handle.length > 3) { 28 + handle = (handle.startsWith('@') ? handle.slice(1) : handle) as ActorIdentifier; 29 + if (handle.length < 4) throw new Error('Handle must be at least 4 characters'); 30 + } else if (handle.length > 3) { 31 + handle = ((handle.startsWith('@') ? handle.slice(1) : handle) + 32 + '.bsky.social') as ActorIdentifier; 33 + } else { 34 + throw new Error('Please provide a valid handle or DID.'); 35 + } 36 + 37 + const { oauthLogin } = await import('./server/oauth.remote'); 38 + const { url } = await oauthLogin({ handle }); 39 + saveReturnTo(); 40 + window.location.assign(url); 41 + 42 + // Wait for navigation (prevents UI flash) 43 + await new Promise((_resolve, reject) => { 44 + window.addEventListener('pageshow', () => reject(new Error('user aborted the login request')), { 45 + once: true 46 + }); 47 + }); 48 + } 49 + 50 + export async function signup() { 51 + if (!ALLOW_SIGNUP) throw new Error('Signup is not enabled'); 52 + 53 + const { oauthLogin } = await import('./server/oauth.remote'); 54 + const { url } = await oauthLogin({ signup: true }); 55 + saveReturnTo(); 56 + window.location.assign(url); 57 + 58 + await new Promise((_resolve, reject) => { 59 + window.addEventListener('pageshow', () => reject(new Error('user aborted the signup request')), { 60 + once: true 61 + }); 62 + }); 63 + } 64 + 65 + export async function logout() { 66 + try { 67 + const { oauthLogout } = await import('./server/oauth.remote'); 68 + await oauthLogout(); 69 + } catch (e) { 70 + console.error('Error logging out:', e); 71 + } 72 + 73 + // Full reload to clear server session state 74 + window.location.href = '/'; 75 + }
+152
src/lib/atproto/image-helper.ts
··· 1 + import { getCDNImageBlobUrl, uploadBlob } from './methods'; 2 + 3 + export function compressImage( 4 + file: File | Blob, 5 + maxSize: number = 900 * 1024, 6 + maxDimension: number = 2048 7 + ): Promise<{ 8 + blob: Blob; 9 + aspectRatio: { 10 + width: number; 11 + height: number; 12 + }; 13 + }> { 14 + return new Promise((resolve, reject) => { 15 + const img = new Image(); 16 + const reader = new FileReader(); 17 + 18 + reader.onload = (e) => { 19 + if (!e.target?.result) { 20 + return reject(new Error('Failed to read file.')); 21 + } 22 + img.src = e.target.result as string; 23 + }; 24 + 25 + reader.onerror = (err) => reject(err); 26 + reader.readAsDataURL(file); 27 + 28 + img.onload = () => { 29 + let width = img.width; 30 + let height = img.height; 31 + 32 + // If image is already small enough, return original 33 + if (file.size <= maxSize) { 34 + console.log('skipping compression+resizing, already small enough'); 35 + return resolve({ 36 + blob: file, 37 + aspectRatio: { 38 + width, 39 + height 40 + } 41 + }); 42 + } 43 + 44 + if (width > maxDimension || height > maxDimension) { 45 + if (width > height) { 46 + height = Math.round((maxDimension / width) * height); 47 + width = maxDimension; 48 + } else { 49 + width = Math.round((maxDimension / height) * width); 50 + height = maxDimension; 51 + } 52 + } 53 + 54 + // Create a canvas to draw the image 55 + const canvas = document.createElement('canvas'); 56 + canvas.width = width; 57 + canvas.height = height; 58 + const ctx = canvas.getContext('2d'); 59 + if (!ctx) return reject(new Error('Failed to get canvas context.')); 60 + ctx.drawImage(img, 0, 0, width, height); 61 + 62 + // Use WebP for both compression and transparency support 63 + let quality = 0.9; 64 + 65 + function attemptCompression() { 66 + canvas.toBlob( 67 + (blob) => { 68 + if (!blob) { 69 + return reject(new Error('Compression failed.')); 70 + } 71 + if (blob.size <= maxSize || quality < 0.3) { 72 + resolve({ 73 + blob, 74 + aspectRatio: { 75 + width, 76 + height 77 + } 78 + }); 79 + } else { 80 + quality -= 0.1; 81 + attemptCompression(); 82 + } 83 + }, 84 + 'image/webp', 85 + quality 86 + ); 87 + } 88 + 89 + attemptCompression(); 90 + }; 91 + 92 + img.onerror = (err) => reject(err); 93 + }); 94 + } 95 + 96 + export async function checkAndUploadImage( 97 + recordWithImage: Record<string, any>, 98 + key: string = 'image', 99 + // e.g. /api/image-proxy?url= 100 + imageProxy?: string 101 + ) { 102 + if (!recordWithImage[key]) return; 103 + 104 + // Already uploaded as blob 105 + if (typeof recordWithImage[key] === 'object' && recordWithImage[key].$type === 'blob') { 106 + return; 107 + } 108 + 109 + if (typeof recordWithImage[key] === 'string' && imageProxy) { 110 + const proxyUrl = imageProxy + encodeURIComponent(recordWithImage[key]); 111 + const response = await fetch(proxyUrl); 112 + if (!response.ok) { 113 + throw Error('failed to get image from image proxy'); 114 + } 115 + 116 + const blob = await response.blob(); 117 + const compressedBlob = await compressImage(blob); 118 + 119 + recordWithImage[key] = await uploadBlob({ blob: compressedBlob.blob }); 120 + 121 + return; 122 + } 123 + 124 + if (recordWithImage[key]?.blob) { 125 + if (recordWithImage[key].objectUrl) { 126 + URL.revokeObjectURL(recordWithImage[key].objectUrl); 127 + } 128 + const compressedBlob = await compressImage(recordWithImage[key].blob); 129 + recordWithImage[key] = await uploadBlob({ blob: compressedBlob.blob }); 130 + } 131 + } 132 + 133 + export function getImageFromRecord( 134 + recordWithImage: Record<string, any> | undefined, 135 + did: string, 136 + key: string = 'image' 137 + ): string | undefined { 138 + if (!recordWithImage?.[key]) return; 139 + 140 + if (typeof recordWithImage[key] === 'object' && recordWithImage[key].$type === 'blob') { 141 + return getCDNImageBlobUrl({ did, blob: recordWithImage[key] }); 142 + } 143 + 144 + if (recordWithImage[key].objectUrl) return recordWithImage[key].objectUrl; 145 + 146 + if (recordWithImage[key].blob) { 147 + recordWithImage[key].objectUrl = URL.createObjectURL(recordWithImage[key].blob); 148 + return recordWithImage[key].objectUrl; 149 + } 150 + 151 + return recordWithImage[key]; 152 + }
+20
src/lib/atproto/index.ts
··· 1 + export { user, login, signup, logout } from './auth.svelte'; 2 + 3 + export { 4 + parseUri, 5 + resolveHandle, 6 + actorToDid, 7 + getPDS, 8 + getDetailedProfile, 9 + getClient, 10 + listRecords, 11 + getRecord, 12 + putRecord, 13 + deleteRecord, 14 + uploadBlob, 15 + describeRepo, 16 + getBlobURL, 17 + getCDNImageBlobUrl, 18 + searchActorsTypeahead, 19 + createTID 20 + } from './methods';
+329
src/lib/atproto/methods.ts
··· 1 + import { parseResourceUri, type Did, type Handle } from '@atcute/lexicons'; 2 + import { isDid } from '@atcute/lexicons/syntax'; 3 + import { user } from './auth.svelte'; 4 + import { DOH_RESOLVER, type AllowedCollection } from './settings'; 5 + import { 6 + CompositeDidDocumentResolver, 7 + CompositeHandleResolver, 8 + DohJsonHandleResolver, 9 + PlcDidDocumentResolver, 10 + WebDidDocumentResolver, 11 + WellKnownHandleResolver 12 + } from '@atcute/identity-resolver'; 13 + import { Client, simpleFetchHandler } from '@atcute/client'; 14 + import { type AppBskyActorDefs } from '@atcute/bluesky'; 15 + 16 + export type Collection = `${string}.${string}.${string}`; 17 + import * as TID from '@atcute/tid'; 18 + 19 + /** 20 + * Parses an AT Protocol URI into its components. 21 + */ 22 + export function parseUri(uri: string) { 23 + const parts = parseResourceUri(uri); 24 + if (!parts.ok) return; 25 + return parts.value; 26 + } 27 + 28 + /** 29 + * Resolves a handle to a DID using DNS and HTTP methods. 30 + */ 31 + export async function resolveHandle({ handle }: { handle: Handle }) { 32 + const handleResolver = new CompositeHandleResolver({ 33 + methods: { 34 + dns: new DohJsonHandleResolver({ dohUrl: DOH_RESOLVER }), 35 + http: new WellKnownHandleResolver() 36 + } 37 + }); 38 + 39 + const data = await handleResolver.resolve(handle); 40 + return data; 41 + } 42 + 43 + /** 44 + * Returns a DID given a handle or DID string. 45 + */ 46 + export async function actorToDid(actor: string): Promise<Did> { 47 + if (isDid(actor)) return actor; 48 + return await resolveHandle({ handle: actor as Handle }); 49 + } 50 + 51 + const didResolver = new CompositeDidDocumentResolver({ 52 + methods: { 53 + plc: new PlcDidDocumentResolver(), 54 + web: new WebDidDocumentResolver() 55 + } 56 + }); 57 + 58 + /** 59 + * Gets the PDS (Personal Data Server) URL for a given DID. 60 + */ 61 + export async function getPDS(did: Did) { 62 + const doc = await didResolver.resolve(did as Did<'plc'> | Did<'web'>); 63 + if (!doc.service) throw new Error('No PDS found'); 64 + for (const service of doc.service) { 65 + if (service.id === '#atproto_pds') { 66 + return service.serviceEndpoint.toString(); 67 + } 68 + } 69 + } 70 + 71 + /** 72 + * Fetches a detailed Bluesky profile for a user. 73 + */ 74 + export async function getDetailedProfile(data?: { did?: Did; client?: Client }) { 75 + data ??= {}; 76 + data.did ??= user.did ?? undefined; 77 + 78 + if (!data.did) throw new Error('Error getting detailed profile: no did'); 79 + 80 + data.client ??= new Client({ 81 + handler: simpleFetchHandler({ service: 'https://public.api.bsky.app' }) 82 + }); 83 + 84 + const response = await data.client.get('app.bsky.actor.getProfile', { 85 + params: { actor: data.did } 86 + }); 87 + 88 + if (!response.ok) return; 89 + 90 + return response.data; 91 + } 92 + 93 + /** 94 + * Creates an AT Protocol client for a user's PDS. 95 + */ 96 + export async function getClient({ did }: { did: Did }) { 97 + const pds = await getPDS(did); 98 + if (!pds) throw new Error('PDS not found'); 99 + 100 + const client = new Client({ 101 + handler: simpleFetchHandler({ service: pds }) 102 + }); 103 + 104 + return client; 105 + } 106 + 107 + /** 108 + * Lists records from a repository collection with pagination support. 109 + */ 110 + export async function listRecords({ 111 + did, 112 + collection, 113 + cursor, 114 + limit = 100, 115 + client 116 + }: { 117 + did?: Did; 118 + collection: `${string}.${string}.${string}`; 119 + cursor?: string; 120 + limit?: number; 121 + client?: Client; 122 + }) { 123 + did ??= user.did ?? undefined; 124 + if (!collection) { 125 + throw new Error('Missing parameters for listRecords'); 126 + } 127 + if (!did) { 128 + throw new Error('Missing did for listRecords'); 129 + } 130 + 131 + client ??= await getClient({ did }); 132 + 133 + const allRecords = []; 134 + 135 + let currentCursor = cursor; 136 + do { 137 + const response = await client.get('com.atproto.repo.listRecords', { 138 + params: { 139 + repo: did, 140 + collection, 141 + limit: !limit || limit > 100 ? 100 : limit, 142 + cursor: currentCursor 143 + } 144 + }); 145 + 146 + if (!response.ok) { 147 + return allRecords; 148 + } 149 + 150 + allRecords.push(...response.data.records); 151 + currentCursor = response.data.cursor; 152 + } while (currentCursor && (!limit || allRecords.length < limit)); 153 + 154 + return allRecords; 155 + } 156 + 157 + /** 158 + * Fetches a single record from a repository. 159 + */ 160 + export async function getRecord({ 161 + did, 162 + collection, 163 + rkey = 'self', 164 + client 165 + }: { 166 + did?: Did; 167 + collection: Collection; 168 + rkey?: string; 169 + client?: Client; 170 + }) { 171 + did ??= user.did ?? undefined; 172 + 173 + if (!collection) { 174 + throw new Error('Missing parameters for getRecord'); 175 + } 176 + if (!did) { 177 + throw new Error('Missing did for getRecord'); 178 + } 179 + 180 + client ??= await getClient({ did }); 181 + 182 + const record = await client.get('com.atproto.repo.getRecord', { 183 + params: { 184 + repo: did, 185 + collection, 186 + rkey 187 + } 188 + }); 189 + 190 + return JSON.parse(JSON.stringify(record.data)); 191 + } 192 + 193 + /** 194 + * Creates or updates a record via remote function. 195 + */ 196 + export async function putRecord({ 197 + collection, 198 + rkey = 'self', 199 + record 200 + }: { 201 + collection: AllowedCollection; 202 + rkey?: string; 203 + record: Record<string, unknown>; 204 + }) { 205 + if (!user.did) throw new Error('Not logged in'); 206 + 207 + const { putRecord: putRecordRemote } = await import('./server/repo.remote'); 208 + const data = await putRecordRemote({ collection, rkey, record }); 209 + return { ok: true, data }; 210 + } 211 + 212 + /** 213 + * Deletes a record via remote function. 214 + */ 215 + export async function deleteRecord({ 216 + collection, 217 + rkey = 'self' 218 + }: { 219 + collection: AllowedCollection; 220 + rkey: string; 221 + }) { 222 + if (!user.did) throw new Error('Not logged in'); 223 + 224 + const { deleteRecord: deleteRecordRemote } = await import('./server/repo.remote'); 225 + const data = await deleteRecordRemote({ collection, rkey }); 226 + return data.ok; 227 + } 228 + 229 + /** 230 + * Uploads a blob via remote function. 231 + */ 232 + export async function uploadBlob({ blob }: { blob: Blob }) { 233 + if (!user.did) throw new Error("Can't upload blob: Not logged in"); 234 + 235 + const { uploadBlob: uploadBlobRemote } = await import('./server/repo.remote'); 236 + return await uploadBlobRemote({ blob }); 237 + } 238 + 239 + /** 240 + * Gets metadata about a repository. 241 + */ 242 + export async function describeRepo({ client, did }: { client?: Client; did?: Did }) { 243 + did ??= user.did ?? undefined; 244 + if (!did) { 245 + throw new Error('Error describeRepo: No did'); 246 + } 247 + client ??= await getClient({ did }); 248 + 249 + const repo = await client.get('com.atproto.repo.describeRepo', { 250 + params: { 251 + repo: did 252 + } 253 + }); 254 + if (!repo.ok) return; 255 + 256 + return repo.data; 257 + } 258 + 259 + /** 260 + * Constructs a URL to fetch a blob directly from a user's PDS. 261 + */ 262 + export async function getBlobURL({ 263 + did, 264 + blob 265 + }: { 266 + did: Did; 267 + blob: { 268 + $type: 'blob'; 269 + ref: { 270 + $link: string; 271 + }; 272 + }; 273 + }) { 274 + const pds = await getPDS(did); 275 + return `${pds}/xrpc/com.atproto.sync.getBlob?did=${did}&cid=${blob.ref.$link}`; 276 + } 277 + 278 + /** 279 + * Constructs a Bluesky CDN URL for an image blob. 280 + */ 281 + export function getCDNImageBlobUrl({ 282 + did, 283 + blob 284 + }: { 285 + did?: string; 286 + blob: { 287 + $type: 'blob'; 288 + ref: { 289 + $link: string; 290 + }; 291 + }; 292 + }) { 293 + did ??= user.did ?? undefined; 294 + 295 + return `https://cdn.bsky.app/img/feed_thumbnail/plain/${did}/${blob.ref.$link}@webp`; 296 + } 297 + 298 + /** 299 + * Searches for actors with typeahead/autocomplete functionality. 300 + */ 301 + export async function searchActorsTypeahead( 302 + q: string, 303 + limit: number = 10, 304 + host?: string 305 + ): Promise<{ actors: AppBskyActorDefs.ProfileViewBasic[]; q: string }> { 306 + host ??= 'https://public.api.bsky.app'; 307 + 308 + const client = new Client({ 309 + handler: simpleFetchHandler({ service: host }) 310 + }); 311 + 312 + const response = await client.get('app.bsky.actor.searchActorsTypeahead', { 313 + params: { 314 + q, 315 + limit 316 + } 317 + }); 318 + 319 + if (!response.ok) return { actors: [], q }; 320 + 321 + return { actors: response.data.actors, q }; 322 + } 323 + 324 + /** 325 + * Return a TID based on current time 326 + */ 327 + export function createTID() { 328 + return TID.now(); 329 + }
+4
src/lib/atproto/scripts/generate-key.ts
··· 1 + import { generateClientAssertionKey } from '@atcute/oauth-node-client'; 2 + 3 + const key = await generateClientAssertionKey('main-key'); 4 + console.log(JSON.stringify(key));
+3
src/lib/atproto/scripts/generate-secret.ts
··· 1 + import { randomBytes } from 'node:crypto'; 2 + 3 + console.log(randomBytes(32).toString('base64url'));
+47
src/lib/atproto/scripts/setup-dev.ts
··· 1 + import { existsSync } from 'node:fs'; 2 + import { copyFile, readFile, writeFile } from 'node:fs/promises'; 3 + import { resolve } from 'node:path'; 4 + import { randomBytes } from 'node:crypto'; 5 + 6 + import { generateClientAssertionKey } from '@atcute/oauth-node-client'; 7 + 8 + const cwd = process.cwd(); 9 + const examplePath = resolve(cwd, '.env.example'); 10 + const envPath = resolve(cwd, '.env'); 11 + 12 + if (!existsSync(envPath)) { 13 + if (!existsSync(examplePath)) { 14 + throw new Error(`missing .env.example (expected at ${examplePath})`); 15 + } 16 + await copyFile(examplePath, envPath); 17 + console.log(`created ${envPath}`); 18 + } 19 + 20 + const upsertVar = (input: string, key: string, value: string): string => { 21 + const line = `${key}=${value}`; 22 + const re = new RegExp(`^${key}=.*$`, 'm'); 23 + 24 + if (re.test(input)) { 25 + const match = input.match(re); 26 + const current = match ? match[0].slice(key.length + 1).trim() : ''; 27 + // Only overwrite if empty/placeholder 28 + if (current === '' || current === "''" || current === '""' || current.includes('...')) { 29 + return input.replace(re, line); 30 + } 31 + return input; 32 + } 33 + 34 + const suffix = input.endsWith('\n') || input.length === 0 ? '' : '\n'; 35 + return `${input}${suffix}${line}\n`; 36 + }; 37 + 38 + let vars = await readFile(envPath, 'utf8'); 39 + 40 + const secret = randomBytes(32).toString('base64url'); 41 + vars = upsertVar(vars, 'COOKIE_SECRET', secret); 42 + 43 + const jwk = await generateClientAssertionKey('main-key'); 44 + vars = upsertVar(vars, 'CLIENT_ASSERTION_KEY', JSON.stringify(jwk)); 45 + 46 + await writeFile(envPath, vars); 47 + console.log(`updated ${envPath}`);
+38
src/lib/atproto/server/kv-store.ts
··· 1 + import type { Store } from '@atcute/oauth-node-client'; 2 + 3 + export class KVStore<K extends string, V> implements Store<K, V> { 4 + private kv: KVNamespace; 5 + private expirationTtl?: number; 6 + 7 + constructor(kv: KVNamespace, options?: { expirationTtl?: number }) { 8 + this.kv = kv; 9 + this.expirationTtl = options?.expirationTtl; 10 + } 11 + 12 + async get(key: K): Promise<V | undefined> { 13 + const value = await this.kv.get(key, 'text'); 14 + if (value === null) return undefined; 15 + return JSON.parse(value) as V; 16 + } 17 + 18 + async set(key: K, value: V): Promise<void> { 19 + await this.kv.put(key, JSON.stringify(value), { 20 + expirationTtl: this.expirationTtl 21 + }); 22 + } 23 + 24 + async delete(key: K): Promise<void> { 25 + await this.kv.delete(key); 26 + } 27 + 28 + async clear(): Promise<void> { 29 + let cursor: string | undefined; 30 + do { 31 + const result = await this.kv.list({ cursor }); 32 + for (const key of result.keys) { 33 + await this.kv.delete(key.name); 34 + } 35 + cursor = result.list_complete ? undefined : result.cursor; 36 + } while (cursor); 37 + } 38 + }
+56
src/lib/atproto/server/oauth.remote.ts
··· 1 + import * as v from 'valibot'; 2 + import { error } from '@sveltejs/kit'; 3 + import { command, getRequestEvent } from '$app/server'; 4 + import { createOAuthClient } from './oauth'; 5 + import { getSignedCookie } from './signed-cookie'; 6 + import { scopes, signUpPDS } from '../settings'; 7 + import type { ActorIdentifier, Did } from '@atcute/lexicons'; 8 + 9 + export const oauthLogin = command( 10 + v.object({ 11 + handle: v.optional(v.pipe(v.string(), v.minLength(3))), 12 + signup: v.optional(v.boolean()) 13 + }), 14 + async (input) => { 15 + const { platform } = getRequestEvent(); 16 + 17 + try { 18 + const oauth = createOAuthClient(platform?.env); 19 + 20 + const target = input.signup 21 + ? ({ type: 'pds', serviceUrl: signUpPDS } as const) 22 + : ({ type: 'account', identifier: input.handle as ActorIdentifier } as const); 23 + 24 + const { url } = await oauth.authorize({ 25 + target, 26 + scope: scopes.join(' '), 27 + prompt: input.signup ? 'create' : undefined 28 + }); 29 + 30 + return { url: url.toString() }; 31 + } catch (e) { 32 + if (e && typeof e === 'object' && 'status' in e) throw e; // re-throw SvelteKit errors 33 + const message = e instanceof Error ? e.message : 'Login failed'; 34 + error(400, message); 35 + } 36 + } 37 + ); 38 + 39 + export const oauthLogout = command(async () => { 40 + const { cookies, platform } = getRequestEvent(); 41 + const did = getSignedCookie(cookies, 'did') as Did | null; 42 + 43 + if (did) { 44 + try { 45 + const oauth = createOAuthClient(platform?.env); 46 + await oauth.revoke(did); 47 + } catch (e) { 48 + console.error('Error revoking session:', e); 49 + } 50 + } 51 + 52 + cookies.delete('did', { path: '/' }); 53 + cookies.delete('scope', { path: '/' }); 54 + 55 + return { ok: true }; 56 + });
+96
src/lib/atproto/server/oauth.ts
··· 1 + import { 2 + OAuthClient, 3 + MemoryStore, 4 + type ClientAssertionPrivateJwk, 5 + type OAuthClientStores, 6 + type OAuthSession, 7 + type StoredSession, 8 + type StoredState 9 + } from '@atcute/oauth-node-client'; 10 + import type { Did } from '@atcute/lexicons'; 11 + import { 12 + CompositeDidDocumentResolver, 13 + CompositeHandleResolver, 14 + DohJsonHandleResolver, 15 + LocalActorResolver, 16 + PlcDidDocumentResolver, 17 + WebDidDocumentResolver, 18 + WellKnownHandleResolver 19 + } from '@atcute/identity-resolver'; 20 + import { KVStore } from './kv-store'; 21 + import { DOH_RESOLVER, REDIRECT_PATH, scopes } from '../settings'; 22 + import { dev } from '$app/environment'; 23 + 24 + function createActorResolver() { 25 + return new LocalActorResolver({ 26 + handleResolver: new CompositeHandleResolver({ 27 + methods: { 28 + dns: new DohJsonHandleResolver({ dohUrl: DOH_RESOLVER }), 29 + http: new WellKnownHandleResolver() 30 + } 31 + }), 32 + didDocumentResolver: new CompositeDidDocumentResolver({ 33 + methods: { 34 + plc: new PlcDidDocumentResolver(), 35 + web: new WebDidDocumentResolver() 36 + } 37 + }) 38 + }); 39 + } 40 + 41 + function createStores(env?: App.Platform['env']): OAuthClientStores { 42 + if (env?.OAUTH_SESSIONS && env?.OAUTH_STATES) { 43 + return { 44 + sessions: new KVStore<Did, StoredSession>(env.OAUTH_SESSIONS), 45 + states: new KVStore<string, StoredState>(env.OAUTH_STATES, { expirationTtl: 600 }) 46 + }; 47 + } 48 + // Fallback to in-memory stores (dev without wrangler) 49 + return { 50 + sessions: new MemoryStore<Did, StoredSession>(), 51 + states: new MemoryStore<string, StoredState>({ ttl: 600_000 }) 52 + }; 53 + } 54 + 55 + export function createOAuthClient(env?: App.Platform['env']): OAuthClient { 56 + const actorResolver = createActorResolver(); 57 + const stores = createStores(env); 58 + 59 + if (dev && !env?.OAUTH_PUBLIC_URL) { 60 + // Dev without tunnel: loopback public client (no keyset). 61 + // Omit client_id — the library builds it automatically from redirect_uris + scope. 62 + // redirect_uris must use 127.0.0.1 (not localhost). 63 + return new OAuthClient({ 64 + metadata: { 65 + redirect_uris: [`http://127.0.0.1:5183${REDIRECT_PATH}`], 66 + scope: scopes 67 + }, 68 + actorResolver, 69 + stores 70 + }); 71 + } 72 + 73 + // Confidential client (production, or dev with tunnel via OAUTH_PUBLIC_URL) 74 + if (!env?.OAUTH_PUBLIC_URL) { 75 + throw new Error('OAUTH_PUBLIC_URL is not set'); 76 + } 77 + if (!env.CLIENT_ASSERTION_KEY) { 78 + throw new Error('CLIENT_ASSERTION_KEY secret is not set. Run: pnpm env:generate-key'); 79 + } 80 + const site = env.OAUTH_PUBLIC_URL; 81 + const key: ClientAssertionPrivateJwk = JSON.parse(env.CLIENT_ASSERTION_KEY); 82 + 83 + return new OAuthClient({ 84 + metadata: { 85 + client_id: site + '/oauth-client-metadata.json', 86 + redirect_uris: [site + REDIRECT_PATH], 87 + scope: scopes, 88 + jwks_uri: site + '/oauth/jwks.json' 89 + }, 90 + keyset: [key], 91 + actorResolver, 92 + stores 93 + }); 94 + } 95 + 96 + export type { OAuthSession };
+51
src/lib/atproto/server/profile.ts
··· 1 + import type { Did } from '@atcute/lexicons'; 2 + import { getDetailedProfile, describeRepo } from '../methods'; 3 + 4 + const PROFILE_CACHE_TTL = 60 * 60; // 1 hour 5 + 6 + /** 7 + * Loads a user's profile, with optional KV caching. 8 + * Falls back to a fresh fetch if the cache KV doesn't exist or on cache miss. 9 + * Returns undefined if the profile can't be loaded. 10 + */ 11 + export async function loadProfile(did: Did, profileCache?: KVNamespace) { 12 + // Try cache first 13 + if (profileCache) { 14 + try { 15 + const cached = await profileCache.get(did, 'json'); 16 + if (cached) return cached as Record<string, unknown>; 17 + } catch { 18 + // Cache read failed, continue to fresh fetch 19 + } 20 + } 21 + 22 + const profile = await fetchProfile(did); 23 + 24 + // Write to cache (fire-and-forget) 25 + if (profileCache && profile) { 26 + profileCache 27 + .put(did, JSON.stringify(profile), { expirationTtl: PROFILE_CACHE_TTL }) 28 + .catch(() => {}); 29 + } 30 + 31 + return profile; 32 + } 33 + 34 + async function fetchProfile(did: Did) { 35 + try { 36 + let profile = await getDetailedProfile({ did }); 37 + 38 + if (!profile || profile.handle === 'handle.invalid') { 39 + const repo = await describeRepo({ did }); 40 + profile = { 41 + did, 42 + handle: repo?.handle || 'handle.invalid' 43 + } as typeof profile; 44 + } 45 + 46 + return profile; 47 + } catch (e) { 48 + console.error('Failed to load profile:', e); 49 + return undefined; 50 + } 51 + }
+82
src/lib/atproto/server/repo.remote.ts
··· 1 + import { error } from '@sveltejs/kit'; 2 + import { command, getRequestEvent } from '$app/server'; 3 + import * as v from 'valibot'; 4 + import { collections } from '../settings'; 5 + 6 + // Validate collection format and check against allowed list from settings 7 + const collectionSchema = v.pipe( 8 + v.string(), 9 + v.regex(/^[a-zA-Z][a-zA-Z0-9-]*(\.[a-zA-Z][a-zA-Z0-9-]*){2,}$/), 10 + v.check((c) => collections.includes(c as (typeof collections)[number]), 'Collection not in allowed list') 11 + ); 12 + 13 + // AT Protocol rkey: TID, 'self', or other valid record keys (alphanumeric, dash, underscore, dot) 14 + const rkeySchema = v.optional(v.pipe(v.string(), v.regex(/^[a-zA-Z0-9._:~-]{1,512}$/))); 15 + 16 + export const putRecord = command( 17 + v.object({ 18 + collection: collectionSchema, 19 + rkey: rkeySchema, 20 + record: v.record(v.string(), v.unknown()) 21 + }), 22 + async (input) => { 23 + const { locals } = getRequestEvent(); 24 + if (!locals.client || !locals.did) error(401, 'Not authenticated'); 25 + 26 + const response = await locals.client.post('com.atproto.repo.putRecord', { 27 + input: { 28 + collection: input.collection as `${string}.${string}.${string}`, 29 + repo: locals.did, 30 + rkey: input.rkey || 'self', 31 + record: input.record 32 + } 33 + }); 34 + 35 + return response.data; 36 + } 37 + ); 38 + 39 + export const deleteRecord = command( 40 + v.object({ 41 + collection: collectionSchema, 42 + rkey: rkeySchema 43 + }), 44 + async (input) => { 45 + const { locals } = getRequestEvent(); 46 + if (!locals.client || !locals.did) error(401, 'Not authenticated'); 47 + 48 + const response = await locals.client.post('com.atproto.repo.deleteRecord', { 49 + input: { 50 + collection: input.collection as `${string}.${string}.${string}`, 51 + repo: locals.did, 52 + rkey: input.rkey || 'self' 53 + } 54 + }); 55 + 56 + return { ok: response.ok }; 57 + } 58 + ); 59 + 60 + export const uploadBlob = command( 61 + v.object({ 62 + blob: v.instance(Blob) 63 + }), 64 + async (input) => { 65 + const { locals } = getRequestEvent(); 66 + if (!locals.client || !locals.did) error(401, 'Not authenticated'); 67 + 68 + const response = await locals.client.post('com.atproto.repo.uploadBlob', { 69 + params: { repo: locals.did }, 70 + input: input.blob 71 + }); 72 + 73 + if (!response.ok) error(500, 'Upload failed'); 74 + 75 + return response.data.blob as { 76 + $type: 'blob'; 77 + ref: { $link: string }; 78 + mimeType: string; 79 + size: number; 80 + }; 81 + } 82 + );
+53
src/lib/atproto/server/session.ts
··· 1 + import type { Cookies } from '@sveltejs/kit'; 2 + import { Client } from '@atcute/client'; 3 + import type { Did } from '@atcute/lexicons'; 4 + import type { OAuthSession } from '@atcute/oauth-node-client'; 5 + import { createOAuthClient } from './oauth'; 6 + import { getSignedCookie } from './signed-cookie'; 7 + import { scopes } from '../settings'; 8 + 9 + export type SessionLocals = { 10 + session: OAuthSession | null; 11 + client: Client | null; 12 + did: Did | null; 13 + }; 14 + 15 + /** 16 + * Restores an OAuth session from the signed `did` cookie. 17 + * Returns session locals to be assigned to `event.locals`. 18 + * Deletes the cookie if the session can't be restored. 19 + */ 20 + export async function restoreSession( 21 + cookies: Cookies, 22 + env?: App.Platform['env'] 23 + ): Promise<SessionLocals> { 24 + const did = getSignedCookie(cookies, 'did') as Did | null; 25 + 26 + if (!did) { 27 + return { session: null, client: null, did: null }; 28 + } 29 + 30 + // If permissions changed since login, invalidate the session 31 + const savedScope = getSignedCookie(cookies, 'scope'); 32 + if (savedScope !== null && savedScope !== scopes.join(' ')) { 33 + cookies.delete('did', { path: '/' }); 34 + cookies.delete('scope', { path: '/' }); 35 + return { session: null, client: null, did: null }; 36 + } 37 + 38 + try { 39 + const oauth = createOAuthClient(env); 40 + const session = await oauth.restore(did); 41 + 42 + return { 43 + session, 44 + client: new Client({ handler: session }), 45 + did 46 + }; 47 + } catch (e) { 48 + console.error('Failed to restore session:', e); 49 + cookies.delete('did', { path: '/' }); 50 + cookies.delete('scope', { path: '/' }); 51 + return { session: null, client: null, did: null }; 52 + } 53 + }
+69
src/lib/atproto/server/signed-cookie.ts
··· 1 + import { createHmac, timingSafeEqual } from 'node:crypto'; 2 + 3 + import type { Cookies } from '@sveltejs/kit'; 4 + 5 + import { env } from '$env/dynamic/private'; 6 + import { dev } from '$app/environment'; 7 + 8 + const SEPARATOR = '.'; 9 + 10 + function getSecret(): string { 11 + const secret = env.COOKIE_SECRET; 12 + if (secret) return secret; 13 + if (dev) return 'dev-cookie-secret-not-for-production'; 14 + throw new Error('COOKIE_SECRET is not set'); 15 + } 16 + 17 + function toBase64Url(bytes: Uint8Array): string { 18 + let binary = ''; 19 + for (const byte of bytes) binary += String.fromCharCode(byte); 20 + return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); 21 + } 22 + 23 + function fromBase64Url(str: string): Uint8Array { 24 + const padded = str + '='.repeat((4 - (str.length % 4)) % 4); 25 + const base64 = padded.replace(/-/g, '+').replace(/_/g, '/'); 26 + const binary = atob(base64); 27 + const bytes = new Uint8Array(binary.length); 28 + for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i); 29 + return bytes; 30 + } 31 + 32 + function hmacSha256(data: string): Uint8Array { 33 + return createHmac('sha256', getSecret()).update(data).digest(); 34 + } 35 + 36 + export function getSignedCookie(cookies: Cookies, name: string): string | null { 37 + const signed = cookies.get(name); 38 + if (!signed) return null; 39 + 40 + const idx = signed.lastIndexOf(SEPARATOR); 41 + if (idx === -1) return null; 42 + 43 + const value = signed.slice(0, idx); 44 + const sig = signed.slice(idx + 1); 45 + 46 + let expected: Uint8Array; 47 + let got: Uint8Array; 48 + try { 49 + expected = hmacSha256(value); 50 + got = fromBase64Url(sig); 51 + } catch { 52 + return null; 53 + } 54 + 55 + if (got.length !== expected.length || !timingSafeEqual(got, expected)) return null; 56 + 57 + return value; 58 + } 59 + 60 + export function setSignedCookie( 61 + cookies: Cookies, 62 + name: string, 63 + value: string, 64 + options: Parameters<Cookies['set']>[2] 65 + ): void { 66 + const sig = toBase64Url(hmacSha256(value)); 67 + const signed = `${value}${SEPARATOR}${sig}`; 68 + cookies.set(name, signed, options); 69 + }
+25
src/lib/atproto/settings.ts
··· 1 + import { dev } from '$app/environment'; 2 + import { scope } from '@atcute/oauth-node-client'; 3 + 4 + // writable collections 5 + export const collections = ['dev.flo-bit.test.timelock'] as const; 6 + 7 + export type AllowedCollection = (typeof collections)[number]; 8 + 9 + // OAuth scope 10 + export const scopes = ['atproto', scope.repo({ collection: [...collections] })]; 11 + 12 + // set to true to allow signup, false for login-only 13 + export const ALLOW_SIGNUP = false; 14 + 15 + // PDS to use for signup 16 + const devPDS = 'https://bsky.social/'; 17 + const prodPDS = 'https://bsky.social/'; 18 + export const signUpPDS = dev ? devPDS : prodPDS; 19 + 20 + export const REDIRECT_PATH = '/oauth/callback'; 21 + 22 + // redirect the user back to the page they were on before login 23 + export const REDIRECT_TO_LAST_PAGE_ON_LOGIN = true; 24 + 25 + export const DOH_RESOLVER = 'https://mozilla.cloudflare-dns.com/dns-query';
-43
src/lib/secrets.svelte.ts
··· 1 - import { browser } from '$app/environment'; 2 - 3 - export interface Secret { 4 - id: string; 5 - title: string; 6 - ciphertext: string; 7 - createdAt: string; 8 - unlockAt: string; 9 - } 10 - 11 - const STORAGE_KEY = 'timelocked-secrets'; 12 - 13 - function loadSecrets(): Secret[] { 14 - if (!browser) return []; 15 - const raw = localStorage.getItem(STORAGE_KEY); 16 - if (!raw) return []; 17 - try { 18 - return JSON.parse(raw) as Secret[]; 19 - } catch { 20 - return []; 21 - } 22 - } 23 - 24 - function saveSecrets(secrets: Secret[]) { 25 - if (!browser) return; 26 - localStorage.setItem(STORAGE_KEY, JSON.stringify(secrets)); 27 - } 28 - 29 - let secrets = $state<Secret[]>(loadSecrets()); 30 - 31 - export function getSecrets(): Secret[] { 32 - return secrets; 33 - } 34 - 35 - export function addSecret(secret: Secret) { 36 - secrets = [...secrets, secret]; 37 - saveSecrets(secrets); 38 - } 39 - 40 - export function removeSecret(id: string) { 41 - secrets = secrets.filter((s) => s.id !== id); 42 - saveSecrets(secrets); 43 - }
+8
src/routes/(oauth)/oauth-client-metadata.json/+server.ts
··· 1 + import { json } from '@sveltejs/kit'; 2 + import { createOAuthClient } from '$lib/atproto/server/oauth'; 3 + import type { RequestHandler } from './$types'; 4 + 5 + export const GET: RequestHandler = async ({ platform }) => { 6 + const oauth = createOAuthClient(platform?.env); 7 + return json(oauth.metadata); 8 + };
+44
src/routes/(oauth)/oauth/callback/+server.ts
··· 1 + import { redirect } from '@sveltejs/kit'; 2 + import { createOAuthClient } from '$lib/atproto/server/oauth'; 3 + import { setSignedCookie } from '$lib/atproto/server/signed-cookie'; 4 + import { scopes } from '$lib/atproto/settings'; 5 + import { dev } from '$app/environment'; 6 + import type { RequestHandler } from './$types'; 7 + 8 + export const GET: RequestHandler = async ({ url, platform, cookies }) => { 9 + const oauth = createOAuthClient(platform?.env); 10 + 11 + let did: string; 12 + 13 + // oauth.callback() validates the state parameter (CSRF protection) and 14 + // exchanges the authorization code for tokens via the token endpoint. 15 + try { 16 + const { session } = await oauth.callback(url.searchParams); 17 + did = session.did; 18 + 19 + const cookieOpts = { 20 + path: '/', 21 + httpOnly: true, 22 + secure: !dev, 23 + sameSite: 'lax' as const, 24 + maxAge: 60 * 60 * 24 * 180 // 180 days 25 + }; 26 + 27 + setSignedCookie(cookies, 'did', session.did, cookieOpts); 28 + setSignedCookie(cookies, 'scope', scopes.join(' '), cookieOpts); 29 + } catch (e) { 30 + console.error('OAuth callback failed:', e); 31 + redirect(303, '/?error=auth_failed'); 32 + } 33 + 34 + const returnTo = cookies.get('oauth_return_to'); 35 + if (returnTo) { 36 + cookies.delete('oauth_return_to', { path: '/' }); 37 + const decoded = decodeURIComponent(returnTo); 38 + if (decoded.startsWith('/') && !decoded.startsWith('//') && decoded !== '/') { 39 + redirect(303, decoded); 40 + } 41 + } 42 + 43 + redirect(303, `/${encodeURIComponent(did)}`); 44 + };
+8
src/routes/(oauth)/oauth/jwks.json/+server.ts
··· 1 + import { json } from '@sveltejs/kit'; 2 + import { createOAuthClient } from '$lib/atproto/server/oauth'; 3 + import type { RequestHandler } from './$types'; 4 + 5 + export const GET: RequestHandler = async ({ platform }) => { 6 + const oauth = createOAuthClient(platform?.env); 7 + return json(oauth.jwks ?? { keys: [] }); 8 + };
+8
src/routes/+layout.server.ts
··· 1 + import type { LayoutServerLoad } from './$types'; 2 + import { loadProfile } from '$lib/atproto/server/profile'; 3 + 4 + export const load: LayoutServerLoad = async ({ locals, platform }) => { 5 + if (!locals.did) return { did: null, profile: null }; 6 + const profile = await loadProfile(locals.did, platform?.env?.PROFILE_CACHE); 7 + return { did: locals.did, profile }; 8 + };
+24
src/routes/+layout.svelte
··· 2 2 import './layout.css'; 3 3 import favicon from '$lib/assets/favicon.svg'; 4 4 import { ThemeToggle } from '@foxui/core'; 5 + import { AtprotoLoginModal } from '@foxui/social'; 6 + import { login, user, logout } from '$lib/atproto'; 5 7 6 8 let { children } = $props(); 7 9 </script> ··· 10 12 <div class="fixed top-4 left-4 z-50"> 11 13 <ThemeToggle /> 12 14 </div> 15 + {#if user.isLoggedIn} 16 + <div class="fixed top-4 right-4 z-50 flex items-center gap-3"> 17 + <a 18 + href="/{user.profile?.handle ?? user.did}" 19 + class="text-sm font-medium text-base-600 transition-colors hover:text-base-900 dark:text-base-400 dark:hover:text-base-100" 20 + > 21 + {user.profile?.handle ?? user.did} 22 + </a> 23 + <button 24 + onclick={() => logout()} 25 + class="cursor-pointer rounded-lg border border-base-200 bg-base-100 px-3 py-1.5 text-sm font-medium text-base-700 transition-colors hover:bg-base-200 dark:border-base-700 dark:bg-base-800 dark:text-base-300 dark:hover:bg-base-700" 26 + > 27 + Sign Out 28 + </button> 29 + </div> 30 + {/if} 13 31 {@render children()} 32 + <AtprotoLoginModal 33 + login={async (handle) => { 34 + await login(handle); 35 + return true; 36 + }} 37 + />
+51
src/routes/+page.server.ts
··· 1 + import type { PageServerLoad } from './$types'; 2 + import { describeRepo } from '$lib/atproto/methods'; 3 + import type { Did } from '@atcute/lexicons'; 4 + 5 + const COLLECTION = 'dev.flo-bit.test.timelock'; 6 + const API_URL = `https://ufos-api.microcosm.blue/records?collection=${COLLECTION}`; 7 + 8 + export const load: PageServerLoad = async ({ fetch }) => { 9 + try { 10 + const res = await fetch(API_URL); 11 + if (!res.ok) return { recentSecrets: [] }; 12 + 13 + const records = (await res.json()) as Array<{ 14 + did: string; 15 + rkey: string; 16 + record: { 17 + title: string; 18 + createdAt: string; 19 + unlockAt: string; 20 + }; 21 + time_us: number; 22 + }>; 23 + 24 + // Resolve unique DIDs to handles 25 + const uniqueDids = [...new Set(records.map((r) => r.did))]; 26 + const handleMap = new Map<string, string>(); 27 + 28 + await Promise.all( 29 + uniqueDids.map(async (did) => { 30 + try { 31 + const repo = await describeRepo({ did: did as Did }); 32 + handleMap.set(did, repo?.handle ?? did); 33 + } catch { 34 + handleMap.set(did, did); 35 + } 36 + }) 37 + ); 38 + 39 + const recentSecrets = records.map((r) => ({ 40 + did: r.did, 41 + handle: handleMap.get(r.did) ?? r.did, 42 + title: r.record.title, 43 + createdAt: r.record.createdAt, 44 + unlockAt: r.record.unlockAt 45 + })); 46 + 47 + return { recentSecrets }; 48 + } catch { 49 + return { recentSecrets: [] }; 50 + } 51 + };
+62 -134
src/routes/+page.svelte
··· 1 1 <script lang="ts"> 2 - import { getSecrets, removeSecret } from '$lib/secrets.svelte'; 3 - import { decrypt } from '$lib/timelock'; 4 - import Countdown from '$lib/components/Countdown.svelte'; 2 + import { user } from '$lib/atproto'; 3 + import { atProtoLoginModalState } from '@foxui/social'; 5 4 import { RelativeTime } from '@foxui/time'; 6 - import DecryptEffect from '$lib/components/DecryptEffect.svelte'; 7 5 8 - let now = $state(Date.now()); 6 + let { data } = $props(); 7 + </script> 9 8 10 - $effect(() => { 11 - const id = setInterval(() => { 12 - now = Date.now(); 13 - }, 1000); 14 - return () => clearInterval(id); 15 - }); 16 - 17 - let secrets = $derived( 18 - getSecrets() 19 - .slice() 20 - .sort((a, b) => new Date(a.unlockAt).getTime() - new Date(b.unlockAt).getTime()) 21 - ); 22 - 23 - let decryptedMap: Record<string, string> = $state({}); 24 - let loadingMap: Record<string, boolean> = $state({}); 25 - let errorMap: Record<string, string> = $state({}); 26 - 27 - function isUnlockable(unlockAt: string): boolean { 28 - return new Date(unlockAt).getTime() <= now; 29 - } 30 - 31 - async function handleDecrypt(id: string, ciphertext: string) { 32 - loadingMap[id] = true; 33 - errorMap[id] = ''; 34 - decryptedMap[id] = ''; 35 - 36 - try { 37 - const plaintext = await decrypt(ciphertext); 38 - decryptedMap[id] = plaintext; 39 - } catch (e) { 40 - errorMap[id] = e instanceof Error ? e.message : 'Decryption failed. You might need to wait longer.'; 41 - } finally { 42 - loadingMap[id] = false; 43 - } 44 - } 9 + <div class="min-h-screen bg-base-50 dark:bg-base-950"> 10 + <div class="flex min-h-[60vh] items-center justify-center"> 11 + <div class="mx-auto max-w-2xl px-4 text-center"> 12 + <div class="mb-6 inline-flex h-16 w-16 items-center justify-center rounded-2xl bg-accent-100 dark:bg-accent-900/30"> 13 + <svg xmlns="http://www.w3.org/2000/svg" class="h-8 w-8 text-accent-600 dark:text-accent-400" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 14 + <rect width="18" height="11" x="3" y="11" rx="2" ry="2" /> 15 + <path d="M7 11V7a5 5 0 0 1 10 0v4" /> 16 + </svg> 17 + </div> 45 18 46 - function handleRemove(id: string) { 47 - removeSecret(id); 48 - delete decryptedMap[id]; 49 - delete loadingMap[id]; 50 - delete errorMap[id]; 51 - } 52 - </script> 19 + <h1 class="mb-4 text-5xl font-bold tracking-tight text-base-900 dark:text-base-100"> 20 + Timelocked Secrets 21 + </h1> 53 22 54 - <div class="min-h-screen bg-base-50 text-base-900 dark:bg-base-950 dark:text-base-100"> 55 - <div class="mx-auto max-w-3xl px-4 py-20"> 56 - <header class="mb-8 flex items-center justify-between"> 57 - <h1 class="text-3xl font-bold tracking-tight">Timelocked Secrets</h1> 58 - <a 59 - href="/create" 60 - class="rounded-lg bg-accent-600 px-4 py-2 text-center text-sm font-medium text-white transition-colors hover:bg-accent-700 focus:outline-none focus:ring-2 focus:ring-accent-500 focus:ring-offset-2 dark:focus:ring-offset-base-950" 61 - > 62 - New Secret 63 - </a> 64 - </header> 23 + <p class="mb-8 text-lg text-base-600 dark:text-base-400"> 24 + Encrypt messages that can only be decrypted after a specific time. Powered by 25 + <a href="https://drand.love" class="text-accent-600 hover:text-accent-700 dark:text-accent-400 dark:hover:text-accent-300" target="_blank" rel="noopener noreferrer">drand</a> 26 + timelock encryption and stored on the 27 + <a href="https://atproto.com" class="text-accent-600 hover:text-accent-700 dark:text-accent-400 dark:hover:text-accent-300" target="_blank" rel="noopener noreferrer">AT Protocol</a>. 28 + </p> 65 29 66 - {#if secrets.length === 0} 67 - <div class="rounded-xl border border-base-200 bg-base-100 p-12 text-center dark:border-base-800 dark:bg-base-900"> 68 - <p class="mb-1 text-lg font-medium text-base-600 dark:text-base-400">No secrets yet</p> 69 - <p class="mb-6 text-sm text-base-500 dark:text-base-500"> 70 - Create your first timelocked secret to get started. 71 - </p> 30 + {#if user.isLoggedIn} 72 31 <a 73 - href="/create" 74 - class="inline-block rounded-lg bg-accent-600 px-5 py-2.5 text-sm font-medium text-white transition-colors hover:bg-accent-700" 32 + href="/{user.profile?.handle ?? user.did}" 33 + class="cursor-pointer inline-block rounded-xl bg-accent-600 px-8 py-3 text-lg font-semibold text-white shadow-lg transition-colors hover:bg-accent-700 focus:outline-none focus:ring-2 focus:ring-accent-500 focus:ring-offset-2 dark:focus:ring-offset-base-950" 75 34 > 76 - Create a Secret 35 + Show my secrets 77 36 </a> 78 - </div> 79 - {:else} 80 - <div class="space-y-4"> 81 - {#each secrets as secret (secret.id)} 82 - <div class="rounded-xl border border-base-200 bg-base-100 p-5 dark:border-base-800 dark:bg-base-900"> 83 - <div class="flex items-start justify-between gap-4"> 84 - <div class="min-w-0 flex-1"> 85 - <h2 class="truncate text-lg font-semibold text-base-900 dark:text-base-100"> 86 - {secret.title} 87 - </h2> 88 - <p class="mt-1 text-sm text-base-500 dark:text-base-400"> 89 - Created <RelativeTime date={new Date(secret.createdAt)} locale="en" /> ago 90 - </p> 91 - </div> 92 - <div class="flex shrink-0 items-center gap-2"> 93 - {#if isUnlockable(secret.unlockAt)} 94 - <span class="inline-flex items-center rounded-full bg-accent-100 px-2.5 py-0.5 text-xs font-medium text-accent-800 dark:bg-accent-900/30 dark:text-accent-400"> 95 - Unlockable 96 - </span> 97 - {/if} 98 - <button 99 - onclick={() => handleRemove(secret.id)} 100 - class="rounded-md p-1.5 text-base-400 transition-colors hover:bg-base-200 hover:text-base-600 dark:text-base-500 dark:hover:bg-base-800 dark:hover:text-base-300" 101 - aria-label="Delete secret" 102 - > 103 - <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 20 20" fill="currentColor"> 104 - <path fill-rule="evenodd" d="M9 2a1 1 0 00-.894.553L7.382 4H4a1 1 0 000 2v10a2 2 0 002 2h8a2 2 0 002-2V6a1 1 0 100-2h-3.382l-.724-1.447A1 1 0 0011 2H9zM7 8a1 1 0 012 0v6a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v6a1 1 0 102 0V8a1 1 0 00-1-1z" clip-rule="evenodd" /> 105 - </svg> 106 - </button> 107 - </div> 108 - </div> 37 + {:else} 38 + <button 39 + onclick={() => atProtoLoginModalState.show()} 40 + class="cursor-pointer rounded-xl bg-accent-600 px-8 py-3 text-lg font-semibold text-white shadow-lg transition-colors hover:bg-accent-700 focus:outline-none focus:ring-2 focus:ring-accent-500 focus:ring-offset-2 dark:focus:ring-offset-base-950" 41 + > 42 + Sign in with AT Protocol 43 + </button> 44 + {/if} 45 + </div> 46 + </div> 109 47 110 - <div class="relative mt-3"> 111 - {#if loadingMap[secret.id] || decryptedMap[secret.id]} 112 - <div class="h-48 overflow-y-auto rounded-lg bg-base-50 p-4 dark:bg-base-800"> 113 - <pre class="whitespace-pre-wrap wrap-break-word font-mono text-sm text-base-800 dark:text-base-200"><DecryptEffect ciphertext={secret.ciphertext} text={decryptedMap[secret.id] || ''} /></pre> 114 - </div> 115 - {:else} 116 - <div class="relative h-48 overflow-hidden rounded-lg"> 117 - <pre class="h-full overflow-hidden whitespace-pre-wrap wrap-break-word bg-base-50 p-4 font-mono text-sm text-base-800 select-none dark:bg-base-800 dark:text-base-200">{secret.ciphertext}</pre> 118 - 119 - <div class="absolute inset-0 flex items-center justify-center rounded-lg bg-base-200/90 dark:bg-base-950/85"> 120 - {#if !isUnlockable(secret.unlockAt)} 121 - <Countdown targetDate={secret.unlockAt} class="text-xl sm:text-5xl text-base-900 dark:text-white gap-2 sm:gap-8" /> 122 - {:else if errorMap[secret.id]} 123 - <div class="flex flex-col items-center gap-2"> 124 - <p class="text-sm text-red-600 dark:text-red-300">{errorMap[secret.id]}</p> 125 - <button 126 - onclick={() => handleDecrypt(secret.id, secret.ciphertext)} 127 - class="rounded-lg bg-accent-600 px-5 py-2.5 text-base font-semibold text-white transition-colors hover:bg-accent-700" 128 - > 129 - Retry 130 - </button> 131 - </div> 132 - {:else} 133 - <button 134 - onclick={() => handleDecrypt(secret.id, secret.ciphertext)} 135 - class="rounded-lg bg-accent-600 px-6 py-3 text-lg font-semibold text-white shadow-lg transition-colors hover:bg-accent-700" 136 - > 137 - Decrypt 138 - </button> 139 - {/if} 140 - </div> 141 - </div> 142 - {/if} 48 + {#if data.recentSecrets && data.recentSecrets.length > 0} 49 + <div class="mx-auto max-w-3xl px-4 pb-20"> 50 + <h2 class="mb-4 text-lg font-semibold text-base-700 dark:text-base-300"> 51 + Recently Created 52 + </h2> 53 + <div class="space-y-2"> 54 + {#each data.recentSecrets as secret} 55 + <a 56 + href="/{secret.handle}" 57 + class="group flex items-center justify-between rounded-xl border border-base-200 bg-base-100 px-5 py-4 transition-colors hover:border-accent-300 hover:bg-accent-50/50 dark:border-base-800 dark:bg-base-900 dark:hover:border-accent-700 dark:hover:bg-accent-950/30" 58 + > 59 + <div class="min-w-0 flex-1"> 60 + <p class="truncate font-medium text-base-900 dark:text-base-100"> 61 + {secret.title} 62 + </p> 63 + <p class="mt-0.5 text-sm text-base-500 dark:text-base-400"> 64 + by <span class="text-accent-600 dark:text-accent-400">{secret.handle}</span> 65 + &middot; 66 + <RelativeTime date={new Date(secret.createdAt)} locale="en" /> ago 67 + </p> 143 68 </div> 144 - </div> 69 + <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 shrink-0 text-base-400 transition-colors group-hover:text-accent-500 dark:text-base-600" viewBox="0 0 20 20" fill="currentColor"> 70 + <path fill-rule="evenodd" d="M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z" clip-rule="evenodd" /> 71 + </svg> 72 + </a> 145 73 {/each} 146 74 </div> 147 - {/if} 148 - </div> 75 + </div> 76 + {/if} 149 77 </div>
+31
src/routes/[actor]/+page.server.ts
··· 1 + import type { PageServerLoad } from './$types'; 2 + import { listRecords, actorToDid, getClient, describeRepo } from '$lib/atproto/methods'; 3 + 4 + const COLLECTION = 'dev.flo-bit.test.timelock'; 5 + 6 + export const load: PageServerLoad = async ({ params }) => { 7 + try { 8 + const did = await actorToDid(params.actor); 9 + const client = await getClient({ did }); 10 + 11 + const [records, repo] = await Promise.all([ 12 + listRecords({ did, collection: COLLECTION, client }), 13 + describeRepo({ did, client }) 14 + ]); 15 + 16 + const handle = repo?.handle ?? params.actor; 17 + 18 + const secrets = records.map((r) => ({ 19 + uri: r.uri, 20 + rkey: r.uri.split('/').pop()!, 21 + title: (r.value as Record<string, unknown>).title as string, 22 + ciphertext: (r.value as Record<string, unknown>).ciphertext as string, 23 + createdAt: (r.value as Record<string, unknown>).createdAt as string, 24 + unlockAt: (r.value as Record<string, unknown>).unlockAt as string 25 + })); 26 + 27 + return { secrets, actorDid: did, handle, actor: params.actor }; 28 + } catch { 29 + return { secrets: [], actorDid: null, handle: null, actor: params.actor }; 30 + } 31 + };
+179
src/routes/[actor]/+page.svelte
··· 1 + <script lang="ts"> 2 + import { decrypt } from '$lib/timelock'; 3 + import { deleteRecord, user } from '$lib/atproto'; 4 + import Countdown from '$lib/components/Countdown.svelte'; 5 + import { RelativeTime } from '@foxui/time'; 6 + import DecryptEffect from '$lib/components/DecryptEffect.svelte'; 7 + import { invalidateAll } from '$app/navigation'; 8 + 9 + let { data } = $props(); 10 + 11 + let now = $state(Date.now()); 12 + 13 + $effect(() => { 14 + const id = setInterval(() => { 15 + now = Date.now(); 16 + }, 1000); 17 + return () => clearInterval(id); 18 + }); 19 + 20 + let secrets = $derived( 21 + data.secrets 22 + .slice() 23 + .sort((a, b) => new Date(a.unlockAt).getTime() - new Date(b.unlockAt).getTime()) 24 + ); 25 + 26 + let isOwner = $derived(user.isLoggedIn && user.did === data.actorDid); 27 + 28 + let decryptedMap: Record<string, string> = $state({}); 29 + let loadingMap: Record<string, boolean> = $state({}); 30 + let errorMap: Record<string, string> = $state({}); 31 + 32 + function isUnlockable(unlockAt: string): boolean { 33 + return new Date(unlockAt).getTime() <= now; 34 + } 35 + 36 + async function handleDecrypt(rkey: string, ciphertext: string) { 37 + loadingMap[rkey] = true; 38 + errorMap[rkey] = ''; 39 + decryptedMap[rkey] = ''; 40 + 41 + try { 42 + const plaintext = await decrypt(ciphertext); 43 + decryptedMap[rkey] = plaintext; 44 + } catch (e) { 45 + errorMap[rkey] = e instanceof Error ? e.message : 'Decryption failed. You might need to wait longer.'; 46 + } finally { 47 + loadingMap[rkey] = false; 48 + } 49 + } 50 + 51 + async function handleRemove(rkey: string) { 52 + try { 53 + await deleteRecord({ collection: 'dev.flo-bit.test.timelock', rkey }); 54 + delete decryptedMap[rkey]; 55 + delete loadingMap[rkey]; 56 + delete errorMap[rkey]; 57 + await invalidateAll(); 58 + } catch (e) { 59 + console.error('Failed to delete record:', e); 60 + } 61 + } 62 + </script> 63 + 64 + <div class="min-h-screen bg-base-50 text-base-900 dark:bg-base-950 dark:text-base-100"> 65 + <div class="mx-auto max-w-3xl px-4 py-20"> 66 + <header class="mb-8 flex items-center justify-between"> 67 + <h1 class="text-3xl font-bold tracking-tight"> 68 + {#if data.actorDid} 69 + {data.handle} 70 + {:else} 71 + User not found 72 + {/if} 73 + </h1> 74 + {#if isOwner} 75 + <a 76 + href="/{data.actor}/create" 77 + class="rounded-lg bg-accent-600 px-4 py-2 text-center text-sm font-medium text-white transition-colors hover:bg-accent-700 focus:outline-none focus:ring-2 focus:ring-accent-500 focus:ring-offset-2 dark:focus:ring-offset-base-950" 78 + > 79 + New Secret 80 + </a> 81 + {/if} 82 + </header> 83 + 84 + {#if !data.actorDid} 85 + <div class="rounded-xl border border-base-200 bg-base-100 p-12 text-center dark:border-base-800 dark:bg-base-900"> 86 + <p class="text-lg font-medium text-base-600 dark:text-base-400">Could not find this user.</p> 87 + </div> 88 + {:else if secrets.length === 0} 89 + <div class="rounded-xl border border-base-200 bg-base-100 p-12 text-center dark:border-base-800 dark:bg-base-900"> 90 + <p class="mb-1 text-lg font-medium text-base-600 dark:text-base-400">No secrets yet</p> 91 + <p class="text-sm text-base-500 dark:text-base-500"> 92 + {#if isOwner} 93 + Create your first timelocked secret to get started. 94 + {:else} 95 + This user hasn't created any timelocked secrets. 96 + {/if} 97 + </p> 98 + {#if isOwner} 99 + <a 100 + href="/{data.actor}/create" 101 + class="mt-6 inline-block rounded-lg bg-accent-600 px-5 py-2.5 text-sm font-medium text-white transition-colors hover:bg-accent-700" 102 + > 103 + Create a Secret 104 + </a> 105 + {/if} 106 + </div> 107 + {:else} 108 + <div class="space-y-4"> 109 + {#each secrets as secret (secret.rkey)} 110 + <div class="rounded-xl border border-base-200 bg-base-100 p-5 dark:border-base-800 dark:bg-base-900"> 111 + <div class="flex items-start justify-between gap-4"> 112 + <div class="min-w-0 flex-1"> 113 + <h2 class="truncate text-lg font-semibold text-base-900 dark:text-base-100"> 114 + {secret.title} 115 + </h2> 116 + <p class="mt-1 text-sm text-base-500 dark:text-base-400"> 117 + Created <RelativeTime date={new Date(secret.createdAt)} locale="en" /> ago 118 + </p> 119 + </div> 120 + <div class="flex shrink-0 items-center gap-2"> 121 + {#if isUnlockable(secret.unlockAt)} 122 + <span class="inline-flex items-center rounded-full bg-accent-100 px-2.5 py-0.5 text-xs font-medium text-accent-800 dark:bg-accent-900/30 dark:text-accent-400"> 123 + Unlockable 124 + </span> 125 + {/if} 126 + {#if isOwner} 127 + <button 128 + onclick={() => handleRemove(secret.rkey)} 129 + class="cursor-pointer rounded-md p-1.5 text-base-400 transition-colors hover:bg-base-200 hover:text-base-600 dark:text-base-500 dark:hover:bg-base-800 dark:hover:text-base-300" 130 + aria-label="Delete secret" 131 + > 132 + <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 20 20" fill="currentColor"> 133 + <path fill-rule="evenodd" d="M9 2a1 1 0 00-.894.553L7.382 4H4a1 1 0 000 2v10a2 2 0 002 2h8a2 2 0 002-2V6a1 1 0 100-2h-3.382l-.724-1.447A1 1 0 0011 2H9zM7 8a1 1 0 012 0v6a1 1 0 11-2 0V8zm5-1a1 1 0 00-1 1v6a1 1 0 102 0V8a1 1 0 00-1-1z" clip-rule="evenodd" /> 134 + </svg> 135 + </button> 136 + {/if} 137 + </div> 138 + </div> 139 + 140 + <div class="relative mt-3"> 141 + {#if loadingMap[secret.rkey] || decryptedMap[secret.rkey]} 142 + <div class="h-48 overflow-y-auto rounded-lg bg-base-50 p-4 dark:bg-base-800"> 143 + <pre class="whitespace-pre-wrap wrap-break-word font-mono text-sm text-base-800 dark:text-base-200"><DecryptEffect ciphertext={secret.ciphertext} text={decryptedMap[secret.rkey] || ''} /></pre> 144 + </div> 145 + {:else} 146 + <div class="relative h-48 overflow-hidden rounded-lg"> 147 + <pre class="h-full overflow-hidden whitespace-pre-wrap wrap-break-word bg-base-50 p-4 font-mono text-sm text-base-800 select-none dark:bg-base-800 dark:text-base-200">{secret.ciphertext}</pre> 148 + 149 + <div class="absolute inset-0 flex items-center justify-center rounded-lg bg-base-200/90 dark:bg-base-950/85"> 150 + {#if !isUnlockable(secret.unlockAt)} 151 + <Countdown targetDate={secret.unlockAt} class="text-xl sm:text-5xl text-base-900 dark:text-white gap-2 sm:gap-8" /> 152 + {:else if errorMap[secret.rkey]} 153 + <div class="flex flex-col items-center gap-2"> 154 + <p class="text-sm text-red-600 dark:text-red-300">{errorMap[secret.rkey]}</p> 155 + <button 156 + onclick={() => handleDecrypt(secret.rkey, secret.ciphertext)} 157 + class="cursor-pointer rounded-lg bg-accent-600 px-5 py-2.5 text-base font-semibold text-white transition-colors hover:bg-accent-700" 158 + > 159 + Retry 160 + </button> 161 + </div> 162 + {:else} 163 + <button 164 + onclick={() => handleDecrypt(secret.rkey, secret.ciphertext)} 165 + class="cursor-pointer rounded-lg bg-accent-600 px-6 py-3 text-lg font-semibold text-white shadow-lg transition-colors hover:bg-accent-700" 166 + > 167 + Decrypt 168 + </button> 169 + {/if} 170 + </div> 171 + </div> 172 + {/if} 173 + </div> 174 + </div> 175 + {/each} 176 + </div> 177 + {/if} 178 + </div> 179 + </div>
+21 -15
src/routes/create/+page.svelte src/routes/[actor]/create/+page.svelte
··· 1 1 <script lang="ts"> 2 2 import { goto } from '$app/navigation'; 3 + import { page } from '$app/state'; 3 4 import DateTimePicker from '$lib/components/DateTimePicker/DateTimePicker.svelte'; 4 5 import { encrypt } from '$lib/timelock'; 5 - import { addSecret } from '$lib/secrets.svelte'; 6 + import { putRecord, createTID, user } from '$lib/atproto'; 7 + 8 + // Redirect if not logged in or not the owner 9 + $effect(() => { 10 + if (!user.isLoggedIn) { 11 + goto('/'); 12 + } 13 + }); 6 14 7 15 function formatDateTimeLocal(ms: number): string { 8 16 const d = new Date(ms); ··· 28 36 { label: '10 years', offsetMs: 10 * 365 * 24 * 60 * 60 * 1000 } 29 37 ]; 30 38 31 - // Track the active preset offset (null = manual mode) 32 39 let activePresetMs: number | null = $state(presets[0].offsetMs); 33 40 34 - // When a preset is active, keep unlockAt = now + offset (updates every second) 35 41 let now = $state(Date.now()); 36 42 $effect(() => { 37 43 const id = setInterval(() => { ··· 42 48 43 49 let unlockAt = $state(formatDateTimeLocal(Date.now() + presets[0].offsetMs)); 44 50 45 - // When a preset is active, continuously update unlockAt from now + offset 46 51 $effect(() => { 47 52 if (activePresetMs !== null) { 48 53 unlockAt = formatDateTimeLocal(now + activePresetMs); ··· 56 61 } 57 62 58 63 function onManualDateChange() { 59 - // User interacted with the picker directly — deselect preset 60 64 activePresetMs = null; 61 65 } 62 66 ··· 66 70 encrypting = true; 67 71 68 72 try { 69 - // Use exact millisecond timestamp for preset, parsed string for manual 70 73 const unlockAtMs = 71 74 activePresetMs !== null ? Date.now() + activePresetMs : new Date(unlockAt).getTime(); 72 75 const unlockAtDate = new Date(unlockAtMs); 73 76 const ciphertext = await encrypt(content, unlockAtMs); 74 77 75 - addSecret({ 76 - id: crypto.randomUUID(), 77 - title, 78 - ciphertext, 79 - createdAt: new Date().toISOString(), 80 - unlockAt: unlockAtDate.toISOString() 78 + await putRecord({ 79 + collection: 'dev.flo-bit.test.timelock', 80 + rkey: createTID(), 81 + record: { 82 + title, 83 + ciphertext, 84 + createdAt: new Date().toISOString(), 85 + unlockAt: unlockAtDate.toISOString() 86 + } 81 87 }); 82 88 83 - await goto('/'); 89 + await goto(`/${page.params.actor}`); 84 90 } catch (err) { 85 91 error = err instanceof Error ? err.message : 'Encryption failed. Please try again.'; 86 92 } finally { ··· 92 98 <div class="min-h-screen bg-base-50 px-4 py-20 dark:bg-base-950"> 93 99 <div class="mx-auto max-w-xl"> 94 100 <a 95 - href="/" 101 + href="/{page.params.actor}" 96 102 class="mb-6 inline-flex items-center gap-1.5 text-sm font-medium text-base-500 transition-colors hover:text-base-700 dark:text-base-400 dark:hover:text-base-200" 97 103 > 98 104 <svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" viewBox="0 0 20 20" fill="currentColor"> ··· 172 178 <button 173 179 type="submit" 174 180 disabled={encrypting} 175 - class="w-full rounded-lg bg-accent-600 px-4 py-2.5 text-sm font-semibold text-white shadow-sm transition-colors hover:bg-accent-700 disabled:cursor-not-allowed disabled:bg-accent-600/50" 181 + class="cursor-pointer w-full rounded-lg bg-accent-600 px-4 py-2.5 text-sm font-semibold text-white shadow-sm transition-colors hover:bg-accent-700 disabled:cursor-not-allowed disabled:bg-accent-600/50" 176 182 > 177 183 {#if encrypting} 178 184 <span class="inline-flex items-center gap-2">
+5 -5
svelte.config.js
··· 1 - import adapter from '@sveltejs/adapter-auto'; 1 + import adapter from '@sveltejs/adapter-cloudflare'; 2 2 3 3 /** @type {import('@sveltejs/kit').Config} */ 4 4 const config = { 5 5 kit: { 6 - // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. 7 - // If your environment is not supported, or you settled on a specific environment, switch out the adapter. 8 - // See https://svelte.dev/docs/kit/adapters for more information about adapters. 9 - adapter: adapter() 6 + adapter: adapter(), 7 + experimental: { 8 + remoteFunctions: true 9 + } 10 10 } 11 11 }; 12 12
+2 -1
tsconfig.json
··· 10 10 "skipLibCheck": true, 11 11 "sourceMap": true, 12 12 "strict": true, 13 - "moduleResolution": "bundler" 13 + "moduleResolution": "bundler", 14 + "types": ["@cloudflare/workers-types"] 14 15 } 15 16 // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias 16 17 // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
+7 -1
vite.config.ts
··· 2 2 import { sveltekit } from '@sveltejs/kit/vite'; 3 3 import { defineConfig } from 'vite'; 4 4 5 - export default defineConfig({ plugins: [tailwindcss(), sveltekit()] }); 5 + export default defineConfig({ 6 + plugins: [tailwindcss(), sveltekit()], 7 + server: { 8 + host: '127.0.0.1', 9 + port: 5183 10 + } 11 + });
+9
wrangler.jsonc
··· 1 + { 2 + "name": "atproto-timelocked-secrets", 3 + "compatibility_date": "2025-01-01", 4 + "compatibility_flags": ["nodejs_compat_v2"], 5 + "kv_namespaces": [ 6 + { "binding": "OAUTH_SESSIONS", "id": "TODO" }, 7 + { "binding": "OAUTH_STATES", "id": "TODO" } 8 + ] 9 + }