diff --git a/bun.lock b/bun.lock index b26ae31..fdcdff9 100644 --- a/bun.lock +++ b/bun.lock @@ -3,12 +3,19 @@ "configVersion": 1, "workspaces": { "": { - "name": "std.pub", + "name": "stdpub", + }, + "packages/lib": { + "name": "@stdpub/lib", + }, + "packages/web": { + "name": "@stdpub/web", "dependencies": { "@atproto/api": "^0.18.13", "@atproto/jwk-jose": "^0.1.11", "@atproto/oauth-client-node": "^0.3.15", "hono": "^4.11.3", + "marked": "^15.0.0", }, "devDependencies": { "@types/bun": "latest", @@ -19,422 +26,94 @@ }, }, "packages": { - "@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==" - ], - "@atproto-labs/fetch": [ - "@atproto-labs/fetch@0.2.3", - "", - { - "dependencies": { - "@atproto-labs/pipe": "0.1.1" - } - }, - "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw==" - ], - "@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==" - ], - "@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==" - ], - "@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==" - ], - "@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==" - ], - "@atproto-labs/pipe": [ - "@atproto-labs/pipe@0.1.1", - "", - {}, - "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg==" - ], - "@atproto-labs/simple-store": [ - "@atproto-labs/simple-store@0.3.0", - "", - {}, - "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ==" - ], - "@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==" - ], - "@atproto/api": [ - "@atproto/api@0.18.13", - "", - { - "dependencies": { - "@atproto/common-web": "^0.4.11", - "@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-CULZ01pSJDltLS/Gc9MMrhFzB6OM3ezyZw7KoeLT/sBfwgA1ddA4mWdTh7DIRosPRigXtA05bnoiCutZbQDo+Q==" - ], - "@atproto/common-web": [ - "@atproto/common-web@0.4.11", - "", - { - "dependencies": { - "@atproto/lex-data": "0.0.7", - "@atproto/lex-json": "0.0.7", - "zod": "^3.23.8" - } - }, - "sha512-VHejNmSABU8/03VrQ3e36AmT5U3UIeio+qSUqCrO1oNgrJcWfGy1rpj0FVtUugWF8Un29+yzkukzWGZfXL70rQ==" - ], - "@atproto/did": [ - "@atproto/did@0.2.4", - "", - { - "dependencies": { - "zod": "^3.23.8" - } - }, - "sha512-nxNiCgXeo7pfjojq9fpfZxCO0X0xUipNVKW+AHNZwQKiUDt6zYL0VXEfm8HBUwQOCmKvj2pRRSM1Cur+tUWk3g==" - ], - "@atproto/jwk": [ - "@atproto/jwk@0.6.0", - "", - { - "dependencies": { - "multiformats": "^9.9.0", - "zod": "^3.23.8" - } - }, - "sha512-bDoJPvt7TrQVi/rBfBrSSpGykhtIriKxeYCYQTiPRKFfyRhbgpElF0wPXADjIswnbzZdOwbY63az4E/CFVT3Tw==" - ], - "@atproto/jwk-jose": [ - "@atproto/jwk-jose@0.1.11", - "", - { - "dependencies": { - "@atproto/jwk": "0.6.0", - "jose": "^5.2.0" - } - }, - "sha512-i4Fnr2sTBYmMmHXl7NJh8GrCH+tDQEVWrcDMDnV5DjJfkgT17wIqvojIw9SNbSL4Uf0OtfEv6AgG0A+mgh8b5Q==" - ], - "@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==" - ], - "@atproto/lex-data": [ - "@atproto/lex-data@0.0.7", - "", - { - "dependencies": { - "@atproto/syntax": "0.4.2", - "multiformats": "^9.9.0", - "tslib": "^2.8.1", - "uint8arrays": "3.0.0", - "unicode-segmenter": "^0.14.0" - } - }, - "sha512-W/Q5o9o7n2Sv3UywckChu01X5lwQUtaiiOkGJLnRsdkQTyC6813nPgY+p2sG7NwwM+82lu+FUV9fE/Ul3VqaJw==" - ], - "@atproto/lex-json": [ - "@atproto/lex-json@0.0.7", - "", - { - "dependencies": { - "@atproto/lex-data": "0.0.7", - "tslib": "^2.8.1" - } - }, - "sha512-bjNPD5M/MhLfjNM7tcxuls80UgXpHqxdOxDXEUouAtZQV/nIDhGjmNUvKxOmOgnDsiZRnT2g5y3onrnjH3a44g==" - ], - "@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==" - ], - "@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==" - ], - "@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==" - ], - "@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==" - ], - "@atproto/syntax": [ - "@atproto/syntax@0.4.2", - "", - {}, - "sha512-X9XSRPinBy/0VQ677j8VXlBsYSsUXaiqxWVpGGxJYsAhugdQRb0jqaVKJFtm6RskeNkV6y9xclSUi9UYG/COrA==" - ], - "@atproto/xrpc": [ - "@atproto/xrpc@0.7.7", - "", - { - "dependencies": { - "@atproto/lexicon": "^0.6.0", - "zod": "^3.23.8" - } - }, - "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA==" - ], - "@types/bun": [ - "@types/bun@1.3.5", - "", - { - "dependencies": { - "bun-types": "1.3.5" - } - }, - "sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w==" - ], - "@types/node": [ - "@types/node@25.0.6", - "", - { - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q==" - ], - "await-lock": [ - "await-lock@2.2.2", - "", - {}, - "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==" - ], - "bun-types": [ - "bun-types@1.3.5", - "", - { - "dependencies": { - "@types/node": "*" - } - }, - "sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw==" - ], - "core-js": [ - "core-js@3.47.0", - "", - {}, - "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==" - ], - "hono": [ - "hono@4.11.3", - "", - {}, - "sha512-PmQi306+M/ct/m5s66Hrg+adPnkD5jiO6IjA7WhWw0gSBSo1EcRegwuI1deZ+wd5pzCGynCcn2DprnE4/yEV4w==" - ], - "ipaddr.js": [ - "ipaddr.js@2.3.0", - "", - {}, - "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==" - ], - "iso-datestring-validator": [ - "iso-datestring-validator@2.2.2", - "", - {}, - "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==" - ], - "jose": [ - "jose@5.10.0", - "", - {}, - "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==" - ], - "lru-cache": [ - "lru-cache@10.4.3", - "", - {}, - "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" - ], - "multiformats": [ - "multiformats@9.9.0", - "", - {}, - "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" - ], - "tlds": [ - "tlds@1.261.0", - "", - { - "bin": { - "tlds": "bin.js" - } - }, - "sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==" - ], - "tslib": [ - "tslib@2.8.1", - "", - {}, - "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" - ], - "typescript": [ - "typescript@5.9.3", - "", - { - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - } - }, - "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==" - ], - "uint8arrays": [ - "uint8arrays@3.0.0", - "", - { - "dependencies": { - "multiformats": "^9.4.2" - } - }, - "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==" - ], - "undici": [ - "undici@6.23.0", - "", - {}, - "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==" - ], - "undici-types": [ - "undici-types@7.16.0", - "", - {}, - "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==" - ], - "unicode-segmenter": [ - "unicode-segmenter@0.14.5", - "", - {}, - "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==" - ], - "zod": [ - "zod@3.25.76", - "", - {}, - "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==" - ], + "@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=="], + + "@atproto-labs/fetch": ["@atproto-labs/fetch@0.2.3", "", { "dependencies": { "@atproto-labs/pipe": "0.1.1" } }, "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@atproto-labs/pipe": ["@atproto-labs/pipe@0.1.1", "", {}, "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg=="], + + "@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.3.0", "", {}, "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@atproto/did": ["@atproto/did@0.2.4", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-nxNiCgXeo7pfjojq9fpfZxCO0X0xUipNVKW+AHNZwQKiUDt6zYL0VXEfm8HBUwQOCmKvj2pRRSM1Cur+tUWk3g=="], + + "@atproto/jwk": ["@atproto/jwk@0.6.0", "", { "dependencies": { "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-bDoJPvt7TrQVi/rBfBrSSpGykhtIriKxeYCYQTiPRKFfyRhbgpElF0wPXADjIswnbzZdOwbY63az4E/CFVT3Tw=="], + + "@atproto/jwk-jose": ["@atproto/jwk-jose@0.1.11", "", { "dependencies": { "@atproto/jwk": "0.6.0", "jose": "^5.2.0" } }, "sha512-i4Fnr2sTBYmMmHXl7NJh8GrCH+tDQEVWrcDMDnV5DjJfkgT17wIqvojIw9SNbSL4Uf0OtfEv6AgG0A+mgh8b5Q=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@atproto/syntax": ["@atproto/syntax@0.4.2", "", {}, "sha512-X9XSRPinBy/0VQ677j8VXlBsYSsUXaiqxWVpGGxJYsAhugdQRb0jqaVKJFtm6RskeNkV6y9xclSUi9UYG/COrA=="], + + "@atproto/xrpc": ["@atproto/xrpc@0.7.7", "", { "dependencies": { "@atproto/lexicon": "^0.6.0", "zod": "^3.23.8" } }, "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA=="], + + "@stdpub/lib": ["@stdpub/lib@workspace:packages/lib"], + + "@stdpub/web": ["@stdpub/web@workspace:packages/web"], + + "@types/bun": ["@types/bun@1.3.6", "", { "dependencies": { "bun-types": "1.3.6" } }, "sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA=="], + + "@types/node": ["@types/node@25.0.8", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-powIePYMmC3ibL0UJ2i2s0WIbq6cg6UyVFQxSCpaPxxzAaziRfimGivjdF943sSGV6RADVbk0Nvlm5P/FB44Zg=="], + + "await-lock": ["await-lock@2.2.2", "", {}, "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw=="], + + "bun-types": ["bun-types@1.3.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ=="], + + "core-js": ["core-js@3.47.0", "", {}, "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg=="], + + "hono": ["hono@4.11.4", "", {}, "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA=="], + + "ipaddr.js": ["ipaddr.js@2.3.0", "", {}, "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg=="], + + "iso-datestring-validator": ["iso-datestring-validator@2.2.2", "", {}, "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA=="], + + "jose": ["jose@5.10.0", "", {}, "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg=="], + + "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "marked": ["marked@15.0.12", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="], + + "multiformats": ["multiformats@9.9.0", "", {}, "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg=="], + + "tlds": ["tlds@1.261.0", "", { "bin": { "tlds": "bin.js" } }, "sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "uint8arrays": ["uint8arrays@3.0.0", "", { "dependencies": { "multiformats": "^9.4.2" } }, "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA=="], + + "undici": ["undici@6.23.0", "", {}, "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g=="], + + "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + + "unicode-segmenter": ["unicode-segmenter@0.14.5", "", {}, "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g=="], + + "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], } } diff --git a/package.json b/package.json index ca99138..273378c 100644 --- a/package.json +++ b/package.json @@ -1,22 +1,7 @@ { - "name": "std.pub", - "module": "src/server.ts", - "type": "module", + "name": "stdpub", "private": true, - "scripts": { - "dev": "bun --hot run src/server.ts", - "start": "bun run src/server.ts" - }, - "devDependencies": { - "@types/bun": "latest" - }, - "peerDependencies": { - "typescript": "^5" - }, - "dependencies": { - "@atproto/api": "^0.18.13", - "@atproto/jwk-jose": "^0.1.11", - "@atproto/oauth-client-node": "^0.3.15", - "hono": "^4.11.3" - } + "workspaces": [ + "packages/*" + ] } diff --git a/CLAUDE.md b/packages/web/CLAUDE.md similarity index 100% rename from CLAUDE.md rename to packages/web/CLAUDE.md diff --git a/packages/web/bun.lock b/packages/web/bun.lock new file mode 100644 index 0000000..b26ae31 --- /dev/null +++ b/packages/web/bun.lock @@ -0,0 +1,440 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "std.pub", + "dependencies": { + "@atproto/api": "^0.18.13", + "@atproto/jwk-jose": "^0.1.11", + "@atproto/oauth-client-node": "^0.3.15", + "hono": "^4.11.3", + }, + "devDependencies": { + "@types/bun": "latest", + }, + "peerDependencies": { + "typescript": "^5", + }, + }, + }, + "packages": { + "@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==" + ], + "@atproto-labs/fetch": [ + "@atproto-labs/fetch@0.2.3", + "", + { + "dependencies": { + "@atproto-labs/pipe": "0.1.1" + } + }, + "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw==" + ], + "@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==" + ], + "@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==" + ], + "@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==" + ], + "@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==" + ], + "@atproto-labs/pipe": [ + "@atproto-labs/pipe@0.1.1", + "", + {}, + "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg==" + ], + "@atproto-labs/simple-store": [ + "@atproto-labs/simple-store@0.3.0", + "", + {}, + "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ==" + ], + "@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==" + ], + "@atproto/api": [ + "@atproto/api@0.18.13", + "", + { + "dependencies": { + "@atproto/common-web": "^0.4.11", + "@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-CULZ01pSJDltLS/Gc9MMrhFzB6OM3ezyZw7KoeLT/sBfwgA1ddA4mWdTh7DIRosPRigXtA05bnoiCutZbQDo+Q==" + ], + "@atproto/common-web": [ + "@atproto/common-web@0.4.11", + "", + { + "dependencies": { + "@atproto/lex-data": "0.0.7", + "@atproto/lex-json": "0.0.7", + "zod": "^3.23.8" + } + }, + "sha512-VHejNmSABU8/03VrQ3e36AmT5U3UIeio+qSUqCrO1oNgrJcWfGy1rpj0FVtUugWF8Un29+yzkukzWGZfXL70rQ==" + ], + "@atproto/did": [ + "@atproto/did@0.2.4", + "", + { + "dependencies": { + "zod": "^3.23.8" + } + }, + "sha512-nxNiCgXeo7pfjojq9fpfZxCO0X0xUipNVKW+AHNZwQKiUDt6zYL0VXEfm8HBUwQOCmKvj2pRRSM1Cur+tUWk3g==" + ], + "@atproto/jwk": [ + "@atproto/jwk@0.6.0", + "", + { + "dependencies": { + "multiformats": "^9.9.0", + "zod": "^3.23.8" + } + }, + "sha512-bDoJPvt7TrQVi/rBfBrSSpGykhtIriKxeYCYQTiPRKFfyRhbgpElF0wPXADjIswnbzZdOwbY63az4E/CFVT3Tw==" + ], + "@atproto/jwk-jose": [ + "@atproto/jwk-jose@0.1.11", + "", + { + "dependencies": { + "@atproto/jwk": "0.6.0", + "jose": "^5.2.0" + } + }, + "sha512-i4Fnr2sTBYmMmHXl7NJh8GrCH+tDQEVWrcDMDnV5DjJfkgT17wIqvojIw9SNbSL4Uf0OtfEv6AgG0A+mgh8b5Q==" + ], + "@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==" + ], + "@atproto/lex-data": [ + "@atproto/lex-data@0.0.7", + "", + { + "dependencies": { + "@atproto/syntax": "0.4.2", + "multiformats": "^9.9.0", + "tslib": "^2.8.1", + "uint8arrays": "3.0.0", + "unicode-segmenter": "^0.14.0" + } + }, + "sha512-W/Q5o9o7n2Sv3UywckChu01X5lwQUtaiiOkGJLnRsdkQTyC6813nPgY+p2sG7NwwM+82lu+FUV9fE/Ul3VqaJw==" + ], + "@atproto/lex-json": [ + "@atproto/lex-json@0.0.7", + "", + { + "dependencies": { + "@atproto/lex-data": "0.0.7", + "tslib": "^2.8.1" + } + }, + "sha512-bjNPD5M/MhLfjNM7tcxuls80UgXpHqxdOxDXEUouAtZQV/nIDhGjmNUvKxOmOgnDsiZRnT2g5y3onrnjH3a44g==" + ], + "@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==" + ], + "@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==" + ], + "@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==" + ], + "@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==" + ], + "@atproto/syntax": [ + "@atproto/syntax@0.4.2", + "", + {}, + "sha512-X9XSRPinBy/0VQ677j8VXlBsYSsUXaiqxWVpGGxJYsAhugdQRb0jqaVKJFtm6RskeNkV6y9xclSUi9UYG/COrA==" + ], + "@atproto/xrpc": [ + "@atproto/xrpc@0.7.7", + "", + { + "dependencies": { + "@atproto/lexicon": "^0.6.0", + "zod": "^3.23.8" + } + }, + "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA==" + ], + "@types/bun": [ + "@types/bun@1.3.5", + "", + { + "dependencies": { + "bun-types": "1.3.5" + } + }, + "sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w==" + ], + "@types/node": [ + "@types/node@25.0.6", + "", + { + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q==" + ], + "await-lock": [ + "await-lock@2.2.2", + "", + {}, + "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==" + ], + "bun-types": [ + "bun-types@1.3.5", + "", + { + "dependencies": { + "@types/node": "*" + } + }, + "sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw==" + ], + "core-js": [ + "core-js@3.47.0", + "", + {}, + "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==" + ], + "hono": [ + "hono@4.11.3", + "", + {}, + "sha512-PmQi306+M/ct/m5s66Hrg+adPnkD5jiO6IjA7WhWw0gSBSo1EcRegwuI1deZ+wd5pzCGynCcn2DprnE4/yEV4w==" + ], + "ipaddr.js": [ + "ipaddr.js@2.3.0", + "", + {}, + "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==" + ], + "iso-datestring-validator": [ + "iso-datestring-validator@2.2.2", + "", + {}, + "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==" + ], + "jose": [ + "jose@5.10.0", + "", + {}, + "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==" + ], + "lru-cache": [ + "lru-cache@10.4.3", + "", + {}, + "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + ], + "multiformats": [ + "multiformats@9.9.0", + "", + {}, + "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + ], + "tlds": [ + "tlds@1.261.0", + "", + { + "bin": { + "tlds": "bin.js" + } + }, + "sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==" + ], + "tslib": [ + "tslib@2.8.1", + "", + {}, + "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + ], + "typescript": [ + "typescript@5.9.3", + "", + { + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + } + }, + "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==" + ], + "uint8arrays": [ + "uint8arrays@3.0.0", + "", + { + "dependencies": { + "multiformats": "^9.4.2" + } + }, + "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==" + ], + "undici": [ + "undici@6.23.0", + "", + {}, + "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==" + ], + "undici-types": [ + "undici-types@7.16.0", + "", + {}, + "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==" + ], + "unicode-segmenter": [ + "unicode-segmenter@0.14.5", + "", + {}, + "sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==" + ], + "zod": [ + "zod@3.25.76", + "", + {}, + "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==" + ], + } +} diff --git a/packages/web/package.json b/packages/web/package.json new file mode 100644 index 0000000..d745561 --- /dev/null +++ b/packages/web/package.json @@ -0,0 +1,23 @@ +{ + "name": "@stdpub/web", + "module": "src/server.ts", + "type": "module", + "private": true, + "scripts": { + "dev": "bun --hot run src/server.ts", + "start": "bun run src/server.ts" + }, + "devDependencies": { + "@types/bun": "latest" + }, + "peerDependencies": { + "typescript": "^5" + }, + "dependencies": { + "@atproto/api": "^0.18.13", + "@atproto/jwk-jose": "^0.1.11", + "@atproto/oauth-client-node": "^0.3.15", + "hono": "^4.11.3", + "marked": "^15.0.0" + } +} diff --git a/public/styles.css b/packages/web/public/styles.css similarity index 100% rename from public/styles.css rename to packages/web/public/styles.css diff --git a/scripts/cleanup.ts b/packages/web/scripts/cleanup.ts similarity index 100% rename from scripts/cleanup.ts rename to packages/web/scripts/cleanup.ts diff --git a/packages/web/src/lib/content-types.ts b/packages/web/src/lib/content-types.ts new file mode 100644 index 0000000..7ff148a --- /dev/null +++ b/packages/web/src/lib/content-types.ts @@ -0,0 +1,32 @@ +export interface ContentMarkdown { + $type: "site.standard.content.markdown"; + text: string; +} + +export type DocumentContent = ContentMarkdown; + +export function createMarkdownContent(text: string): ContentMarkdown { + return { + $type: "site.standard.content.markdown", + text, + }; +} + +export function isMarkdownContent(value: unknown): value is ContentMarkdown { + return ( + typeof value === "object" && + value !== null && + "$type" in value && + (value as ContentMarkdown).$type === "site.standard.content.markdown" + ); +} + +export function getDocumentContentText(doc: Record): string | null { + if (isMarkdownContent(doc.content)) { + return doc.content.text; + } + if (typeof doc.textContent === "string") { + return doc.textContent; + } + return null; +} diff --git a/src/lib/csrf.ts b/packages/web/src/lib/csrf.ts similarity index 100% rename from src/lib/csrf.ts rename to packages/web/src/lib/csrf.ts diff --git a/src/lib/logger.ts b/packages/web/src/lib/logger.ts similarity index 100% rename from src/lib/logger.ts rename to packages/web/src/lib/logger.ts diff --git a/src/lib/oauth.ts b/packages/web/src/lib/oauth.ts similarity index 100% rename from src/lib/oauth.ts rename to packages/web/src/lib/oauth.ts diff --git a/src/lib/session.ts b/packages/web/src/lib/session.ts similarity index 100% rename from src/lib/session.ts rename to packages/web/src/lib/session.ts diff --git a/src/lib/validation.ts b/packages/web/src/lib/validation.ts similarity index 100% rename from src/lib/validation.ts rename to packages/web/src/lib/validation.ts diff --git a/src/routes/auth.ts b/packages/web/src/routes/auth.ts similarity index 100% rename from src/routes/auth.ts rename to packages/web/src/routes/auth.ts diff --git a/src/routes/documents.ts b/packages/web/src/routes/documents.ts similarity index 96% rename from src/routes/documents.ts rename to packages/web/src/routes/documents.ts index a624846..42b81f2 100644 --- a/src/routes/documents.ts +++ b/packages/web/src/routes/documents.ts @@ -4,6 +4,8 @@ import { layout } from "../views/layouts/main"; import { requireAuth, type Session } from "../lib/session"; import { csrfField } from "../lib/csrf"; import { isValidTID } from "../lib/validation"; +import { createMarkdownContent, getDocumentContentText } from "../lib/content-types"; +import { marked } from "marked"; export const documentRoutes = new Hono(); @@ -296,7 +298,10 @@ documentRoutes.post("/new", async (c) => { if (path) record.path = path.startsWith("/") ? path : `/${path}`; if (description) record.description = description; - if (content) record.textContent = content; + if (content) { + record.content = createMarkdownContent(content); + record.textContent = content; + } if (tags.length > 0) record.tags = tags; await session.agent!.com.atproto.repo.createRecord({ @@ -363,7 +368,14 @@ documentRoutes.get("/:rkey", async (c) => { : ""}
-
${doc.textContent || "(No content)"}
+ ${ + (() => { + const text = getDocumentContentText(doc); + if (!text) return html`

(No content)

`; + const htmlContent = marked.parse(text) as string; + return html`
${raw(htmlContent)}
`; + })() + }
@@ -491,7 +503,7 @@ ${doc.description || ""} -${doc.textContent || ""}
@@ -569,7 +581,10 @@ documentRoutes.post("/:rkey/edit", async (c) => { if (path) record.path = path.startsWith("/") ? path : `/${path}`; if (description) record.description = description; - if (content) record.textContent = content; + if (content) { + record.content = createMarkdownContent(content); + record.textContent = content; + } if (tags.length > 0) record.tags = tags; await session.agent!.com.atproto.repo.putRecord({ diff --git a/src/routes/publication.ts b/packages/web/src/routes/publication.ts similarity index 100% rename from src/routes/publication.ts rename to packages/web/src/routes/publication.ts diff --git a/src/server.ts b/packages/web/src/server.ts similarity index 100% rename from src/server.ts rename to packages/web/src/server.ts diff --git a/src/views/home.ts b/packages/web/src/views/home.ts similarity index 100% rename from src/views/home.ts rename to packages/web/src/views/home.ts diff --git a/src/views/layouts/main.ts b/packages/web/src/views/layouts/main.ts similarity index 100% rename from src/views/layouts/main.ts rename to packages/web/src/views/layouts/main.ts