this repo has no description
0
fork

Configure Feed

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

Commit.

lukeacl 1328b693

+2935
+24
.gitignore
··· 1 + # Logs 2 + logs 3 + *.log 4 + npm-debug.log* 5 + yarn-debug.log* 6 + yarn-error.log* 7 + pnpm-debug.log* 8 + lerna-debug.log* 9 + 10 + node_modules 11 + dist 12 + dist-ssr 13 + *.local 14 + 15 + # Editor directories and files 16 + .vscode/* 17 + !.vscode/extensions.json 18 + .idea 19 + .DS_Store 20 + *.suo 21 + *.ntvs* 22 + *.njsproj 23 + *.sln 24 + *.sw?
+1
README.md
··· 1 + # atproto-did-web
+24
index.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <script 5 + async 6 + src="https://www.googletagmanager.com/gtag/js?id=G-9LDRND7V6M" 7 + ></script> 8 + <script> 9 + window.dataLayer = window.dataLayer || []; 10 + function gtag() { 11 + dataLayer.push(arguments); 12 + } 13 + gtag("js", new Date()); 14 + gtag("config", "G-9LDRND7V6M"); 15 + </script> 16 + <meta charset="UTF-8" /> 17 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 18 + <title>ATProto - did:web</title> 19 + </head> 20 + <body> 21 + <div id="root"></div> 22 + <script type="module" src="/src/index.tsx"></script> 23 + </body> 24 + </html>
+27
package.json
··· 1 + { 2 + "name": "atproto-did-web", 3 + "private": true, 4 + "version": "0.0.1", 5 + "type": "module", 6 + "scripts": { 7 + "dev": "vite", 8 + "build": "tsc -b && vite build", 9 + "preview": "vite preview", 10 + "preinstall": "npx only-allow pnpm" 11 + }, 12 + "dependencies": { 13 + "@atproto/api": "^0.13.18", 14 + "@atproto/crypto": "^0.4.2", 15 + "@solidjs/router": "^0.15.1", 16 + "solid-js": "^1.9.3", 17 + "uint8arrays": "^5.1.0" 18 + }, 19 + "devDependencies": { 20 + "autoprefixer": "^10.4.20", 21 + "postcss": "^8.4.49", 22 + "tailwindcss": "^3.4.16", 23 + "typescript": "~5.6.2", 24 + "vite": "^6.0.1", 25 + "vite-plugin-solid": "^2.11.0" 26 + } 27 + }
+2000
pnpm-lock.yaml
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + importers: 8 + 9 + .: 10 + dependencies: 11 + '@atproto/api': 12 + specifier: ^0.13.18 13 + version: 0.13.18 14 + '@atproto/crypto': 15 + specifier: ^0.4.2 16 + version: 0.4.2 17 + '@solidjs/router': 18 + specifier: ^0.15.1 19 + version: 0.15.1(solid-js@1.9.3) 20 + solid-js: 21 + specifier: ^1.9.3 22 + version: 1.9.3 23 + uint8arrays: 24 + specifier: ^5.1.0 25 + version: 5.1.0 26 + devDependencies: 27 + autoprefixer: 28 + specifier: ^10.4.20 29 + version: 10.4.20(postcss@8.4.49) 30 + postcss: 31 + specifier: ^8.4.49 32 + version: 8.4.49 33 + tailwindcss: 34 + specifier: ^3.4.16 35 + version: 3.4.16 36 + typescript: 37 + specifier: ~5.6.2 38 + version: 5.6.3 39 + vite: 40 + specifier: ^6.0.1 41 + version: 6.0.2(jiti@1.21.6)(yaml@2.6.1) 42 + vite-plugin-solid: 43 + specifier: ^2.11.0 44 + version: 2.11.0(solid-js@1.9.3)(vite@6.0.2(jiti@1.21.6)(yaml@2.6.1)) 45 + 46 + packages: 47 + 48 + '@alloc/quick-lru@5.2.0': 49 + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 50 + engines: {node: '>=10'} 51 + 52 + '@ampproject/remapping@2.3.0': 53 + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 54 + engines: {node: '>=6.0.0'} 55 + 56 + '@atproto/api@0.13.18': 57 + resolution: {integrity: sha512-rrl5HhzGYWZ7fiC965TPBUOVItq9M4dxMb6qz8IvAVQliSkrJrKc7UD0QWL89QiiXaOBuX8w+4i5r4wrfBGddg==} 58 + 59 + '@atproto/common-web@0.3.1': 60 + resolution: {integrity: sha512-N7wiTnus5vAr+lT//0y8m/FaHHLJ9LpGuEwkwDAeV3LCiPif4m/FS8x/QOYrx1PdZQwKso95RAPzCGWQBH5j6Q==} 61 + 62 + '@atproto/crypto@0.4.2': 63 + resolution: {integrity: sha512-aeOfPQYCDbhn2hV06oBF2KXrWjf/BK4yL8lfANJKSmKl3tKWCkiW/moi643rUXXxSE72KtWtQeqvNFYnnFJ0ig==} 64 + 65 + '@atproto/lexicon@0.4.3': 66 + resolution: {integrity: sha512-lFVZXe1S1pJP0dcxvJuHP3r/a+EAIBwwU7jUK+r8iLhIja+ml6NmYv8KeFHmIJATh03spEQ9s02duDmFVdCoXg==} 67 + 68 + '@atproto/syntax@0.3.1': 69 + resolution: {integrity: sha512-fzW0Mg1QUOVCWUD3RgEsDt6d1OZ6DdFmbKcDdbzUfh0t4rhtRAC05KbZYmxuMPWDAiJ4BbbQ5dkAc/mNypMXkw==} 70 + 71 + '@atproto/xrpc@0.6.4': 72 + resolution: {integrity: sha512-9ZAJ8nsXTqC4XFyS0E1Wlg7bAvonhXQNQ3Ocs1L1LIwFLXvsw/4fNpIHXxvXvqTCVeyHLbImOnE9UiO1c/qIYA==} 73 + 74 + '@babel/code-frame@7.26.2': 75 + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 76 + engines: {node: '>=6.9.0'} 77 + 78 + '@babel/compat-data@7.26.2': 79 + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} 80 + engines: {node: '>=6.9.0'} 81 + 82 + '@babel/core@7.26.0': 83 + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} 84 + engines: {node: '>=6.9.0'} 85 + 86 + '@babel/generator@7.26.2': 87 + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} 88 + engines: {node: '>=6.9.0'} 89 + 90 + '@babel/helper-compilation-targets@7.25.9': 91 + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} 92 + engines: {node: '>=6.9.0'} 93 + 94 + '@babel/helper-module-imports@7.18.6': 95 + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 96 + engines: {node: '>=6.9.0'} 97 + 98 + '@babel/helper-module-imports@7.25.9': 99 + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} 100 + engines: {node: '>=6.9.0'} 101 + 102 + '@babel/helper-module-transforms@7.26.0': 103 + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} 104 + engines: {node: '>=6.9.0'} 105 + peerDependencies: 106 + '@babel/core': ^7.0.0 107 + 108 + '@babel/helper-plugin-utils@7.25.9': 109 + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} 110 + engines: {node: '>=6.9.0'} 111 + 112 + '@babel/helper-string-parser@7.25.9': 113 + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 114 + engines: {node: '>=6.9.0'} 115 + 116 + '@babel/helper-validator-identifier@7.25.9': 117 + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 118 + engines: {node: '>=6.9.0'} 119 + 120 + '@babel/helper-validator-option@7.25.9': 121 + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} 122 + engines: {node: '>=6.9.0'} 123 + 124 + '@babel/helpers@7.26.0': 125 + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} 126 + engines: {node: '>=6.9.0'} 127 + 128 + '@babel/parser@7.26.2': 129 + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} 130 + engines: {node: '>=6.0.0'} 131 + hasBin: true 132 + 133 + '@babel/plugin-syntax-jsx@7.25.9': 134 + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} 135 + engines: {node: '>=6.9.0'} 136 + peerDependencies: 137 + '@babel/core': ^7.0.0-0 138 + 139 + '@babel/template@7.25.9': 140 + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} 141 + engines: {node: '>=6.9.0'} 142 + 143 + '@babel/traverse@7.25.9': 144 + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} 145 + engines: {node: '>=6.9.0'} 146 + 147 + '@babel/types@7.26.0': 148 + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} 149 + engines: {node: '>=6.9.0'} 150 + 151 + '@esbuild/aix-ppc64@0.24.0': 152 + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} 153 + engines: {node: '>=18'} 154 + cpu: [ppc64] 155 + os: [aix] 156 + 157 + '@esbuild/android-arm64@0.24.0': 158 + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} 159 + engines: {node: '>=18'} 160 + cpu: [arm64] 161 + os: [android] 162 + 163 + '@esbuild/android-arm@0.24.0': 164 + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} 165 + engines: {node: '>=18'} 166 + cpu: [arm] 167 + os: [android] 168 + 169 + '@esbuild/android-x64@0.24.0': 170 + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} 171 + engines: {node: '>=18'} 172 + cpu: [x64] 173 + os: [android] 174 + 175 + '@esbuild/darwin-arm64@0.24.0': 176 + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} 177 + engines: {node: '>=18'} 178 + cpu: [arm64] 179 + os: [darwin] 180 + 181 + '@esbuild/darwin-x64@0.24.0': 182 + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} 183 + engines: {node: '>=18'} 184 + cpu: [x64] 185 + os: [darwin] 186 + 187 + '@esbuild/freebsd-arm64@0.24.0': 188 + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} 189 + engines: {node: '>=18'} 190 + cpu: [arm64] 191 + os: [freebsd] 192 + 193 + '@esbuild/freebsd-x64@0.24.0': 194 + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} 195 + engines: {node: '>=18'} 196 + cpu: [x64] 197 + os: [freebsd] 198 + 199 + '@esbuild/linux-arm64@0.24.0': 200 + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} 201 + engines: {node: '>=18'} 202 + cpu: [arm64] 203 + os: [linux] 204 + 205 + '@esbuild/linux-arm@0.24.0': 206 + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} 207 + engines: {node: '>=18'} 208 + cpu: [arm] 209 + os: [linux] 210 + 211 + '@esbuild/linux-ia32@0.24.0': 212 + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} 213 + engines: {node: '>=18'} 214 + cpu: [ia32] 215 + os: [linux] 216 + 217 + '@esbuild/linux-loong64@0.24.0': 218 + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} 219 + engines: {node: '>=18'} 220 + cpu: [loong64] 221 + os: [linux] 222 + 223 + '@esbuild/linux-mips64el@0.24.0': 224 + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} 225 + engines: {node: '>=18'} 226 + cpu: [mips64el] 227 + os: [linux] 228 + 229 + '@esbuild/linux-ppc64@0.24.0': 230 + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} 231 + engines: {node: '>=18'} 232 + cpu: [ppc64] 233 + os: [linux] 234 + 235 + '@esbuild/linux-riscv64@0.24.0': 236 + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} 237 + engines: {node: '>=18'} 238 + cpu: [riscv64] 239 + os: [linux] 240 + 241 + '@esbuild/linux-s390x@0.24.0': 242 + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} 243 + engines: {node: '>=18'} 244 + cpu: [s390x] 245 + os: [linux] 246 + 247 + '@esbuild/linux-x64@0.24.0': 248 + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} 249 + engines: {node: '>=18'} 250 + cpu: [x64] 251 + os: [linux] 252 + 253 + '@esbuild/netbsd-x64@0.24.0': 254 + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} 255 + engines: {node: '>=18'} 256 + cpu: [x64] 257 + os: [netbsd] 258 + 259 + '@esbuild/openbsd-arm64@0.24.0': 260 + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} 261 + engines: {node: '>=18'} 262 + cpu: [arm64] 263 + os: [openbsd] 264 + 265 + '@esbuild/openbsd-x64@0.24.0': 266 + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} 267 + engines: {node: '>=18'} 268 + cpu: [x64] 269 + os: [openbsd] 270 + 271 + '@esbuild/sunos-x64@0.24.0': 272 + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} 273 + engines: {node: '>=18'} 274 + cpu: [x64] 275 + os: [sunos] 276 + 277 + '@esbuild/win32-arm64@0.24.0': 278 + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} 279 + engines: {node: '>=18'} 280 + cpu: [arm64] 281 + os: [win32] 282 + 283 + '@esbuild/win32-ia32@0.24.0': 284 + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} 285 + engines: {node: '>=18'} 286 + cpu: [ia32] 287 + os: [win32] 288 + 289 + '@esbuild/win32-x64@0.24.0': 290 + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} 291 + engines: {node: '>=18'} 292 + cpu: [x64] 293 + os: [win32] 294 + 295 + '@isaacs/cliui@8.0.2': 296 + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 297 + engines: {node: '>=12'} 298 + 299 + '@jridgewell/gen-mapping@0.3.5': 300 + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 301 + engines: {node: '>=6.0.0'} 302 + 303 + '@jridgewell/resolve-uri@3.1.2': 304 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 305 + engines: {node: '>=6.0.0'} 306 + 307 + '@jridgewell/set-array@1.2.1': 308 + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 309 + engines: {node: '>=6.0.0'} 310 + 311 + '@jridgewell/sourcemap-codec@1.5.0': 312 + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 313 + 314 + '@jridgewell/trace-mapping@0.3.25': 315 + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 316 + 317 + '@noble/curves@1.7.0': 318 + resolution: {integrity: sha512-UTMhXK9SeDhFJVrHeUJ5uZlI6ajXg10O6Ddocf9S6GjbSBVZsJo88HzKwXznNfGpMTRDyJkqMjNDPYgf0qFWnw==} 319 + engines: {node: ^14.21.3 || >=16} 320 + 321 + '@noble/hashes@1.6.0': 322 + resolution: {integrity: sha512-YUULf0Uk4/mAA89w+k3+yUYh6NrEvxZa5T6SY3wlMvE2chHkxFUUIDI8/XW1QSC357iA5pSnqt7XEhvFOqmDyQ==} 323 + engines: {node: ^14.21.3 || >=16} 324 + 325 + '@noble/hashes@1.6.1': 326 + resolution: {integrity: sha512-pq5D8h10hHBjyqX+cfBm0i8JUXJ0UhczFc4r74zbuT9XgewFo2E3J1cOaGtdZynILNmQ685YWGzGE1Zv6io50w==} 327 + engines: {node: ^14.21.3 || >=16} 328 + 329 + '@nodelib/fs.scandir@2.1.5': 330 + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 331 + engines: {node: '>= 8'} 332 + 333 + '@nodelib/fs.stat@2.0.5': 334 + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 335 + engines: {node: '>= 8'} 336 + 337 + '@nodelib/fs.walk@1.2.8': 338 + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 339 + engines: {node: '>= 8'} 340 + 341 + '@pkgjs/parseargs@0.11.0': 342 + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 343 + engines: {node: '>=14'} 344 + 345 + '@rollup/rollup-android-arm-eabi@4.28.0': 346 + resolution: {integrity: sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==} 347 + cpu: [arm] 348 + os: [android] 349 + 350 + '@rollup/rollup-android-arm64@4.28.0': 351 + resolution: {integrity: sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==} 352 + cpu: [arm64] 353 + os: [android] 354 + 355 + '@rollup/rollup-darwin-arm64@4.28.0': 356 + resolution: {integrity: sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==} 357 + cpu: [arm64] 358 + os: [darwin] 359 + 360 + '@rollup/rollup-darwin-x64@4.28.0': 361 + resolution: {integrity: sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==} 362 + cpu: [x64] 363 + os: [darwin] 364 + 365 + '@rollup/rollup-freebsd-arm64@4.28.0': 366 + resolution: {integrity: sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==} 367 + cpu: [arm64] 368 + os: [freebsd] 369 + 370 + '@rollup/rollup-freebsd-x64@4.28.0': 371 + resolution: {integrity: sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==} 372 + cpu: [x64] 373 + os: [freebsd] 374 + 375 + '@rollup/rollup-linux-arm-gnueabihf@4.28.0': 376 + resolution: {integrity: sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==} 377 + cpu: [arm] 378 + os: [linux] 379 + 380 + '@rollup/rollup-linux-arm-musleabihf@4.28.0': 381 + resolution: {integrity: sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==} 382 + cpu: [arm] 383 + os: [linux] 384 + 385 + '@rollup/rollup-linux-arm64-gnu@4.28.0': 386 + resolution: {integrity: sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==} 387 + cpu: [arm64] 388 + os: [linux] 389 + 390 + '@rollup/rollup-linux-arm64-musl@4.28.0': 391 + resolution: {integrity: sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==} 392 + cpu: [arm64] 393 + os: [linux] 394 + 395 + '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': 396 + resolution: {integrity: sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==} 397 + cpu: [ppc64] 398 + os: [linux] 399 + 400 + '@rollup/rollup-linux-riscv64-gnu@4.28.0': 401 + resolution: {integrity: sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==} 402 + cpu: [riscv64] 403 + os: [linux] 404 + 405 + '@rollup/rollup-linux-s390x-gnu@4.28.0': 406 + resolution: {integrity: sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==} 407 + cpu: [s390x] 408 + os: [linux] 409 + 410 + '@rollup/rollup-linux-x64-gnu@4.28.0': 411 + resolution: {integrity: sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==} 412 + cpu: [x64] 413 + os: [linux] 414 + 415 + '@rollup/rollup-linux-x64-musl@4.28.0': 416 + resolution: {integrity: sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==} 417 + cpu: [x64] 418 + os: [linux] 419 + 420 + '@rollup/rollup-win32-arm64-msvc@4.28.0': 421 + resolution: {integrity: sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==} 422 + cpu: [arm64] 423 + os: [win32] 424 + 425 + '@rollup/rollup-win32-ia32-msvc@4.28.0': 426 + resolution: {integrity: sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==} 427 + cpu: [ia32] 428 + os: [win32] 429 + 430 + '@rollup/rollup-win32-x64-msvc@4.28.0': 431 + resolution: {integrity: sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==} 432 + cpu: [x64] 433 + os: [win32] 434 + 435 + '@solidjs/router@0.15.1': 436 + resolution: {integrity: sha512-lb5BRBqQqii/1dQCglx2K68xLkgu7QcrcajWKuuEx6FHTsK/hp5IgVhjy6RzPMLj+SFyrrRi/ldirCFNxtzh0Q==} 437 + peerDependencies: 438 + solid-js: ^1.8.6 439 + 440 + '@types/babel__core@7.20.5': 441 + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 442 + 443 + '@types/babel__generator@7.6.8': 444 + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 445 + 446 + '@types/babel__template@7.4.4': 447 + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 448 + 449 + '@types/babel__traverse@7.20.6': 450 + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 451 + 452 + '@types/estree@1.0.6': 453 + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 454 + 455 + ansi-regex@5.0.1: 456 + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 457 + engines: {node: '>=8'} 458 + 459 + ansi-regex@6.1.0: 460 + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 461 + engines: {node: '>=12'} 462 + 463 + ansi-styles@4.3.0: 464 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 465 + engines: {node: '>=8'} 466 + 467 + ansi-styles@6.2.1: 468 + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 469 + engines: {node: '>=12'} 470 + 471 + any-promise@1.3.0: 472 + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 473 + 474 + anymatch@3.1.3: 475 + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 476 + engines: {node: '>= 8'} 477 + 478 + arg@5.0.2: 479 + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 480 + 481 + autoprefixer@10.4.20: 482 + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} 483 + engines: {node: ^10 || ^12 || >=14} 484 + hasBin: true 485 + peerDependencies: 486 + postcss: ^8.1.0 487 + 488 + await-lock@2.2.2: 489 + resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} 490 + 491 + babel-plugin-jsx-dom-expressions@0.39.3: 492 + resolution: {integrity: sha512-6RzmSu21zYPlV2gNwzjGG9FgODtt9hIWnx7L//OIioIEuRcnpDZoY8Tr+I81Cy1SrH4qoDyKpwHHo6uAMAeyPA==} 493 + peerDependencies: 494 + '@babel/core': ^7.20.12 495 + 496 + babel-preset-solid@1.9.3: 497 + resolution: {integrity: sha512-jvlx5wDp8s+bEF9sGFw/84SInXOA51ttkUEroQziKMbxplXThVKt83qB6bDTa1HuLNatdU9FHpFOiQWs1tLQIg==} 498 + peerDependencies: 499 + '@babel/core': ^7.0.0 500 + 501 + balanced-match@1.0.2: 502 + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 503 + 504 + binary-extensions@2.3.0: 505 + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 506 + engines: {node: '>=8'} 507 + 508 + brace-expansion@2.0.1: 509 + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 510 + 511 + braces@3.0.3: 512 + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 513 + engines: {node: '>=8'} 514 + 515 + browserslist@4.24.2: 516 + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} 517 + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 518 + hasBin: true 519 + 520 + camelcase-css@2.0.1: 521 + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 522 + engines: {node: '>= 6'} 523 + 524 + caniuse-lite@1.0.30001686: 525 + resolution: {integrity: sha512-Y7deg0Aergpa24M3qLC5xjNklnKnhsmSyR/V89dLZ1n0ucJIFNs7PgR2Yfa/Zf6W79SbBicgtGxZr2juHkEUIA==} 526 + 527 + chokidar@3.6.0: 528 + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 529 + engines: {node: '>= 8.10.0'} 530 + 531 + color-convert@2.0.1: 532 + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 533 + engines: {node: '>=7.0.0'} 534 + 535 + color-name@1.1.4: 536 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 537 + 538 + commander@4.1.1: 539 + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 540 + engines: {node: '>= 6'} 541 + 542 + convert-source-map@2.0.0: 543 + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 544 + 545 + cross-spawn@7.0.6: 546 + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 547 + engines: {node: '>= 8'} 548 + 549 + cssesc@3.0.0: 550 + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 551 + engines: {node: '>=4'} 552 + hasBin: true 553 + 554 + csstype@3.1.3: 555 + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 556 + 557 + debug@4.3.7: 558 + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 559 + engines: {node: '>=6.0'} 560 + peerDependencies: 561 + supports-color: '*' 562 + peerDependenciesMeta: 563 + supports-color: 564 + optional: true 565 + 566 + didyoumean@1.2.2: 567 + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 568 + 569 + dlv@1.1.3: 570 + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 571 + 572 + eastasianwidth@0.2.0: 573 + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 574 + 575 + electron-to-chromium@1.5.68: 576 + resolution: {integrity: sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==} 577 + 578 + emoji-regex@8.0.0: 579 + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 580 + 581 + emoji-regex@9.2.2: 582 + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 583 + 584 + entities@4.5.0: 585 + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 586 + engines: {node: '>=0.12'} 587 + 588 + esbuild@0.24.0: 589 + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} 590 + engines: {node: '>=18'} 591 + hasBin: true 592 + 593 + escalade@3.2.0: 594 + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 595 + engines: {node: '>=6'} 596 + 597 + fast-glob@3.3.2: 598 + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 599 + engines: {node: '>=8.6.0'} 600 + 601 + fastq@1.17.1: 602 + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 603 + 604 + fill-range@7.1.1: 605 + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 606 + engines: {node: '>=8'} 607 + 608 + foreground-child@3.3.0: 609 + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 610 + engines: {node: '>=14'} 611 + 612 + fraction.js@4.3.7: 613 + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 614 + 615 + fsevents@2.3.3: 616 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 617 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 618 + os: [darwin] 619 + 620 + function-bind@1.1.2: 621 + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 622 + 623 + gensync@1.0.0-beta.2: 624 + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 625 + engines: {node: '>=6.9.0'} 626 + 627 + glob-parent@5.1.2: 628 + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 629 + engines: {node: '>= 6'} 630 + 631 + glob-parent@6.0.2: 632 + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 633 + engines: {node: '>=10.13.0'} 634 + 635 + glob@10.4.5: 636 + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 637 + hasBin: true 638 + 639 + globals@11.12.0: 640 + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 641 + engines: {node: '>=4'} 642 + 643 + graphemer@1.4.0: 644 + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 645 + 646 + hasown@2.0.2: 647 + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 648 + engines: {node: '>= 0.4'} 649 + 650 + html-entities@2.3.3: 651 + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} 652 + 653 + is-binary-path@2.1.0: 654 + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 655 + engines: {node: '>=8'} 656 + 657 + is-core-module@2.15.1: 658 + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} 659 + engines: {node: '>= 0.4'} 660 + 661 + is-extglob@2.1.1: 662 + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 663 + engines: {node: '>=0.10.0'} 664 + 665 + is-fullwidth-code-point@3.0.0: 666 + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 667 + engines: {node: '>=8'} 668 + 669 + is-glob@4.0.3: 670 + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 671 + engines: {node: '>=0.10.0'} 672 + 673 + is-number@7.0.0: 674 + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 675 + engines: {node: '>=0.12.0'} 676 + 677 + is-what@4.1.16: 678 + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} 679 + engines: {node: '>=12.13'} 680 + 681 + isexe@2.0.0: 682 + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 683 + 684 + iso-datestring-validator@2.2.2: 685 + resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==} 686 + 687 + jackspeak@3.4.3: 688 + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 689 + 690 + jiti@1.21.6: 691 + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} 692 + hasBin: true 693 + 694 + js-tokens@4.0.0: 695 + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 696 + 697 + jsesc@3.0.2: 698 + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} 699 + engines: {node: '>=6'} 700 + hasBin: true 701 + 702 + json5@2.2.3: 703 + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 704 + engines: {node: '>=6'} 705 + hasBin: true 706 + 707 + lilconfig@3.1.3: 708 + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 709 + engines: {node: '>=14'} 710 + 711 + lines-and-columns@1.2.4: 712 + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 713 + 714 + lru-cache@10.4.3: 715 + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 716 + 717 + lru-cache@5.1.1: 718 + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 719 + 720 + merge-anything@5.1.7: 721 + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} 722 + engines: {node: '>=12.13'} 723 + 724 + merge2@1.4.1: 725 + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 726 + engines: {node: '>= 8'} 727 + 728 + micromatch@4.0.8: 729 + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 730 + engines: {node: '>=8.6'} 731 + 732 + minimatch@9.0.5: 733 + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 734 + engines: {node: '>=16 || 14 >=14.17'} 735 + 736 + minipass@7.1.2: 737 + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 738 + engines: {node: '>=16 || 14 >=14.17'} 739 + 740 + ms@2.1.3: 741 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 742 + 743 + multiformats@13.3.1: 744 + resolution: {integrity: sha512-QxowxTNwJ3r5RMctoGA5p13w5RbRT2QDkoM+yFlqfLiioBp78nhDjnRLvmSBI9+KAqN4VdgOVWM9c0CHd86m3g==} 745 + 746 + multiformats@9.9.0: 747 + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 748 + 749 + mz@2.7.0: 750 + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 751 + 752 + nanoid@3.3.8: 753 + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 754 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 755 + hasBin: true 756 + 757 + node-releases@2.0.18: 758 + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} 759 + 760 + normalize-path@3.0.0: 761 + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 762 + engines: {node: '>=0.10.0'} 763 + 764 + normalize-range@0.1.2: 765 + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 766 + engines: {node: '>=0.10.0'} 767 + 768 + object-assign@4.1.1: 769 + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 770 + engines: {node: '>=0.10.0'} 771 + 772 + object-hash@3.0.0: 773 + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 774 + engines: {node: '>= 6'} 775 + 776 + package-json-from-dist@1.0.1: 777 + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 778 + 779 + parse5@7.2.1: 780 + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} 781 + 782 + path-key@3.1.1: 783 + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 784 + engines: {node: '>=8'} 785 + 786 + path-parse@1.0.7: 787 + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 788 + 789 + path-scurry@1.11.1: 790 + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 791 + engines: {node: '>=16 || 14 >=14.18'} 792 + 793 + picocolors@1.1.1: 794 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 795 + 796 + picomatch@2.3.1: 797 + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 798 + engines: {node: '>=8.6'} 799 + 800 + pify@2.3.0: 801 + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 802 + engines: {node: '>=0.10.0'} 803 + 804 + pirates@4.0.6: 805 + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 806 + engines: {node: '>= 6'} 807 + 808 + postcss-import@15.1.0: 809 + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 810 + engines: {node: '>=14.0.0'} 811 + peerDependencies: 812 + postcss: ^8.0.0 813 + 814 + postcss-js@4.0.1: 815 + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 816 + engines: {node: ^12 || ^14 || >= 16} 817 + peerDependencies: 818 + postcss: ^8.4.21 819 + 820 + postcss-load-config@4.0.2: 821 + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 822 + engines: {node: '>= 14'} 823 + peerDependencies: 824 + postcss: '>=8.0.9' 825 + ts-node: '>=9.0.0' 826 + peerDependenciesMeta: 827 + postcss: 828 + optional: true 829 + ts-node: 830 + optional: true 831 + 832 + postcss-nested@6.2.0: 833 + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} 834 + engines: {node: '>=12.0'} 835 + peerDependencies: 836 + postcss: ^8.2.14 837 + 838 + postcss-selector-parser@6.1.2: 839 + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} 840 + engines: {node: '>=4'} 841 + 842 + postcss-value-parser@4.2.0: 843 + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 844 + 845 + postcss@8.4.49: 846 + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 847 + engines: {node: ^10 || ^12 || >=14} 848 + 849 + queue-microtask@1.2.3: 850 + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 851 + 852 + read-cache@1.0.0: 853 + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 854 + 855 + readdirp@3.6.0: 856 + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 857 + engines: {node: '>=8.10.0'} 858 + 859 + resolve@1.22.8: 860 + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 861 + hasBin: true 862 + 863 + reusify@1.0.4: 864 + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 865 + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 866 + 867 + rollup@4.28.0: 868 + resolution: {integrity: sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==} 869 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 870 + hasBin: true 871 + 872 + run-parallel@1.2.0: 873 + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 874 + 875 + semver@6.3.1: 876 + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 877 + hasBin: true 878 + 879 + seroval-plugins@1.1.1: 880 + resolution: {integrity: sha512-qNSy1+nUj7hsCOon7AO4wdAIo9P0jrzAMp18XhiOzA6/uO5TKtP7ScozVJ8T293oRIvi5wyCHSM4TrJo/c/GJA==} 881 + engines: {node: '>=10'} 882 + peerDependencies: 883 + seroval: ^1.0 884 + 885 + seroval@1.1.1: 886 + resolution: {integrity: sha512-rqEO6FZk8mv7Hyv4UCj3FD3b6Waqft605TLfsCe/BiaylRpyyMC0b+uA5TJKawX3KzMrdi3wsLbCaLplrQmBvQ==} 887 + engines: {node: '>=10'} 888 + 889 + shebang-command@2.0.0: 890 + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 891 + engines: {node: '>=8'} 892 + 893 + shebang-regex@3.0.0: 894 + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 895 + engines: {node: '>=8'} 896 + 897 + signal-exit@4.1.0: 898 + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 899 + engines: {node: '>=14'} 900 + 901 + solid-js@1.9.3: 902 + resolution: {integrity: sha512-5ba3taPoZGt9GY3YlsCB24kCg0Lv/rie/HTD4kG6h4daZZz7+yK02xn8Vx8dLYBc9i6Ps5JwAbEiqjmKaLB3Ag==} 903 + 904 + solid-refresh@0.6.3: 905 + resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} 906 + peerDependencies: 907 + solid-js: ^1.3 908 + 909 + source-map-js@1.2.1: 910 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 911 + engines: {node: '>=0.10.0'} 912 + 913 + string-width@4.2.3: 914 + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 915 + engines: {node: '>=8'} 916 + 917 + string-width@5.1.2: 918 + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 919 + engines: {node: '>=12'} 920 + 921 + strip-ansi@6.0.1: 922 + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 923 + engines: {node: '>=8'} 924 + 925 + strip-ansi@7.1.0: 926 + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 927 + engines: {node: '>=12'} 928 + 929 + sucrase@3.35.0: 930 + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 931 + engines: {node: '>=16 || 14 >=14.17'} 932 + hasBin: true 933 + 934 + supports-preserve-symlinks-flag@1.0.0: 935 + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 936 + engines: {node: '>= 0.4'} 937 + 938 + tailwindcss@3.4.16: 939 + resolution: {integrity: sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==} 940 + engines: {node: '>=14.0.0'} 941 + hasBin: true 942 + 943 + thenify-all@1.6.0: 944 + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 945 + engines: {node: '>=0.8'} 946 + 947 + thenify@3.3.1: 948 + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 949 + 950 + tlds@1.255.0: 951 + resolution: {integrity: sha512-tcwMRIioTcF/FcxLev8MJWxCp+GUALRhFEqbDoZrnowmKSGqPrl5pqS+Sut2m8BgJ6S4FExCSSpGffZ0Tks6Aw==} 952 + hasBin: true 953 + 954 + to-regex-range@5.0.1: 955 + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 956 + engines: {node: '>=8.0'} 957 + 958 + ts-interface-checker@0.1.13: 959 + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 960 + 961 + typescript@5.6.3: 962 + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} 963 + engines: {node: '>=14.17'} 964 + hasBin: true 965 + 966 + uint8arrays@3.0.0: 967 + resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} 968 + 969 + uint8arrays@5.1.0: 970 + resolution: {integrity: sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==} 971 + 972 + update-browserslist-db@1.1.1: 973 + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} 974 + hasBin: true 975 + peerDependencies: 976 + browserslist: '>= 4.21.0' 977 + 978 + util-deprecate@1.0.2: 979 + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 980 + 981 + validate-html-nesting@1.2.2: 982 + resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} 983 + 984 + vite-plugin-solid@2.11.0: 985 + resolution: {integrity: sha512-G+NiwDj4EAeUE0wt3Ur9f+Lt9oMUuLd0FIxYuqwJSqRacKQRteCwUFzNy8zMEt88xWokngQhiFjfJMhjc1fDXw==} 986 + peerDependencies: 987 + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* 988 + solid-js: ^1.7.2 989 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 990 + peerDependenciesMeta: 991 + '@testing-library/jest-dom': 992 + optional: true 993 + 994 + vite@6.0.2: 995 + resolution: {integrity: sha512-XdQ+VsY2tJpBsKGs0wf3U/+azx8BBpYRHFAyKm5VeEZNOJZRB63q7Sc8Iup3k0TrN3KO6QgyzFf+opSbfY1y0g==} 996 + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 997 + hasBin: true 998 + peerDependencies: 999 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1000 + jiti: '>=1.21.0' 1001 + less: '*' 1002 + lightningcss: ^1.21.0 1003 + sass: '*' 1004 + sass-embedded: '*' 1005 + stylus: '*' 1006 + sugarss: '*' 1007 + terser: ^5.16.0 1008 + tsx: ^4.8.1 1009 + yaml: ^2.4.2 1010 + peerDependenciesMeta: 1011 + '@types/node': 1012 + optional: true 1013 + jiti: 1014 + optional: true 1015 + less: 1016 + optional: true 1017 + lightningcss: 1018 + optional: true 1019 + sass: 1020 + optional: true 1021 + sass-embedded: 1022 + optional: true 1023 + stylus: 1024 + optional: true 1025 + sugarss: 1026 + optional: true 1027 + terser: 1028 + optional: true 1029 + tsx: 1030 + optional: true 1031 + yaml: 1032 + optional: true 1033 + 1034 + vitefu@1.0.4: 1035 + resolution: {integrity: sha512-y6zEE3PQf6uu/Mt6DTJ9ih+kyJLr4XcSgHR2zUkM8SWDhuixEJxfJ6CZGMHh1Ec3vPLoEA0IHU5oWzVqw8ulow==} 1036 + peerDependencies: 1037 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 1038 + peerDependenciesMeta: 1039 + vite: 1040 + optional: true 1041 + 1042 + which@2.0.2: 1043 + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1044 + engines: {node: '>= 8'} 1045 + hasBin: true 1046 + 1047 + wrap-ansi@7.0.0: 1048 + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1049 + engines: {node: '>=10'} 1050 + 1051 + wrap-ansi@8.1.0: 1052 + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1053 + engines: {node: '>=12'} 1054 + 1055 + yallist@3.1.1: 1056 + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1057 + 1058 + yaml@2.6.1: 1059 + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} 1060 + engines: {node: '>= 14'} 1061 + hasBin: true 1062 + 1063 + zod@3.23.8: 1064 + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} 1065 + 1066 + snapshots: 1067 + 1068 + '@alloc/quick-lru@5.2.0': {} 1069 + 1070 + '@ampproject/remapping@2.3.0': 1071 + dependencies: 1072 + '@jridgewell/gen-mapping': 0.3.5 1073 + '@jridgewell/trace-mapping': 0.3.25 1074 + 1075 + '@atproto/api@0.13.18': 1076 + dependencies: 1077 + '@atproto/common-web': 0.3.1 1078 + '@atproto/lexicon': 0.4.3 1079 + '@atproto/syntax': 0.3.1 1080 + '@atproto/xrpc': 0.6.4 1081 + await-lock: 2.2.2 1082 + multiformats: 9.9.0 1083 + tlds: 1.255.0 1084 + zod: 3.23.8 1085 + 1086 + '@atproto/common-web@0.3.1': 1087 + dependencies: 1088 + graphemer: 1.4.0 1089 + multiformats: 9.9.0 1090 + uint8arrays: 3.0.0 1091 + zod: 3.23.8 1092 + 1093 + '@atproto/crypto@0.4.2': 1094 + dependencies: 1095 + '@noble/curves': 1.7.0 1096 + '@noble/hashes': 1.6.1 1097 + uint8arrays: 3.0.0 1098 + 1099 + '@atproto/lexicon@0.4.3': 1100 + dependencies: 1101 + '@atproto/common-web': 0.3.1 1102 + '@atproto/syntax': 0.3.1 1103 + iso-datestring-validator: 2.2.2 1104 + multiformats: 9.9.0 1105 + zod: 3.23.8 1106 + 1107 + '@atproto/syntax@0.3.1': {} 1108 + 1109 + '@atproto/xrpc@0.6.4': 1110 + dependencies: 1111 + '@atproto/lexicon': 0.4.3 1112 + zod: 3.23.8 1113 + 1114 + '@babel/code-frame@7.26.2': 1115 + dependencies: 1116 + '@babel/helper-validator-identifier': 7.25.9 1117 + js-tokens: 4.0.0 1118 + picocolors: 1.1.1 1119 + 1120 + '@babel/compat-data@7.26.2': {} 1121 + 1122 + '@babel/core@7.26.0': 1123 + dependencies: 1124 + '@ampproject/remapping': 2.3.0 1125 + '@babel/code-frame': 7.26.2 1126 + '@babel/generator': 7.26.2 1127 + '@babel/helper-compilation-targets': 7.25.9 1128 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) 1129 + '@babel/helpers': 7.26.0 1130 + '@babel/parser': 7.26.2 1131 + '@babel/template': 7.25.9 1132 + '@babel/traverse': 7.25.9 1133 + '@babel/types': 7.26.0 1134 + convert-source-map: 2.0.0 1135 + debug: 4.3.7 1136 + gensync: 1.0.0-beta.2 1137 + json5: 2.2.3 1138 + semver: 6.3.1 1139 + transitivePeerDependencies: 1140 + - supports-color 1141 + 1142 + '@babel/generator@7.26.2': 1143 + dependencies: 1144 + '@babel/parser': 7.26.2 1145 + '@babel/types': 7.26.0 1146 + '@jridgewell/gen-mapping': 0.3.5 1147 + '@jridgewell/trace-mapping': 0.3.25 1148 + jsesc: 3.0.2 1149 + 1150 + '@babel/helper-compilation-targets@7.25.9': 1151 + dependencies: 1152 + '@babel/compat-data': 7.26.2 1153 + '@babel/helper-validator-option': 7.25.9 1154 + browserslist: 4.24.2 1155 + lru-cache: 5.1.1 1156 + semver: 6.3.1 1157 + 1158 + '@babel/helper-module-imports@7.18.6': 1159 + dependencies: 1160 + '@babel/types': 7.26.0 1161 + 1162 + '@babel/helper-module-imports@7.25.9': 1163 + dependencies: 1164 + '@babel/traverse': 7.25.9 1165 + '@babel/types': 7.26.0 1166 + transitivePeerDependencies: 1167 + - supports-color 1168 + 1169 + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': 1170 + dependencies: 1171 + '@babel/core': 7.26.0 1172 + '@babel/helper-module-imports': 7.25.9 1173 + '@babel/helper-validator-identifier': 7.25.9 1174 + '@babel/traverse': 7.25.9 1175 + transitivePeerDependencies: 1176 + - supports-color 1177 + 1178 + '@babel/helper-plugin-utils@7.25.9': {} 1179 + 1180 + '@babel/helper-string-parser@7.25.9': {} 1181 + 1182 + '@babel/helper-validator-identifier@7.25.9': {} 1183 + 1184 + '@babel/helper-validator-option@7.25.9': {} 1185 + 1186 + '@babel/helpers@7.26.0': 1187 + dependencies: 1188 + '@babel/template': 7.25.9 1189 + '@babel/types': 7.26.0 1190 + 1191 + '@babel/parser@7.26.2': 1192 + dependencies: 1193 + '@babel/types': 7.26.0 1194 + 1195 + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': 1196 + dependencies: 1197 + '@babel/core': 7.26.0 1198 + '@babel/helper-plugin-utils': 7.25.9 1199 + 1200 + '@babel/template@7.25.9': 1201 + dependencies: 1202 + '@babel/code-frame': 7.26.2 1203 + '@babel/parser': 7.26.2 1204 + '@babel/types': 7.26.0 1205 + 1206 + '@babel/traverse@7.25.9': 1207 + dependencies: 1208 + '@babel/code-frame': 7.26.2 1209 + '@babel/generator': 7.26.2 1210 + '@babel/parser': 7.26.2 1211 + '@babel/template': 7.25.9 1212 + '@babel/types': 7.26.0 1213 + debug: 4.3.7 1214 + globals: 11.12.0 1215 + transitivePeerDependencies: 1216 + - supports-color 1217 + 1218 + '@babel/types@7.26.0': 1219 + dependencies: 1220 + '@babel/helper-string-parser': 7.25.9 1221 + '@babel/helper-validator-identifier': 7.25.9 1222 + 1223 + '@esbuild/aix-ppc64@0.24.0': 1224 + optional: true 1225 + 1226 + '@esbuild/android-arm64@0.24.0': 1227 + optional: true 1228 + 1229 + '@esbuild/android-arm@0.24.0': 1230 + optional: true 1231 + 1232 + '@esbuild/android-x64@0.24.0': 1233 + optional: true 1234 + 1235 + '@esbuild/darwin-arm64@0.24.0': 1236 + optional: true 1237 + 1238 + '@esbuild/darwin-x64@0.24.0': 1239 + optional: true 1240 + 1241 + '@esbuild/freebsd-arm64@0.24.0': 1242 + optional: true 1243 + 1244 + '@esbuild/freebsd-x64@0.24.0': 1245 + optional: true 1246 + 1247 + '@esbuild/linux-arm64@0.24.0': 1248 + optional: true 1249 + 1250 + '@esbuild/linux-arm@0.24.0': 1251 + optional: true 1252 + 1253 + '@esbuild/linux-ia32@0.24.0': 1254 + optional: true 1255 + 1256 + '@esbuild/linux-loong64@0.24.0': 1257 + optional: true 1258 + 1259 + '@esbuild/linux-mips64el@0.24.0': 1260 + optional: true 1261 + 1262 + '@esbuild/linux-ppc64@0.24.0': 1263 + optional: true 1264 + 1265 + '@esbuild/linux-riscv64@0.24.0': 1266 + optional: true 1267 + 1268 + '@esbuild/linux-s390x@0.24.0': 1269 + optional: true 1270 + 1271 + '@esbuild/linux-x64@0.24.0': 1272 + optional: true 1273 + 1274 + '@esbuild/netbsd-x64@0.24.0': 1275 + optional: true 1276 + 1277 + '@esbuild/openbsd-arm64@0.24.0': 1278 + optional: true 1279 + 1280 + '@esbuild/openbsd-x64@0.24.0': 1281 + optional: true 1282 + 1283 + '@esbuild/sunos-x64@0.24.0': 1284 + optional: true 1285 + 1286 + '@esbuild/win32-arm64@0.24.0': 1287 + optional: true 1288 + 1289 + '@esbuild/win32-ia32@0.24.0': 1290 + optional: true 1291 + 1292 + '@esbuild/win32-x64@0.24.0': 1293 + optional: true 1294 + 1295 + '@isaacs/cliui@8.0.2': 1296 + dependencies: 1297 + string-width: 5.1.2 1298 + string-width-cjs: string-width@4.2.3 1299 + strip-ansi: 7.1.0 1300 + strip-ansi-cjs: strip-ansi@6.0.1 1301 + wrap-ansi: 8.1.0 1302 + wrap-ansi-cjs: wrap-ansi@7.0.0 1303 + 1304 + '@jridgewell/gen-mapping@0.3.5': 1305 + dependencies: 1306 + '@jridgewell/set-array': 1.2.1 1307 + '@jridgewell/sourcemap-codec': 1.5.0 1308 + '@jridgewell/trace-mapping': 0.3.25 1309 + 1310 + '@jridgewell/resolve-uri@3.1.2': {} 1311 + 1312 + '@jridgewell/set-array@1.2.1': {} 1313 + 1314 + '@jridgewell/sourcemap-codec@1.5.0': {} 1315 + 1316 + '@jridgewell/trace-mapping@0.3.25': 1317 + dependencies: 1318 + '@jridgewell/resolve-uri': 3.1.2 1319 + '@jridgewell/sourcemap-codec': 1.5.0 1320 + 1321 + '@noble/curves@1.7.0': 1322 + dependencies: 1323 + '@noble/hashes': 1.6.0 1324 + 1325 + '@noble/hashes@1.6.0': {} 1326 + 1327 + '@noble/hashes@1.6.1': {} 1328 + 1329 + '@nodelib/fs.scandir@2.1.5': 1330 + dependencies: 1331 + '@nodelib/fs.stat': 2.0.5 1332 + run-parallel: 1.2.0 1333 + 1334 + '@nodelib/fs.stat@2.0.5': {} 1335 + 1336 + '@nodelib/fs.walk@1.2.8': 1337 + dependencies: 1338 + '@nodelib/fs.scandir': 2.1.5 1339 + fastq: 1.17.1 1340 + 1341 + '@pkgjs/parseargs@0.11.0': 1342 + optional: true 1343 + 1344 + '@rollup/rollup-android-arm-eabi@4.28.0': 1345 + optional: true 1346 + 1347 + '@rollup/rollup-android-arm64@4.28.0': 1348 + optional: true 1349 + 1350 + '@rollup/rollup-darwin-arm64@4.28.0': 1351 + optional: true 1352 + 1353 + '@rollup/rollup-darwin-x64@4.28.0': 1354 + optional: true 1355 + 1356 + '@rollup/rollup-freebsd-arm64@4.28.0': 1357 + optional: true 1358 + 1359 + '@rollup/rollup-freebsd-x64@4.28.0': 1360 + optional: true 1361 + 1362 + '@rollup/rollup-linux-arm-gnueabihf@4.28.0': 1363 + optional: true 1364 + 1365 + '@rollup/rollup-linux-arm-musleabihf@4.28.0': 1366 + optional: true 1367 + 1368 + '@rollup/rollup-linux-arm64-gnu@4.28.0': 1369 + optional: true 1370 + 1371 + '@rollup/rollup-linux-arm64-musl@4.28.0': 1372 + optional: true 1373 + 1374 + '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': 1375 + optional: true 1376 + 1377 + '@rollup/rollup-linux-riscv64-gnu@4.28.0': 1378 + optional: true 1379 + 1380 + '@rollup/rollup-linux-s390x-gnu@4.28.0': 1381 + optional: true 1382 + 1383 + '@rollup/rollup-linux-x64-gnu@4.28.0': 1384 + optional: true 1385 + 1386 + '@rollup/rollup-linux-x64-musl@4.28.0': 1387 + optional: true 1388 + 1389 + '@rollup/rollup-win32-arm64-msvc@4.28.0': 1390 + optional: true 1391 + 1392 + '@rollup/rollup-win32-ia32-msvc@4.28.0': 1393 + optional: true 1394 + 1395 + '@rollup/rollup-win32-x64-msvc@4.28.0': 1396 + optional: true 1397 + 1398 + '@solidjs/router@0.15.1(solid-js@1.9.3)': 1399 + dependencies: 1400 + solid-js: 1.9.3 1401 + 1402 + '@types/babel__core@7.20.5': 1403 + dependencies: 1404 + '@babel/parser': 7.26.2 1405 + '@babel/types': 7.26.0 1406 + '@types/babel__generator': 7.6.8 1407 + '@types/babel__template': 7.4.4 1408 + '@types/babel__traverse': 7.20.6 1409 + 1410 + '@types/babel__generator@7.6.8': 1411 + dependencies: 1412 + '@babel/types': 7.26.0 1413 + 1414 + '@types/babel__template@7.4.4': 1415 + dependencies: 1416 + '@babel/parser': 7.26.2 1417 + '@babel/types': 7.26.0 1418 + 1419 + '@types/babel__traverse@7.20.6': 1420 + dependencies: 1421 + '@babel/types': 7.26.0 1422 + 1423 + '@types/estree@1.0.6': {} 1424 + 1425 + ansi-regex@5.0.1: {} 1426 + 1427 + ansi-regex@6.1.0: {} 1428 + 1429 + ansi-styles@4.3.0: 1430 + dependencies: 1431 + color-convert: 2.0.1 1432 + 1433 + ansi-styles@6.2.1: {} 1434 + 1435 + any-promise@1.3.0: {} 1436 + 1437 + anymatch@3.1.3: 1438 + dependencies: 1439 + normalize-path: 3.0.0 1440 + picomatch: 2.3.1 1441 + 1442 + arg@5.0.2: {} 1443 + 1444 + autoprefixer@10.4.20(postcss@8.4.49): 1445 + dependencies: 1446 + browserslist: 4.24.2 1447 + caniuse-lite: 1.0.30001686 1448 + fraction.js: 4.3.7 1449 + normalize-range: 0.1.2 1450 + picocolors: 1.1.1 1451 + postcss: 8.4.49 1452 + postcss-value-parser: 4.2.0 1453 + 1454 + await-lock@2.2.2: {} 1455 + 1456 + babel-plugin-jsx-dom-expressions@0.39.3(@babel/core@7.26.0): 1457 + dependencies: 1458 + '@babel/core': 7.26.0 1459 + '@babel/helper-module-imports': 7.18.6 1460 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) 1461 + '@babel/types': 7.26.0 1462 + html-entities: 2.3.3 1463 + parse5: 7.2.1 1464 + validate-html-nesting: 1.2.2 1465 + 1466 + babel-preset-solid@1.9.3(@babel/core@7.26.0): 1467 + dependencies: 1468 + '@babel/core': 7.26.0 1469 + babel-plugin-jsx-dom-expressions: 0.39.3(@babel/core@7.26.0) 1470 + 1471 + balanced-match@1.0.2: {} 1472 + 1473 + binary-extensions@2.3.0: {} 1474 + 1475 + brace-expansion@2.0.1: 1476 + dependencies: 1477 + balanced-match: 1.0.2 1478 + 1479 + braces@3.0.3: 1480 + dependencies: 1481 + fill-range: 7.1.1 1482 + 1483 + browserslist@4.24.2: 1484 + dependencies: 1485 + caniuse-lite: 1.0.30001686 1486 + electron-to-chromium: 1.5.68 1487 + node-releases: 2.0.18 1488 + update-browserslist-db: 1.1.1(browserslist@4.24.2) 1489 + 1490 + camelcase-css@2.0.1: {} 1491 + 1492 + caniuse-lite@1.0.30001686: {} 1493 + 1494 + chokidar@3.6.0: 1495 + dependencies: 1496 + anymatch: 3.1.3 1497 + braces: 3.0.3 1498 + glob-parent: 5.1.2 1499 + is-binary-path: 2.1.0 1500 + is-glob: 4.0.3 1501 + normalize-path: 3.0.0 1502 + readdirp: 3.6.0 1503 + optionalDependencies: 1504 + fsevents: 2.3.3 1505 + 1506 + color-convert@2.0.1: 1507 + dependencies: 1508 + color-name: 1.1.4 1509 + 1510 + color-name@1.1.4: {} 1511 + 1512 + commander@4.1.1: {} 1513 + 1514 + convert-source-map@2.0.0: {} 1515 + 1516 + cross-spawn@7.0.6: 1517 + dependencies: 1518 + path-key: 3.1.1 1519 + shebang-command: 2.0.0 1520 + which: 2.0.2 1521 + 1522 + cssesc@3.0.0: {} 1523 + 1524 + csstype@3.1.3: {} 1525 + 1526 + debug@4.3.7: 1527 + dependencies: 1528 + ms: 2.1.3 1529 + 1530 + didyoumean@1.2.2: {} 1531 + 1532 + dlv@1.1.3: {} 1533 + 1534 + eastasianwidth@0.2.0: {} 1535 + 1536 + electron-to-chromium@1.5.68: {} 1537 + 1538 + emoji-regex@8.0.0: {} 1539 + 1540 + emoji-regex@9.2.2: {} 1541 + 1542 + entities@4.5.0: {} 1543 + 1544 + esbuild@0.24.0: 1545 + optionalDependencies: 1546 + '@esbuild/aix-ppc64': 0.24.0 1547 + '@esbuild/android-arm': 0.24.0 1548 + '@esbuild/android-arm64': 0.24.0 1549 + '@esbuild/android-x64': 0.24.0 1550 + '@esbuild/darwin-arm64': 0.24.0 1551 + '@esbuild/darwin-x64': 0.24.0 1552 + '@esbuild/freebsd-arm64': 0.24.0 1553 + '@esbuild/freebsd-x64': 0.24.0 1554 + '@esbuild/linux-arm': 0.24.0 1555 + '@esbuild/linux-arm64': 0.24.0 1556 + '@esbuild/linux-ia32': 0.24.0 1557 + '@esbuild/linux-loong64': 0.24.0 1558 + '@esbuild/linux-mips64el': 0.24.0 1559 + '@esbuild/linux-ppc64': 0.24.0 1560 + '@esbuild/linux-riscv64': 0.24.0 1561 + '@esbuild/linux-s390x': 0.24.0 1562 + '@esbuild/linux-x64': 0.24.0 1563 + '@esbuild/netbsd-x64': 0.24.0 1564 + '@esbuild/openbsd-arm64': 0.24.0 1565 + '@esbuild/openbsd-x64': 0.24.0 1566 + '@esbuild/sunos-x64': 0.24.0 1567 + '@esbuild/win32-arm64': 0.24.0 1568 + '@esbuild/win32-ia32': 0.24.0 1569 + '@esbuild/win32-x64': 0.24.0 1570 + 1571 + escalade@3.2.0: {} 1572 + 1573 + fast-glob@3.3.2: 1574 + dependencies: 1575 + '@nodelib/fs.stat': 2.0.5 1576 + '@nodelib/fs.walk': 1.2.8 1577 + glob-parent: 5.1.2 1578 + merge2: 1.4.1 1579 + micromatch: 4.0.8 1580 + 1581 + fastq@1.17.1: 1582 + dependencies: 1583 + reusify: 1.0.4 1584 + 1585 + fill-range@7.1.1: 1586 + dependencies: 1587 + to-regex-range: 5.0.1 1588 + 1589 + foreground-child@3.3.0: 1590 + dependencies: 1591 + cross-spawn: 7.0.6 1592 + signal-exit: 4.1.0 1593 + 1594 + fraction.js@4.3.7: {} 1595 + 1596 + fsevents@2.3.3: 1597 + optional: true 1598 + 1599 + function-bind@1.1.2: {} 1600 + 1601 + gensync@1.0.0-beta.2: {} 1602 + 1603 + glob-parent@5.1.2: 1604 + dependencies: 1605 + is-glob: 4.0.3 1606 + 1607 + glob-parent@6.0.2: 1608 + dependencies: 1609 + is-glob: 4.0.3 1610 + 1611 + glob@10.4.5: 1612 + dependencies: 1613 + foreground-child: 3.3.0 1614 + jackspeak: 3.4.3 1615 + minimatch: 9.0.5 1616 + minipass: 7.1.2 1617 + package-json-from-dist: 1.0.1 1618 + path-scurry: 1.11.1 1619 + 1620 + globals@11.12.0: {} 1621 + 1622 + graphemer@1.4.0: {} 1623 + 1624 + hasown@2.0.2: 1625 + dependencies: 1626 + function-bind: 1.1.2 1627 + 1628 + html-entities@2.3.3: {} 1629 + 1630 + is-binary-path@2.1.0: 1631 + dependencies: 1632 + binary-extensions: 2.3.0 1633 + 1634 + is-core-module@2.15.1: 1635 + dependencies: 1636 + hasown: 2.0.2 1637 + 1638 + is-extglob@2.1.1: {} 1639 + 1640 + is-fullwidth-code-point@3.0.0: {} 1641 + 1642 + is-glob@4.0.3: 1643 + dependencies: 1644 + is-extglob: 2.1.1 1645 + 1646 + is-number@7.0.0: {} 1647 + 1648 + is-what@4.1.16: {} 1649 + 1650 + isexe@2.0.0: {} 1651 + 1652 + iso-datestring-validator@2.2.2: {} 1653 + 1654 + jackspeak@3.4.3: 1655 + dependencies: 1656 + '@isaacs/cliui': 8.0.2 1657 + optionalDependencies: 1658 + '@pkgjs/parseargs': 0.11.0 1659 + 1660 + jiti@1.21.6: {} 1661 + 1662 + js-tokens@4.0.0: {} 1663 + 1664 + jsesc@3.0.2: {} 1665 + 1666 + json5@2.2.3: {} 1667 + 1668 + lilconfig@3.1.3: {} 1669 + 1670 + lines-and-columns@1.2.4: {} 1671 + 1672 + lru-cache@10.4.3: {} 1673 + 1674 + lru-cache@5.1.1: 1675 + dependencies: 1676 + yallist: 3.1.1 1677 + 1678 + merge-anything@5.1.7: 1679 + dependencies: 1680 + is-what: 4.1.16 1681 + 1682 + merge2@1.4.1: {} 1683 + 1684 + micromatch@4.0.8: 1685 + dependencies: 1686 + braces: 3.0.3 1687 + picomatch: 2.3.1 1688 + 1689 + minimatch@9.0.5: 1690 + dependencies: 1691 + brace-expansion: 2.0.1 1692 + 1693 + minipass@7.1.2: {} 1694 + 1695 + ms@2.1.3: {} 1696 + 1697 + multiformats@13.3.1: {} 1698 + 1699 + multiformats@9.9.0: {} 1700 + 1701 + mz@2.7.0: 1702 + dependencies: 1703 + any-promise: 1.3.0 1704 + object-assign: 4.1.1 1705 + thenify-all: 1.6.0 1706 + 1707 + nanoid@3.3.8: {} 1708 + 1709 + node-releases@2.0.18: {} 1710 + 1711 + normalize-path@3.0.0: {} 1712 + 1713 + normalize-range@0.1.2: {} 1714 + 1715 + object-assign@4.1.1: {} 1716 + 1717 + object-hash@3.0.0: {} 1718 + 1719 + package-json-from-dist@1.0.1: {} 1720 + 1721 + parse5@7.2.1: 1722 + dependencies: 1723 + entities: 4.5.0 1724 + 1725 + path-key@3.1.1: {} 1726 + 1727 + path-parse@1.0.7: {} 1728 + 1729 + path-scurry@1.11.1: 1730 + dependencies: 1731 + lru-cache: 10.4.3 1732 + minipass: 7.1.2 1733 + 1734 + picocolors@1.1.1: {} 1735 + 1736 + picomatch@2.3.1: {} 1737 + 1738 + pify@2.3.0: {} 1739 + 1740 + pirates@4.0.6: {} 1741 + 1742 + postcss-import@15.1.0(postcss@8.4.49): 1743 + dependencies: 1744 + postcss: 8.4.49 1745 + postcss-value-parser: 4.2.0 1746 + read-cache: 1.0.0 1747 + resolve: 1.22.8 1748 + 1749 + postcss-js@4.0.1(postcss@8.4.49): 1750 + dependencies: 1751 + camelcase-css: 2.0.1 1752 + postcss: 8.4.49 1753 + 1754 + postcss-load-config@4.0.2(postcss@8.4.49): 1755 + dependencies: 1756 + lilconfig: 3.1.3 1757 + yaml: 2.6.1 1758 + optionalDependencies: 1759 + postcss: 8.4.49 1760 + 1761 + postcss-nested@6.2.0(postcss@8.4.49): 1762 + dependencies: 1763 + postcss: 8.4.49 1764 + postcss-selector-parser: 6.1.2 1765 + 1766 + postcss-selector-parser@6.1.2: 1767 + dependencies: 1768 + cssesc: 3.0.0 1769 + util-deprecate: 1.0.2 1770 + 1771 + postcss-value-parser@4.2.0: {} 1772 + 1773 + postcss@8.4.49: 1774 + dependencies: 1775 + nanoid: 3.3.8 1776 + picocolors: 1.1.1 1777 + source-map-js: 1.2.1 1778 + 1779 + queue-microtask@1.2.3: {} 1780 + 1781 + read-cache@1.0.0: 1782 + dependencies: 1783 + pify: 2.3.0 1784 + 1785 + readdirp@3.6.0: 1786 + dependencies: 1787 + picomatch: 2.3.1 1788 + 1789 + resolve@1.22.8: 1790 + dependencies: 1791 + is-core-module: 2.15.1 1792 + path-parse: 1.0.7 1793 + supports-preserve-symlinks-flag: 1.0.0 1794 + 1795 + reusify@1.0.4: {} 1796 + 1797 + rollup@4.28.0: 1798 + dependencies: 1799 + '@types/estree': 1.0.6 1800 + optionalDependencies: 1801 + '@rollup/rollup-android-arm-eabi': 4.28.0 1802 + '@rollup/rollup-android-arm64': 4.28.0 1803 + '@rollup/rollup-darwin-arm64': 4.28.0 1804 + '@rollup/rollup-darwin-x64': 4.28.0 1805 + '@rollup/rollup-freebsd-arm64': 4.28.0 1806 + '@rollup/rollup-freebsd-x64': 4.28.0 1807 + '@rollup/rollup-linux-arm-gnueabihf': 4.28.0 1808 + '@rollup/rollup-linux-arm-musleabihf': 4.28.0 1809 + '@rollup/rollup-linux-arm64-gnu': 4.28.0 1810 + '@rollup/rollup-linux-arm64-musl': 4.28.0 1811 + '@rollup/rollup-linux-powerpc64le-gnu': 4.28.0 1812 + '@rollup/rollup-linux-riscv64-gnu': 4.28.0 1813 + '@rollup/rollup-linux-s390x-gnu': 4.28.0 1814 + '@rollup/rollup-linux-x64-gnu': 4.28.0 1815 + '@rollup/rollup-linux-x64-musl': 4.28.0 1816 + '@rollup/rollup-win32-arm64-msvc': 4.28.0 1817 + '@rollup/rollup-win32-ia32-msvc': 4.28.0 1818 + '@rollup/rollup-win32-x64-msvc': 4.28.0 1819 + fsevents: 2.3.3 1820 + 1821 + run-parallel@1.2.0: 1822 + dependencies: 1823 + queue-microtask: 1.2.3 1824 + 1825 + semver@6.3.1: {} 1826 + 1827 + seroval-plugins@1.1.1(seroval@1.1.1): 1828 + dependencies: 1829 + seroval: 1.1.1 1830 + 1831 + seroval@1.1.1: {} 1832 + 1833 + shebang-command@2.0.0: 1834 + dependencies: 1835 + shebang-regex: 3.0.0 1836 + 1837 + shebang-regex@3.0.0: {} 1838 + 1839 + signal-exit@4.1.0: {} 1840 + 1841 + solid-js@1.9.3: 1842 + dependencies: 1843 + csstype: 3.1.3 1844 + seroval: 1.1.1 1845 + seroval-plugins: 1.1.1(seroval@1.1.1) 1846 + 1847 + solid-refresh@0.6.3(solid-js@1.9.3): 1848 + dependencies: 1849 + '@babel/generator': 7.26.2 1850 + '@babel/helper-module-imports': 7.25.9 1851 + '@babel/types': 7.26.0 1852 + solid-js: 1.9.3 1853 + transitivePeerDependencies: 1854 + - supports-color 1855 + 1856 + source-map-js@1.2.1: {} 1857 + 1858 + string-width@4.2.3: 1859 + dependencies: 1860 + emoji-regex: 8.0.0 1861 + is-fullwidth-code-point: 3.0.0 1862 + strip-ansi: 6.0.1 1863 + 1864 + string-width@5.1.2: 1865 + dependencies: 1866 + eastasianwidth: 0.2.0 1867 + emoji-regex: 9.2.2 1868 + strip-ansi: 7.1.0 1869 + 1870 + strip-ansi@6.0.1: 1871 + dependencies: 1872 + ansi-regex: 5.0.1 1873 + 1874 + strip-ansi@7.1.0: 1875 + dependencies: 1876 + ansi-regex: 6.1.0 1877 + 1878 + sucrase@3.35.0: 1879 + dependencies: 1880 + '@jridgewell/gen-mapping': 0.3.5 1881 + commander: 4.1.1 1882 + glob: 10.4.5 1883 + lines-and-columns: 1.2.4 1884 + mz: 2.7.0 1885 + pirates: 4.0.6 1886 + ts-interface-checker: 0.1.13 1887 + 1888 + supports-preserve-symlinks-flag@1.0.0: {} 1889 + 1890 + tailwindcss@3.4.16: 1891 + dependencies: 1892 + '@alloc/quick-lru': 5.2.0 1893 + arg: 5.0.2 1894 + chokidar: 3.6.0 1895 + didyoumean: 1.2.2 1896 + dlv: 1.1.3 1897 + fast-glob: 3.3.2 1898 + glob-parent: 6.0.2 1899 + is-glob: 4.0.3 1900 + jiti: 1.21.6 1901 + lilconfig: 3.1.3 1902 + micromatch: 4.0.8 1903 + normalize-path: 3.0.0 1904 + object-hash: 3.0.0 1905 + picocolors: 1.1.1 1906 + postcss: 8.4.49 1907 + postcss-import: 15.1.0(postcss@8.4.49) 1908 + postcss-js: 4.0.1(postcss@8.4.49) 1909 + postcss-load-config: 4.0.2(postcss@8.4.49) 1910 + postcss-nested: 6.2.0(postcss@8.4.49) 1911 + postcss-selector-parser: 6.1.2 1912 + resolve: 1.22.8 1913 + sucrase: 3.35.0 1914 + transitivePeerDependencies: 1915 + - ts-node 1916 + 1917 + thenify-all@1.6.0: 1918 + dependencies: 1919 + thenify: 3.3.1 1920 + 1921 + thenify@3.3.1: 1922 + dependencies: 1923 + any-promise: 1.3.0 1924 + 1925 + tlds@1.255.0: {} 1926 + 1927 + to-regex-range@5.0.1: 1928 + dependencies: 1929 + is-number: 7.0.0 1930 + 1931 + ts-interface-checker@0.1.13: {} 1932 + 1933 + typescript@5.6.3: {} 1934 + 1935 + uint8arrays@3.0.0: 1936 + dependencies: 1937 + multiformats: 9.9.0 1938 + 1939 + uint8arrays@5.1.0: 1940 + dependencies: 1941 + multiformats: 13.3.1 1942 + 1943 + update-browserslist-db@1.1.1(browserslist@4.24.2): 1944 + dependencies: 1945 + browserslist: 4.24.2 1946 + escalade: 3.2.0 1947 + picocolors: 1.1.1 1948 + 1949 + util-deprecate@1.0.2: {} 1950 + 1951 + validate-html-nesting@1.2.2: {} 1952 + 1953 + vite-plugin-solid@2.11.0(solid-js@1.9.3)(vite@6.0.2(jiti@1.21.6)(yaml@2.6.1)): 1954 + dependencies: 1955 + '@babel/core': 7.26.0 1956 + '@types/babel__core': 7.20.5 1957 + babel-preset-solid: 1.9.3(@babel/core@7.26.0) 1958 + merge-anything: 5.1.7 1959 + solid-js: 1.9.3 1960 + solid-refresh: 0.6.3(solid-js@1.9.3) 1961 + vite: 6.0.2(jiti@1.21.6)(yaml@2.6.1) 1962 + vitefu: 1.0.4(vite@6.0.2(jiti@1.21.6)(yaml@2.6.1)) 1963 + transitivePeerDependencies: 1964 + - supports-color 1965 + 1966 + vite@6.0.2(jiti@1.21.6)(yaml@2.6.1): 1967 + dependencies: 1968 + esbuild: 0.24.0 1969 + postcss: 8.4.49 1970 + rollup: 4.28.0 1971 + optionalDependencies: 1972 + fsevents: 2.3.3 1973 + jiti: 1.21.6 1974 + yaml: 2.6.1 1975 + 1976 + vitefu@1.0.4(vite@6.0.2(jiti@1.21.6)(yaml@2.6.1)): 1977 + optionalDependencies: 1978 + vite: 6.0.2(jiti@1.21.6)(yaml@2.6.1) 1979 + 1980 + which@2.0.2: 1981 + dependencies: 1982 + isexe: 2.0.0 1983 + 1984 + wrap-ansi@7.0.0: 1985 + dependencies: 1986 + ansi-styles: 4.3.0 1987 + string-width: 4.2.3 1988 + strip-ansi: 6.0.1 1989 + 1990 + wrap-ansi@8.1.0: 1991 + dependencies: 1992 + ansi-styles: 6.2.1 1993 + string-width: 5.1.2 1994 + strip-ansi: 7.1.0 1995 + 1996 + yallist@3.1.1: {} 1997 + 1998 + yaml@2.6.1: {} 1999 + 2000 + zod@3.23.8: {}
+6
postcss.config.js
··· 1 + export default { 2 + plugins: { 3 + tailwindcss: {}, 4 + autoprefixer: {}, 5 + }, 6 + }
+26
src/components/layout.tsx
··· 1 + import { ParentComponent } from "solid-js"; 2 + 3 + //relative z-10 mx-auto flex min-h-dvh max-w-xl flex-col-reverse 4 + 5 + const Layout: ParentComponent = (props) => { 6 + return ( 7 + <div class="max-w-xl mx-auto"> 8 + <div class="min-h-dvh mx-2 p-4 bg-white shadow-xl"> 9 + <header> 10 + <h1>ATProto</h1> 11 + </header> 12 + <main>{props.children}</main> 13 + <footer> 14 + <div class="credit"> 15 + 💕{" "} 16 + <a target="_blank" href="https://bsky.app/profile/lukeacl.com"> 17 + @lukeacl.com 18 + </a> 19 + </div> 20 + </footer> 21 + </div> 22 + </div> 23 + ); 24 + }; 25 + 26 + export default Layout;
+77
src/index.css
··· 1 + @import url("https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&family=Yusei+Magic&display=swap"); 2 + 3 + @tailwind base; 4 + @tailwind components; 5 + @tailwind utilities; 6 + 7 + :root { 8 + @apply min-h-dvh bg-slate-100 text-gray-800; 9 + font-family: "Open Sans", sans-serif; 10 + } 11 + 12 + header, 13 + main { 14 + @apply mb-4; 15 + } 16 + 17 + h1 { 18 + @apply text-xl font-medium; 19 + } 20 + 21 + h2 { 22 + @apply text-lg font-semibold; 23 + } 24 + 25 + h3 { 26 + @apply text-sm font-medium text-gray-400; 27 + } 28 + 29 + h4 { 30 + @apply text-sm font-medium; 31 + } 32 + 33 + pre { 34 + @apply text-xs font-mono bg-slate-100 p-2 text-wrap rounded; 35 + } 36 + 37 + section header { 38 + @apply pb-1 border-b-2; 39 + } 40 + 41 + section main { 42 + @apply pb-4 border-b-2; 43 + } 44 + 45 + section main h4 { 46 + @apply mb-2; 47 + } 48 + 49 + footer .credit { 50 + @apply text-xs opacity-50; 51 + } 52 + 53 + .form-group { 54 + @apply mb-2; 55 + } 56 + 57 + .form-label { 58 + @apply block 59 + text-sm font-semibold mb-1; 60 + } 61 + 62 + .form-input { 63 + @apply block w-full p-2 64 + bg-gray-50 65 + border border-gray-300 rounded 66 + text-gray-900 text-sm 67 + focus:ring-blue-500 focus:border-blue-500; 68 + } 69 + 70 + .form-button { 71 + @apply w-full px-4 py-2 72 + text-white font-medium text-sm text-center 73 + bg-blue-700 hover:bg-blue-800 74 + focus:ring-4 focus:outline-none focus:ring-blue-300 75 + rounded 76 + sm:w-auto; 77 + }
+20
src/index.tsx
··· 1 + /* @refresh reload */ 2 + import "./index.css"; 3 + 4 + import { Router, Route } from "@solidjs/router"; 5 + import { render } from "solid-js/web"; 6 + 7 + import Layout from "./components/layout"; 8 + 9 + import DIDWeb from "./pages/did-web"; 10 + 11 + const root = document.getElementById("root"); 12 + 13 + render( 14 + () => ( 15 + <Router root={Layout}> 16 + <Route path="/" component={DIDWeb} /> 17 + </Router> 18 + ), 19 + root!, 20 + );
+657
src/pages/did-web.tsx
··· 1 + import { AtpAgent } from "@atproto/api"; 2 + import { Secp256k1Keypair } from "@atproto/crypto"; 3 + import { createEffect, createSignal } from "solid-js"; 4 + import {} from "solid-js"; 5 + import * as ui8 from "uint8arrays"; 6 + 7 + const DIDWeb = () => { 8 + const [showDebug] = createSignal(false); 9 + const [skipDIDFileChecks] = createSignal(false); 10 + const [step, setStep] = createSignal(1); 11 + 12 + const showError = (message: string) => { 13 + alert(message); 14 + }; 15 + 16 + const [privateKey, setPrivateKey] = createSignal(""); 17 + const [publicKey, setPublicKey] = createSignal(""); 18 + const generatePrivateKey = async (event: Event) => { 19 + event.preventDefault(); 20 + const keyPair = await Secp256k1Keypair.create({ exportable: true }); 21 + const privateKeyBytes = await keyPair.export(); 22 + const privateKeyHex = ui8.toString(privateKeyBytes, "hex"); 23 + setPrivateKey(privateKeyHex); 24 + }; 25 + const validatePrivateKey = async (event: Event) => { 26 + event.preventDefault(); 27 + if (privateKey().trim() === "") 28 + return showError("You must specify a private key."); 29 + try { 30 + const keyPair = await Secp256k1Keypair.import(privateKey()); 31 + setPublicKey(keyPair.did()); 32 + setStep(step() + 1); 33 + } catch (error) { 34 + showError(`Invalid private key provided.`); 35 + console.log(`${error}`); 36 + } 37 + }; 38 + 39 + const [pdsEndpoint, setPDSEndpoint] = createSignal(""); 40 + const [domain, setDomain] = createSignal(""); 41 + const [handle, setHandle] = createSignal(""); 42 + const [didFileLocation, setDidFileLocation] = createSignal(""); 43 + const [didFile, setDidFile] = createSignal(""); 44 + const validateIdentity = async (event: Event) => { 45 + event.preventDefault(); 46 + if (pdsEndpoint().trim() === "") 47 + return showError("You must specify the endpoint for your PDS."); 48 + if (domain().trim() === "") return showError("You must specify a domain."); 49 + if (handle().trim() === "") return showError("You must specify a handle."); 50 + setStep(step() + 1); 51 + }; 52 + createEffect(() => { 53 + setDidFileLocation(`https://${domain()}/.well-known/did.json`); 54 + try { 55 + setDidFile( 56 + JSON.stringify( 57 + { 58 + "@context": [ 59 + "https://www.w3.org/ns/did/v1", 60 + "https://w3id.org/security/multikey/v1", 61 + "https://w3id.org/security/suites/secp256k1-2019/v1", 62 + ], 63 + id: `did:web:${domain()}`, 64 + alsoKnownAs: [`at://${handle()}`], 65 + verificationMethod: [ 66 + { 67 + id: `did:web:${domain()}#atproto`, 68 + type: "Multikey", 69 + controller: `did:web:${domain()}`, 70 + publicKeyMultibase: `${publicKey().split(":")[2]}`, 71 + }, 72 + ], 73 + service: [ 74 + { 75 + id: "#atproto_pds", 76 + type: "AtprotoPersonalDataServer", 77 + serviceEndpoint: `https://${new URL(pdsEndpoint()).hostname}`, 78 + }, 79 + ], 80 + }, 81 + null, 82 + "\t", 83 + ), 84 + ); 85 + } catch (error) {} 86 + }); 87 + 88 + const validateDIDFile = async (event: Event) => { 89 + event.preventDefault(); 90 + try { 91 + const response = await fetch(didFileLocation()); 92 + const json = await response.json(); 93 + const didFileMatches = 94 + JSON.stringify(json) == JSON.stringify(JSON.parse(didFile())); 95 + if (didFileMatches === false && skipDIDFileChecks() === false) 96 + return showError( 97 + "DID file validation failed. Check its contents and try again.", 98 + ); 99 + setStep(step() + 1); 100 + } catch (error) { 101 + showError(`${error}`); 102 + console.log(`${error}`); 103 + } 104 + }; 105 + 106 + const [email, setEmail] = createSignal(""); 107 + const [password, setPassword] = createSignal(""); 108 + const [inviteCode, setInviteCode] = createSignal(""); 109 + const [accessJWT, setAccessJWT] = createSignal(""); 110 + const [refreshJWT, setRefreshJWT] = createSignal(""); 111 + const [updatedDIDFile, setUpdatedDIDFile] = createSignal(""); 112 + const createAccount = async (event: Event) => { 113 + event.preventDefault(); 114 + if (email().trim() === "") return showError("You must specify your email."); 115 + if (password().trim() === "") 116 + return showError("You must specify a password."); 117 + try { 118 + const header = JSON.stringify({ 119 + alg: "ES256K", 120 + typ: "JWT", 121 + }); 122 + const headerEncoded = ui8.toString(ui8.fromString(header), "base64url"); 123 + 124 + const payload = JSON.stringify({ 125 + lxm: "com.atproto.server.createAccount", 126 + iss: `did:web:${domain()}`, 127 + aud: `did:web:${new URL(pdsEndpoint()).hostname}`, 128 + exp: Math.floor(Date.now() / 1000) + 180, 129 + }); 130 + const payloadEncoded = ui8.toString(ui8.fromString(payload), "base64url"); 131 + 132 + const headerDotPayloadEncoded = `${headerEncoded}.${payloadEncoded}`; 133 + 134 + const keyPair = await Secp256k1Keypair.import(privateKey()); 135 + 136 + const signature = await keyPair.sign( 137 + ui8.fromString(headerDotPayloadEncoded), 138 + ); 139 + const signatureEncoded = ui8.toString(signature, "base64url"); 140 + 141 + const token = `${headerDotPayloadEncoded}.${signatureEncoded}`; 142 + 143 + const agent = new AtpAgent({ service: pdsEndpoint() }); 144 + const response = await agent.com.atproto.server.createAccount( 145 + { 146 + did: `did:web:${domain()}`, 147 + handle: handle(), 148 + email: email(), 149 + password: password(), 150 + recoveryKey: `${publicKey().split(":")[2]}`, 151 + ...(inviteCode() !== "" ? { inviteCode: inviteCode() } : {}), 152 + }, 153 + { 154 + headers: { 155 + Authorization: `Bearer ${token}`, 156 + }, 157 + }, 158 + ); 159 + 160 + console.log(response); 161 + 162 + setAccessJWT(response.data.accessJwt); 163 + setRefreshJWT(response.data.refreshJwt); 164 + setStep(step() + 1); 165 + } catch (error) { 166 + showError(`${error}`); 167 + console.log(`${error}`); 168 + } 169 + }; 170 + createEffect(async () => { 171 + if (accessJWT() === "") return; 172 + if (refreshJWT() === "") return; 173 + if (updatedDIDFile() !== "") return; 174 + try { 175 + const agent = new AtpAgent({ service: pdsEndpoint() }); 176 + await agent.login({ 177 + identifier: `did:web:${domain()}`, 178 + password: password(), 179 + }); 180 + const response = 181 + await agent.com.atproto.identity.getRecommendedDidCredentials(); 182 + if (!response.data.verificationMethods) 183 + throw new Error("Verification methods not found."); 184 + type VerificationMethods = { 185 + atproto: string; 186 + }; 187 + const verificationMethods: VerificationMethods = response.data 188 + .verificationMethods as VerificationMethods; 189 + setUpdatedDIDFile( 190 + JSON.stringify( 191 + { 192 + "@context": [ 193 + "https://www.w3.org/ns/did/v1", 194 + "https://w3id.org/security/multikey/v1", 195 + "https://w3id.org/security/suites/secp256k1-2019/v1", 196 + ], 197 + id: `did:web:${domain()}`, 198 + alsoKnownAs: [`at://${handle()}`], 199 + verificationMethod: [ 200 + { 201 + id: `did:web:${domain()}#atproto`, 202 + type: "Multikey", 203 + controller: `did:web:${domain()}`, 204 + publicKeyMultibase: `${verificationMethods.atproto.split(":")[2]}`, 205 + }, 206 + ], 207 + service: [ 208 + { 209 + id: "#atproto_pds", 210 + type: "AtprotoPersonalDataServer", 211 + serviceEndpoint: `https://${new URL(pdsEndpoint()).hostname}`, 212 + }, 213 + ], 214 + }, 215 + null, 216 + "\t", 217 + ), 218 + ); 219 + } catch (error) { 220 + showError(`${error}`); 221 + console.log(`${error}`); 222 + } 223 + }); 224 + 225 + const validateUpdatedDIDFile = async (event: Event) => { 226 + event.preventDefault(); 227 + try { 228 + const response = await fetch(didFileLocation()); 229 + const json = await response.json(); 230 + const didFileMatches = 231 + JSON.stringify(json) == JSON.stringify(JSON.parse(updatedDIDFile())); 232 + if (didFileMatches === false && skipDIDFileChecks() === false) 233 + return showError( 234 + "Updated DID file validation failed. Check its contents and try again.", 235 + ); 236 + setStep(step() + 1); 237 + } catch (error) { 238 + showError(`${error}`); 239 + console.log(`${error}`); 240 + } 241 + }; 242 + 243 + const activateAccount = async (event: Event) => { 244 + event.preventDefault(); 245 + try { 246 + const agent = new AtpAgent({ service: pdsEndpoint() }); 247 + await agent.login({ 248 + identifier: `did:web:${domain()}`, 249 + password: password(), 250 + }); 251 + const response = await agent.com.atproto.server.activateAccount(); 252 + if (response.success === true) { 253 + setStep(step() + 1); 254 + } else { 255 + throw new Error("Could not activate account."); 256 + } 257 + } catch (error) { 258 + showError(`${error}`); 259 + console.log(`${error}`); 260 + } 261 + }; 262 + 263 + return ( 264 + <section> 265 + <header> 266 + <h2>did:web</h2> 267 + <h3>setup a did:web for use on ATProto</h3> 268 + </header> 269 + <main> 270 + {showDebug() === true && ( 271 + <div class="p-1 mb-2 bg-sky-100 shadow rounded text-xs overflow-clip"> 272 + <p>Private Key: {privateKey()}</p> 273 + <p>Public Key: {publicKey()}</p> 274 + <p>PDS Endpoint: {pdsEndpoint()}</p> 275 + <p>Domain: {domain()}</p> 276 + <p>Handle: {handle()}</p> 277 + <p>DID File Location: {didFileLocation()}</p> 278 + <p>DID File: {didFile().length} bytes</p> 279 + <p>Email: {email()}</p> 280 + <p>Password: {password()}</p> 281 + <p>Invite Code: {inviteCode()}</p> 282 + <p>Access JWT: {accessJWT()}</p> 283 + <p>Refresh JWT: {refreshJWT()}</p> 284 + </div> 285 + )} 286 + 287 + {step() === 1 && ( 288 + <div> 289 + <h4>{step()}. Introduction</h4> 290 + <p class="text-xs mb-2"> 291 + This tool has been designed to assist in the creation of a did:web 292 + based account on a self hosted PDS. All operations are performed 293 + client side on your device, with only necessary outgoing network 294 + calls made to your web server to validate did.json files, and to 295 + the PDS to create and activate your account. No private data you 296 + provide is stored or shared. If you refresh this page it will 297 + reset the process. 298 + </p> 299 + <div class="form"> 300 + <div class="text-right"> 301 + <button class="form-button" onClick={() => setStep(step() + 1)}> 302 + Next 303 + </button> 304 + </div> 305 + </div> 306 + </div> 307 + )} 308 + 309 + {step() === 2 && ( 310 + <div> 311 + <h4>{step()}. Private Key</h4> 312 + <p class="text-xs mb-2"> 313 + Generate a new hex encoded private key or specify an existing one. 314 + Once generated you should probably hold onto it just in case this 315 + process is interrupted and you need to resume it. Treat it like a 316 + password and don't share it with anyone. 317 + </p> 318 + <div class="form"> 319 + <div class="form-group"> 320 + <label for="privateKey" class="form-label"> 321 + Private Key 322 + </label> 323 + <input 324 + type="text" 325 + id="privateKey" 326 + class="form-input font-mono" 327 + autocorrect="off" 328 + placeholder="abcd1234567890efghj1234567890kmn1234567890opqrst1234567890uvwxyz" 329 + value={privateKey()} 330 + onKeyUp={(e) => 331 + setPrivateKey((e.target as HTMLInputElement).value) 332 + } 333 + /> 334 + </div> 335 + <div class="text-right"> 336 + {privateKey() === "" ? ( 337 + <button class="form-button" onClick={generatePrivateKey}> 338 + Generate 339 + </button> 340 + ) : ( 341 + <button class="form-button" onClick={validatePrivateKey}> 342 + Next 343 + </button> 344 + )} 345 + </div> 346 + </div> 347 + </div> 348 + )} 349 + 350 + {step() === 3 && ( 351 + <div> 352 + <h4>{step()}. Identity</h4> 353 + <p class="text-xs mb-2"> 354 + Enter the details for your PDS and your new identity. 355 + </p> 356 + <div class="form"> 357 + <div class="form-group"> 358 + <label for="pdsEndpoint" class="form-label"> 359 + PDS Endpoint 360 + </label> 361 + <input 362 + type="text" 363 + id="pdsEndpoint" 364 + class="form-input font-mono" 365 + autocorrect="off" 366 + placeholder="https://pds.example.com" 367 + value={pdsEndpoint()} 368 + onKeyUp={(e) => 369 + setPDSEndpoint((e.target as HTMLInputElement).value) 370 + } 371 + /> 372 + </div> 373 + <div class="form-group"> 374 + <label for="domain" class="form-label"> 375 + Domain 376 + </label> 377 + <input 378 + type="text" 379 + id="domain" 380 + class="form-input font-mono" 381 + autocorrect="off" 382 + placeholder="example.com" 383 + value={domain()} 384 + onKeyUp={(e) => 385 + setDomain((e.target as HTMLInputElement).value) 386 + } 387 + /> 388 + </div> 389 + <div class="form-group"> 390 + <label for="handle" class="form-label"> 391 + Handle 392 + </label> 393 + <input 394 + type="text" 395 + id="handle" 396 + class="form-input font-mono" 397 + autocorrect="off" 398 + placeholder="handle.pds.example.com" 399 + value={handle()} 400 + onKeyUp={(e) => 401 + setHandle((e.target as HTMLInputElement).value) 402 + } 403 + /> 404 + </div> 405 + <div class="text-right"> 406 + <button class="form-button" onClick={validateIdentity}> 407 + Next 408 + </button> 409 + </div> 410 + </div> 411 + </div> 412 + )} 413 + 414 + {step() === 4 && ( 415 + <div> 416 + <h4>{step()}. DID File</h4> 417 + <p class="text-xs mb-2"> 418 + Upload the JSON below to the did.json URL specified. You can click 419 + that URL to make sure it's resolving correctly before continuing. 420 + </p> 421 + <div class="form"> 422 + <div class="form-group"> 423 + <p class="font-xs text-sky-700 mb-1"> 424 + <a target="_blank" href={didFileLocation()}> 425 + {didFileLocation()} 426 + </a> 427 + </p> 428 + <pre>{didFile()}</pre> 429 + </div> 430 + <div class="text-right"> 431 + <button class="form-button" onClick={validateDIDFile}> 432 + Next 433 + </button> 434 + </div> 435 + </div> 436 + </div> 437 + )} 438 + 439 + {step() === 5 && ( 440 + <div> 441 + <h4>{step()}. Create Account</h4> 442 + <p class="text-xs mb-2"> 443 + To create an account we'll need some extra information. For now 444 + use a temporary password which you can change later. It's going to 445 + be shown in plain text and provided to you again later in plain 446 + text so don't use something super secret.' 447 + </p> 448 + <div class="form"> 449 + <div class="form-group"> 450 + <label for="email" class="form-label"> 451 + Email 452 + </label> 453 + <input 454 + type="text" 455 + id="email" 456 + class="form-input font-mono" 457 + autocorrect="off" 458 + placeholder="hello@example.com" 459 + value={email()} 460 + onKeyUp={(e) => 461 + setEmail((e.target as HTMLInputElement).value) 462 + } 463 + /> 464 + </div> 465 + <div class="form-group"> 466 + <label for="password" class="form-label"> 467 + Password 468 + </label> 469 + <input 470 + type="text" 471 + id="password" 472 + class="form-input font-mono" 473 + autocorrect="off" 474 + placeholder="secret123" 475 + value={password()} 476 + onKeyUp={(e) => 477 + setPassword((e.target as HTMLInputElement).value) 478 + } 479 + /> 480 + </div> 481 + <div class="form-group"> 482 + <label for="inviteCode" class="form-label"> 483 + Invite Code (if applicable) 484 + </label> 485 + <input 486 + type="text" 487 + id="inviteCode" 488 + class="form-input font-mono" 489 + autocorrect="off" 490 + placeholder={`pds-example-com-djyw4-aubhs`} 491 + value={inviteCode()} 492 + onKeyUp={(e) => 493 + setInviteCode((e.target as HTMLInputElement).value) 494 + } 495 + /> 496 + </div> 497 + <p class="mb-2 text-xs"> 498 + If you're using a custom domain, you'll need to create a TXT 499 + record with the following details. You won't be able to create 500 + your account with a custom domain until you complete this step. 501 + </p> 502 + <div class="form-group"> 503 + <label for="dnsHost" class="form-label"> 504 + DNS Host (if required) 505 + </label> 506 + <input 507 + type="text" 508 + id="dnsHost" 509 + class="form-input font-mono" 510 + autocorrect="off" 511 + value={`_atproto.${handle()}`} 512 + readOnly={true} 513 + /> 514 + </div> 515 + <div class="form-group"> 516 + <label for="dnsValue" class="form-label"> 517 + DNS Value (if required) 518 + </label> 519 + <input 520 + type="text" 521 + id="dnsValue" 522 + class="form-input font-mono" 523 + autocorrect="off" 524 + value={`did=did:web:${handle()}`} 525 + readOnly={true} 526 + /> 527 + </div> 528 + <div class="text-right"> 529 + <button class="form-button" onClick={createAccount}> 530 + Next 531 + </button> 532 + </div> 533 + </div> 534 + </div> 535 + )} 536 + 537 + {step() === 6 && ( 538 + <div> 539 + <h4>{step()}. Updated DID File</h4> 540 + <p class="text-xs mb-2"> 541 + Upload the updated JSON below to the did.json URL specified below, 542 + it's the same as last time. You can click that URL to make sure 543 + it's resolving correctly with the new information before 544 + continuing. 545 + </p> 546 + <div class="form"> 547 + {updatedDIDFile() === "" ? ( 548 + <p>Loading...</p> 549 + ) : ( 550 + <> 551 + <div class="form-group"> 552 + <p class="font-xs text-sky-700 mb-1"> 553 + <a target="_blank" href={didFileLocation()}> 554 + {didFileLocation()} 555 + </a> 556 + </p> 557 + <pre>{updatedDIDFile()}</pre> 558 + </div> 559 + <div class="text-right"> 560 + <button 561 + class="form-button" 562 + onClick={validateUpdatedDIDFile} 563 + > 564 + Next 565 + </button> 566 + </div> 567 + </> 568 + )} 569 + </div> 570 + </div> 571 + )} 572 + 573 + {step() === 7 && ( 574 + <div> 575 + <h4>{step()}. Activate Account</h4> 576 + <div class="form"> 577 + <p class="mb-2 text-xs"> 578 + Everything should be in place to activate your account for use. 579 + Cross your fingers and hit next. 580 + </p> 581 + <div class="text-right"> 582 + <button class="form-button" onClick={activateAccount}> 583 + Next 584 + </button> 585 + </div> 586 + </div> 587 + </div> 588 + )} 589 + 590 + {step() === 8 && ( 591 + <div> 592 + <h4>Success!</h4> 593 + <p class="mb-2 text-xs"> 594 + Your new account was successfully activated with the details below 595 + and is ready to use! Don't forget to change your password when you 596 + first login. 597 + </p> 598 + <div class="form-group"> 599 + <label for="pdsEndpoint" class="form-label"> 600 + PDS Endpoint 601 + </label> 602 + <input 603 + type="text" 604 + id="pdsEndpoint" 605 + class="form-input font-mono" 606 + autocorrect="off" 607 + value={pdsEndpoint()} 608 + readOnly={true} 609 + /> 610 + </div> 611 + <div class="form-group"> 612 + <label for="did" class="form-label"> 613 + DID 614 + </label> 615 + <input 616 + type="text" 617 + id="did" 618 + class="form-input font-mono" 619 + autocorrect="off" 620 + value={`did:web:${handle()}`} 621 + readOnly={true} 622 + /> 623 + </div> 624 + <div class="form-group"> 625 + <label for="handle" class="form-label"> 626 + Handle 627 + </label> 628 + <input 629 + type="text" 630 + id="handle" 631 + class="form-input font-mono" 632 + autocorrect="off" 633 + value={handle()} 634 + readOnly={true} 635 + /> 636 + </div> 637 + <div class="form-group"> 638 + <label for="password" class="form-label"> 639 + Password 640 + </label> 641 + <input 642 + type="text" 643 + id="password" 644 + class="form-input font-mono" 645 + autocorrect="off" 646 + value={password()} 647 + readOnly={true} 648 + /> 649 + </div> 650 + </div> 651 + )} 652 + </main> 653 + </section> 654 + ); 655 + }; 656 + 657 + export default DIDWeb;
+1
src/vite-env.d.ts
··· 1 + /// <reference types="vite/client" />
+8
tailwind.config.js
··· 1 + /** @type {import("tailwindcss").Config} */ 2 + export default { 3 + content: ["./src/**/*.{js,jsx,ts,tsx}"], 4 + theme: { 5 + extend: {}, 6 + }, 7 + plugins: [], 8 + };
+27
tsconfig.app.json
··· 1 + { 2 + "compilerOptions": { 3 + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", 4 + "target": "ES2020", 5 + "useDefineForClassFields": true, 6 + "module": "ESNext", 7 + "lib": ["ES2020", "DOM", "DOM.Iterable"], 8 + "skipLibCheck": true, 9 + 10 + /* Bundler mode */ 11 + "moduleResolution": "bundler", 12 + "allowImportingTsExtensions": true, 13 + "isolatedModules": true, 14 + "moduleDetection": "force", 15 + "noEmit": true, 16 + "jsx": "preserve", 17 + "jsxImportSource": "solid-js", 18 + 19 + /* Linting */ 20 + "strict": true, 21 + "noUnusedLocals": true, 22 + "noUnusedParameters": true, 23 + "noFallthroughCasesInSwitch": true, 24 + "noUncheckedSideEffectImports": true 25 + }, 26 + "include": ["src"] 27 + }
+7
tsconfig.json
··· 1 + { 2 + "files": [], 3 + "references": [ 4 + { "path": "./tsconfig.app.json" }, 5 + { "path": "./tsconfig.node.json" } 6 + ] 7 + }
+24
tsconfig.node.json
··· 1 + { 2 + "compilerOptions": { 3 + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", 4 + "target": "ES2022", 5 + "lib": ["ES2023"], 6 + "module": "ESNext", 7 + "skipLibCheck": true, 8 + 9 + /* Bundler mode */ 10 + "moduleResolution": "bundler", 11 + "allowImportingTsExtensions": true, 12 + "isolatedModules": true, 13 + "moduleDetection": "force", 14 + "noEmit": true, 15 + 16 + /* Linting */ 17 + "strict": true, 18 + "noUnusedLocals": true, 19 + "noUnusedParameters": true, 20 + "noFallthroughCasesInSwitch": true, 21 + "noUncheckedSideEffectImports": true 22 + }, 23 + "include": ["vite.config.ts"] 24 + }
+6
vite.config.ts
··· 1 + import { defineConfig } from "vite"; 2 + import solid from "vite-plugin-solid"; 3 + 4 + export default defineConfig({ 5 + plugins: [solid()], 6 + });