https://domlink.deployments.hotsocket.fyi/

throwing this pile of doodoocrap at tangled.sh now

+2071 -122
+4
.gitignore
··· 1 + .vscode 2 + out 3 + node_modules 4 + certs
domlink.css static/styles/domlink.css
-93
domlink.js
··· 1 - let _LCounter = 0; 2 - // L[inked]Node 3 - export class Node { 4 - constructor(wrap, init = true) { 5 - this.wraps = wrap; 6 - if (init) { 7 - this.children = []; 8 - this.id = "L" + _LCounter++; 9 - this.wraps.id = this.id; 10 - } 11 - } 12 - // could i make add and with one function? yeah. 13 - // will i do that? no. 14 - // why not? because it feels nice to have them separate. 15 - add(node) { 16 - if (node != undefined) { 17 - let xnode = node; 18 - if (typeof(node)=="string") { 19 - xnode = new Label(node); 20 - } 21 - this.children.push(xnode); 22 - this.wraps.appendChild(xnode.wraps); 23 - } else { 24 - throw new Error("node undefined"); 25 - } 26 - return this 27 - } 28 - with(...nodes) { 29 - if (Array.prototype.isPrototypeOf(nodes[0])) { 30 - if (nodes.length == 1) { 31 - nodes[0].forEach(x=>{this.add(x)}); 32 - } else { 33 - throw new Error("only one array is allowed in `with`. stick them together beforehand if you meant to do this."); 34 - } 35 - } else { 36 - nodes.forEach(x=>{this.add(x)}); 37 - } 38 - return this 39 - } 40 - style(fn) { 41 - fn(this.wraps.style); 42 - return this; 43 - } 44 - } 45 - export class Container extends Node { 46 - constructor() { 47 - let div = document.createElement("div"); 48 - div.classList.add("LContainer"); 49 - super(div); 50 - } 51 - } 52 - export class Column extends Container { 53 - constructor() { 54 - super(); 55 - this.wraps.classList.add("LColumn"); 56 - } 57 - } 58 - export class Row extends Container { 59 - constructor() { 60 - super(); 61 - this.wraps.classList.add("LRow"); 62 - } 63 - } 64 - export class Text extends Node { 65 - #_text; 66 - get text() { 67 - return this._text; 68 - } 69 - set text(x) { 70 - this._text = x; 71 - this.wraps.textContent = x; 72 - } 73 - } 74 - export class Label extends Text { 75 - constructor(text) { 76 - let el = document.createElement("span"); 77 - el.classList.add("LLabel"); 78 - super(el); 79 - this.text = text; 80 - } 81 - } 82 - export class Button extends Text { 83 - constructor(label, action) { 84 - let btn = document.createElement("button"); 85 - btn.textContent = label; 86 - btn.addEventListener("click", action); 87 - super(btn); 88 - this.text = label; 89 - } 90 - } 91 - 92 - // user helper shit 93 - export const Body = new Node(document.body);
+2 -1
index.html static/main.html
··· 4 4 <meta charset="UTF-8"> 5 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 6 <title>fuck</title> 7 - <link rel="stylesheet" href="domlink.css"> 7 + <link rel="stylesheet" href="styles/domlink.css"> 8 + <link rel="stylesheet" href="mine.css"> 8 9 </head> 9 10 <body> 10 11 <noscript>enable js or fukc off</noscript>
-28
main.js
··· 1 - import { Body, Column, Row, Label } from "./domlink.js"; 2 - 3 - const MY_DID = "did:plc:jlplwn5pi4dqrls7i6dx2me7"; 4 - 5 - Body.add(new Column().with( 6 - new Label("who up skeeting they deck"), 7 - ).with( // that way we can feed it an array of things 8 - await async function() { 9 - let posts = await fetch( 10 - "https://api.bsky.app/xrpc/app.bsky.feed.getAuthorFeed?actor="+MY_DID) 11 - .then(rsp=>rsp.json()); 12 - return posts.feed.map((_post)=>{ 13 - let post = _post.post; 14 - return new Column().with( 15 - post.author.displayName, 16 - post.record.text, 17 - new Row().with( 18 - `🗨️ ${post.replyCount} `, 19 - `🔁 ${post.repostCount} `, 20 - `🔃 ${post.quoteCount} `, 21 - `❤️ ${post.likeCount} `, 22 - ), 23 - ).style(s=>{ 24 - s.marginBottom = "1em"; 25 - }); 26 - }); 27 - }() 28 - ));
+1656
package-lock.json
··· 1 + { 2 + "name": "domlink", 3 + "lockfileVersion": 3, 4 + "requires": true, 5 + "packages": { 6 + "": { 7 + "dependencies": { 8 + "@atcute/atproto": "^3.1.1", 9 + "@atcute/bluesky": "^3.2.0", 10 + "@atcute/client": "^4.0.3", 11 + "@atcute/identity": "^1.0.2", 12 + "@atcute/identity-resolver": "^1.1.3" 13 + }, 14 + "devDependencies": { 15 + "copyfiles": "^2.4.1", 16 + "esbuild": "^0.25.8", 17 + "http-server": "^14.1.1", 18 + "typescript": "^5.8.3" 19 + } 20 + }, 21 + "node_modules/@atcute/atproto": { 22 + "version": "3.1.1", 23 + "resolved": "https://registry.npmjs.org/@atcute/atproto/-/atproto-3.1.1.tgz", 24 + "integrity": "sha512-D+RLTIPF0xLu7BPZY8KSewAPemJFh+3n3zeQ3ROsLxbTtCHbrTDMAmAFexaVRAPGcPYrwXaBUlv7yZjScJolMg==", 25 + "license": "0BSD", 26 + "dependencies": { 27 + "@atcute/lexicons": "^1.1.0" 28 + } 29 + }, 30 + "node_modules/@atcute/bluesky": { 31 + "version": "3.2.0", 32 + "resolved": "https://registry.npmjs.org/@atcute/bluesky/-/bluesky-3.2.0.tgz", 33 + "integrity": "sha512-OqPLqUNjXcgQ25MaPdU7H0QcWmZrx6QQk7d5B22A5U4xy+hZJ954kQ5mSAn24Bt0DEm4j/isq1WZovr3vaPTUA==", 34 + "license": "0BSD", 35 + "dependencies": { 36 + "@atcute/atproto": "^3.1.1", 37 + "@atcute/lexicons": "^1.1.0" 38 + } 39 + }, 40 + "node_modules/@atcute/client": { 41 + "version": "4.0.3", 42 + "resolved": "https://registry.npmjs.org/@atcute/client/-/client-4.0.3.tgz", 43 + "integrity": "sha512-RIOZWFVLca/HiPAAUDqQPOdOreCxTbL5cb+WUf5yqQOKIu5yEAP3eksinmlLmgIrlr5qVOE7brazUUzaskFCfw==", 44 + "license": "MIT", 45 + "dependencies": { 46 + "@atcute/identity": "^1.0.2", 47 + "@atcute/lexicons": "^1.0.3" 48 + } 49 + }, 50 + "node_modules/@atcute/identity": { 51 + "version": "1.0.3", 52 + "resolved": "https://registry.npmjs.org/@atcute/identity/-/identity-1.0.3.tgz", 53 + "integrity": "sha512-mNMxbKHFGys03A8JXKk0KfMBzdd0vrYMzZZWjpw1nYTs0+ea6bo5S1hwqVUZxHdo1gFHSe/t63jxQIF4yL9aKw==", 54 + "license": "0BSD", 55 + "dependencies": { 56 + "@atcute/lexicons": "^1.0.4", 57 + "@badrap/valita": "^0.4.5" 58 + } 59 + }, 60 + "node_modules/@atcute/identity-resolver": { 61 + "version": "1.1.3", 62 + "resolved": "https://registry.npmjs.org/@atcute/identity-resolver/-/identity-resolver-1.1.3.tgz", 63 + "integrity": "sha512-KZgGgg99CWaV7Df3+h3X/WMrDzTPQVfsaoIVbTNLx2B56BvCL2EmaxPSVw/7BFUJMZHlVU4rtoEB4lyvNyMswA==", 64 + "license": "MIT", 65 + "dependencies": { 66 + "@atcute/lexicons": "^1.0.4", 67 + "@atcute/util-fetch": "^1.0.1", 68 + "@badrap/valita": "^0.4.4" 69 + }, 70 + "peerDependencies": { 71 + "@atcute/identity": "^1.0.0" 72 + } 73 + }, 74 + "node_modules/@atcute/lexicons": { 75 + "version": "1.1.0", 76 + "resolved": "https://registry.npmjs.org/@atcute/lexicons/-/lexicons-1.1.0.tgz", 77 + "integrity": "sha512-LFqwnria78xLYb62Ri/+WwQpUTgZp2DuyolNGIIOV1dpiKhFFFh//nscHMA6IExFLQRqWDs3tTjy7zv0h3sf1Q==", 78 + "license": "0BSD", 79 + "dependencies": { 80 + "esm-env": "^1.2.2" 81 + } 82 + }, 83 + "node_modules/@atcute/util-fetch": { 84 + "version": "1.0.1", 85 + "resolved": "https://registry.npmjs.org/@atcute/util-fetch/-/util-fetch-1.0.1.tgz", 86 + "integrity": "sha512-Clc0E/5ufyGBVfYBUwWNlHONlZCoblSr4Ho50l1LhmRPGB1Wu/AQ9Sz+rsBg7fdaW/auve8ulmwhRhnX2cGRow==", 87 + "license": "MIT", 88 + "dependencies": { 89 + "@badrap/valita": "^0.4.2" 90 + } 91 + }, 92 + "node_modules/@badrap/valita": { 93 + "version": "0.4.5", 94 + "resolved": "https://registry.npmjs.org/@badrap/valita/-/valita-0.4.5.tgz", 95 + "integrity": "sha512-4QwGbuhh/JesHRQj79mO/l37PvJj4l/tlAu7+S1n4h47qwaNpZ0WDvIwUGLYUsdi9uQ5UPpiG9wb1Wm3XUFBUQ==", 96 + "license": "MIT", 97 + "engines": { 98 + "node": ">= 18" 99 + } 100 + }, 101 + "node_modules/@esbuild/aix-ppc64": { 102 + "version": "0.25.8", 103 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", 104 + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", 105 + "cpu": [ 106 + "ppc64" 107 + ], 108 + "dev": true, 109 + "license": "MIT", 110 + "optional": true, 111 + "os": [ 112 + "aix" 113 + ], 114 + "engines": { 115 + "node": ">=18" 116 + } 117 + }, 118 + "node_modules/@esbuild/android-arm": { 119 + "version": "0.25.8", 120 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", 121 + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", 122 + "cpu": [ 123 + "arm" 124 + ], 125 + "dev": true, 126 + "license": "MIT", 127 + "optional": true, 128 + "os": [ 129 + "android" 130 + ], 131 + "engines": { 132 + "node": ">=18" 133 + } 134 + }, 135 + "node_modules/@esbuild/android-arm64": { 136 + "version": "0.25.8", 137 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", 138 + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", 139 + "cpu": [ 140 + "arm64" 141 + ], 142 + "dev": true, 143 + "license": "MIT", 144 + "optional": true, 145 + "os": [ 146 + "android" 147 + ], 148 + "engines": { 149 + "node": ">=18" 150 + } 151 + }, 152 + "node_modules/@esbuild/android-x64": { 153 + "version": "0.25.8", 154 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", 155 + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", 156 + "cpu": [ 157 + "x64" 158 + ], 159 + "dev": true, 160 + "license": "MIT", 161 + "optional": true, 162 + "os": [ 163 + "android" 164 + ], 165 + "engines": { 166 + "node": ">=18" 167 + } 168 + }, 169 + "node_modules/@esbuild/darwin-arm64": { 170 + "version": "0.25.8", 171 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", 172 + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", 173 + "cpu": [ 174 + "arm64" 175 + ], 176 + "dev": true, 177 + "license": "MIT", 178 + "optional": true, 179 + "os": [ 180 + "darwin" 181 + ], 182 + "engines": { 183 + "node": ">=18" 184 + } 185 + }, 186 + "node_modules/@esbuild/darwin-x64": { 187 + "version": "0.25.8", 188 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", 189 + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", 190 + "cpu": [ 191 + "x64" 192 + ], 193 + "dev": true, 194 + "license": "MIT", 195 + "optional": true, 196 + "os": [ 197 + "darwin" 198 + ], 199 + "engines": { 200 + "node": ">=18" 201 + } 202 + }, 203 + "node_modules/@esbuild/freebsd-arm64": { 204 + "version": "0.25.8", 205 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", 206 + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", 207 + "cpu": [ 208 + "arm64" 209 + ], 210 + "dev": true, 211 + "license": "MIT", 212 + "optional": true, 213 + "os": [ 214 + "freebsd" 215 + ], 216 + "engines": { 217 + "node": ">=18" 218 + } 219 + }, 220 + "node_modules/@esbuild/freebsd-x64": { 221 + "version": "0.25.8", 222 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", 223 + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", 224 + "cpu": [ 225 + "x64" 226 + ], 227 + "dev": true, 228 + "license": "MIT", 229 + "optional": true, 230 + "os": [ 231 + "freebsd" 232 + ], 233 + "engines": { 234 + "node": ">=18" 235 + } 236 + }, 237 + "node_modules/@esbuild/linux-arm": { 238 + "version": "0.25.8", 239 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", 240 + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", 241 + "cpu": [ 242 + "arm" 243 + ], 244 + "dev": true, 245 + "license": "MIT", 246 + "optional": true, 247 + "os": [ 248 + "linux" 249 + ], 250 + "engines": { 251 + "node": ">=18" 252 + } 253 + }, 254 + "node_modules/@esbuild/linux-arm64": { 255 + "version": "0.25.8", 256 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", 257 + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", 258 + "cpu": [ 259 + "arm64" 260 + ], 261 + "dev": true, 262 + "license": "MIT", 263 + "optional": true, 264 + "os": [ 265 + "linux" 266 + ], 267 + "engines": { 268 + "node": ">=18" 269 + } 270 + }, 271 + "node_modules/@esbuild/linux-ia32": { 272 + "version": "0.25.8", 273 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", 274 + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", 275 + "cpu": [ 276 + "ia32" 277 + ], 278 + "dev": true, 279 + "license": "MIT", 280 + "optional": true, 281 + "os": [ 282 + "linux" 283 + ], 284 + "engines": { 285 + "node": ">=18" 286 + } 287 + }, 288 + "node_modules/@esbuild/linux-loong64": { 289 + "version": "0.25.8", 290 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", 291 + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", 292 + "cpu": [ 293 + "loong64" 294 + ], 295 + "dev": true, 296 + "license": "MIT", 297 + "optional": true, 298 + "os": [ 299 + "linux" 300 + ], 301 + "engines": { 302 + "node": ">=18" 303 + } 304 + }, 305 + "node_modules/@esbuild/linux-mips64el": { 306 + "version": "0.25.8", 307 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", 308 + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", 309 + "cpu": [ 310 + "mips64el" 311 + ], 312 + "dev": true, 313 + "license": "MIT", 314 + "optional": true, 315 + "os": [ 316 + "linux" 317 + ], 318 + "engines": { 319 + "node": ">=18" 320 + } 321 + }, 322 + "node_modules/@esbuild/linux-ppc64": { 323 + "version": "0.25.8", 324 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", 325 + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", 326 + "cpu": [ 327 + "ppc64" 328 + ], 329 + "dev": true, 330 + "license": "MIT", 331 + "optional": true, 332 + "os": [ 333 + "linux" 334 + ], 335 + "engines": { 336 + "node": ">=18" 337 + } 338 + }, 339 + "node_modules/@esbuild/linux-riscv64": { 340 + "version": "0.25.8", 341 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", 342 + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", 343 + "cpu": [ 344 + "riscv64" 345 + ], 346 + "dev": true, 347 + "license": "MIT", 348 + "optional": true, 349 + "os": [ 350 + "linux" 351 + ], 352 + "engines": { 353 + "node": ">=18" 354 + } 355 + }, 356 + "node_modules/@esbuild/linux-s390x": { 357 + "version": "0.25.8", 358 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", 359 + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", 360 + "cpu": [ 361 + "s390x" 362 + ], 363 + "dev": true, 364 + "license": "MIT", 365 + "optional": true, 366 + "os": [ 367 + "linux" 368 + ], 369 + "engines": { 370 + "node": ">=18" 371 + } 372 + }, 373 + "node_modules/@esbuild/linux-x64": { 374 + "version": "0.25.8", 375 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", 376 + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", 377 + "cpu": [ 378 + "x64" 379 + ], 380 + "dev": true, 381 + "license": "MIT", 382 + "optional": true, 383 + "os": [ 384 + "linux" 385 + ], 386 + "engines": { 387 + "node": ">=18" 388 + } 389 + }, 390 + "node_modules/@esbuild/netbsd-arm64": { 391 + "version": "0.25.8", 392 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", 393 + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", 394 + "cpu": [ 395 + "arm64" 396 + ], 397 + "dev": true, 398 + "license": "MIT", 399 + "optional": true, 400 + "os": [ 401 + "netbsd" 402 + ], 403 + "engines": { 404 + "node": ">=18" 405 + } 406 + }, 407 + "node_modules/@esbuild/netbsd-x64": { 408 + "version": "0.25.8", 409 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", 410 + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", 411 + "cpu": [ 412 + "x64" 413 + ], 414 + "dev": true, 415 + "license": "MIT", 416 + "optional": true, 417 + "os": [ 418 + "netbsd" 419 + ], 420 + "engines": { 421 + "node": ">=18" 422 + } 423 + }, 424 + "node_modules/@esbuild/openbsd-arm64": { 425 + "version": "0.25.8", 426 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", 427 + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", 428 + "cpu": [ 429 + "arm64" 430 + ], 431 + "dev": true, 432 + "license": "MIT", 433 + "optional": true, 434 + "os": [ 435 + "openbsd" 436 + ], 437 + "engines": { 438 + "node": ">=18" 439 + } 440 + }, 441 + "node_modules/@esbuild/openbsd-x64": { 442 + "version": "0.25.8", 443 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", 444 + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", 445 + "cpu": [ 446 + "x64" 447 + ], 448 + "dev": true, 449 + "license": "MIT", 450 + "optional": true, 451 + "os": [ 452 + "openbsd" 453 + ], 454 + "engines": { 455 + "node": ">=18" 456 + } 457 + }, 458 + "node_modules/@esbuild/openharmony-arm64": { 459 + "version": "0.25.8", 460 + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", 461 + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", 462 + "cpu": [ 463 + "arm64" 464 + ], 465 + "dev": true, 466 + "license": "MIT", 467 + "optional": true, 468 + "os": [ 469 + "openharmony" 470 + ], 471 + "engines": { 472 + "node": ">=18" 473 + } 474 + }, 475 + "node_modules/@esbuild/sunos-x64": { 476 + "version": "0.25.8", 477 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", 478 + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", 479 + "cpu": [ 480 + "x64" 481 + ], 482 + "dev": true, 483 + "license": "MIT", 484 + "optional": true, 485 + "os": [ 486 + "sunos" 487 + ], 488 + "engines": { 489 + "node": ">=18" 490 + } 491 + }, 492 + "node_modules/@esbuild/win32-arm64": { 493 + "version": "0.25.8", 494 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", 495 + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", 496 + "cpu": [ 497 + "arm64" 498 + ], 499 + "dev": true, 500 + "license": "MIT", 501 + "optional": true, 502 + "os": [ 503 + "win32" 504 + ], 505 + "engines": { 506 + "node": ">=18" 507 + } 508 + }, 509 + "node_modules/@esbuild/win32-ia32": { 510 + "version": "0.25.8", 511 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", 512 + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", 513 + "cpu": [ 514 + "ia32" 515 + ], 516 + "dev": true, 517 + "license": "MIT", 518 + "optional": true, 519 + "os": [ 520 + "win32" 521 + ], 522 + "engines": { 523 + "node": ">=18" 524 + } 525 + }, 526 + "node_modules/@esbuild/win32-x64": { 527 + "version": "0.25.8", 528 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", 529 + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", 530 + "cpu": [ 531 + "x64" 532 + ], 533 + "dev": true, 534 + "license": "MIT", 535 + "optional": true, 536 + "os": [ 537 + "win32" 538 + ], 539 + "engines": { 540 + "node": ">=18" 541 + } 542 + }, 543 + "node_modules/ansi-regex": { 544 + "version": "5.0.1", 545 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 546 + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 547 + "dev": true, 548 + "license": "MIT", 549 + "engines": { 550 + "node": ">=8" 551 + } 552 + }, 553 + "node_modules/ansi-styles": { 554 + "version": "4.3.0", 555 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 556 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 557 + "dev": true, 558 + "license": "MIT", 559 + "dependencies": { 560 + "color-convert": "^2.0.1" 561 + }, 562 + "engines": { 563 + "node": ">=8" 564 + }, 565 + "funding": { 566 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 567 + } 568 + }, 569 + "node_modules/async": { 570 + "version": "3.2.6", 571 + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", 572 + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", 573 + "dev": true, 574 + "license": "MIT" 575 + }, 576 + "node_modules/balanced-match": { 577 + "version": "1.0.2", 578 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 579 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 580 + "dev": true, 581 + "license": "MIT" 582 + }, 583 + "node_modules/basic-auth": { 584 + "version": "2.0.1", 585 + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", 586 + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", 587 + "dev": true, 588 + "license": "MIT", 589 + "dependencies": { 590 + "safe-buffer": "5.1.2" 591 + }, 592 + "engines": { 593 + "node": ">= 0.8" 594 + } 595 + }, 596 + "node_modules/brace-expansion": { 597 + "version": "1.1.12", 598 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", 599 + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", 600 + "dev": true, 601 + "license": "MIT", 602 + "dependencies": { 603 + "balanced-match": "^1.0.0", 604 + "concat-map": "0.0.1" 605 + } 606 + }, 607 + "node_modules/call-bind-apply-helpers": { 608 + "version": "1.0.2", 609 + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 610 + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 611 + "dev": true, 612 + "license": "MIT", 613 + "dependencies": { 614 + "es-errors": "^1.3.0", 615 + "function-bind": "^1.1.2" 616 + }, 617 + "engines": { 618 + "node": ">= 0.4" 619 + } 620 + }, 621 + "node_modules/call-bound": { 622 + "version": "1.0.4", 623 + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", 624 + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", 625 + "dev": true, 626 + "license": "MIT", 627 + "dependencies": { 628 + "call-bind-apply-helpers": "^1.0.2", 629 + "get-intrinsic": "^1.3.0" 630 + }, 631 + "engines": { 632 + "node": ">= 0.4" 633 + }, 634 + "funding": { 635 + "url": "https://github.com/sponsors/ljharb" 636 + } 637 + }, 638 + "node_modules/chalk": { 639 + "version": "4.1.2", 640 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 641 + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 642 + "dev": true, 643 + "license": "MIT", 644 + "dependencies": { 645 + "ansi-styles": "^4.1.0", 646 + "supports-color": "^7.1.0" 647 + }, 648 + "engines": { 649 + "node": ">=10" 650 + }, 651 + "funding": { 652 + "url": "https://github.com/chalk/chalk?sponsor=1" 653 + } 654 + }, 655 + "node_modules/cliui": { 656 + "version": "7.0.4", 657 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", 658 + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", 659 + "dev": true, 660 + "license": "ISC", 661 + "dependencies": { 662 + "string-width": "^4.2.0", 663 + "strip-ansi": "^6.0.0", 664 + "wrap-ansi": "^7.0.0" 665 + } 666 + }, 667 + "node_modules/color-convert": { 668 + "version": "2.0.1", 669 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 670 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 671 + "dev": true, 672 + "license": "MIT", 673 + "dependencies": { 674 + "color-name": "~1.1.4" 675 + }, 676 + "engines": { 677 + "node": ">=7.0.0" 678 + } 679 + }, 680 + "node_modules/color-name": { 681 + "version": "1.1.4", 682 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 683 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 684 + "dev": true, 685 + "license": "MIT" 686 + }, 687 + "node_modules/concat-map": { 688 + "version": "0.0.1", 689 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 690 + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 691 + "dev": true, 692 + "license": "MIT" 693 + }, 694 + "node_modules/copyfiles": { 695 + "version": "2.4.1", 696 + "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", 697 + "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", 698 + "dev": true, 699 + "license": "MIT", 700 + "dependencies": { 701 + "glob": "^7.0.5", 702 + "minimatch": "^3.0.3", 703 + "mkdirp": "^1.0.4", 704 + "noms": "0.0.0", 705 + "through2": "^2.0.1", 706 + "untildify": "^4.0.0", 707 + "yargs": "^16.1.0" 708 + }, 709 + "bin": { 710 + "copyfiles": "copyfiles", 711 + "copyup": "copyfiles" 712 + } 713 + }, 714 + "node_modules/core-util-is": { 715 + "version": "1.0.3", 716 + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 717 + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 718 + "dev": true, 719 + "license": "MIT" 720 + }, 721 + "node_modules/corser": { 722 + "version": "2.0.1", 723 + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", 724 + "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", 725 + "dev": true, 726 + "license": "MIT", 727 + "engines": { 728 + "node": ">= 0.4.0" 729 + } 730 + }, 731 + "node_modules/debug": { 732 + "version": "4.4.1", 733 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", 734 + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", 735 + "dev": true, 736 + "license": "MIT", 737 + "dependencies": { 738 + "ms": "^2.1.3" 739 + }, 740 + "engines": { 741 + "node": ">=6.0" 742 + }, 743 + "peerDependenciesMeta": { 744 + "supports-color": { 745 + "optional": true 746 + } 747 + } 748 + }, 749 + "node_modules/dunder-proto": { 750 + "version": "1.0.1", 751 + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 752 + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 753 + "dev": true, 754 + "license": "MIT", 755 + "dependencies": { 756 + "call-bind-apply-helpers": "^1.0.1", 757 + "es-errors": "^1.3.0", 758 + "gopd": "^1.2.0" 759 + }, 760 + "engines": { 761 + "node": ">= 0.4" 762 + } 763 + }, 764 + "node_modules/emoji-regex": { 765 + "version": "8.0.0", 766 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 767 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 768 + "dev": true, 769 + "license": "MIT" 770 + }, 771 + "node_modules/es-define-property": { 772 + "version": "1.0.1", 773 + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 774 + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 775 + "dev": true, 776 + "license": "MIT", 777 + "engines": { 778 + "node": ">= 0.4" 779 + } 780 + }, 781 + "node_modules/es-errors": { 782 + "version": "1.3.0", 783 + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 784 + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 785 + "dev": true, 786 + "license": "MIT", 787 + "engines": { 788 + "node": ">= 0.4" 789 + } 790 + }, 791 + "node_modules/es-object-atoms": { 792 + "version": "1.1.1", 793 + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 794 + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 795 + "dev": true, 796 + "license": "MIT", 797 + "dependencies": { 798 + "es-errors": "^1.3.0" 799 + }, 800 + "engines": { 801 + "node": ">= 0.4" 802 + } 803 + }, 804 + "node_modules/esbuild": { 805 + "version": "0.25.8", 806 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", 807 + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", 808 + "dev": true, 809 + "hasInstallScript": true, 810 + "license": "MIT", 811 + "bin": { 812 + "esbuild": "bin/esbuild" 813 + }, 814 + "engines": { 815 + "node": ">=18" 816 + }, 817 + "optionalDependencies": { 818 + "@esbuild/aix-ppc64": "0.25.8", 819 + "@esbuild/android-arm": "0.25.8", 820 + "@esbuild/android-arm64": "0.25.8", 821 + "@esbuild/android-x64": "0.25.8", 822 + "@esbuild/darwin-arm64": "0.25.8", 823 + "@esbuild/darwin-x64": "0.25.8", 824 + "@esbuild/freebsd-arm64": "0.25.8", 825 + "@esbuild/freebsd-x64": "0.25.8", 826 + "@esbuild/linux-arm": "0.25.8", 827 + "@esbuild/linux-arm64": "0.25.8", 828 + "@esbuild/linux-ia32": "0.25.8", 829 + "@esbuild/linux-loong64": "0.25.8", 830 + "@esbuild/linux-mips64el": "0.25.8", 831 + "@esbuild/linux-ppc64": "0.25.8", 832 + "@esbuild/linux-riscv64": "0.25.8", 833 + "@esbuild/linux-s390x": "0.25.8", 834 + "@esbuild/linux-x64": "0.25.8", 835 + "@esbuild/netbsd-arm64": "0.25.8", 836 + "@esbuild/netbsd-x64": "0.25.8", 837 + "@esbuild/openbsd-arm64": "0.25.8", 838 + "@esbuild/openbsd-x64": "0.25.8", 839 + "@esbuild/openharmony-arm64": "0.25.8", 840 + "@esbuild/sunos-x64": "0.25.8", 841 + "@esbuild/win32-arm64": "0.25.8", 842 + "@esbuild/win32-ia32": "0.25.8", 843 + "@esbuild/win32-x64": "0.25.8" 844 + } 845 + }, 846 + "node_modules/escalade": { 847 + "version": "3.2.0", 848 + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 849 + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 850 + "dev": true, 851 + "license": "MIT", 852 + "engines": { 853 + "node": ">=6" 854 + } 855 + }, 856 + "node_modules/esm-env": { 857 + "version": "1.2.2", 858 + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", 859 + "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", 860 + "license": "MIT" 861 + }, 862 + "node_modules/eventemitter3": { 863 + "version": "4.0.7", 864 + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", 865 + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", 866 + "dev": true, 867 + "license": "MIT" 868 + }, 869 + "node_modules/follow-redirects": { 870 + "version": "1.15.11", 871 + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", 872 + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", 873 + "dev": true, 874 + "funding": [ 875 + { 876 + "type": "individual", 877 + "url": "https://github.com/sponsors/RubenVerborgh" 878 + } 879 + ], 880 + "license": "MIT", 881 + "engines": { 882 + "node": ">=4.0" 883 + }, 884 + "peerDependenciesMeta": { 885 + "debug": { 886 + "optional": true 887 + } 888 + } 889 + }, 890 + "node_modules/fs.realpath": { 891 + "version": "1.0.0", 892 + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 893 + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 894 + "dev": true, 895 + "license": "ISC" 896 + }, 897 + "node_modules/function-bind": { 898 + "version": "1.1.2", 899 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 900 + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 901 + "dev": true, 902 + "license": "MIT", 903 + "funding": { 904 + "url": "https://github.com/sponsors/ljharb" 905 + } 906 + }, 907 + "node_modules/get-caller-file": { 908 + "version": "2.0.5", 909 + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 910 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 911 + "dev": true, 912 + "license": "ISC", 913 + "engines": { 914 + "node": "6.* || 8.* || >= 10.*" 915 + } 916 + }, 917 + "node_modules/get-intrinsic": { 918 + "version": "1.3.0", 919 + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 920 + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 921 + "dev": true, 922 + "license": "MIT", 923 + "dependencies": { 924 + "call-bind-apply-helpers": "^1.0.2", 925 + "es-define-property": "^1.0.1", 926 + "es-errors": "^1.3.0", 927 + "es-object-atoms": "^1.1.1", 928 + "function-bind": "^1.1.2", 929 + "get-proto": "^1.0.1", 930 + "gopd": "^1.2.0", 931 + "has-symbols": "^1.1.0", 932 + "hasown": "^2.0.2", 933 + "math-intrinsics": "^1.1.0" 934 + }, 935 + "engines": { 936 + "node": ">= 0.4" 937 + }, 938 + "funding": { 939 + "url": "https://github.com/sponsors/ljharb" 940 + } 941 + }, 942 + "node_modules/get-proto": { 943 + "version": "1.0.1", 944 + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 945 + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 946 + "dev": true, 947 + "license": "MIT", 948 + "dependencies": { 949 + "dunder-proto": "^1.0.1", 950 + "es-object-atoms": "^1.0.0" 951 + }, 952 + "engines": { 953 + "node": ">= 0.4" 954 + } 955 + }, 956 + "node_modules/glob": { 957 + "version": "7.2.3", 958 + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 959 + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 960 + "deprecated": "Glob versions prior to v9 are no longer supported", 961 + "dev": true, 962 + "license": "ISC", 963 + "dependencies": { 964 + "fs.realpath": "^1.0.0", 965 + "inflight": "^1.0.4", 966 + "inherits": "2", 967 + "minimatch": "^3.1.1", 968 + "once": "^1.3.0", 969 + "path-is-absolute": "^1.0.0" 970 + }, 971 + "engines": { 972 + "node": "*" 973 + }, 974 + "funding": { 975 + "url": "https://github.com/sponsors/isaacs" 976 + } 977 + }, 978 + "node_modules/gopd": { 979 + "version": "1.2.0", 980 + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 981 + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 982 + "dev": true, 983 + "license": "MIT", 984 + "engines": { 985 + "node": ">= 0.4" 986 + }, 987 + "funding": { 988 + "url": "https://github.com/sponsors/ljharb" 989 + } 990 + }, 991 + "node_modules/has-flag": { 992 + "version": "4.0.0", 993 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 994 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 995 + "dev": true, 996 + "license": "MIT", 997 + "engines": { 998 + "node": ">=8" 999 + } 1000 + }, 1001 + "node_modules/has-symbols": { 1002 + "version": "1.1.0", 1003 + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 1004 + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 1005 + "dev": true, 1006 + "license": "MIT", 1007 + "engines": { 1008 + "node": ">= 0.4" 1009 + }, 1010 + "funding": { 1011 + "url": "https://github.com/sponsors/ljharb" 1012 + } 1013 + }, 1014 + "node_modules/hasown": { 1015 + "version": "2.0.2", 1016 + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1017 + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1018 + "dev": true, 1019 + "license": "MIT", 1020 + "dependencies": { 1021 + "function-bind": "^1.1.2" 1022 + }, 1023 + "engines": { 1024 + "node": ">= 0.4" 1025 + } 1026 + }, 1027 + "node_modules/he": { 1028 + "version": "1.2.0", 1029 + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1030 + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1031 + "dev": true, 1032 + "license": "MIT", 1033 + "bin": { 1034 + "he": "bin/he" 1035 + } 1036 + }, 1037 + "node_modules/html-encoding-sniffer": { 1038 + "version": "3.0.0", 1039 + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", 1040 + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", 1041 + "dev": true, 1042 + "license": "MIT", 1043 + "dependencies": { 1044 + "whatwg-encoding": "^2.0.0" 1045 + }, 1046 + "engines": { 1047 + "node": ">=12" 1048 + } 1049 + }, 1050 + "node_modules/http-proxy": { 1051 + "version": "1.18.1", 1052 + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", 1053 + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", 1054 + "dev": true, 1055 + "license": "MIT", 1056 + "dependencies": { 1057 + "eventemitter3": "^4.0.0", 1058 + "follow-redirects": "^1.0.0", 1059 + "requires-port": "^1.0.0" 1060 + }, 1061 + "engines": { 1062 + "node": ">=8.0.0" 1063 + } 1064 + }, 1065 + "node_modules/http-server": { 1066 + "version": "14.1.1", 1067 + "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", 1068 + "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", 1069 + "dev": true, 1070 + "license": "MIT", 1071 + "dependencies": { 1072 + "basic-auth": "^2.0.1", 1073 + "chalk": "^4.1.2", 1074 + "corser": "^2.0.1", 1075 + "he": "^1.2.0", 1076 + "html-encoding-sniffer": "^3.0.0", 1077 + "http-proxy": "^1.18.1", 1078 + "mime": "^1.6.0", 1079 + "minimist": "^1.2.6", 1080 + "opener": "^1.5.1", 1081 + "portfinder": "^1.0.28", 1082 + "secure-compare": "3.0.1", 1083 + "union": "~0.5.0", 1084 + "url-join": "^4.0.1" 1085 + }, 1086 + "bin": { 1087 + "http-server": "bin/http-server" 1088 + }, 1089 + "engines": { 1090 + "node": ">=12" 1091 + } 1092 + }, 1093 + "node_modules/iconv-lite": { 1094 + "version": "0.6.3", 1095 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 1096 + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 1097 + "dev": true, 1098 + "license": "MIT", 1099 + "dependencies": { 1100 + "safer-buffer": ">= 2.1.2 < 3.0.0" 1101 + }, 1102 + "engines": { 1103 + "node": ">=0.10.0" 1104 + } 1105 + }, 1106 + "node_modules/inflight": { 1107 + "version": "1.0.6", 1108 + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1109 + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1110 + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", 1111 + "dev": true, 1112 + "license": "ISC", 1113 + "dependencies": { 1114 + "once": "^1.3.0", 1115 + "wrappy": "1" 1116 + } 1117 + }, 1118 + "node_modules/inherits": { 1119 + "version": "2.0.4", 1120 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1121 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1122 + "dev": true, 1123 + "license": "ISC" 1124 + }, 1125 + "node_modules/is-fullwidth-code-point": { 1126 + "version": "3.0.0", 1127 + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1128 + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1129 + "dev": true, 1130 + "license": "MIT", 1131 + "engines": { 1132 + "node": ">=8" 1133 + } 1134 + }, 1135 + "node_modules/isarray": { 1136 + "version": "0.0.1", 1137 + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1138 + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", 1139 + "dev": true, 1140 + "license": "MIT" 1141 + }, 1142 + "node_modules/math-intrinsics": { 1143 + "version": "1.1.0", 1144 + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 1145 + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 1146 + "dev": true, 1147 + "license": "MIT", 1148 + "engines": { 1149 + "node": ">= 0.4" 1150 + } 1151 + }, 1152 + "node_modules/mime": { 1153 + "version": "1.6.0", 1154 + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1155 + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1156 + "dev": true, 1157 + "license": "MIT", 1158 + "bin": { 1159 + "mime": "cli.js" 1160 + }, 1161 + "engines": { 1162 + "node": ">=4" 1163 + } 1164 + }, 1165 + "node_modules/minimatch": { 1166 + "version": "3.1.2", 1167 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1168 + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1169 + "dev": true, 1170 + "license": "ISC", 1171 + "dependencies": { 1172 + "brace-expansion": "^1.1.7" 1173 + }, 1174 + "engines": { 1175 + "node": "*" 1176 + } 1177 + }, 1178 + "node_modules/minimist": { 1179 + "version": "1.2.8", 1180 + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 1181 + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 1182 + "dev": true, 1183 + "license": "MIT", 1184 + "funding": { 1185 + "url": "https://github.com/sponsors/ljharb" 1186 + } 1187 + }, 1188 + "node_modules/mkdirp": { 1189 + "version": "1.0.4", 1190 + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 1191 + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 1192 + "dev": true, 1193 + "license": "MIT", 1194 + "bin": { 1195 + "mkdirp": "bin/cmd.js" 1196 + }, 1197 + "engines": { 1198 + "node": ">=10" 1199 + } 1200 + }, 1201 + "node_modules/ms": { 1202 + "version": "2.1.3", 1203 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1204 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1205 + "dev": true, 1206 + "license": "MIT" 1207 + }, 1208 + "node_modules/noms": { 1209 + "version": "0.0.0", 1210 + "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", 1211 + "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", 1212 + "dev": true, 1213 + "license": "ISC", 1214 + "dependencies": { 1215 + "inherits": "^2.0.1", 1216 + "readable-stream": "~1.0.31" 1217 + } 1218 + }, 1219 + "node_modules/object-inspect": { 1220 + "version": "1.13.4", 1221 + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", 1222 + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", 1223 + "dev": true, 1224 + "license": "MIT", 1225 + "engines": { 1226 + "node": ">= 0.4" 1227 + }, 1228 + "funding": { 1229 + "url": "https://github.com/sponsors/ljharb" 1230 + } 1231 + }, 1232 + "node_modules/once": { 1233 + "version": "1.4.0", 1234 + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1235 + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1236 + "dev": true, 1237 + "license": "ISC", 1238 + "dependencies": { 1239 + "wrappy": "1" 1240 + } 1241 + }, 1242 + "node_modules/opener": { 1243 + "version": "1.5.2", 1244 + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", 1245 + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", 1246 + "dev": true, 1247 + "license": "(WTFPL OR MIT)", 1248 + "bin": { 1249 + "opener": "bin/opener-bin.js" 1250 + } 1251 + }, 1252 + "node_modules/path-is-absolute": { 1253 + "version": "1.0.1", 1254 + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1255 + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1256 + "dev": true, 1257 + "license": "MIT", 1258 + "engines": { 1259 + "node": ">=0.10.0" 1260 + } 1261 + }, 1262 + "node_modules/portfinder": { 1263 + "version": "1.0.37", 1264 + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.37.tgz", 1265 + "integrity": "sha512-yuGIEjDAYnnOex9ddMnKZEMFE0CcGo6zbfzDklkmT1m5z734ss6JMzN9rNB3+RR7iS+F10D4/BVIaXOyh8PQKw==", 1266 + "dev": true, 1267 + "license": "MIT", 1268 + "dependencies": { 1269 + "async": "^3.2.6", 1270 + "debug": "^4.3.6" 1271 + }, 1272 + "engines": { 1273 + "node": ">= 10.12" 1274 + } 1275 + }, 1276 + "node_modules/process-nextick-args": { 1277 + "version": "2.0.1", 1278 + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1279 + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 1280 + "dev": true, 1281 + "license": "MIT" 1282 + }, 1283 + "node_modules/qs": { 1284 + "version": "6.14.0", 1285 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", 1286 + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", 1287 + "dev": true, 1288 + "license": "BSD-3-Clause", 1289 + "dependencies": { 1290 + "side-channel": "^1.1.0" 1291 + }, 1292 + "engines": { 1293 + "node": ">=0.6" 1294 + }, 1295 + "funding": { 1296 + "url": "https://github.com/sponsors/ljharb" 1297 + } 1298 + }, 1299 + "node_modules/readable-stream": { 1300 + "version": "1.0.34", 1301 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 1302 + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", 1303 + "dev": true, 1304 + "license": "MIT", 1305 + "dependencies": { 1306 + "core-util-is": "~1.0.0", 1307 + "inherits": "~2.0.1", 1308 + "isarray": "0.0.1", 1309 + "string_decoder": "~0.10.x" 1310 + } 1311 + }, 1312 + "node_modules/require-directory": { 1313 + "version": "2.1.1", 1314 + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1315 + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1316 + "dev": true, 1317 + "license": "MIT", 1318 + "engines": { 1319 + "node": ">=0.10.0" 1320 + } 1321 + }, 1322 + "node_modules/requires-port": { 1323 + "version": "1.0.0", 1324 + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 1325 + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", 1326 + "dev": true, 1327 + "license": "MIT" 1328 + }, 1329 + "node_modules/safe-buffer": { 1330 + "version": "5.1.2", 1331 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1332 + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1333 + "dev": true, 1334 + "license": "MIT" 1335 + }, 1336 + "node_modules/safer-buffer": { 1337 + "version": "2.1.2", 1338 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1339 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1340 + "dev": true, 1341 + "license": "MIT" 1342 + }, 1343 + "node_modules/secure-compare": { 1344 + "version": "3.0.1", 1345 + "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", 1346 + "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==", 1347 + "dev": true, 1348 + "license": "MIT" 1349 + }, 1350 + "node_modules/side-channel": { 1351 + "version": "1.1.0", 1352 + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", 1353 + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", 1354 + "dev": true, 1355 + "license": "MIT", 1356 + "dependencies": { 1357 + "es-errors": "^1.3.0", 1358 + "object-inspect": "^1.13.3", 1359 + "side-channel-list": "^1.0.0", 1360 + "side-channel-map": "^1.0.1", 1361 + "side-channel-weakmap": "^1.0.2" 1362 + }, 1363 + "engines": { 1364 + "node": ">= 0.4" 1365 + }, 1366 + "funding": { 1367 + "url": "https://github.com/sponsors/ljharb" 1368 + } 1369 + }, 1370 + "node_modules/side-channel-list": { 1371 + "version": "1.0.0", 1372 + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", 1373 + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 1374 + "dev": true, 1375 + "license": "MIT", 1376 + "dependencies": { 1377 + "es-errors": "^1.3.0", 1378 + "object-inspect": "^1.13.3" 1379 + }, 1380 + "engines": { 1381 + "node": ">= 0.4" 1382 + }, 1383 + "funding": { 1384 + "url": "https://github.com/sponsors/ljharb" 1385 + } 1386 + }, 1387 + "node_modules/side-channel-map": { 1388 + "version": "1.0.1", 1389 + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", 1390 + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", 1391 + "dev": true, 1392 + "license": "MIT", 1393 + "dependencies": { 1394 + "call-bound": "^1.0.2", 1395 + "es-errors": "^1.3.0", 1396 + "get-intrinsic": "^1.2.5", 1397 + "object-inspect": "^1.13.3" 1398 + }, 1399 + "engines": { 1400 + "node": ">= 0.4" 1401 + }, 1402 + "funding": { 1403 + "url": "https://github.com/sponsors/ljharb" 1404 + } 1405 + }, 1406 + "node_modules/side-channel-weakmap": { 1407 + "version": "1.0.2", 1408 + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", 1409 + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", 1410 + "dev": true, 1411 + "license": "MIT", 1412 + "dependencies": { 1413 + "call-bound": "^1.0.2", 1414 + "es-errors": "^1.3.0", 1415 + "get-intrinsic": "^1.2.5", 1416 + "object-inspect": "^1.13.3", 1417 + "side-channel-map": "^1.0.1" 1418 + }, 1419 + "engines": { 1420 + "node": ">= 0.4" 1421 + }, 1422 + "funding": { 1423 + "url": "https://github.com/sponsors/ljharb" 1424 + } 1425 + }, 1426 + "node_modules/string_decoder": { 1427 + "version": "0.10.31", 1428 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1429 + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", 1430 + "dev": true, 1431 + "license": "MIT" 1432 + }, 1433 + "node_modules/string-width": { 1434 + "version": "4.2.3", 1435 + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1436 + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1437 + "dev": true, 1438 + "license": "MIT", 1439 + "dependencies": { 1440 + "emoji-regex": "^8.0.0", 1441 + "is-fullwidth-code-point": "^3.0.0", 1442 + "strip-ansi": "^6.0.1" 1443 + }, 1444 + "engines": { 1445 + "node": ">=8" 1446 + } 1447 + }, 1448 + "node_modules/strip-ansi": { 1449 + "version": "6.0.1", 1450 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1451 + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1452 + "dev": true, 1453 + "license": "MIT", 1454 + "dependencies": { 1455 + "ansi-regex": "^5.0.1" 1456 + }, 1457 + "engines": { 1458 + "node": ">=8" 1459 + } 1460 + }, 1461 + "node_modules/supports-color": { 1462 + "version": "7.2.0", 1463 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1464 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1465 + "dev": true, 1466 + "license": "MIT", 1467 + "dependencies": { 1468 + "has-flag": "^4.0.0" 1469 + }, 1470 + "engines": { 1471 + "node": ">=8" 1472 + } 1473 + }, 1474 + "node_modules/through2": { 1475 + "version": "2.0.5", 1476 + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 1477 + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 1478 + "dev": true, 1479 + "license": "MIT", 1480 + "dependencies": { 1481 + "readable-stream": "~2.3.6", 1482 + "xtend": "~4.0.1" 1483 + } 1484 + }, 1485 + "node_modules/through2/node_modules/isarray": { 1486 + "version": "1.0.0", 1487 + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1488 + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 1489 + "dev": true, 1490 + "license": "MIT" 1491 + }, 1492 + "node_modules/through2/node_modules/readable-stream": { 1493 + "version": "2.3.8", 1494 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", 1495 + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", 1496 + "dev": true, 1497 + "license": "MIT", 1498 + "dependencies": { 1499 + "core-util-is": "~1.0.0", 1500 + "inherits": "~2.0.3", 1501 + "isarray": "~1.0.0", 1502 + "process-nextick-args": "~2.0.0", 1503 + "safe-buffer": "~5.1.1", 1504 + "string_decoder": "~1.1.1", 1505 + "util-deprecate": "~1.0.1" 1506 + } 1507 + }, 1508 + "node_modules/through2/node_modules/string_decoder": { 1509 + "version": "1.1.1", 1510 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1511 + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1512 + "dev": true, 1513 + "license": "MIT", 1514 + "dependencies": { 1515 + "safe-buffer": "~5.1.0" 1516 + } 1517 + }, 1518 + "node_modules/typescript": { 1519 + "version": "5.8.3", 1520 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", 1521 + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", 1522 + "dev": true, 1523 + "license": "Apache-2.0", 1524 + "bin": { 1525 + "tsc": "bin/tsc", 1526 + "tsserver": "bin/tsserver" 1527 + }, 1528 + "engines": { 1529 + "node": ">=14.17" 1530 + } 1531 + }, 1532 + "node_modules/union": { 1533 + "version": "0.5.0", 1534 + "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", 1535 + "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", 1536 + "dev": true, 1537 + "dependencies": { 1538 + "qs": "^6.4.0" 1539 + }, 1540 + "engines": { 1541 + "node": ">= 0.8.0" 1542 + } 1543 + }, 1544 + "node_modules/untildify": { 1545 + "version": "4.0.0", 1546 + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", 1547 + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", 1548 + "dev": true, 1549 + "license": "MIT", 1550 + "engines": { 1551 + "node": ">=8" 1552 + } 1553 + }, 1554 + "node_modules/url-join": { 1555 + "version": "4.0.1", 1556 + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", 1557 + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", 1558 + "dev": true, 1559 + "license": "MIT" 1560 + }, 1561 + "node_modules/util-deprecate": { 1562 + "version": "1.0.2", 1563 + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1564 + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 1565 + "dev": true, 1566 + "license": "MIT" 1567 + }, 1568 + "node_modules/whatwg-encoding": { 1569 + "version": "2.0.0", 1570 + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", 1571 + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", 1572 + "dev": true, 1573 + "license": "MIT", 1574 + "dependencies": { 1575 + "iconv-lite": "0.6.3" 1576 + }, 1577 + "engines": { 1578 + "node": ">=12" 1579 + } 1580 + }, 1581 + "node_modules/wrap-ansi": { 1582 + "version": "7.0.0", 1583 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1584 + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1585 + "dev": true, 1586 + "license": "MIT", 1587 + "dependencies": { 1588 + "ansi-styles": "^4.0.0", 1589 + "string-width": "^4.1.0", 1590 + "strip-ansi": "^6.0.0" 1591 + }, 1592 + "engines": { 1593 + "node": ">=10" 1594 + }, 1595 + "funding": { 1596 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1597 + } 1598 + }, 1599 + "node_modules/wrappy": { 1600 + "version": "1.0.2", 1601 + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1602 + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1603 + "dev": true, 1604 + "license": "ISC" 1605 + }, 1606 + "node_modules/xtend": { 1607 + "version": "4.0.2", 1608 + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1609 + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1610 + "dev": true, 1611 + "license": "MIT", 1612 + "engines": { 1613 + "node": ">=0.4" 1614 + } 1615 + }, 1616 + "node_modules/y18n": { 1617 + "version": "5.0.8", 1618 + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1619 + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1620 + "dev": true, 1621 + "license": "ISC", 1622 + "engines": { 1623 + "node": ">=10" 1624 + } 1625 + }, 1626 + "node_modules/yargs": { 1627 + "version": "16.2.0", 1628 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", 1629 + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", 1630 + "dev": true, 1631 + "license": "MIT", 1632 + "dependencies": { 1633 + "cliui": "^7.0.2", 1634 + "escalade": "^3.1.1", 1635 + "get-caller-file": "^2.0.5", 1636 + "require-directory": "^2.1.1", 1637 + "string-width": "^4.2.0", 1638 + "y18n": "^5.0.5", 1639 + "yargs-parser": "^20.2.2" 1640 + }, 1641 + "engines": { 1642 + "node": ">=10" 1643 + } 1644 + }, 1645 + "node_modules/yargs-parser": { 1646 + "version": "20.2.9", 1647 + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 1648 + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 1649 + "dev": true, 1650 + "license": "ISC", 1651 + "engines": { 1652 + "node": ">=10" 1653 + } 1654 + } 1655 + } 1656 + }
+22
package.json
··· 1 + { 2 + "devDependencies": { 3 + "copyfiles": "^2.4.1", 4 + "esbuild": "^0.25.8", 5 + "http-server": "^14.1.1", 6 + "typescript": "^5.8.3" 7 + }, 8 + "type": "module", 9 + "dependencies": { 10 + "@atcute/atproto": "^3.1.1", 11 + "@atcute/bluesky": "^3.2.0", 12 + "@atcute/client": "^4.0.3", 13 + "@atcute/identity": "^1.0.2", 14 + "@atcute/identity-resolver": "^1.1.3" 15 + }, 16 + "scripts": { 17 + "cert": "mkdir certs && cd certs && mkcert 127.0.0.1", 18 + "serve": "http-server ./out -C ./certs/127.0.0.1.pem -K ./certs/127.0.0.1-key.pem", 19 + "build": "esbuild src/* --bundle --outdir=out && rsync -av static/ out/", 20 + "build-prod": "esbuild src/* --minify --tree-shaking=true --bundle --outdir=out && rsync -av static/ out/" 21 + } 22 + }
+7
readme
··· 7 7 ok maybe a little css 8 8 9 9 "watch this its gonna be jquery 2" famous last words 10 + 11 + in case its not obvious i dont remove anything from this file because its entertaining 12 + i oughta post this up on tangled or something (sorry if your eyes bleed) 13 + also i want to say that like this isnt a super serious project like fyi whoever reads this. 14 + 15 + >i dont want to wrestle npm if i can help it. 16 + lol lmao i really thought i could get away with a single pure js file
reset.css static/styles/reset.css
+9
shell.nix
··· 1 + { 2 + pkgs ? import <nixpkgs> {} 3 + }: pkgs.mkShell { 4 + packages = [ 5 + pkgs.nodejs 6 + pkgs.mkcert 7 + #pkgs.prefetch-npm-deps # see server.nix 8 + ]; 9 + }
+138
src/domlink.ts
··· 1 + let _LCounter = 0; // is there a point to this? idk. might be unnecessary overhead. 2 + export class Node { 3 + wraps: HTMLElement; 4 + children: Node[] = []; 5 + id: string = "L" + _LCounter++;; 6 + constructor(wrap: HTMLElement) { 7 + this.wraps = wrap; 8 + this.wraps.id = this.id; 9 + } 10 + // could i make add and with one function? yeah. 11 + // will i do that? no. 12 + // why not? because it feels nice to have them separate. 13 + add(node: Node | string) { 14 + if (node != undefined) { 15 + let xnode: Node; 16 + if (typeof node === "string") { 17 + xnode = new Label(node); 18 + } else { 19 + xnode = node; 20 + } 21 + this.children.push(xnode); 22 + this.wraps.appendChild(xnode.wraps); 23 + } else { 24 + throw new Error("node undefined"); 25 + } 26 + return this; 27 + } 28 + remove(node: Node) { 29 + let idx = this.children.indexOf(node); 30 + if (idx < 0) { 31 + throw new Error("node not a child of this node"); 32 + } 33 + this.children.splice(idx, 1); 34 + this.wraps.removeChild(node.wraps); 35 + } 36 + with(...nodes: (Node | string)[]) { 37 + nodes.forEach(x=>{this.add(x)}); 38 + return this 39 + } 40 + style(fn: (style: CSSStyleDeclaration) => void) { 41 + fn(this.wraps.style); 42 + return this; 43 + } 44 + class(cls: string) { 45 + this.wraps.classList.add(cls); 46 + return this; 47 + } 48 + } 49 + export class Container extends Node { 50 + constructor() { 51 + let div = document.createElement("div"); 52 + div.classList.add("LContainer"); 53 + super(div); 54 + } 55 + } 56 + export class Column extends Container { 57 + constructor() { 58 + super(); 59 + this.wraps.classList.add("LColumn"); 60 + } 61 + } 62 + export class Row extends Container { 63 + constructor() { 64 + super(); 65 + this.wraps.classList.add("LRow"); 66 + } 67 + } 68 + export class Text extends Node { 69 + private _text: string = ""; 70 + get text() { 71 + return this._text; 72 + } 73 + set text(x) { 74 + this._text = x; 75 + this.wraps.textContent = x; 76 + } 77 + } 78 + export class Label extends Text { 79 + constructor(text: string = "") { 80 + let el = document.createElement("span"); 81 + el.classList.add("LLabel"); 82 + super(el); 83 + this.text = text; 84 + } 85 + } 86 + export class Button extends Text { 87 + constructor(label: string, action: EventListener) { 88 + let btn = document.createElement("button"); 89 + btn.textContent = label; 90 + btn.addEventListener("click", action); 91 + btn.classList.add("LButton"); 92 + super(btn); 93 + this.text = label; 94 + } 95 + } 96 + export class Input extends Text { 97 + constructor(type: HTMLInputElement["type"] = "text") { 98 + let el = document.createElement("input"); 99 + el.type = type; 100 + el.classList.add("LInput"); 101 + super(el); 102 + } 103 + set placeholder(x: string) { 104 + (this.wraps as HTMLInputElement).placeholder = x; 105 + } 106 + get value(): string { 107 + return (this.wraps as HTMLInputElement).value; 108 + } 109 + set value(x: string) { 110 + (this.wraps as HTMLInputElement).value = x; 111 + } 112 + } 113 + export class Image extends Node { 114 + constructor(src: string) { 115 + let img = document.createElement("img"); 116 + img.src = src; 117 + img.classList.add("LImage"); 118 + super(img); 119 + } 120 + } 121 + export class Modal extends Node { 122 + constructor() { 123 + let dlg: HTMLDialogElement = document.createElement("dialog"); 124 + dlg.classList.add("LModal"); 125 + super(dlg); 126 + } 127 + show() { 128 + Body.add(this); 129 + (this.wraps as HTMLDialogElement).showModal(); 130 + } 131 + hide() { 132 + (this.wraps as HTMLDialogElement).close(); 133 + Body.wraps.removeChild(this.wraps); 134 + } 135 + } 136 + 137 + // user helper shit 138 + export const Body = new Node(document.body);
+107
src/main.ts
··· 1 + // yeah this is mildly busted so dont get too excited 2 + 3 + import { Client, ok, simpleFetchHandler, AtpSessionData, CredentialManager } from "@atcute/client"; 4 + import { Body, Button, Column, Container, Image, Input, Label, Modal, Row } from "./domlink.js"; 5 + import { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/bluesky'; 6 + import { CompositeDidDocumentResolver, CompositeHandleResolver, DohJsonHandleResolver, PlcDidDocumentResolver, WebDidDocumentResolver, WellKnownHandleResolver } from "@atcute/identity-resolver"; 7 + 8 + const handleResolver = new CompositeHandleResolver({ 9 + strategy: 'race', 10 + methods: { 11 + dns: new DohJsonHandleResolver({ dohUrl: 'https://mozilla.cloudflare-dns.com/dns-query' }), 12 + http: new WellKnownHandleResolver(), 13 + }, 14 + }); 15 + const docResolver = new CompositeDidDocumentResolver({ 16 + methods: { 17 + plc: new PlcDidDocumentResolver(), 18 + web: new WebDidDocumentResolver(), 19 + }, 20 + }); 21 + const handler = simpleFetchHandler({service: "https://public.api.zeppelin.social"}); 22 + const client = new Client({handler}); 23 + let manager: CredentialManager | undefined; 24 + const MY_DID = "did:plc:jlplwn5pi4dqrls7i6dx2me7"; 25 + 26 + class PostView extends Container { 27 + constructor(post: AppBskyFeedDefs.PostView) { 28 + super(); 29 + let record: AppBskyFeedPost.Main = post.record as AppBskyFeedPost.Main; 30 + this.with( 31 + new Row().with( 32 + new Image(post.author.avatar ?? "/media/default-avatar.png").class("Avatar"), 33 + new Column().with( 34 + post.author.displayName ?? post.author.handle, 35 + record.text, 36 + new Row().with( 37 + `🗨️ ${post.replyCount} `, 38 + `🔁 ${post.repostCount} `, 39 + `🔃 ${post.quoteCount} `, 40 + `❤️ ${post.likeCount} `, 41 + ) 42 + ), 43 + ) 44 + ); 45 + this.wraps.classList.add("PostView"); 46 + } 47 + } 48 + async function login() { 49 + let mdl = new Modal(); 50 + let handle = new Input("text"); 51 + handle.placeholder = "Handle"; 52 + let pass = new Input("password"); 53 + pass.placeholder = "Password"; 54 + let col = new Column().with( 55 + "log in here", 56 + handle,pass, 57 + new Row().with( 58 + new Button("cancel",()=>{mdl.hide();}), 59 + new Button("log in",()=>{ 60 + 61 + }), 62 + ) 63 + ); 64 + mdl.add(col).show(); 65 + } 66 + 67 + class AccountPanel extends Container { 68 + constructor(client: Client) { 69 + super(); 70 + this.wraps.classList.add("AccountPanel"); 71 + 72 + const sessionJson = localStorage.getItem('atp-session'); 73 + if (sessionJson) { 74 + const session: AtpSessionData = JSON.parse(sessionJson); 75 + this.with( 76 + new Label(`Logged in as ${session.handle}`), 77 + new Button("Log out", () => { 78 + localStorage.removeItem('atp-session'); 79 + window.location.reload(); 80 + }) 81 + ); 82 + } else { 83 + this.add(new Button("Log in", () => { 84 + login(); 85 + })); 86 + } 87 + } 88 + } 89 + 90 + async function main() { 91 + const postsColumn = new Column().class("PostsColumn"); 92 + const mainColumn = new Column().with( 93 + new AccountPanel(client), 94 + new Label("who up skeeting they deck"), 95 + postsColumn 96 + ); 97 + Body.add(mainColumn); 98 + 99 + // Fetch and display the feed 100 + let data = await ok(client.get("app.bsky.feed.getAuthorFeed", { 101 + params: {actor: MY_DID} 102 + })); 103 + const postViews = data.feed.map(post => new PostView(post.post)); 104 + postsColumn.with(...postViews); 105 + } 106 + 107 + main();
+83
src/pds.ts
··· 1 + import { Body, Button, Column, Input, Label, Row } from "./domlink.js"; 2 + import { DidDocument } from "@atcute/identity"; 3 + 4 + let input_source_pds = [ 5 + "pds.tgirl.cloud", 6 + "pds.witchcraft.systems" 7 + ]; 8 + let view_pds_accounts = new Row(); 9 + 10 + 11 + type listReposItem = { 12 + active: boolean; 13 + did: string; 14 + head: string; 15 + rev: string; 16 + }; 17 + type listReposResponse = { 18 + cursor: string; 19 + repos: [listReposItem]; 20 + }; 21 + type repoDescriptor = { 22 + collections: [string]; 23 + did: string; 24 + didDoc: DidDocument; // would have crammed it in here but i dont really want to figure this out 25 + handle: string; 26 + handleIsCorrect: boolean; 27 + } 28 + 29 + async function xcall(host: string, method: string, params: Record<string, string | number> | null = null): Promise<unknown> { 30 + let url = `https://${host}/xrpc/${method}`; 31 + if (params) { 32 + let usp = new URLSearchParams(); 33 + for (let key in params) { 34 + usp.append(key, params[key].toString()); 35 + } 36 + url += "?" + usp.toString(); 37 + } 38 + return await (await fetch(url)).json(); 39 + } 40 + 41 + async function listActiveUsers(host: string) { 42 + let rsp = await xcall(host, "com.atproto.sync.listRepos", { 43 + limit: 100 44 + }) as listReposResponse; 45 + let view_pds = new Column(); 46 + view_pds.add(`=== ${host.toUpperCase()} ===`); 47 + Body.add(view_pds); 48 + rsp.repos.filter(x=>x.active).forEach(async repo=>{ 49 + let view_pds_account = new Label(""); 50 + let rsp = await xcall(host, "com.atproto.repo.describeRepo", { 51 + repo: repo.did 52 + }) as repoDescriptor; 53 + if (!rsp.handleIsCorrect) { 54 + rsp.handle += "⚠️ "; 55 + } 56 + view_pds_account.text += rsp.handle; 57 + view_pds.add(view_pds_account); 58 + }); 59 + return view_pds; 60 + } 61 + 62 + 63 + let hostInput = new Input(); 64 + let last: any; 65 + let runButton = new Button("GO!",async ()=>{ 66 + (runButton.wraps as HTMLButtonElement).disabled = true; 67 + if (last) { 68 + Body.remove(last); 69 + } 70 + try { 71 + last = await listActiveUsers(hostInput.value); 72 + } catch (e) { 73 + last = new Label("Failed"); 74 + Body.add(last); 75 + } 76 + console.log(last); 77 + (runButton.wraps as HTMLButtonElement).disabled = false; 78 + }); 79 + Body.add(new Row().with( 80 + "List 100 active users on PDS: ", 81 + hostInput, 82 + runButton 83 + ));
static/media/default-avatar.png

This is a binary file and will not be displayed.

+8
static/mine.css
··· 1 + .Avatar { 2 + width: 2em; 3 + height: 2em; 4 + border-radius: 50%; 5 + } 6 + .PostView { 7 + margin-bottom: 1em; 8 + }
+7
static/pds.css
··· 1 + * { 2 + font-family: monospace !important; 3 + } 4 + body { 5 + margin-top: 1em; 6 + margin-left: 1ch; 7 + }
+14
static/pds.html
··· 1 + <!DOCTYPE html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8"> 5 + <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 + <title>pds</title> 7 + <link rel="stylesheet" href="styles/domlink.css"> 8 + <link rel="stylesheet" href="pds.css"> 9 + </head> 10 + <body> 11 + <noscript>enable js or fukc off</noscript> 12 + <script src="pds.js" type="module"></script> 13 + </body> 14 + </html>
+14
tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "es2017", 4 + "module": "nodenext", 5 + "moduleResolution": "nodenext", 6 + "esModuleInterop": true, 7 + "forceConsistentCasingInFileNames": true, 8 + "strict": true, 9 + "skipLibCheck": true, 10 + "rootDir": "src", 11 + "outDir": "out", 12 + "resolveJsonModule": true 13 + } 14 + }