a tool for shared writing and social publishing

Squashed commit of the following:

commit 187c649dda73d337b84cc79b3bc71c1820aa6f85
Author: Jared Pereira <jared@awarm.space>
Date: Tue May 6 23:49:13 2025 -0400

handle no handle given on oauth login and wire up new button

commit aeb5ecca4d167d22c9021d5cb584fc7ca3b815c0
Author: celine <celine@hyperlink.academy>
Date: Tue May 6 19:20:37 2025 -0400

tweaked login modal to fit bsky login

+209 -123
+3 -2
app/api/oauth/[route]/route.ts
··· 32 32 // Revoke any pending authentication requests if the connection is closed (optional) 33 33 const ac = new AbortController(); 34 34 35 - const url = await client.authorize(handle, { 35 + const url = await client.authorize(handle || "https://bsky.social", { 36 36 scope: "atproto transition:generic", 37 37 signal: ac.signal, 38 38 state: JSON.stringify(state), ··· 46 46 const params = new URLSearchParams(req.url.split("?")[1]); 47 47 console.log(params); 48 48 49 + //TODO remember to reset this to a better default! 49 50 let redirectPath = "/lish"; 50 51 try { 51 52 const { session, state } = await client.callback(params); 52 53 let s: OauthRequestClientState = JSON.parse(state || "{}"); 53 - redirectPath = s.redirect || "/lish"; 54 + redirectPath = s.redirect || "/"; 54 55 let { data: identity } = await supabaseServerClient 55 56 .from("identities") 56 57 .select()
+68 -12
app/login/LoginForm.tsx
··· 6 6 import { loginWithEmailToken } from "actions/login"; 7 7 import { getHomeDocs } from "app/home/storage"; 8 8 import { ButtonPrimary } from "components/Buttons"; 9 - import { InputWithLabel } from "components/Input"; 9 + import { ArrowRightTiny, BlueskySmall } from "components/Icons"; 10 + import { InputWithLabel, Input } from "components/Input"; 10 11 import { useSmoker, useToaster } from "components/Toast"; 11 12 import React, { useState } from "react"; 12 13 import useSWR, { mutate } from "swr"; ··· 84 85 <div className="italic truncate">{formState.email}</div> 85 86 </div> 86 87 <form onSubmit={handleSubmitCode} className="flex flex-col gap-2 "> 87 - <InputWithLabel 88 - label="code" 88 + <Input 89 89 type="text" 90 + className="input-with-border" 90 91 placeholder="000000" 91 92 value={formState.confirmationCode} 92 93 onChange={(e) => ··· 112 113 } 113 114 114 115 return ( 115 - <div className="flex flex-col gap-3 w-full max-w-sm pb-1"> 116 + <div className="flex flex-col gap-3 w-full max-w-xs pb-1"> 116 117 <div className="flex flex-col"> 117 - <h3 className="text-primary">Log In or Sign Up</h3> 118 - <div className=" text-secondary"> 118 + <h4 className="text-primary">Log In or Sign Up</h4> 119 + <div className=" text-tertiary text-sm"> 119 120 Save your Leaflets and access them on multiple devices! 120 121 </div> 121 122 </div> 122 - <form onSubmit={handleSubmitEmail} className="flex flex-col gap-2"> 123 - <InputWithLabel 124 - label="Email" 123 + 124 + <BlueskyLogin /> 125 + 126 + <div className="flex gap-2 text-border italic w-full items-center"> 127 + <hr className="border-border-light w-full" /> 128 + <div>or</div> 129 + <hr className="border-border-light w-full" /> 130 + </div> 131 + <form 132 + onSubmit={handleSubmitEmail} 133 + className="flex flex-col gap-2 relative" 134 + > 135 + <Input 125 136 type="email" 126 137 placeholder="email@example.com" 127 138 value={formState.email} 128 - className="" 139 + className="input-with-border p-7" 129 140 onChange={(e) => 130 141 setFormState({ 131 142 ...formState, ··· 135 146 required 136 147 /> 137 148 138 - <ButtonPrimary type="submit" className="place-self-end"> 139 - Log In / Sign Up 149 + <ButtonPrimary 150 + type="submit" 151 + className="place-self-end !px-[2px] absolute right-1 bottom-1" 152 + > 153 + <ArrowRightTiny />{" "} 140 154 </ButtonPrimary> 141 155 </form> 142 156 </div> 143 157 ); 144 158 } 159 + 160 + function BlueskyLogin() { 161 + const [signingWithHandle, setSigningWithHandle] = useState(false); 162 + const [handle, setHandle] = useState(""); 163 + 164 + return ( 165 + <form action="/api/oauth/login?redirect_url=/" method="GET"> 166 + {signingWithHandle ? ( 167 + <div className="w-full flex flex-col gap-2"> 168 + <Input 169 + type="text" 170 + name="handle" 171 + id="handle" 172 + placeholder="you.bsky.social" 173 + value={handle} 174 + className="input-with-border" 175 + onChange={(e) => setHandle(e.target.value)} 176 + required 177 + /> 178 + <ButtonPrimary type="submit" fullWidth className="py-2"> 179 + <BlueskySmall /> 180 + Sign In 181 + </ButtonPrimary> 182 + </div> 183 + ) : ( 184 + <div className="flex flex-col"> 185 + <ButtonPrimary fullWidth className="py-2"> 186 + <BlueskySmall /> 187 + Log In/Sign Up with Bluesky 188 + </ButtonPrimary> 189 + <button 190 + type="button" 191 + className="text-sm text-tertiary place-self-end mt-1" 192 + onClick={() => setSigningWithHandle(true)} 193 + > 194 + sign in with your handle 195 + </button> 196 + </div> 197 + )} 198 + </form> 199 + ); 200 + }
+17
components/Icons.tsx
··· 325 325 ); 326 326 }; 327 327 328 + export const BlueskySmall = (props: Props) => { 329 + return ( 330 + <svg 331 + width="24" 332 + height="24" 333 + viewBox="0 0 24 24" 334 + fill="none" 335 + xmlns="http://www.w3.org/2000/svg" 336 + > 337 + <path 338 + d="M6.33526 4.21162C8.62822 5.97119 11.0945 9.53887 12.0001 11.4535C12.9056 9.53901 15.3718 5.97116 17.6649 4.21162C19.3193 2.94199 22 1.95962 22 5.08557C22 5.70987 21.6498 10.33 21.4445 11.08C20.7306 13.6878 18.1292 14.3529 15.8152 13.9503C19.86 14.654 20.8889 16.9848 18.6668 19.3156C14.4465 23.7423 12.601 18.205 12.1279 16.7861C11.9998 16.4018 12.0002 16.4018 11.8721 16.7861C11.3993 18.205 9.55378 23.7424 5.33322 19.3156C3.11103 16.9848 4.13995 14.6538 8.18483 13.9503C5.87077 14.3529 3.26934 13.6878 2.55555 11.08C2.35016 10.3299 2 5.7098 2 5.08557C2 1.95962 4.68086 2.94199 6.33526 4.21162Z" 339 + fill="currentColor" 340 + /> 341 + </svg> 342 + ); 343 + }; 344 + 328 345 export const CanvasWidenSmall = (props: Props) => { 329 346 return ( 330 347 <svg
+120 -108
package-lock.json
··· 12 12 "@atproto/api": "^0.14.2", 13 13 "@atproto/common": "^0.4.8", 14 14 "@atproto/identity": "^0.4.6", 15 - "@atproto/oauth-client-node": "^0.2.8", 15 + "@atproto/oauth-client-node": "^0.2.17", 16 16 "@atproto/sync": "^0.1.17", 17 17 "@atproto/syntax": "^0.3.3", 18 18 "@atproto/xrpc": "^0.6.9", ··· 105 105 } 106 106 }, 107 107 "node_modules/@atproto-labs/did-resolver": { 108 - "version": "0.1.8", 109 - "resolved": "https://registry.npmjs.org/@atproto-labs/did-resolver/-/did-resolver-0.1.8.tgz", 110 - "integrity": "sha512-wcbBTu0YsAUCzvKHTuk90ax4+gwj8wlPFY+rR96O7/rtSVjx4xz06Fdri0amAzSoupUeZ7swcZVKDqHD8KB8HA==", 108 + "version": "0.1.12", 109 + "resolved": "https://registry.npmjs.org/@atproto-labs/did-resolver/-/did-resolver-0.1.12.tgz", 110 + "integrity": "sha512-criWN7o21C5TFsauB+bGTlkqqerOU6gT2TbxdQVgZUWqNcfazUmUjT4gJAY02i+O4d3QmZa27fv9CcaRKWkSug==", 111 111 "license": "MIT", 112 112 "dependencies": { 113 - "@atproto-labs/fetch": "0.2.0", 113 + "@atproto-labs/fetch": "0.2.2", 114 114 "@atproto-labs/pipe": "0.1.0", 115 - "@atproto-labs/simple-store": "0.1.1", 116 - "@atproto-labs/simple-store-memory": "0.1.1", 117 - "@atproto/did": "0.1.3", 115 + "@atproto-labs/simple-store": "0.2.0", 116 + "@atproto-labs/simple-store-memory": "0.1.3", 117 + "@atproto/did": "0.1.5", 118 118 "zod": "^3.23.8" 119 119 } 120 120 }, 121 121 "node_modules/@atproto-labs/fetch": { 122 - "version": "0.2.0", 123 - "resolved": "https://registry.npmjs.org/@atproto-labs/fetch/-/fetch-0.2.0.tgz", 124 - "integrity": "sha512-RD8grUzZdQaC+1GwObz6rZ7MKraS77Z72uZNvcqUzQEBc2oF7fTW6BtkI0csJMFkW+qWKlR3YQlZxsZQ4x6H3g==", 122 + "version": "0.2.2", 123 + "resolved": "https://registry.npmjs.org/@atproto-labs/fetch/-/fetch-0.2.2.tgz", 124 + "integrity": "sha512-QyafkedbFeVaN20DYUpnY2hcArYxjdThPXbYMqOSoZhcvkrUqaw4xDND4wZB5TBD9cq2yqe9V6mcw9P4XQKQuQ==", 125 125 "license": "MIT", 126 126 "dependencies": { 127 127 "@atproto-labs/pipe": "0.1.0" 128 - }, 129 - "optionalDependencies": { 130 - "zod": "^3.23.8" 131 128 } 132 129 }, 133 130 "node_modules/@atproto-labs/fetch-node": { 134 - "version": "0.1.6", 135 - "resolved": "https://registry.npmjs.org/@atproto-labs/fetch-node/-/fetch-node-0.1.6.tgz", 136 - "integrity": "sha512-MtisrDQZuBiR3yUyhVqaNrukGTZfZHANG23E1w5t4biz1ONWWSFc1CkqUGOHPJJ7JpjaNbHRf1kfKsMZotQZsQ==", 131 + "version": "0.1.8", 132 + "resolved": "https://registry.npmjs.org/@atproto-labs/fetch-node/-/fetch-node-0.1.8.tgz", 133 + "integrity": "sha512-OOTIhZNPEDDm7kaYU8iYRgzM+D5n3mP2iiBSyKuLakKTaZBL5WwYlUsJVsqX26SnUXtGEroOJEVJ6f66OcG80w==", 137 134 "license": "MIT", 138 135 "dependencies": { 139 - "@atproto-labs/fetch": "0.2.0", 136 + "@atproto-labs/fetch": "0.2.2", 140 137 "@atproto-labs/pipe": "0.1.0", 141 138 "ipaddr.js": "^2.1.0", 142 139 "psl": "^1.9.0", 143 140 "undici": "^6.14.1" 141 + }, 142 + "engines": { 143 + "node": ">=18.7.0" 144 144 } 145 145 }, 146 146 "node_modules/@atproto-labs/handle-resolver": { 147 - "version": "0.1.5", 148 - "resolved": "https://registry.npmjs.org/@atproto-labs/handle-resolver/-/handle-resolver-0.1.5.tgz", 149 - "integrity": "sha512-3Uv5DUswmiUWn0oO3XML7T6RiM8aq+A4lACBRRasegsr6fytxATJE38UiwDmDRWdXxhftnPlmTWfJ2oZ/pqDWQ==", 147 + "version": "0.1.8", 148 + "resolved": "https://registry.npmjs.org/@atproto-labs/handle-resolver/-/handle-resolver-0.1.8.tgz", 149 + "integrity": "sha512-Y0ckccoCGDo/3g4thPkgp9QcORmc+qqEaCBCYCZYtfLIQp4775u22wd+4fyEyJP4DqoReKacninkICgRGfs3dQ==", 150 150 "license": "MIT", 151 151 "dependencies": { 152 - "@atproto-labs/simple-store": "0.1.1", 153 - "@atproto-labs/simple-store-memory": "0.1.1", 154 - "@atproto/did": "0.1.3", 152 + "@atproto-labs/simple-store": "0.2.0", 153 + "@atproto-labs/simple-store-memory": "0.1.3", 154 + "@atproto/did": "0.1.5", 155 155 "zod": "^3.23.8" 156 156 } 157 157 }, 158 158 "node_modules/@atproto-labs/handle-resolver-node": { 159 - "version": "0.1.11", 160 - "resolved": "https://registry.npmjs.org/@atproto-labs/handle-resolver-node/-/handle-resolver-node-0.1.11.tgz", 161 - "integrity": "sha512-Lfm3LgKr1dkHgnd8UX6JvyywflUJpRXQtZwgDXNnj+3nAb8amfDy+mfx0Cu8ym2T2uzEuGRnfmXzLEp7EKbADw==", 159 + "version": "0.1.15", 160 + "resolved": "https://registry.npmjs.org/@atproto-labs/handle-resolver-node/-/handle-resolver-node-0.1.15.tgz", 161 + "integrity": "sha512-krl9KqfCCrGID35VAAHKBIiXOxe3gYxAtOJLYpZc5cOPFwnvPlAdhTYZLIc1dJRKDayi8gh6Q4XZRDv7i8dryg==", 162 162 "license": "MIT", 163 163 "dependencies": { 164 - "@atproto-labs/fetch-node": "0.1.6", 165 - "@atproto-labs/handle-resolver": "0.1.5", 166 - "@atproto/did": "0.1.3" 164 + "@atproto-labs/fetch-node": "0.1.8", 165 + "@atproto-labs/handle-resolver": "0.1.8", 166 + "@atproto/did": "0.1.5" 167 + }, 168 + "engines": { 169 + "node": ">=18.7.0" 167 170 } 168 171 }, 169 172 "node_modules/@atproto-labs/identity-resolver": { 170 - "version": "0.1.10", 171 - "resolved": "https://registry.npmjs.org/@atproto-labs/identity-resolver/-/identity-resolver-0.1.10.tgz", 172 - "integrity": "sha512-V8cwLikQJrrIubZcbS3phiw3FZ4JleZ43EOyGq2pVBRsQgynSIB/tzTTw8UNuKPeqR/iK1CBjevnQJ4ENOr5AQ==", 173 + "version": "0.1.16", 174 + "resolved": "https://registry.npmjs.org/@atproto-labs/identity-resolver/-/identity-resolver-0.1.16.tgz", 175 + "integrity": "sha512-pFrtKT49cYBhCDd2U1t/CcUBiMmQzaNQxh8oSkDUlGs/K3P8rJFTAGAMm8UjokfGEKwF4hX9oo7O8Kn+GkyExw==", 173 176 "license": "MIT", 174 177 "dependencies": { 175 - "@atproto-labs/did-resolver": "0.1.8", 176 - "@atproto-labs/handle-resolver": "0.1.5", 177 - "@atproto/syntax": "0.3.1" 178 + "@atproto-labs/did-resolver": "0.1.12", 179 + "@atproto-labs/handle-resolver": "0.1.8", 180 + "@atproto/syntax": "0.4.0" 178 181 } 179 182 }, 180 183 "node_modules/@atproto-labs/identity-resolver/node_modules/@atproto/syntax": { 181 - "version": "0.3.1", 182 - "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.3.1.tgz", 183 - "integrity": "sha512-fzW0Mg1QUOVCWUD3RgEsDt6d1OZ6DdFmbKcDdbzUfh0t4rhtRAC05KbZYmxuMPWDAiJ4BbbQ5dkAc/mNypMXkw==", 184 + "version": "0.4.0", 185 + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.0.tgz", 186 + "integrity": "sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA==", 184 187 "license": "MIT" 185 188 }, 186 189 "node_modules/@atproto-labs/pipe": { ··· 190 193 "license": "MIT" 191 194 }, 192 195 "node_modules/@atproto-labs/simple-store": { 193 - "version": "0.1.1", 194 - "resolved": "https://registry.npmjs.org/@atproto-labs/simple-store/-/simple-store-0.1.1.tgz", 195 - "integrity": "sha512-WKILW2b3QbAYKh+w5U2x6p5FqqLl0nAeLwGeDY+KjX01K4Dq3vQTR9b/qNp0jZm48CabPQVrqCv0PPU9LgRRRg==", 196 + "version": "0.2.0", 197 + "resolved": "https://registry.npmjs.org/@atproto-labs/simple-store/-/simple-store-0.2.0.tgz", 198 + "integrity": "sha512-0bRbAlI8Ayh03wRwncAMEAyUKtZ+AuTS1jgPrfym1WVOAOiottI/ZmgccqLl6w5MbxVcClNQF7WYGKvGwGoIhA==", 196 199 "license": "MIT" 197 200 }, 198 201 "node_modules/@atproto-labs/simple-store-memory": { 199 - "version": "0.1.1", 200 - "resolved": "https://registry.npmjs.org/@atproto-labs/simple-store-memory/-/simple-store-memory-0.1.1.tgz", 201 - "integrity": "sha512-PCRqhnZ8NBNBvLku53O56T0lsVOtclfIrQU/rwLCc4+p45/SBPrRYNBi6YFq5rxZbK6Njos9MCmILV/KLQxrWA==", 202 + "version": "0.1.3", 203 + "resolved": "https://registry.npmjs.org/@atproto-labs/simple-store-memory/-/simple-store-memory-0.1.3.tgz", 204 + "integrity": "sha512-jkitT9+AtU+0b28DoN92iURLaCt/q/q4yX8q6V+9LSwYlUTqKoj/5NFKvF7x6EBuG+gpUdlcycbH7e60gjOhRQ==", 202 205 "license": "MIT", 203 206 "dependencies": { 204 - "@atproto-labs/simple-store": "0.1.1", 207 + "@atproto-labs/simple-store": "0.2.0", 205 208 "lru-cache": "^10.2.0" 206 209 } 207 210 }, ··· 245 248 } 246 249 }, 247 250 "node_modules/@atproto/common-web": { 248 - "version": "0.4.0", 249 - "resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.0.tgz", 250 - "integrity": "sha512-ZYL0P9myHybNgwh/hBY0HaBzqiLR1B5/ie5bJpLQAg0whRzNA28t8/nU2vh99tbsWcAF0LOD29M8++LyENJLNQ==", 251 + "version": "0.4.2", 252 + "resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.2.tgz", 253 + "integrity": "sha512-vrXwGNoFGogodjQvJDxAeP3QbGtawgZute2ed1XdRO0wMixLk3qewtikZm06H259QDJVu6voKC5mubml+WgQUw==", 251 254 "license": "MIT", 252 255 "dependencies": { 253 256 "graphemer": "^1.4.0", ··· 283 286 } 284 287 }, 285 288 "node_modules/@atproto/did": { 286 - "version": "0.1.3", 287 - "resolved": "https://registry.npmjs.org/@atproto/did/-/did-0.1.3.tgz", 288 - "integrity": "sha512-ULD8Gw/KRRwLFZ2Z2L4DjmdOMrg8IYYlcjdSc+GQ2/QJSVnD2zaJJVTLd3vls121wGt/583rNaiZTT2DpBze4w==", 289 + "version": "0.1.5", 290 + "resolved": "https://registry.npmjs.org/@atproto/did/-/did-0.1.5.tgz", 291 + "integrity": "sha512-8+1D08QdGE5TF0bB0vV8HLVrVZJeLNITpRTUVEoABNMRaUS7CoYSVb0+JNQDeJIVmqMjOL8dOjvCUDkp3gEaGQ==", 289 292 "license": "MIT", 290 293 "dependencies": { 291 294 "zod": "^3.23.8" ··· 305 308 } 306 309 }, 307 310 "node_modules/@atproto/jwk": { 308 - "version": "0.1.2", 309 - "resolved": "https://registry.npmjs.org/@atproto/jwk/-/jwk-0.1.2.tgz", 310 - "integrity": "sha512-VTQOPaXevW42PQNUD6xJSa6BSjJKKz2DmJqaBP1TkCnLQSr1iU04yyvBSPijQpvWaZWnPnn06NQiorsv7INX6Q==", 311 + "version": "0.1.5", 312 + "resolved": "https://registry.npmjs.org/@atproto/jwk/-/jwk-0.1.5.tgz", 313 + "integrity": "sha512-OzZFLhX41TOcMeanP3aZlL5bLeaUIZT15MI4aU5cwflNq/rwpGOpz3uwDjZc8ytgUjuTQ8LabSz5jMmwoTSWFg==", 311 314 "license": "MIT", 312 315 "dependencies": { 313 316 "multiformats": "^9.9.0", ··· 315 318 } 316 319 }, 317 320 "node_modules/@atproto/jwk-jose": { 318 - "version": "0.1.3", 319 - "resolved": "https://registry.npmjs.org/@atproto/jwk-jose/-/jwk-jose-0.1.3.tgz", 320 - "integrity": "sha512-kPlX9n+WrSx1nzPODxeXncDZ5MqWOaneo+8zNCufIgHdzkDgrGmw8GraUmXZMxmsUthnx52B7vVMUapM2hHetw==", 321 + "version": "0.1.6", 322 + "resolved": "https://registry.npmjs.org/@atproto/jwk-jose/-/jwk-jose-0.1.6.tgz", 323 + "integrity": "sha512-r4DGMvvmazy6CxqAcnplpUxvp6Vd8UwKxQBZRpmm1aNsVonf5qj1yeDkECTiwoe/FPbvtdamlzClB3UZc7Yb5w==", 321 324 "license": "MIT", 322 325 "dependencies": { 323 - "@atproto/jwk": "0.1.2", 326 + "@atproto/jwk": "0.1.5", 324 327 "jose": "^5.2.0" 325 328 } 326 329 }, 327 330 "node_modules/@atproto/jwk-webcrypto": { 328 - "version": "0.1.3", 329 - "resolved": "https://registry.npmjs.org/@atproto/jwk-webcrypto/-/jwk-webcrypto-0.1.3.tgz", 330 - "integrity": "sha512-32gngFZSa0lK/31ttlY+BNrNh6BkCLA3voa7KHdN0r1YMfqFzTPX+RMAOQeBTK7FY9Z0SC65l0+6tSId24TgoQ==", 331 + "version": "0.1.6", 332 + "resolved": "https://registry.npmjs.org/@atproto/jwk-webcrypto/-/jwk-webcrypto-0.1.6.tgz", 333 + "integrity": "sha512-mxWHOvlg+HGohldfiaon1fNsr7iDvKrTrkV0/ZvymWRzxsDFPCon1hu8OtKLXUVgLh+IzDJT1D79I4fBSo4pog==", 331 334 "license": "MIT", 332 335 "dependencies": { 333 - "@atproto/jwk": "0.1.2", 334 - "@atproto/jwk-jose": "0.1.3", 336 + "@atproto/jwk": "0.1.5", 337 + "@atproto/jwk-jose": "0.1.6", 335 338 "zod": "^3.23.8" 336 339 } 337 340 }, ··· 365 368 } 366 369 }, 367 370 "node_modules/@atproto/lexicon": { 368 - "version": "0.4.8", 369 - "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.8.tgz", 370 - "integrity": "sha512-NPhu4MNHqft4muvHvcU0BrkWoEpTI+OmbQzvZzzRpw54MW3PfrQ4TPEpAfPOrWugPB9y4mD+l8OMN1c9eOGWMQ==", 371 + "version": "0.4.11", 372 + "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.11.tgz", 373 + "integrity": "sha512-btefdnvNz2Ao2I+qbmj0F06HC8IlrM/IBz6qOBS50r0S6uDf5tOO+Mv2tSVdimFkdzyDdLtBI1sV36ONxz2cOw==", 371 374 "license": "MIT", 372 375 "dependencies": { 373 - "@atproto/common-web": "^0.4.0", 374 - "@atproto/syntax": "^0.3.4", 376 + "@atproto/common-web": "^0.4.2", 377 + "@atproto/syntax": "^0.4.0", 375 378 "iso-datestring-validator": "^2.2.2", 376 379 "multiformats": "^9.9.0", 377 380 "zod": "^3.23.8" 378 381 } 379 382 }, 383 + "node_modules/@atproto/lexicon/node_modules/@atproto/syntax": { 384 + "version": "0.4.0", 385 + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.0.tgz", 386 + "integrity": "sha512-b9y5ceHS8YKOfP3mdKmwAx5yVj9294UN7FG2XzP6V5aKUdFazEYRnR9m5n5ZQFKa3GNvz7de9guZCJ/sUTcOAA==", 387 + "license": "MIT" 388 + }, 380 389 "node_modules/@atproto/lexicon/node_modules/multiformats": { 381 390 "version": "9.9.0", 382 391 "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", ··· 384 393 "license": "(Apache-2.0 AND MIT)" 385 394 }, 386 395 "node_modules/@atproto/oauth-client": { 387 - "version": "0.3.7", 388 - "resolved": "https://registry.npmjs.org/@atproto/oauth-client/-/oauth-client-0.3.7.tgz", 389 - "integrity": "sha512-CXikk9FwkL8sEATHZlAEM3qsIjIT8wkh9EShXceEgS3f4BSAbSpnGvYjiV2wdrykSVmbMWH1wynl6T/aeHQJEg==", 396 + "version": "0.3.16", 397 + "resolved": "https://registry.npmjs.org/@atproto/oauth-client/-/oauth-client-0.3.16.tgz", 398 + "integrity": "sha512-AEtGLOXRJzBcBa8LyUXwFf/M7cZc+CcOBjLsiqmVQriSwccfyTkALgiyM0UcRHJqlwtLPuf9RYtgKPc8rW5F/w==", 390 399 "license": "MIT", 391 400 "dependencies": { 392 - "@atproto-labs/did-resolver": "0.1.8", 393 - "@atproto-labs/fetch": "0.2.0", 394 - "@atproto-labs/handle-resolver": "0.1.5", 395 - "@atproto-labs/identity-resolver": "0.1.10", 396 - "@atproto-labs/simple-store": "0.1.1", 397 - "@atproto-labs/simple-store-memory": "0.1.1", 398 - "@atproto/did": "0.1.3", 399 - "@atproto/jwk": "0.1.2", 400 - "@atproto/oauth-types": "0.2.2", 401 - "@atproto/xrpc": "0.6.6", 401 + "@atproto-labs/did-resolver": "0.1.12", 402 + "@atproto-labs/fetch": "0.2.2", 403 + "@atproto-labs/handle-resolver": "0.1.8", 404 + "@atproto-labs/identity-resolver": "0.1.16", 405 + "@atproto-labs/simple-store": "0.2.0", 406 + "@atproto-labs/simple-store-memory": "0.1.3", 407 + "@atproto/did": "0.1.5", 408 + "@atproto/jwk": "0.1.5", 409 + "@atproto/oauth-types": "0.2.7", 410 + "@atproto/xrpc": "0.7.0", 402 411 "multiformats": "^9.9.0", 403 412 "zod": "^3.23.8" 404 413 } 405 414 }, 406 415 "node_modules/@atproto/oauth-client-node": { 407 - "version": "0.2.8", 408 - "resolved": "https://registry.npmjs.org/@atproto/oauth-client-node/-/oauth-client-node-0.2.8.tgz", 409 - "integrity": "sha512-EHxdfNpRvwnlxHFCYjl5+ckmPKwYe/jSMN2RksudrSg/XivRzJisgBMOsQ2FnuXIiC9eh4HZ+MrxnoEpT20tDA==", 416 + "version": "0.2.17", 417 + "resolved": "https://registry.npmjs.org/@atproto/oauth-client-node/-/oauth-client-node-0.2.17.tgz", 418 + "integrity": "sha512-mPaBEZlsEAhUvhr958tPrQA4T+wDv4I6MLPTF7QNzTG1n/kP2LEIStq1Y63UVDwEqTS16LnpsZodu3QZnrNxXg==", 410 419 "license": "MIT", 411 420 "dependencies": { 412 - "@atproto-labs/did-resolver": "0.1.8", 413 - "@atproto-labs/handle-resolver-node": "0.1.11", 414 - "@atproto-labs/simple-store": "0.1.1", 415 - "@atproto/did": "0.1.3", 416 - "@atproto/jwk": "0.1.2", 417 - "@atproto/jwk-jose": "0.1.3", 418 - "@atproto/jwk-webcrypto": "0.1.3", 419 - "@atproto/oauth-client": "0.3.7", 420 - "@atproto/oauth-types": "0.2.2" 421 + "@atproto-labs/did-resolver": "0.1.12", 422 + "@atproto-labs/handle-resolver-node": "0.1.15", 423 + "@atproto-labs/simple-store": "0.2.0", 424 + "@atproto/did": "0.1.5", 425 + "@atproto/jwk": "0.1.5", 426 + "@atproto/jwk-jose": "0.1.6", 427 + "@atproto/jwk-webcrypto": "0.1.6", 428 + "@atproto/oauth-client": "0.3.16", 429 + "@atproto/oauth-types": "0.2.7" 430 + }, 431 + "engines": { 432 + "node": ">=18.7.0" 421 433 } 422 434 }, 423 435 "node_modules/@atproto/oauth-client/node_modules/@atproto/xrpc": { 424 - "version": "0.6.6", 425 - "resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.6.6.tgz", 426 - "integrity": "sha512-umXEYVMo9/pyIBoKmIAIi64RXDW9tSXY+wqztlQ6I2GZtjLfNZqmAWU+wADk3SxUe54mvjxxGyA4TtyGtDMfhA==", 436 + "version": "0.7.0", 437 + "resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.7.0.tgz", 438 + "integrity": "sha512-SfhP9dGx2qclaScFDb58Jnrmim5nk4geZXCqg6sB0I/KZhZEkr9iIx1hLCp+sxkIfEsmEJjeWO4B0rjUIJW5cw==", 427 439 "license": "MIT", 428 440 "dependencies": { 429 - "@atproto/lexicon": "^0.4.5", 441 + "@atproto/lexicon": "^0.4.11", 430 442 "zod": "^3.23.8" 431 443 } 432 444 }, ··· 437 449 "license": "(Apache-2.0 AND MIT)" 438 450 }, 439 451 "node_modules/@atproto/oauth-types": { 440 - "version": "0.2.2", 441 - "resolved": "https://registry.npmjs.org/@atproto/oauth-types/-/oauth-types-0.2.2.tgz", 442 - "integrity": "sha512-UMTfJwKD/mIZEXxVT02XWYMtRJAu4iytxhlScH48Q/40nOa6oV4wUFij0gnV4NAQkjHMaYh39ChRMjjKHeypJA==", 452 + "version": "0.2.7", 453 + "resolved": "https://registry.npmjs.org/@atproto/oauth-types/-/oauth-types-0.2.7.tgz", 454 + "integrity": "sha512-2SlDveiSI0oowC+sfuNd/npV8jw/FhokSS26qyUyldTg1g9ZlhxXUfMP4IZOPeZcVn9EszzQRHs1H9ZJqVQIew==", 443 455 "license": "MIT", 444 456 "dependencies": { 445 - "@atproto/jwk": "0.1.2", 457 + "@atproto/jwk": "0.1.5", 446 458 "zod": "^3.23.8" 447 459 } 448 460 }, ··· 10591 10603 } 10592 10604 }, 10593 10605 "node_modules/jose": { 10594 - "version": "5.9.6", 10595 - "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", 10596 - "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==", 10606 + "version": "5.10.0", 10607 + "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", 10608 + "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", 10597 10609 "license": "MIT", 10598 10610 "funding": { 10599 10611 "url": "https://github.com/sponsors/panva" ··· 15877 15889 } 15878 15890 }, 15879 15891 "node_modules/undici": { 15880 - "version": "6.21.1", 15881 - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.1.tgz", 15882 - "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==", 15892 + "version": "6.21.2", 15893 + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.2.tgz", 15894 + "integrity": "sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==", 15883 15895 "license": "MIT", 15884 15896 "engines": { 15885 15897 "node": ">=18.17"
+1 -1
package.json
··· 17 17 "@atproto/api": "^0.14.2", 18 18 "@atproto/common": "^0.4.8", 19 19 "@atproto/identity": "^0.4.6", 20 + "@atproto/oauth-client-node": "^0.2.17", 20 21 "@atproto/sync": "^0.1.17", 21 22 "@atproto/syntax": "^0.3.3", 22 23 "@atproto/xrpc": "^0.6.9", 23 - "@atproto/oauth-client-node": "^0.2.8", 24 24 "@mdx-js/loader": "^3.1.0", 25 25 "@mdx-js/react": "^3.1.0", 26 26 "@next/mdx": "^15.0.3",