[WIP] A (somewhat barebones) atproto app for creating custom sites without hosting!

server: add "backfill"

- hardcoded list of backfilled data
- not connected
- doesnt even start up

Changed files
+675 -5
server
server/blobs/did:web:invalid/cat

This is a binary file and will not be displayed.

+11
server/blobs/did:web:invalid/hello
··· 1 + <!DOCTYPE html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8" /> 5 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 + <title>hi</title> 7 + </head> 8 + <body> 9 + hi 10 + </body> 11 + </html>
+19
server/blobs/did:web:invalid/root
··· 1 + <!DOCTYPE html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8" /> 5 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 + <title>did:web:invalid from cdn</title> 7 + </head> 8 + <body> 9 + this site is served from the cdn.<br /> 10 + all pages: 11 + <ul> 12 + <li><a href="404-page-here">404</a></li> 13 + <li><a href="/">::</a></li> 14 + <li><a href="/hello.html">::hello.html</a></li> 15 + <li><a href="/cat.png">::cat.png</a></li> 16 + <li><a href="/styles.css">::styles.css</a></li> 17 + </ul> 18 + </body> 19 + </html>
+3
server/blobs/did:web:invalid/styles
··· 1 + :root { 2 + color-scheme: light-dark; 3 + }
+11
server/blobs/did:web:invalid/this_is_a_cid
··· 1 + <!DOCTYPE html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8" /> 5 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 + <title>404</title> 7 + </head> 8 + <body> 9 + <h1>404</h1> 10 + </body> 11 + </html>
+7 -3
server/deno.json
··· 1 1 { 2 2 "tasks": { 3 - "dev": "deno run --watch --allow-net --allow-env --env-file src/index.ts", 4 - "lexgen": "deno run --allow-env --allow-sys --allow-read=.. --allow-write=./src/lexicons --no-prompt @atcute/lex-cli generate -c ./lex.config.js && cat ./src/lexicons/index.ts | sed \"s/.js/.ts/\" > ./src/lexicons/index.ts" 3 + "dev": "deno run --watch --allow-net --allow-env --allow-sys --allow-read=/usr/bin/ldd,./blobs --allow-write=./blobs --allow-ffi --env-file src/index.ts", 4 + "lexgen": "deno run --allow-env --allow-sys --allow-read=.. --allow-write=./src/lexicons --no-prompt @atcute/lex-cli generate -c ./lex.config.js && cat ./src/lexicons/index.ts | sed \"s/.js/.ts/\" > ./src/lexicons/index.ts", 5 + "dk": "deno run -A --node-modules-dir npm:drizzle-kit" 5 6 }, 6 7 "imports": { 7 8 "@atcute/identity-resolver": "npm:@atcute/identity-resolver@^1.1.3", 8 9 "@atcute/atproto": "npm:@atcute/atproto@^3.1.4", 9 10 "@atcute/client": "npm:@atcute/client@^4.0.3", 10 11 "@atcute/lex-cli": "npm:@atcute/lex-cli@^2.2.0", 11 - "@atcute/lexicons": "npm:@atcute/lexicons@^1.1.1" 12 + "@atcute/lexicons": "npm:@atcute/lexicons@^1.1.1", 13 + "@libsql/client": "npm:@libsql/client@^0.15.15", 14 + "drizzle-kit": "npm:drizzle-kit@^0.31.5", 15 + "drizzle-orm": "npm:drizzle-orm@^0.44.6" 12 16 }, 13 17 "unstable": ["raw-imports"] 14 18 }
+548 -2
server/deno.lock
··· 5 5 "npm:@atcute/client@^4.0.3": "4.0.3", 6 6 "npm:@atcute/identity-resolver@^1.1.3": "1.1.3_@atcute+identity@1.1.0", 7 7 "npm:@atcute/lex-cli@^2.2.0": "2.2.0_@badrap+valita@0.4.6", 8 - "npm:@atcute/lexicons@^1.1.1": "1.1.1" 8 + "npm:@atcute/lexicons@^1.1.1": "1.1.1", 9 + "npm:@libsql/client@~0.15.15": "0.15.15", 10 + "npm:drizzle-kit@*": "0.31.5_esbuild@0.25.10", 11 + "npm:drizzle-kit@~0.31.5": "0.31.5_esbuild@0.25.10", 12 + "npm:drizzle-orm@~0.44.6": "0.44.6_@libsql+client@0.15.15" 9 13 }, 10 14 "npm": { 11 15 "@atcute/atproto@3.1.4": { ··· 69 73 "@badrap/valita@0.4.6": { 70 74 "integrity": "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==" 71 75 }, 76 + "@drizzle-team/brocli@0.10.2": { 77 + "integrity": "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==" 78 + }, 79 + "@esbuild-kit/core-utils@3.3.2": { 80 + "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==", 81 + "dependencies": [ 82 + "esbuild@0.18.20", 83 + "source-map-support" 84 + ], 85 + "deprecated": true 86 + }, 87 + "@esbuild-kit/esm-loader@2.6.5": { 88 + "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==", 89 + "dependencies": [ 90 + "@esbuild-kit/core-utils", 91 + "get-tsconfig" 92 + ], 93 + "deprecated": true 94 + }, 95 + "@esbuild/aix-ppc64@0.25.10": { 96 + "integrity": "sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==", 97 + "os": ["aix"], 98 + "cpu": ["ppc64"] 99 + }, 100 + "@esbuild/android-arm64@0.18.20": { 101 + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", 102 + "os": ["android"], 103 + "cpu": ["arm64"] 104 + }, 105 + "@esbuild/android-arm64@0.25.10": { 106 + "integrity": "sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==", 107 + "os": ["android"], 108 + "cpu": ["arm64"] 109 + }, 110 + "@esbuild/android-arm@0.18.20": { 111 + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", 112 + "os": ["android"], 113 + "cpu": ["arm"] 114 + }, 115 + "@esbuild/android-arm@0.25.10": { 116 + "integrity": "sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==", 117 + "os": ["android"], 118 + "cpu": ["arm"] 119 + }, 120 + "@esbuild/android-x64@0.18.20": { 121 + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", 122 + "os": ["android"], 123 + "cpu": ["x64"] 124 + }, 125 + "@esbuild/android-x64@0.25.10": { 126 + "integrity": "sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==", 127 + "os": ["android"], 128 + "cpu": ["x64"] 129 + }, 130 + "@esbuild/darwin-arm64@0.18.20": { 131 + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", 132 + "os": ["darwin"], 133 + "cpu": ["arm64"] 134 + }, 135 + "@esbuild/darwin-arm64@0.25.10": { 136 + "integrity": "sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==", 137 + "os": ["darwin"], 138 + "cpu": ["arm64"] 139 + }, 140 + "@esbuild/darwin-x64@0.18.20": { 141 + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", 142 + "os": ["darwin"], 143 + "cpu": ["x64"] 144 + }, 145 + "@esbuild/darwin-x64@0.25.10": { 146 + "integrity": "sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==", 147 + "os": ["darwin"], 148 + "cpu": ["x64"] 149 + }, 150 + "@esbuild/freebsd-arm64@0.18.20": { 151 + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", 152 + "os": ["freebsd"], 153 + "cpu": ["arm64"] 154 + }, 155 + "@esbuild/freebsd-arm64@0.25.10": { 156 + "integrity": "sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==", 157 + "os": ["freebsd"], 158 + "cpu": ["arm64"] 159 + }, 160 + "@esbuild/freebsd-x64@0.18.20": { 161 + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", 162 + "os": ["freebsd"], 163 + "cpu": ["x64"] 164 + }, 165 + "@esbuild/freebsd-x64@0.25.10": { 166 + "integrity": "sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==", 167 + "os": ["freebsd"], 168 + "cpu": ["x64"] 169 + }, 170 + "@esbuild/linux-arm64@0.18.20": { 171 + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", 172 + "os": ["linux"], 173 + "cpu": ["arm64"] 174 + }, 175 + "@esbuild/linux-arm64@0.25.10": { 176 + "integrity": "sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==", 177 + "os": ["linux"], 178 + "cpu": ["arm64"] 179 + }, 180 + "@esbuild/linux-arm@0.18.20": { 181 + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", 182 + "os": ["linux"], 183 + "cpu": ["arm"] 184 + }, 185 + "@esbuild/linux-arm@0.25.10": { 186 + "integrity": "sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==", 187 + "os": ["linux"], 188 + "cpu": ["arm"] 189 + }, 190 + "@esbuild/linux-ia32@0.18.20": { 191 + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", 192 + "os": ["linux"], 193 + "cpu": ["ia32"] 194 + }, 195 + "@esbuild/linux-ia32@0.25.10": { 196 + "integrity": "sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==", 197 + "os": ["linux"], 198 + "cpu": ["ia32"] 199 + }, 200 + "@esbuild/linux-loong64@0.18.20": { 201 + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", 202 + "os": ["linux"], 203 + "cpu": ["loong64"] 204 + }, 205 + "@esbuild/linux-loong64@0.25.10": { 206 + "integrity": "sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==", 207 + "os": ["linux"], 208 + "cpu": ["loong64"] 209 + }, 210 + "@esbuild/linux-mips64el@0.18.20": { 211 + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", 212 + "os": ["linux"], 213 + "cpu": ["mips64el"] 214 + }, 215 + "@esbuild/linux-mips64el@0.25.10": { 216 + "integrity": "sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==", 217 + "os": ["linux"], 218 + "cpu": ["mips64el"] 219 + }, 220 + "@esbuild/linux-ppc64@0.18.20": { 221 + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", 222 + "os": ["linux"], 223 + "cpu": ["ppc64"] 224 + }, 225 + "@esbuild/linux-ppc64@0.25.10": { 226 + "integrity": "sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==", 227 + "os": ["linux"], 228 + "cpu": ["ppc64"] 229 + }, 230 + "@esbuild/linux-riscv64@0.18.20": { 231 + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", 232 + "os": ["linux"], 233 + "cpu": ["riscv64"] 234 + }, 235 + "@esbuild/linux-riscv64@0.25.10": { 236 + "integrity": "sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==", 237 + "os": ["linux"], 238 + "cpu": ["riscv64"] 239 + }, 240 + "@esbuild/linux-s390x@0.18.20": { 241 + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", 242 + "os": ["linux"], 243 + "cpu": ["s390x"] 244 + }, 245 + "@esbuild/linux-s390x@0.25.10": { 246 + "integrity": "sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==", 247 + "os": ["linux"], 248 + "cpu": ["s390x"] 249 + }, 250 + "@esbuild/linux-x64@0.18.20": { 251 + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", 252 + "os": ["linux"], 253 + "cpu": ["x64"] 254 + }, 255 + "@esbuild/linux-x64@0.25.10": { 256 + "integrity": "sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==", 257 + "os": ["linux"], 258 + "cpu": ["x64"] 259 + }, 260 + "@esbuild/netbsd-arm64@0.25.10": { 261 + "integrity": "sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==", 262 + "os": ["netbsd"], 263 + "cpu": ["arm64"] 264 + }, 265 + "@esbuild/netbsd-x64@0.18.20": { 266 + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", 267 + "os": ["netbsd"], 268 + "cpu": ["x64"] 269 + }, 270 + "@esbuild/netbsd-x64@0.25.10": { 271 + "integrity": "sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==", 272 + "os": ["netbsd"], 273 + "cpu": ["x64"] 274 + }, 275 + "@esbuild/openbsd-arm64@0.25.10": { 276 + "integrity": "sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==", 277 + "os": ["openbsd"], 278 + "cpu": ["arm64"] 279 + }, 280 + "@esbuild/openbsd-x64@0.18.20": { 281 + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", 282 + "os": ["openbsd"], 283 + "cpu": ["x64"] 284 + }, 285 + "@esbuild/openbsd-x64@0.25.10": { 286 + "integrity": "sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==", 287 + "os": ["openbsd"], 288 + "cpu": ["x64"] 289 + }, 290 + "@esbuild/openharmony-arm64@0.25.10": { 291 + "integrity": "sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==", 292 + "os": ["openharmony"], 293 + "cpu": ["arm64"] 294 + }, 295 + "@esbuild/sunos-x64@0.18.20": { 296 + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", 297 + "os": ["sunos"], 298 + "cpu": ["x64"] 299 + }, 300 + "@esbuild/sunos-x64@0.25.10": { 301 + "integrity": "sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==", 302 + "os": ["sunos"], 303 + "cpu": ["x64"] 304 + }, 305 + "@esbuild/win32-arm64@0.18.20": { 306 + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", 307 + "os": ["win32"], 308 + "cpu": ["arm64"] 309 + }, 310 + "@esbuild/win32-arm64@0.25.10": { 311 + "integrity": "sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==", 312 + "os": ["win32"], 313 + "cpu": ["arm64"] 314 + }, 315 + "@esbuild/win32-ia32@0.18.20": { 316 + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", 317 + "os": ["win32"], 318 + "cpu": ["ia32"] 319 + }, 320 + "@esbuild/win32-ia32@0.25.10": { 321 + "integrity": "sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==", 322 + "os": ["win32"], 323 + "cpu": ["ia32"] 324 + }, 325 + "@esbuild/win32-x64@0.18.20": { 326 + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", 327 + "os": ["win32"], 328 + "cpu": ["x64"] 329 + }, 330 + "@esbuild/win32-x64@0.25.10": { 331 + "integrity": "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==", 332 + "os": ["win32"], 333 + "cpu": ["x64"] 334 + }, 72 335 "@externdefs/collider@0.3.0_@badrap+valita@0.4.6": { 73 336 "integrity": "sha512-x5CpeZ4c8n+1wMFthUMWSQKqCGcQo52/Qbda5ES+JFRRg/D8Ep6/JOvUUq5HExFuv/wW+6UYG2U/mXzw0IAd8Q==", 74 337 "dependencies": [ 75 338 "@badrap/valita" 76 339 ] 77 340 }, 341 + "@libsql/client@0.15.15": { 342 + "integrity": "sha512-twC0hQxPNHPKfeOv3sNT6u2pturQjLcI+CnpTM0SjRpocEGgfiZ7DWKXLNnsothjyJmDqEsBQJ5ztq9Wlu470w==", 343 + "dependencies": [ 344 + "@libsql/core", 345 + "@libsql/hrana-client", 346 + "js-base64", 347 + "libsql", 348 + "promise-limit" 349 + ] 350 + }, 351 + "@libsql/core@0.15.15": { 352 + "integrity": "sha512-C88Z6UKl+OyuKKPwz224riz02ih/zHYI3Ho/LAcVOgjsunIRZoBw7fjRfaH9oPMmSNeQfhGklSG2il1URoOIsA==", 353 + "dependencies": [ 354 + "js-base64" 355 + ] 356 + }, 357 + "@libsql/darwin-arm64@0.5.22": { 358 + "integrity": "sha512-4B8ZlX3nIDPndfct7GNe0nI3Yw6ibocEicWdC4fvQbSs/jdq/RC2oCsoJxJ4NzXkvktX70C1J4FcmmoBy069UA==", 359 + "os": ["darwin"], 360 + "cpu": ["arm64"] 361 + }, 362 + "@libsql/darwin-x64@0.5.22": { 363 + "integrity": "sha512-ny2HYWt6lFSIdNFzUFIJ04uiW6finXfMNJ7wypkAD8Pqdm6nAByO+Fdqu8t7sD0sqJGeUCiOg480icjyQ2/8VA==", 364 + "os": ["darwin"], 365 + "cpu": ["x64"] 366 + }, 367 + "@libsql/hrana-client@0.7.0": { 368 + "integrity": "sha512-OF8fFQSkbL7vJY9rfuegK1R7sPgQ6kFMkDamiEccNUvieQ+3urzfDFI616oPl8V7T9zRmnTkSjMOImYCAVRVuw==", 369 + "dependencies": [ 370 + "@libsql/isomorphic-fetch", 371 + "@libsql/isomorphic-ws", 372 + "js-base64", 373 + "node-fetch" 374 + ] 375 + }, 376 + "@libsql/isomorphic-fetch@0.3.1": { 377 + "integrity": "sha512-6kK3SUK5Uu56zPq/Las620n5aS9xJq+jMBcNSOmjhNf/MUvdyji4vrMTqD7ptY7/4/CAVEAYDeotUz60LNQHtw==" 378 + }, 379 + "@libsql/isomorphic-ws@0.1.5": { 380 + "integrity": "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==", 381 + "dependencies": [ 382 + "@types/ws", 383 + "ws" 384 + ] 385 + }, 386 + "@libsql/linux-arm-gnueabihf@0.5.22": { 387 + "integrity": "sha512-3Uo3SoDPJe/zBnyZKosziRGtszXaEtv57raWrZIahtQDsjxBVjuzYQinCm9LRCJCUT5t2r5Z5nLDPJi2CwZVoA==", 388 + "os": ["linux"], 389 + "cpu": ["arm"] 390 + }, 391 + "@libsql/linux-arm-musleabihf@0.5.22": { 392 + "integrity": "sha512-LCsXh07jvSojTNJptT9CowOzwITznD+YFGGW+1XxUr7fS+7/ydUrpDfsMX7UqTqjm7xG17eq86VkWJgHJfvpNg==", 393 + "os": ["linux"], 394 + "cpu": ["arm"] 395 + }, 396 + "@libsql/linux-arm64-gnu@0.5.22": { 397 + "integrity": "sha512-KSdnOMy88c9mpOFKUEzPskSaF3VLflfSUCBwas/pn1/sV3pEhtMF6H8VUCd2rsedwoukeeCSEONqX7LLnQwRMA==", 398 + "os": ["linux"], 399 + "cpu": ["arm64"] 400 + }, 401 + "@libsql/linux-arm64-musl@0.5.22": { 402 + "integrity": "sha512-mCHSMAsDTLK5YH//lcV3eFEgiR23Ym0U9oEvgZA0667gqRZg/2px+7LshDvErEKv2XZ8ixzw3p1IrBzLQHGSsw==", 403 + "os": ["linux"], 404 + "cpu": ["arm64"] 405 + }, 406 + "@libsql/linux-x64-gnu@0.5.22": { 407 + "integrity": "sha512-kNBHaIkSg78Y4BqAdgjcR2mBilZXs4HYkAmi58J+4GRwDQZh5fIUWbnQvB9f95DkWUIGVeenqLRFY2pcTmlsew==", 408 + "os": ["linux"], 409 + "cpu": ["x64"] 410 + }, 411 + "@libsql/linux-x64-musl@0.5.22": { 412 + "integrity": "sha512-UZ4Xdxm4pu3pQXjvfJiyCzZop/9j/eA2JjmhMaAhe3EVLH2g11Fy4fwyUp9sT1QJYR1kpc2JLuybPM0kuXv/Tg==", 413 + "os": ["linux"], 414 + "cpu": ["x64"] 415 + }, 416 + "@libsql/win32-x64-msvc@0.5.22": { 417 + "integrity": "sha512-Fj0j8RnBpo43tVZUVoNK6BV/9AtDUM5S7DF3LB4qTYg1LMSZqi3yeCneUTLJD6XomQJlZzbI4mst89yspVSAnA==", 418 + "os": ["win32"], 419 + "cpu": ["x64"] 420 + }, 421 + "@neon-rs/load@0.0.4": { 422 + "integrity": "sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==" 423 + }, 424 + "@types/node@24.2.0": { 425 + "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", 426 + "dependencies": [ 427 + "undici-types" 428 + ] 429 + }, 430 + "@types/ws@8.18.1": { 431 + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", 432 + "dependencies": [ 433 + "@types/node" 434 + ] 435 + }, 436 + "buffer-from@1.1.2": { 437 + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" 438 + }, 439 + "data-uri-to-buffer@4.0.1": { 440 + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" 441 + }, 442 + "debug@4.4.3": { 443 + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 444 + "dependencies": [ 445 + "ms" 446 + ] 447 + }, 448 + "detect-libc@2.0.2": { 449 + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==" 450 + }, 451 + "drizzle-kit@0.31.5_esbuild@0.25.10": { 452 + "integrity": "sha512-+CHgPFzuoTQTt7cOYCV6MOw2w8vqEn/ap1yv4bpZOWL03u7rlVRQhUY0WYT3rHsgVTXwYQDZaSUJSQrMBUKuWg==", 453 + "dependencies": [ 454 + "@drizzle-team/brocli", 455 + "@esbuild-kit/esm-loader", 456 + "esbuild@0.25.10", 457 + "esbuild-register" 458 + ], 459 + "bin": true 460 + }, 461 + "drizzle-orm@0.44.6_@libsql+client@0.15.15": { 462 + "integrity": "sha512-uy6uarrrEOc9K1u5/uhBFJbdF5VJ5xQ/Yzbecw3eAYOunv5FDeYkR2m8iitocdHBOHbvorviKOW5GVw0U1j4LQ==", 463 + "dependencies": [ 464 + "@libsql/client" 465 + ], 466 + "optionalPeers": [ 467 + "@libsql/client" 468 + ] 469 + }, 470 + "esbuild-register@3.6.0_esbuild@0.25.10": { 471 + "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", 472 + "dependencies": [ 473 + "debug", 474 + "esbuild@0.25.10" 475 + ] 476 + }, 477 + "esbuild@0.18.20": { 478 + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", 479 + "optionalDependencies": [ 480 + "@esbuild/android-arm@0.18.20", 481 + "@esbuild/android-arm64@0.18.20", 482 + "@esbuild/android-x64@0.18.20", 483 + "@esbuild/darwin-arm64@0.18.20", 484 + "@esbuild/darwin-x64@0.18.20", 485 + "@esbuild/freebsd-arm64@0.18.20", 486 + "@esbuild/freebsd-x64@0.18.20", 487 + "@esbuild/linux-arm@0.18.20", 488 + "@esbuild/linux-arm64@0.18.20", 489 + "@esbuild/linux-ia32@0.18.20", 490 + "@esbuild/linux-loong64@0.18.20", 491 + "@esbuild/linux-mips64el@0.18.20", 492 + "@esbuild/linux-ppc64@0.18.20", 493 + "@esbuild/linux-riscv64@0.18.20", 494 + "@esbuild/linux-s390x@0.18.20", 495 + "@esbuild/linux-x64@0.18.20", 496 + "@esbuild/netbsd-x64@0.18.20", 497 + "@esbuild/openbsd-x64@0.18.20", 498 + "@esbuild/sunos-x64@0.18.20", 499 + "@esbuild/win32-arm64@0.18.20", 500 + "@esbuild/win32-ia32@0.18.20", 501 + "@esbuild/win32-x64@0.18.20" 502 + ], 503 + "scripts": true, 504 + "bin": true 505 + }, 506 + "esbuild@0.25.10": { 507 + "integrity": "sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==", 508 + "optionalDependencies": [ 509 + "@esbuild/aix-ppc64", 510 + "@esbuild/android-arm@0.25.10", 511 + "@esbuild/android-arm64@0.25.10", 512 + "@esbuild/android-x64@0.25.10", 513 + "@esbuild/darwin-arm64@0.25.10", 514 + "@esbuild/darwin-x64@0.25.10", 515 + "@esbuild/freebsd-arm64@0.25.10", 516 + "@esbuild/freebsd-x64@0.25.10", 517 + "@esbuild/linux-arm@0.25.10", 518 + "@esbuild/linux-arm64@0.25.10", 519 + "@esbuild/linux-ia32@0.25.10", 520 + "@esbuild/linux-loong64@0.25.10", 521 + "@esbuild/linux-mips64el@0.25.10", 522 + "@esbuild/linux-ppc64@0.25.10", 523 + "@esbuild/linux-riscv64@0.25.10", 524 + "@esbuild/linux-s390x@0.25.10", 525 + "@esbuild/linux-x64@0.25.10", 526 + "@esbuild/netbsd-arm64", 527 + "@esbuild/netbsd-x64@0.25.10", 528 + "@esbuild/openbsd-arm64", 529 + "@esbuild/openbsd-x64@0.25.10", 530 + "@esbuild/openharmony-arm64", 531 + "@esbuild/sunos-x64@0.25.10", 532 + "@esbuild/win32-arm64@0.25.10", 533 + "@esbuild/win32-ia32@0.25.10", 534 + "@esbuild/win32-x64@0.25.10" 535 + ], 536 + "scripts": true, 537 + "bin": true 538 + }, 78 539 "esm-env@1.2.2": { 79 540 "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==" 80 541 }, 542 + "fetch-blob@3.2.0": { 543 + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", 544 + "dependencies": [ 545 + "node-domexception", 546 + "web-streams-polyfill" 547 + ] 548 + }, 549 + "formdata-polyfill@4.0.10": { 550 + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", 551 + "dependencies": [ 552 + "fetch-blob" 553 + ] 554 + }, 555 + "get-tsconfig@4.10.1": { 556 + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", 557 + "dependencies": [ 558 + "resolve-pkg-maps" 559 + ] 560 + }, 561 + "js-base64@3.7.8": { 562 + "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==" 563 + }, 564 + "libsql@0.5.22": { 565 + "integrity": "sha512-NscWthMQt7fpU8lqd7LXMvT9pi+KhhmTHAJWUB/Lj6MWa0MKFv0F2V4C6WKKpjCVZl0VwcDz4nOI3CyaT1DDiA==", 566 + "dependencies": [ 567 + "@neon-rs/load", 568 + "detect-libc" 569 + ], 570 + "optionalDependencies": [ 571 + "@libsql/darwin-arm64", 572 + "@libsql/darwin-x64", 573 + "@libsql/linux-arm-gnueabihf", 574 + "@libsql/linux-arm-musleabihf", 575 + "@libsql/linux-arm64-gnu", 576 + "@libsql/linux-arm64-musl", 577 + "@libsql/linux-x64-gnu", 578 + "@libsql/linux-x64-musl", 579 + "@libsql/win32-x64-msvc" 580 + ], 581 + "os": ["darwin", "linux", "win32"], 582 + "cpu": ["x64", "arm64", "wasm32", "arm"] 583 + }, 584 + "ms@2.1.3": { 585 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 586 + }, 587 + "node-domexception@1.0.0": { 588 + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", 589 + "deprecated": true 590 + }, 591 + "node-fetch@3.3.2": { 592 + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", 593 + "dependencies": [ 594 + "data-uri-to-buffer", 595 + "fetch-blob", 596 + "formdata-polyfill" 597 + ] 598 + }, 81 599 "picocolors@1.1.1": { 82 600 "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" 83 601 }, 84 602 "prettier@3.6.2": { 85 603 "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", 86 604 "bin": true 605 + }, 606 + "promise-limit@2.7.0": { 607 + "integrity": "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw==" 608 + }, 609 + "resolve-pkg-maps@1.0.0": { 610 + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==" 611 + }, 612 + "source-map-support@0.5.21": { 613 + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 614 + "dependencies": [ 615 + "buffer-from", 616 + "source-map" 617 + ] 618 + }, 619 + "source-map@0.6.1": { 620 + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" 621 + }, 622 + "undici-types@7.10.0": { 623 + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==" 624 + }, 625 + "web-streams-polyfill@3.3.3": { 626 + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==" 627 + }, 628 + "ws@8.18.3": { 629 + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==" 87 630 } 88 631 }, 89 632 "workspace": { ··· 92 635 "npm:@atcute/client@^4.0.3", 93 636 "npm:@atcute/identity-resolver@^1.1.3", 94 637 "npm:@atcute/lex-cli@^2.2.0", 95 - "npm:@atcute/lexicons@^1.1.1" 638 + "npm:@atcute/lexicons@^1.1.1", 639 + "npm:@libsql/client@~0.15.15", 640 + "npm:drizzle-kit@~0.31.5", 641 + "npm:drizzle-orm@~0.44.6" 96 642 ] 97 643 } 98 644 }
+10
server/drizzle.config.ts
··· 1 + import { defineConfig } from "drizzle-kit"; 2 + 3 + export default defineConfig({ 4 + out: "./drizzle", 5 + schema: "./src/db/schema.ts", 6 + dialect: "sqlite", 7 + dbCredentials: { 8 + url: Deno.env.get("DB_FILE_NAME")!, 9 + }, 10 + });
+57
server/src/backfill.ts
··· 1 + import { drizzle } from "drizzle-orm/libsql"; 2 + import { routes } from "./db/schema.ts"; 3 + import * as schema from "./db/schema.ts"; 4 + import { db as db_type } from "./types.ts"; 5 + 6 + const db = drizzle<typeof schema>(Deno.env.get("DB_FILE_NAME")!); 7 + 8 + export default async function main(): Promise<db_type> { 9 + await db.delete(routes); 10 + try { 11 + // await Deno.remove("./blobs", { recursive: true }); 12 + } catch { 13 + // directory doesnt exist 14 + } 15 + 16 + await [ 17 + { 18 + did: "did:web:invalid", 19 + url_route: "404", 20 + blob_cid: "this_is_a_cid", 21 + mime: "text/html", 22 + }, 23 + { 24 + did: "did:web:invalid", 25 + url_route: "/", 26 + blob_cid: "root", 27 + mime: "text/html", 28 + }, 29 + { 30 + did: "did:web:invalid", 31 + url_route: "/hello.html", 32 + blob_cid: "hello", 33 + mime: "text/html", 34 + }, 35 + { 36 + did: "did:web:invalid", 37 + url_route: "/cat.png", 38 + blob_cid: "cat", 39 + mime: "image/png", 40 + }, 41 + { 42 + did: "did:web:invalid", 43 + url_route: "/styles.css", 44 + blob_cid: "styles", 45 + mime: "text/css", 46 + }, 47 + { 48 + did: "did:web:invalid", 49 + url_route: "/missing", 50 + blob_cid: "doesnt_exit", 51 + mime: "text/json", 52 + }, 53 + ].forEach(async (x) => await db.insert(routes).values(x)); 54 + 55 + // we only return the db when its ready 56 + return db; 57 + }
+9
server/src/db/schema.ts
··· 1 + import { int, sqliteTable, text } from "drizzle-orm/sqlite-core"; 2 + 3 + export const routes = sqliteTable("routes", { 4 + id: int("id").primaryKey({ autoIncrement: true }), 5 + did: text("did").notNull(), 6 + url_route: text("url_route").notNull(), 7 + blob_cid: text("blob_cid").notNull(), 8 + mime: text("mime").notNull(), 9 + });