an attempt to make a lightweight, easily self-hostable, scoped bluesky appview

docsify docs init

rimar1337 bcd5eba6 1591db48

+8
.env
··· 7 7 # i dont actually know why i need this 8 8 SLINGSHOT_URL="https://slingshot.whey.party" 9 9 10 + # bools 11 + INDEX_SERVER_ENABLED=true 12 + INDEX_SERVER_INVITES_REQUIRED=true 13 + 14 + VIEW_SERVER_ENABLED=true 15 + INDEX_SERVER_INVITES_REQUIRED=true 16 + 17 + # this is for both index and view server btw 10 18 SERVICE_DID="did:web:local3768forumtest.whey.party" 11 19 SERVICE_ENDPOINT="https://local3768forumtest.whey.party" 12 20 SERVER_PORT="3768"
+5
.gitignore
··· 1 1 whatever.db 2 + system.db 2 3 **/.DS_Store 4 + docs/.vite/deps/_metadata.json 5 + docs/.vite/deps/package.json 6 + indexserver.ts 7 + .gitignore
+1300 -9
deno.lock
··· 15 15 "jsr:@std/path@^1.1.1": "1.1.1", 16 16 "npm:@atproto/api@*": "0.15.12", 17 17 "npm:@atproto/identity@*": "0.4.8", 18 + "npm:@atproto/lex-cli@*": "0.9.1", 18 19 "npm:@atproto/lexicon@*": "0.4.11", 19 20 "npm:@atproto/xrpc-server@*": "0.9.1", 20 21 "npm:@ipld/car@*": "5.4.2", ··· 23 24 "npm:@types/node@*": "22.15.15", 24 25 "npm:did-jwt@*": "8.0.17", 25 26 "npm:did-resolver@*": "4.1.0", 27 + "npm:docsify-cli@*": "4.4.4", 26 28 "npm:express@*": "5.1.0", 27 29 "npm:ky@*": "1.8.1", 28 30 "npm:multiformats@*": "13.4.0", 29 31 "npm:quick-lru@*": "7.0.1", 32 + "npm:vite@*": "7.1.3_@types+node@22.15.15_picomatch@4.0.3", 30 33 "npm:web-did-resolver@*": "2.0.30" 31 34 }, 32 35 "jsr": { ··· 133 136 "@atproto/crypto" 134 137 ] 135 138 }, 139 + "@atproto/lex-cli@0.9.1": { 140 + "integrity": "sha512-ftcUZd8rElHeUJq6pTcQkURnTEe7woCF4I1NK3j5GpT/itacEZtcppabjy5o2aUsbktZsALj3ch3xm7ZZ+Zp0w==", 141 + "dependencies": [ 142 + "@atproto/lexicon@0.4.12", 143 + "@atproto/syntax", 144 + "chalk@4.1.2", 145 + "commander", 146 + "prettier", 147 + "ts-morph", 148 + "yesno", 149 + "zod" 150 + ], 151 + "bin": true 152 + }, 136 153 "@atproto/lexicon@0.4.11": { 137 154 "integrity": "sha512-btefdnvNz2Ao2I+qbmj0F06HC8IlrM/IBz6qOBS50r0S6uDf5tOO+Mv2tSVdimFkdzyDdLtBI1sV36ONxz2cOw==", 138 155 "dependencies": [ ··· 169 186 "mime-types@2.1.35", 170 187 "rate-limiter-flexible", 171 188 "uint8arrays@3.0.0", 172 - "ws", 189 + "ws@8.18.3", 173 190 "zod" 174 191 ] 175 192 }, ··· 217 234 "os": ["win32"], 218 235 "cpu": ["x64"] 219 236 }, 237 + "@esbuild/aix-ppc64@0.25.9": { 238 + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", 239 + "os": ["aix"], 240 + "cpu": ["ppc64"] 241 + }, 242 + "@esbuild/android-arm64@0.25.9": { 243 + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", 244 + "os": ["android"], 245 + "cpu": ["arm64"] 246 + }, 247 + "@esbuild/android-arm@0.25.9": { 248 + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", 249 + "os": ["android"], 250 + "cpu": ["arm"] 251 + }, 252 + "@esbuild/android-x64@0.25.9": { 253 + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", 254 + "os": ["android"], 255 + "cpu": ["x64"] 256 + }, 257 + "@esbuild/darwin-arm64@0.25.9": { 258 + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", 259 + "os": ["darwin"], 260 + "cpu": ["arm64"] 261 + }, 262 + "@esbuild/darwin-x64@0.25.9": { 263 + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", 264 + "os": ["darwin"], 265 + "cpu": ["x64"] 266 + }, 267 + "@esbuild/freebsd-arm64@0.25.9": { 268 + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", 269 + "os": ["freebsd"], 270 + "cpu": ["arm64"] 271 + }, 272 + "@esbuild/freebsd-x64@0.25.9": { 273 + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", 274 + "os": ["freebsd"], 275 + "cpu": ["x64"] 276 + }, 277 + "@esbuild/linux-arm64@0.25.9": { 278 + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", 279 + "os": ["linux"], 280 + "cpu": ["arm64"] 281 + }, 282 + "@esbuild/linux-arm@0.25.9": { 283 + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", 284 + "os": ["linux"], 285 + "cpu": ["arm"] 286 + }, 287 + "@esbuild/linux-ia32@0.25.9": { 288 + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", 289 + "os": ["linux"], 290 + "cpu": ["ia32"] 291 + }, 292 + "@esbuild/linux-loong64@0.25.9": { 293 + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", 294 + "os": ["linux"], 295 + "cpu": ["loong64"] 296 + }, 297 + "@esbuild/linux-mips64el@0.25.9": { 298 + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", 299 + "os": ["linux"], 300 + "cpu": ["mips64el"] 301 + }, 302 + "@esbuild/linux-ppc64@0.25.9": { 303 + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", 304 + "os": ["linux"], 305 + "cpu": ["ppc64"] 306 + }, 307 + "@esbuild/linux-riscv64@0.25.9": { 308 + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", 309 + "os": ["linux"], 310 + "cpu": ["riscv64"] 311 + }, 312 + "@esbuild/linux-s390x@0.25.9": { 313 + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", 314 + "os": ["linux"], 315 + "cpu": ["s390x"] 316 + }, 317 + "@esbuild/linux-x64@0.25.9": { 318 + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", 319 + "os": ["linux"], 320 + "cpu": ["x64"] 321 + }, 322 + "@esbuild/netbsd-arm64@0.25.9": { 323 + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", 324 + "os": ["netbsd"], 325 + "cpu": ["arm64"] 326 + }, 327 + "@esbuild/netbsd-x64@0.25.9": { 328 + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", 329 + "os": ["netbsd"], 330 + "cpu": ["x64"] 331 + }, 332 + "@esbuild/openbsd-arm64@0.25.9": { 333 + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", 334 + "os": ["openbsd"], 335 + "cpu": ["arm64"] 336 + }, 337 + "@esbuild/openbsd-x64@0.25.9": { 338 + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", 339 + "os": ["openbsd"], 340 + "cpu": ["x64"] 341 + }, 342 + "@esbuild/openharmony-arm64@0.25.9": { 343 + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", 344 + "os": ["openharmony"], 345 + "cpu": ["arm64"] 346 + }, 347 + "@esbuild/sunos-x64@0.25.9": { 348 + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", 349 + "os": ["sunos"], 350 + "cpu": ["x64"] 351 + }, 352 + "@esbuild/win32-arm64@0.25.9": { 353 + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", 354 + "os": ["win32"], 355 + "cpu": ["arm64"] 356 + }, 357 + "@esbuild/win32-ia32@0.25.9": { 358 + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", 359 + "os": ["win32"], 360 + "cpu": ["ia32"] 361 + }, 362 + "@esbuild/win32-x64@0.25.9": { 363 + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", 364 + "os": ["win32"], 365 + "cpu": ["x64"] 366 + }, 220 367 "@ipld/car@5.4.2": { 221 368 "integrity": "sha512-gfyrJvePyXnh2Fbj8mPg4JYvEZ3izhk8C9WgAle7xIYbrJNSXmNQ6BxAls8Gof97vvGbCROdxbTWRmHJtTCbcg==", 222 369 "dependencies": [ ··· 255 402 "@noble/hashes@1.8.0": { 256 403 "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==" 257 404 }, 405 + "@rollup/rollup-android-arm-eabi@4.46.4": { 406 + "integrity": "sha512-B2wfzCJ+ps/OBzRjeds7DlJumCU3rXMxJJS1vzURyj7+KBHGONm7c9q1TfdBl4vCuNMkDvARn3PBl2wZzuR5mw==", 407 + "os": ["android"], 408 + "cpu": ["arm"] 409 + }, 410 + "@rollup/rollup-android-arm64@4.46.4": { 411 + "integrity": "sha512-FGJYXvYdn8Bs6lAlBZYT5n+4x0ciEp4cmttsvKAZc/c8/JiPaQK8u0c/86vKX8lA7OY/+37lIQSe0YoAImvBAA==", 412 + "os": ["android"], 413 + "cpu": ["arm64"] 414 + }, 415 + "@rollup/rollup-darwin-arm64@4.46.4": { 416 + "integrity": "sha512-/9qwE/BM7ATw/W/OFEMTm3dmywbJyLQb4f4v5nmOjgYxPIGpw7HaxRi6LnD4Pjn/q7k55FGeHe1/OD02w63apA==", 417 + "os": ["darwin"], 418 + "cpu": ["arm64"] 419 + }, 420 + "@rollup/rollup-darwin-x64@4.46.4": { 421 + "integrity": "sha512-QkWfNbeRuzFnv2d0aPlrzcA3Ebq2mE8kX/5Pl7VdRShbPBjSnom7dbT8E3Jmhxo2RL784hyqGvR5KHavCJQciw==", 422 + "os": ["darwin"], 423 + "cpu": ["x64"] 424 + }, 425 + "@rollup/rollup-freebsd-arm64@4.46.4": { 426 + "integrity": "sha512-+ToyOMYnSfV8D+ckxO6NthPln/PDNp1P6INcNypfZ7muLmEvPKXqduUiD8DlJpMMT8LxHcE5W0dK9kXfJke9Zw==", 427 + "os": ["freebsd"], 428 + "cpu": ["arm64"] 429 + }, 430 + "@rollup/rollup-freebsd-x64@4.46.4": { 431 + "integrity": "sha512-cGT6ey/W+sje6zywbLiqmkfkO210FgRz7tepWAzzEVgQU8Hn91JJmQWNqs55IuglG8sJdzk7XfNgmGRtcYlo1w==", 432 + "os": ["freebsd"], 433 + "cpu": ["x64"] 434 + }, 435 + "@rollup/rollup-linux-arm-gnueabihf@4.46.4": { 436 + "integrity": "sha512-9fhTJyOb275w5RofPSl8lpr4jFowd+H4oQKJ9XTYzD1JWgxdZKE8bA6d4npuiMemkecQOcigX01FNZNCYnQBdA==", 437 + "os": ["linux"], 438 + "cpu": ["arm"] 439 + }, 440 + "@rollup/rollup-linux-arm-musleabihf@4.46.4": { 441 + "integrity": "sha512-+6kCIM5Zjvz2HwPl/udgVs07tPMIp1VU2Y0c72ezjOvSvEfAIWsUgpcSDvnC7g9NrjYR6X9bZT92mZZ90TfvXw==", 442 + "os": ["linux"], 443 + "cpu": ["arm"] 444 + }, 445 + "@rollup/rollup-linux-arm64-gnu@4.46.4": { 446 + "integrity": "sha512-SWuXdnsayCZL4lXoo6jn0yyAj7TTjWE4NwDVt9s7cmu6poMhtiras5c8h6Ih6Y0Zk6Z+8t/mLumvpdSPTWub2Q==", 447 + "os": ["linux"], 448 + "cpu": ["arm64"] 449 + }, 450 + "@rollup/rollup-linux-arm64-musl@4.46.4": { 451 + "integrity": "sha512-vDknMDqtMhrrroa5kyX6tuC0aRZZlQ+ipDfbXd2YGz5HeV2t8HOl/FDAd2ynhs7Ki5VooWiiZcCtxiZ4IjqZwQ==", 452 + "os": ["linux"], 453 + "cpu": ["arm64"] 454 + }, 455 + "@rollup/rollup-linux-loongarch64-gnu@4.46.4": { 456 + "integrity": "sha512-mCBkjRZWhvjtl/x+Bd4fQkWZT8canStKDxGrHlBiTnZmJnWygGcvBylzLVCZXka4dco5ymkWhZlLwKCGFF4ivw==", 457 + "os": ["linux"], 458 + "cpu": ["loong64"] 459 + }, 460 + "@rollup/rollup-linux-ppc64-gnu@4.46.4": { 461 + "integrity": "sha512-YMdz2phOTFF+Z66dQfGf0gmeDSi5DJzY5bpZyeg9CPBkV9QDzJ1yFRlmi/j7WWRf3hYIWrOaJj5jsfwgc8GTHQ==", 462 + "os": ["linux"], 463 + "cpu": ["ppc64"] 464 + }, 465 + "@rollup/rollup-linux-riscv64-gnu@4.46.4": { 466 + "integrity": "sha512-r0WKLSfFAK8ucG024v2yiLSJMedoWvk8yWqfNICX28NHDGeu3F/wBf8KG6mclghx4FsLePxJr/9N8rIj1PtCnw==", 467 + "os": ["linux"], 468 + "cpu": ["riscv64"] 469 + }, 470 + "@rollup/rollup-linux-riscv64-musl@4.46.4": { 471 + "integrity": "sha512-IaizpPP2UQU3MNyPH1u0Xxbm73D+4OupL0bjo4Hm0496e2wg3zuvoAIhubkD1NGy9fXILEExPQy87mweujEatA==", 472 + "os": ["linux"], 473 + "cpu": ["riscv64"] 474 + }, 475 + "@rollup/rollup-linux-s390x-gnu@4.46.4": { 476 + "integrity": "sha512-aCM29orANR0a8wk896p6UEgIfupReupnmISz6SUwMIwTGaTI8MuKdE0OD2LvEg8ondDyZdMvnaN3bW4nFbATPA==", 477 + "os": ["linux"], 478 + "cpu": ["s390x"] 479 + }, 480 + "@rollup/rollup-linux-x64-gnu@4.46.4": { 481 + "integrity": "sha512-0Xj1vZE3cbr/wda8d/m+UeuSL+TDpuozzdD4QaSzu/xSOMK0Su5RhIkF7KVHFQsobemUNHPLEcYllL7ZTCP/Cg==", 482 + "os": ["linux"], 483 + "cpu": ["x64"] 484 + }, 485 + "@rollup/rollup-linux-x64-musl@4.46.4": { 486 + "integrity": "sha512-kM/orjpolfA5yxsx84kI6bnK47AAZuWxglGKcNmokw2yy9i5eHY5UAjcX45jemTJnfHAWo3/hOoRqEeeTdL5hw==", 487 + "os": ["linux"], 488 + "cpu": ["x64"] 489 + }, 490 + "@rollup/rollup-win32-arm64-msvc@4.46.4": { 491 + "integrity": "sha512-cNLH4psMEsWKILW0isbpQA2OvjXLbKvnkcJFmqAptPQbtLrobiapBJVj6RoIvg6UXVp5w0wnIfd/Q56cNpF+Ew==", 492 + "os": ["win32"], 493 + "cpu": ["arm64"] 494 + }, 495 + "@rollup/rollup-win32-ia32-msvc@4.46.4": { 496 + "integrity": "sha512-OiEa5lRhiANpv4SfwYVgQ3opYWi/QmPDC5ve21m8G9pf6ZO+aX1g2EEF1/IFaM1xPSP7mK0msTRXlPs6mIagkg==", 497 + "os": ["win32"], 498 + "cpu": ["ia32"] 499 + }, 500 + "@rollup/rollup-win32-x64-msvc@4.46.4": { 501 + "integrity": "sha512-IKL9mewGZ5UuuX4NQlwOmxPyqielvkAPUS2s1cl6yWjjQvyN3h5JTdVFGD5Jr5xMjRC8setOfGQDVgX8V+dkjg==", 502 + "os": ["win32"], 503 + "cpu": ["x64"] 504 + }, 258 505 "@scure/base@1.2.6": { 259 506 "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==" 260 507 }, 508 + "@sindresorhus/is@0.14.0": { 509 + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" 510 + }, 511 + "@szmarczak/http-timer@1.1.2": { 512 + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 513 + "dependencies": [ 514 + "defer-to-connect" 515 + ] 516 + }, 517 + "@ts-morph/common@0.25.0": { 518 + "integrity": "sha512-kMnZz+vGGHi4GoHnLmMhGNjm44kGtKUXGnOvrKmMwAuvNjM/PgKVGfUnL7IDvK7Jb2QQ82jq3Zmp04Gy+r3Dkg==", 519 + "dependencies": [ 520 + "minimatch", 521 + "path-browserify", 522 + "tinyglobby" 523 + ] 524 + }, 261 525 "@types/body-parser@1.19.6": { 262 526 "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", 263 527 "dependencies": [ ··· 270 534 "dependencies": [ 271 535 "@types/node" 272 536 ] 537 + }, 538 + "@types/estree@1.0.8": { 539 + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" 273 540 }, 274 541 "@types/express-serve-static-core@4.19.6": { 275 542 "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", ··· 342 609 "negotiator@1.0.0" 343 610 ] 344 611 }, 612 + "ansi-align@3.0.1": { 613 + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", 614 + "dependencies": [ 615 + "string-width" 616 + ] 617 + }, 618 + "ansi-colors@4.1.3": { 619 + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" 620 + }, 621 + "ansi-regex@2.1.1": { 622 + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" 623 + }, 624 + "ansi-regex@5.0.1": { 625 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 626 + }, 627 + "ansi-styles@2.2.1": { 628 + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" 629 + }, 630 + "ansi-styles@3.2.1": { 631 + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 632 + "dependencies": [ 633 + "color-convert@1.9.3" 634 + ] 635 + }, 636 + "ansi-styles@4.3.0": { 637 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 638 + "dependencies": [ 639 + "color-convert@2.0.1" 640 + ] 641 + }, 642 + "anymatch@3.1.3": { 643 + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 644 + "dependencies": [ 645 + "normalize-path", 646 + "picomatch@2.3.1" 647 + ] 648 + }, 345 649 "array-flatten@1.1.1": { 346 650 "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 347 651 }, ··· 351 655 "await-lock@2.2.2": { 352 656 "integrity": "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==" 353 657 }, 658 + "balanced-match@1.0.2": { 659 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 660 + }, 354 661 "base64-js@1.5.1": { 355 662 "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 663 + }, 664 + "binary-extensions@2.3.0": { 665 + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==" 356 666 }, 357 667 "body-parser@1.20.3": { 358 668 "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", ··· 364 674 "destroy", 365 675 "http-errors", 366 676 "iconv-lite@0.4.24", 367 - "on-finished", 677 + "on-finished@2.4.1", 368 678 "qs@6.13.0", 369 679 "raw-body@2.5.2", 370 680 "type-is@1.6.18", ··· 379 689 "debug@4.4.1", 380 690 "http-errors", 381 691 "iconv-lite@0.6.3", 382 - "on-finished", 692 + "on-finished@2.4.1", 383 693 "qs@6.14.0", 384 694 "raw-body@3.0.0", 385 695 "type-is@2.0.1" 386 696 ] 387 697 }, 698 + "boxen@4.2.0": { 699 + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", 700 + "dependencies": [ 701 + "ansi-align", 702 + "camelcase", 703 + "chalk@3.0.0", 704 + "cli-boxes", 705 + "string-width", 706 + "term-size", 707 + "type-fest", 708 + "widest-line" 709 + ] 710 + }, 711 + "brace-expansion@2.0.2": { 712 + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 713 + "dependencies": [ 714 + "balanced-match" 715 + ] 716 + }, 717 + "braces@3.0.3": { 718 + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 719 + "dependencies": [ 720 + "fill-range" 721 + ] 722 + }, 388 723 "buffer@6.0.3": { 389 724 "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", 390 725 "dependencies": [ ··· 395 730 "bytes@3.1.2": { 396 731 "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 397 732 }, 733 + "cacheable-request@6.1.0": { 734 + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 735 + "dependencies": [ 736 + "clone-response", 737 + "get-stream@5.2.0", 738 + "http-cache-semantics", 739 + "keyv", 740 + "lowercase-keys@2.0.0", 741 + "normalize-url", 742 + "responselike" 743 + ] 744 + }, 398 745 "call-bind-apply-helpers@1.0.2": { 399 746 "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 400 747 "dependencies": [ ··· 408 755 "call-bind-apply-helpers", 409 756 "get-intrinsic" 410 757 ] 758 + }, 759 + "camelcase@5.3.1": { 760 + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" 411 761 }, 412 762 "canonicalize@2.1.0": { 413 763 "integrity": "sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==", ··· 443 793 "integrity": "sha512-7gs3iaqtsD9OHowgqzc6ixQGwSBONqosVR2co0Bg0pARgrLap+LCcEIXJuuIz2jHy0WWQeDMFPEsU2r17I2XPQ==", 444 794 "bin": true 445 795 }, 796 + "chalk@1.1.3": { 797 + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", 798 + "dependencies": [ 799 + "ansi-styles@2.2.1", 800 + "escape-string-regexp", 801 + "has-ansi", 802 + "strip-ansi@3.0.1", 803 + "supports-color@2.0.0" 804 + ] 805 + }, 806 + "chalk@2.4.2": { 807 + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 808 + "dependencies": [ 809 + "ansi-styles@3.2.1", 810 + "escape-string-regexp", 811 + "supports-color@5.5.0" 812 + ] 813 + }, 814 + "chalk@3.0.0": { 815 + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 816 + "dependencies": [ 817 + "ansi-styles@4.3.0", 818 + "supports-color@7.2.0" 819 + ] 820 + }, 821 + "chalk@4.1.2": { 822 + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 823 + "dependencies": [ 824 + "ansi-styles@4.3.0", 825 + "supports-color@7.2.0" 826 + ] 827 + }, 828 + "chokidar@3.6.0": { 829 + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 830 + "dependencies": [ 831 + "anymatch", 832 + "braces", 833 + "glob-parent", 834 + "is-binary-path", 835 + "is-glob", 836 + "normalize-path", 837 + "readdirp" 838 + ], 839 + "optionalDependencies": [ 840 + "fsevents" 841 + ] 842 + }, 843 + "ci-info@2.0.0": { 844 + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" 845 + }, 846 + "cli-boxes@2.2.1": { 847 + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" 848 + }, 849 + "cliui@6.0.0": { 850 + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", 851 + "dependencies": [ 852 + "string-width", 853 + "strip-ansi@6.0.1", 854 + "wrap-ansi" 855 + ] 856 + }, 857 + "clone-response@1.0.3": { 858 + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 859 + "dependencies": [ 860 + "mimic-response" 861 + ] 862 + }, 863 + "code-block-writer@13.0.3": { 864 + "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==" 865 + }, 866 + "color-convert@1.9.3": { 867 + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 868 + "dependencies": [ 869 + "color-name@1.1.3" 870 + ] 871 + }, 872 + "color-convert@2.0.1": { 873 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 874 + "dependencies": [ 875 + "color-name@1.1.4" 876 + ] 877 + }, 878 + "color-name@1.1.3": { 879 + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 880 + }, 881 + "color-name@1.1.4": { 882 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 883 + }, 884 + "commander@9.5.0": { 885 + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==" 886 + }, 887 + "configstore@5.0.1": { 888 + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", 889 + "dependencies": [ 890 + "dot-prop", 891 + "graceful-fs", 892 + "make-dir", 893 + "unique-string", 894 + "write-file-atomic", 895 + "xdg-basedir" 896 + ] 897 + }, 898 + "connect-history-api-fallback@1.6.0": { 899 + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" 900 + }, 901 + "connect-livereload@0.6.1": { 902 + "integrity": "sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g==" 903 + }, 904 + "connect@3.7.0": { 905 + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", 906 + "dependencies": [ 907 + "debug@2.6.9", 908 + "finalhandler@1.1.2", 909 + "parseurl", 910 + "utils-merge" 911 + ] 912 + }, 446 913 "content-disposition@0.5.4": { 447 914 "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 448 915 "dependencies": [ ··· 469 936 }, 470 937 "cookie@0.7.2": { 471 938 "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==" 939 + }, 940 + "cp-file@7.0.0": { 941 + "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==", 942 + "dependencies": [ 943 + "graceful-fs", 944 + "make-dir", 945 + "nested-error-stacks", 946 + "p-event" 947 + ] 472 948 }, 473 949 "cross-fetch@4.1.0": { 474 950 "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", ··· 476 952 "node-fetch" 477 953 ] 478 954 }, 955 + "crypto-random-string@2.0.0": { 956 + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" 957 + }, 479 958 "debug@2.6.9": { 480 959 "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 481 960 "dependencies": [ ··· 488 967 "ms@2.1.3" 489 968 ] 490 969 }, 970 + "decamelize@1.2.0": { 971 + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" 972 + }, 973 + "decompress-response@3.3.0": { 974 + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", 975 + "dependencies": [ 976 + "mimic-response" 977 + ] 978 + }, 979 + "deep-extend@0.6.0": { 980 + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 981 + }, 982 + "defer-to-connect@1.1.3": { 983 + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" 984 + }, 491 985 "depd@2.0.0": { 492 986 "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 493 987 }, ··· 514 1008 "did-resolver@4.1.0": { 515 1009 "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==" 516 1010 }, 1011 + "docsify-cli@4.4.4": { 1012 + "integrity": "sha512-NAZgg6b0BsDuq/Pe+P19Qb2J1d+ZVbS0eGkeCNxyu4F9/CQSsRqZqAvPJ9/0I+BCHn4sgftA2jluqhQVzKzrSA==", 1013 + "dependencies": [ 1014 + "chalk@2.4.2", 1015 + "connect", 1016 + "connect-history-api-fallback", 1017 + "connect-livereload", 1018 + "cp-file", 1019 + "docsify", 1020 + "docsify-server-renderer", 1021 + "enquirer", 1022 + "fs-extra", 1023 + "get-port", 1024 + "livereload", 1025 + "lru-cache", 1026 + "open", 1027 + "serve-static@1.16.2", 1028 + "update-notifier", 1029 + "yargonaut", 1030 + "yargs" 1031 + ], 1032 + "bin": true 1033 + }, 1034 + "docsify-server-renderer@4.13.1": { 1035 + "integrity": "sha512-XNJeCK3zp+mVO7JZFn0bH4hNBAMMC1MbuCU7CBsjLHYn4NHrjIgCBGmylzEan3/4Qm6kbSzQx8XzUK5T7GQxHw==", 1036 + "dependencies": [ 1037 + "debug@4.4.1", 1038 + "docsify", 1039 + "node-fetch", 1040 + "resolve-pathname" 1041 + ], 1042 + "deprecated": true 1043 + }, 1044 + "docsify@4.13.1": { 1045 + "integrity": "sha512-BsDypTBhw0mfslw9kZgAspCMZSM+sUIIDg5K/t1hNLkvbem9h64ZQc71e1IpY+iWsi/KdeqfazDfg52y2Lmm0A==", 1046 + "dependencies": [ 1047 + "marked", 1048 + "medium-zoom", 1049 + "opencollective-postinstall", 1050 + "prismjs", 1051 + "strip-indent", 1052 + "tinydate", 1053 + "tweezer.js" 1054 + ], 1055 + "scripts": true 1056 + }, 1057 + "dot-prop@5.3.0": { 1058 + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", 1059 + "dependencies": [ 1060 + "is-obj" 1061 + ] 1062 + }, 517 1063 "dunder-proto@1.0.1": { 518 1064 "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 519 1065 "dependencies": [ ··· 522 1068 "gopd" 523 1069 ] 524 1070 }, 1071 + "duplexer3@0.1.5": { 1072 + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" 1073 + }, 525 1074 "ee-first@1.1.1": { 526 1075 "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 527 1076 }, 1077 + "emoji-regex@8.0.0": { 1078 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 1079 + }, 528 1080 "encodeurl@1.0.2": { 529 1081 "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" 530 1082 }, 531 1083 "encodeurl@2.0.0": { 532 1084 "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" 533 1085 }, 1086 + "end-of-stream@1.4.5": { 1087 + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", 1088 + "dependencies": [ 1089 + "once" 1090 + ] 1091 + }, 1092 + "enquirer@2.4.1": { 1093 + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", 1094 + "dependencies": [ 1095 + "ansi-colors", 1096 + "strip-ansi@6.0.1" 1097 + ] 1098 + }, 534 1099 "es-define-property@1.0.1": { 535 1100 "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" 536 1101 }, ··· 543 1108 "es-errors" 544 1109 ] 545 1110 }, 1111 + "esbuild@0.25.9": { 1112 + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", 1113 + "optionalDependencies": [ 1114 + "@esbuild/aix-ppc64", 1115 + "@esbuild/android-arm", 1116 + "@esbuild/android-arm64", 1117 + "@esbuild/android-x64", 1118 + "@esbuild/darwin-arm64", 1119 + "@esbuild/darwin-x64", 1120 + "@esbuild/freebsd-arm64", 1121 + "@esbuild/freebsd-x64", 1122 + "@esbuild/linux-arm", 1123 + "@esbuild/linux-arm64", 1124 + "@esbuild/linux-ia32", 1125 + "@esbuild/linux-loong64", 1126 + "@esbuild/linux-mips64el", 1127 + "@esbuild/linux-ppc64", 1128 + "@esbuild/linux-riscv64", 1129 + "@esbuild/linux-s390x", 1130 + "@esbuild/linux-x64", 1131 + "@esbuild/netbsd-arm64", 1132 + "@esbuild/netbsd-x64", 1133 + "@esbuild/openbsd-arm64", 1134 + "@esbuild/openbsd-x64", 1135 + "@esbuild/openharmony-arm64", 1136 + "@esbuild/sunos-x64", 1137 + "@esbuild/win32-arm64", 1138 + "@esbuild/win32-ia32", 1139 + "@esbuild/win32-x64" 1140 + ], 1141 + "scripts": true, 1142 + "bin": true 1143 + }, 1144 + "escape-goat@2.1.1": { 1145 + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" 1146 + }, 546 1147 "escape-html@1.0.3": { 547 1148 "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 1149 + }, 1150 + "escape-string-regexp@1.0.5": { 1151 + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" 548 1152 }, 549 1153 "etag@1.8.1": { 550 1154 "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" ··· 575 1179 "http-errors", 576 1180 "merge-descriptors@1.0.3", 577 1181 "methods", 578 - "on-finished", 1182 + "on-finished@2.4.1", 579 1183 "parseurl", 580 1184 "path-to-regexp@0.1.12", 581 1185 "proxy-addr", ··· 609 1213 "http-errors", 610 1214 "merge-descriptors@2.0.0", 611 1215 "mime-types@3.0.1", 612 - "on-finished", 1216 + "on-finished@2.4.1", 613 1217 "once", 614 1218 "parseurl", 615 1219 "proxy-addr", ··· 626 1230 "fast-redact@3.5.0": { 627 1231 "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==" 628 1232 }, 1233 + "fdir@6.5.0_picomatch@4.0.3": { 1234 + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 1235 + "dependencies": [ 1236 + "picomatch@4.0.3" 1237 + ], 1238 + "optionalPeers": [ 1239 + "picomatch@4.0.3" 1240 + ] 1241 + }, 1242 + "figlet@1.8.2": { 1243 + "integrity": "sha512-iPCpE9B/rOcjewIzDnagP9F2eySzGeHReX8WlrZQJkqFBk2wvq8gY0c6U6Hd2y9HnX1LQcYSeP7aEHoPt6sVKQ==", 1244 + "bin": true 1245 + }, 1246 + "fill-range@7.1.1": { 1247 + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1248 + "dependencies": [ 1249 + "to-regex-range" 1250 + ] 1251 + }, 1252 + "finalhandler@1.1.2": { 1253 + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 1254 + "dependencies": [ 1255 + "debug@2.6.9", 1256 + "encodeurl@1.0.2", 1257 + "escape-html", 1258 + "on-finished@2.3.0", 1259 + "parseurl", 1260 + "statuses@1.5.0", 1261 + "unpipe" 1262 + ] 1263 + }, 629 1264 "finalhandler@1.3.1": { 630 1265 "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", 631 1266 "dependencies": [ 632 1267 "debug@2.6.9", 633 1268 "encodeurl@2.0.0", 634 1269 "escape-html", 635 - "on-finished", 1270 + "on-finished@2.4.1", 636 1271 "parseurl", 637 1272 "statuses@2.0.1", 638 1273 "unpipe" ··· 644 1279 "debug@4.4.1", 645 1280 "encodeurl@2.0.0", 646 1281 "escape-html", 647 - "on-finished", 1282 + "on-finished@2.4.1", 648 1283 "parseurl", 649 1284 "statuses@2.0.2" 650 1285 ] 651 1286 }, 1287 + "find-up@4.1.0": { 1288 + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 1289 + "dependencies": [ 1290 + "locate-path", 1291 + "path-exists" 1292 + ] 1293 + }, 652 1294 "forwarded@0.2.0": { 653 1295 "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 654 1296 }, ··· 658 1300 "fresh@2.0.0": { 659 1301 "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==" 660 1302 }, 1303 + "fs-extra@8.1.0": { 1304 + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 1305 + "dependencies": [ 1306 + "graceful-fs", 1307 + "jsonfile", 1308 + "universalify" 1309 + ] 1310 + }, 1311 + "fsevents@2.3.3": { 1312 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1313 + "os": ["darwin"], 1314 + "scripts": true 1315 + }, 661 1316 "function-bind@1.1.2": { 662 1317 "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" 663 1318 }, 1319 + "get-caller-file@2.0.5": { 1320 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 1321 + }, 664 1322 "get-intrinsic@1.3.0": { 665 1323 "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 666 1324 "dependencies": [ ··· 676 1334 "math-intrinsics" 677 1335 ] 678 1336 }, 1337 + "get-port@5.1.1": { 1338 + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==" 1339 + }, 679 1340 "get-proto@1.0.1": { 680 1341 "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 681 1342 "dependencies": [ ··· 683 1344 "es-object-atoms" 684 1345 ] 685 1346 }, 1347 + "get-stream@4.1.0": { 1348 + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 1349 + "dependencies": [ 1350 + "pump" 1351 + ] 1352 + }, 1353 + "get-stream@5.2.0": { 1354 + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 1355 + "dependencies": [ 1356 + "pump" 1357 + ] 1358 + }, 1359 + "glob-parent@5.1.2": { 1360 + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1361 + "dependencies": [ 1362 + "is-glob" 1363 + ] 1364 + }, 1365 + "global-dirs@2.1.0": { 1366 + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", 1367 + "dependencies": [ 1368 + "ini" 1369 + ] 1370 + }, 686 1371 "gopd@1.2.0": { 687 1372 "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" 688 1373 }, 1374 + "got@9.6.0": { 1375 + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 1376 + "dependencies": [ 1377 + "@sindresorhus/is", 1378 + "@szmarczak/http-timer", 1379 + "cacheable-request", 1380 + "decompress-response", 1381 + "duplexer3", 1382 + "get-stream@4.1.0", 1383 + "lowercase-keys@1.0.1", 1384 + "mimic-response", 1385 + "p-cancelable", 1386 + "to-readable-stream", 1387 + "url-parse-lax" 1388 + ] 1389 + }, 1390 + "graceful-fs@4.2.11": { 1391 + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 1392 + }, 689 1393 "graphemer@1.4.0": { 690 1394 "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" 691 1395 }, 1396 + "has-ansi@2.0.0": { 1397 + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", 1398 + "dependencies": [ 1399 + "ansi-regex@2.1.1" 1400 + ] 1401 + }, 1402 + "has-flag@3.0.0": { 1403 + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" 1404 + }, 1405 + "has-flag@4.0.0": { 1406 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" 1407 + }, 692 1408 "has-symbols@1.1.0": { 693 1409 "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" 694 1410 }, 1411 + "has-yarn@2.1.0": { 1412 + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" 1413 + }, 695 1414 "hasown@2.0.2": { 696 1415 "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 697 1416 "dependencies": [ 698 1417 "function-bind" 699 1418 ] 1419 + }, 1420 + "http-cache-semantics@4.2.0": { 1421 + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==" 700 1422 }, 701 1423 "http-errors@2.0.0": { 702 1424 "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", ··· 723 1445 "ieee754@1.2.1": { 724 1446 "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 725 1447 }, 1448 + "import-lazy@2.1.0": { 1449 + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==" 1450 + }, 1451 + "imurmurhash@0.1.4": { 1452 + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" 1453 + }, 726 1454 "inherits@2.0.4": { 727 1455 "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 728 1456 }, 1457 + "ini@1.3.7": { 1458 + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" 1459 + }, 729 1460 "ipaddr.js@1.9.1": { 730 1461 "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 731 1462 }, 1463 + "is-binary-path@2.1.0": { 1464 + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1465 + "dependencies": [ 1466 + "binary-extensions" 1467 + ] 1468 + }, 1469 + "is-ci@2.0.0": { 1470 + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", 1471 + "dependencies": [ 1472 + "ci-info" 1473 + ], 1474 + "bin": true 1475 + }, 1476 + "is-extglob@2.1.1": { 1477 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" 1478 + }, 1479 + "is-fullwidth-code-point@3.0.0": { 1480 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 1481 + }, 1482 + "is-glob@4.0.3": { 1483 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1484 + "dependencies": [ 1485 + "is-extglob" 1486 + ] 1487 + }, 1488 + "is-installed-globally@0.3.2": { 1489 + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", 1490 + "dependencies": [ 1491 + "global-dirs", 1492 + "is-path-inside" 1493 + ] 1494 + }, 1495 + "is-npm@4.0.0": { 1496 + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" 1497 + }, 1498 + "is-number@7.0.0": { 1499 + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 1500 + }, 1501 + "is-obj@2.0.0": { 1502 + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" 1503 + }, 1504 + "is-path-inside@3.0.3": { 1505 + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" 1506 + }, 732 1507 "is-promise@4.0.0": { 733 1508 "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" 734 1509 }, 1510 + "is-typedarray@1.0.0": { 1511 + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" 1512 + }, 1513 + "is-wsl@1.1.0": { 1514 + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==" 1515 + }, 1516 + "is-yarn-global@0.3.0": { 1517 + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" 1518 + }, 735 1519 "iso-datestring-validator@2.2.2": { 736 1520 "integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==" 737 1521 }, 1522 + "json-buffer@3.0.0": { 1523 + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" 1524 + }, 1525 + "jsonfile@4.0.0": { 1526 + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 1527 + "optionalDependencies": [ 1528 + "graceful-fs" 1529 + ] 1530 + }, 1531 + "keyv@3.1.0": { 1532 + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 1533 + "dependencies": [ 1534 + "json-buffer" 1535 + ] 1536 + }, 738 1537 "ky@1.8.1": { 739 1538 "integrity": "sha512-7Bp3TpsE+L+TARSnnDpk3xg8Idi8RwSLdj6CMbNWoOARIrGrbuLGusV0dYwbZOm4bB3jHNxSw8Wk/ByDqJEnDw==" 740 1539 }, 1540 + "latest-version@5.1.0": { 1541 + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", 1542 + "dependencies": [ 1543 + "package-json" 1544 + ] 1545 + }, 1546 + "livereload-js@3.4.1": { 1547 + "integrity": "sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==" 1548 + }, 1549 + "livereload@0.9.3": { 1550 + "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==", 1551 + "dependencies": [ 1552 + "chokidar", 1553 + "livereload-js", 1554 + "opts", 1555 + "ws@7.5.10" 1556 + ], 1557 + "bin": true 1558 + }, 1559 + "locate-path@5.0.0": { 1560 + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 1561 + "dependencies": [ 1562 + "p-locate" 1563 + ] 1564 + }, 1565 + "lowercase-keys@1.0.1": { 1566 + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" 1567 + }, 1568 + "lowercase-keys@2.0.0": { 1569 + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" 1570 + }, 1571 + "lru-cache@5.1.1": { 1572 + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 1573 + "dependencies": [ 1574 + "yallist" 1575 + ] 1576 + }, 1577 + "make-dir@3.1.0": { 1578 + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1579 + "dependencies": [ 1580 + "semver" 1581 + ] 1582 + }, 1583 + "marked@1.2.9": { 1584 + "integrity": "sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw==", 1585 + "bin": true 1586 + }, 741 1587 "math-intrinsics@1.1.0": { 742 1588 "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" 743 1589 }, ··· 747 1593 "media-typer@1.1.0": { 748 1594 "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==" 749 1595 }, 1596 + "medium-zoom@1.1.0": { 1597 + "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==" 1598 + }, 750 1599 "merge-descriptors@1.0.3": { 751 1600 "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" 752 1601 }, ··· 778 1627 "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 779 1628 "bin": true 780 1629 }, 1630 + "mimic-response@1.0.1": { 1631 + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" 1632 + }, 1633 + "min-indent@1.0.1": { 1634 + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" 1635 + }, 1636 + "minimatch@9.0.5": { 1637 + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1638 + "dependencies": [ 1639 + "brace-expansion" 1640 + ] 1641 + }, 1642 + "minimist@1.2.8": { 1643 + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" 1644 + }, 781 1645 "ms@2.0.0": { 782 1646 "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 783 1647 }, ··· 797 1661 "multiformats@9.9.0": { 798 1662 "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" 799 1663 }, 1664 + "nanoid@3.3.11": { 1665 + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 1666 + "bin": true 1667 + }, 800 1668 "negotiator@0.6.3": { 801 1669 "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 802 1670 }, 803 1671 "negotiator@1.0.0": { 804 1672 "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==" 1673 + }, 1674 + "nested-error-stacks@2.1.1": { 1675 + "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==" 805 1676 }, 806 1677 "node-fetch@2.7.0": { 807 1678 "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", ··· 815 1686 "detect-libc" 816 1687 ], 817 1688 "bin": true 1689 + }, 1690 + "normalize-path@3.0.0": { 1691 + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 1692 + }, 1693 + "normalize-url@4.5.1": { 1694 + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" 818 1695 }, 819 1696 "object-inspect@1.13.4": { 820 1697 "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" ··· 822 1699 "on-exit-leak-free@2.1.2": { 823 1700 "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==" 824 1701 }, 1702 + "on-finished@2.3.0": { 1703 + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", 1704 + "dependencies": [ 1705 + "ee-first" 1706 + ] 1707 + }, 825 1708 "on-finished@2.4.1": { 826 1709 "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 827 1710 "dependencies": [ ··· 834 1717 "wrappy" 835 1718 ] 836 1719 }, 1720 + "open@6.4.0": { 1721 + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", 1722 + "dependencies": [ 1723 + "is-wsl" 1724 + ] 1725 + }, 1726 + "opencollective-postinstall@2.0.3": { 1727 + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", 1728 + "bin": true 1729 + }, 1730 + "opts@2.0.2": { 1731 + "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==" 1732 + }, 1733 + "p-cancelable@1.1.0": { 1734 + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" 1735 + }, 1736 + "p-event@4.2.0": { 1737 + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", 1738 + "dependencies": [ 1739 + "p-timeout" 1740 + ] 1741 + }, 1742 + "p-finally@1.0.0": { 1743 + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" 1744 + }, 1745 + "p-limit@2.3.0": { 1746 + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1747 + "dependencies": [ 1748 + "p-try" 1749 + ] 1750 + }, 1751 + "p-locate@4.1.0": { 1752 + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 1753 + "dependencies": [ 1754 + "p-limit" 1755 + ] 1756 + }, 1757 + "p-timeout@3.2.0": { 1758 + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", 1759 + "dependencies": [ 1760 + "p-finally" 1761 + ] 1762 + }, 1763 + "p-try@2.2.0": { 1764 + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" 1765 + }, 1766 + "package-json@6.5.0": { 1767 + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", 1768 + "dependencies": [ 1769 + "got", 1770 + "registry-auth-token", 1771 + "registry-url", 1772 + "semver" 1773 + ] 1774 + }, 1775 + "parent-require@1.0.0": { 1776 + "integrity": "sha512-2MXDNZC4aXdkkap+rBBMv0lUsfJqvX5/2FiYYnfCnorZt3Pk06/IOR5KeaoghgS2w07MLWgjbsnyaq6PdHn2LQ==" 1777 + }, 837 1778 "parseurl@1.3.3": { 838 1779 "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 839 1780 }, 1781 + "path-browserify@1.0.1": { 1782 + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" 1783 + }, 1784 + "path-exists@4.0.0": { 1785 + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" 1786 + }, 840 1787 "path-to-regexp@0.1.12": { 841 1788 "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" 842 1789 }, 843 1790 "path-to-regexp@8.2.0": { 844 1791 "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==" 845 1792 }, 1793 + "picocolors@1.1.1": { 1794 + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" 1795 + }, 1796 + "picomatch@2.3.1": { 1797 + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" 1798 + }, 1799 + "picomatch@4.0.3": { 1800 + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" 1801 + }, 846 1802 "pino-abstract-transport@1.2.0": { 847 1803 "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", 848 1804 "dependencies": [ ··· 870 1826 ], 871 1827 "bin": true 872 1828 }, 1829 + "postcss@8.5.6": { 1830 + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", 1831 + "dependencies": [ 1832 + "nanoid", 1833 + "picocolors", 1834 + "source-map-js" 1835 + ] 1836 + }, 1837 + "prepend-http@2.0.0": { 1838 + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" 1839 + }, 1840 + "prettier@3.6.2": { 1841 + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", 1842 + "bin": true 1843 + }, 1844 + "prismjs@1.30.0": { 1845 + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==" 1846 + }, 873 1847 "process-warning@3.0.0": { 874 1848 "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" 875 1849 }, ··· 881 1855 "dependencies": [ 882 1856 "forwarded", 883 1857 "ipaddr.js" 1858 + ] 1859 + }, 1860 + "pump@3.0.3": { 1861 + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", 1862 + "dependencies": [ 1863 + "end-of-stream", 1864 + "once" 1865 + ] 1866 + }, 1867 + "pupa@2.1.1": { 1868 + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", 1869 + "dependencies": [ 1870 + "escape-goat" 884 1871 ] 885 1872 }, 886 1873 "qs@6.13.0": { ··· 925 1912 "unpipe" 926 1913 ] 927 1914 }, 1915 + "rc@1.2.8": { 1916 + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1917 + "dependencies": [ 1918 + "deep-extend", 1919 + "ini", 1920 + "minimist", 1921 + "strip-json-comments" 1922 + ], 1923 + "bin": true 1924 + }, 928 1925 "readable-stream@4.7.0": { 929 1926 "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", 930 1927 "dependencies": [ ··· 935 1932 "string_decoder" 936 1933 ] 937 1934 }, 1935 + "readdirp@3.6.0": { 1936 + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1937 + "dependencies": [ 1938 + "picomatch@2.3.1" 1939 + ] 1940 + }, 938 1941 "real-require@0.2.0": { 939 1942 "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==" 940 1943 }, 1944 + "registry-auth-token@4.2.2": { 1945 + "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", 1946 + "dependencies": [ 1947 + "rc" 1948 + ] 1949 + }, 1950 + "registry-url@5.1.0": { 1951 + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", 1952 + "dependencies": [ 1953 + "rc" 1954 + ] 1955 + }, 1956 + "require-directory@2.1.1": { 1957 + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" 1958 + }, 1959 + "require-main-filename@2.0.0": { 1960 + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" 1961 + }, 1962 + "resolve-pathname@3.0.0": { 1963 + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" 1964 + }, 1965 + "responselike@1.0.2": { 1966 + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", 1967 + "dependencies": [ 1968 + "lowercase-keys@1.0.1" 1969 + ] 1970 + }, 1971 + "rollup@4.46.4": { 1972 + "integrity": "sha512-YbxoxvoqNg9zAmw4+vzh1FkGAiZRK+LhnSrbSrSXMdZYsRPDWoshcSd/pldKRO6lWzv/e9TiJAVQyirYIeSIPQ==", 1973 + "dependencies": [ 1974 + "@types/estree" 1975 + ], 1976 + "optionalDependencies": [ 1977 + "@rollup/rollup-android-arm-eabi", 1978 + "@rollup/rollup-android-arm64", 1979 + "@rollup/rollup-darwin-arm64", 1980 + "@rollup/rollup-darwin-x64", 1981 + "@rollup/rollup-freebsd-arm64", 1982 + "@rollup/rollup-freebsd-x64", 1983 + "@rollup/rollup-linux-arm-gnueabihf", 1984 + "@rollup/rollup-linux-arm-musleabihf", 1985 + "@rollup/rollup-linux-arm64-gnu", 1986 + "@rollup/rollup-linux-arm64-musl", 1987 + "@rollup/rollup-linux-loongarch64-gnu", 1988 + "@rollup/rollup-linux-ppc64-gnu", 1989 + "@rollup/rollup-linux-riscv64-gnu", 1990 + "@rollup/rollup-linux-riscv64-musl", 1991 + "@rollup/rollup-linux-s390x-gnu", 1992 + "@rollup/rollup-linux-x64-gnu", 1993 + "@rollup/rollup-linux-x64-musl", 1994 + "@rollup/rollup-win32-arm64-msvc", 1995 + "@rollup/rollup-win32-ia32-msvc", 1996 + "@rollup/rollup-win32-x64-msvc", 1997 + "fsevents" 1998 + ], 1999 + "bin": true 2000 + }, 941 2001 "router@2.2.0": { 942 2002 "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", 943 2003 "dependencies": [ ··· 957 2017 "safer-buffer@2.1.2": { 958 2018 "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 959 2019 }, 2020 + "semver-diff@3.1.1": { 2021 + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", 2022 + "dependencies": [ 2023 + "semver" 2024 + ] 2025 + }, 2026 + "semver@6.3.1": { 2027 + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 2028 + "bin": true 2029 + }, 960 2030 "send@0.19.0": { 961 2031 "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", 962 2032 "dependencies": [ ··· 970 2040 "http-errors", 971 2041 "mime", 972 2042 "ms@2.1.3", 973 - "on-finished", 2043 + "on-finished@2.4.1", 974 2044 "range-parser", 975 2045 "statuses@2.0.1" 976 2046 ] ··· 986 2056 "http-errors", 987 2057 "mime-types@3.0.1", 988 2058 "ms@2.1.3", 989 - "on-finished", 2059 + "on-finished@2.4.1", 990 2060 "range-parser", 991 2061 "statuses@2.0.2" 992 2062 ] ··· 1009 2079 "send@1.2.0" 1010 2080 ] 1011 2081 }, 2082 + "set-blocking@2.0.0": { 2083 + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" 2084 + }, 1012 2085 "setprototypeof@1.2.0": { 1013 2086 "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1014 2087 }, ··· 1048 2121 "side-channel-weakmap" 1049 2122 ] 1050 2123 }, 2124 + "signal-exit@3.0.7": { 2125 + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 2126 + }, 1051 2127 "sonic-boom@3.8.1": { 1052 2128 "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", 1053 2129 "dependencies": [ 1054 2130 "atomic-sleep" 1055 2131 ] 1056 2132 }, 2133 + "source-map-js@1.2.1": { 2134 + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" 2135 + }, 1057 2136 "split2@4.2.0": { 1058 2137 "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" 2138 + }, 2139 + "statuses@1.5.0": { 2140 + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" 1059 2141 }, 1060 2142 "statuses@2.0.1": { 1061 2143 "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" ··· 1063 2145 "statuses@2.0.2": { 1064 2146 "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==" 1065 2147 }, 2148 + "string-width@4.2.3": { 2149 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2150 + "dependencies": [ 2151 + "emoji-regex", 2152 + "is-fullwidth-code-point", 2153 + "strip-ansi@6.0.1" 2154 + ] 2155 + }, 1066 2156 "string_decoder@1.3.0": { 1067 2157 "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1068 2158 "dependencies": [ 1069 2159 "safe-buffer" 1070 2160 ] 1071 2161 }, 2162 + "strip-ansi@3.0.1": { 2163 + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", 2164 + "dependencies": [ 2165 + "ansi-regex@2.1.1" 2166 + ] 2167 + }, 2168 + "strip-ansi@6.0.1": { 2169 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2170 + "dependencies": [ 2171 + "ansi-regex@5.0.1" 2172 + ] 2173 + }, 2174 + "strip-indent@3.0.0": { 2175 + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", 2176 + "dependencies": [ 2177 + "min-indent" 2178 + ] 2179 + }, 2180 + "strip-json-comments@2.0.1": { 2181 + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" 2182 + }, 2183 + "supports-color@2.0.0": { 2184 + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" 2185 + }, 2186 + "supports-color@5.5.0": { 2187 + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2188 + "dependencies": [ 2189 + "has-flag@3.0.0" 2190 + ] 2191 + }, 2192 + "supports-color@7.2.0": { 2193 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2194 + "dependencies": [ 2195 + "has-flag@4.0.0" 2196 + ] 2197 + }, 2198 + "term-size@2.2.1": { 2199 + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" 2200 + }, 1072 2201 "thread-stream@2.7.0": { 1073 2202 "integrity": "sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==", 1074 2203 "dependencies": [ 1075 2204 "real-require" 2205 + ] 2206 + }, 2207 + "tinydate@1.3.0": { 2208 + "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==" 2209 + }, 2210 + "tinyglobby@0.2.14_picomatch@4.0.3": { 2211 + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", 2212 + "dependencies": [ 2213 + "fdir", 2214 + "picomatch@4.0.3" 1076 2215 ] 1077 2216 }, 1078 2217 "tlds@1.259.0": { 1079 2218 "integrity": "sha512-AldGGlDP0PNgwppe2quAvuBl18UcjuNtOnDuUkqhd6ipPqrYYBt3aTxK1QTsBVknk97lS2JcafWMghjGWFtunw==", 1080 2219 "bin": true 1081 2220 }, 2221 + "to-readable-stream@1.0.0": { 2222 + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" 2223 + }, 2224 + "to-regex-range@5.0.1": { 2225 + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2226 + "dependencies": [ 2227 + "is-number" 2228 + ] 2229 + }, 1082 2230 "toidentifier@1.0.1": { 1083 2231 "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 1084 2232 }, 1085 2233 "tr46@0.0.3": { 1086 2234 "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1087 2235 }, 2236 + "ts-morph@24.0.0": { 2237 + "integrity": "sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw==", 2238 + "dependencies": [ 2239 + "@ts-morph/common", 2240 + "code-block-writer" 2241 + ] 2242 + }, 2243 + "tweezer.js@1.5.0": { 2244 + "integrity": "sha512-aSiJz7rGWNAQq7hjMK9ZYDuEawXupcCWgl3woQQSoDP2Oh8O4srWb/uO1PzzHIsrPEOqrjJ2sUb9FERfzuBabQ==" 2245 + }, 2246 + "type-fest@0.8.1": { 2247 + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" 2248 + }, 1088 2249 "type-is@1.6.18": { 1089 2250 "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1090 2251 "dependencies": [ ··· 1100 2261 "mime-types@3.0.1" 1101 2262 ] 1102 2263 }, 2264 + "typedarray-to-buffer@3.1.5": { 2265 + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", 2266 + "dependencies": [ 2267 + "is-typedarray" 2268 + ] 2269 + }, 1103 2270 "uint8arrays@3.0.0": { 1104 2271 "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", 1105 2272 "dependencies": [ ··· 1115 2282 "undici-types@6.21.0": { 1116 2283 "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" 1117 2284 }, 2285 + "unique-string@2.0.0": { 2286 + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", 2287 + "dependencies": [ 2288 + "crypto-random-string" 2289 + ] 2290 + }, 2291 + "universalify@0.1.2": { 2292 + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" 2293 + }, 1118 2294 "unpipe@1.0.0": { 1119 2295 "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" 1120 2296 }, 2297 + "update-notifier@4.1.3": { 2298 + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", 2299 + "dependencies": [ 2300 + "boxen", 2301 + "chalk@3.0.0", 2302 + "configstore", 2303 + "has-yarn", 2304 + "import-lazy", 2305 + "is-ci", 2306 + "is-installed-globally", 2307 + "is-npm", 2308 + "is-yarn-global", 2309 + "latest-version", 2310 + "pupa", 2311 + "semver-diff", 2312 + "xdg-basedir" 2313 + ] 2314 + }, 2315 + "url-parse-lax@3.0.0": { 2316 + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", 2317 + "dependencies": [ 2318 + "prepend-http" 2319 + ] 2320 + }, 1121 2321 "utils-merge@1.0.1": { 1122 2322 "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" 1123 2323 }, ··· 1127 2327 "vary@1.1.2": { 1128 2328 "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" 1129 2329 }, 2330 + "vite@7.1.3_@types+node@22.15.15_picomatch@4.0.3": { 2331 + "integrity": "sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==", 2332 + "dependencies": [ 2333 + "@types/node", 2334 + "esbuild", 2335 + "fdir", 2336 + "picomatch@4.0.3", 2337 + "postcss", 2338 + "rollup", 2339 + "tinyglobby" 2340 + ], 2341 + "optionalDependencies": [ 2342 + "fsevents" 2343 + ], 2344 + "optionalPeers": [ 2345 + "@types/node" 2346 + ], 2347 + "bin": true 2348 + }, 1130 2349 "web-did-resolver@2.0.30": { 1131 2350 "integrity": "sha512-lsv0T+y/zD1bEVkcNfcppk4hQXBlqqoXfYcRG4183Yv53FkY29HNPGErwkNI/AG+lxxsUIR77JqS6pn9uHw/Vw==", 1132 2351 "dependencies": [ ··· 1144 2363 "webidl-conversions" 1145 2364 ] 1146 2365 }, 2366 + "which-module@2.0.1": { 2367 + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" 2368 + }, 2369 + "widest-line@3.1.0": { 2370 + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", 2371 + "dependencies": [ 2372 + "string-width" 2373 + ] 2374 + }, 2375 + "wrap-ansi@6.2.0": { 2376 + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 2377 + "dependencies": [ 2378 + "ansi-styles@4.3.0", 2379 + "string-width", 2380 + "strip-ansi@6.0.1" 2381 + ] 2382 + }, 1147 2383 "wrappy@1.0.2": { 1148 2384 "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 1149 2385 }, 2386 + "write-file-atomic@3.0.3": { 2387 + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", 2388 + "dependencies": [ 2389 + "imurmurhash", 2390 + "is-typedarray", 2391 + "signal-exit", 2392 + "typedarray-to-buffer" 2393 + ] 2394 + }, 2395 + "ws@7.5.10": { 2396 + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==" 2397 + }, 1150 2398 "ws@8.18.3": { 1151 2399 "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==" 2400 + }, 2401 + "xdg-basedir@4.0.0": { 2402 + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" 2403 + }, 2404 + "y18n@4.0.3": { 2405 + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" 2406 + }, 2407 + "yallist@3.1.1": { 2408 + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" 2409 + }, 2410 + "yargonaut@1.1.4": { 2411 + "integrity": "sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==", 2412 + "dependencies": [ 2413 + "chalk@1.1.3", 2414 + "figlet", 2415 + "parent-require" 2416 + ] 2417 + }, 2418 + "yargs-parser@18.1.3": { 2419 + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 2420 + "dependencies": [ 2421 + "camelcase", 2422 + "decamelize" 2423 + ] 2424 + }, 2425 + "yargs@15.4.1": { 2426 + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", 2427 + "dependencies": [ 2428 + "cliui", 2429 + "decamelize", 2430 + "find-up", 2431 + "get-caller-file", 2432 + "require-directory", 2433 + "require-main-filename", 2434 + "set-blocking", 2435 + "string-width", 2436 + "which-module", 2437 + "y18n", 2438 + "yargs-parser" 2439 + ] 2440 + }, 2441 + "yesno@0.4.0": { 2442 + "integrity": "sha512-tdBxmHvbXPBKYIg81bMCB7bVeDmHkRzk5rVJyYYXurwKkHq/MCd8rz4HSJUP7hW0H2NlXiq8IFiWvYKEHhlotA==" 1152 2443 }, 1153 2444 "zod@3.25.46": { 1154 2445 "integrity": "sha512-IqRxcHEIjqLd4LNS/zKffB3Jzg3NwqJxQQ0Ns7pdrvgGkwQsEBdEQcOHaBVqvvZArShRzI39+aMST3FBGmTrLQ=="
docs/.nojekyll

This is a binary file and will not be displayed.

+18
docs/README.md
··· 1 + # Skylite 2 + 3 + > An attempt at splitting the (Bluesky) AppView 4 + 5 + - Uses [Microcosm](https://microcosm.blue/) 6 + - Portable with [SQLite](https://jsr.io/@db/sqlite) and [Deno](https://deno.land/) 7 + - Built with [type safety](https://www.npmjs.com/package/@atproto/lex-cli) 8 + 9 + ![tldrawgraph.png](assets/tldrawgraph.png) 10 + 11 + read more about the structure of Skylite in [structure.md](structure.md) 12 + 13 + # Skylite Dev Docs 14 + skylite dev docs is a documentation website to host all of the notes for developing skylite 15 + 16 + all lexicons are listed in the [Lexicons](httpindex) section 17 + 18 + more notes in [Dev Notes](notesindex) section
+11
docs/_coverpage.md
··· 1 + <!-- ![logo](_media/icon.svg) --> 2 + 3 + # Skylite Dev Docs <small>pre alpha</small> 4 + 5 + > Documentation for Designing and Developing Skylite 6 + 7 + docs are still being written! 8 + 9 + [Git Repo](https://tangled.sh/@whey.party/skylite) 10 + [Dev Notes](notesindex.md) 11 + [Lexicons](httpindex.md)
+4
docs/_navbar.md
··· 1 + - [Home](/) 2 + - [Dev Notes](notesindex.md) 3 + - [Lexicons](httpindex.md) 4 + - [Git Repo](https://tangled.sh/@whey.party/skylite)
+27
docs/_sidebar.md
··· 1 + - [Home](/) 2 + - [Dev Notes](notesindex.md) 3 + - [todo](todo.md) 4 + - [Structure](structure.md) 5 + - [Indexing](indexing.md) 6 + - [Lexicons](httpindex.md) 7 + - [Why?](whylexicons.md) 8 + - [app.bsky.actor.getProfile](app.bsky.actor.getProfile.md) 9 + - [app.bsky.actor.getProfiles](app.bsky.actor.getProfiles.md) 10 + - [app.bsky.feed.getActorFeeds](app.bsky.feed.getActorFeeds.md) 11 + - [app.bsky.feed.getFeedGenerator](app.bsky.feed.getFeedGenerator.md) 12 + - [app.bsky.feed.getFeedGenerators](app.bsky.feed.getFeedGenerators.md) 13 + - [app.bsky.feed.getPosts](app.bsky.feed.getPosts.md) 14 + - [custom defs](customdefs.md) 15 + - [party.whey.app.bsky.feed.getActorLikesPartial](party.whey.app.bsky.feed.getActorLikesPartial.md) 16 + - [party.whey.app.bsky.feed.getAuthorFeedPartial](party.whey.app.bsky.feed.getAuthorFeedPartial.md) 17 + - [party.whey.app.bsky.feed.getLikesPartial](party.whey.app.bsky.feed.getLikesPartial.md) 18 + - [party.whey.app.bsky.feed.getPostThreadPartial](party.whey.app.bsky.feed.getPostThreadPartial.md) 19 + - [party.whey.app.bsky.feed.getQuotesPartial](party.whey.app.bsky.feed.getQuotesPartial.md) 20 + - [party.whey.app.bsky.feed.getRepostedByPartial](party.whey.app.bsky.feed.getRepostedByPartial.md) 21 + <!-- idk about these --> 22 + - [party.whey.app.bsky.feed.getListFeedPartial](party.whey.app.bsky.feed.getListFeedPartial.md) 23 + <!-- not implemented yet --> 24 + - [app.bsky.graph.getLists](app.bsky.graph.getLists.md) 25 + - [app.bsky.graph.getList](app.bsky.graph.getList.md) 26 + - [app.bsky.graph.getActorStarterPacks](app.bsky.graph.getActorStarterPacks.md) 27 + - [Git Repo](https://tangled.sh/@whey.party/skylite)
+35
docs/app.bsky.actor.getProfile.md
··· 1 + ## app.bsky.actor.getProfile 2 + 3 + ```js 4 + { 5 + "lexicon": 1, 6 + "id": "app.bsky.actor.getProfile", 7 + "defs": { 8 + "main": { 9 + "type": "query", 10 + "description": "Get detailed profile view of an actor. Does not require auth, but contains relevant metadata with auth.", 11 + "parameters": { 12 + "type": "params", 13 + "required": [ 14 + "actor" 15 + ], 16 + "properties": { 17 + "actor": { 18 + "type": "string", 19 + "format": "at-identifier", 20 + "description": "Handle or DID of account to fetch profile of." 21 + } 22 + } 23 + }, 24 + "output": { 25 + "encoding": "application/json", 26 + "schema": { 27 + "type": "ref", 28 + "ref": "app.bsky.actor.defs#profileViewDetailed" 29 + } 30 + } 31 + } 32 + } 33 + } 34 + ``` 35 + ---
+50
docs/app.bsky.actor.getProfiles.md
··· 1 + 2 + ## app.bsky.actor.getProfiles 3 + 4 + ```js 5 + { 6 + "lexicon": 1, 7 + "id": "app.bsky.actor.getProfiles", 8 + "defs": { 9 + "main": { 10 + "type": "query", 11 + "description": "Get detailed profile views of multiple actors.", 12 + "parameters": { 13 + "type": "params", 14 + "required": [ 15 + "actors" 16 + ], 17 + "properties": { 18 + "actors": { 19 + "type": "array", 20 + "items": { 21 + "type": "string", 22 + "format": "at-identifier" 23 + }, 24 + "maxLength": 25 25 + } 26 + } 27 + }, 28 + "output": { 29 + "encoding": "application/json", 30 + "schema": { 31 + "type": "object", 32 + "required": [ 33 + "profiles" 34 + ], 35 + "properties": { 36 + "profiles": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.bsky.actor.defs#profileViewDetailed" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + } 49 + ``` 50 + ---
+57
docs/app.bsky.feed.getActorFeeds.md
··· 1 + ## app.bsky.feed.getActorFeeds 2 + 3 + ```js 4 + { 5 + "lexicon": 1, 6 + "id": "app.bsky.feed.getActorFeeds", 7 + "defs": { 8 + "main": { 9 + "type": "query", 10 + "description": "Get a list of feeds (feed generator records) created by the actor (in the actor's repo).", 11 + "parameters": { 12 + "type": "params", 13 + "required": [ 14 + "actor" 15 + ], 16 + "properties": { 17 + "actor": { 18 + "type": "string", 19 + "format": "at-identifier" 20 + }, 21 + "limit": { 22 + "type": "integer", 23 + "minimum": 1, 24 + "maximum": 100, 25 + "default": 50 26 + }, 27 + "cursor": { 28 + "type": "string" 29 + } 30 + } 31 + }, 32 + "output": { 33 + "encoding": "application/json", 34 + "schema": { 35 + "type": "object", 36 + "required": [ 37 + "feeds" 38 + ], 39 + "properties": { 40 + "cursor": { 41 + "type": "string" 42 + }, 43 + "feeds": { 44 + "type": "array", 45 + "items": { 46 + "type": "ref", 47 + "ref": "app.bsky.feed.defs#generatorView" 48 + } 49 + } 50 + } 51 + } 52 + } 53 + } 54 + } 55 + } 56 + ``` 57 + ---
+54
docs/app.bsky.feed.getFeedGenerator.md
··· 1 + 2 + ## app.bsky.feed.getFeedGenerator 3 + 4 + ```js 5 + { 6 + "lexicon": 1, 7 + "id": "app.bsky.feed.getFeedGenerator", 8 + "defs": { 9 + "main": { 10 + "type": "query", 11 + "description": "Get information about a feed generator. Implemented by AppView.", 12 + "parameters": { 13 + "type": "params", 14 + "required": [ 15 + "feed" 16 + ], 17 + "properties": { 18 + "feed": { 19 + "type": "string", 20 + "format": "at-uri", 21 + "description": "AT-URI of the feed generator record." 22 + } 23 + } 24 + }, 25 + "output": { 26 + "encoding": "application/json", 27 + "schema": { 28 + "type": "object", 29 + "required": [ 30 + "view", 31 + "isOnline", 32 + "isValid" 33 + ], 34 + "properties": { 35 + "view": { 36 + "type": "ref", 37 + "ref": "app.bsky.feed.defs#generatorView" 38 + }, 39 + "isOnline": { 40 + "type": "boolean", 41 + "description": "Indicates whether the feed generator service has been online recently, or else seems to be inactive." 42 + }, 43 + "isValid": { 44 + "type": "boolean", 45 + "description": "Indicates whether the feed generator service is compatible with the record declaration." 46 + } 47 + } 48 + } 49 + } 50 + } 51 + } 52 + } 53 + ``` 54 + ---
+50
docs/app.bsky.feed.getFeedGenerators.md
··· 1 + 2 + 3 + ## app.bsky.feed.getFeedGenerators 4 + 5 + ```js 6 + { 7 + "lexicon": 1, 8 + "id": "app.bsky.feed.getFeedGenerators", 9 + "defs": { 10 + "main": { 11 + "type": "query", 12 + "description": "Get information about a list of feed generators.", 13 + "parameters": { 14 + "type": "params", 15 + "required": [ 16 + "feeds" 17 + ], 18 + "properties": { 19 + "feeds": { 20 + "type": "array", 21 + "items": { 22 + "type": "string", 23 + "format": "at-uri" 24 + } 25 + } 26 + } 27 + }, 28 + "output": { 29 + "encoding": "application/json", 30 + "schema": { 31 + "type": "object", 32 + "required": [ 33 + "feeds" 34 + ], 35 + "properties": { 36 + "feeds": { 37 + "type": "array", 38 + "items": { 39 + "type": "ref", 40 + "ref": "app.bsky.feed.defs#generatorView" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + } 47 + } 48 + } 49 + ``` 50 + ---
+52
docs/app.bsky.feed.getPosts.md
··· 1 + 2 + 3 + ## app.bsky.feed.getPosts 4 + 5 + ```js 6 + { 7 + "lexicon": 1, 8 + "id": "app.bsky.feed.getPosts", 9 + "defs": { 10 + "main": { 11 + "type": "query", 12 + "description": "Gets post views for a specified list of posts (by AT-URI). This is sometimes referred to as 'hydrating' a 'feed skeleton'.", 13 + "parameters": { 14 + "type": "params", 15 + "required": [ 16 + "uris" 17 + ], 18 + "properties": { 19 + "uris": { 20 + "type": "array", 21 + "description": "List of post AT-URIs to return hydrated views for.", 22 + "items": { 23 + "type": "string", 24 + "format": "at-uri" 25 + }, 26 + "maxLength": 25 27 + } 28 + } 29 + }, 30 + "output": { 31 + "encoding": "application/json", 32 + "schema": { 33 + "type": "object", 34 + "required": [ 35 + "posts" 36 + ], 37 + "properties": { 38 + "posts": { 39 + "type": "array", 40 + "items": { 41 + "type": "ref", 42 + "ref": "app.bsky.feed.defs#postView" 43 + } 44 + } 45 + } 46 + } 47 + } 48 + } 49 + } 50 + } 51 + ``` 52 + ---
docs/assets/tldrawgraph.png

This is a binary file and will not be displayed.

+191
docs/customdefs.md
··· 1 + ## party.whey.app.bsky.actor.defs 2 + 3 + ```js 4 + { 5 + "lexicon": 1, 6 + "id": "party.whey.app.bsky.actor.defs", 7 + "defs": { 8 + "profileViewBasicRef": { 9 + "type": "object", 10 + "required": [ 11 + "did" 12 + ], 13 + "properties": { 14 + "did": { 15 + "type": "string", 16 + "format": "did" 17 + } 18 + } 19 + }, 20 + "profileViewRef": { 21 + "type": "object", 22 + "required": [ 23 + "did" 24 + ], 25 + "properties": { 26 + "did": { 27 + "type": "string", 28 + "format": "did" 29 + } 30 + } 31 + }, 32 + "profileViewDetailedRef": { 33 + "type": "object", 34 + "required": [ 35 + "did" 36 + ], 37 + "properties": { 38 + "did": { 39 + "type": "string", 40 + "format": "did" 41 + } 42 + } 43 + } 44 + } 45 + } 46 + ``` 47 + --- 48 + 49 + ## party.whey.app.bsky.feed.defs 50 + 51 + ```js 52 + { 53 + "lexicon": 1, 54 + "id": "party.whey.app.bsky.feed.defs", 55 + "defs": { 56 + "postViewRef": { 57 + "type": "object", 58 + "description": "A pointer to a app.bsky.feed.defs#postView", 59 + "required": [ 60 + "uri", 61 + "cid" 62 + ], 63 + "properties": { 64 + "uri": { 65 + "type": "string", 66 + "format": "at-uri" 67 + }, 68 + "cid": { 69 + "type": "string", 70 + "format": "cid" 71 + } 72 + } 73 + }, 74 + "feedViewPostRef": { 75 + "type": "object", 76 + "required": [ 77 + "post" 78 + ], 79 + "properties": { 80 + "post": { 81 + "type": "union", 82 + "refs": [ 83 + "app.bsky.feed.defs#postView", 84 + "#postViewRef" 85 + ] 86 + }, 87 + "reply": { 88 + "type": "union", 89 + "refs": [ 90 + "app.bsky.feed.defs#replyRef", 91 + "#replyRef" 92 + ] 93 + }, 94 + "reason": { 95 + "type": "union", 96 + "refs": [ 97 + "app.bsky.feed.defs#reasonRepost", 98 + "app.bsky.feed.defs#reasonPin" 99 + ] 100 + }, 101 + "feedContext": { 102 + "type": "string", 103 + "description": "Context provided by feed generator that may be passed back alongside interactions.", 104 + "maxLength": 2000 105 + }, 106 + "reqId": { 107 + "type": "string", 108 + "description": "Unique identifier per request that may be passed back alongside interactions.", 109 + "maxLength": 100 110 + } 111 + } 112 + }, 113 + "replyRef": { 114 + "type": "object", 115 + "required": [ 116 + "root", 117 + "parent" 118 + ], 119 + "properties": { 120 + "root": { 121 + "type": "union", 122 + "refs": [ 123 + "#postViewRef", 124 + "app.bsky.feed.defs#postView", 125 + "app.bsky.feed.defs#notFoundPost", 126 + "app.bsky.feed.defs#blockedPost" 127 + ] 128 + }, 129 + "parent": { 130 + "type": "union", 131 + "refs": [ 132 + "#postViewRef", 133 + "app.bsky.feed.defs#postView", 134 + "app.bsky.feed.defs#notFoundPost", 135 + "app.bsky.feed.defs#blockedPost" 136 + ] 137 + }, 138 + "grandparentAuthor": { 139 + "type": "union", 140 + "refs": [ 141 + "party.whey.app.bsky.actor.defs#profileViewBasicRef", 142 + "app.bsky.actor.defs#profileViewBasic" 143 + ], 144 + "description": "When parent is a reply to another post, this is the author of that post." 145 + } 146 + } 147 + }, 148 + "threadViewPostRef": { 149 + "type": "object", 150 + "required": [ 151 + "post" 152 + ], 153 + "properties": { 154 + "post": { 155 + "type": "union", 156 + "refs": [ 157 + "#postViewRef", 158 + "app.bsky.feed.defs#postView" 159 + ] 160 + }, 161 + "parent": { 162 + "type": "union", 163 + "refs": [ 164 + "#threadViewPostRef", 165 + "app.bsky.feed.defs#threadViewPost", 166 + "app.bsky.feed.defs#notFoundPost", 167 + "app.bsky.feed.defs#blockedPost" 168 + ] 169 + }, 170 + "replies": { 171 + "type": "array", 172 + "items": { 173 + "type": "union", 174 + "refs": [ 175 + "#threadViewPostRef", 176 + "app.bsky.feed.defs#threadViewPost", 177 + "app.bsky.feed.defs#notFoundPost", 178 + "app.bsky.feed.defs#blockedPost" 179 + ] 180 + } 181 + }, 182 + "threadContext": { 183 + "type": "ref", 184 + "ref": "app.bsky.feed.defs#threadContext" 185 + } 186 + } 187 + } 188 + } 189 + } 190 + ``` 191 + ---
+21
docs/httpindex.md
··· 1 + # Lexicons 2 + - [Why?](whylexicons.md) 3 + - [app.bsky.actor.getProfile](app.bsky.actor.getProfile.md) 4 + - [app.bsky.actor.getProfiles](app.bsky.actor.getProfiles.md) 5 + - [app.bsky.feed.getActorFeeds](app.bsky.feed.getActorFeeds.md) 6 + - [app.bsky.feed.getFeedGenerator](app.bsky.feed.getFeedGenerator.md) 7 + - [app.bsky.feed.getFeedGenerators](app.bsky.feed.getFeedGenerators.md) 8 + - [app.bsky.feed.getPosts](app.bsky.feed.getPosts.md) 9 + - [custom defs](customdefs.md) 10 + - [party.whey.app.bsky.feed.getActorLikesPartial](party.whey.app.bsky.feed.getActorLikesPartial.md) 11 + - [party.whey.app.bsky.feed.getAuthorFeedPartial](party.whey.app.bsky.feed.getAuthorFeedPartial.md) 12 + - [party.whey.app.bsky.feed.getLikesPartial](party.whey.app.bsky.feed.getLikesPartial.md) 13 + - [party.whey.app.bsky.feed.getPostThreadPartial](party.whey.app.bsky.feed.getPostThreadPartial.md) 14 + - [party.whey.app.bsky.feed.getQuotesPartial](party.whey.app.bsky.feed.getQuotesPartial.md) 15 + - [party.whey.app.bsky.feed.getRepostedByPartial](party.whey.app.bsky.feed.getRepostedByPartial.md) 16 + <!-- idk about these --> 17 + - [party.whey.app.bsky.feed.getListFeedPartial](party.whey.app.bsky.feed.getListFeedPartial.md) 18 + <!-- not implemented yet --> 19 + - [app.bsky.graph.getLists](app.bsky.graph.getLists.md) 20 + - [app.bsky.graph.getList](app.bsky.graph.getList.md) 21 + - [app.bsky.graph.getActorStarterPacks](app.bsky.graph.getActorStarterPacks.md)
+48
docs/index.html
··· 1 + <!DOCTYPE html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8" /> 5 + <title>Document</title> 6 + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> 7 + <meta name="description" content="Description" /> 8 + <meta 9 + name="viewport" 10 + content="width=device-width, initial-scale=1.0, minimum-scale=1.0" 11 + /> 12 + <link rel="stylesheet" media="(prefers-color-scheme: light)" href="https://cdn.jsdelivr.net/npm/docsify-themeable@0/dist/css/theme-simple.css"> 13 + <link rel="stylesheet" media="(prefers-color-scheme: dark)" href="https://cdn.jsdelivr.net/npm/docsify-themeable@0/dist/css/theme-simple-dark.css"> 14 + <style> 15 + .cover.show{ 16 + max-height: 50dvh; 17 + height: 50dvh; 18 + min-height: 400px; 19 + } 20 + .app-nav{ 21 + position: fixed; 22 + } 23 + section.show+main>aside{ 24 + display: none; 25 + } 26 + section.show+main>.sidebar-toggle{ 27 + display: none; 28 + } 29 + section.show+main>.content{ 30 + margin-left: 0; 31 + } 32 + </style> 33 + </head> 34 + <body> 35 + <div id="app"></div> 36 + <script> 37 + window.$docsify = { 38 + name: "Skylite Dev Docs", 39 + //repo: "https://tangled.sh/@whey.party/skylite", 40 + loadSidebar: true, 41 + loadNavbar: true, 42 + coverpage: true, 43 + }; 44 + </script> 45 + <!-- Docsify v4 --> 46 + <script src="//cdn.jsdelivr.net/npm/docsify@4"></script> 47 + </body> 48 + </html>
+1
docs/indexing.md
··· 1 + # Indexing
+6
docs/notesindex.md
··· 1 + # Development Notes 2 + skylite is a large project and im scared of doing it without docs 3 + 4 + i just need a place to put all of my thoughts in a structured format 5 + 6 + and maybe it might be useful to make it available publicly? idk
+68
docs/party.whey.app.bsky.feed.getActorLikesPartial.md
··· 1 + ## party.whey.app.bsky.feed.getActorLikesPartial 2 + 3 + ```js 4 + { 5 + "lexicon": 1, 6 + "id": "party.whey.app.bsky.feed.getActorLikesPartial", 7 + "defs": { 8 + "main": { 9 + "type": "query", 10 + "description": "Get a list of posts liked by an actor. May require auth, (if so, actor must be the requesting account).", 11 + "parameters": { 12 + "type": "params", 13 + "required": [ 14 + "actor" 15 + ], 16 + "properties": { 17 + "actor": { 18 + "type": "string", 19 + "format": "at-identifier" 20 + }, 21 + "limit": { 22 + "type": "integer", 23 + "minimum": 1, 24 + "maximum": 100, 25 + "default": 50 26 + }, 27 + "cursor": { 28 + "type": "string" 29 + } 30 + } 31 + }, 32 + "output": { 33 + "encoding": "application/json", 34 + "schema": { 35 + "type": "object", 36 + "required": [ 37 + "feed" 38 + ], 39 + "properties": { 40 + "cursor": { 41 + "type": "string" 42 + }, 43 + "feed": { 44 + "type": "array", 45 + "items": { 46 + "type": "union", 47 + "refs": [ 48 + "party.whey.app.bsky.feed.defs#feedViewPostRef", 49 + "app.bsky.feed.defs#feedViewPost" 50 + ] 51 + } 52 + } 53 + } 54 + } 55 + }, 56 + "errors": [ 57 + { 58 + "name": "BlockedActor" 59 + }, 60 + { 61 + "name": "BlockedByActor" 62 + } 63 + ] 64 + } 65 + } 66 + } 67 + ``` 68 + ---
+85
docs/party.whey.app.bsky.feed.getAuthorFeedPartial.md
··· 1 + 2 + ## party.whey.app.bsky.feed.getAuthorFeedPartial 3 + 4 + ```js 5 + { 6 + "lexicon": 1, 7 + "id": "party.whey.app.bsky.feed.getAuthorFeedPartial", 8 + "defs": { 9 + "main": { 10 + "type": "query", 11 + "description": "Get a view of an actor's 'author feed' (post and reposts by the author). Does not require auth.", 12 + "parameters": { 13 + "type": "params", 14 + "required": [ 15 + "actor" 16 + ], 17 + "properties": { 18 + "actor": { 19 + "type": "string", 20 + "format": "at-identifier" 21 + }, 22 + "limit": { 23 + "type": "integer", 24 + "minimum": 1, 25 + "maximum": 100, 26 + "default": 50 27 + }, 28 + "cursor": { 29 + "type": "string" 30 + }, 31 + "filter": { 32 + "type": "string", 33 + "description": "Combinations of post/repost types to include in response.", 34 + "knownValues": [ 35 + "posts_with_replies", 36 + "posts_no_replies", 37 + "posts_with_media", 38 + "posts_and_author_threads", 39 + "posts_with_video" 40 + ], 41 + "default": "posts_with_replies" 42 + }, 43 + "includePins": { 44 + "type": "boolean", 45 + "default": false 46 + } 47 + } 48 + }, 49 + "output": { 50 + "encoding": "application/json", 51 + "schema": { 52 + "type": "object", 53 + "required": [ 54 + "feed" 55 + ], 56 + "properties": { 57 + "cursor": { 58 + "type": "string" 59 + }, 60 + "feed": { 61 + "type": "array", 62 + "items": { 63 + "type": "union", 64 + "refs": [ 65 + "party.whey.app.bsky.feed.defs#feedViewPostRef", 66 + "app.bsky.feed.defs#feedViewPost" 67 + ] 68 + } 69 + } 70 + } 71 + } 72 + }, 73 + "errors": [ 74 + { 75 + "name": "BlockedActor" 76 + }, 77 + { 78 + "name": "BlockedByActor" 79 + } 80 + ] 81 + } 82 + } 83 + } 84 + ``` 85 + ---
+95
docs/party.whey.app.bsky.feed.getLikesPartial.md
··· 1 + 2 + ## party.whey.app.bsky.feed.getLikesPartial 3 + 4 + ```js 5 + { 6 + "lexicon": 1, 7 + "id": "party.whey.app.bsky.feed.getLikesPartial", 8 + "defs": { 9 + "main": { 10 + "type": "query", 11 + "description": "Get like records which reference a subject (by AT-URI and CID).", 12 + "parameters": { 13 + "type": "params", 14 + "required": [ 15 + "uri" 16 + ], 17 + "properties": { 18 + "uri": { 19 + "type": "string", 20 + "format": "at-uri", 21 + "description": "AT-URI of the subject (eg, a post record)." 22 + }, 23 + "cid": { 24 + "type": "string", 25 + "format": "cid", 26 + "description": "CID of the subject record (aka, specific version of record), to filter likes." 27 + }, 28 + "limit": { 29 + "type": "integer", 30 + "minimum": 1, 31 + "maximum": 100, 32 + "default": 50 33 + }, 34 + "cursor": { 35 + "type": "string" 36 + } 37 + } 38 + }, 39 + "output": { 40 + "encoding": "application/json", 41 + "schema": { 42 + "type": "object", 43 + "required": [ 44 + "uri", 45 + "likes" 46 + ], 47 + "properties": { 48 + "uri": { 49 + "type": "string", 50 + "format": "at-uri" 51 + }, 52 + "cid": { 53 + "type": "string", 54 + "format": "cid" 55 + }, 56 + "cursor": { 57 + "type": "string" 58 + }, 59 + "likes": { 60 + "type": "array", 61 + "items": { 62 + "type": "ref", 63 + "ref": "#like" 64 + } 65 + } 66 + } 67 + } 68 + } 69 + }, 70 + "like": { 71 + "type": "object", 72 + "required": [ 73 + "indexedAt", 74 + "createdAt", 75 + "actor" 76 + ], 77 + "properties": { 78 + "indexedAt": { 79 + "type": "string", 80 + "format": "datetime" 81 + }, 82 + "createdAt": { 83 + "type": "string", 84 + "format": "datetime" 85 + }, 86 + "actor": { 87 + "type": "ref", 88 + "ref": "party.whey.app.bsky.actor.defs#profileViewRef" 89 + } 90 + } 91 + } 92 + } 93 + } 94 + ``` 95 + ---
+65
docs/party.whey.app.bsky.feed.getListFeedPartial.md
··· 1 + 2 + 3 + ## party.whey.app.bsky.feed.getListFeedPartial 4 + 5 + ```js 6 + { 7 + "lexicon": 1, 8 + "id": "party.whey.app.bsky.feed.getListFeedPartial", 9 + "defs": { 10 + "main": { 11 + "type": "query", 12 + "description": "Get a feed of recent posts from a list (posts and reposts from any actors on the list). Does not require auth.", 13 + "parameters": { 14 + "type": "params", 15 + "required": [ 16 + "list" 17 + ], 18 + "properties": { 19 + "list": { 20 + "type": "string", 21 + "format": "at-uri", 22 + "description": "Reference (AT-URI) to the list record." 23 + }, 24 + "limit": { 25 + "type": "integer", 26 + "minimum": 1, 27 + "maximum": 100, 28 + "default": 50 29 + }, 30 + "cursor": { 31 + "type": "string" 32 + } 33 + } 34 + }, 35 + "output": { 36 + "encoding": "application/json", 37 + "schema": { 38 + "type": "object", 39 + "required": [ 40 + "feed" 41 + ], 42 + "properties": { 43 + "cursor": { 44 + "type": "string" 45 + }, 46 + "feed": { 47 + "type": "array", 48 + "items": { 49 + "type": "ref", 50 + "ref": "party.whey.app.bsky.feed.defs#feedViewPostRef" 51 + } 52 + } 53 + } 54 + } 55 + }, 56 + "errors": [ 57 + { 58 + "name": "UnknownList" 59 + } 60 + ] 61 + } 62 + } 63 + } 64 + ``` 65 + ---
+73
docs/party.whey.app.bsky.feed.getPostThreadPartial.md
··· 1 + 2 + 3 + ## party.whey.app.bsky.feed.getPostThreadPartial 4 + 5 + ```js 6 + { 7 + "lexicon": 1, 8 + "id": "party.whey.app.bsky.feed.getPostThreadPartial", 9 + "defs": { 10 + "main": { 11 + "type": "query", 12 + "description": "Get posts in a thread. Does not require auth, but additional metadata and filtering will be applied for authed requests.", 13 + "parameters": { 14 + "type": "params", 15 + "required": [ 16 + "uri" 17 + ], 18 + "properties": { 19 + "uri": { 20 + "type": "string", 21 + "format": "at-uri", 22 + "description": "Reference (AT-URI) to post record." 23 + }, 24 + "depth": { 25 + "type": "integer", 26 + "description": "How many levels of reply depth should be included in response.", 27 + "default": 6, 28 + "minimum": 0, 29 + "maximum": 1000 30 + }, 31 + "parentHeight": { 32 + "type": "integer", 33 + "description": "How many levels of parent (and grandparent, etc) post to include.", 34 + "default": 80, 35 + "minimum": 0, 36 + "maximum": 1000 37 + } 38 + } 39 + }, 40 + "output": { 41 + "encoding": "application/json", 42 + "schema": { 43 + "type": "object", 44 + "required": [ 45 + "thread" 46 + ], 47 + "properties": { 48 + "thread": { 49 + "type": "union", 50 + "refs": [ 51 + "party.whey.app.bsky.feed.defs#threadViewPostRef", 52 + "app.bsky.feed.defs#threadViewPost", 53 + "app.bsky.feed.defs#notFoundPost", 54 + "app.bsky.feed.defs#blockedPost" 55 + ] 56 + }, 57 + "threadgate": { 58 + "type": "ref", 59 + "ref": "app.bsky.feed.defs#threadgateView" 60 + } 61 + } 62 + } 63 + }, 64 + "errors": [ 65 + { 66 + "name": "NotFound" 67 + } 68 + ] 69 + } 70 + } 71 + } 72 + ``` 73 + ---
+77
docs/party.whey.app.bsky.feed.getQuotesPartial.md
··· 1 + 2 + 3 + ## party.whey.app.bsky.feed.getQuotesPartial 4 + 5 + ```js 6 + { 7 + "lexicon": 1, 8 + "id": "party.whey.app.bsky.feed.getQuotesPartial", 9 + "defs": { 10 + "main": { 11 + "type": "query", 12 + "description": "Get a list of quotes for a given post.", 13 + "parameters": { 14 + "type": "params", 15 + "required": [ 16 + "uri" 17 + ], 18 + "properties": { 19 + "uri": { 20 + "type": "string", 21 + "format": "at-uri", 22 + "description": "Reference (AT-URI) of post record" 23 + }, 24 + "cid": { 25 + "type": "string", 26 + "format": "cid", 27 + "description": "If supplied, filters to quotes of specific version (by CID) of the post record." 28 + }, 29 + "limit": { 30 + "type": "integer", 31 + "minimum": 1, 32 + "maximum": 100, 33 + "default": 50 34 + }, 35 + "cursor": { 36 + "type": "string" 37 + } 38 + } 39 + }, 40 + "output": { 41 + "encoding": "application/json", 42 + "schema": { 43 + "type": "object", 44 + "required": [ 45 + "uri", 46 + "posts" 47 + ], 48 + "properties": { 49 + "uri": { 50 + "type": "string", 51 + "format": "at-uri" 52 + }, 53 + "cid": { 54 + "type": "string", 55 + "format": "cid" 56 + }, 57 + "cursor": { 58 + "type": "string" 59 + }, 60 + "posts": { 61 + "type": "array", 62 + "items": { 63 + "type": "union", 64 + "refs": [ 65 + "party.whey.app.bsky.feed.defs#postViewRef", 66 + "app.bsky.feed.defs#postView" 67 + ] 68 + } 69 + } 70 + } 71 + } 72 + } 73 + } 74 + } 75 + } 76 + ``` 77 + ---
+75
docs/party.whey.app.bsky.feed.getRepostedByPartial.md
··· 1 + 2 + ## party.whey.app.bsky.feed.getRepostedByPartial 3 + 4 + ```js 5 + { 6 + "lexicon": 1, 7 + "id": "party.whey.app.bsky.feed.getRepostedByPartial", 8 + "defs": { 9 + "main": { 10 + "type": "query", 11 + "description": "Get a list of reposts for a given post.", 12 + "parameters": { 13 + "type": "params", 14 + "required": [ 15 + "uri" 16 + ], 17 + "properties": { 18 + "uri": { 19 + "type": "string", 20 + "format": "at-uri", 21 + "description": "Reference (AT-URI) of post record" 22 + }, 23 + "cid": { 24 + "type": "string", 25 + "format": "cid", 26 + "description": "If supplied, filters to reposts of specific version (by CID) of the post record." 27 + }, 28 + "limit": { 29 + "type": "integer", 30 + "minimum": 1, 31 + "maximum": 100, 32 + "default": 50 33 + }, 34 + "cursor": { 35 + "type": "string" 36 + } 37 + } 38 + }, 39 + "output": { 40 + "encoding": "application/json", 41 + "schema": { 42 + "type": "object", 43 + "required": [ 44 + "uri", 45 + "repostedBy" 46 + ], 47 + "properties": { 48 + "uri": { 49 + "type": "string", 50 + "format": "at-uri" 51 + }, 52 + "cid": { 53 + "type": "string", 54 + "format": "cid" 55 + }, 56 + "cursor": { 57 + "type": "string" 58 + }, 59 + "repostedBy": { 60 + "type": "array", 61 + "items": { 62 + "type": "union", 63 + "refs": [ 64 + "party.whey.app.bsky.actor.defs#profileViewRef", 65 + "app.bsky.actor.defs#profileView" 66 + ] 67 + } 68 + } 69 + } 70 + } 71 + } 72 + } 73 + } 74 + } 75 + ```
+11
docs/structure.md
··· 1 + # Structure 2 + 3 + ![tldrawgraph.png](assets/tldrawgraph.png) 4 + 5 + skylite splits the appview into two parts 6 + 7 + - Public Access Index Server (Index) 8 + - Contextual View Compositor Server (View) 9 + 10 + in short, the index server hosts the hydration and skeleton indexes for users. and the view server collects data from many index servers and layers on top personal preferences and moderation data before handing it off to the application. 11 +
+6
docs/todo.md
··· 1 + # Todo 2 + The central catch-all board of tasks, serving as a temporary replacement for a Kanban board until one exists on Tangled. 3 + lmao 4 + 5 + - [x] hey 6 + - [ ] hey
+13
docs/whylexicons.md
··· 1 + # why 2 + 3 + designing lexicons are weird 4 + 5 + these are the XRPC methods i think are required for a minimal functioning bluesky index to function and pass around data 6 + 7 + some of the methods here reuse existing app.bsky.* XRPC methods, but some are custom under the party.whey.* namespace. 8 + 9 + this is done because i believe that it is expensive to force every single node to return inlined / hydrated responses, when the view server that ingests and composites the final view might not even use the provided inlined / hydrated data in the first place. 10 + 11 + and so, i created "Partial" variants of existing app.bsky.* methods, that allow for "skeleton" responses. specifically, for all methods relating to posts, they are allowed to return "PostViewRef" objects instead of the hydrated "PostView" object. PostViewRef is currently just identical to a strongRef and i am not yet certain if we should add more optional fields to it. 12 + 13 + i do not think that the current lexicons are perfect, but they are good enough that i can continue development of other parts of the skylite system for now
+4 -2
index/onboardingBackfill.ts
··· 1 - import { systemDB, handleIndex } from "../main.ts" 1 + import { indexServerIndexer } from "../indexserver.ts"; 2 + import { systemDB } from "../main.ts" 2 3 import { FINEPDSAndHandleFromDid } from "../utils/identity.ts"; 3 4 4 5 ··· 68 69 const rev = undefined; 69 70 const aturi = uri; 70 71 71 - handleIndex({ 72 + indexServerIndexer({ 72 73 op, 73 74 doer, 74 75 rev, 75 76 aturi, 76 77 value, 77 78 indexsrc: "onboarding_backfill", 79 + userdbname: did, 78 80 }) 79 81 return; 80 82 // console.log(`[BACKFILL] ${collection} -> ${uri}`);
+1
index/types.ts
··· 6 6 aturi: string; 7 7 indexsrc: string; 8 8 value: Record<string, unknown> 9 + userdbname: string; 9 10 }
+304 -5
indexserver.ts
··· 1 + import { indexHandlerContext } from "./index/types.ts"; 2 + 3 + import { validateRecord } from "./utils/records.ts"; 4 + import { searchParamsToJson, withCors } from "./utils/server.ts"; 5 + import * as IndexServerTypes from "./utils/indexservertypes.ts"; 6 + 1 7 export async function indexServerHandler(req: Request): Promise<Response> { 2 8 const url = new URL(req.url); 3 - 4 - if (url.pathname === "/ping") { 5 - return new Response("pong", { status: 200 }); 9 + const pathname = url.pathname; 10 + const bskyUrl = `https://api.bsky.app${pathname}${url.search}`; 11 + const hasAuth = req.headers.has("authorization"); 12 + const xrpcMethod = pathname.startsWith("/xrpc/") 13 + ? pathname.slice("/xrpc/".length) 14 + : null; 15 + const searchParams = searchParamsToJson(url.searchParams); 16 + const jsonUntyped = searchParams; 17 + 18 + switch (xrpcMethod) { 19 + case "app.bsky.actor.getProfile": { 20 + const jsonTyped = 21 + jsonUntyped as IndexServerTypes.AppBskyActorGetProfile.QueryParams; 22 + 23 + const response: IndexServerTypes.AppBskyActorGetProfile.OutputSchema = {}; 24 + 25 + return new Response(JSON.stringify(response), { 26 + headers: withCors({ "Content-Type": "application/json" }), 27 + }); 28 + } 29 + case "app.bsky.actor.getProfiles": { 30 + const jsonTyped = 31 + jsonUntyped as IndexServerTypes.AppBskyActorGetProfiles.QueryParams; 32 + 33 + const response: IndexServerTypes.AppBskyActorGetProfiles.OutputSchema = 34 + {}; 35 + 36 + return new Response(JSON.stringify(response), { 37 + headers: withCors({ "Content-Type": "application/json" }), 38 + }); 39 + } 40 + case "app.bsky.feed.getActorFeeds": { 41 + const jsonTyped = 42 + jsonUntyped as IndexServerTypes.AppBskyFeedGetActorFeeds.QueryParams; 43 + 44 + const response: IndexServerTypes.AppBskyFeedGetActorFeeds.OutputSchema = 45 + {}; 46 + 47 + return new Response(JSON.stringify(response), { 48 + headers: withCors({ "Content-Type": "application/json" }), 49 + }); 50 + } 51 + case "app.bsky.feed.getFeedGenerator": { 52 + const jsonTyped = 53 + jsonUntyped as IndexServerTypes.AppBskyFeedGetFeedGenerator.QueryParams; 54 + 55 + const response: IndexServerTypes.AppBskyFeedGetFeedGenerator.OutputSchema = 56 + {}; 57 + 58 + return new Response(JSON.stringify(response), { 59 + headers: withCors({ "Content-Type": "application/json" }), 60 + }); 61 + } 62 + case "app.bsky.feed.getFeedGenerators": { 63 + const jsonTyped = 64 + jsonUntyped as IndexServerTypes.AppBskyFeedGetFeedGenerators.QueryParams; 65 + 66 + const response: IndexServerTypes.AppBskyFeedGetFeedGenerators.OutputSchema = 67 + {}; 68 + 69 + return new Response(JSON.stringify(response), { 70 + headers: withCors({ "Content-Type": "application/json" }), 71 + }); 72 + } 73 + case "app.bsky.feed.getPosts": { 74 + const jsonTyped = 75 + jsonUntyped as IndexServerTypes.AppBskyFeedGetPosts.QueryParams; 76 + 77 + const response: IndexServerTypes.AppBskyFeedGetPosts.OutputSchema = {}; 78 + 79 + return new Response(JSON.stringify(response), { 80 + headers: withCors({ "Content-Type": "application/json" }), 81 + }); 82 + } 83 + case "party.whey.app.bsky.feed.getActorLikesPartial": { 84 + const jsonTyped = 85 + jsonUntyped as IndexServerTypes.PartyWheyAppBskyFeedGetActorLikesPartial.QueryParams; 86 + 87 + const response: IndexServerTypes.PartyWheyAppBskyFeedGetActorLikesPartial.OutputSchema = 88 + {}; 89 + 90 + return new Response(JSON.stringify(response), { 91 + headers: withCors({ "Content-Type": "application/json" }), 92 + }); 93 + } 94 + case "party.whey.app.bsky.feed.getAuthorFeedPartial": { 95 + const jsonTyped = 96 + jsonUntyped as IndexServerTypes.PartyWheyAppBskyFeedGetAuthorFeedPartial.QueryParams; 97 + 98 + const response: IndexServerTypes.PartyWheyAppBskyFeedGetAuthorFeedPartial.OutputSchema = 99 + {}; 100 + 101 + return new Response(JSON.stringify(response), { 102 + headers: withCors({ "Content-Type": "application/json" }), 103 + }); 104 + } 105 + case "party.whey.app.bsky.feed.getLikesPartial": { 106 + const jsonTyped = 107 + jsonUntyped as IndexServerTypes.PartyWheyAppBskyFeedGetLikesPartial.QueryParams; 108 + 109 + const response: IndexServerTypes.PartyWheyAppBskyFeedGetLikesPartial.OutputSchema = 110 + {}; 111 + 112 + return new Response(JSON.stringify(response), { 113 + headers: withCors({ "Content-Type": "application/json" }), 114 + }); 115 + } 116 + case "party.whey.app.bsky.feed.getPostThreadPartial": { 117 + const jsonTyped = 118 + jsonUntyped as IndexServerTypes.PartyWheyAppBskyFeedGetPostThreadPartial.QueryParams; 119 + 120 + const response: IndexServerTypes.PartyWheyAppBskyFeedGetPostThreadPartial.OutputSchema = 121 + {}; 122 + 123 + return new Response(JSON.stringify(response), { 124 + headers: withCors({ "Content-Type": "application/json" }), 125 + }); 126 + } 127 + case "party.whey.app.bsky.feed.getQuotesPartial": { 128 + const jsonTyped = 129 + jsonUntyped as IndexServerTypes.PartyWheyAppBskyFeedGetQuotesPartial.QueryParams; 130 + 131 + const response: IndexServerTypes.PartyWheyAppBskyFeedGetQuotesPartial.OutputSchema = 132 + {}; 133 + 134 + return new Response(JSON.stringify(response), { 135 + headers: withCors({ "Content-Type": "application/json" }), 136 + }); 137 + } 138 + case "party.whey.app.bsky.feed.getRepostedByPartial": { 139 + const jsonTyped = 140 + jsonUntyped as IndexServerTypes.PartyWheyAppBskyFeedGetRepostedByPartial.QueryParams; 141 + 142 + const response: IndexServerTypes.PartyWheyAppBskyFeedGetRepostedByPartial.OutputSchema = 143 + {}; 144 + 145 + return new Response(JSON.stringify(response), { 146 + headers: withCors({ "Content-Type": "application/json" }), 147 + }); 148 + } 149 + case "party.whey.app.bsky.feed.getListFeedPartial": { 150 + const jsonTyped = 151 + jsonUntyped as IndexServerTypes.PartyWheyAppBskyFeedGetListFeedPartial.QueryParams; 152 + 153 + const response: IndexServerTypes.PartyWheyAppBskyFeedGetListFeedPartial.OutputSchema = 154 + {}; 155 + 156 + return new Response(JSON.stringify(response), { 157 + headers: withCors({ "Content-Type": "application/json" }), 158 + }); 159 + } 160 + /* three more coming soon 161 + app.bsky.graph.getLists 162 + app.bsky.graph.getList 163 + app.bsky.graph.getActorStarterPacks 164 + */ 165 + default: { 166 + return new Response( 167 + JSON.stringify({ 168 + error: "XRPCNotSupported", 169 + message: 170 + "HEY hello there my name is whey dot party and you have used my custom appview that is very cool but have you considered that XRPC Not Supported", 171 + }), 172 + { 173 + status: 404, 174 + headers: withCors({ "Content-Type": "application/json" }), 175 + } 176 + ); 177 + } 6 178 } 7 179 8 - return new Response("Not Found", { status: 404 }); 9 - } 180 + // return new Response("Not Found", { status: 404 }); 181 + } 182 + 183 + type linksQuery = { 184 + target: string; 185 + collection: string; 186 + path: string; 187 + cursor?: string; 188 + }; 189 + type linksRecord = { 190 + did: string; 191 + collection: string; 192 + rkey: string; 193 + }; 194 + type linksRecordsResponse = { 195 + total: string; 196 + linking_records: linksRecord[]; 197 + cursor?: string; 198 + }; 199 + type linksDidsResponse = { 200 + total: string; 201 + linking_dids: string[]; 202 + cursor?: string; 203 + }; 204 + type linksCountResponse = { 205 + total: string; 206 + }; 207 + type linksAllResponse = { 208 + links: Record< 209 + string, 210 + Record< 211 + string, 212 + { 213 + records: number; 214 + distinct_dids: number; 215 + } 216 + > 217 + >; 218 + }; 219 + 220 + type linksAllQuery = { 221 + target: string; 222 + }; 223 + 224 + export async function constellationAPIHandler(req: Request): Promise<Response> { 225 + const url = new URL(req.url); 226 + const pathname = url.pathname; 227 + // const bskyUrl = `https://api.bsky.app${pathname}${url.search}`; 228 + // const hasAuth = req.headers.has("authorization"); 229 + // const constellationMethod = pathname.startsWith("/links") 230 + // ? pathname.slice("/links".length) 231 + // : null; 232 + const searchParams = searchParamsToJson(url.searchParams); 233 + const jsonUntyped = searchParams; 234 + 235 + switch (pathname) { 236 + case "/links": { 237 + const jsonTyped = jsonUntyped as linksQuery; 238 + 239 + const response: linksRecordsResponse = {}; 240 + 241 + return new Response(JSON.stringify(response), { 242 + headers: withCors({ "Content-Type": "application/json" }), 243 + }); 244 + } 245 + case "/links/distinct-dids": { 246 + const jsonTyped = jsonUntyped as linksQuery; 247 + 248 + const response: linksDidsResponse = {}; 249 + 250 + return new Response(JSON.stringify(response), { 251 + headers: withCors({ "Content-Type": "application/json" }), 252 + }); 253 + } 254 + case "/links/count": { 255 + const jsonTyped = jsonUntyped as linksQuery; 256 + 257 + const response: linksCountResponse = {}; 258 + 259 + return new Response(JSON.stringify(response), { 260 + headers: withCors({ "Content-Type": "application/json" }), 261 + }); 262 + } 263 + case "/links/count/distinct-dids": { 264 + const jsonTyped = jsonUntyped as linksQuery; 265 + 266 + const response: linksCountResponse = {}; 267 + 268 + return new Response(JSON.stringify(response), { 269 + headers: withCors({ "Content-Type": "application/json" }), 270 + }); 271 + } 272 + case "/links/all": { 273 + const jsonTyped = jsonUntyped as linksAllQuery; 274 + 275 + const response: linksAllResponse = {}; 276 + 277 + return new Response(JSON.stringify(response), { 278 + headers: withCors({ "Content-Type": "application/json" }), 279 + }); 280 + } 281 + default: { 282 + return new Response( 283 + JSON.stringify({ 284 + error: "idk NotSupported", 285 + message: 286 + "HEY hello there my name is whey dot party and you have used my custom appview that is very cool but have you considered that idk Not Supported", 287 + }), 288 + { 289 + status: 404, 290 + headers: withCors({ "Content-Type": "application/json" }), 291 + } 292 + ); 293 + } 294 + } 295 + } 296 + 297 + export function indexServerIndexer(ctx: indexHandlerContext) { 298 + const record = validateRecord(ctx.value); 299 + switch (record?.$type) { 300 + case "app.bsky.feed.like": { 301 + return; 302 + } 303 + default: { 304 + // what the hell 305 + return; 306 + } 307 + } 308 + }
+19 -29
main.ts
··· 13 13 import * as ViewServerTypes from "./utils/viewservertypes.ts"; 14 14 import * as ATPAPI from "npm:@atproto/api"; 15 15 import { didDocument } from "./utils/diddoc.ts"; 16 - import { cachedFetch, searchParamsToJson } from "./utils/server.ts"; 17 - import { indexServerHandler } from "./indexserver.ts"; 16 + import { cachedFetch, searchParamsToJson, withCors } from "./utils/server.ts"; 17 + import { constellationAPIHandler, indexServerHandler } from "./indexserver.ts"; 18 18 import { viewServerHandler } from "./viewserver.ts"; 19 19 20 20 export const slingshoturl = Deno.env.get("SLINGSHOT_URL"); ··· 70 70 "/xrpc/party.whey.app.bsky.feed.getPostThreadPartial", 71 71 "/xrpc/party.whey.app.bsky.feed.getQuotesPartial", 72 72 "/xrpc/party.whey.app.bsky.feed.getRepostedByPartial", 73 + // more federated endpoints, not planned yet, lexicons will come later 74 + /* 75 + app.bsky.graph.getLists // doesnt need to because theres no items[], and its self ProfileViewBasic 76 + app.bsky.graph.getList // needs to be Partial-ed (items[] union with ProfileViewRef) 77 + app.bsky.graph.getActorStarterPacks // maybe doesnt need to be Partial-ed because its self ProfileViewBasic 78 + 79 + app.bsky.feed.getListFeed // uhh actually already exists its getListFeedPartial 80 + */ 81 + "/xrpc/party.whey.app.bsky.feed.getListFeedPartial", 73 82 ]); 74 83 75 84 Deno.serve( ··· 114 123 // const xrpcMethod = pathname.startsWith("/xrpc/") 115 124 // ? pathname.slice("/xrpc/".length) 116 125 // : null; 126 + const constellationMethod = pathname.startsWith("/links") 127 + ? pathname.slice("/links".length) 128 + : null; 129 + 130 + if (constellationMethod) { 131 + return await constellationAPIHandler(req); 132 + } 117 133 118 134 if (indexServerRoutes.has(pathname)) { 119 135 return await indexServerHandler(req); ··· 123 139 } 124 140 ); 125 141 126 - export function withCors(headers: HeadersInit = {}) { 127 - return { 128 - "Access-Control-Allow-Origin": "*", 129 - ...headers, 130 - }; 131 - } 132 - const corsfree = { 133 - "Access-Control-Allow-Origin": "*", 134 - "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS", 135 - "Access-Control-Allow-Headers": "Content-Type, Authorization", 136 - }; 137 - const json = "application/json"; 138 - 139 142 // ------------------------------------------ 140 143 // Indexer 141 - // ------------------------------------------ 142 - 143 - export function handleIndex(ctx: indexHandlerContext) { 144 - const record = validateRecord(ctx.value); 145 - switch (record?.$type) { 146 - case "app.bsky.feed.like": { 147 - return; 148 - } 149 - default: { 150 - // what the hell 151 - return; 152 - } 153 - } 154 - } 144 + // ------------------------------------------
+8
utils/server.ts
··· 173 173 const result = (await cachedFetch(url)) as ConstellationDistinctDids; 174 174 return result.total; 175 175 } 176 + 177 + 178 + export function withCors(headers: HeadersInit = {}) { 179 + return { 180 + "Access-Control-Allow-Origin": "*", 181 + ...headers, 182 + }; 183 + }
+18 -2
viewserver.ts
··· 1 1 import ky from "npm:ky"; 2 2 import { isGeneratorView } from "./indexserver/types/app/bsky/feed/defs.ts"; 3 - import { withCors } from "./main.ts"; 4 3 import * as ViewServerTypes from "./utils/viewservertypes.ts"; 5 4 import * as ATPAPI from "npm:@atproto/api"; 6 5 import { ··· 10 9 cachedFetch, 11 10 didWebToHttps, 12 11 getSlingshotRecord, 12 + withCors, 13 13 } from "./utils/server.ts"; 14 + import { validateRecord } from "./utils/records.ts"; 15 + import { indexHandlerContext } from "./index/types.ts"; 16 + 14 17 15 18 export async function viewServerHandler(req: Request): Promise<Response> { 16 19 const url = new URL(req.url); ··· 474 477 } 475 478 } 476 479 477 - return new Response("Not Found", { status: 404 }); 480 + // return new Response("Not Found", { status: 404 }); 478 481 } 479 482 480 483 async function sendItToApiBskyApp(req: Request): Promise<Response> { ··· 523 526 headers: proxyRes.headers, 524 527 }); 525 528 } 529 + 530 + export function viewServerIndexer(ctx: indexHandlerContext) { 531 + const record = validateRecord(ctx.value); 532 + switch (record?.$type) { 533 + case "app.bsky.feed.like": { 534 + return; 535 + } 536 + default: { 537 + // what the hell 538 + return; 539 + } 540 + } 541 + }