this repo has no description
0
fork

Configure Feed

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

Move to workspace, address content field non-compliance

+615 -441
CLAUDE.md packages/web/CLAUDE.md
+97 -418
bun.lock
··· 3 3 "configVersion": 1, 4 4 "workspaces": { 5 5 "": { 6 - "name": "std.pub", 6 + "name": "stdpub", 7 + }, 8 + "packages/lib": { 9 + "name": "@stdpub/lib", 10 + }, 11 + "packages/web": { 12 + "name": "@stdpub/web", 7 13 "dependencies": { 8 14 "@atproto/api": "^0.18.13", 9 15 "@atproto/jwk-jose": "^0.1.11", 10 16 "@atproto/oauth-client-node": "^0.3.15", 11 17 "hono": "^4.11.3", 18 + "marked": "^15.0.0", 12 19 }, 13 20 "devDependencies": { 14 21 "@types/bun": "latest", ··· 19 26 }, 20 27 }, 21 28 "packages": { 22 - "@atproto-labs/did-resolver": [ 23 - "@atproto-labs/did-resolver@0.2.5", 24 - "", 25 - { 26 - "dependencies": { 27 - "@atproto-labs/fetch": "0.2.3", 28 - "@atproto-labs/pipe": "0.1.1", 29 - "@atproto-labs/simple-store": "0.3.0", 30 - "@atproto-labs/simple-store-memory": "0.1.4", 31 - "@atproto/did": "0.2.4", 32 - "zod": "^3.23.8" 33 - } 34 - }, 35 - "sha512-he7EC6OMSifNs01a4RT9mta/yYitoKDzlK9ty2TFV5Uj/+HpB4vYMRdIDFrRW0Hcsehy90E2t/dw0t7361MEKQ==" 36 - ], 37 - "@atproto-labs/fetch": [ 38 - "@atproto-labs/fetch@0.2.3", 39 - "", 40 - { 41 - "dependencies": { 42 - "@atproto-labs/pipe": "0.1.1" 43 - } 44 - }, 45 - "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw==" 46 - ], 47 - "@atproto-labs/fetch-node": [ 48 - "@atproto-labs/fetch-node@0.2.0", 49 - "", 50 - { 51 - "dependencies": { 52 - "@atproto-labs/fetch": "0.2.3", 53 - "@atproto-labs/pipe": "0.1.1", 54 - "ipaddr.js": "^2.1.0", 55 - "undici": "^6.14.1" 56 - } 57 - }, 58 - "sha512-Krq09nH/aeoiU2s9xdHA0FjTEFWG9B5FFenipv1iRixCcPc7V3DhTNDawxG9gI8Ny0k4dBVS9WTRN/IDzBx86Q==" 59 - ], 60 - "@atproto-labs/handle-resolver": [ 61 - "@atproto-labs/handle-resolver@0.3.5", 62 - "", 63 - { 64 - "dependencies": { 65 - "@atproto-labs/simple-store": "0.3.0", 66 - "@atproto-labs/simple-store-memory": "0.1.4", 67 - "@atproto/did": "0.2.4", 68 - "zod": "^3.23.8" 69 - } 70 - }, 71 - "sha512-r3b+plCh/0arN535Aool9gL6yTSbAPDOyReURbA2TWAaeW4vrSJPwR6yYUx0k0vmVPjkZPIdUVd63bG/+VG5MA==" 72 - ], 73 - "@atproto-labs/handle-resolver-node": [ 74 - "@atproto-labs/handle-resolver-node@0.1.24", 75 - "", 76 - { 77 - "dependencies": { 78 - "@atproto-labs/fetch-node": "0.2.0", 79 - "@atproto-labs/handle-resolver": "0.3.5", 80 - "@atproto/did": "0.2.4" 81 - } 82 - }, 83 - "sha512-w/zvktigmRQpOLQQclp48tbb2K/2XW8j1szoIpT8T8v6P5dZ8GGVDIEF142xQMX9vWToFqMTu1P2yOuz8e3Ilg==" 84 - ], 85 - "@atproto-labs/identity-resolver": [ 86 - "@atproto-labs/identity-resolver@0.3.5", 87 - "", 88 - { 89 - "dependencies": { 90 - "@atproto-labs/did-resolver": "0.2.5", 91 - "@atproto-labs/handle-resolver": "0.3.5" 92 - } 93 - }, 94 - "sha512-kSxnreUSPhKL77doUbSl/9I6Y9qpkpD7MMJoYFQVU/WG0PB90tzfIb6DNuWsjbU2I5Q91Nzc4Tm4VJMV+OPKGQ==" 95 - ], 96 - "@atproto-labs/pipe": [ 97 - "@atproto-labs/pipe@0.1.1", 98 - "", 99 - {}, 100 - "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg==" 101 - ], 102 - "@atproto-labs/simple-store": [ 103 - "@atproto-labs/simple-store@0.3.0", 104 - "", 105 - {}, 106 - "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ==" 107 - ], 108 - "@atproto-labs/simple-store-memory": [ 109 - "@atproto-labs/simple-store-memory@0.1.4", 110 - "", 111 - { 112 - "dependencies": { 113 - "@atproto-labs/simple-store": "0.3.0", 114 - "lru-cache": "^10.2.0" 115 - } 116 - }, 117 - "sha512-3mKY4dP8I7yKPFj9VKpYyCRzGJOi5CEpOLPlRhoJyLmgs3J4RzDrjn323Oakjz2Aj2JzRU/AIvWRAZVhpYNJHw==" 118 - ], 119 - "@atproto/api": [ 120 - "@atproto/api@0.18.13", 121 - "", 122 - { 123 - "dependencies": { 124 - "@atproto/common-web": "^0.4.11", 125 - "@atproto/lexicon": "^0.6.0", 126 - "@atproto/syntax": "^0.4.2", 127 - "@atproto/xrpc": "^0.7.7", 128 - "await-lock": "^2.2.2", 129 - "multiformats": "^9.9.0", 130 - "tlds": "^1.234.0", 131 - "zod": "^3.23.8" 132 - } 133 - }, 134 - "sha512-CULZ01pSJDltLS/Gc9MMrhFzB6OM3ezyZw7KoeLT/sBfwgA1ddA4mWdTh7DIRosPRigXtA05bnoiCutZbQDo+Q==" 135 - ], 136 - "@atproto/common-web": [ 137 - "@atproto/common-web@0.4.11", 138 - "", 139 - { 140 - "dependencies": { 141 - "@atproto/lex-data": "0.0.7", 142 - "@atproto/lex-json": "0.0.7", 143 - "zod": "^3.23.8" 144 - } 145 - }, 146 - "sha512-VHejNmSABU8/03VrQ3e36AmT5U3UIeio+qSUqCrO1oNgrJcWfGy1rpj0FVtUugWF8Un29+yzkukzWGZfXL70rQ==" 147 - ], 148 - "@atproto/did": [ 149 - "@atproto/did@0.2.4", 150 - "", 151 - { 152 - "dependencies": { 153 - "zod": "^3.23.8" 154 - } 155 - }, 156 - "sha512-nxNiCgXeo7pfjojq9fpfZxCO0X0xUipNVKW+AHNZwQKiUDt6zYL0VXEfm8HBUwQOCmKvj2pRRSM1Cur+tUWk3g==" 157 - ], 158 - "@atproto/jwk": [ 159 - "@atproto/jwk@0.6.0", 160 - "", 161 - { 162 - "dependencies": { 163 - "multiformats": "^9.9.0", 164 - "zod": "^3.23.8" 165 - } 166 - }, 167 - "sha512-bDoJPvt7TrQVi/rBfBrSSpGykhtIriKxeYCYQTiPRKFfyRhbgpElF0wPXADjIswnbzZdOwbY63az4E/CFVT3Tw==" 168 - ], 169 - "@atproto/jwk-jose": [ 170 - "@atproto/jwk-jose@0.1.11", 171 - "", 172 - { 173 - "dependencies": { 174 - "@atproto/jwk": "0.6.0", 175 - "jose": "^5.2.0" 176 - } 177 - }, 178 - "sha512-i4Fnr2sTBYmMmHXl7NJh8GrCH+tDQEVWrcDMDnV5DjJfkgT17wIqvojIw9SNbSL4Uf0OtfEv6AgG0A+mgh8b5Q==" 179 - ], 180 - "@atproto/jwk-webcrypto": [ 181 - "@atproto/jwk-webcrypto@0.2.0", 182 - "", 183 - { 184 - "dependencies": { 185 - "@atproto/jwk": "0.6.0", 186 - "@atproto/jwk-jose": "0.1.11", 187 - "zod": "^3.23.8" 188 - } 189 - }, 190 - "sha512-UmgRrrEAkWvxwhlwe30UmDOdTEFidlIzBC7C3cCbeJMcBN1x8B3KH+crXrsTqfWQBG58mXgt8wgSK3Kxs2LhFg==" 191 - ], 192 - "@atproto/lex-data": [ 193 - "@atproto/lex-data@0.0.7", 194 - "", 195 - { 196 - "dependencies": { 197 - "@atproto/syntax": "0.4.2", 198 - "multiformats": "^9.9.0", 199 - "tslib": "^2.8.1", 200 - "uint8arrays": "3.0.0", 201 - "unicode-segmenter": "^0.14.0" 202 - } 203 - }, 204 - "sha512-W/Q5o9o7n2Sv3UywckChu01X5lwQUtaiiOkGJLnRsdkQTyC6813nPgY+p2sG7NwwM+82lu+FUV9fE/Ul3VqaJw==" 205 - ], 206 - "@atproto/lex-json": [ 207 - "@atproto/lex-json@0.0.7", 208 - "", 209 - { 210 - "dependencies": { 211 - "@atproto/lex-data": "0.0.7", 212 - "tslib": "^2.8.1" 213 - } 214 - }, 215 - "sha512-bjNPD5M/MhLfjNM7tcxuls80UgXpHqxdOxDXEUouAtZQV/nIDhGjmNUvKxOmOgnDsiZRnT2g5y3onrnjH3a44g==" 216 - ], 217 - "@atproto/lexicon": [ 218 - "@atproto/lexicon@0.6.0", 219 - "", 220 - { 221 - "dependencies": { 222 - "@atproto/common-web": "^0.4.7", 223 - "@atproto/syntax": "^0.4.2", 224 - "iso-datestring-validator": "^2.2.2", 225 - "multiformats": "^9.9.0", 226 - "zod": "^3.23.8" 227 - } 228 - }, 229 - "sha512-5veb8aD+J5M0qszLJ+73KSFsFrJBgAY/nM1TSAJvGY7fNc9ZAT+PSUlmIyrdye9YznAZ07yktalls/TwNV7cHQ==" 230 - ], 231 - "@atproto/oauth-client": [ 232 - "@atproto/oauth-client@0.5.13", 233 - "", 234 - { 235 - "dependencies": { 236 - "@atproto-labs/did-resolver": "0.2.5", 237 - "@atproto-labs/fetch": "0.2.3", 238 - "@atproto-labs/handle-resolver": "0.3.5", 239 - "@atproto-labs/identity-resolver": "0.3.5", 240 - "@atproto-labs/simple-store": "0.3.0", 241 - "@atproto-labs/simple-store-memory": "0.1.4", 242 - "@atproto/did": "0.2.4", 243 - "@atproto/jwk": "0.6.0", 244 - "@atproto/oauth-types": "0.6.1", 245 - "@atproto/xrpc": "0.7.7", 246 - "core-js": "^3", 247 - "multiformats": "^9.9.0", 248 - "zod": "^3.23.8" 249 - } 250 - }, 251 - "sha512-FLbqHkC7BAVZ90LHVzSxQf+s8ZNIQI4TsDuhYDyzi7lYtktFHDbgd88KuM2ClJFOtGCsSS17yR1Joy925tDSaA==" 252 - ], 253 - "@atproto/oauth-client-node": [ 254 - "@atproto/oauth-client-node@0.3.15", 255 - "", 256 - { 257 - "dependencies": { 258 - "@atproto-labs/did-resolver": "0.2.5", 259 - "@atproto-labs/handle-resolver-node": "0.1.24", 260 - "@atproto-labs/simple-store": "0.3.0", 261 - "@atproto/did": "0.2.4", 262 - "@atproto/jwk": "0.6.0", 263 - "@atproto/jwk-jose": "0.1.11", 264 - "@atproto/jwk-webcrypto": "0.2.0", 265 - "@atproto/oauth-client": "0.5.13", 266 - "@atproto/oauth-types": "0.6.1" 267 - } 268 - }, 269 - "sha512-iuT7QrLli7IyB4px1+lHvm/YoIRfNRpbNG9seJRtu5eX4N5aLsBP6vpXs9rCygd1+/15LcLRAAGKVEcrLT9tXA==" 270 - ], 271 - "@atproto/oauth-types": [ 272 - "@atproto/oauth-types@0.6.1", 273 - "", 274 - { 275 - "dependencies": { 276 - "@atproto/did": "0.2.4", 277 - "@atproto/jwk": "0.6.0", 278 - "zod": "^3.23.8" 279 - } 280 - }, 281 - "sha512-3z92GN/6zCq9E2GTTfZM27tWEbvi1qwFSA7KoS5+wqBC4kSsLvnLxmbKH402Z40DfWS4YWqw0DkHsgP0LNFDEA==" 282 - ], 283 - "@atproto/syntax": [ 284 - "@atproto/syntax@0.4.2", 285 - "", 286 - {}, 287 - "sha512-X9XSRPinBy/0VQ677j8VXlBsYSsUXaiqxWVpGGxJYsAhugdQRb0jqaVKJFtm6RskeNkV6y9xclSUi9UYG/COrA==" 288 - ], 289 - "@atproto/xrpc": [ 290 - "@atproto/xrpc@0.7.7", 291 - "", 292 - { 293 - "dependencies": { 294 - "@atproto/lexicon": "^0.6.0", 295 - "zod": "^3.23.8" 296 - } 297 - }, 298 - "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA==" 299 - ], 300 - "@types/bun": [ 301 - "@types/bun@1.3.5", 302 - "", 303 - { 304 - "dependencies": { 305 - "bun-types": "1.3.5" 306 - } 307 - }, 308 - "sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w==" 309 - ], 310 - "@types/node": [ 311 - "@types/node@25.0.6", 312 - "", 313 - { 314 - "dependencies": { 315 - "undici-types": "~7.16.0" 316 - } 317 - }, 318 - "sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q==" 319 - ], 320 - "await-lock": [ 321 - "await-lock@2.2.2", 322 - "", 323 - {}, 324 - "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==" 325 - ], 326 - "bun-types": [ 327 - "bun-types@1.3.5", 328 - "", 329 - { 330 - "dependencies": { 331 - "@types/node": "*" 332 - } 333 - }, 334 - "sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw==" 335 - ], 336 - "core-js": [ 337 - "core-js@3.47.0", 338 - "", 339 - {}, 340 - "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==" 341 - ], 342 - "hono": [ 343 - "hono@4.11.3", 344 - "", 345 - {}, 346 - "sha512-PmQi306+M/ct/m5s66Hrg+adPnkD5jiO6IjA7WhWw0gSBSo1EcRegwuI1deZ+wd5pzCGynCcn2DprnE4/yEV4w==" 347 - ], 348 - "ipaddr.js": [ 349 - "ipaddr.js@2.3.0", 350 - "", 351 - {}, 352 - "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==" 353 - ], 354 - "iso-datestring-validator": [ 355 - "iso-datestring-validator@2.2.2", 356 - "", 357 - {}, 358 - "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==" 359 - ], 360 - "jose": [ 361 - "jose@5.10.0", 362 - "", 363 - {}, 364 - "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==" 365 - ], 366 - "lru-cache": [ 367 - "lru-cache@10.4.3", 368 - "", 369 - {}, 370 - "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" 371 - ], 372 - "multiformats": [ 373 - "multiformats@9.9.0", 374 - "", 375 - {}, 376 - "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" 377 - ], 378 - "tlds": [ 379 - "tlds@1.261.0", 380 - "", 381 - { 382 - "bin": { 383 - "tlds": "bin.js" 384 - } 385 - }, 386 - "sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==" 387 - ], 388 - "tslib": [ 389 - "tslib@2.8.1", 390 - "", 391 - {}, 392 - "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" 393 - ], 394 - "typescript": [ 395 - "typescript@5.9.3", 396 - "", 397 - { 398 - "bin": { 399 - "tsc": "bin/tsc", 400 - "tsserver": "bin/tsserver" 401 - } 402 - }, 403 - "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==" 404 - ], 405 - "uint8arrays": [ 406 - "uint8arrays@3.0.0", 407 - "", 408 - { 409 - "dependencies": { 410 - "multiformats": "^9.4.2" 411 - } 412 - }, 413 - "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==" 414 - ], 415 - "undici": [ 416 - "undici@6.23.0", 417 - "", 418 - {}, 419 - "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==" 420 - ], 421 - "undici-types": [ 422 - "undici-types@7.16.0", 423 - "", 424 - {}, 425 - "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==" 426 - ], 427 - "unicode-segmenter": [ 428 - "unicode-segmenter@0.14.5", 429 - "", 430 - {}, 431 - "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==" 432 - ], 433 - "zod": [ 434 - "zod@3.25.76", 435 - "", 436 - {}, 437 - "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==" 438 - ], 29 + "@atproto-labs/did-resolver": ["@atproto-labs/did-resolver@0.2.5", "", { "dependencies": { "@atproto-labs/fetch": "0.2.3", "@atproto-labs/pipe": "0.1.1", "@atproto-labs/simple-store": "0.3.0", "@atproto-labs/simple-store-memory": "0.1.4", "@atproto/did": "0.2.4", "zod": "^3.23.8" } }, "sha512-he7EC6OMSifNs01a4RT9mta/yYitoKDzlK9ty2TFV5Uj/+HpB4vYMRdIDFrRW0Hcsehy90E2t/dw0t7361MEKQ=="], 30 + 31 + "@atproto-labs/fetch": ["@atproto-labs/fetch@0.2.3", "", { "dependencies": { "@atproto-labs/pipe": "0.1.1" } }, "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw=="], 32 + 33 + "@atproto-labs/fetch-node": ["@atproto-labs/fetch-node@0.2.0", "", { "dependencies": { "@atproto-labs/fetch": "0.2.3", "@atproto-labs/pipe": "0.1.1", "ipaddr.js": "^2.1.0", "undici": "^6.14.1" } }, "sha512-Krq09nH/aeoiU2s9xdHA0FjTEFWG9B5FFenipv1iRixCcPc7V3DhTNDawxG9gI8Ny0k4dBVS9WTRN/IDzBx86Q=="], 34 + 35 + "@atproto-labs/handle-resolver": ["@atproto-labs/handle-resolver@0.3.5", "", { "dependencies": { "@atproto-labs/simple-store": "0.3.0", "@atproto-labs/simple-store-memory": "0.1.4", "@atproto/did": "0.2.4", "zod": "^3.23.8" } }, "sha512-r3b+plCh/0arN535Aool9gL6yTSbAPDOyReURbA2TWAaeW4vrSJPwR6yYUx0k0vmVPjkZPIdUVd63bG/+VG5MA=="], 36 + 37 + "@atproto-labs/handle-resolver-node": ["@atproto-labs/handle-resolver-node@0.1.24", "", { "dependencies": { "@atproto-labs/fetch-node": "0.2.0", "@atproto-labs/handle-resolver": "0.3.5", "@atproto/did": "0.2.4" } }, "sha512-w/zvktigmRQpOLQQclp48tbb2K/2XW8j1szoIpT8T8v6P5dZ8GGVDIEF142xQMX9vWToFqMTu1P2yOuz8e3Ilg=="], 38 + 39 + "@atproto-labs/identity-resolver": ["@atproto-labs/identity-resolver@0.3.5", "", { "dependencies": { "@atproto-labs/did-resolver": "0.2.5", "@atproto-labs/handle-resolver": "0.3.5" } }, "sha512-kSxnreUSPhKL77doUbSl/9I6Y9qpkpD7MMJoYFQVU/WG0PB90tzfIb6DNuWsjbU2I5Q91Nzc4Tm4VJMV+OPKGQ=="], 40 + 41 + "@atproto-labs/pipe": ["@atproto-labs/pipe@0.1.1", "", {}, "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg=="], 42 + 43 + "@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.3.0", "", {}, "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ=="], 44 + 45 + "@atproto-labs/simple-store-memory": ["@atproto-labs/simple-store-memory@0.1.4", "", { "dependencies": { "@atproto-labs/simple-store": "0.3.0", "lru-cache": "^10.2.0" } }, "sha512-3mKY4dP8I7yKPFj9VKpYyCRzGJOi5CEpOLPlRhoJyLmgs3J4RzDrjn323Oakjz2Aj2JzRU/AIvWRAZVhpYNJHw=="], 46 + 47 + "@atproto/api": ["@atproto/api@0.18.14", "", { "dependencies": { "@atproto/common-web": "^0.4.12", "@atproto/lexicon": "^0.6.0", "@atproto/syntax": "^0.4.2", "@atproto/xrpc": "^0.7.7", "await-lock": "^2.2.2", "multiformats": "^9.9.0", "tlds": "^1.234.0", "zod": "^3.23.8" } }, "sha512-1pWAPbuG3RA1o8uOAwYWZOddvNjuweYOxwTvys1q/r9NCjoGkZY0uJUy1dr6LKFaDk8bjikd2O1cgsRwFfv6Fw=="], 48 + 49 + "@atproto/common-web": ["@atproto/common-web@0.4.12", "", { "dependencies": { "@atproto/lex-data": "0.0.8", "@atproto/lex-json": "0.0.8", "zod": "^3.23.8" } }, "sha512-3aCJemqM/fkHQrVPbTCHCdiVstKFI+2LkFLvUhO6XZP0EqUZa/rg/CIZBKTFUWu9I5iYiaEiXL9VwcDRpEevSw=="], 50 + 51 + "@atproto/did": ["@atproto/did@0.2.4", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-nxNiCgXeo7pfjojq9fpfZxCO0X0xUipNVKW+AHNZwQKiUDt6zYL0VXEfm8HBUwQOCmKvj2pRRSM1Cur+tUWk3g=="], 52 + 53 + "@atproto/jwk": ["@atproto/jwk@0.6.0", "", { "dependencies": { "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-bDoJPvt7TrQVi/rBfBrSSpGykhtIriKxeYCYQTiPRKFfyRhbgpElF0wPXADjIswnbzZdOwbY63az4E/CFVT3Tw=="], 54 + 55 + "@atproto/jwk-jose": ["@atproto/jwk-jose@0.1.11", "", { "dependencies": { "@atproto/jwk": "0.6.0", "jose": "^5.2.0" } }, "sha512-i4Fnr2sTBYmMmHXl7NJh8GrCH+tDQEVWrcDMDnV5DjJfkgT17wIqvojIw9SNbSL4Uf0OtfEv6AgG0A+mgh8b5Q=="], 56 + 57 + "@atproto/jwk-webcrypto": ["@atproto/jwk-webcrypto@0.2.0", "", { "dependencies": { "@atproto/jwk": "0.6.0", "@atproto/jwk-jose": "0.1.11", "zod": "^3.23.8" } }, "sha512-UmgRrrEAkWvxwhlwe30UmDOdTEFidlIzBC7C3cCbeJMcBN1x8B3KH+crXrsTqfWQBG58mXgt8wgSK3Kxs2LhFg=="], 58 + 59 + "@atproto/lex-data": ["@atproto/lex-data@0.0.8", "", { "dependencies": { "@atproto/syntax": "0.4.2", "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-1Y5tz7BkS7380QuLNXaE8GW8Xba+mRWugt8BKM4BUFYjjUZdmirU8lr72iM4XlEBrzRu8Cfvj+MbsbYaZv+IgA=="], 60 + 61 + "@atproto/lex-json": ["@atproto/lex-json@0.0.8", "", { "dependencies": { "@atproto/lex-data": "0.0.8", "tslib": "^2.8.1" } }, "sha512-w1Qmkae1QhmNz+i1Zm3xr3jp0UPPRENmdlpU0qIrdxWDo9W4Mzkeyc3eSoa+Zs+zN8xkRSQw7RLZte/B7Ipdwg=="], 62 + 63 + "@atproto/lexicon": ["@atproto/lexicon@0.6.0", "", { "dependencies": { "@atproto/common-web": "^0.4.7", "@atproto/syntax": "^0.4.2", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-5veb8aD+J5M0qszLJ+73KSFsFrJBgAY/nM1TSAJvGY7fNc9ZAT+PSUlmIyrdye9YznAZ07yktalls/TwNV7cHQ=="], 64 + 65 + "@atproto/oauth-client": ["@atproto/oauth-client@0.5.13", "", { "dependencies": { "@atproto-labs/did-resolver": "0.2.5", "@atproto-labs/fetch": "0.2.3", "@atproto-labs/handle-resolver": "0.3.5", "@atproto-labs/identity-resolver": "0.3.5", "@atproto-labs/simple-store": "0.3.0", "@atproto-labs/simple-store-memory": "0.1.4", "@atproto/did": "0.2.4", "@atproto/jwk": "0.6.0", "@atproto/oauth-types": "0.6.1", "@atproto/xrpc": "0.7.7", "core-js": "^3", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-FLbqHkC7BAVZ90LHVzSxQf+s8ZNIQI4TsDuhYDyzi7lYtktFHDbgd88KuM2ClJFOtGCsSS17yR1Joy925tDSaA=="], 66 + 67 + "@atproto/oauth-client-node": ["@atproto/oauth-client-node@0.3.15", "", { "dependencies": { "@atproto-labs/did-resolver": "0.2.5", "@atproto-labs/handle-resolver-node": "0.1.24", "@atproto-labs/simple-store": "0.3.0", "@atproto/did": "0.2.4", "@atproto/jwk": "0.6.0", "@atproto/jwk-jose": "0.1.11", "@atproto/jwk-webcrypto": "0.2.0", "@atproto/oauth-client": "0.5.13", "@atproto/oauth-types": "0.6.1" } }, "sha512-iuT7QrLli7IyB4px1+lHvm/YoIRfNRpbNG9seJRtu5eX4N5aLsBP6vpXs9rCygd1+/15LcLRAAGKVEcrLT9tXA=="], 68 + 69 + "@atproto/oauth-types": ["@atproto/oauth-types@0.6.1", "", { "dependencies": { "@atproto/did": "0.2.4", "@atproto/jwk": "0.6.0", "zod": "^3.23.8" } }, "sha512-3z92GN/6zCq9E2GTTfZM27tWEbvi1qwFSA7KoS5+wqBC4kSsLvnLxmbKH402Z40DfWS4YWqw0DkHsgP0LNFDEA=="], 70 + 71 + "@atproto/syntax": ["@atproto/syntax@0.4.2", "", {}, "sha512-X9XSRPinBy/0VQ677j8VXlBsYSsUXaiqxWVpGGxJYsAhugdQRb0jqaVKJFtm6RskeNkV6y9xclSUi9UYG/COrA=="], 72 + 73 + "@atproto/xrpc": ["@atproto/xrpc@0.7.7", "", { "dependencies": { "@atproto/lexicon": "^0.6.0", "zod": "^3.23.8" } }, "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA=="], 74 + 75 + "@stdpub/lib": ["@stdpub/lib@workspace:packages/lib"], 76 + 77 + "@stdpub/web": ["@stdpub/web@workspace:packages/web"], 78 + 79 + "@types/bun": ["@types/bun@1.3.6", "", { "dependencies": { "bun-types": "1.3.6" } }, "sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA=="], 80 + 81 + "@types/node": ["@types/node@25.0.8", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-powIePYMmC3ibL0UJ2i2s0WIbq6cg6UyVFQxSCpaPxxzAaziRfimGivjdF943sSGV6RADVbk0Nvlm5P/FB44Zg=="], 82 + 83 + "await-lock": ["await-lock@2.2.2", "", {}, "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw=="], 84 + 85 + "bun-types": ["bun-types@1.3.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ=="], 86 + 87 + "core-js": ["core-js@3.47.0", "", {}, "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg=="], 88 + 89 + "hono": ["hono@4.11.4", "", {}, "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA=="], 90 + 91 + "ipaddr.js": ["ipaddr.js@2.3.0", "", {}, "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg=="], 92 + 93 + "iso-datestring-validator": ["iso-datestring-validator@2.2.2", "", {}, "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA=="], 94 + 95 + "jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], 96 + 97 + "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], 98 + 99 + "marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], 100 + 101 + "multiformats": ["multiformats@9.9.0", "", {}, "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg=="], 102 + 103 + "tlds": ["tlds@1.261.0", "", { "bin": { "tlds": "bin.js" } }, "sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA=="], 104 + 105 + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], 106 + 107 + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], 108 + 109 + "uint8arrays": ["uint8arrays@3.0.0", "", { "dependencies": { "multiformats": "^9.4.2" } }, "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA=="], 110 + 111 + "undici": ["undici@6.23.0", "", {}, "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g=="], 112 + 113 + "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], 114 + 115 + "unicode-segmenter": ["unicode-segmenter@0.14.5", "", {}, "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g=="], 116 + 117 + "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], 439 118 } 440 119 }
+4 -19
package.json
··· 1 1 { 2 - "name": "std.pub", 3 - "module": "src/server.ts", 4 - "type": "module", 2 + "name": "stdpub", 5 3 "private": true, 6 - "scripts": { 7 - "dev": "bun --hot run src/server.ts", 8 - "start": "bun run src/server.ts" 9 - }, 10 - "devDependencies": { 11 - "@types/bun": "latest" 12 - }, 13 - "peerDependencies": { 14 - "typescript": "^5" 15 - }, 16 - "dependencies": { 17 - "@atproto/api": "^0.18.13", 18 - "@atproto/jwk-jose": "^0.1.11", 19 - "@atproto/oauth-client-node": "^0.3.15", 20 - "hono": "^4.11.3" 21 - } 4 + "workspaces": [ 5 + "packages/*" 6 + ] 22 7 }
+440
packages/web/bun.lock
··· 1 + { 2 + "lockfileVersion": 1, 3 + "configVersion": 1, 4 + "workspaces": { 5 + "": { 6 + "name": "std.pub", 7 + "dependencies": { 8 + "@atproto/api": "^0.18.13", 9 + "@atproto/jwk-jose": "^0.1.11", 10 + "@atproto/oauth-client-node": "^0.3.15", 11 + "hono": "^4.11.3", 12 + }, 13 + "devDependencies": { 14 + "@types/bun": "latest", 15 + }, 16 + "peerDependencies": { 17 + "typescript": "^5", 18 + }, 19 + }, 20 + }, 21 + "packages": { 22 + "@atproto-labs/did-resolver": [ 23 + "@atproto-labs/did-resolver@0.2.5", 24 + "", 25 + { 26 + "dependencies": { 27 + "@atproto-labs/fetch": "0.2.3", 28 + "@atproto-labs/pipe": "0.1.1", 29 + "@atproto-labs/simple-store": "0.3.0", 30 + "@atproto-labs/simple-store-memory": "0.1.4", 31 + "@atproto/did": "0.2.4", 32 + "zod": "^3.23.8" 33 + } 34 + }, 35 + "sha512-he7EC6OMSifNs01a4RT9mta/yYitoKDzlK9ty2TFV5Uj/+HpB4vYMRdIDFrRW0Hcsehy90E2t/dw0t7361MEKQ==" 36 + ], 37 + "@atproto-labs/fetch": [ 38 + "@atproto-labs/fetch@0.2.3", 39 + "", 40 + { 41 + "dependencies": { 42 + "@atproto-labs/pipe": "0.1.1" 43 + } 44 + }, 45 + "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw==" 46 + ], 47 + "@atproto-labs/fetch-node": [ 48 + "@atproto-labs/fetch-node@0.2.0", 49 + "", 50 + { 51 + "dependencies": { 52 + "@atproto-labs/fetch": "0.2.3", 53 + "@atproto-labs/pipe": "0.1.1", 54 + "ipaddr.js": "^2.1.0", 55 + "undici": "^6.14.1" 56 + } 57 + }, 58 + "sha512-Krq09nH/aeoiU2s9xdHA0FjTEFWG9B5FFenipv1iRixCcPc7V3DhTNDawxG9gI8Ny0k4dBVS9WTRN/IDzBx86Q==" 59 + ], 60 + "@atproto-labs/handle-resolver": [ 61 + "@atproto-labs/handle-resolver@0.3.5", 62 + "", 63 + { 64 + "dependencies": { 65 + "@atproto-labs/simple-store": "0.3.0", 66 + "@atproto-labs/simple-store-memory": "0.1.4", 67 + "@atproto/did": "0.2.4", 68 + "zod": "^3.23.8" 69 + } 70 + }, 71 + "sha512-r3b+plCh/0arN535Aool9gL6yTSbAPDOyReURbA2TWAaeW4vrSJPwR6yYUx0k0vmVPjkZPIdUVd63bG/+VG5MA==" 72 + ], 73 + "@atproto-labs/handle-resolver-node": [ 74 + "@atproto-labs/handle-resolver-node@0.1.24", 75 + "", 76 + { 77 + "dependencies": { 78 + "@atproto-labs/fetch-node": "0.2.0", 79 + "@atproto-labs/handle-resolver": "0.3.5", 80 + "@atproto/did": "0.2.4" 81 + } 82 + }, 83 + "sha512-w/zvktigmRQpOLQQclp48tbb2K/2XW8j1szoIpT8T8v6P5dZ8GGVDIEF142xQMX9vWToFqMTu1P2yOuz8e3Ilg==" 84 + ], 85 + "@atproto-labs/identity-resolver": [ 86 + "@atproto-labs/identity-resolver@0.3.5", 87 + "", 88 + { 89 + "dependencies": { 90 + "@atproto-labs/did-resolver": "0.2.5", 91 + "@atproto-labs/handle-resolver": "0.3.5" 92 + } 93 + }, 94 + "sha512-kSxnreUSPhKL77doUbSl/9I6Y9qpkpD7MMJoYFQVU/WG0PB90tzfIb6DNuWsjbU2I5Q91Nzc4Tm4VJMV+OPKGQ==" 95 + ], 96 + "@atproto-labs/pipe": [ 97 + "@atproto-labs/pipe@0.1.1", 98 + "", 99 + {}, 100 + "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg==" 101 + ], 102 + "@atproto-labs/simple-store": [ 103 + "@atproto-labs/simple-store@0.3.0", 104 + "", 105 + {}, 106 + "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ==" 107 + ], 108 + "@atproto-labs/simple-store-memory": [ 109 + "@atproto-labs/simple-store-memory@0.1.4", 110 + "", 111 + { 112 + "dependencies": { 113 + "@atproto-labs/simple-store": "0.3.0", 114 + "lru-cache": "^10.2.0" 115 + } 116 + }, 117 + "sha512-3mKY4dP8I7yKPFj9VKpYyCRzGJOi5CEpOLPlRhoJyLmgs3J4RzDrjn323Oakjz2Aj2JzRU/AIvWRAZVhpYNJHw==" 118 + ], 119 + "@atproto/api": [ 120 + "@atproto/api@0.18.13", 121 + "", 122 + { 123 + "dependencies": { 124 + "@atproto/common-web": "^0.4.11", 125 + "@atproto/lexicon": "^0.6.0", 126 + "@atproto/syntax": "^0.4.2", 127 + "@atproto/xrpc": "^0.7.7", 128 + "await-lock": "^2.2.2", 129 + "multiformats": "^9.9.0", 130 + "tlds": "^1.234.0", 131 + "zod": "^3.23.8" 132 + } 133 + }, 134 + "sha512-CULZ01pSJDltLS/Gc9MMrhFzB6OM3ezyZw7KoeLT/sBfwgA1ddA4mWdTh7DIRosPRigXtA05bnoiCutZbQDo+Q==" 135 + ], 136 + "@atproto/common-web": [ 137 + "@atproto/common-web@0.4.11", 138 + "", 139 + { 140 + "dependencies": { 141 + "@atproto/lex-data": "0.0.7", 142 + "@atproto/lex-json": "0.0.7", 143 + "zod": "^3.23.8" 144 + } 145 + }, 146 + "sha512-VHejNmSABU8/03VrQ3e36AmT5U3UIeio+qSUqCrO1oNgrJcWfGy1rpj0FVtUugWF8Un29+yzkukzWGZfXL70rQ==" 147 + ], 148 + "@atproto/did": [ 149 + "@atproto/did@0.2.4", 150 + "", 151 + { 152 + "dependencies": { 153 + "zod": "^3.23.8" 154 + } 155 + }, 156 + "sha512-nxNiCgXeo7pfjojq9fpfZxCO0X0xUipNVKW+AHNZwQKiUDt6zYL0VXEfm8HBUwQOCmKvj2pRRSM1Cur+tUWk3g==" 157 + ], 158 + "@atproto/jwk": [ 159 + "@atproto/jwk@0.6.0", 160 + "", 161 + { 162 + "dependencies": { 163 + "multiformats": "^9.9.0", 164 + "zod": "^3.23.8" 165 + } 166 + }, 167 + "sha512-bDoJPvt7TrQVi/rBfBrSSpGykhtIriKxeYCYQTiPRKFfyRhbgpElF0wPXADjIswnbzZdOwbY63az4E/CFVT3Tw==" 168 + ], 169 + "@atproto/jwk-jose": [ 170 + "@atproto/jwk-jose@0.1.11", 171 + "", 172 + { 173 + "dependencies": { 174 + "@atproto/jwk": "0.6.0", 175 + "jose": "^5.2.0" 176 + } 177 + }, 178 + "sha512-i4Fnr2sTBYmMmHXl7NJh8GrCH+tDQEVWrcDMDnV5DjJfkgT17wIqvojIw9SNbSL4Uf0OtfEv6AgG0A+mgh8b5Q==" 179 + ], 180 + "@atproto/jwk-webcrypto": [ 181 + "@atproto/jwk-webcrypto@0.2.0", 182 + "", 183 + { 184 + "dependencies": { 185 + "@atproto/jwk": "0.6.0", 186 + "@atproto/jwk-jose": "0.1.11", 187 + "zod": "^3.23.8" 188 + } 189 + }, 190 + "sha512-UmgRrrEAkWvxwhlwe30UmDOdTEFidlIzBC7C3cCbeJMcBN1x8B3KH+crXrsTqfWQBG58mXgt8wgSK3Kxs2LhFg==" 191 + ], 192 + "@atproto/lex-data": [ 193 + "@atproto/lex-data@0.0.7", 194 + "", 195 + { 196 + "dependencies": { 197 + "@atproto/syntax": "0.4.2", 198 + "multiformats": "^9.9.0", 199 + "tslib": "^2.8.1", 200 + "uint8arrays": "3.0.0", 201 + "unicode-segmenter": "^0.14.0" 202 + } 203 + }, 204 + "sha512-W/Q5o9o7n2Sv3UywckChu01X5lwQUtaiiOkGJLnRsdkQTyC6813nPgY+p2sG7NwwM+82lu+FUV9fE/Ul3VqaJw==" 205 + ], 206 + "@atproto/lex-json": [ 207 + "@atproto/lex-json@0.0.7", 208 + "", 209 + { 210 + "dependencies": { 211 + "@atproto/lex-data": "0.0.7", 212 + "tslib": "^2.8.1" 213 + } 214 + }, 215 + "sha512-bjNPD5M/MhLfjNM7tcxuls80UgXpHqxdOxDXEUouAtZQV/nIDhGjmNUvKxOmOgnDsiZRnT2g5y3onrnjH3a44g==" 216 + ], 217 + "@atproto/lexicon": [ 218 + "@atproto/lexicon@0.6.0", 219 + "", 220 + { 221 + "dependencies": { 222 + "@atproto/common-web": "^0.4.7", 223 + "@atproto/syntax": "^0.4.2", 224 + "iso-datestring-validator": "^2.2.2", 225 + "multiformats": "^9.9.0", 226 + "zod": "^3.23.8" 227 + } 228 + }, 229 + "sha512-5veb8aD+J5M0qszLJ+73KSFsFrJBgAY/nM1TSAJvGY7fNc9ZAT+PSUlmIyrdye9YznAZ07yktalls/TwNV7cHQ==" 230 + ], 231 + "@atproto/oauth-client": [ 232 + "@atproto/oauth-client@0.5.13", 233 + "", 234 + { 235 + "dependencies": { 236 + "@atproto-labs/did-resolver": "0.2.5", 237 + "@atproto-labs/fetch": "0.2.3", 238 + "@atproto-labs/handle-resolver": "0.3.5", 239 + "@atproto-labs/identity-resolver": "0.3.5", 240 + "@atproto-labs/simple-store": "0.3.0", 241 + "@atproto-labs/simple-store-memory": "0.1.4", 242 + "@atproto/did": "0.2.4", 243 + "@atproto/jwk": "0.6.0", 244 + "@atproto/oauth-types": "0.6.1", 245 + "@atproto/xrpc": "0.7.7", 246 + "core-js": "^3", 247 + "multiformats": "^9.9.0", 248 + "zod": "^3.23.8" 249 + } 250 + }, 251 + "sha512-FLbqHkC7BAVZ90LHVzSxQf+s8ZNIQI4TsDuhYDyzi7lYtktFHDbgd88KuM2ClJFOtGCsSS17yR1Joy925tDSaA==" 252 + ], 253 + "@atproto/oauth-client-node": [ 254 + "@atproto/oauth-client-node@0.3.15", 255 + "", 256 + { 257 + "dependencies": { 258 + "@atproto-labs/did-resolver": "0.2.5", 259 + "@atproto-labs/handle-resolver-node": "0.1.24", 260 + "@atproto-labs/simple-store": "0.3.0", 261 + "@atproto/did": "0.2.4", 262 + "@atproto/jwk": "0.6.0", 263 + "@atproto/jwk-jose": "0.1.11", 264 + "@atproto/jwk-webcrypto": "0.2.0", 265 + "@atproto/oauth-client": "0.5.13", 266 + "@atproto/oauth-types": "0.6.1" 267 + } 268 + }, 269 + "sha512-iuT7QrLli7IyB4px1+lHvm/YoIRfNRpbNG9seJRtu5eX4N5aLsBP6vpXs9rCygd1+/15LcLRAAGKVEcrLT9tXA==" 270 + ], 271 + "@atproto/oauth-types": [ 272 + "@atproto/oauth-types@0.6.1", 273 + "", 274 + { 275 + "dependencies": { 276 + "@atproto/did": "0.2.4", 277 + "@atproto/jwk": "0.6.0", 278 + "zod": "^3.23.8" 279 + } 280 + }, 281 + "sha512-3z92GN/6zCq9E2GTTfZM27tWEbvi1qwFSA7KoS5+wqBC4kSsLvnLxmbKH402Z40DfWS4YWqw0DkHsgP0LNFDEA==" 282 + ], 283 + "@atproto/syntax": [ 284 + "@atproto/syntax@0.4.2", 285 + "", 286 + {}, 287 + "sha512-X9XSRPinBy/0VQ677j8VXlBsYSsUXaiqxWVpGGxJYsAhugdQRb0jqaVKJFtm6RskeNkV6y9xclSUi9UYG/COrA==" 288 + ], 289 + "@atproto/xrpc": [ 290 + "@atproto/xrpc@0.7.7", 291 + "", 292 + { 293 + "dependencies": { 294 + "@atproto/lexicon": "^0.6.0", 295 + "zod": "^3.23.8" 296 + } 297 + }, 298 + "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA==" 299 + ], 300 + "@types/bun": [ 301 + "@types/bun@1.3.5", 302 + "", 303 + { 304 + "dependencies": { 305 + "bun-types": "1.3.5" 306 + } 307 + }, 308 + "sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w==" 309 + ], 310 + "@types/node": [ 311 + "@types/node@25.0.6", 312 + "", 313 + { 314 + "dependencies": { 315 + "undici-types": "~7.16.0" 316 + } 317 + }, 318 + "sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q==" 319 + ], 320 + "await-lock": [ 321 + "await-lock@2.2.2", 322 + "", 323 + {}, 324 + "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==" 325 + ], 326 + "bun-types": [ 327 + "bun-types@1.3.5", 328 + "", 329 + { 330 + "dependencies": { 331 + "@types/node": "*" 332 + } 333 + }, 334 + "sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw==" 335 + ], 336 + "core-js": [ 337 + "core-js@3.47.0", 338 + "", 339 + {}, 340 + "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==" 341 + ], 342 + "hono": [ 343 + "hono@4.11.3", 344 + "", 345 + {}, 346 + "sha512-PmQi306+M/ct/m5s66Hrg+adPnkD5jiO6IjA7WhWw0gSBSo1EcRegwuI1deZ+wd5pzCGynCcn2DprnE4/yEV4w==" 347 + ], 348 + "ipaddr.js": [ 349 + "ipaddr.js@2.3.0", 350 + "", 351 + {}, 352 + "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==" 353 + ], 354 + "iso-datestring-validator": [ 355 + "iso-datestring-validator@2.2.2", 356 + "", 357 + {}, 358 + "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==" 359 + ], 360 + "jose": [ 361 + "jose@5.10.0", 362 + "", 363 + {}, 364 + "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==" 365 + ], 366 + "lru-cache": [ 367 + "lru-cache@10.4.3", 368 + "", 369 + {}, 370 + "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" 371 + ], 372 + "multiformats": [ 373 + "multiformats@9.9.0", 374 + "", 375 + {}, 376 + "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" 377 + ], 378 + "tlds": [ 379 + "tlds@1.261.0", 380 + "", 381 + { 382 + "bin": { 383 + "tlds": "bin.js" 384 + } 385 + }, 386 + "sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==" 387 + ], 388 + "tslib": [ 389 + "tslib@2.8.1", 390 + "", 391 + {}, 392 + "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" 393 + ], 394 + "typescript": [ 395 + "typescript@5.9.3", 396 + "", 397 + { 398 + "bin": { 399 + "tsc": "bin/tsc", 400 + "tsserver": "bin/tsserver" 401 + } 402 + }, 403 + "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==" 404 + ], 405 + "uint8arrays": [ 406 + "uint8arrays@3.0.0", 407 + "", 408 + { 409 + "dependencies": { 410 + "multiformats": "^9.4.2" 411 + } 412 + }, 413 + "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==" 414 + ], 415 + "undici": [ 416 + "undici@6.23.0", 417 + "", 418 + {}, 419 + "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==" 420 + ], 421 + "undici-types": [ 422 + "undici-types@7.16.0", 423 + "", 424 + {}, 425 + "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==" 426 + ], 427 + "unicode-segmenter": [ 428 + "unicode-segmenter@0.14.5", 429 + "", 430 + {}, 431 + "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==" 432 + ], 433 + "zod": [ 434 + "zod@3.25.76", 435 + "", 436 + {}, 437 + "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==" 438 + ], 439 + } 440 + }
+23
packages/web/package.json
··· 1 + { 2 + "name": "@stdpub/web", 3 + "module": "src/server.ts", 4 + "type": "module", 5 + "private": true, 6 + "scripts": { 7 + "dev": "bun --hot run src/server.ts", 8 + "start": "bun run src/server.ts" 9 + }, 10 + "devDependencies": { 11 + "@types/bun": "latest" 12 + }, 13 + "peerDependencies": { 14 + "typescript": "^5" 15 + }, 16 + "dependencies": { 17 + "@atproto/api": "^0.18.13", 18 + "@atproto/jwk-jose": "^0.1.11", 19 + "@atproto/oauth-client-node": "^0.3.15", 20 + "hono": "^4.11.3", 21 + "marked": "^15.0.0" 22 + } 23 + }
+32
packages/web/src/lib/content-types.ts
··· 1 + export interface ContentMarkdown { 2 + $type: "site.standard.content.markdown"; 3 + text: string; 4 + } 5 + 6 + export type DocumentContent = ContentMarkdown; 7 + 8 + export function createMarkdownContent(text: string): ContentMarkdown { 9 + return { 10 + $type: "site.standard.content.markdown", 11 + text, 12 + }; 13 + } 14 + 15 + export function isMarkdownContent(value: unknown): value is ContentMarkdown { 16 + return ( 17 + typeof value === "object" && 18 + value !== null && 19 + "$type" in value && 20 + (value as ContentMarkdown).$type === "site.standard.content.markdown" 21 + ); 22 + } 23 + 24 + export function getDocumentContentText(doc: Record<string, unknown>): string | null { 25 + if (isMarkdownContent(doc.content)) { 26 + return doc.content.text; 27 + } 28 + if (typeof doc.textContent === "string") { 29 + return doc.textContent; 30 + } 31 + return null; 32 + }
public/styles.css packages/web/public/styles.css
scripts/cleanup.ts packages/web/scripts/cleanup.ts
src/lib/csrf.ts packages/web/src/lib/csrf.ts
src/lib/logger.ts packages/web/src/lib/logger.ts
src/lib/oauth.ts packages/web/src/lib/oauth.ts
src/lib/session.ts packages/web/src/lib/session.ts
src/lib/validation.ts packages/web/src/lib/validation.ts
src/routes/auth.ts packages/web/src/routes/auth.ts
+19 -4
src/routes/documents.ts packages/web/src/routes/documents.ts
··· 4 4 import { requireAuth, type Session } from "../lib/session"; 5 5 import { csrfField } from "../lib/csrf"; 6 6 import { isValidTID } from "../lib/validation"; 7 + import { createMarkdownContent, getDocumentContentText } from "../lib/content-types"; 8 + import { marked } from "marked"; 7 9 8 10 export const documentRoutes = new Hono(); 9 11 ··· 296 298 297 299 if (path) record.path = path.startsWith("/") ? path : `/${path}`; 298 300 if (description) record.description = description; 299 - if (content) record.textContent = content; 301 + if (content) { 302 + record.content = createMarkdownContent(content); 303 + record.textContent = content; 304 + } 300 305 if (tags.length > 0) record.tags = tags; 301 306 302 307 await session.agent!.com.atproto.repo.createRecord({ ··· 363 368 : ""} 364 369 365 370 <div class="document-content"> 366 - <pre>${doc.textContent || "(No content)"}</pre> 371 + ${ 372 + (() => { 373 + const text = getDocumentContentText(doc); 374 + if (!text) return html`<p class="empty">(No content)</p>`; 375 + const htmlContent = marked.parse(text) as string; 376 + return html`<div class="markdown-body">${raw(htmlContent)}</div>`; 377 + })() 378 + } 367 379 </div> 368 380 369 381 <div class="actions"> ··· 491 503 rows="20" 492 504 class="content-editor" 493 505 > 494 - ${doc.textContent || ""}</textarea 506 + ${getDocumentContentText(doc) || ""}</textarea 495 507 > 496 508 </div> 497 509 ··· 569 581 570 582 if (path) record.path = path.startsWith("/") ? path : `/${path}`; 571 583 if (description) record.description = description; 572 - if (content) record.textContent = content; 584 + if (content) { 585 + record.content = createMarkdownContent(content); 586 + record.textContent = content; 587 + } 573 588 if (tags.length > 0) record.tags = tags; 574 589 575 590 await session.agent!.com.atproto.repo.putRecord({
src/routes/publication.ts packages/web/src/routes/publication.ts
src/server.ts packages/web/src/server.ts
src/views/home.ts packages/web/src/views/home.ts
src/views/layouts/main.ts packages/web/src/views/layouts/main.ts