diff --git a/bun.lock b/bun.lock index fc6c304..44682a2 100644 --- a/bun.lock +++ b/bun.lock @@ -5,15 +5,16 @@ "": { "name": "atwiki", "dependencies": { + "@atcute/atproto": "^3.1.11", "@atcute/cid": "^2.4.1", + "@atcute/client": "^4.2.1", "@atcute/identity-resolver": "^1.2.2", "@atcute/identity-resolver-node": "^1.0.3", "@atcute/jetstream": "^1.1.2", "@atcute/lexicons": "^1.3.0", + "@atcute/oauth-node-client": "^1.1.0", + "@atcute/password-session": "^0.1.0", "@atcute/tid": "^1.1.2", - "@atproto/api": "^0.13.0", - "@atproto/jwk-jose": "^0.1.0", - "@atproto/oauth-client-node": "^0.1.0", "@codemirror/lang-markdown": "^6.5.0", "@codemirror/state": "^6.0.0", "@elysiajs/static": "^1.4.7", @@ -27,6 +28,7 @@ "sharp": "^0.34.5", }, "devDependencies": { + "@atproto/api": "^0.13.0", "@atproto/dev-env": "0.3.213", "@atproto/identity": "^0.4.12", "@atproto/sync": "^0.1.40", @@ -57,8 +59,12 @@ "@atproto/did/zod": "3.23.8", }, "packages": { + "@atcute/atproto": ["@atcute/atproto@3.1.11", "", { "dependencies": { "@atcute/lexicons": "^1.2.10" } }, "sha512-yh+ASvA+iHHQij6UeHEKp2+rwvFvQR8A6/5Dk/xvqDslIikWEFx9VlprNwm/clQIPl2bLuQg+LHS8uY9o5nFTA=="], + "@atcute/cid": ["@atcute/cid@2.4.1", "", { "dependencies": { "@atcute/multibase": "^1.1.8", "@atcute/uint8array": "^1.1.1" } }, "sha512-bwhna69RCv7yetXudtj+2qrMPYvhhIQqvJz6YUpUS98v7OdF3X2dnye9Nig2NDrklZcuyOsu7sQo7GOykJXRLQ=="], + "@atcute/client": ["@atcute/client@4.2.1", "", { "dependencies": { "@atcute/identity": "^1.1.3", "@atcute/lexicons": "^1.2.6" } }, "sha512-ZBFM2pW075JtgGFu5g7HHZBecrClhlcNH8GVP9Zz1aViWR+cjjBsTpeE63rJs+FCOHFYlirUyo5L8SGZ4kMINw=="], + "@atcute/identity": ["@atcute/identity@1.1.4", "", { "dependencies": { "@atcute/lexicons": "^1.2.9", "@badrap/valita": "^0.4.6" } }, "sha512-RCw1IqflfuSYCxK5m0lZCm0UnvIzcUnuhngiBhJEJb9a9Mc2SEf1xP3H8N5r8pvEH1LoAYd6/zrvCNU+uy9esw=="], "@atcute/identity-resolver": ["@atcute/identity-resolver@1.2.2", "", { "dependencies": { "@atcute/lexicons": "^1.2.6", "@atcute/util-fetch": "^1.0.5", "@badrap/valita": "^0.4.6" }, "peerDependencies": { "@atcute/identity": "^1.0.0" } }, "sha512-eUh/UH4bFvuXS0X7epYCeJC/kj4rbBXfSRumLEH4smMVwNOgTo7cL/0Srty+P/qVPoZEyXdfEbS0PHJyzoXmHw=="], @@ -71,6 +77,16 @@ "@atcute/multibase": ["@atcute/multibase@1.2.0", "", { "dependencies": { "@atcute/uint8array": "^1.1.1" } }, "sha512-ZK2GRra+qIYq9nNuQB52m2ul0hOmCQEtPobGfTSUxm7pF0OGEkWGkWHugFhNEDVzHzTwPxHp6VGotdZFue4lYQ=="], + "@atcute/oauth-crypto": ["@atcute/oauth-crypto@0.1.0", "", { "dependencies": { "@atcute/multibase": "^1.1.7", "@atcute/uint8array": "^1.1.0", "@badrap/valita": "^0.4.6", "nanoid": "^5.1.6" } }, "sha512-qZYDCNLF/4B6AndYT1rsQelN8621AC5u/sL5PHvlr/qqAbmmUwCBGjEgRSyZtHE1AqD60VNiSMlOgAuEQTSl3w=="], + + "@atcute/oauth-keyset": ["@atcute/oauth-keyset@0.1.0", "", { "dependencies": { "@atcute/oauth-crypto": "^0.1.0" } }, "sha512-+wqT/+I5Lg9VzKnKY3g88+N45xbq+wsdT6bHDGqCVa2u57gRvolFF4dY+weMfc/OX641BIZO6/o+zFtKBsMQnQ=="], + + "@atcute/oauth-node-client": ["@atcute/oauth-node-client@1.1.0", "", { "dependencies": { "@atcute/client": "^4.2.1", "@atcute/identity": "^1.1.3", "@atcute/identity-resolver": "^1.2.2", "@atcute/lexicons": "^1.2.7", "@atcute/oauth-crypto": "^0.1.0", "@atcute/oauth-keyset": "^0.1.0", "@atcute/oauth-types": "^0.1.1", "@atcute/util-fetch": "^1.0.5", "@badrap/valita": "^0.4.6", "nanoid": "^5.1.6" } }, "sha512-xCp/VfjtvTeKscKR/oI2hdMTp1/DaF/7ll8b6yZOCgbKlVDDfhCn5mmKNVARGTNaoywxrXG3XffbWCIx3/E87w=="], + + "@atcute/oauth-types": ["@atcute/oauth-types@0.1.1", "", { "dependencies": { "@atcute/identity": "^1.1.3", "@atcute/lexicons": "^1.2.7", "@atcute/oauth-keyset": "^0.1.0", "@badrap/valita": "^0.4.6" } }, "sha512-u+3KMjse3Uc/9hDyilu1QVN7IpcnjVXgRzhddzBB8Uh6wePHNVBDdi9wQvFTVVA3zmxtMJVptXRyLLg6Ou9bqg=="], + + "@atcute/password-session": ["@atcute/password-session@0.1.0", "", { "dependencies": { "@atcute/client": "^4.2.1", "@atcute/identity": "^1.1.3", "@atcute/lexicons": "^1.2.9" } }, "sha512-r4iUNT7aQ1J6XXGO+pu39037hFQd0GYEhOuw/aykoNI3HHFLX2t5YyrxWTu5uKMGECk3s7zEgc8B8ol9JsMjRA=="], + "@atcute/tid": ["@atcute/tid@1.1.2", "", { "dependencies": { "@atcute/time-ms": "^1.2.2" } }, "sha512-bmPuOX/TOfcm/vsK9vM98spjkcx2wgd9S2PeK5oLgEr8IbNRPq7iMCAPzOL1nu5XAW3LlkOYQEbYRcw5vcQ37w=="], "@atcute/time-ms": ["@atcute/time-ms@1.3.2", "", {}, "sha512-F+qOyR9pO55g1d/QmN+Gr+fimoUQQLusdGSB6pjV0wW5KPILR4oQ4e2ZhWzqUbeHLAgWvgoTTMsMDdz62Xa2tg=="], @@ -81,21 +97,15 @@ "@atcute/util-text": ["@atcute/util-text@1.3.1", "", { "dependencies": { "unicode-segmenter": "^0.14.5" } }, "sha512-MRgJXkx67znuBXuoAYCJkBZyd3OApL7zZlNf5kXhuoCXcdiu1nblRDycYTADSkym4epBSQWxh26kmI9sewaq6A=="], - "@atproto-labs/did-resolver": ["@atproto-labs/did-resolver@0.1.4", "", { "dependencies": { "@atproto-labs/fetch": "0.1.1", "@atproto-labs/pipe": "0.1.0", "@atproto-labs/simple-store": "0.1.1", "@atproto-labs/simple-store-memory": "0.1.1", "@atproto/did": "0.1.2", "zod": "^3.23.8" } }, "sha512-5d+LHScS2ueYsFRjMOC3c1EwM2ui1yBVbBA0yY3MH7aydbljm5D28scsOVuymIhHwPFwcGvZbMON4PVSfpBbbQ=="], + "@atproto-labs/did-resolver": ["@atproto-labs/did-resolver@0.2.6", "", { "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.3.0", "zod": "^3.23.8" } }, "sha512-2K1bC04nI2fmgNcvof+yA28IhGlpWn2JKYlPa7To9JTKI45FINCGkQSGiL2nyXlyzDJJ34fZ1aq6/IRFIOIiqg=="], - "@atproto-labs/fetch": ["@atproto-labs/fetch@0.1.1", "", { "dependencies": { "@atproto-labs/pipe": "0.1.0" }, "optionalDependencies": { "zod": "^3.23.8" } }, "sha512-X1zO1MDoJzEurbWXMAe1H8EZ995Xam/aXdxhGVrXmOMyPDuvBa1oxwh/kQNZRCKcMQUbiwkk+Jfq6ZkTuvGbww=="], + "@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.1.3", "", { "dependencies": { "@atproto-labs/simple-store": "0.1.1", "@atproto-labs/simple-store-memory": "0.1.1", "@atproto/did": "0.1.2", "zod": "^3.23.8" } }, "sha512-pUn8uqQNqMpecQjO0UWmdKhKX1NnXdLBXHRgID2g4kmhpz3hkbbec+h34uSk6wLfZnwPFaVQnGdEkyMq/tNToQ=="], - - "@atproto-labs/handle-resolver-node": ["@atproto-labs/handle-resolver-node@0.1.6", "", { "dependencies": { "@atproto-labs/fetch-node": "0.1.3", "@atproto-labs/handle-resolver": "0.1.3", "@atproto/did": "0.1.2" } }, "sha512-fJfPtqvo+EQ9ZNjdicQB4nuo+l8a7KvUlzW+tpTFkMQsdB017Dl0qHD7rv9SFlXMrswX5A3Dpwi/UDfGTtiltA=="], + "@atproto-labs/pipe": ["@atproto-labs/pipe@0.1.1", "", {}, "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg=="], - "@atproto-labs/identity-resolver": ["@atproto-labs/identity-resolver@0.1.4", "", { "dependencies": { "@atproto-labs/did-resolver": "0.1.4", "@atproto-labs/handle-resolver": "0.1.3", "@atproto/syntax": "0.3.0" } }, "sha512-uaRJsYFCRZQcw0c7S+RuziSVm5qHcK3N6uqsXz8NzYoJAE55Ah4DkQMj0rfapZmb0jyBau04RC/WoI4PSim+Aw=="], - - "@atproto-labs/pipe": ["@atproto-labs/pipe@0.1.0", "", {}, "sha512-ghOqHFyJlQVFPESzlVHjKroP0tPzbmG5Jms0dNI9yLDEfL8xp4OFPWLX4f6T8mRq69wWs4nIDM3sSsFbFqLa1w=="], - - "@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.1.1", "", {}, "sha512-WKILW2b3QbAYKh+w5U2x6p5FqqLl0nAeLwGeDY+KjX01K4Dq3vQTR9b/qNp0jZm48CabPQVrqCv0PPU9LgRRRg=="], + "@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=="], @@ -113,13 +123,13 @@ "@atproto/common": ["@atproto/common@0.5.14", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/lex-cbor": "^0.0.14", "@atproto/lex-data": "^0.0.13", "multiformats": "^9.9.0", "pino": "^8.21.0" } }, "sha512-FnhTppvJw8I1AuvEkL9JREFwmM6ciYfSlQ0Zo6neiJIhTf1wf5/ONeFSYKu1/dxC63JEratGIAfVjSBJJZi7sg=="], - "@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], + "@atproto/common-web": ["@atproto/common-web@0.4.17", "", { "dependencies": { "@atproto/lex-data": "^0.0.12", "@atproto/lex-json": "^0.0.12", "@atproto/syntax": "^0.4.3", "zod": "^3.23.8" } }, "sha512-sfxD8NGxyoxhxmM9EUshEFbWcJ3+JHEOZF4Quk6HsCh1UxpHBmLabT/vEsAkDWl+C/8U0ine0+c/gHyE/OZiQQ=="], "@atproto/crypto": ["@atproto/crypto@0.4.5", "", { "dependencies": { "@noble/curves": "^1.7.0", "@noble/hashes": "^1.6.1", "uint8arrays": "3.0.0" } }, "sha512-n40aKkMoCatP0u9Yvhrdk6fXyOHFDDbkdm4h4HCyWW+KlKl8iXfD5iV+ECq+w5BM+QH25aIpt3/j6EUNerhLxw=="], "@atproto/dev-env": ["@atproto/dev-env@0.3.213", "", { "dependencies": { "@atproto/api": "^0.19.2", "@atproto/bsky": "^0.0.219", "@atproto/bsync": "^0.0.24", "@atproto/common-web": "^0.4.18", "@atproto/crypto": "^0.4.5", "@atproto/identity": "^0.4.12", "@atproto/lexicon": "^0.6.2", "@atproto/ozone": "^0.1.166", "@atproto/pds": "^0.4.214", "@atproto/sync": "^0.1.40", "@atproto/syntax": "^0.5.0", "@atproto/xrpc-server": "^0.10.15", "@did-plc/lib": "^0.0.1", "@did-plc/server": "^0.0.1", "dotenv": "^16.0.3", "express": "^4.18.2", "get-port": "^5.1.1", "multiformats": "^9.9.0", "uint8arrays": "3.0.0", "undici": "^6.14.1" }, "bin": { "dev-env": "dist/bin.js" } }, "sha512-Bjhv+zzcQxhwV4I7si+yDls8sSetksILeiBemfRe3cvE4GOgs7KfsYI5+pqNmBZ5rrFPt3KUeN9vIo31LCgZOw=="], - "@atproto/did": ["@atproto/did@0.1.2", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-gmY1SyAuqfmsFbIXkUIScfnULqn39FoUNz4oE0fUuMu9in6PEyoxlmD2lAo7Q3KMy3X/hvTn2u5f8W/2KuDg1w=="], + "@atproto/did": ["@atproto/did@0.3.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA=="], "@atproto/identity": ["@atproto/identity@0.4.12", "", { "dependencies": { "@atproto/common-web": "^0.4.17", "@atproto/crypto": "^0.4.5" } }, "sha512-P+Jn0HvKhIh1tps5n3xGrCxt+XiFWzp4kdgloyFhFmVLwjDU547DQkWx4r5Vhuiah7fRZGVSlk39R4U6SPrACg=="], @@ -127,27 +137,21 @@ "@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.1.2", "", { "dependencies": { "@atproto/jwk": "0.1.1", "@atproto/jwk-jose": "0.1.2" } }, "sha512-vTBUbUZXh0GI+6KJiPGukmI4BQEHFAij8fJJ4WnReF/hefAs3ISZtrWZHGBebz+q2EcExYlnhhlmxvDzV7veGw=="], - "@atproto/lex-cbor": ["@atproto/lex-cbor@0.0.14", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-zeqxaKAifR8qlFKg4A6t1RCT8TcjeDnIXLtp3QnDu0QoxslxsmcsrqNrrgmka8w+bYW2+h/rT9MPWglkT7vHyw=="], "@atproto/lex-client": ["@atproto/lex-client@0.0.15", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/lex-schema": "^0.0.14", "tslib": "^2.8.1" } }, "sha512-j/eZGCdkhABU8Z868Y/gn909hS77rOCdMqtOaQdflEaKUKiAo2/gqeTpoAjHBnL5Rzz255wj9qZMqZTR/Ygwxw=="], - "@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], + "@atproto/lex-data": ["@atproto/lex-data@0.0.12", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-aekJudcK1p6sbTqUv2bJMJBAGZaOJS0mgDclpK3U6VuBREK/au4B6ffunBFWgrDfg0Vwj2JGyEA7E51WZkJcRw=="], "@atproto/lex-document": ["@atproto/lex-document@0.0.15", "", { "dependencies": { "@atproto/lex-schema": "^0.0.14", "core-js": "^3", "tslib": "^2.8.1" } }, "sha512-QT2MbICG4cTFrrA19SIHpZJ33WRLdzjhDsEhSknQ4dE5CjqPf4BP9LaC4pOeW8NE5Kn92hgIm3JWNjoak8blXw=="], - "@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], + "@atproto/lex-json": ["@atproto/lex-json@0.0.12", "", { "dependencies": { "@atproto/lex-data": "^0.0.12", "tslib": "^2.8.1" } }, "sha512-XlEpnWWZdDJ5BIgG25GyH+6iBfyrFL18BI5JSE6rUfMObbFMrQRaCuRLQfryRXNysVz3L3U+Qb9y8KcXbE8AcA=="], "@atproto/lex-resolver": ["@atproto/lex-resolver@0.0.17", "", { "dependencies": { "@atproto-labs/did-resolver": "^0.2.6", "@atproto/crypto": "^0.4.5", "@atproto/lex-client": "^0.0.15", "@atproto/lex-data": "^0.0.13", "@atproto/lex-document": "^0.0.15", "@atproto/lex-schema": "^0.0.14", "@atproto/repo": "^0.8.12", "@atproto/syntax": "^0.5.0", "tslib": "^2.8.1" } }, "sha512-6nI5bYZUYh50ZI8r4erLRP9EbNcW226VShpVN3vHyOSgTje4VP1RTcvBhROBAPj4rL3vc+Oa8OiL6IQXkYrQBg=="], "@atproto/lex-schema": ["@atproto/lex-schema@0.0.14", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/syntax": "^0.5.0", "tslib": "^2.8.1" } }, "sha512-xUxFuXdgVVI1IBDXcQlanH7HuEo9Pk65DYifnhqFDzNRH9SZQxPvPO+rOxMG/bRHygPaI+A+UbXr+S7qpPYOLg=="], - "@atproto/lexicon": ["@atproto/lexicon@0.6.2", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/syntax": "^0.5.0", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-p3Ly6hinVZW0ETuAXZMeUGwuMm3g8HvQMQ41yyEE6AL0hAkfeKFaZKos6BdBrr6CjkpbrDZqE8M+5+QOceysMw=="], - - "@atproto/oauth-client": ["@atproto/oauth-client@0.2.2", "", { "dependencies": { "@atproto-labs/did-resolver": "0.1.4", "@atproto-labs/fetch": "0.1.1", "@atproto-labs/handle-resolver": "0.1.3", "@atproto-labs/identity-resolver": "0.1.4", "@atproto-labs/simple-store": "0.1.1", "@atproto-labs/simple-store-memory": "0.1.1", "@atproto/did": "0.1.2", "@atproto/jwk": "0.1.1", "@atproto/oauth-types": "0.1.5", "@atproto/xrpc": "0.6.3", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-hYL7Hx2h52zeC1WZeFjV9FFfqt8PZnURKofz0VJVeiPqB9wySJ46MgFVxsZ3t08c03WSDugujEz2JlhtQpS7Zg=="], - - "@atproto/oauth-client-node": ["@atproto/oauth-client-node@0.1.4", "", { "dependencies": { "@atproto-labs/did-resolver": "0.1.4", "@atproto-labs/handle-resolver-node": "0.1.6", "@atproto-labs/simple-store": "0.1.1", "@atproto/did": "0.1.2", "@atproto/jwk": "0.1.1", "@atproto/jwk-jose": "0.1.2", "@atproto/jwk-webcrypto": "0.1.2", "@atproto/oauth-client": "0.2.2", "@atproto/oauth-types": "0.1.5" } }, "sha512-LKLBrvJL6gd6YqbeZsm9BZ1gqrMDKtz/77TNNjPBP+RBIV6e6Oj5uJmFMshzyJj87Rwd7Menb0niz6LhlKv/rg=="], + "@atproto/lexicon": ["@atproto/lexicon@0.4.14", "", { "dependencies": { "@atproto/common-web": "^0.4.2", "@atproto/syntax": "^0.4.0", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-jiKpmH1QER3Gvc7JVY5brwrfo+etFoe57tKPQX/SmPwjvUsFnJAow5xLIryuBaJgFAhnTZViXKs41t//pahGHQ=="], "@atproto/oauth-provider": ["@atproto/oauth-provider@0.15.12", "", { "dependencies": { "@atproto-labs/fetch": "^0.2.3", "@atproto-labs/fetch-node": "^0.2.0", "@atproto-labs/pipe": "^0.1.1", "@atproto-labs/simple-store": "^0.3.0", "@atproto-labs/simple-store-memory": "^0.1.4", "@atproto/common": "^0.5.14", "@atproto/did": "^0.3.0", "@atproto/jwk": "^0.6.0", "@atproto/jwk-jose": "^0.1.11", "@atproto/lex-document": "^0.0.15", "@atproto/lex-resolver": "^0.0.17", "@atproto/oauth-provider-api": "0.3.7", "@atproto/oauth-provider-frontend": "0.2.9", "@atproto/oauth-provider-ui": "0.4.3", "@atproto/oauth-scopes": "^0.3.2", "@atproto/oauth-types": "^0.6.3", "@atproto/syntax": "^0.5.0", "@hapi/accept": "^6.0.3", "@hapi/address": "^5.1.1", "@hapi/bourne": "^3.0.0", "@hapi/content": "^6.0.0", "cookie": "^0.7.0", "disposable-email-domains-js": "^1.5.0", "forwarded": "^0.2.0", "http-errors": "^2.0.0", "ioredis": "^5.3.2", "jose": "^5.2.0", "zod": "^3.23.8" } }, "sha512-Ri4aVx2I4lOKxViB92jwPhAs/NctWEwV0tgYSHcaRpvqr2SVlC2LxTVjUq14ohdbVfv4VFRzj0vZypEX+mclHg=="], @@ -159,7 +163,7 @@ "@atproto/oauth-scopes": ["@atproto/oauth-scopes@0.3.2", "", { "dependencies": { "@atproto/did": "^0.3.0", "@atproto/syntax": "^0.5.0" } }, "sha512-88awgvB9asSR86KjEXL31N9nFd1XG+QtbzEJFw5/wwEv41tS4S8c4Prqb/MAzVuFQ4OHOndYo1VDD99vGMpqTA=="], - "@atproto/oauth-types": ["@atproto/oauth-types@0.1.5", "", { "dependencies": { "@atproto/jwk": "0.1.1", "zod": "^3.23.8" } }, "sha512-vNab/6BYUQCfmfhGc3G61EcatQxvh2d41FDWqR8CAYsblNXO6nOEVXn7cXdQUkb3K49LU0vy5Jf1+wFNcpY3IQ=="], + "@atproto/oauth-types": ["@atproto/oauth-types@0.6.3", "", { "dependencies": { "@atproto/did": "^0.3.0", "@atproto/jwk": "^0.6.0", "zod": "^3.23.8" } }, "sha512-jdKuoPknJuh/WjI+mYk7agSbx9mNVMbS6Dr3k1z2YMY2oRiCQjxYBuo4MLKATbxj05nMQaZRWlHRUazoAu5Cng=="], "@atproto/ozone": ["@atproto/ozone@0.1.166", "", { "dependencies": { "@atproto/api": "^0.19.2", "@atproto/common": "^0.5.14", "@atproto/crypto": "^0.4.5", "@atproto/identity": "^0.4.12", "@atproto/lexicon": "^0.6.2", "@atproto/syntax": "^0.5.0", "@atproto/ws-client": "^0.0.4", "@atproto/xrpc": "^0.7.7", "@atproto/xrpc-server": "^0.10.15", "@did-plc/lib": "^0.0.1", "compression": "^1.7.4", "cors": "^2.8.5", "express": "^4.17.2", "http-terminator": "^3.2.0", "kysely": "^0.22.0", "lande": "^1.0.10", "multiformats": "^9.9.0", "p-queue": "^6.6.2", "pg": "^8.10.0", "pino-http": "^8.2.1", "structured-headers": "^1.0.1", "typed-emitter": "^2.1.0", "uint8arrays": "3.0.0", "undici": "^6.14.1", "ws": "^8.12.0" } }, "sha512-XZ77P/V/tt3SqTQYRsi5nM3P2h+QaNT7Nz3GTf+TMLVolACufRHPoDgp/PoTuS2FaLj1ndHnGyIPvZi/o8he6g=="], @@ -169,7 +173,7 @@ "@atproto/sync": ["@atproto/sync@0.1.40", "", { "dependencies": { "@atproto/common": "^0.5.14", "@atproto/identity": "^0.4.12", "@atproto/lexicon": "^0.6.2", "@atproto/repo": "^0.8.12", "@atproto/syntax": "^0.5.0", "@atproto/xrpc-server": "^0.10.15", "multiformats": "^9.9.0", "p-queue": "^6.6.2", "ws": "^8.12.0" } }, "sha512-tnzFPqKBXPXpuGvx87sjqLHgEzIOT/QfQZUp0YOUHtpipBgvijEnNXV9XeTIgiUAv69wyRR+6YjJkLCYfHpVwQ=="], - "@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], + "@atproto/syntax": ["@atproto/syntax@0.3.4", "", {}, "sha512-8CNmi5DipOLaVeSMPggMe7FCksVag0aO6XZy9WflbduTKM4dFZVCs4686UeMLfGRXX+X966XgwECHoLYrovMMg=="], "@atproto/ws-client": ["@atproto/ws-client@0.0.4", "", { "dependencies": { "@atproto/common": "^0.5.3", "ws": "^8.12.0" } }, "sha512-dox1XIymuC7/ZRhUqKezIGgooZS45C6vHCfu0PnWjfvsLCK2kAlnvX4IBkA/WpcoijDhQ9ejChnFbo/sLmgvAg=="], @@ -1237,6 +1241,8 @@ "murmurhash": ["murmurhash@2.0.1", "", {}, "sha512-5vQEh3y+DG/lMPM0mCGPDnyV8chYg/g7rl6v3Gd8WMF9S429ox3Xk8qrk174kWhG767KQMqqxLD1WnGd77hiew=="], + "nanoid": ["nanoid@5.1.9", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-ZUvP7KeBLe3OZ1ypw6dI/TzYJuvHP77IM4Ry73waSQTLn8/g8rpdjfyVAh7t1/+FjBtG4lCP42MEbDxOsRpBMw=="], + "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], "negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], @@ -1345,12 +1351,8 @@ "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], - "psl": ["psl@1.15.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w=="], - "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], - "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], "qs": ["qs@6.14.2", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q=="], @@ -1551,110 +1553,78 @@ "yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], - "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], - - "@atproto-labs/did-resolver/@atproto-labs/simple-store-memory": ["@atproto-labs/simple-store-memory@0.1.1", "", { "dependencies": { "@atproto-labs/simple-store": "0.1.1", "lru-cache": "^10.2.0" } }, "sha512-PCRqhnZ8NBNBvLku53O56T0lsVOtclfIrQU/rwLCc4+p45/SBPrRYNBi6YFq5rxZbK6Njos9MCmILV/KLQxrWA=="], - - "@atproto-labs/did-resolver/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], - - "@atproto-labs/fetch/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], - - "@atproto-labs/fetch-node/@atproto-labs/fetch": ["@atproto-labs/fetch@0.2.3", "", { "dependencies": { "@atproto-labs/pipe": "0.1.1" } }, "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw=="], - - "@atproto-labs/fetch-node/@atproto-labs/pipe": ["@atproto-labs/pipe@0.1.1", "", {}, "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg=="], - - "@atproto-labs/handle-resolver/@atproto-labs/simple-store-memory": ["@atproto-labs/simple-store-memory@0.1.1", "", { "dependencies": { "@atproto-labs/simple-store": "0.1.1", "lru-cache": "^10.2.0" } }, "sha512-PCRqhnZ8NBNBvLku53O56T0lsVOtclfIrQU/rwLCc4+p45/SBPrRYNBi6YFq5rxZbK6Njos9MCmILV/KLQxrWA=="], - - "@atproto-labs/handle-resolver/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], - - "@atproto-labs/handle-resolver-node/@atproto-labs/fetch-node": ["@atproto-labs/fetch-node@0.1.3", "", { "dependencies": { "@atproto-labs/fetch": "0.1.1", "@atproto-labs/pipe": "0.1.0", "ipaddr.js": "^2.1.0", "psl": "^1.9.0", "undici": "^6.14.1" } }, "sha512-KX3ogPJt6dXNppWImQ9omfhrc8t73WrJaxHMphRAqQL8jXxKW5NBCTjSuwroBkJ1pj1aValBrc5NpdYu+H/9Qg=="], - - "@atproto-labs/identity-resolver/@atproto/syntax": ["@atproto/syntax@0.3.0", "", {}, "sha512-Weq0ZBxffGHDXHl9U7BQc2BFJi/e23AL+k+i5+D9hUq/bzT4yjGsrCejkjq0xt82xXDjmhhvQSZ0LqxyZ5woxA=="], - - "@atproto-labs/simple-store-memory/@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.3.0", "", {}, "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ=="], - - "@atproto-labs/simple-store-redis/@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.3.0", "", {}, "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ=="], + "zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], "@atproto-labs/xrpc-utils/@atproto/xrpc": ["@atproto/xrpc@0.7.7", "", { "dependencies": { "@atproto/lexicon": "^0.6.0", "zod": "^3.23.8" } }, "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA=="], - "@atproto/api/@atproto/common-web": ["@atproto/common-web@0.4.17", "", { "dependencies": { "@atproto/lex-data": "^0.0.12", "@atproto/lex-json": "^0.0.12", "@atproto/syntax": "^0.4.3", "zod": "^3.23.8" } }, "sha512-sfxD8NGxyoxhxmM9EUshEFbWcJ3+JHEOZF4Quk6HsCh1UxpHBmLabT/vEsAkDWl+C/8U0ine0+c/gHyE/OZiQQ=="], - - "@atproto/api/@atproto/lexicon": ["@atproto/lexicon@0.4.14", "", { "dependencies": { "@atproto/common-web": "^0.4.2", "@atproto/syntax": "^0.4.0", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-jiKpmH1QER3Gvc7JVY5brwrfo+etFoe57tKPQX/SmPwjvUsFnJAow5xLIryuBaJgFAhnTZViXKs41t//pahGHQ=="], - - "@atproto/api/@atproto/syntax": ["@atproto/syntax@0.3.4", "", {}, "sha512-8CNmi5DipOLaVeSMPggMe7FCksVag0aO6XZy9WflbduTKM4dFZVCs4686UeMLfGRXX+X966XgwECHoLYrovMMg=="], - - "@atproto/api/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/aws/@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], "@atproto/bsky/@atproto/api": ["@atproto/api@0.19.3", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/lexicon": "^0.6.2", "@atproto/syntax": "^0.5.0", "@atproto/xrpc": "^0.7.7", "await-lock": "^2.2.2", "multiformats": "^9.9.0", "tlds": "^1.234.0", "zod": "^3.23.8" } }, "sha512-G8YpBpRouHdTAIagi/QQIUZOhGd1jfBQWkJy9QfxAzjjEpPvaVOSk4e1S85QzGLm/xbzVONzGkmdtiOSfP6wVg=="], - "@atproto/bsky/@atproto/did": ["@atproto/did@0.3.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA=="], - - "@atproto/bsky/sharp": ["sharp@0.33.5", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", "semver": "^7.6.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.33.5", "@img/sharp-darwin-x64": "0.33.5", "@img/sharp-libvips-darwin-arm64": "1.0.4", "@img/sharp-libvips-darwin-x64": "1.0.4", "@img/sharp-libvips-linux-arm": "1.0.5", "@img/sharp-libvips-linux-arm64": "1.0.4", "@img/sharp-libvips-linux-s390x": "1.0.4", "@img/sharp-libvips-linux-x64": "1.0.4", "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", "@img/sharp-libvips-linuxmusl-x64": "1.0.4", "@img/sharp-linux-arm": "0.33.5", "@img/sharp-linux-arm64": "0.33.5", "@img/sharp-linux-s390x": "0.33.5", "@img/sharp-linux-x64": "0.33.5", "@img/sharp-linuxmusl-arm64": "0.33.5", "@img/sharp-linuxmusl-x64": "0.33.5", "@img/sharp-wasm32": "0.33.5", "@img/sharp-win32-ia32": "0.33.5", "@img/sharp-win32-x64": "0.33.5" } }, "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw=="], + "@atproto/bsky/@atproto/lexicon": ["@atproto/lexicon@0.6.2", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/syntax": "^0.5.0", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-p3Ly6hinVZW0ETuAXZMeUGwuMm3g8HvQMQ41yyEE6AL0hAkfeKFaZKos6BdBrr6CjkpbrDZqE8M+5+QOceysMw=="], - "@atproto/bsky/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/bsky/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], - "@atproto/common-web/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], - - "@atproto/dev-env/@atproto/api": ["@atproto/api@0.19.3", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/lexicon": "^0.6.2", "@atproto/syntax": "^0.5.0", "@atproto/xrpc": "^0.7.7", "await-lock": "^2.2.2", "multiformats": "^9.9.0", "tlds": "^1.234.0", "zod": "^3.23.8" } }, "sha512-G8YpBpRouHdTAIagi/QQIUZOhGd1jfBQWkJy9QfxAzjjEpPvaVOSk4e1S85QzGLm/xbzVONzGkmdtiOSfP6wVg=="], - - "@atproto/did/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/bsky/sharp": ["sharp@0.33.5", "", { "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", "semver": "^7.6.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.33.5", "@img/sharp-darwin-x64": "0.33.5", "@img/sharp-libvips-darwin-arm64": "1.0.4", "@img/sharp-libvips-darwin-x64": "1.0.4", "@img/sharp-libvips-linux-arm": "1.0.5", "@img/sharp-libvips-linux-arm64": "1.0.4", "@img/sharp-libvips-linux-s390x": "1.0.4", "@img/sharp-libvips-linux-x64": "1.0.4", "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", "@img/sharp-libvips-linuxmusl-x64": "1.0.4", "@img/sharp-linux-arm": "0.33.5", "@img/sharp-linux-arm64": "0.33.5", "@img/sharp-linux-s390x": "0.33.5", "@img/sharp-linux-x64": "0.33.5", "@img/sharp-linuxmusl-arm64": "0.33.5", "@img/sharp-linuxmusl-x64": "0.33.5", "@img/sharp-wasm32": "0.33.5", "@img/sharp-win32-ia32": "0.33.5", "@img/sharp-win32-x64": "0.33.5" } }, "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw=="], - "@atproto/identity/@atproto/common-web": ["@atproto/common-web@0.4.17", "", { "dependencies": { "@atproto/lex-data": "^0.0.12", "@atproto/lex-json": "^0.0.12", "@atproto/syntax": "^0.4.3", "zod": "^3.23.8" } }, "sha512-sfxD8NGxyoxhxmM9EUshEFbWcJ3+JHEOZF4Quk6HsCh1UxpHBmLabT/vEsAkDWl+C/8U0ine0+c/gHyE/OZiQQ=="], + "@atproto/bsync/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], - "@atproto/jwk/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/common/@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], - "@atproto/jwk-webcrypto/@atproto/jwk": ["@atproto/jwk@0.1.1", "", { "dependencies": { "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-6h/bj1APUk7QcV9t/oA6+9DB5NZx9SZru9x+/pV5oHFI9Xz4ZuM5+dq1PfsJV54pZyqdnZ6W6M717cxoC7q7og=="], + "@atproto/common/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], - "@atproto/jwk-webcrypto/@atproto/jwk-jose": ["@atproto/jwk-jose@0.1.2", "", { "dependencies": { "@atproto/jwk": "0.1.1", "jose": "^5.2.0" } }, "sha512-lDwc/6lLn2aZ/JpyyggyjLFsJPMntrVzryyGUx5aNpuTS8SIuc4Ky0REhxqfLopQXJJZCuRRjagHG3uP05/moQ=="], + "@atproto/common-web/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], - "@atproto/lex-resolver/@atproto-labs/did-resolver": ["@atproto-labs/did-resolver@0.2.6", "", { "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.3.0", "zod": "^3.23.8" } }, "sha512-2K1bC04nI2fmgNcvof+yA28IhGlpWn2JKYlPa7To9JTKI45FINCGkQSGiL2nyXlyzDJJ34fZ1aq6/IRFIOIiqg=="], + "@atproto/dev-env/@atproto/api": ["@atproto/api@0.19.3", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/lexicon": "^0.6.2", "@atproto/syntax": "^0.5.0", "@atproto/xrpc": "^0.7.7", "await-lock": "^2.2.2", "multiformats": "^9.9.0", "tlds": "^1.234.0", "zod": "^3.23.8" } }, "sha512-G8YpBpRouHdTAIagi/QQIUZOhGd1jfBQWkJy9QfxAzjjEpPvaVOSk4e1S85QzGLm/xbzVONzGkmdtiOSfP6wVg=="], - "@atproto/lexicon/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/dev-env/@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], - "@atproto/oauth-client/@atproto-labs/simple-store-memory": ["@atproto-labs/simple-store-memory@0.1.1", "", { "dependencies": { "@atproto-labs/simple-store": "0.1.1", "lru-cache": "^10.2.0" } }, "sha512-PCRqhnZ8NBNBvLku53O56T0lsVOtclfIrQU/rwLCc4+p45/SBPrRYNBi6YFq5rxZbK6Njos9MCmILV/KLQxrWA=="], + "@atproto/dev-env/@atproto/lexicon": ["@atproto/lexicon@0.6.2", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/syntax": "^0.5.0", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-p3Ly6hinVZW0ETuAXZMeUGwuMm3g8HvQMQ41yyEE6AL0hAkfeKFaZKos6BdBrr6CjkpbrDZqE8M+5+QOceysMw=="], - "@atproto/oauth-client/@atproto/jwk": ["@atproto/jwk@0.1.1", "", { "dependencies": { "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-6h/bj1APUk7QcV9t/oA6+9DB5NZx9SZru9x+/pV5oHFI9Xz4ZuM5+dq1PfsJV54pZyqdnZ6W6M717cxoC7q7og=="], + "@atproto/dev-env/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], - "@atproto/oauth-client/@atproto/xrpc": ["@atproto/xrpc@0.6.3", "", { "dependencies": { "@atproto/lexicon": "^0.4.2", "zod": "^3.23.8" } }, "sha512-S3tRvOdA9amPkKLll3rc4vphlDitLrkN5TwWh5Tu/jzk7mnobVVE3akYgICV9XCNHKjWM+IAPxFFI2qi+VW6nQ=="], + "@atproto/lex-cbor/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], - "@atproto/oauth-client/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/lex-client/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], - "@atproto/oauth-client-node/@atproto/jwk": ["@atproto/jwk@0.1.1", "", { "dependencies": { "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-6h/bj1APUk7QcV9t/oA6+9DB5NZx9SZru9x+/pV5oHFI9Xz4ZuM5+dq1PfsJV54pZyqdnZ6W6M717cxoC7q7og=="], + "@atproto/lex-client/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], - "@atproto/oauth-client-node/@atproto/jwk-jose": ["@atproto/jwk-jose@0.1.2", "", { "dependencies": { "@atproto/jwk": "0.1.1", "jose": "^5.2.0" } }, "sha512-lDwc/6lLn2aZ/JpyyggyjLFsJPMntrVzryyGUx5aNpuTS8SIuc4Ky0REhxqfLopQXJJZCuRRjagHG3uP05/moQ=="], + "@atproto/lex-resolver/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], - "@atproto/oauth-provider/@atproto-labs/fetch": ["@atproto-labs/fetch@0.2.3", "", { "dependencies": { "@atproto-labs/pipe": "0.1.1" } }, "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw=="], + "@atproto/lex-resolver/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], - "@atproto/oauth-provider/@atproto-labs/pipe": ["@atproto-labs/pipe@0.1.1", "", {}, "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg=="], + "@atproto/lex-schema/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], - "@atproto/oauth-provider/@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.3.0", "", {}, "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ=="], + "@atproto/lex-schema/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], - "@atproto/oauth-provider/@atproto/did": ["@atproto/did@0.3.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA=="], + "@atproto/lexicon/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], - "@atproto/oauth-provider/@atproto/oauth-types": ["@atproto/oauth-types@0.6.3", "", { "dependencies": { "@atproto/did": "^0.3.0", "@atproto/jwk": "^0.6.0", "zod": "^3.23.8" } }, "sha512-jdKuoPknJuh/WjI+mYk7agSbx9mNVMbS6Dr3k1z2YMY2oRiCQjxYBuo4MLKATbxj05nMQaZRWlHRUazoAu5Cng=="], + "@atproto/oauth-provider/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], "@atproto/oauth-provider/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - "@atproto/oauth-provider/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], - "@atproto/oauth-provider-api/@atproto/oauth-types": ["@atproto/oauth-types@0.6.2", "", { "dependencies": { "@atproto/did": "0.3.0", "@atproto/jwk": "0.6.0", "zod": "^3.23.8" } }, "sha512-2cuboM4RQBCYR8NQC5uGRkW6KgCgKyq/B5/+tnMmWZYtZGVUQvsUWQHK/ZiMCnVXbcDNtc/RIEJQJDZ8FXMoxg=="], - "@atproto/oauth-scopes/@atproto/did": ["@atproto/did@0.3.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA=="], + "@atproto/oauth-scopes/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], - "@atproto/oauth-types/@atproto/jwk": ["@atproto/jwk@0.1.1", "", { "dependencies": { "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-6h/bj1APUk7QcV9t/oA6+9DB5NZx9SZru9x+/pV5oHFI9Xz4ZuM5+dq1PfsJV54pZyqdnZ6W6M717cxoC7q7og=="], + "@atproto/ozone/@atproto/api": ["@atproto/api@0.19.3", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/lexicon": "^0.6.2", "@atproto/syntax": "^0.5.0", "@atproto/xrpc": "^0.7.7", "await-lock": "^2.2.2", "multiformats": "^9.9.0", "tlds": "^1.234.0", "zod": "^3.23.8" } }, "sha512-G8YpBpRouHdTAIagi/QQIUZOhGd1jfBQWkJy9QfxAzjjEpPvaVOSk4e1S85QzGLm/xbzVONzGkmdtiOSfP6wVg=="], - "@atproto/oauth-types/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/ozone/@atproto/lexicon": ["@atproto/lexicon@0.6.2", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/syntax": "^0.5.0", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-p3Ly6hinVZW0ETuAXZMeUGwuMm3g8HvQMQ41yyEE6AL0hAkfeKFaZKos6BdBrr6CjkpbrDZqE8M+5+QOceysMw=="], - "@atproto/ozone/@atproto/api": ["@atproto/api@0.19.3", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/lexicon": "^0.6.2", "@atproto/syntax": "^0.5.0", "@atproto/xrpc": "^0.7.7", "await-lock": "^2.2.2", "multiformats": "^9.9.0", "tlds": "^1.234.0", "zod": "^3.23.8" } }, "sha512-G8YpBpRouHdTAIagi/QQIUZOhGd1jfBQWkJy9QfxAzjjEpPvaVOSk4e1S85QzGLm/xbzVONzGkmdtiOSfP6wVg=="], + "@atproto/ozone/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], "@atproto/ozone/@atproto/xrpc": ["@atproto/xrpc@0.7.7", "", { "dependencies": { "@atproto/lexicon": "^0.6.0", "zod": "^3.23.8" } }, "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA=="], "@atproto/ozone/ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], - "@atproto/pds/@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.3.0", "", {}, "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ=="], - "@atproto/pds/@atproto/api": ["@atproto/api@0.19.3", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/lexicon": "^0.6.2", "@atproto/syntax": "^0.5.0", "@atproto/xrpc": "^0.7.7", "await-lock": "^2.2.2", "multiformats": "^9.9.0", "tlds": "^1.234.0", "zod": "^3.23.8" } }, "sha512-G8YpBpRouHdTAIagi/QQIUZOhGd1jfBQWkJy9QfxAzjjEpPvaVOSk4e1S85QzGLm/xbzVONzGkmdtiOSfP6wVg=="], + "@atproto/pds/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], + + "@atproto/pds/@atproto/lexicon": ["@atproto/lexicon@0.6.2", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/syntax": "^0.5.0", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-p3Ly6hinVZW0ETuAXZMeUGwuMm3g8HvQMQ41yyEE6AL0hAkfeKFaZKos6BdBrr6CjkpbrDZqE8M+5+QOceysMw=="], + + "@atproto/pds/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], + "@atproto/pds/@atproto/xrpc": ["@atproto/xrpc@0.7.7", "", { "dependencies": { "@atproto/lexicon": "^0.6.0", "zod": "^3.23.8" } }, "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA=="], "@atproto/pds/@did-plc/lib": ["@did-plc/lib@0.0.4", "", { "dependencies": { "@atproto/common": "0.1.1", "@atproto/crypto": "0.1.0", "@ipld/dag-cbor": "^7.0.3", "axios": "^1.3.4", "multiformats": "^9.6.4", "uint8arrays": "3.0.0", "zod": "^3.14.2" } }, "sha512-Omeawq3b8G/c/5CtkTtzovSOnWuvIuCI4GTJNrt1AmCskwEQV7zbX5d6km1mjJNbE0gHuQPTVqZxLVqetNbfwA=="], @@ -1663,19 +1633,21 @@ "@atproto/pds/file-type": ["file-type@16.5.4", "", { "dependencies": { "readable-web-to-node-stream": "^3.0.0", "strtok3": "^6.2.4", "token-types": "^4.1.1" } }, "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw=="], - "@atproto/pds/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/repo/@atproto/lexicon": ["@atproto/lexicon@0.6.2", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/syntax": "^0.5.0", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-p3Ly6hinVZW0ETuAXZMeUGwuMm3g8HvQMQ41yyEE6AL0hAkfeKFaZKos6BdBrr6CjkpbrDZqE8M+5+QOceysMw=="], - "@atproto/repo/@atproto/common-web": ["@atproto/common-web@0.4.17", "", { "dependencies": { "@atproto/lex-data": "^0.0.12", "@atproto/lex-json": "^0.0.12", "@atproto/syntax": "^0.4.3", "zod": "^3.23.8" } }, "sha512-sfxD8NGxyoxhxmM9EUshEFbWcJ3+JHEOZF4Quk6HsCh1UxpHBmLabT/vEsAkDWl+C/8U0ine0+c/gHyE/OZiQQ=="], + "@atproto/sync/@atproto/lexicon": ["@atproto/lexicon@0.6.2", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/syntax": "^0.5.0", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-p3Ly6hinVZW0ETuAXZMeUGwuMm3g8HvQMQ41yyEE6AL0hAkfeKFaZKos6BdBrr6CjkpbrDZqE8M+5+QOceysMw=="], - "@atproto/repo/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/sync/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], "@atproto/sync/ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], "@atproto/ws-client/ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], - "@atproto/xrpc/@atproto/lexicon": ["@atproto/lexicon@0.4.14", "", { "dependencies": { "@atproto/common-web": "^0.4.2", "@atproto/syntax": "^0.4.0", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-jiKpmH1QER3Gvc7JVY5brwrfo+etFoe57tKPQX/SmPwjvUsFnJAow5xLIryuBaJgFAhnTZViXKs41t//pahGHQ=="], + "@atproto/xrpc-server/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], - "@atproto/xrpc/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/xrpc-server/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], + + "@atproto/xrpc-server/@atproto/lexicon": ["@atproto/lexicon@0.6.2", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/syntax": "^0.5.0", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-p3Ly6hinVZW0ETuAXZMeUGwuMm3g8HvQMQ41yyEE6AL0hAkfeKFaZKos6BdBrr6CjkpbrDZqE8M+5+QOceysMw=="], "@atproto/xrpc-server/@atproto/xrpc": ["@atproto/xrpc@0.7.7", "", { "dependencies": { "@atproto/lexicon": "^0.6.0", "zod": "^3.23.8" } }, "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA=="], @@ -1693,8 +1665,6 @@ "@did-plc/lib/@atproto/crypto": ["@atproto/crypto@0.1.0", "", { "dependencies": { "@noble/secp256k1": "^1.7.0", "big-integer": "^1.6.51", "multiformats": "^9.6.4", "one-webcrypto": "^1.0.3", "uint8arrays": "3.0.0" } }, "sha512-9xgFEPtsCiJEPt9o3HtJT30IdFTGw5cQRSJVIy5CFhqBA4vDLcdXiRDLCjkzHEVbtNCsHUW6CrlfOgbeLPcmcg=="], - "@did-plc/lib/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], - "@did-plc/server/@atproto/common": ["@atproto/common@0.1.0", "", { "dependencies": { "@ipld/dag-cbor": "^7.0.3", "multiformats": "^9.6.4", "pino": "^8.6.1", "zod": "^3.14.2" } }, "sha512-OB5tWE2R19jwiMIs2IjQieH5KTUuMb98XGCn9h3xuu6NanwjlmbCYMv08fMYwIp3UQ6jcq//84cDT3Bu6fJD+A=="], "@did-plc/server/@atproto/crypto": ["@atproto/crypto@0.1.0", "", { "dependencies": { "@noble/secp256k1": "^1.7.0", "big-integer": "^1.6.51", "multiformats": "^9.6.4", "one-webcrypto": "^1.0.3", "uint8arrays": "3.0.0" } }, "sha512-9xgFEPtsCiJEPt9o3HtJT30IdFTGw5cQRSJVIy5CFhqBA4vDLcdXiRDLCjkzHEVbtNCsHUW6CrlfOgbeLPcmcg=="], @@ -1737,6 +1707,8 @@ "ioredis/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "knip/zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "proxy-addr/ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], @@ -1763,18 +1735,20 @@ "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "@atproto-labs/xrpc-utils/@atproto/xrpc/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto-labs/xrpc-utils/@atproto/xrpc/@atproto/lexicon": ["@atproto/lexicon@0.6.2", "", { "dependencies": { "@atproto/common-web": "^0.4.18", "@atproto/syntax": "^0.5.0", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-p3Ly6hinVZW0ETuAXZMeUGwuMm3g8HvQMQ41yyEE6AL0hAkfeKFaZKos6BdBrr6CjkpbrDZqE8M+5+QOceysMw=="], - "@atproto/api/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.12", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-aekJudcK1p6sbTqUv2bJMJBAGZaOJS0mgDclpK3U6VuBREK/au4B6ffunBFWgrDfg0Vwj2JGyEA7E51WZkJcRw=="], + "@atproto/aws/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], - "@atproto/api/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.12", "", { "dependencies": { "@atproto/lex-data": "^0.0.12", "tslib": "^2.8.1" } }, "sha512-XlEpnWWZdDJ5BIgG25GyH+6iBfyrFL18BI5JSE6rUfMObbFMrQRaCuRLQfryRXNysVz3L3U+Qb9y8KcXbE8AcA=="], + "@atproto/aws/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], - "@atproto/api/@atproto/common-web/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], + "@atproto/aws/@atproto/common-web/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], - "@atproto/api/@atproto/lexicon/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], + "@atproto/bsky/@atproto/api/@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], "@atproto/bsky/@atproto/api/@atproto/xrpc": ["@atproto/xrpc@0.7.7", "", { "dependencies": { "@atproto/lexicon": "^0.6.0", "zod": "^3.23.8" } }, "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA=="], + "@atproto/bsky/@atproto/lexicon/@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], + "@atproto/bsky/sharp/@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.0.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ=="], "@atproto/bsky/sharp/@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.0.4" }, "os": "darwin", "cpu": "x64" }, "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q=="], @@ -1813,43 +1787,23 @@ "@atproto/bsky/sharp/@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.33.5", "", { "os": "win32", "cpu": "x64" }, "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg=="], - "@atproto/dev-env/@atproto/api/@atproto/xrpc": ["@atproto/xrpc@0.7.7", "", { "dependencies": { "@atproto/lexicon": "^0.6.0", "zod": "^3.23.8" } }, "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA=="], - - "@atproto/dev-env/@atproto/api/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], - - "@atproto/identity/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.12", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-aekJudcK1p6sbTqUv2bJMJBAGZaOJS0mgDclpK3U6VuBREK/au4B6ffunBFWgrDfg0Vwj2JGyEA7E51WZkJcRw=="], - - "@atproto/identity/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.12", "", { "dependencies": { "@atproto/lex-data": "^0.0.12", "tslib": "^2.8.1" } }, "sha512-XlEpnWWZdDJ5BIgG25GyH+6iBfyrFL18BI5JSE6rUfMObbFMrQRaCuRLQfryRXNysVz3L3U+Qb9y8KcXbE8AcA=="], - - "@atproto/identity/@atproto/common-web/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], - - "@atproto/identity/@atproto/common-web/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], - - "@atproto/jwk-webcrypto/@atproto/jwk/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/common/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], - "@atproto/lex-resolver/@atproto-labs/did-resolver/@atproto-labs/fetch": ["@atproto-labs/fetch@0.2.3", "", { "dependencies": { "@atproto-labs/pipe": "0.1.1" } }, "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw=="], + "@atproto/common/@atproto/common-web/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], - "@atproto/lex-resolver/@atproto-labs/did-resolver/@atproto-labs/pipe": ["@atproto-labs/pipe@0.1.1", "", {}, "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg=="], - - "@atproto/lex-resolver/@atproto-labs/did-resolver/@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.3.0", "", {}, "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ=="], - - "@atproto/lex-resolver/@atproto-labs/did-resolver/@atproto/did": ["@atproto/did@0.3.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA=="], - - "@atproto/lex-resolver/@atproto-labs/did-resolver/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], - - "@atproto/oauth-client-node/@atproto/jwk/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/dev-env/@atproto/api/@atproto/xrpc": ["@atproto/xrpc@0.7.7", "", { "dependencies": { "@atproto/lexicon": "^0.6.0", "zod": "^3.23.8" } }, "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA=="], - "@atproto/oauth-client/@atproto/xrpc/@atproto/lexicon": ["@atproto/lexicon@0.4.14", "", { "dependencies": { "@atproto/common-web": "^0.4.2", "@atproto/syntax": "^0.4.0", "iso-datestring-validator": "^2.2.2", "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-jiKpmH1QER3Gvc7JVY5brwrfo+etFoe57tKPQX/SmPwjvUsFnJAow5xLIryuBaJgFAhnTZViXKs41t//pahGHQ=="], + "@atproto/dev-env/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], - "@atproto/oauth-provider-api/@atproto/oauth-types/@atproto/did": ["@atproto/did@0.3.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA=="], + "@atproto/dev-env/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], - "@atproto/oauth-provider-api/@atproto/oauth-types/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/ozone/@atproto/api/@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], - "@atproto/oauth-scopes/@atproto/did/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/ozone/@atproto/lexicon/@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], - "@atproto/ozone/@atproto/api/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/pds/@atproto/api/@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], - "@atproto/ozone/@atproto/xrpc/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/pds/@atproto/lexicon/@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], "@atproto/pds/@did-plc/lib/@atproto/common": ["@atproto/common@0.1.1", "", { "dependencies": { "@ipld/dag-cbor": "^7.0.3", "multiformats": "^9.6.4", "pino": "^8.6.1", "zod": "^3.14.2" } }, "sha512-GYwot5wF/z8iYGSPjrLHuratLc0CVgovmwfJss7+BUOB6y2/Vw8+1Vw0n9DDI0gb5vmx3UI8z0uJgC8aa8yuJg=="], @@ -1859,17 +1813,15 @@ "@atproto/pds/file-type/token-types": ["token-types@4.2.1", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ=="], - "@atproto/repo/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.12", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-aekJudcK1p6sbTqUv2bJMJBAGZaOJS0mgDclpK3U6VuBREK/au4B6ffunBFWgrDfg0Vwj2JGyEA7E51WZkJcRw=="], + "@atproto/repo/@atproto/lexicon/@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], - "@atproto/repo/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.12", "", { "dependencies": { "@atproto/lex-data": "^0.0.12", "tslib": "^2.8.1" } }, "sha512-XlEpnWWZdDJ5BIgG25GyH+6iBfyrFL18BI5JSE6rUfMObbFMrQRaCuRLQfryRXNysVz3L3U+Qb9y8KcXbE8AcA=="], + "@atproto/repo/@atproto/lexicon/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], - "@atproto/repo/@atproto/common-web/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], + "@atproto/sync/@atproto/lexicon/@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], - "@atproto/xrpc-server/@atproto/xrpc/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], + "@atproto/xrpc-server/@atproto/lexicon/@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], - "@atproto/xrpc/@atproto/lexicon/@atproto/common-web": ["@atproto/common-web@0.4.17", "", { "dependencies": { "@atproto/lex-data": "^0.0.12", "@atproto/lex-json": "^0.0.12", "@atproto/syntax": "^0.4.3", "zod": "^3.23.8" } }, "sha512-sfxD8NGxyoxhxmM9EUshEFbWcJ3+JHEOZF4Quk6HsCh1UxpHBmLabT/vEsAkDWl+C/8U0ine0+c/gHyE/OZiQQ=="], - - "@atproto/xrpc/@atproto/lexicon/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], + "@atproto/xrpc-server/@atproto/lexicon/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], "@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], @@ -1877,8 +1829,6 @@ "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from": ["@smithy/util-buffer-from@2.2.0", "", { "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" } }, "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA=="], - "@did-plc/server/@atproto/common/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], - "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], "@tokenizer/inflate/debug/ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], @@ -1897,13 +1847,37 @@ "wrap-ansi/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "@atproto/oauth-client/@atproto/xrpc/@atproto/lexicon/@atproto/common-web": ["@atproto/common-web@0.4.17", "", { "dependencies": { "@atproto/lex-data": "^0.0.12", "@atproto/lex-json": "^0.0.12", "@atproto/syntax": "^0.4.3", "zod": "^3.23.8" } }, "sha512-sfxD8NGxyoxhxmM9EUshEFbWcJ3+JHEOZF4Quk6HsCh1UxpHBmLabT/vEsAkDWl+C/8U0ine0+c/gHyE/OZiQQ=="], + "@atproto-labs/xrpc-utils/@atproto/xrpc/@atproto/lexicon/@atproto/common-web": ["@atproto/common-web@0.4.18", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "@atproto/lex-json": "^0.0.13", "@atproto/syntax": "^0.5.0", "zod": "^3.23.8" } }, "sha512-ilImzP+9N/mtse440kN60pGrEzG7wi4xsV13nGeLrS+Zocybc/ISOpKlbZM13o+twPJ+Q7veGLw9CtGg0GAFoQ=="], + + "@atproto-labs/xrpc-utils/@atproto/xrpc/@atproto/lexicon/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], + + "@atproto/bsky/@atproto/api/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], + + "@atproto/bsky/@atproto/api/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], + + "@atproto/bsky/@atproto/lexicon/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], + + "@atproto/bsky/@atproto/lexicon/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], + + "@atproto/ozone/@atproto/api/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], + + "@atproto/ozone/@atproto/api/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], + + "@atproto/ozone/@atproto/lexicon/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], + + "@atproto/ozone/@atproto/lexicon/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], + + "@atproto/pds/@atproto/api/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], + + "@atproto/pds/@atproto/lexicon/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], + + "@atproto/repo/@atproto/lexicon/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], - "@atproto/oauth-client/@atproto/xrpc/@atproto/lexicon/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], + "@atproto/repo/@atproto/lexicon/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], - "@atproto/xrpc/@atproto/lexicon/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.12", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-aekJudcK1p6sbTqUv2bJMJBAGZaOJS0mgDclpK3U6VuBREK/au4B6ffunBFWgrDfg0Vwj2JGyEA7E51WZkJcRw=="], + "@atproto/sync/@atproto/lexicon/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], - "@atproto/xrpc/@atproto/lexicon/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.12", "", { "dependencies": { "@atproto/lex-data": "^0.0.12", "tslib": "^2.8.1" } }, "sha512-XlEpnWWZdDJ5BIgG25GyH+6iBfyrFL18BI5JSE6rUfMObbFMrQRaCuRLQfryRXNysVz3L3U+Qb9y8KcXbE8AcA=="], + "@atproto/sync/@atproto/lexicon/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], "@aws-crypto/sha1-browser/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], @@ -1911,8 +1885,8 @@ "@aws-crypto/util/@smithy/util-utf8/@smithy/util-buffer-from/@smithy/is-array-buffer": ["@smithy/is-array-buffer@2.2.0", "", { "dependencies": { "tslib": "^2.6.2" } }, "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA=="], - "@atproto/oauth-client/@atproto/xrpc/@atproto/lexicon/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.12", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-aekJudcK1p6sbTqUv2bJMJBAGZaOJS0mgDclpK3U6VuBREK/au4B6ffunBFWgrDfg0Vwj2JGyEA7E51WZkJcRw=="], + "@atproto-labs/xrpc-utils/@atproto/xrpc/@atproto/lexicon/@atproto/common-web/@atproto/lex-data": ["@atproto/lex-data@0.0.13", "", { "dependencies": { "multiformats": "^9.9.0", "tslib": "^2.8.1", "uint8arrays": "3.0.0", "unicode-segmenter": "^0.14.0" } }, "sha512-7Z7RwZ1Y/JzBF/Tcn/I4UJ/vIGfh5zn1zjv0KX+flke2JtgFkSE8uh2hOtqgBQMNqE3zdJFM+dcSWln86hR3MQ=="], - "@atproto/oauth-client/@atproto/xrpc/@atproto/lexicon/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.12", "", { "dependencies": { "@atproto/lex-data": "^0.0.12", "tslib": "^2.8.1" } }, "sha512-XlEpnWWZdDJ5BIgG25GyH+6iBfyrFL18BI5JSE6rUfMObbFMrQRaCuRLQfryRXNysVz3L3U+Qb9y8KcXbE8AcA=="], + "@atproto-labs/xrpc-utils/@atproto/xrpc/@atproto/lexicon/@atproto/common-web/@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], } } diff --git a/deploy/deploy.sh b/deploy/deploy.sh index d00fdf6..59fece6 100755 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -34,11 +34,10 @@ rsync -avz --delete \ --rsync-path="sudo rsync" \ ./ "${VPS}:${APP_DIR}/" -log "==> Installing deps + patching jose for Bun" +log "==> Installing deps" ssh "$VPS" " sudo chown -R lichen:lichen ${APP_DIR} sudo -u lichen bash -c 'cd ${APP_DIR} && bun install --production' - sudo sed -i 's|\"bun\": \"./dist/browser/|\"bun\": \"./dist/node/esm/|g' ${APP_DIR}/node_modules/jose/package.json " log "==> Updating config files" diff --git a/knip.config.ts b/knip.config.ts index 13854fc..27e0aec 100644 --- a/knip.config.ts +++ b/knip.config.ts @@ -12,7 +12,6 @@ const config: KnipConfig = { "better-sqlite3", "tailwindcss", "@tailwindcss/typography", - "jose", // transitive dep of @atproto/jwk-jose, imported directly for Bun compatibility workaround ], includeEntryExports: true, treatConfigHintsAsErrors: true, diff --git a/package.json b/package.json index 4aaf8c2..0f7a43f 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "dev:editor": "bun build public/editor/editor.ts --outfile public/editor/dist.js --watch" }, "devDependencies": { + "@atproto/api": "^0.13.0", "@atproto/dev-env": "0.3.213", "@atproto/identity": "^0.4.12", "@atproto/sync": "^0.1.40", @@ -52,15 +53,16 @@ "@atproto-labs/handle-resolver/zod": "3.23.8" }, "dependencies": { + "@atcute/atproto": "^3.1.11", "@atcute/cid": "^2.4.1", + "@atcute/client": "^4.2.1", "@atcute/identity-resolver": "^1.2.2", "@atcute/identity-resolver-node": "^1.0.3", "@atcute/jetstream": "^1.1.2", "@atcute/lexicons": "^1.3.0", + "@atcute/oauth-node-client": "^1.1.0", + "@atcute/password-session": "^0.1.0", "@atcute/tid": "^1.1.2", - "@atproto/api": "^0.13.0", - "@atproto/jwk-jose": "^0.1.0", - "@atproto/oauth-client-node": "^0.1.0", "@codemirror/lang-markdown": "^6.5.0", "@codemirror/state": "^6.0.0", "@elysiajs/static": "^1.4.7", diff --git a/src/atproto/client.ts b/src/atproto/client.ts index bbabf90..629e62c 100644 --- a/src/atproto/client.ts +++ b/src/atproto/client.ts @@ -1,29 +1,40 @@ import { readFileSync } from "node:fs"; -import { JoseKey } from "@atproto/jwk-jose"; import { - NodeOAuthClient, - type NodeSavedSession, - type NodeSavedState, -} from "@atproto/oauth-client-node"; + CompositeDidDocumentResolver, + CompositeHandleResolver, + LocalActorResolver, + PlcDidDocumentResolver, + WebDidDocumentResolver, + WellKnownHandleResolver, +} from "@atcute/identity-resolver"; +import { NodeDnsHandleResolver } from "@atcute/identity-resolver-node"; +import type { Store } from "@atcute/oauth-node-client"; +import { + importClientAssertionPkcs8, + OAuthClient, + type StoredSession, + type StoredState, +} from "@atcute/oauth-node-client"; import { OAUTH_SCOPE } from "../lib/constants.ts"; import { getDb } from "../server/db/index.ts"; import type { AtprotoEnv } from "./env.ts"; +import { getDevPlcUrl } from "./env.ts"; -// Re-use jose from @atproto/jwk-jose's dependency (avoid knip unlisted dep warning) -// biome-ignore lint/suspicious/noExplicitAny: accessing transitive jose exports -const jose: any = await import("jose"); - -class SqliteSessionStore { - get(did: string): NodeSavedSession | undefined { +class SqliteSessionStore implements Store { + get(did: string): StoredSession | undefined { const db = getDb(); const row = db .query("SELECT session_data FROM oauth_sessions WHERE did = ?") .get(did) as { session_data: string } | null; if (!row) return undefined; - return JSON.parse(row.session_data) as NodeSavedSession; + try { + return JSON.parse(row.session_data) as StoredSession; + } catch { + return undefined; + } } - set(did: string, session: NodeSavedSession): void { + set(did: string, session: StoredSession): void { const db = getDb(); db.run( `INSERT INTO oauth_sessions (did, session_data, updated_at) @@ -33,23 +44,32 @@ class SqliteSessionStore { ); } - del(did: string): void { + delete(did: string): void { const db = getDb(); db.run("DELETE FROM oauth_sessions WHERE did = ?", [did]); } + + clear(): void { + const db = getDb(); + db.run("DELETE FROM oauth_sessions"); + } } -class SqliteStateStore { - get(key: string): NodeSavedState | undefined { +class SqliteStateStore implements Store { + get(key: string): StoredState | undefined { const db = getDb(); const row = db .query("SELECT state_data FROM oauth_state WHERE key = ?") .get(key) as { state_data: string } | null; if (!row) return undefined; - return JSON.parse(row.state_data) as NodeSavedState; + try { + return JSON.parse(row.state_data) as StoredState; + } catch { + return undefined; + } } - set(key: string, state: NodeSavedState): void { + set(key: string, state: StoredState): void { const db = getDb(); db.run( `INSERT INTO oauth_state (key, state_data, created_at) @@ -59,50 +79,62 @@ class SqliteStateStore { ); } - del(key: string): void { + delete(key: string): void { const db = getDb(); db.run("DELETE FROM oauth_state WHERE key = ?", [key]); } + + clear(): void { + const db = getDb(); + db.run("DELETE FROM oauth_state"); + } } -export async function createOAuthClient( - env: AtprotoEnv, -): Promise { - const privateKeyPem = readFileSync(env.privateKeyPath, "utf-8"); - const keyLike = await jose.importPKCS8(privateKeyPem, "ES256", { - extractable: true, +function buildActorResolver(): LocalActorResolver { + const plcUrl = getDevPlcUrl(); + return new LocalActorResolver({ + handleResolver: new CompositeHandleResolver({ + methods: { + dns: new NodeDnsHandleResolver(), + http: new WellKnownHandleResolver(), + }, + }), + didDocumentResolver: new CompositeDidDocumentResolver({ + methods: { + plc: new PlcDidDocumentResolver( + plcUrl ? { apiUrl: plcUrl } : undefined, + ), + web: new WebDidDocumentResolver(), + }, + }), }); - const jwk = await jose.exportJWK(keyLike); - jwk.alg = "ES256"; - jwk.kid = "lichen-key-1"; - jwk.key_ops = ["sign"]; - const key = await JoseKey.fromJWK(jwk as Record); - // Workaround: fromJWK strips "use" from private keys and converts to key_ops, - // but the oauth-client keyset lookup filters by use: "sig". Patch it back. - Object.defineProperty(key, "use", { get: () => "sig" }); +} - const url = env.publicUrl; +export async function createOAuthClient(env: AtprotoEnv): Promise { + // Convert PEM (PKCS#8 ES256) → JWK in-memory at load. + // Future: store the key as a JWK file directly and skip this step + // (requires generating + persisting a fresh JWK and wiping oauth_sessions). + const pem = readFileSync(env.privateKeyPath, "utf-8"); + const privateJwk = await importClientAssertionPkcs8(pem, { + kid: "lichen-key-1", + alg: "ES256", + }); - const client = new NodeOAuthClient({ - clientMetadata: { + const url = env.publicUrl; + return new OAuthClient({ + metadata: { client_id: `${url}/client-metadata.json`, client_name: "Lichen", client_uri: url, jwks_uri: `${url}/jwks.json`, redirect_uris: [`${url}/atproto-oauth-callback`], - grant_types: ["authorization_code", "refresh_token"], - response_types: ["code"], scope: OAUTH_SCOPE, - token_endpoint_auth_method: "private_key_jwt", - token_endpoint_auth_signing_alg: "ES256", - application_type: "web", - dpop_bound_access_tokens: true, }, - // biome-ignore lint/suspicious/noExplicitAny: JoseKey type mismatch with NodeOAuthClient keyset - keyset: [key] as any, - stateStore: new SqliteStateStore(), - sessionStore: new SqliteSessionStore(), + keyset: [privateJwk], + stores: { + sessions: new SqliteSessionStore(), + states: new SqliteStateStore(), + }, + actorResolver: buildActorResolver(), }); - - return client; } diff --git a/src/atproto/pds.ts b/src/atproto/pds.ts index b79912b..42d5505 100644 --- a/src/atproto/pds.ts +++ b/src/atproto/pds.ts @@ -1,4 +1,6 @@ -import type { Agent } from "@atproto/api"; +import type { Client } from "@atcute/client"; +import { ok } from "@atcute/client"; +import type { Did, Nsid } from "@atcute/lexicons/syntax"; import { COLLECTIONS } from "../lib/constants.ts"; interface PdsWriteResult { @@ -14,23 +16,27 @@ export interface RevisionBlob { } async function putRecord( - agent: Agent, + rpc: Client, did: string, collection: string, rkey: string, fields: Record, ): Promise { - const response = await agent.com.atproto.repo.putRecord({ - repo: did, - collection, - rkey, - record: { $type: collection, ...fields }, - }); - return { uri: response.data.uri, cid: response.data.cid }; + const data = await ok( + rpc.post("com.atproto.repo.putRecord", { + input: { + repo: did as Did, + collection: collection as Nsid, + rkey, + record: { $type: collection, ...fields }, + }, + }), + ); + return { uri: data.uri, cid: data.cid }; } export function writeWikiRecord( - agent: Agent, + rpc: Client, did: string, slug: string, name: string, @@ -46,11 +52,11 @@ export function writeWikiRecord( createdAt, }; if (description) fields["description"] = description; - return putRecord(agent, did, COLLECTIONS.wiki, slug, fields); + return putRecord(rpc, did, COLLECTIONS.wiki, slug, fields); } export function writeNoteRecord( - agent: Agent, + rpc: Client, did: string, tid: string, slug: string, @@ -58,7 +64,7 @@ export function writeNoteRecord( wikiRef: string, createdAt: string, ): Promise { - return putRecord(agent, did, COLLECTIONS.note, tid, { + return putRecord(rpc, did, COLLECTIONS.note, tid, { slug, title, wikiRef, @@ -67,7 +73,7 @@ export function writeNoteRecord( } export function writeRevisionRecord( - agent: Agent, + rpc: Client, did: string, tid: string, noteRef: string, @@ -87,11 +93,11 @@ export function writeRevisionRecord( if (message) fields["message"] = message; if (blobs && blobs.length > 0) fields["blobs"] = blobs; - return putRecord(agent, did, COLLECTIONS.noteRevision, tid, fields); + return putRecord(rpc, did, COLLECTIONS.noteRevision, tid, fields); } export function writeMembershipRecord( - agent: Agent, + rpc: Client, did: string, tid: string, memberDid: string, @@ -99,7 +105,7 @@ export function writeMembershipRecord( role: "admin" | "contributor" | "viewer", createdAt: string, ): Promise { - return putRecord(agent, did, COLLECTIONS.membership, tid, { + return putRecord(rpc, did, COLLECTIONS.membership, tid, { memberDid, wikiRef, role, @@ -108,40 +114,44 @@ export function writeMembershipRecord( } export function writeMemberRequestRecord( - agent: Agent, + rpc: Client, did: string, tid: string, wikiRef: string, createdAt: string, ): Promise { - return putRecord(agent, did, COLLECTIONS.memberRequest, tid, { + return putRecord(rpc, did, COLLECTIONS.memberRequest, tid, { wikiRef, createdAt, }); } export function writeBookmarkRecord( - agent: Agent, + rpc: Client, did: string, tid: string, wikiRef: string, createdAt: string, ): Promise { - return putRecord(agent, did, COLLECTIONS.bookmark, tid, { + return putRecord(rpc, did, COLLECTIONS.bookmark, tid, { wikiRef, createdAt, }); } export async function deleteRecord( - agent: Agent, + rpc: Client, did: string, collection: string, rkey: string, ): Promise { - await agent.com.atproto.repo.deleteRecord({ - repo: did, - collection, - rkey, - }); + await ok( + rpc.post("com.atproto.repo.deleteRecord", { + input: { + repo: did as Did, + collection: collection as Nsid, + rkey, + }, + }), + ); } diff --git a/src/atproto/routes.ts b/src/atproto/routes.ts index c41da0f..6b06e30 100644 --- a/src/atproto/routes.ts +++ b/src/atproto/routes.ts @@ -1,12 +1,12 @@ +import type { ActorIdentifier } from "@atcute/lexicons"; import { Elysia } from "elysia"; -import { OAUTH_SCOPE } from "../lib/constants.ts"; import { escapeHtml } from "../lib/html.ts"; import { fmt, resolveLocale, t } from "../lib/i18n/index.ts"; import { LIMITS } from "../lib/limits.ts"; import { getClientIp, rateLimit } from "../lib/rate-limit.ts"; import { htmlResponse } from "../lib/response.ts"; import { loginPage } from "../views/login.ts"; -import { getDevAccounts, getDevPdsUrl, getHandleResolverUrl } from "./env.ts"; +import { getDevAccounts, getDevPdsUrl } from "./env.ts"; import { getClient } from "./session.ts"; function getSafeReturnTo(cookieHeader: string | null): string { @@ -15,18 +15,6 @@ function getSafeReturnTo(cookieHeader: string | null): string { return raw?.startsWith("/") && !raw.includes("//") ? raw : "/"; } -async function resolveHandle(handle: string): Promise { - const base = getHandleResolverUrl(); - const resp = await fetch( - `${base}/xrpc/com.atproto.identity.resolveHandle?handle=${encodeURIComponent(handle)}`, - ); - if (!resp.ok) { - throw new Error(`Failed to resolve handle: ${handle}`); - } - const data = (await resp.json()) as { did: string }; - return data.did; -} - export function atprotoRoutes() { const app = new Elysia() .get("/client-metadata.json", async () => { @@ -34,7 +22,7 @@ export function atprotoRoutes() { if (!client) { return new Response("OAuth not configured", { status: 503 }); } - return new Response(JSON.stringify(client.clientMetadata), { + return new Response(JSON.stringify(client.metadata), { headers: { "Content-Type": "application/json" }, }); }) @@ -96,11 +84,13 @@ export function atprotoRoutes() { } try { - const did = await resolveHandle(handle); - const authUrl = await client.authorize(did, { - scope: OAUTH_SCOPE, + const { url } = await client.authorize({ + target: { + type: "account", + identifier: handle as ActorIdentifier, + }, }); - return Response.redirect(authUrl.toString()); + return Response.redirect(url.toString()); } catch { return htmlResponse( loginPage({ diff --git a/src/atproto/session.ts b/src/atproto/session.ts index 5367794..5c2315b 100644 --- a/src/atproto/session.ts +++ b/src/atproto/session.ts @@ -1,5 +1,7 @@ -import { Agent, AtpAgent } from "@atproto/api"; -import type { NodeOAuthClient, OAuthSession } from "@atproto/oauth-client-node"; +import { Client } from "@atcute/client"; +import type { Did } from "@atcute/lexicons/syntax"; +import type { OAuthClient, OAuthSession } from "@atcute/oauth-node-client"; +import { PasswordSession } from "@atcute/password-session"; import { resolveProfile } from "../lib/profile.ts"; import { createOAuthClient } from "./client.ts"; import { getAtprotoEnv, getDevAccounts, getDevPdsUrl } from "./env.ts"; @@ -11,7 +13,7 @@ export interface Session { } async function getSession( - client: NodeOAuthClient, + client: OAuthClient, cookieHeader: string | undefined, ): Promise { if (!cookieHeader) return null; @@ -22,7 +24,7 @@ async function getSession( const did = decodeURIComponent(didMatch[1]); try { - const oauthSession = await client.restore(did); + const oauthSession = await client.restore(did as Did); const profile = await resolveProfile(did); return { did, handle: profile.handle ?? did, oauthSession }; } catch { @@ -32,8 +34,8 @@ async function getSession( /** * Get a dev-mode session from the DID cookie when OAuth is not configured. - * Returns a Session without oauthSession — use createAgent() to get an - * agent that authenticates via app password against the dev PDS. + * Returns a Session without oauthSession — use getAgent() to get an + * authenticated client that uses an app-password session against the dev PDS. */ function getDevSession(cookieHeader: string | undefined): Session | null { if (!cookieHeader) return null; @@ -52,23 +54,18 @@ function getDevSession(cookieHeader: string | undefined): Session | null { } /** - * Get a fully authenticated agent for the session. + * Get an RPC client authenticated for the session. * In production: wraps the OAuth session. - * In dev-full mode (no oauthSession): logs in with app password. - * Use this in orchestrators instead of createAgent(). + * In dev-full mode (no oauthSession): logs in with the configured app password. */ -export async function getAgent(session: Session): Promise { +export async function getAgent(session: Session): Promise { if (session.oauthSession) { - return new Agent(session.oauthSession); + return new Client({ handler: session.oauthSession }); } - return loginDevAgent(session); + return loginDevClient(session); } -/** - * Create and log in a dev-mode agent. Use this instead of createAgent() - * when in dev mode (session.oauthSession is undefined). - */ -async function loginDevAgent(session: Session): Promise { +async function loginDevClient(session: Session): Promise { const devPdsUrl = getDevPdsUrl(); if (!devPdsUrl) { throw new Error("DEV_PDS_URL not configured"); @@ -84,17 +81,17 @@ async function loginDevAgent(session: Session): Promise { throw new Error(`No dev account for DID: ${session.did}`); } - const agent = new AtpAgent({ service: devPdsUrl }); - await agent.login({ + const passwordSession = await PasswordSession.login({ + service: devPdsUrl, identifier: account.handle, password: account.password, }); - return agent as unknown as Agent; + return new Client({ handler: passwordSession }); } -let oauthClient: NodeOAuthClient | null = null; +let oauthClient: OAuthClient | null = null; -export async function getClient(): Promise { +export async function getClient(): Promise { if (oauthClient) return oauthClient; const env = getAtprotoEnv(); if (!env) return null; diff --git a/src/lib/import-export/import.ts b/src/lib/import-export/import.ts index 3db54ec..a9e8661 100644 --- a/src/lib/import-export/import.ts +++ b/src/lib/import-export/import.ts @@ -1,3 +1,4 @@ +import { ok } from "@atcute/client"; import * as TID from "@atcute/tid"; import { writeNoteRecord, writeRevisionRecord } from "../../atproto/pds.ts"; import type { getAgent } from "../../atproto/session.ts"; @@ -114,15 +115,18 @@ async function uploadImages( Buffer.from(image.data), image.mimeType, ); - const response = await agent.com.atproto.repo.uploadBlob(processed.data, { - encoding: processed.mimeType, - }); - const cid = response.data.blob.ref.toString(); + const result = await ok( + agent.post("com.atproto.repo.uploadBlob", { + input: processed.data, + headers: { "content-type": processed.mimeType }, + }), + ); + const cid = result.blob.ref.$link; const blobUrl = `/blob/${did}/${cid}`; imageMap.set(image.filename, blobUrl); blobMeta[cid] = { mimeType: processed.mimeType, - size: response.data.blob.size, + size: result.blob.size, }; } catch { // Skip images that fail validation/upload — they'll remain as broken refs diff --git a/src/server/routes/blob.ts b/src/server/routes/blob.ts index 61b4352..c860e3a 100644 --- a/src/server/routes/blob.ts +++ b/src/server/routes/blob.ts @@ -1,5 +1,6 @@ import { existsSync, mkdirSync } from "node:fs"; import { join, resolve } from "node:path"; +import { ok } from "@atcute/client"; import { Elysia } from "elysia"; import { isAuthEnabled } from "../../atproto/env.ts"; import { getAgent } from "../../atproto/session.ts"; @@ -66,17 +67,20 @@ export const blobRoutes = new Elysia() if (session) { // ATProto mode: upload to PDS - const agent = await getAgent(session); - const response = await agent.com.atproto.repo.uploadBlob(processed.data, { - encoding: processed.mimeType, - }); - const cid = response.data.blob.ref.toString(); + const rpc = await getAgent(session); + const result = await ok( + rpc.post("com.atproto.repo.uploadBlob", { + input: processed.data, + headers: { "content-type": processed.mimeType }, + }), + ); + const cid = result.blob.ref.$link; return new Response( JSON.stringify({ url: `/blob/${session.did}/${cid}`, cid, mimeType: processed.mimeType, - size: response.data.blob.size, + size: result.blob.size, }), { headers: { "Content-Type": "application/json" } }, ); diff --git a/tests/atproto/pds.test.ts b/tests/atproto/pds.test.ts index 641c7c7..9a4dd03 100644 --- a/tests/atproto/pds.test.ts +++ b/tests/atproto/pds.test.ts @@ -1,34 +1,33 @@ import { describe, expect, mock, test } from "bun:test"; import { COLLECTIONS } from "../../src/lib/constants.ts"; -// Mock agent that records calls to putRecord and deleteRecord -function createMockAgent() { - const putRecordCalls: unknown[][] = []; - const deleteRecordCalls: unknown[][] = []; +interface RecordedCall { + method: string; + input: Record; +} +// Mock atcute Client.post — records calls and returns a synthetic success response. +function createMockClient() { + const calls: RecordedCall[] = []; + const response = { + ok: true as const, + status: 200, + headers: new Headers(), + data: { + uri: "at://did:plc:test/collection/rkey", + cid: "bafyrei-test-cid", + }, + }; return { - agent: { - com: { - atproto: { - repo: { - putRecord: mock(async (input: unknown) => { - putRecordCalls.push([input]); - return { - data: { - uri: "at://did:plc:test/collection/rkey", - cid: "bafyrei-test-cid", - }, - }; - }), - deleteRecord: mock(async (input: unknown) => { - deleteRecordCalls.push([input]); - }), - }, + client: { + post: mock( + async (method: string, options: { input: Record }) => { + calls.push({ method, input: options.input }); + return response; }, - }, + ), } as never, - putRecordCalls, - deleteRecordCalls, + calls, }; } @@ -47,10 +46,10 @@ const TIMESTAMP = "2026-01-01T00:00:00.000Z"; describe("PDS write functions — contract tests", () => { test("writeWikiRecord passes correct collection and fields", async () => { - const { agent, putRecordCalls } = createMockAgent(); + const { client, calls } = createMockClient(); const result = await writeWikiRecord( - agent, + client, DID, "my-wiki", "My Wiki", @@ -65,12 +64,14 @@ describe("PDS write functions — contract tests", () => { cid: "bafyrei-test-cid", }); - const call = putRecordCalls[0]?.[0] as Record; - expect(call["repo"]).toBe(DID); - expect(call["collection"]).toBe(COLLECTIONS.wiki); - expect(call["rkey"]).toBe("my-wiki"); + const method = calls[0]?.method ?? ""; + const input: Record = calls[0]?.input ?? {}; + expect(method).toBe("com.atproto.repo.putRecord"); + expect(input["repo"]).toBe(DID); + expect(input["collection"]).toBe(COLLECTIONS.wiki); + expect(input["rkey"]).toBe("my-wiki"); - const record = call["record"] as Record; + const record = input["record"] as Record; expect(record["$type"]).toBe(COLLECTIONS.wiki); expect(record["name"]).toBe("My Wiki"); expect(record["visibility"]).toBe("public"); @@ -79,10 +80,10 @@ describe("PDS write functions — contract tests", () => { }); test("writeWikiRecord omits description when not provided", async () => { - const { agent, putRecordCalls } = createMockAgent(); + const { client, calls } = createMockClient(); await writeWikiRecord( - agent, + client, DID, "slug", "Name", @@ -91,17 +92,15 @@ describe("PDS write functions — contract tests", () => { "fr", ); - const record = (putRecordCalls[0]?.[0] as Record)[ - "record" - ] as Record; + const record = (calls[0]?.input["record"] ?? {}) as Record; expect(record["description"]).toBeUndefined(); }); test("writeNoteRecord passes correct collection and fields", async () => { - const { agent, putRecordCalls } = createMockAgent(); + const { client, calls } = createMockClient(); await writeNoteRecord( - agent, + client, DID, "tid123", "my-note", @@ -110,11 +109,11 @@ describe("PDS write functions — contract tests", () => { TIMESTAMP, ); - const call = putRecordCalls[0]?.[0] as Record; - expect(call["collection"]).toBe(COLLECTIONS.note); - expect(call["rkey"]).toBe("tid123"); + const input: Record = calls[0]?.input ?? {}; + expect(input["collection"]).toBe(COLLECTIONS.note); + expect(input["rkey"]).toBe("tid123"); - const record = call["record"] as Record; + const record = input["record"] as Record; expect(record["slug"]).toBe("my-note"); expect(record["title"]).toBe("My Note"); expect(record["wikiRef"]).toBe( @@ -123,10 +122,10 @@ describe("PDS write functions — contract tests", () => { }); test("writeRevisionRecord passes correct fields", async () => { - const { agent, putRecordCalls } = createMockAgent(); + const { client, calls } = createMockClient(); await writeRevisionRecord( - agent, + client, DID, "tid456", "at://did:plc:test/wiki.lichen.note/tid123", @@ -144,10 +143,10 @@ describe("PDS write functions — contract tests", () => { ], ); - const call = putRecordCalls[0]?.[0] as Record; - expect(call["collection"]).toBe(COLLECTIONS.noteRevision); + const input: Record = calls[0]?.input ?? {}; + expect(input["collection"]).toBe(COLLECTIONS.noteRevision); - const record = call["record"] as Record; + const record = input["record"] as Record; expect(record["noteRef"]).toBe("at://did:plc:test/wiki.lichen.note/tid123"); expect(record["parentRevision"]).toBe( "at://did:plc:test/wiki.lichen.noteRevision/prev", @@ -166,10 +165,10 @@ describe("PDS write functions — contract tests", () => { }); test("writeRevisionRecord omits optional fields when null/undefined", async () => { - const { agent, putRecordCalls } = createMockAgent(); + const { client, calls } = createMockClient(); await writeRevisionRecord( - agent, + client, DID, "tid789", "at://did:plc:test/wiki.lichen.note/tid123", @@ -179,19 +178,17 @@ describe("PDS write functions — contract tests", () => { TIMESTAMP, ); - const record = (putRecordCalls[0]?.[0] as Record)[ - "record" - ] as Record; + const record = (calls[0]?.input["record"] ?? {}) as Record; expect(record["parentRevision"]).toBeUndefined(); expect(record["message"]).toBeUndefined(); expect(record["blobs"]).toBeUndefined(); }); test("writeMembershipRecord passes correct fields", async () => { - const { agent, putRecordCalls } = createMockAgent(); + const { client, calls } = createMockClient(); await writeMembershipRecord( - agent, + client, DID, "tid-m1", "did:plc:member", @@ -200,62 +197,64 @@ describe("PDS write functions — contract tests", () => { TIMESTAMP, ); - const call = putRecordCalls[0]?.[0] as Record; - expect(call["collection"]).toBe(COLLECTIONS.membership); + const input: Record = calls[0]?.input ?? {}; + expect(input["collection"]).toBe(COLLECTIONS.membership); - const record = call["record"] as Record; + const record = input["record"] as Record; expect(record["memberDid"]).toBe("did:plc:member"); expect(record["role"]).toBe("contributor"); }); test("writeMemberRequestRecord passes correct fields", async () => { - const { agent, putRecordCalls } = createMockAgent(); + const { client, calls } = createMockClient(); await writeMemberRequestRecord( - agent, + client, DID, "tid-r1", "at://did:plc:test/wiki.lichen.wiki/my-wiki", TIMESTAMP, ); - const call = putRecordCalls[0]?.[0] as Record; - expect(call["collection"]).toBe(COLLECTIONS.memberRequest); + const input: Record = calls[0]?.input ?? {}; + expect(input["collection"]).toBe(COLLECTIONS.memberRequest); - const record = call["record"] as Record; + const record = input["record"] as Record; expect(record["wikiRef"]).toBe( "at://did:plc:test/wiki.lichen.wiki/my-wiki", ); }); test("writeBookmarkRecord passes correct fields", async () => { - const { agent, putRecordCalls } = createMockAgent(); + const { client, calls } = createMockClient(); await writeBookmarkRecord( - agent, + client, DID, "tid-b1", "at://did:plc:test/wiki.lichen.wiki/my-wiki", TIMESTAMP, ); - const call = putRecordCalls[0]?.[0] as Record; - expect(call["collection"]).toBe(COLLECTIONS.bookmark); + const input: Record = calls[0]?.input ?? {}; + expect(input["collection"]).toBe(COLLECTIONS.bookmark); - const record = call["record"] as Record; + const record = input["record"] as Record; expect(record["wikiRef"]).toBe( "at://did:plc:test/wiki.lichen.wiki/my-wiki", ); }); test("deleteRecord passes correct arguments", async () => { - const { agent, deleteRecordCalls } = createMockAgent(); + const { client, calls } = createMockClient(); - await deleteRecord(agent, DID, COLLECTIONS.membership, "rkey123"); + await deleteRecord(client, DID, COLLECTIONS.membership, "rkey123"); - const call = deleteRecordCalls[0]?.[0] as Record; - expect(call["repo"]).toBe(DID); - expect(call["collection"]).toBe(COLLECTIONS.membership); - expect(call["rkey"]).toBe("rkey123"); + const method = calls[0]?.method ?? ""; + const input: Record = calls[0]?.input ?? {}; + expect(method).toBe("com.atproto.repo.deleteRecord"); + expect(input["repo"]).toBe(DID); + expect(input["collection"]).toBe(COLLECTIONS.membership); + expect(input["rkey"]).toBe("rkey123"); }); }); diff --git a/tests/atproto/session.test.ts b/tests/atproto/session.test.ts index b8735c9..39561e8 100644 --- a/tests/atproto/session.test.ts +++ b/tests/atproto/session.test.ts @@ -1,5 +1,5 @@ import { afterAll, beforeAll, describe, expect, mock, test } from "bun:test"; -import type { NodeOAuthClient } from "@atproto/oauth-client-node"; +import type { OAuthClient } from "@atcute/oauth-node-client"; // Mock profile resolution to avoid network calls and return DID as handle mock.module("../../src/lib/profile.ts", () => ({ @@ -18,7 +18,7 @@ const { resolveProfile } = await import("../../src/lib/profile.ts"); const { getDevAccounts } = await import("../../src/atproto/env.ts"); async function getSession( - client: NodeOAuthClient, + client: OAuthClient, cookieHeader: string | undefined, ): Promise<{ did: string; handle: string; oauthSession?: unknown } | null> { if (!cookieHeader) return null; @@ -26,7 +26,7 @@ async function getSession( if (!didMatch?.[1]) return null; const did = decodeURIComponent(didMatch[1]); try { - const oauthSession = await client.restore(did); + const oauthSession = await client.restore(did as `did:${string}:${string}`); const profile = await resolveProfile(did); return { did, handle: profile.handle ?? did, oauthSession }; } catch { @@ -48,17 +48,17 @@ function getDevSession( return { did, handle: account.handle }; } -// Minimal mock of NodeOAuthClient for testing cookie parsing +// Minimal mock of OAuthClient for testing cookie parsing function createMockClient( restoreBehavior: (did: string) => { sub: string } | Error, -): NodeOAuthClient { +): OAuthClient { return { restore: async (did: string) => { const result = restoreBehavior(did); if (result instanceof Error) throw result; return result; }, - } as unknown as NodeOAuthClient; + } as unknown as OAuthClient; } describe("getSession", () => { diff --git a/tsconfig.json b/tsconfig.json index a9c38d1..48b50da 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,6 +3,7 @@ "lib": ["ESNext"], "target": "ESNext", "module": "Preserve", + "types": ["@atcute/atproto"], // Bundler mode "moduleResolution": "bundler",