🌿 Collaborative wiki on ATProto lichen.wiki
atproto
14
fork

Configure Feed

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

Move oauth and others to atcute libs

juprodh a467f99d 70969b9d

+373 -362
+124 -150
bun.lock
··· 5 5 "": { 6 6 "name": "atwiki", 7 7 "dependencies": { 8 + "@atcute/atproto": "^3.1.11", 8 9 "@atcute/cid": "^2.4.1", 10 + "@atcute/client": "^4.2.1", 9 11 "@atcute/identity-resolver": "^1.2.2", 10 12 "@atcute/identity-resolver-node": "^1.0.3", 11 13 "@atcute/jetstream": "^1.1.2", 12 14 "@atcute/lexicons": "^1.3.0", 15 + "@atcute/oauth-node-client": "^1.1.0", 16 + "@atcute/password-session": "^0.1.0", 13 17 "@atcute/tid": "^1.1.2", 14 - "@atproto/api": "^0.13.0", 15 - "@atproto/jwk-jose": "^0.1.0", 16 - "@atproto/oauth-client-node": "^0.1.0", 17 18 "@codemirror/lang-markdown": "^6.5.0", 18 19 "@codemirror/state": "^6.0.0", 19 20 "@elysiajs/static": "^1.4.7", ··· 27 28 "sharp": "^0.34.5", 28 29 }, 29 30 "devDependencies": { 31 + "@atproto/api": "^0.13.0", 30 32 "@atproto/dev-env": "0.3.213", 31 33 "@atproto/identity": "^0.4.12", 32 34 "@atproto/sync": "^0.1.40", ··· 57 59 "@atproto/did/zod": "3.23.8", 58 60 }, 59 61 "packages": { 62 + "@atcute/atproto": ["@atcute/atproto@3.1.11", "", { "dependencies": { "@atcute/lexicons": "^1.2.10" } }, "sha512-yh+ASvA+iHHQij6UeHEKp2+rwvFvQR8A6/5Dk/xvqDslIikWEFx9VlprNwm/clQIPl2bLuQg+LHS8uY9o5nFTA=="], 63 + 60 64 "@atcute/cid": ["@atcute/cid@2.4.1", "", { "dependencies": { "@atcute/multibase": "^1.1.8", "@atcute/uint8array": "^1.1.1" } }, "sha512-bwhna69RCv7yetXudtj+2qrMPYvhhIQqvJz6YUpUS98v7OdF3X2dnye9Nig2NDrklZcuyOsu7sQo7GOykJXRLQ=="], 65 + 66 + "@atcute/client": ["@atcute/client@4.2.1", "", { "dependencies": { "@atcute/identity": "^1.1.3", "@atcute/lexicons": "^1.2.6" } }, "sha512-ZBFM2pW075JtgGFu5g7HHZBecrClhlcNH8GVP9Zz1aViWR+cjjBsTpeE63rJs+FCOHFYlirUyo5L8SGZ4kMINw=="], 61 67 62 68 "@atcute/identity": ["@atcute/identity@1.1.4", "", { "dependencies": { "@atcute/lexicons": "^1.2.9", "@badrap/valita": "^0.4.6" } }, "sha512-RCw1IqflfuSYCxK5m0lZCm0UnvIzcUnuhngiBhJEJb9a9Mc2SEf1xP3H8N5r8pvEH1LoAYd6/zrvCNU+uy9esw=="], 63 69 ··· 71 77 72 78 "@atcute/multibase": ["@atcute/multibase@1.2.0", "", { "dependencies": { "@atcute/uint8array": "^1.1.1" } }, "sha512-ZK2GRra+qIYq9nNuQB52m2ul0hOmCQEtPobGfTSUxm7pF0OGEkWGkWHugFhNEDVzHzTwPxHp6VGotdZFue4lYQ=="], 73 79 80 + "@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=="], 81 + 82 + "@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=="], 83 + 84 + "@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=="], 85 + 86 + "@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=="], 87 + 88 + "@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=="], 89 + 74 90 "@atcute/tid": ["@atcute/tid@1.1.2", "", { "dependencies": { "@atcute/time-ms": "^1.2.2" } }, "sha512-bmPuOX/TOfcm/vsK9vM98spjkcx2wgd9S2PeK5oLgEr8IbNRPq7iMCAPzOL1nu5XAW3LlkOYQEbYRcw5vcQ37w=="], 75 91 76 92 "@atcute/time-ms": ["@atcute/time-ms@1.3.2", "", {}, "sha512-F+qOyR9pO55g1d/QmN+Gr+fimoUQQLusdGSB6pjV0wW5KPILR4oQ4e2ZhWzqUbeHLAgWvgoTTMsMDdz62Xa2tg=="], ··· 81 97 82 98 "@atcute/util-text": ["@atcute/util-text@1.3.1", "", { "dependencies": { "unicode-segmenter": "^0.14.5" } }, "sha512-MRgJXkx67znuBXuoAYCJkBZyd3OApL7zZlNf5kXhuoCXcdiu1nblRDycYTADSkym4epBSQWxh26kmI9sewaq6A=="], 83 99 84 - "@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=="], 100 + "@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=="], 85 101 86 - "@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=="], 102 + "@atproto-labs/fetch": ["@atproto-labs/fetch@0.2.3", "", { "dependencies": { "@atproto-labs/pipe": "0.1.1" } }, "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw=="], 87 103 88 104 "@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=="], 89 105 90 - "@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=="], 91 - 92 - "@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=="], 93 - 94 - "@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=="], 106 + "@atproto-labs/pipe": ["@atproto-labs/pipe@0.1.1", "", {}, "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg=="], 95 107 96 - "@atproto-labs/pipe": ["@atproto-labs/pipe@0.1.0", "", {}, "sha512-ghOqHFyJlQVFPESzlVHjKroP0tPzbmG5Jms0dNI9yLDEfL8xp4OFPWLX4f6T8mRq69wWs4nIDM3sSsFbFqLa1w=="], 97 - 98 - "@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.1.1", "", {}, "sha512-WKILW2b3QbAYKh+w5U2x6p5FqqLl0nAeLwGeDY+KjX01K4Dq3vQTR9b/qNp0jZm48CabPQVrqCv0PPU9LgRRRg=="], 108 + "@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.3.0", "", {}, "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ=="], 99 109 100 110 "@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=="], 101 111 ··· 113 123 114 124 "@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=="], 115 125 116 - "@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=="], 126 + "@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=="], 117 127 118 128 "@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=="], 119 129 120 130 "@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=="], 121 131 122 - "@atproto/did": ["@atproto/did@0.1.2", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-gmY1SyAuqfmsFbIXkUIScfnULqn39FoUNz4oE0fUuMu9in6PEyoxlmD2lAo7Q3KMy3X/hvTn2u5f8W/2KuDg1w=="], 132 + "@atproto/did": ["@atproto/did@0.3.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA=="], 123 133 124 134 "@atproto/identity": ["@atproto/identity@0.4.12", "", { "dependencies": { "@atproto/common-web": "^0.4.17", "@atproto/crypto": "^0.4.5" } }, "sha512-P+Jn0HvKhIh1tps5n3xGrCxt+XiFWzp4kdgloyFhFmVLwjDU547DQkWx4r5Vhuiah7fRZGVSlk39R4U6SPrACg=="], 125 135 126 136 "@atproto/jwk": ["@atproto/jwk@0.6.0", "", { "dependencies": { "multiformats": "^9.9.0", "zod": "^3.23.8" } }, "sha512-bDoJPvt7TrQVi/rBfBrSSpGykhtIriKxeYCYQTiPRKFfyRhbgpElF0wPXADjIswnbzZdOwbY63az4E/CFVT3Tw=="], 127 137 128 138 "@atproto/jwk-jose": ["@atproto/jwk-jose@0.1.11", "", { "dependencies": { "@atproto/jwk": "0.6.0", "jose": "^5.2.0" } }, "sha512-i4Fnr2sTBYmMmHXl7NJh8GrCH+tDQEVWrcDMDnV5DjJfkgT17wIqvojIw9SNbSL4Uf0OtfEv6AgG0A+mgh8b5Q=="], 129 - 130 - "@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=="], 131 139 132 140 "@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=="], 133 141 134 142 "@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=="], 135 143 136 - "@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=="], 144 + "@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=="], 137 145 138 146 "@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=="], 139 147 140 - "@atproto/lex-json": ["@atproto/lex-json@0.0.13", "", { "dependencies": { "@atproto/lex-data": "^0.0.13", "tslib": "^2.8.1" } }, "sha512-hwLhkKaIHulGJpt0EfXAEWdrxqM2L1tV/tvilzhMp3QxPqYgXchFnrfVmLsyFDx6P6qkH1GsX/XC2V36U0UlPQ=="], 148 + "@atproto/lex-json": ["@atproto/lex-json@0.0.12", "", { "dependencies": { "@atproto/lex-data": "^0.0.12", "tslib": "^2.8.1" } }, "sha512-XlEpnWWZdDJ5BIgG25GyH+6iBfyrFL18BI5JSE6rUfMObbFMrQRaCuRLQfryRXNysVz3L3U+Qb9y8KcXbE8AcA=="], 141 149 142 150 "@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=="], 143 151 144 152 "@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=="], 145 153 146 - "@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=="], 147 - 148 - "@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=="], 149 - 150 - "@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=="], 154 + "@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=="], 151 155 152 156 "@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=="], 153 157 ··· 159 163 160 164 "@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=="], 161 165 162 - "@atproto/oauth-types": ["@atproto/oauth-types@0.1.5", "", { "dependencies": { "@atproto/jwk": "0.1.1", "zod": "^3.23.8" } }, "sha512-vNab/6BYUQCfmfhGc3G61EcatQxvh2d41FDWqR8CAYsblNXO6nOEVXn7cXdQUkb3K49LU0vy5Jf1+wFNcpY3IQ=="], 166 + "@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=="], 163 167 164 168 "@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=="], 165 169 ··· 169 173 170 174 "@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=="], 171 175 172 - "@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 176 + "@atproto/syntax": ["@atproto/syntax@0.3.4", "", {}, "sha512-8CNmi5DipOLaVeSMPggMe7FCksVag0aO6XZy9WflbduTKM4dFZVCs4686UeMLfGRXX+X966XgwECHoLYrovMMg=="], 173 177 174 178 "@atproto/ws-client": ["@atproto/ws-client@0.0.4", "", { "dependencies": { "@atproto/common": "^0.5.3", "ws": "^8.12.0" } }, "sha512-dox1XIymuC7/ZRhUqKezIGgooZS45C6vHCfu0PnWjfvsLCK2kAlnvX4IBkA/WpcoijDhQ9ejChnFbo/sLmgvAg=="], 175 179 ··· 1237 1241 1238 1242 "murmurhash": ["murmurhash@2.0.1", "", {}, "sha512-5vQEh3y+DG/lMPM0mCGPDnyV8chYg/g7rl6v3Gd8WMF9S429ox3Xk8qrk174kWhG767KQMqqxLD1WnGd77hiew=="], 1239 1243 1244 + "nanoid": ["nanoid@5.1.9", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-ZUvP7KeBLe3OZ1ypw6dI/TzYJuvHP77IM4Ry73waSQTLn8/g8rpdjfyVAh7t1/+FjBtG4lCP42MEbDxOsRpBMw=="], 1245 + 1240 1246 "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], 1241 1247 1242 1248 "negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], ··· 1345 1351 1346 1352 "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], 1347 1353 1348 - "psl": ["psl@1.15.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w=="], 1349 - 1350 1354 "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], 1351 - 1352 - "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], 1353 1355 1354 1356 "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], 1355 1357 ··· 1551 1553 1552 1554 "yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], 1553 1555 1554 - "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], 1555 - 1556 - "@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=="], 1557 - 1558 - "@atproto-labs/did-resolver/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1559 - 1560 - "@atproto-labs/fetch/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1561 - 1562 - "@atproto-labs/fetch-node/@atproto-labs/fetch": ["@atproto-labs/fetch@0.2.3", "", { "dependencies": { "@atproto-labs/pipe": "0.1.1" } }, "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw=="], 1563 - 1564 - "@atproto-labs/fetch-node/@atproto-labs/pipe": ["@atproto-labs/pipe@0.1.1", "", {}, "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg=="], 1565 - 1566 - "@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=="], 1567 - 1568 - "@atproto-labs/handle-resolver/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1569 - 1570 - "@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=="], 1571 - 1572 - "@atproto-labs/identity-resolver/@atproto/syntax": ["@atproto/syntax@0.3.0", "", {}, "sha512-Weq0ZBxffGHDXHl9U7BQc2BFJi/e23AL+k+i5+D9hUq/bzT4yjGsrCejkjq0xt82xXDjmhhvQSZ0LqxyZ5woxA=="], 1573 - 1574 - "@atproto-labs/simple-store-memory/@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.3.0", "", {}, "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ=="], 1575 - 1576 - "@atproto-labs/simple-store-redis/@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.3.0", "", {}, "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ=="], 1556 + "zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1577 1557 1578 1558 "@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=="], 1579 1559 1580 - "@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=="], 1560 + "@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=="], 1581 1561 1582 - "@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=="], 1562 + "@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=="], 1583 1563 1584 - "@atproto/api/@atproto/syntax": ["@atproto/syntax@0.3.4", "", {}, "sha512-8CNmi5DipOLaVeSMPggMe7FCksVag0aO6XZy9WflbduTKM4dFZVCs4686UeMLfGRXX+X966XgwECHoLYrovMMg=="], 1564 + "@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=="], 1585 1565 1586 - "@atproto/api/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1566 + "@atproto/bsky/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1587 1567 1588 - "@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=="], 1568 + "@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=="], 1589 1569 1590 - "@atproto/bsky/@atproto/did": ["@atproto/did@0.3.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA=="], 1570 + "@atproto/bsync/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1591 1571 1592 - "@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=="], 1572 + "@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=="], 1593 1573 1594 - "@atproto/bsky/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1574 + "@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=="], 1595 1575 1596 - "@atproto/common-web/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1576 + "@atproto/common-web/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], 1597 1577 1598 1578 "@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=="], 1599 1579 1600 - "@atproto/did/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1580 + "@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=="], 1601 1581 1602 - "@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=="], 1582 + "@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=="], 1603 1583 1604 - "@atproto/jwk/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1584 + "@atproto/dev-env/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1605 1585 1606 - "@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=="], 1586 + "@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=="], 1607 1587 1608 - "@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=="], 1588 + "@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=="], 1609 1589 1610 - "@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=="], 1590 + "@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=="], 1611 1591 1612 - "@atproto/lexicon/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1592 + "@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=="], 1613 1593 1614 - "@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=="], 1594 + "@atproto/lex-resolver/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1615 1595 1616 - "@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=="], 1596 + "@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=="], 1617 1597 1618 - "@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=="], 1598 + "@atproto/lex-schema/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1619 1599 1620 - "@atproto/oauth-client/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1621 - 1622 - "@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=="], 1623 - 1624 - "@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=="], 1625 - 1626 - "@atproto/oauth-provider/@atproto-labs/fetch": ["@atproto-labs/fetch@0.2.3", "", { "dependencies": { "@atproto-labs/pipe": "0.1.1" } }, "sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw=="], 1627 - 1628 - "@atproto/oauth-provider/@atproto-labs/pipe": ["@atproto-labs/pipe@0.1.1", "", {}, "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg=="], 1629 - 1630 - "@atproto/oauth-provider/@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.3.0", "", {}, "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ=="], 1631 - 1632 - "@atproto/oauth-provider/@atproto/did": ["@atproto/did@0.3.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA=="], 1600 + "@atproto/lexicon/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], 1633 1601 1634 - "@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=="], 1602 + "@atproto/oauth-provider/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1635 1603 1636 1604 "@atproto/oauth-provider/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], 1637 - 1638 - "@atproto/oauth-provider/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1639 1605 1640 1606 "@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=="], 1641 1607 1642 - "@atproto/oauth-scopes/@atproto/did": ["@atproto/did@0.3.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA=="], 1608 + "@atproto/oauth-scopes/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1643 1609 1644 - "@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=="], 1610 + "@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=="], 1645 1611 1646 - "@atproto/oauth-types/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1612 + "@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=="], 1647 1613 1648 - "@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=="], 1614 + "@atproto/ozone/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1649 1615 1650 1616 "@atproto/ozone/@atproto/xrpc": ["@atproto/xrpc@0.7.7", "", { "dependencies": { "@atproto/lexicon": "^0.6.0", "zod": "^3.23.8" } }, "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA=="], 1651 1617 1652 1618 "@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=="], 1653 1619 1654 - "@atproto/pds/@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.3.0", "", {}, "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ=="], 1620 + "@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=="], 1621 + 1622 + "@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=="], 1655 1623 1656 - "@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=="], 1624 + "@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=="], 1625 + 1626 + "@atproto/pds/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1657 1627 1658 1628 "@atproto/pds/@atproto/xrpc": ["@atproto/xrpc@0.7.7", "", { "dependencies": { "@atproto/lexicon": "^0.6.0", "zod": "^3.23.8" } }, "sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA=="], 1659 1629 ··· 1663 1633 1664 1634 "@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=="], 1665 1635 1666 - "@atproto/pds/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1636 + "@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=="], 1667 1637 1668 - "@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=="], 1638 + "@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=="], 1669 1639 1670 - "@atproto/repo/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1640 + "@atproto/sync/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1671 1641 1672 1642 "@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=="], 1673 1643 1674 1644 "@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=="], 1675 1645 1676 - "@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=="], 1646 + "@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=="], 1647 + 1648 + "@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=="], 1677 1649 1678 - "@atproto/xrpc/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1650 + "@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=="], 1679 1651 1680 1652 "@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=="], 1681 1653 ··· 1692 1664 "@did-plc/lib/@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=="], 1693 1665 1694 1666 "@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=="], 1695 - 1696 - "@did-plc/lib/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1697 1667 1698 1668 "@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=="], 1699 1669 ··· 1737 1707 1738 1708 "ioredis/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], 1739 1709 1710 + "knip/zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], 1711 + 1740 1712 "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], 1741 1713 1742 1714 "proxy-addr/ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], ··· 1763 1735 1764 1736 "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], 1765 1737 1766 - "@atproto-labs/xrpc-utils/@atproto/xrpc/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1738 + "@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=="], 1767 1739 1768 - "@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=="], 1740 + "@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=="], 1769 1741 1770 - "@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=="], 1742 + "@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=="], 1771 1743 1772 - "@atproto/api/@atproto/common-web/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], 1744 + "@atproto/aws/@atproto/common-web/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1773 1745 1774 - "@atproto/api/@atproto/lexicon/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], 1746 + "@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=="], 1775 1747 1776 1748 "@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=="], 1749 + 1750 + "@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=="], 1777 1751 1778 1752 "@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=="], 1779 1753 ··· 1813 1787 1814 1788 "@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=="], 1815 1789 1816 - "@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=="], 1790 + "@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=="], 1817 1791 1818 - "@atproto/dev-env/@atproto/api/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1792 + "@atproto/common/@atproto/common-web/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1819 1793 1820 - "@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=="], 1794 + "@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=="], 1821 1795 1822 - "@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=="], 1796 + "@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=="], 1823 1797 1824 - "@atproto/identity/@atproto/common-web/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], 1825 - 1826 - "@atproto/identity/@atproto/common-web/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1827 - 1828 - "@atproto/jwk-webcrypto/@atproto/jwk/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1798 + "@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=="], 1829 1799 1830 - "@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=="], 1800 + "@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=="], 1831 1801 1832 - "@atproto/lex-resolver/@atproto-labs/did-resolver/@atproto-labs/pipe": ["@atproto-labs/pipe@0.1.1", "", {}, "sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg=="], 1802 + "@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=="], 1833 1803 1834 - "@atproto/lex-resolver/@atproto-labs/did-resolver/@atproto-labs/simple-store": ["@atproto-labs/simple-store@0.3.0", "", {}, "sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ=="], 1804 + "@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=="], 1835 1805 1836 - "@atproto/lex-resolver/@atproto-labs/did-resolver/@atproto/did": ["@atproto/did@0.3.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA=="], 1837 - 1838 - "@atproto/lex-resolver/@atproto-labs/did-resolver/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1839 - 1840 - "@atproto/oauth-client-node/@atproto/jwk/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1841 - 1842 - "@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=="], 1843 - 1844 - "@atproto/oauth-provider-api/@atproto/oauth-types/@atproto/did": ["@atproto/did@0.3.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA=="], 1845 - 1846 - "@atproto/oauth-provider-api/@atproto/oauth-types/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1847 - 1848 - "@atproto/oauth-scopes/@atproto/did/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1849 - 1850 - "@atproto/ozone/@atproto/api/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1851 - 1852 - "@atproto/ozone/@atproto/xrpc/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1806 + "@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=="], 1853 1807 1854 1808 "@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=="], 1855 1809 ··· 1859 1813 1860 1814 "@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=="], 1861 1815 1862 - "@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=="], 1816 + "@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=="], 1863 1817 1864 - "@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=="], 1818 + "@atproto/repo/@atproto/lexicon/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1865 1819 1866 - "@atproto/repo/@atproto/common-web/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], 1820 + "@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=="], 1867 1821 1868 - "@atproto/xrpc-server/@atproto/xrpc/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1822 + "@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=="], 1869 1823 1870 - "@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=="], 1871 - 1872 - "@atproto/xrpc/@atproto/lexicon/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], 1824 + "@atproto/xrpc-server/@atproto/lexicon/@atproto/syntax": ["@atproto/syntax@0.5.0", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-UA2DSpGdOQzUQ4gi5SH+NEJz/YR3a3Fg3y2oh+xETDSiTRmA4VhHRCojhXAVsBxUT6EnItw190C/KN+DWW90kw=="], 1873 1825 1874 1826 "@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=="], 1875 1827 1876 1828 "@aws-crypto/sha256-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 1829 1878 1830 "@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=="], 1879 - 1880 - "@did-plc/server/@atproto/common/zod": ["zod@3.23.8", "", {}, "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g=="], 1881 1831 1882 1832 "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], 1883 1833 ··· 1897 1847 1898 1848 "wrap-ansi/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], 1899 1849 1900 - "@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=="], 1850 + "@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=="], 1901 1851 1902 - "@atproto/oauth-client/@atproto/xrpc/@atproto/lexicon/@atproto/syntax": ["@atproto/syntax@0.4.3", "", { "dependencies": { "tslib": "^2.8.1" } }, "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA=="], 1852 + "@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=="], 1903 1853 1904 - "@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=="], 1854 + "@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=="], 1905 1855 1906 - "@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=="], 1856 + "@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=="], 1857 + 1858 + "@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=="], 1859 + 1860 + "@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=="], 1861 + 1862 + "@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=="], 1863 + 1864 + "@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=="], 1865 + 1866 + "@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=="], 1867 + 1868 + "@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=="], 1869 + 1870 + "@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=="], 1871 + 1872 + "@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=="], 1873 + 1874 + "@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=="], 1875 + 1876 + "@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=="], 1877 + 1878 + "@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=="], 1879 + 1880 + "@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=="], 1907 1881 1908 1882 "@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=="], 1909 1883 ··· 1911 1885 1912 1886 "@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=="], 1913 1887 1914 - "@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=="], 1888 + "@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=="], 1915 1889 1916 - "@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=="], 1890 + "@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=="], 1917 1891 } 1918 1892 }
+1 -2
deploy/deploy.sh
··· 34 34 --rsync-path="sudo rsync" \ 35 35 ./ "${VPS}:${APP_DIR}/" 36 36 37 - log "==> Installing deps + patching jose for Bun" 37 + log "==> Installing deps" 38 38 ssh "$VPS" " 39 39 sudo chown -R lichen:lichen ${APP_DIR} 40 40 sudo -u lichen bash -c 'cd ${APP_DIR} && bun install --production' 41 - sudo sed -i 's|\"bun\": \"./dist/browser/|\"bun\": \"./dist/node/esm/|g' ${APP_DIR}/node_modules/jose/package.json 42 41 " 43 42 44 43 log "==> Updating config files"
-1
knip.config.ts
··· 12 12 "better-sqlite3", 13 13 "tailwindcss", 14 14 "@tailwindcss/typography", 15 - "jose", // transitive dep of @atproto/jwk-jose, imported directly for Bun compatibility workaround 16 15 ], 17 16 includeEntryExports: true, 18 17 treatConfigHintsAsErrors: true,
+5 -3
package.json
··· 24 24 "dev:editor": "bun build public/editor/editor.ts --outfile public/editor/dist.js --watch" 25 25 }, 26 26 "devDependencies": { 27 + "@atproto/api": "^0.13.0", 27 28 "@atproto/dev-env": "0.3.213", 28 29 "@atproto/identity": "^0.4.12", 29 30 "@atproto/sync": "^0.1.40", ··· 52 53 "@atproto-labs/handle-resolver/zod": "3.23.8" 53 54 }, 54 55 "dependencies": { 56 + "@atcute/atproto": "^3.1.11", 55 57 "@atcute/cid": "^2.4.1", 58 + "@atcute/client": "^4.2.1", 56 59 "@atcute/identity-resolver": "^1.2.2", 57 60 "@atcute/identity-resolver-node": "^1.0.3", 58 61 "@atcute/jetstream": "^1.1.2", 59 62 "@atcute/lexicons": "^1.3.0", 63 + "@atcute/oauth-node-client": "^1.1.0", 64 + "@atcute/password-session": "^0.1.0", 60 65 "@atcute/tid": "^1.1.2", 61 - "@atproto/api": "^0.13.0", 62 - "@atproto/jwk-jose": "^0.1.0", 63 - "@atproto/oauth-client-node": "^0.1.0", 64 66 "@codemirror/lang-markdown": "^6.5.0", 65 67 "@codemirror/state": "^6.0.0", 66 68 "@elysiajs/static": "^1.4.7",
+80 -48
src/atproto/client.ts
··· 1 1 import { readFileSync } from "node:fs"; 2 - import { JoseKey } from "@atproto/jwk-jose"; 3 2 import { 4 - NodeOAuthClient, 5 - type NodeSavedSession, 6 - type NodeSavedState, 7 - } from "@atproto/oauth-client-node"; 3 + CompositeDidDocumentResolver, 4 + CompositeHandleResolver, 5 + LocalActorResolver, 6 + PlcDidDocumentResolver, 7 + WebDidDocumentResolver, 8 + WellKnownHandleResolver, 9 + } from "@atcute/identity-resolver"; 10 + import { NodeDnsHandleResolver } from "@atcute/identity-resolver-node"; 11 + import type { Store } from "@atcute/oauth-node-client"; 12 + import { 13 + importClientAssertionPkcs8, 14 + OAuthClient, 15 + type StoredSession, 16 + type StoredState, 17 + } from "@atcute/oauth-node-client"; 8 18 import { OAUTH_SCOPE } from "../lib/constants.ts"; 9 19 import { getDb } from "../server/db/index.ts"; 10 20 import type { AtprotoEnv } from "./env.ts"; 11 - 12 - // Re-use jose from @atproto/jwk-jose's dependency (avoid knip unlisted dep warning) 13 - // biome-ignore lint/suspicious/noExplicitAny: accessing transitive jose exports 14 - const jose: any = await import("jose"); 21 + import { getDevPlcUrl } from "./env.ts"; 15 22 16 - class SqliteSessionStore { 17 - get(did: string): NodeSavedSession | undefined { 23 + class SqliteSessionStore implements Store<string, StoredSession> { 24 + get(did: string): StoredSession | undefined { 18 25 const db = getDb(); 19 26 const row = db 20 27 .query("SELECT session_data FROM oauth_sessions WHERE did = ?") 21 28 .get(did) as { session_data: string } | null; 22 29 if (!row) return undefined; 23 - return JSON.parse(row.session_data) as NodeSavedSession; 30 + try { 31 + return JSON.parse(row.session_data) as StoredSession; 32 + } catch { 33 + return undefined; 34 + } 24 35 } 25 36 26 - set(did: string, session: NodeSavedSession): void { 37 + set(did: string, session: StoredSession): void { 27 38 const db = getDb(); 28 39 db.run( 29 40 `INSERT INTO oauth_sessions (did, session_data, updated_at) ··· 33 44 ); 34 45 } 35 46 36 - del(did: string): void { 47 + delete(did: string): void { 37 48 const db = getDb(); 38 49 db.run("DELETE FROM oauth_sessions WHERE did = ?", [did]); 39 50 } 51 + 52 + clear(): void { 53 + const db = getDb(); 54 + db.run("DELETE FROM oauth_sessions"); 55 + } 40 56 } 41 57 42 - class SqliteStateStore { 43 - get(key: string): NodeSavedState | undefined { 58 + class SqliteStateStore implements Store<string, StoredState> { 59 + get(key: string): StoredState | undefined { 44 60 const db = getDb(); 45 61 const row = db 46 62 .query("SELECT state_data FROM oauth_state WHERE key = ?") 47 63 .get(key) as { state_data: string } | null; 48 64 if (!row) return undefined; 49 - return JSON.parse(row.state_data) as NodeSavedState; 65 + try { 66 + return JSON.parse(row.state_data) as StoredState; 67 + } catch { 68 + return undefined; 69 + } 50 70 } 51 71 52 - set(key: string, state: NodeSavedState): void { 72 + set(key: string, state: StoredState): void { 53 73 const db = getDb(); 54 74 db.run( 55 75 `INSERT INTO oauth_state (key, state_data, created_at) ··· 59 79 ); 60 80 } 61 81 62 - del(key: string): void { 82 + delete(key: string): void { 63 83 const db = getDb(); 64 84 db.run("DELETE FROM oauth_state WHERE key = ?", [key]); 65 85 } 86 + 87 + clear(): void { 88 + const db = getDb(); 89 + db.run("DELETE FROM oauth_state"); 90 + } 66 91 } 67 92 68 - export async function createOAuthClient( 69 - env: AtprotoEnv, 70 - ): Promise<NodeOAuthClient> { 71 - const privateKeyPem = readFileSync(env.privateKeyPath, "utf-8"); 72 - const keyLike = await jose.importPKCS8(privateKeyPem, "ES256", { 73 - extractable: true, 93 + function buildActorResolver(): LocalActorResolver { 94 + const plcUrl = getDevPlcUrl(); 95 + return new LocalActorResolver({ 96 + handleResolver: new CompositeHandleResolver({ 97 + methods: { 98 + dns: new NodeDnsHandleResolver(), 99 + http: new WellKnownHandleResolver(), 100 + }, 101 + }), 102 + didDocumentResolver: new CompositeDidDocumentResolver({ 103 + methods: { 104 + plc: new PlcDidDocumentResolver( 105 + plcUrl ? { apiUrl: plcUrl } : undefined, 106 + ), 107 + web: new WebDidDocumentResolver(), 108 + }, 109 + }), 74 110 }); 75 - const jwk = await jose.exportJWK(keyLike); 76 - jwk.alg = "ES256"; 77 - jwk.kid = "lichen-key-1"; 78 - jwk.key_ops = ["sign"]; 79 - const key = await JoseKey.fromJWK(jwk as Record<string, unknown>); 80 - // Workaround: fromJWK strips "use" from private keys and converts to key_ops, 81 - // but the oauth-client keyset lookup filters by use: "sig". Patch it back. 82 - Object.defineProperty(key, "use", { get: () => "sig" }); 111 + } 83 112 84 - const url = env.publicUrl; 113 + export async function createOAuthClient(env: AtprotoEnv): Promise<OAuthClient> { 114 + // Convert PEM (PKCS#8 ES256) → JWK in-memory at load. 115 + // Future: store the key as a JWK file directly and skip this step 116 + // (requires generating + persisting a fresh JWK and wiping oauth_sessions). 117 + const pem = readFileSync(env.privateKeyPath, "utf-8"); 118 + const privateJwk = await importClientAssertionPkcs8(pem, { 119 + kid: "lichen-key-1", 120 + alg: "ES256", 121 + }); 85 122 86 - const client = new NodeOAuthClient({ 87 - clientMetadata: { 123 + const url = env.publicUrl; 124 + return new OAuthClient({ 125 + metadata: { 88 126 client_id: `${url}/client-metadata.json`, 89 127 client_name: "Lichen", 90 128 client_uri: url, 91 129 jwks_uri: `${url}/jwks.json`, 92 130 redirect_uris: [`${url}/atproto-oauth-callback`], 93 - grant_types: ["authorization_code", "refresh_token"], 94 - response_types: ["code"], 95 131 scope: OAUTH_SCOPE, 96 - token_endpoint_auth_method: "private_key_jwt", 97 - token_endpoint_auth_signing_alg: "ES256", 98 - application_type: "web", 99 - dpop_bound_access_tokens: true, 100 132 }, 101 - // biome-ignore lint/suspicious/noExplicitAny: JoseKey type mismatch with NodeOAuthClient keyset 102 - keyset: [key] as any, 103 - stateStore: new SqliteStateStore(), 104 - sessionStore: new SqliteSessionStore(), 133 + keyset: [privateJwk], 134 + stores: { 135 + sessions: new SqliteSessionStore(), 136 + states: new SqliteStateStore(), 137 + }, 138 + actorResolver: buildActorResolver(), 105 139 }); 106 - 107 - return client; 108 140 }
+37 -27
src/atproto/pds.ts
··· 1 - import type { Agent } from "@atproto/api"; 1 + import type { Client } from "@atcute/client"; 2 + import { ok } from "@atcute/client"; 3 + import type { Did, Nsid } from "@atcute/lexicons/syntax"; 2 4 import { COLLECTIONS } from "../lib/constants.ts"; 3 5 4 6 interface PdsWriteResult { ··· 14 16 } 15 17 16 18 async function putRecord( 17 - agent: Agent, 19 + rpc: Client, 18 20 did: string, 19 21 collection: string, 20 22 rkey: string, 21 23 fields: Record<string, unknown>, 22 24 ): Promise<PdsWriteResult> { 23 - const response = await agent.com.atproto.repo.putRecord({ 24 - repo: did, 25 - collection, 26 - rkey, 27 - record: { $type: collection, ...fields }, 28 - }); 29 - return { uri: response.data.uri, cid: response.data.cid }; 25 + const data = await ok( 26 + rpc.post("com.atproto.repo.putRecord", { 27 + input: { 28 + repo: did as Did, 29 + collection: collection as Nsid, 30 + rkey, 31 + record: { $type: collection, ...fields }, 32 + }, 33 + }), 34 + ); 35 + return { uri: data.uri, cid: data.cid }; 30 36 } 31 37 32 38 export function writeWikiRecord( 33 - agent: Agent, 39 + rpc: Client, 34 40 did: string, 35 41 slug: string, 36 42 name: string, ··· 46 52 createdAt, 47 53 }; 48 54 if (description) fields["description"] = description; 49 - return putRecord(agent, did, COLLECTIONS.wiki, slug, fields); 55 + return putRecord(rpc, did, COLLECTIONS.wiki, slug, fields); 50 56 } 51 57 52 58 export function writeNoteRecord( 53 - agent: Agent, 59 + rpc: Client, 54 60 did: string, 55 61 tid: string, 56 62 slug: string, ··· 58 64 wikiRef: string, 59 65 createdAt: string, 60 66 ): Promise<PdsWriteResult> { 61 - return putRecord(agent, did, COLLECTIONS.note, tid, { 67 + return putRecord(rpc, did, COLLECTIONS.note, tid, { 62 68 slug, 63 69 title, 64 70 wikiRef, ··· 67 73 } 68 74 69 75 export function writeRevisionRecord( 70 - agent: Agent, 76 + rpc: Client, 71 77 did: string, 72 78 tid: string, 73 79 noteRef: string, ··· 87 93 if (message) fields["message"] = message; 88 94 if (blobs && blobs.length > 0) fields["blobs"] = blobs; 89 95 90 - return putRecord(agent, did, COLLECTIONS.noteRevision, tid, fields); 96 + return putRecord(rpc, did, COLLECTIONS.noteRevision, tid, fields); 91 97 } 92 98 93 99 export function writeMembershipRecord( 94 - agent: Agent, 100 + rpc: Client, 95 101 did: string, 96 102 tid: string, 97 103 memberDid: string, ··· 99 105 role: "admin" | "contributor" | "viewer", 100 106 createdAt: string, 101 107 ): Promise<PdsWriteResult> { 102 - return putRecord(agent, did, COLLECTIONS.membership, tid, { 108 + return putRecord(rpc, did, COLLECTIONS.membership, tid, { 103 109 memberDid, 104 110 wikiRef, 105 111 role, ··· 108 114 } 109 115 110 116 export function writeMemberRequestRecord( 111 - agent: Agent, 117 + rpc: Client, 112 118 did: string, 113 119 tid: string, 114 120 wikiRef: string, 115 121 createdAt: string, 116 122 ): Promise<PdsWriteResult> { 117 - return putRecord(agent, did, COLLECTIONS.memberRequest, tid, { 123 + return putRecord(rpc, did, COLLECTIONS.memberRequest, tid, { 118 124 wikiRef, 119 125 createdAt, 120 126 }); 121 127 } 122 128 123 129 export function writeBookmarkRecord( 124 - agent: Agent, 130 + rpc: Client, 125 131 did: string, 126 132 tid: string, 127 133 wikiRef: string, 128 134 createdAt: string, 129 135 ): Promise<PdsWriteResult> { 130 - return putRecord(agent, did, COLLECTIONS.bookmark, tid, { 136 + return putRecord(rpc, did, COLLECTIONS.bookmark, tid, { 131 137 wikiRef, 132 138 createdAt, 133 139 }); 134 140 } 135 141 136 142 export async function deleteRecord( 137 - agent: Agent, 143 + rpc: Client, 138 144 did: string, 139 145 collection: string, 140 146 rkey: string, 141 147 ): Promise<void> { 142 - await agent.com.atproto.repo.deleteRecord({ 143 - repo: did, 144 - collection, 145 - rkey, 146 - }); 148 + await ok( 149 + rpc.post("com.atproto.repo.deleteRecord", { 150 + input: { 151 + repo: did as Did, 152 + collection: collection as Nsid, 153 + rkey, 154 + }, 155 + }), 156 + ); 147 157 }
+9 -19
src/atproto/routes.ts
··· 1 + import type { ActorIdentifier } from "@atcute/lexicons"; 1 2 import { Elysia } from "elysia"; 2 - import { OAUTH_SCOPE } from "../lib/constants.ts"; 3 3 import { escapeHtml } from "../lib/html.ts"; 4 4 import { fmt, resolveLocale, t } from "../lib/i18n/index.ts"; 5 5 import { LIMITS } from "../lib/limits.ts"; 6 6 import { getClientIp, rateLimit } from "../lib/rate-limit.ts"; 7 7 import { htmlResponse } from "../lib/response.ts"; 8 8 import { loginPage } from "../views/login.ts"; 9 - import { getDevAccounts, getDevPdsUrl, getHandleResolverUrl } from "./env.ts"; 9 + import { getDevAccounts, getDevPdsUrl } from "./env.ts"; 10 10 import { getClient } from "./session.ts"; 11 11 12 12 function getSafeReturnTo(cookieHeader: string | null): string { ··· 15 15 return raw?.startsWith("/") && !raw.includes("//") ? raw : "/"; 16 16 } 17 17 18 - async function resolveHandle(handle: string): Promise<string> { 19 - const base = getHandleResolverUrl(); 20 - const resp = await fetch( 21 - `${base}/xrpc/com.atproto.identity.resolveHandle?handle=${encodeURIComponent(handle)}`, 22 - ); 23 - if (!resp.ok) { 24 - throw new Error(`Failed to resolve handle: ${handle}`); 25 - } 26 - const data = (await resp.json()) as { did: string }; 27 - return data.did; 28 - } 29 - 30 18 export function atprotoRoutes() { 31 19 const app = new Elysia() 32 20 .get("/client-metadata.json", async () => { ··· 34 22 if (!client) { 35 23 return new Response("OAuth not configured", { status: 503 }); 36 24 } 37 - return new Response(JSON.stringify(client.clientMetadata), { 25 + return new Response(JSON.stringify(client.metadata), { 38 26 headers: { "Content-Type": "application/json" }, 39 27 }); 40 28 }) ··· 96 84 } 97 85 98 86 try { 99 - const did = await resolveHandle(handle); 100 - const authUrl = await client.authorize(did, { 101 - scope: OAUTH_SCOPE, 87 + const { url } = await client.authorize({ 88 + target: { 89 + type: "account", 90 + identifier: handle as ActorIdentifier, 91 + }, 102 92 }); 103 - return Response.redirect(authUrl.toString()); 93 + return Response.redirect(url.toString()); 104 94 } catch { 105 95 return htmlResponse( 106 96 loginPage({
+19 -22
src/atproto/session.ts
··· 1 - import { Agent, AtpAgent } from "@atproto/api"; 2 - import type { NodeOAuthClient, OAuthSession } from "@atproto/oauth-client-node"; 1 + import { Client } from "@atcute/client"; 2 + import type { Did } from "@atcute/lexicons/syntax"; 3 + import type { OAuthClient, OAuthSession } from "@atcute/oauth-node-client"; 4 + import { PasswordSession } from "@atcute/password-session"; 3 5 import { resolveProfile } from "../lib/profile.ts"; 4 6 import { createOAuthClient } from "./client.ts"; 5 7 import { getAtprotoEnv, getDevAccounts, getDevPdsUrl } from "./env.ts"; ··· 11 13 } 12 14 13 15 async function getSession( 14 - client: NodeOAuthClient, 16 + client: OAuthClient, 15 17 cookieHeader: string | undefined, 16 18 ): Promise<Session | null> { 17 19 if (!cookieHeader) return null; ··· 22 24 const did = decodeURIComponent(didMatch[1]); 23 25 24 26 try { 25 - const oauthSession = await client.restore(did); 27 + const oauthSession = await client.restore(did as Did); 26 28 const profile = await resolveProfile(did); 27 29 return { did, handle: profile.handle ?? did, oauthSession }; 28 30 } catch { ··· 32 34 33 35 /** 34 36 * Get a dev-mode session from the DID cookie when OAuth is not configured. 35 - * Returns a Session without oauthSession — use createAgent() to get an 36 - * agent that authenticates via app password against the dev PDS. 37 + * Returns a Session without oauthSession — use getAgent() to get an 38 + * authenticated client that uses an app-password session against the dev PDS. 37 39 */ 38 40 function getDevSession(cookieHeader: string | undefined): Session | null { 39 41 if (!cookieHeader) return null; ··· 52 54 } 53 55 54 56 /** 55 - * Get a fully authenticated agent for the session. 57 + * Get an RPC client authenticated for the session. 56 58 * In production: wraps the OAuth session. 57 - * In dev-full mode (no oauthSession): logs in with app password. 58 - * Use this in orchestrators instead of createAgent(). 59 + * In dev-full mode (no oauthSession): logs in with the configured app password. 59 60 */ 60 - export async function getAgent(session: Session): Promise<Agent> { 61 + export async function getAgent(session: Session): Promise<Client> { 61 62 if (session.oauthSession) { 62 - return new Agent(session.oauthSession); 63 + return new Client({ handler: session.oauthSession }); 63 64 } 64 - return loginDevAgent(session); 65 + return loginDevClient(session); 65 66 } 66 67 67 - /** 68 - * Create and log in a dev-mode agent. Use this instead of createAgent() 69 - * when in dev mode (session.oauthSession is undefined). 70 - */ 71 - async function loginDevAgent(session: Session): Promise<Agent> { 68 + async function loginDevClient(session: Session): Promise<Client> { 72 69 const devPdsUrl = getDevPdsUrl(); 73 70 if (!devPdsUrl) { 74 71 throw new Error("DEV_PDS_URL not configured"); ··· 84 81 throw new Error(`No dev account for DID: ${session.did}`); 85 82 } 86 83 87 - const agent = new AtpAgent({ service: devPdsUrl }); 88 - await agent.login({ 84 + const passwordSession = await PasswordSession.login({ 85 + service: devPdsUrl, 89 86 identifier: account.handle, 90 87 password: account.password, 91 88 }); 92 - return agent as unknown as Agent; 89 + return new Client({ handler: passwordSession }); 93 90 } 94 91 95 - let oauthClient: NodeOAuthClient | null = null; 92 + let oauthClient: OAuthClient | null = null; 96 93 97 - export async function getClient(): Promise<NodeOAuthClient | null> { 94 + export async function getClient(): Promise<OAuthClient | null> { 98 95 if (oauthClient) return oauthClient; 99 96 const env = getAtprotoEnv(); 100 97 if (!env) return null;
+9 -5
src/lib/import-export/import.ts
··· 1 + import { ok } from "@atcute/client"; 1 2 import * as TID from "@atcute/tid"; 2 3 import { writeNoteRecord, writeRevisionRecord } from "../../atproto/pds.ts"; 3 4 import type { getAgent } from "../../atproto/session.ts"; ··· 114 115 Buffer.from(image.data), 115 116 image.mimeType, 116 117 ); 117 - const response = await agent.com.atproto.repo.uploadBlob(processed.data, { 118 - encoding: processed.mimeType, 119 - }); 120 - const cid = response.data.blob.ref.toString(); 118 + const result = await ok( 119 + agent.post("com.atproto.repo.uploadBlob", { 120 + input: processed.data, 121 + headers: { "content-type": processed.mimeType }, 122 + }), 123 + ); 124 + const cid = result.blob.ref.$link; 121 125 const blobUrl = `/blob/${did}/${cid}`; 122 126 imageMap.set(image.filename, blobUrl); 123 127 blobMeta[cid] = { 124 128 mimeType: processed.mimeType, 125 - size: response.data.blob.size, 129 + size: result.blob.size, 126 130 }; 127 131 } catch { 128 132 // Skip images that fail validation/upload — they'll remain as broken refs
+10 -6
src/server/routes/blob.ts
··· 1 1 import { existsSync, mkdirSync } from "node:fs"; 2 2 import { join, resolve } from "node:path"; 3 + import { ok } from "@atcute/client"; 3 4 import { Elysia } from "elysia"; 4 5 import { isAuthEnabled } from "../../atproto/env.ts"; 5 6 import { getAgent } from "../../atproto/session.ts"; ··· 66 67 67 68 if (session) { 68 69 // ATProto mode: upload to PDS 69 - const agent = await getAgent(session); 70 - const response = await agent.com.atproto.repo.uploadBlob(processed.data, { 71 - encoding: processed.mimeType, 72 - }); 73 - const cid = response.data.blob.ref.toString(); 70 + const rpc = await getAgent(session); 71 + const result = await ok( 72 + rpc.post("com.atproto.repo.uploadBlob", { 73 + input: processed.data, 74 + headers: { "content-type": processed.mimeType }, 75 + }), 76 + ); 77 + const cid = result.blob.ref.$link; 74 78 return new Response( 75 79 JSON.stringify({ 76 80 url: `/blob/${session.did}/${cid}`, 77 81 cid, 78 82 mimeType: processed.mimeType, 79 - size: response.data.blob.size, 83 + size: result.blob.size, 80 84 }), 81 85 { headers: { "Content-Type": "application/json" } }, 82 86 );
+72 -73
tests/atproto/pds.test.ts
··· 1 1 import { describe, expect, mock, test } from "bun:test"; 2 2 import { COLLECTIONS } from "../../src/lib/constants.ts"; 3 3 4 - // Mock agent that records calls to putRecord and deleteRecord 5 - function createMockAgent() { 6 - const putRecordCalls: unknown[][] = []; 7 - const deleteRecordCalls: unknown[][] = []; 4 + interface RecordedCall { 5 + method: string; 6 + input: Record<string, unknown>; 7 + } 8 8 9 + // Mock atcute Client.post — records calls and returns a synthetic success response. 10 + function createMockClient() { 11 + const calls: RecordedCall[] = []; 12 + const response = { 13 + ok: true as const, 14 + status: 200, 15 + headers: new Headers(), 16 + data: { 17 + uri: "at://did:plc:test/collection/rkey", 18 + cid: "bafyrei-test-cid", 19 + }, 20 + }; 9 21 return { 10 - agent: { 11 - com: { 12 - atproto: { 13 - repo: { 14 - putRecord: mock(async (input: unknown) => { 15 - putRecordCalls.push([input]); 16 - return { 17 - data: { 18 - uri: "at://did:plc:test/collection/rkey", 19 - cid: "bafyrei-test-cid", 20 - }, 21 - }; 22 - }), 23 - deleteRecord: mock(async (input: unknown) => { 24 - deleteRecordCalls.push([input]); 25 - }), 26 - }, 22 + client: { 23 + post: mock( 24 + async (method: string, options: { input: Record<string, unknown> }) => { 25 + calls.push({ method, input: options.input }); 26 + return response; 27 27 }, 28 - }, 28 + ), 29 29 } as never, 30 - putRecordCalls, 31 - deleteRecordCalls, 30 + calls, 32 31 }; 33 32 } 34 33 ··· 47 46 48 47 describe("PDS write functions — contract tests", () => { 49 48 test("writeWikiRecord passes correct collection and fields", async () => { 50 - const { agent, putRecordCalls } = createMockAgent(); 49 + const { client, calls } = createMockClient(); 51 50 52 51 const result = await writeWikiRecord( 53 - agent, 52 + client, 54 53 DID, 55 54 "my-wiki", 56 55 "My Wiki", ··· 65 64 cid: "bafyrei-test-cid", 66 65 }); 67 66 68 - const call = putRecordCalls[0]?.[0] as Record<string, unknown>; 69 - expect(call["repo"]).toBe(DID); 70 - expect(call["collection"]).toBe(COLLECTIONS.wiki); 71 - expect(call["rkey"]).toBe("my-wiki"); 67 + const method = calls[0]?.method ?? ""; 68 + const input: Record<string, unknown> = calls[0]?.input ?? {}; 69 + expect(method).toBe("com.atproto.repo.putRecord"); 70 + expect(input["repo"]).toBe(DID); 71 + expect(input["collection"]).toBe(COLLECTIONS.wiki); 72 + expect(input["rkey"]).toBe("my-wiki"); 72 73 73 - const record = call["record"] as Record<string, unknown>; 74 + const record = input["record"] as Record<string, unknown>; 74 75 expect(record["$type"]).toBe(COLLECTIONS.wiki); 75 76 expect(record["name"]).toBe("My Wiki"); 76 77 expect(record["visibility"]).toBe("public"); ··· 79 80 }); 80 81 81 82 test("writeWikiRecord omits description when not provided", async () => { 82 - const { agent, putRecordCalls } = createMockAgent(); 83 + const { client, calls } = createMockClient(); 83 84 84 85 await writeWikiRecord( 85 - agent, 86 + client, 86 87 DID, 87 88 "slug", 88 89 "Name", ··· 91 92 "fr", 92 93 ); 93 94 94 - const record = (putRecordCalls[0]?.[0] as Record<string, unknown>)[ 95 - "record" 96 - ] as Record<string, unknown>; 95 + const record = (calls[0]?.input["record"] ?? {}) as Record<string, unknown>; 97 96 expect(record["description"]).toBeUndefined(); 98 97 }); 99 98 100 99 test("writeNoteRecord passes correct collection and fields", async () => { 101 - const { agent, putRecordCalls } = createMockAgent(); 100 + const { client, calls } = createMockClient(); 102 101 103 102 await writeNoteRecord( 104 - agent, 103 + client, 105 104 DID, 106 105 "tid123", 107 106 "my-note", ··· 110 109 TIMESTAMP, 111 110 ); 112 111 113 - const call = putRecordCalls[0]?.[0] as Record<string, unknown>; 114 - expect(call["collection"]).toBe(COLLECTIONS.note); 115 - expect(call["rkey"]).toBe("tid123"); 112 + const input: Record<string, unknown> = calls[0]?.input ?? {}; 113 + expect(input["collection"]).toBe(COLLECTIONS.note); 114 + expect(input["rkey"]).toBe("tid123"); 116 115 117 - const record = call["record"] as Record<string, unknown>; 116 + const record = input["record"] as Record<string, unknown>; 118 117 expect(record["slug"]).toBe("my-note"); 119 118 expect(record["title"]).toBe("My Note"); 120 119 expect(record["wikiRef"]).toBe( ··· 123 122 }); 124 123 125 124 test("writeRevisionRecord passes correct fields", async () => { 126 - const { agent, putRecordCalls } = createMockAgent(); 125 + const { client, calls } = createMockClient(); 127 126 128 127 await writeRevisionRecord( 129 - agent, 128 + client, 130 129 DID, 131 130 "tid456", 132 131 "at://did:plc:test/wiki.lichen.note/tid123", ··· 144 143 ], 145 144 ); 146 145 147 - const call = putRecordCalls[0]?.[0] as Record<string, unknown>; 148 - expect(call["collection"]).toBe(COLLECTIONS.noteRevision); 146 + const input: Record<string, unknown> = calls[0]?.input ?? {}; 147 + expect(input["collection"]).toBe(COLLECTIONS.noteRevision); 149 148 150 - const record = call["record"] as Record<string, unknown>; 149 + const record = input["record"] as Record<string, unknown>; 151 150 expect(record["noteRef"]).toBe("at://did:plc:test/wiki.lichen.note/tid123"); 152 151 expect(record["parentRevision"]).toBe( 153 152 "at://did:plc:test/wiki.lichen.noteRevision/prev", ··· 166 165 }); 167 166 168 167 test("writeRevisionRecord omits optional fields when null/undefined", async () => { 169 - const { agent, putRecordCalls } = createMockAgent(); 168 + const { client, calls } = createMockClient(); 170 169 171 170 await writeRevisionRecord( 172 - agent, 171 + client, 173 172 DID, 174 173 "tid789", 175 174 "at://did:plc:test/wiki.lichen.note/tid123", ··· 179 178 TIMESTAMP, 180 179 ); 181 180 182 - const record = (putRecordCalls[0]?.[0] as Record<string, unknown>)[ 183 - "record" 184 - ] as Record<string, unknown>; 181 + const record = (calls[0]?.input["record"] ?? {}) as Record<string, unknown>; 185 182 expect(record["parentRevision"]).toBeUndefined(); 186 183 expect(record["message"]).toBeUndefined(); 187 184 expect(record["blobs"]).toBeUndefined(); 188 185 }); 189 186 190 187 test("writeMembershipRecord passes correct fields", async () => { 191 - const { agent, putRecordCalls } = createMockAgent(); 188 + const { client, calls } = createMockClient(); 192 189 193 190 await writeMembershipRecord( 194 - agent, 191 + client, 195 192 DID, 196 193 "tid-m1", 197 194 "did:plc:member", ··· 200 197 TIMESTAMP, 201 198 ); 202 199 203 - const call = putRecordCalls[0]?.[0] as Record<string, unknown>; 204 - expect(call["collection"]).toBe(COLLECTIONS.membership); 200 + const input: Record<string, unknown> = calls[0]?.input ?? {}; 201 + expect(input["collection"]).toBe(COLLECTIONS.membership); 205 202 206 - const record = call["record"] as Record<string, unknown>; 203 + const record = input["record"] as Record<string, unknown>; 207 204 expect(record["memberDid"]).toBe("did:plc:member"); 208 205 expect(record["role"]).toBe("contributor"); 209 206 }); 210 207 211 208 test("writeMemberRequestRecord passes correct fields", async () => { 212 - const { agent, putRecordCalls } = createMockAgent(); 209 + const { client, calls } = createMockClient(); 213 210 214 211 await writeMemberRequestRecord( 215 - agent, 212 + client, 216 213 DID, 217 214 "tid-r1", 218 215 "at://did:plc:test/wiki.lichen.wiki/my-wiki", 219 216 TIMESTAMP, 220 217 ); 221 218 222 - const call = putRecordCalls[0]?.[0] as Record<string, unknown>; 223 - expect(call["collection"]).toBe(COLLECTIONS.memberRequest); 219 + const input: Record<string, unknown> = calls[0]?.input ?? {}; 220 + expect(input["collection"]).toBe(COLLECTIONS.memberRequest); 224 221 225 - const record = call["record"] as Record<string, unknown>; 222 + const record = input["record"] as Record<string, unknown>; 226 223 expect(record["wikiRef"]).toBe( 227 224 "at://did:plc:test/wiki.lichen.wiki/my-wiki", 228 225 ); 229 226 }); 230 227 231 228 test("writeBookmarkRecord passes correct fields", async () => { 232 - const { agent, putRecordCalls } = createMockAgent(); 229 + const { client, calls } = createMockClient(); 233 230 234 231 await writeBookmarkRecord( 235 - agent, 232 + client, 236 233 DID, 237 234 "tid-b1", 238 235 "at://did:plc:test/wiki.lichen.wiki/my-wiki", 239 236 TIMESTAMP, 240 237 ); 241 238 242 - const call = putRecordCalls[0]?.[0] as Record<string, unknown>; 243 - expect(call["collection"]).toBe(COLLECTIONS.bookmark); 239 + const input: Record<string, unknown> = calls[0]?.input ?? {}; 240 + expect(input["collection"]).toBe(COLLECTIONS.bookmark); 244 241 245 - const record = call["record"] as Record<string, unknown>; 242 + const record = input["record"] as Record<string, unknown>; 246 243 expect(record["wikiRef"]).toBe( 247 244 "at://did:plc:test/wiki.lichen.wiki/my-wiki", 248 245 ); 249 246 }); 250 247 251 248 test("deleteRecord passes correct arguments", async () => { 252 - const { agent, deleteRecordCalls } = createMockAgent(); 249 + const { client, calls } = createMockClient(); 253 250 254 - await deleteRecord(agent, DID, COLLECTIONS.membership, "rkey123"); 251 + await deleteRecord(client, DID, COLLECTIONS.membership, "rkey123"); 255 252 256 - const call = deleteRecordCalls[0]?.[0] as Record<string, unknown>; 257 - expect(call["repo"]).toBe(DID); 258 - expect(call["collection"]).toBe(COLLECTIONS.membership); 259 - expect(call["rkey"]).toBe("rkey123"); 253 + const method = calls[0]?.method ?? ""; 254 + const input: Record<string, unknown> = calls[0]?.input ?? {}; 255 + expect(method).toBe("com.atproto.repo.deleteRecord"); 256 + expect(input["repo"]).toBe(DID); 257 + expect(input["collection"]).toBe(COLLECTIONS.membership); 258 + expect(input["rkey"]).toBe("rkey123"); 260 259 }); 261 260 });
+6 -6
tests/atproto/session.test.ts
··· 1 1 import { afterAll, beforeAll, describe, expect, mock, test } from "bun:test"; 2 - import type { NodeOAuthClient } from "@atproto/oauth-client-node"; 2 + import type { OAuthClient } from "@atcute/oauth-node-client"; 3 3 4 4 // Mock profile resolution to avoid network calls and return DID as handle 5 5 mock.module("../../src/lib/profile.ts", () => ({ ··· 18 18 const { getDevAccounts } = await import("../../src/atproto/env.ts"); 19 19 20 20 async function getSession( 21 - client: NodeOAuthClient, 21 + client: OAuthClient, 22 22 cookieHeader: string | undefined, 23 23 ): Promise<{ did: string; handle: string; oauthSession?: unknown } | null> { 24 24 if (!cookieHeader) return null; ··· 26 26 if (!didMatch?.[1]) return null; 27 27 const did = decodeURIComponent(didMatch[1]); 28 28 try { 29 - const oauthSession = await client.restore(did); 29 + const oauthSession = await client.restore(did as `did:${string}:${string}`); 30 30 const profile = await resolveProfile(did); 31 31 return { did, handle: profile.handle ?? did, oauthSession }; 32 32 } catch { ··· 48 48 return { did, handle: account.handle }; 49 49 } 50 50 51 - // Minimal mock of NodeOAuthClient for testing cookie parsing 51 + // Minimal mock of OAuthClient for testing cookie parsing 52 52 function createMockClient( 53 53 restoreBehavior: (did: string) => { sub: string } | Error, 54 - ): NodeOAuthClient { 54 + ): OAuthClient { 55 55 return { 56 56 restore: async (did: string) => { 57 57 const result = restoreBehavior(did); 58 58 if (result instanceof Error) throw result; 59 59 return result; 60 60 }, 61 - } as unknown as NodeOAuthClient; 61 + } as unknown as OAuthClient; 62 62 } 63 63 64 64 describe("getSession", () => {
+1
tsconfig.json
··· 3 3 "lib": ["ESNext"], 4 4 "target": "ESNext", 5 5 "module": "Preserve", 6 + "types": ["@atcute/atproto"], 6 7 7 8 // Bundler mode 8 9 "moduleResolution": "bundler",