a tool for shared writing and social publishing

Merge branch 'main' of https://github.com/hyperlink-academy/minilink into feature/recommend

+630 -696
+3
.gitignore
··· 12 12 .env.local 13 13 .wrangler 14 14 tsconfig.tsbuildinfo 15 + 16 + # Claude 17 + .claude/settings.local.json
+10
app/api/inngest/client.ts
··· 51 51 documentUris?: string[]; 52 52 }; 53 53 }; 54 + "user/write-records-to-pds": { 55 + data: { 56 + did: string; 57 + records: Array<{ 58 + collection: string; 59 + rkey: string; 60 + record: unknown; 61 + }>; 62 + }; 63 + }; 54 64 }; 55 65 56 66 // Create a client to send and receive events
+12 -3
app/api/inngest/functions/index_post_mention.ts
··· 3 3 import { AtpAgent, AtUri } from "@atproto/api"; 4 4 import { Json } from "supabase/database.types"; 5 5 import { ids } from "lexicons/api/lexicons"; 6 - import { Notification, pingIdentityToUpdateNotification } from "src/notifications"; 6 + import { 7 + Notification, 8 + pingIdentityToUpdateNotification, 9 + } from "src/notifications"; 7 10 import { v7 } from "uuid"; 8 11 import { idResolver } from "app/(home-pages)/reader/idResolver"; 9 12 import { documentUriFilter } from "src/utils/uriHelpers"; ··· 60 63 let { data: pub, error } = await supabaseServerClient 61 64 .from("publications") 62 65 .select("*") 63 - .or(`record->>base_path.eq.${url.host},record->>url.eq.https://${url.host}`) 66 + .or( 67 + `record->>base_path.eq.${url.host},record->>url.eq.https://${url.host}`, 68 + ) 69 + .order("uri", { ascending: false }) 70 + .limit(1) 64 71 .single(); 65 72 66 73 if (!pub) { ··· 80 87 const docData = docDataArr?.[0]; 81 88 82 89 if (!docData) { 83 - return { message: `No document found for publication ${url.host}/${path[0]}` }; 90 + return { 91 + message: `No document found for publication ${url.host}/${path[0]}`, 92 + }; 84 93 } 85 94 86 95 documentUri = docData.uri;
+70
app/api/inngest/functions/write_records_to_pds.ts
··· 1 + import { inngest } from "../client"; 2 + import { restoreOAuthSession } from "src/atproto-oauth"; 3 + import { AtpBaseClient } from "lexicons/api"; 4 + 5 + // Batch size to avoid Inngest payload limits and PDS rate limits 6 + const BATCH_SIZE = 50; 7 + 8 + // Helper to create authenticated agent - must be called fresh in each step 9 + // (OAuth sessions cannot be serialized across Inngest steps) 10 + async function createAuthenticatedAgent(did: string): Promise<AtpBaseClient> { 11 + const result = await restoreOAuthSession(did); 12 + if (!result.ok) { 13 + throw new Error(`Failed to restore OAuth session: ${result.error.message}`); 14 + } 15 + return new AtpBaseClient(result.value.fetchHandler.bind(result.value)); 16 + } 17 + 18 + export const write_records_to_pds = inngest.createFunction( 19 + { id: "write-records-to-pds" }, 20 + { event: "user/write-records-to-pds" }, 21 + async ({ event, step }) => { 22 + const { did, records } = event.data; 23 + 24 + // Step 1: Verify OAuth session is valid before proceeding 25 + await step.run("verify-oauth-session", async () => { 26 + const result = await restoreOAuthSession(did); 27 + if (!result.ok) { 28 + throw new Error(`OAuth restore failed: ${result.error.message}`); 29 + } 30 + return { success: true }; 31 + }); 32 + 33 + // Step 2: Write records to PDS in batches 34 + // Split records into batches to avoid payload limits and rate limiting 35 + const batches: typeof records[] = []; 36 + for (let i = 0; i < records.length; i += BATCH_SIZE) { 37 + batches.push(records.slice(i, i + BATCH_SIZE)); 38 + } 39 + 40 + let totalWritten = 0; 41 + for (let batchIndex = 0; batchIndex < batches.length; batchIndex++) { 42 + const batch = batches[batchIndex]; 43 + const batchWritten = await step.run( 44 + `write-batch-${batchIndex}`, 45 + async () => { 46 + const agent = await createAuthenticatedAgent(did); 47 + let written = 0; 48 + for (const rec of batch) { 49 + await agent.com.atproto.repo.putRecord({ 50 + repo: did, 51 + collection: rec.collection, 52 + rkey: rec.rkey, 53 + record: rec.record as Record<string, unknown>, 54 + validate: false, 55 + }); 56 + written++; 57 + } 58 + return written; 59 + }, 60 + ); 61 + totalWritten += batchWritten; 62 + } 63 + 64 + return { 65 + success: true, 66 + recordsWritten: totalWritten, 67 + batchCount: batches.length, 68 + }; 69 + }, 70 + );
+2
app/api/inngest/route.tsx
··· 12 12 cleanup_expired_oauth_sessions, 13 13 check_oauth_session, 14 14 } from "./functions/cleanup_expired_oauth_sessions"; 15 + import { write_records_to_pds } from "./functions/write_records_to_pds"; 15 16 16 17 export const { GET, POST, PUT } = serve({ 17 18 client: inngest, ··· 26 27 fix_standard_document_postref, 27 28 cleanup_expired_oauth_sessions, 28 29 check_oauth_session, 30 + write_records_to_pds, 29 31 ], 30 32 });
+1 -1
app/lish/[did]/[publication]/[rkey]/BskyPostContent.tsx
··· 114 114 {showBlueskyLink && ( 115 115 <> 116 116 <a 117 - className="text-tertiary hover:text-accent-contrast" 117 + className="text-tertiary relative hover:text-accent-contrast" 118 118 target="_blank" 119 119 href={url} 120 120 >
+2 -1
app/lish/[did]/[publication]/[rkey]/PostContent.tsx
··· 32 32 import { PublishedPollBlock } from "./Blocks/PublishedPollBlock"; 33 33 import { PollData } from "./fetchPollData"; 34 34 import { ButtonPrimary } from "components/Buttons"; 35 + import { PostNotAvailable } from "components/Blocks/BlueskyPostBlock/BlueskyEmbed"; 35 36 36 37 export function PostContent({ 37 38 blocks, ··· 170 171 case PubLeafletBlocksBskyPost.isMain(b.block): { 171 172 let uri = b.block.postRef.uri; 172 173 let post = bskyPostData.find((p) => p.uri === uri); 173 - if (!post) return <div>no prefetched post rip</div>; 174 + if (!post) return <PostNotAvailable />; 174 175 return ( 175 176 <PubBlueskyPostBlock 176 177 post={post}
+1 -1
app/lish/[did]/[publication]/[rkey]/QuoteHandler.tsx
··· 172 172 <div className="">Share via</div> 173 173 174 174 <a 175 - className="flex gap-1 items-center hover:font-bold px-1 hover:no-underline!" 175 + className="flex relative gap-1 items-center hover:font-bold px-1 hover:no-underline!" 176 176 role="link" 177 177 href={`https://bsky.app/intent/compose?text=${encodeURIComponent(url)}`} 178 178 target="_blank"
+4 -1
appview/index.ts
··· 378 378 379 379 // Now validate the record since we know it contains our quote param 380 380 let record = AppBskyFeedPost.validateRecord(evt.record); 381 - if (!record.success) return; 381 + if (!record.success) { 382 + console.log(record.error); 383 + return; 384 + } 382 385 383 386 let embed: string | null = null; 384 387 if (
+8 -5
components/ActionBar/ActionButton.tsx
··· 7 7 8 8 type ButtonProps = Omit<JSX.IntrinsicElements["button"], "content">; 9 9 10 - export const ActionButton = ( 11 - _props: ButtonProps & { 10 + export const ActionButton = forwardRef< 11 + HTMLButtonElement, 12 + ButtonProps & { 12 13 id?: string; 13 14 icon: React.ReactNode; 14 15 label: React.ReactNode; ··· 19 20 subtext?: string; 20 21 labelOnMobile?: boolean; 21 22 z?: boolean; 22 - }, 23 - ) => { 23 + } 24 + >((_props, ref) => { 24 25 let { 25 26 id, 26 27 icon, ··· 50 51 return ( 51 52 <button 52 53 {...buttonProps} 54 + ref={ref} 53 55 className={` 54 56 actionButton relative font-bold 55 57 rounded-md border ··· 81 83 </div> 82 84 </button> 83 85 ); 84 - }; 86 + }); 87 + ActionButton.displayName = "ActionButton";
+22 -10
components/ActionBar/Publications.tsx
··· 62 62 </> 63 63 )} 64 64 65 - {identity.publications?.map((d) => { 66 - return ( 67 - <PublicationOption 68 - {...d} 69 - key={d.uri} 70 - record={d.record} 71 - current={d.uri === props.currentPubUri} 72 - /> 73 - ); 74 - })} 65 + {identity.publications 66 + ?.filter((p) => { 67 + let record = p.record as any; 68 + if (record.preferences?.greengale) return false; 69 + if ( 70 + record.theme && 71 + record.theme.$type && 72 + record.theme.$type !== "pub.leaflet.publication#theme" 73 + ) 74 + return false; 75 + return true; 76 + }) 77 + .map((d) => { 78 + return ( 79 + <PublicationOption 80 + {...d} 81 + key={d.uri} 82 + record={d.record} 83 + current={d.uri === props.currentPubUri} 84 + /> 85 + ); 86 + })} 75 87 <Link 76 88 href={"/lish/createPub"} 77 89 className="pubListCreateNew text-accent-contrast text-sm place-self-end hover:text-accent-contrast"
+19 -23
components/Blocks/TextBlock/mountProsemirror.ts
··· 80 80 handlePaste, 81 81 handleClickOn: (_view, _pos, node, _nodePos, _event, direct) => { 82 82 if (!direct) return; 83 + 84 + // Check for didMention inline nodes 85 + if (node?.type === schema.nodes.didMention) { 86 + window.open( 87 + didToBlueskyUrl(node.attrs.did), 88 + "_blank", 89 + "noopener,noreferrer", 90 + ); 91 + return; 92 + } 93 + 94 + // Check for atMention inline nodes 95 + if (node?.type === schema.nodes.atMention) { 96 + const url = atUriToUrl(node.attrs.atURI); 97 + window.open(url, "_blank", "noopener,noreferrer"); 98 + return; 99 + } 83 100 if (node.nodeSize - 2 <= _pos) return; 84 101 85 102 // Check for marks at the clicked position ··· 87 104 const nodeAt2 = node.nodeAt(Math.max(_pos - 2, 0)); 88 105 89 106 // Check for link marks 90 - let linkMark = nodeAt1?.marks.find((f) => f.type === schema.marks.link) || 107 + let linkMark = 108 + nodeAt1?.marks.find((f) => f.type === schema.marks.link) || 91 109 nodeAt2?.marks.find((f) => f.type === schema.marks.link); 92 110 if (linkMark) { 93 111 window.open(linkMark.attrs.href, "_blank"); 94 - return; 95 - } 96 - 97 - // Check for didMention inline nodes 98 - if (nodeAt1?.type === schema.nodes.didMention) { 99 - window.open(didToBlueskyUrl(nodeAt1.attrs.did), "_blank", "noopener,noreferrer"); 100 - return; 101 - } 102 - if (nodeAt2?.type === schema.nodes.didMention) { 103 - window.open(didToBlueskyUrl(nodeAt2.attrs.did), "_blank", "noopener,noreferrer"); 104 - return; 105 - } 106 - 107 - // Check for atMention inline nodes 108 - if (nodeAt1?.type === schema.nodes.atMention) { 109 - const url = atUriToUrl(nodeAt1.attrs.atURI); 110 - window.open(url, "_blank", "noopener,noreferrer"); 111 - return; 112 - } 113 - if (nodeAt2?.type === schema.nodes.atMention) { 114 - const url = atUriToUrl(nodeAt2.attrs.atURI); 115 - window.open(url, "_blank", "noopener,noreferrer"); 116 112 return; 117 113 } 118 114 },
+1 -1
components/Blocks/useBlockKeyboardHandlers.ts
··· 70 70 areYouSure, 71 71 setAreYouSure, 72 72 }); 73 - undoManager.endGroup(); 73 + setTimeout(() => undoManager.endGroup(), 100); 74 74 }; 75 75 window.addEventListener("keydown", listener); 76 76 return () => window.removeEventListener("keydown", listener);
+1 -1
components/ProfilePopover.tsx
··· 33 33 className="max-w-sm p-0! text-center" 34 34 trigger={ 35 35 <div 36 - className="no-underline" 36 + className="no-underline relative" 37 37 onPointerEnter={(e) => { 38 38 if (hoverTimeout.current) { 39 39 window.clearTimeout(hoverTimeout.current);
+469 -358
package-lock.json
··· 12 12 "@atproto/api": "^0.16.9", 13 13 "@atproto/common": "^0.4.8", 14 14 "@atproto/identity": "^0.4.6", 15 - "@atproto/lexicon": "^0.5.1", 15 + "@atproto/lexicon": "^0.6.1", 16 16 "@atproto/oauth-client-node": "^0.3.8", 17 17 "@atproto/sync": "^0.1.34", 18 18 "@atproto/syntax": "^0.3.3", ··· 237 237 } 238 238 }, 239 239 "node_modules/@atproto/api/node_modules/@atproto/syntax": { 240 - "version": "0.4.1", 241 - "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.1.tgz", 242 - "integrity": "sha512-CJdImtLAiFO+0z3BWTtxwk6aY5w4t8orHTMVJgkf++QRJWTxPbIFko/0hrkADB7n2EruDxDSeAgfUGehpH6ngw==", 243 - "license": "MIT" 240 + "version": "0.4.3", 241 + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.3.tgz", 242 + "integrity": "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA==", 243 + "license": "MIT", 244 + "dependencies": { 245 + "tslib": "^2.8.1" 246 + } 244 247 }, 245 248 "node_modules/@atproto/api/node_modules/multiformats": { 246 249 "version": "9.9.0", ··· 266 269 } 267 270 }, 268 271 "node_modules/@atproto/common-web": { 269 - "version": "0.4.10", 270 - "resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.10.tgz", 271 - "integrity": "sha512-TLDZSgSKzT8ZgOrBrTGK87J1CXve9TEuY6NVVUBRkOMzRRtQzpFb9/ih5WVS/hnaWVvE30CfuyaetRoma+WKNw==", 272 + "version": "0.4.15", 273 + "resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.15.tgz", 274 + "integrity": "sha512-A4l9gyqUNez8CjZp/Trypz/D3WIQsNj8dN05WR6+RoBbvwc9JhWjKPrm+WoVYc/F16RPdXHLkE3BEJlGIyYIiA==", 272 275 "license": "MIT", 273 276 "dependencies": { 274 - "@atproto/lex-data": "0.0.6", 275 - "@atproto/lex-json": "0.0.6", 277 + "@atproto/lex-data": "^0.0.10", 278 + "@atproto/lex-json": "^0.0.10", 279 + "@atproto/syntax": "^0.4.3", 276 280 "zod": "^3.23.8" 277 281 } 278 282 }, 283 + "node_modules/@atproto/common-web/node_modules/@atproto/lex-data": { 284 + "version": "0.0.10", 285 + "resolved": "https://registry.npmjs.org/@atproto/lex-data/-/lex-data-0.0.10.tgz", 286 + "integrity": "sha512-FDbcy8VIUVzS9Mi1F8SMxbkL/jOUmRRpqbeM1xB4A0fMxeZJTxf6naAbFt4gYF3quu/+TPJGmio6/7cav05FqQ==", 287 + "license": "MIT", 288 + "dependencies": { 289 + "multiformats": "^9.9.0", 290 + "tslib": "^2.8.1", 291 + "uint8arrays": "3.0.0", 292 + "unicode-segmenter": "^0.14.0" 293 + } 294 + }, 295 + "node_modules/@atproto/common-web/node_modules/@atproto/lex-json": { 296 + "version": "0.0.10", 297 + "resolved": "https://registry.npmjs.org/@atproto/lex-json/-/lex-json-0.0.10.tgz", 298 + "integrity": "sha512-L6MyXU17C5ODMeob8myQ2F3xvgCTvJUtM0ew8qSApnN//iDasB/FDGgd7ty4UVNmx4NQ/rtvz8xV94YpG6kneQ==", 299 + "license": "MIT", 300 + "dependencies": { 301 + "@atproto/lex-data": "^0.0.10", 302 + "tslib": "^2.8.1" 303 + } 304 + }, 305 + "node_modules/@atproto/common-web/node_modules/@atproto/syntax": { 306 + "version": "0.4.3", 307 + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.3.tgz", 308 + "integrity": "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA==", 309 + "license": "MIT", 310 + "dependencies": { 311 + "tslib": "^2.8.1" 312 + } 313 + }, 314 + "node_modules/@atproto/common-web/node_modules/multiformats": { 315 + "version": "9.9.0", 316 + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 317 + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 318 + "license": "(Apache-2.0 AND MIT)" 319 + }, 279 320 "node_modules/@atproto/common/node_modules/multiformats": { 280 321 "version": "9.9.0", 281 322 "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", ··· 465 506 } 466 507 }, 467 508 "node_modules/@atproto/lex-cli/node_modules/@atproto/syntax": { 468 - "version": "0.4.1", 469 - "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.1.tgz", 470 - "integrity": "sha512-CJdImtLAiFO+0z3BWTtxwk6aY5w4t8orHTMVJgkf++QRJWTxPbIFko/0hrkADB7n2EruDxDSeAgfUGehpH6ngw==", 509 + "version": "0.4.3", 510 + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.3.tgz", 511 + "integrity": "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA==", 471 512 "dev": true, 472 - "license": "MIT" 513 + "license": "MIT", 514 + "dependencies": { 515 + "tslib": "^2.8.1" 516 + } 473 517 }, 474 518 "node_modules/@atproto/lex-client": { 475 519 "version": "0.0.7", ··· 615 659 "license": "MIT" 616 660 }, 617 661 "node_modules/@atproto/lexicon": { 618 - "version": "0.5.1", 619 - "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.5.1.tgz", 620 - "integrity": "sha512-y8AEtYmfgVl4fqFxqXAeGvhesiGkxiy3CWoJIfsFDDdTlZUC8DFnZrYhcqkIop3OlCkkljvpSJi1hbeC1tbi8A==", 662 + "version": "0.6.1", 663 + "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.6.1.tgz", 664 + "integrity": "sha512-/vI1kVlY50Si+5MXpvOucelnYwb0UJ6Qto5mCp+7Q5C+Jtp+SoSykAPVvjVtTnQUH2vrKOFOwpb3C375vSKzXw==", 621 665 "license": "MIT", 622 666 "dependencies": { 623 - "@atproto/common-web": "^0.4.3", 624 - "@atproto/syntax": "^0.4.1", 667 + "@atproto/common-web": "^0.4.13", 668 + "@atproto/syntax": "^0.4.3", 625 669 "iso-datestring-validator": "^2.2.2", 626 670 "multiformats": "^9.9.0", 627 671 "zod": "^3.23.8" 628 672 } 629 673 }, 630 674 "node_modules/@atproto/lexicon/node_modules/@atproto/syntax": { 631 - "version": "0.4.1", 632 - "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.1.tgz", 633 - "integrity": "sha512-CJdImtLAiFO+0z3BWTtxwk6aY5w4t8orHTMVJgkf++QRJWTxPbIFko/0hrkADB7n2EruDxDSeAgfUGehpH6ngw==", 634 - "license": "MIT" 675 + "version": "0.4.3", 676 + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.3.tgz", 677 + "integrity": "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA==", 678 + "license": "MIT", 679 + "dependencies": { 680 + "tslib": "^2.8.1" 681 + } 635 682 }, 636 683 "node_modules/@atproto/lexicon/node_modules/multiformats": { 637 684 "version": "9.9.0", ··· 716 763 } 717 764 }, 718 765 "node_modules/@atproto/repo/node_modules/@atproto/common": { 719 - "version": "0.5.6", 720 - "resolved": "https://registry.npmjs.org/@atproto/common/-/common-0.5.6.tgz", 721 - "integrity": "sha512-rbWoZwHQNP8jcwjCREVecchw8aaoM5A1NCONyb9PVDWOJLRLCzojYMeIS8IbFqXo6NyIByOGddupADkkLeVBGQ==", 766 + "version": "0.5.10", 767 + "resolved": "https://registry.npmjs.org/@atproto/common/-/common-0.5.10.tgz", 768 + "integrity": "sha512-A1+4W3JmjZIgmtJFLJBAaoVruZhRL0ANtyjZ91aJR4rjHcZuaQ+v4IFR1UcE6yyTATacLdBk6ADy8OtxXzq14g==", 722 769 "license": "MIT", 723 770 "dependencies": { 724 - "@atproto/common-web": "^0.4.10", 725 - "@atproto/lex-cbor": "0.0.6", 726 - "@atproto/lex-data": "0.0.6", 771 + "@atproto/common-web": "^0.4.15", 772 + "@atproto/lex-cbor": "^0.0.10", 773 + "@atproto/lex-data": "^0.0.10", 727 774 "iso-datestring-validator": "^2.2.2", 728 775 "multiformats": "^9.9.0", 729 776 "pino": "^8.21.0" ··· 732 779 "node": ">=18.7.0" 733 780 } 734 781 }, 735 - "node_modules/@atproto/repo/node_modules/@atproto/lexicon": { 736 - "version": "0.6.0", 737 - "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.6.0.tgz", 738 - "integrity": "sha512-5veb8aD+J5M0qszLJ+73KSFsFrJBgAY/nM1TSAJvGY7fNc9ZAT+PSUlmIyrdye9YznAZ07yktalls/TwNV7cHQ==", 782 + "node_modules/@atproto/repo/node_modules/@atproto/lex-cbor": { 783 + "version": "0.0.10", 784 + "resolved": "https://registry.npmjs.org/@atproto/lex-cbor/-/lex-cbor-0.0.10.tgz", 785 + "integrity": "sha512-5RtV90iIhRNCXXvvETd3KlraV8XGAAAgOmiszUb+l8GySDU/sGk7AlVvArFfXnj/S/GXJq8DP6IaUxCw/sPASA==", 739 786 "license": "MIT", 740 787 "dependencies": { 741 - "@atproto/common-web": "^0.4.7", 742 - "@atproto/syntax": "^0.4.2", 743 - "iso-datestring-validator": "^2.2.2", 744 - "multiformats": "^9.9.0", 745 - "zod": "^3.23.8" 788 + "@atproto/lex-data": "^0.0.10", 789 + "tslib": "^2.8.1" 746 790 } 747 791 }, 748 - "node_modules/@atproto/repo/node_modules/@atproto/syntax": { 749 - "version": "0.4.2", 750 - "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.2.tgz", 751 - "integrity": "sha512-X9XSRPinBy/0VQ677j8VXlBsYSsUXaiqxWVpGGxJYsAhugdQRb0jqaVKJFtm6RskeNkV6y9xclSUi9UYG/COrA==", 752 - "license": "MIT" 792 + "node_modules/@atproto/repo/node_modules/@atproto/lex-data": { 793 + "version": "0.0.10", 794 + "resolved": "https://registry.npmjs.org/@atproto/lex-data/-/lex-data-0.0.10.tgz", 795 + "integrity": "sha512-FDbcy8VIUVzS9Mi1F8SMxbkL/jOUmRRpqbeM1xB4A0fMxeZJTxf6naAbFt4gYF3quu/+TPJGmio6/7cav05FqQ==", 796 + "license": "MIT", 797 + "dependencies": { 798 + "multiformats": "^9.9.0", 799 + "tslib": "^2.8.1", 800 + "uint8arrays": "3.0.0", 801 + "unicode-segmenter": "^0.14.0" 802 + } 753 803 }, 754 804 "node_modules/@atproto/repo/node_modules/multiformats": { 755 805 "version": "9.9.0", ··· 778 828 } 779 829 }, 780 830 "node_modules/@atproto/sync/node_modules/@atproto/syntax": { 781 - "version": "0.4.1", 782 - "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.1.tgz", 783 - "integrity": "sha512-CJdImtLAiFO+0z3BWTtxwk6aY5w4t8orHTMVJgkf++QRJWTxPbIFko/0hrkADB7n2EruDxDSeAgfUGehpH6ngw==", 784 - "license": "MIT" 831 + "version": "0.4.3", 832 + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.3.tgz", 833 + "integrity": "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA==", 834 + "license": "MIT", 835 + "dependencies": { 836 + "tslib": "^2.8.1" 837 + } 785 838 }, 786 839 "node_modules/@atproto/sync/node_modules/multiformats": { 787 840 "version": "9.9.0", ··· 813 866 } 814 867 }, 815 868 "node_modules/@atproto/tap/node_modules/@atproto/common": { 816 - "version": "0.5.6", 817 - "resolved": "https://registry.npmjs.org/@atproto/common/-/common-0.5.6.tgz", 818 - "integrity": "sha512-rbWoZwHQNP8jcwjCREVecchw8aaoM5A1NCONyb9PVDWOJLRLCzojYMeIS8IbFqXo6NyIByOGddupADkkLeVBGQ==", 869 + "version": "0.5.10", 870 + "resolved": "https://registry.npmjs.org/@atproto/common/-/common-0.5.10.tgz", 871 + "integrity": "sha512-A1+4W3JmjZIgmtJFLJBAaoVruZhRL0ANtyjZ91aJR4rjHcZuaQ+v4IFR1UcE6yyTATacLdBk6ADy8OtxXzq14g==", 819 872 "license": "MIT", 820 873 "dependencies": { 821 - "@atproto/common-web": "^0.4.10", 822 - "@atproto/lex-cbor": "0.0.6", 823 - "@atproto/lex-data": "0.0.6", 874 + "@atproto/common-web": "^0.4.15", 875 + "@atproto/lex-cbor": "^0.0.10", 876 + "@atproto/lex-data": "^0.0.10", 824 877 "iso-datestring-validator": "^2.2.2", 825 878 "multiformats": "^9.9.0", 826 879 "pino": "^8.21.0" ··· 829 882 "node": ">=18.7.0" 830 883 } 831 884 }, 885 + "node_modules/@atproto/tap/node_modules/@atproto/lex-cbor": { 886 + "version": "0.0.10", 887 + "resolved": "https://registry.npmjs.org/@atproto/lex-cbor/-/lex-cbor-0.0.10.tgz", 888 + "integrity": "sha512-5RtV90iIhRNCXXvvETd3KlraV8XGAAAgOmiszUb+l8GySDU/sGk7AlVvArFfXnj/S/GXJq8DP6IaUxCw/sPASA==", 889 + "license": "MIT", 890 + "dependencies": { 891 + "@atproto/lex-data": "^0.0.10", 892 + "tslib": "^2.8.1" 893 + } 894 + }, 895 + "node_modules/@atproto/tap/node_modules/@atproto/lex-data": { 896 + "version": "0.0.10", 897 + "resolved": "https://registry.npmjs.org/@atproto/lex-data/-/lex-data-0.0.10.tgz", 898 + "integrity": "sha512-FDbcy8VIUVzS9Mi1F8SMxbkL/jOUmRRpqbeM1xB4A0fMxeZJTxf6naAbFt4gYF3quu/+TPJGmio6/7cav05FqQ==", 899 + "license": "MIT", 900 + "dependencies": { 901 + "multiformats": "^9.9.0", 902 + "tslib": "^2.8.1", 903 + "uint8arrays": "3.0.0", 904 + "unicode-segmenter": "^0.14.0" 905 + } 906 + }, 832 907 "node_modules/@atproto/tap/node_modules/@atproto/syntax": { 833 - "version": "0.4.2", 834 - "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.2.tgz", 835 - "integrity": "sha512-X9XSRPinBy/0VQ677j8VXlBsYSsUXaiqxWVpGGxJYsAhugdQRb0jqaVKJFtm6RskeNkV6y9xclSUi9UYG/COrA==", 836 - "license": "MIT" 908 + "version": "0.4.3", 909 + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.3.tgz", 910 + "integrity": "sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA==", 911 + "license": "MIT", 912 + "dependencies": { 913 + "tslib": "^2.8.1" 914 + } 837 915 }, 838 916 "node_modules/@atproto/tap/node_modules/multiformats": { 839 917 "version": "9.9.0", ··· 855 933 } 856 934 }, 857 935 "node_modules/@atproto/ws-client/node_modules/@atproto/common": { 858 - "version": "0.5.6", 859 - "resolved": "https://registry.npmjs.org/@atproto/common/-/common-0.5.6.tgz", 860 - "integrity": "sha512-rbWoZwHQNP8jcwjCREVecchw8aaoM5A1NCONyb9PVDWOJLRLCzojYMeIS8IbFqXo6NyIByOGddupADkkLeVBGQ==", 936 + "version": "0.5.10", 937 + "resolved": "https://registry.npmjs.org/@atproto/common/-/common-0.5.10.tgz", 938 + "integrity": "sha512-A1+4W3JmjZIgmtJFLJBAaoVruZhRL0ANtyjZ91aJR4rjHcZuaQ+v4IFR1UcE6yyTATacLdBk6ADy8OtxXzq14g==", 861 939 "license": "MIT", 862 940 "dependencies": { 863 - "@atproto/common-web": "^0.4.10", 864 - "@atproto/lex-cbor": "0.0.6", 865 - "@atproto/lex-data": "0.0.6", 941 + "@atproto/common-web": "^0.4.15", 942 + "@atproto/lex-cbor": "^0.0.10", 943 + "@atproto/lex-data": "^0.0.10", 866 944 "iso-datestring-validator": "^2.2.2", 867 945 "multiformats": "^9.9.0", 868 946 "pino": "^8.21.0" ··· 871 949 "node": ">=18.7.0" 872 950 } 873 951 }, 952 + "node_modules/@atproto/ws-client/node_modules/@atproto/lex-cbor": { 953 + "version": "0.0.10", 954 + "resolved": "https://registry.npmjs.org/@atproto/lex-cbor/-/lex-cbor-0.0.10.tgz", 955 + "integrity": "sha512-5RtV90iIhRNCXXvvETd3KlraV8XGAAAgOmiszUb+l8GySDU/sGk7AlVvArFfXnj/S/GXJq8DP6IaUxCw/sPASA==", 956 + "license": "MIT", 957 + "dependencies": { 958 + "@atproto/lex-data": "^0.0.10", 959 + "tslib": "^2.8.1" 960 + } 961 + }, 962 + "node_modules/@atproto/ws-client/node_modules/@atproto/lex-data": { 963 + "version": "0.0.10", 964 + "resolved": "https://registry.npmjs.org/@atproto/lex-data/-/lex-data-0.0.10.tgz", 965 + "integrity": "sha512-FDbcy8VIUVzS9Mi1F8SMxbkL/jOUmRRpqbeM1xB4A0fMxeZJTxf6naAbFt4gYF3quu/+TPJGmio6/7cav05FqQ==", 966 + "license": "MIT", 967 + "dependencies": { 968 + "multiformats": "^9.9.0", 969 + "tslib": "^2.8.1", 970 + "uint8arrays": "3.0.0", 971 + "unicode-segmenter": "^0.14.0" 972 + } 973 + }, 874 974 "node_modules/@atproto/ws-client/node_modules/multiformats": { 875 975 "version": "9.9.0", 876 976 "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", ··· 1715 1815 } 1716 1816 }, 1717 1817 "node_modules/@esbuild/aix-ppc64": { 1718 - "version": "0.25.4", 1719 - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", 1720 - "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", 1818 + "version": "0.25.12", 1819 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", 1820 + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", 1721 1821 "cpu": [ 1722 1822 "ppc64" 1723 1823 ], 1724 1824 "dev": true, 1825 + "license": "MIT", 1725 1826 "optional": true, 1726 1827 "os": [ 1727 1828 "aix" ··· 1731 1832 } 1732 1833 }, 1733 1834 "node_modules/@esbuild/android-arm": { 1734 - "version": "0.25.4", 1735 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", 1736 - "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", 1835 + "version": "0.25.12", 1836 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", 1837 + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", 1737 1838 "cpu": [ 1738 1839 "arm" 1739 1840 ], 1740 1841 "dev": true, 1842 + "license": "MIT", 1741 1843 "optional": true, 1742 1844 "os": [ 1743 1845 "android" ··· 1747 1849 } 1748 1850 }, 1749 1851 "node_modules/@esbuild/android-arm64": { 1750 - "version": "0.25.4", 1751 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", 1752 - "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", 1852 + "version": "0.25.12", 1853 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", 1854 + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", 1753 1855 "cpu": [ 1754 1856 "arm64" 1755 1857 ], 1756 1858 "dev": true, 1859 + "license": "MIT", 1757 1860 "optional": true, 1758 1861 "os": [ 1759 1862 "android" ··· 1763 1866 } 1764 1867 }, 1765 1868 "node_modules/@esbuild/android-x64": { 1766 - "version": "0.25.4", 1767 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", 1768 - "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", 1869 + "version": "0.25.12", 1870 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", 1871 + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", 1769 1872 "cpu": [ 1770 1873 "x64" 1771 1874 ], 1772 1875 "dev": true, 1876 + "license": "MIT", 1773 1877 "optional": true, 1774 1878 "os": [ 1775 1879 "android" ··· 1778 1882 "node": ">=18" 1779 1883 } 1780 1884 }, 1885 + "node_modules/@esbuild/darwin-arm64": { 1886 + "version": "0.25.12", 1887 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", 1888 + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", 1889 + "cpu": [ 1890 + "arm64" 1891 + ], 1892 + "dev": true, 1893 + "license": "MIT", 1894 + "optional": true, 1895 + "os": [ 1896 + "darwin" 1897 + ], 1898 + "engines": { 1899 + "node": ">=18" 1900 + } 1901 + }, 1781 1902 "node_modules/@esbuild/darwin-x64": { 1782 - "version": "0.25.4", 1783 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", 1784 - "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", 1903 + "version": "0.25.12", 1904 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", 1905 + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", 1785 1906 "cpu": [ 1786 1907 "x64" 1787 1908 ], 1788 1909 "dev": true, 1910 + "license": "MIT", 1789 1911 "optional": true, 1790 1912 "os": [ 1791 1913 "darwin" ··· 1795 1917 } 1796 1918 }, 1797 1919 "node_modules/@esbuild/freebsd-arm64": { 1798 - "version": "0.25.4", 1799 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", 1800 - "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", 1920 + "version": "0.25.12", 1921 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", 1922 + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", 1801 1923 "cpu": [ 1802 1924 "arm64" 1803 1925 ], 1804 1926 "dev": true, 1927 + "license": "MIT", 1805 1928 "optional": true, 1806 1929 "os": [ 1807 1930 "freebsd" ··· 1811 1934 } 1812 1935 }, 1813 1936 "node_modules/@esbuild/freebsd-x64": { 1814 - "version": "0.25.4", 1815 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", 1816 - "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", 1937 + "version": "0.25.12", 1938 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", 1939 + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", 1817 1940 "cpu": [ 1818 1941 "x64" 1819 1942 ], 1820 1943 "dev": true, 1944 + "license": "MIT", 1821 1945 "optional": true, 1822 1946 "os": [ 1823 1947 "freebsd" ··· 1827 1951 } 1828 1952 }, 1829 1953 "node_modules/@esbuild/linux-arm": { 1830 - "version": "0.25.4", 1831 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", 1832 - "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", 1954 + "version": "0.25.12", 1955 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", 1956 + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", 1833 1957 "cpu": [ 1834 1958 "arm" 1835 1959 ], 1836 1960 "dev": true, 1961 + "license": "MIT", 1837 1962 "optional": true, 1838 1963 "os": [ 1839 1964 "linux" ··· 1843 1968 } 1844 1969 }, 1845 1970 "node_modules/@esbuild/linux-arm64": { 1846 - "version": "0.25.4", 1847 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", 1848 - "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", 1971 + "version": "0.25.12", 1972 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", 1973 + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", 1849 1974 "cpu": [ 1850 1975 "arm64" 1851 1976 ], 1852 1977 "dev": true, 1978 + "license": "MIT", 1853 1979 "optional": true, 1854 1980 "os": [ 1855 1981 "linux" ··· 1859 1985 } 1860 1986 }, 1861 1987 "node_modules/@esbuild/linux-ia32": { 1862 - "version": "0.25.4", 1863 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", 1864 - "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", 1988 + "version": "0.25.12", 1989 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", 1990 + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", 1865 1991 "cpu": [ 1866 1992 "ia32" 1867 1993 ], 1868 1994 "dev": true, 1995 + "license": "MIT", 1869 1996 "optional": true, 1870 1997 "os": [ 1871 1998 "linux" ··· 1875 2002 } 1876 2003 }, 1877 2004 "node_modules/@esbuild/linux-loong64": { 1878 - "version": "0.25.4", 1879 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", 1880 - "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", 2005 + "version": "0.25.12", 2006 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", 2007 + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", 1881 2008 "cpu": [ 1882 2009 "loong64" 1883 2010 ], 1884 2011 "dev": true, 2012 + "license": "MIT", 1885 2013 "optional": true, 1886 2014 "os": [ 1887 2015 "linux" ··· 1891 2019 } 1892 2020 }, 1893 2021 "node_modules/@esbuild/linux-mips64el": { 1894 - "version": "0.25.4", 1895 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", 1896 - "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", 2022 + "version": "0.25.12", 2023 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", 2024 + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", 1897 2025 "cpu": [ 1898 2026 "mips64el" 1899 2027 ], 1900 2028 "dev": true, 2029 + "license": "MIT", 1901 2030 "optional": true, 1902 2031 "os": [ 1903 2032 "linux" ··· 1907 2036 } 1908 2037 }, 1909 2038 "node_modules/@esbuild/linux-ppc64": { 1910 - "version": "0.25.4", 1911 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", 1912 - "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", 2039 + "version": "0.25.12", 2040 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", 2041 + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", 1913 2042 "cpu": [ 1914 2043 "ppc64" 1915 2044 ], 1916 2045 "dev": true, 2046 + "license": "MIT", 1917 2047 "optional": true, 1918 2048 "os": [ 1919 2049 "linux" ··· 1923 2053 } 1924 2054 }, 1925 2055 "node_modules/@esbuild/linux-riscv64": { 1926 - "version": "0.25.4", 1927 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", 1928 - "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", 2056 + "version": "0.25.12", 2057 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", 2058 + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", 1929 2059 "cpu": [ 1930 2060 "riscv64" 1931 2061 ], 1932 2062 "dev": true, 2063 + "license": "MIT", 1933 2064 "optional": true, 1934 2065 "os": [ 1935 2066 "linux" ··· 1939 2070 } 1940 2071 }, 1941 2072 "node_modules/@esbuild/linux-s390x": { 1942 - "version": "0.25.4", 1943 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", 1944 - "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", 2073 + "version": "0.25.12", 2074 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", 2075 + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", 1945 2076 "cpu": [ 1946 2077 "s390x" 1947 2078 ], 1948 2079 "dev": true, 2080 + "license": "MIT", 1949 2081 "optional": true, 1950 2082 "os": [ 1951 2083 "linux" ··· 1955 2087 } 1956 2088 }, 1957 2089 "node_modules/@esbuild/linux-x64": { 1958 - "version": "0.25.4", 1959 - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", 1960 - "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", 2090 + "version": "0.25.12", 2091 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", 2092 + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", 1961 2093 "cpu": [ 1962 2094 "x64" 1963 2095 ], ··· 1972 2104 } 1973 2105 }, 1974 2106 "node_modules/@esbuild/netbsd-arm64": { 1975 - "version": "0.25.4", 1976 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", 1977 - "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", 2107 + "version": "0.25.12", 2108 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", 2109 + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", 1978 2110 "cpu": [ 1979 2111 "arm64" 1980 2112 ], 1981 2113 "dev": true, 2114 + "license": "MIT", 1982 2115 "optional": true, 1983 2116 "os": [ 1984 2117 "netbsd" ··· 1988 2121 } 1989 2122 }, 1990 2123 "node_modules/@esbuild/netbsd-x64": { 1991 - "version": "0.25.4", 1992 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", 1993 - "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", 2124 + "version": "0.25.12", 2125 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", 2126 + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", 1994 2127 "cpu": [ 1995 2128 "x64" 1996 2129 ], 1997 2130 "dev": true, 2131 + "license": "MIT", 1998 2132 "optional": true, 1999 2133 "os": [ 2000 2134 "netbsd" ··· 2004 2138 } 2005 2139 }, 2006 2140 "node_modules/@esbuild/openbsd-arm64": { 2007 - "version": "0.25.4", 2008 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", 2009 - "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", 2141 + "version": "0.25.12", 2142 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", 2143 + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", 2010 2144 "cpu": [ 2011 2145 "arm64" 2012 2146 ], 2013 2147 "dev": true, 2148 + "license": "MIT", 2014 2149 "optional": true, 2015 2150 "os": [ 2016 2151 "openbsd" ··· 2020 2155 } 2021 2156 }, 2022 2157 "node_modules/@esbuild/openbsd-x64": { 2023 - "version": "0.25.4", 2024 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", 2025 - "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", 2158 + "version": "0.25.12", 2159 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", 2160 + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", 2026 2161 "cpu": [ 2027 2162 "x64" 2028 2163 ], 2029 2164 "dev": true, 2165 + "license": "MIT", 2030 2166 "optional": true, 2031 2167 "os": [ 2032 2168 "openbsd" ··· 2035 2171 "node": ">=18" 2036 2172 } 2037 2173 }, 2174 + "node_modules/@esbuild/openharmony-arm64": { 2175 + "version": "0.25.12", 2176 + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", 2177 + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", 2178 + "cpu": [ 2179 + "arm64" 2180 + ], 2181 + "dev": true, 2182 + "license": "MIT", 2183 + "optional": true, 2184 + "os": [ 2185 + "openharmony" 2186 + ], 2187 + "engines": { 2188 + "node": ">=18" 2189 + } 2190 + }, 2038 2191 "node_modules/@esbuild/sunos-x64": { 2039 - "version": "0.25.4", 2040 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", 2041 - "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", 2192 + "version": "0.25.12", 2193 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", 2194 + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", 2042 2195 "cpu": [ 2043 2196 "x64" 2044 2197 ], 2045 2198 "dev": true, 2199 + "license": "MIT", 2046 2200 "optional": true, 2047 2201 "os": [ 2048 2202 "sunos" ··· 2052 2206 } 2053 2207 }, 2054 2208 "node_modules/@esbuild/win32-arm64": { 2055 - "version": "0.25.4", 2056 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", 2057 - "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", 2209 + "version": "0.25.12", 2210 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", 2211 + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", 2058 2212 "cpu": [ 2059 2213 "arm64" 2060 2214 ], 2061 2215 "dev": true, 2216 + "license": "MIT", 2062 2217 "optional": true, 2063 2218 "os": [ 2064 2219 "win32" ··· 2068 2223 } 2069 2224 }, 2070 2225 "node_modules/@esbuild/win32-ia32": { 2071 - "version": "0.25.4", 2072 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", 2073 - "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", 2226 + "version": "0.25.12", 2227 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", 2228 + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", 2074 2229 "cpu": [ 2075 2230 "ia32" 2076 2231 ], 2077 2232 "dev": true, 2233 + "license": "MIT", 2078 2234 "optional": true, 2079 2235 "os": [ 2080 2236 "win32" ··· 2084 2240 } 2085 2241 }, 2086 2242 "node_modules/@esbuild/win32-x64": { 2087 - "version": "0.25.4", 2088 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", 2089 - "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", 2243 + "version": "0.25.12", 2244 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", 2245 + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", 2090 2246 "cpu": [ 2091 2247 "x64" 2092 2248 ], 2093 2249 "dev": true, 2250 + "license": "MIT", 2094 2251 "optional": true, 2095 2252 "os": [ 2096 2253 "win32" ··· 3015 3172 } 3016 3173 }, 3017 3174 "node_modules/@mdx-js/loader/node_modules/source-map": { 3018 - "version": "0.7.4", 3019 - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", 3020 - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", 3175 + "version": "0.7.6", 3176 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", 3177 + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", 3178 + "license": "BSD-3-Clause", 3021 3179 "engines": { 3022 - "node": ">= 8" 3180 + "node": ">= 12" 3023 3181 } 3024 3182 }, 3025 3183 "node_modules/@mdx-js/mdx": { ··· 3066 3224 } 3067 3225 }, 3068 3226 "node_modules/@mdx-js/mdx/node_modules/source-map": { 3069 - "version": "0.7.4", 3070 - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", 3071 - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", 3227 + "version": "0.7.6", 3228 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", 3229 + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", 3230 + "license": "BSD-3-Clause", 3072 3231 "engines": { 3073 - "node": ">= 8" 3232 + "node": ">= 12" 3074 3233 } 3075 3234 }, 3076 3235 "node_modules/@mdx-js/react": { ··· 3161 3320 } 3162 3321 }, 3163 3322 "node_modules/@next/mdx/node_modules/source-map": { 3164 - "version": "0.7.4", 3165 - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", 3166 - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", 3323 + "version": "0.7.6", 3324 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", 3325 + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", 3326 + "license": "BSD-3-Clause", 3167 3327 "engines": { 3168 - "node": ">= 8" 3328 + "node": ">= 12" 3169 3329 } 3170 3330 }, 3171 3331 "node_modules/@next/swc-darwin-arm64": { ··· 7550 7710 } 7551 7711 }, 7552 7712 "node_modules/@tailwindcss/node/node_modules/magic-string": { 7553 - "version": "0.30.19", 7554 - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", 7555 - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", 7713 + "version": "0.30.21", 7714 + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", 7715 + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", 7556 7716 "dev": true, 7557 7717 "license": "MIT", 7558 7718 "dependencies": { ··· 7806 7966 } 7807 7967 }, 7808 7968 "node_modules/@tailwindcss/oxide/node_modules/tar": { 7809 - "version": "7.5.1", 7810 - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", 7811 - "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", 7969 + "version": "7.5.7", 7970 + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", 7971 + "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", 7812 7972 "dev": true, 7813 - "license": "ISC", 7973 + "license": "BlueOak-1.0.0", 7814 7974 "dependencies": { 7815 7975 "@isaacs/fs-minipass": "^4.0.0", 7816 7976 "chownr": "^3.0.0", ··· 8143 8303 } 8144 8304 }, 8145 8305 "node_modules/@types/unist": { 8146 - "version": "3.0.2", 8147 - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", 8148 - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" 8306 + "version": "3.0.3", 8307 + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", 8308 + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", 8309 + "license": "MIT" 8149 8310 }, 8150 8311 "node_modules/@types/uuid": { 8151 8312 "version": "10.0.0", ··· 8579 8740 } 8580 8741 }, 8581 8742 "node_modules/agent-base": { 8582 - "version": "7.1.1", 8583 - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", 8584 - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", 8585 - "dependencies": { 8586 - "debug": "^4.3.4" 8587 - }, 8743 + "version": "7.1.4", 8744 + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", 8745 + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", 8746 + "license": "MIT", 8588 8747 "engines": { 8589 8748 "node": ">= 14" 8590 8749 } ··· 9063 9222 "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 9064 9223 "license": "MIT" 9065 9224 }, 9066 - "node_modules/body-parser/node_modules/qs": { 9067 - "version": "6.13.0", 9068 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", 9069 - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", 9070 - "license": "BSD-3-Clause", 9071 - "dependencies": { 9072 - "side-channel": "^1.0.6" 9073 - }, 9074 - "engines": { 9075 - "node": ">=0.6" 9076 - }, 9077 - "funding": { 9078 - "url": "https://github.com/sponsors/ljharb" 9079 - } 9080 - }, 9081 9225 "node_modules/brace-expansion": { 9082 - "version": "1.1.11", 9083 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 9084 - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 9226 + "version": "1.1.12", 9227 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", 9228 + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", 9085 9229 "dev": true, 9230 + "license": "MIT", 9086 9231 "dependencies": { 9087 9232 "balanced-match": "^1.0.0", 9088 9233 "concat-map": "0.0.1" ··· 9764 9909 "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" 9765 9910 }, 9766 9911 "node_modules/debug": { 9767 - "version": "4.4.1", 9768 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", 9769 - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", 9912 + "version": "4.4.3", 9913 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 9914 + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 9770 9915 "license": "MIT", 9771 9916 "dependencies": { 9772 9917 "ms": "^2.1.3" ··· 9920 10065 "node": "*" 9921 10066 } 9922 10067 }, 10068 + "node_modules/doctrine": { 10069 + "version": "2.1.0", 10070 + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 10071 + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 10072 + "dev": true, 10073 + "license": "Apache-2.0", 10074 + "dependencies": { 10075 + "esutils": "^2.0.2" 10076 + }, 10077 + "engines": { 10078 + "node": ">=0.10.0" 10079 + } 10080 + }, 9923 10081 "node_modules/dreamopt": { 9924 10082 "version": "0.8.0", 9925 10083 "resolved": "https://registry.npmjs.org/dreamopt/-/dreamopt-0.8.0.tgz", ··· 10816 10974 } 10817 10975 }, 10818 10976 "node_modules/esbuild": { 10819 - "version": "0.25.4", 10820 - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", 10821 - "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", 10977 + "version": "0.25.12", 10978 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", 10979 + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", 10822 10980 "dev": true, 10823 10981 "hasInstallScript": true, 10824 10982 "license": "MIT", ··· 10829 10987 "node": ">=18" 10830 10988 }, 10831 10989 "optionalDependencies": { 10832 - "@esbuild/aix-ppc64": "0.25.4", 10833 - "@esbuild/android-arm": "0.25.4", 10834 - "@esbuild/android-arm64": "0.25.4", 10835 - "@esbuild/android-x64": "0.25.4", 10836 - "@esbuild/darwin-arm64": "0.25.4", 10837 - "@esbuild/darwin-x64": "0.25.4", 10838 - "@esbuild/freebsd-arm64": "0.25.4", 10839 - "@esbuild/freebsd-x64": "0.25.4", 10840 - "@esbuild/linux-arm": "0.25.4", 10841 - "@esbuild/linux-arm64": "0.25.4", 10842 - "@esbuild/linux-ia32": "0.25.4", 10843 - "@esbuild/linux-loong64": "0.25.4", 10844 - "@esbuild/linux-mips64el": "0.25.4", 10845 - "@esbuild/linux-ppc64": "0.25.4", 10846 - "@esbuild/linux-riscv64": "0.25.4", 10847 - "@esbuild/linux-s390x": "0.25.4", 10848 - "@esbuild/linux-x64": "0.25.4", 10849 - "@esbuild/netbsd-arm64": "0.25.4", 10850 - "@esbuild/netbsd-x64": "0.25.4", 10851 - "@esbuild/openbsd-arm64": "0.25.4", 10852 - "@esbuild/openbsd-x64": "0.25.4", 10853 - "@esbuild/sunos-x64": "0.25.4", 10854 - "@esbuild/win32-arm64": "0.25.4", 10855 - "@esbuild/win32-ia32": "0.25.4", 10856 - "@esbuild/win32-x64": "0.25.4" 10990 + "@esbuild/aix-ppc64": "0.25.12", 10991 + "@esbuild/android-arm": "0.25.12", 10992 + "@esbuild/android-arm64": "0.25.12", 10993 + "@esbuild/android-x64": "0.25.12", 10994 + "@esbuild/darwin-arm64": "0.25.12", 10995 + "@esbuild/darwin-x64": "0.25.12", 10996 + "@esbuild/freebsd-arm64": "0.25.12", 10997 + "@esbuild/freebsd-x64": "0.25.12", 10998 + "@esbuild/linux-arm": "0.25.12", 10999 + "@esbuild/linux-arm64": "0.25.12", 11000 + "@esbuild/linux-ia32": "0.25.12", 11001 + "@esbuild/linux-loong64": "0.25.12", 11002 + "@esbuild/linux-mips64el": "0.25.12", 11003 + "@esbuild/linux-ppc64": "0.25.12", 11004 + "@esbuild/linux-riscv64": "0.25.12", 11005 + "@esbuild/linux-s390x": "0.25.12", 11006 + "@esbuild/linux-x64": "0.25.12", 11007 + "@esbuild/netbsd-arm64": "0.25.12", 11008 + "@esbuild/netbsd-x64": "0.25.12", 11009 + "@esbuild/openbsd-arm64": "0.25.12", 11010 + "@esbuild/openbsd-x64": "0.25.12", 11011 + "@esbuild/openharmony-arm64": "0.25.12", 11012 + "@esbuild/sunos-x64": "0.25.12", 11013 + "@esbuild/win32-arm64": "0.25.12", 11014 + "@esbuild/win32-ia32": "0.25.12", 11015 + "@esbuild/win32-x64": "0.25.12" 10857 11016 } 10858 11017 }, 10859 11018 "node_modules/esbuild-register": { ··· 10866 11025 }, 10867 11026 "peerDependencies": { 10868 11027 "esbuild": ">=0.12 <1" 10869 - } 10870 - }, 10871 - "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { 10872 - "version": "0.25.4", 10873 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", 10874 - "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", 10875 - "cpu": [ 10876 - "arm64" 10877 - ], 10878 - "dev": true, 10879 - "optional": true, 10880 - "os": [ 10881 - "darwin" 10882 - ], 10883 - "engines": { 10884 - "node": ">=18" 10885 11028 } 10886 11029 }, 10887 11030 "node_modules/escalade": { ··· 11119 11262 "ms": "^2.1.1" 11120 11263 } 11121 11264 }, 11122 - "node_modules/eslint-plugin-import/node_modules/doctrine": { 11123 - "version": "2.1.0", 11124 - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 11125 - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 11126 - "dev": true, 11127 - "dependencies": { 11128 - "esutils": "^2.0.2" 11129 - }, 11130 - "engines": { 11131 - "node": ">=0.10.0" 11132 - } 11133 - }, 11134 11265 "node_modules/eslint-plugin-import/node_modules/semver": { 11135 11266 "version": "6.3.1", 11136 11267 "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", ··· 11222 11353 "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" 11223 11354 } 11224 11355 }, 11225 - "node_modules/eslint-plugin-react-hooks/node_modules/zod": { 11226 - "version": "4.1.12", 11227 - "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz", 11228 - "integrity": "sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==", 11229 - "dev": true, 11230 - "funding": { 11231 - "url": "https://github.com/sponsors/colinhacks" 11232 - } 11233 - }, 11234 11356 "node_modules/eslint-plugin-react-hooks/node_modules/zod-validation-error": { 11235 11357 "version": "4.0.2", 11236 11358 "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", ··· 11243 11365 "zod": "^3.25.0 || ^4.0.0" 11244 11366 } 11245 11367 }, 11246 - "node_modules/eslint-plugin-react/node_modules/doctrine": { 11247 - "version": "2.1.0", 11248 - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 11249 - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 11250 - "dev": true, 11251 - "license": "Apache-2.0", 11252 - "dependencies": { 11253 - "esutils": "^2.0.2" 11254 - }, 11255 - "engines": { 11256 - "node": ">=0.10.0" 11257 - } 11258 - }, 11259 11368 "node_modules/eslint-plugin-react/node_modules/resolve": { 11260 11369 "version": "2.0.0-next.5", 11261 11370 "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", ··· 11449 11558 } 11450 11559 }, 11451 11560 "node_modules/estree-util-to-js/node_modules/source-map": { 11452 - "version": "0.7.4", 11453 - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", 11454 - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", 11561 + "version": "0.7.6", 11562 + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", 11563 + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", 11564 + "license": "BSD-3-Clause", 11455 11565 "engines": { 11456 - "node": ">= 8" 11566 + "node": ">= 12" 11457 11567 } 11458 11568 }, 11459 11569 "node_modules/estree-util-visit": { ··· 11615 11725 "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", 11616 11726 "license": "MIT" 11617 11727 }, 11618 - "node_modules/express/node_modules/qs": { 11619 - "version": "6.13.0", 11620 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", 11621 - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", 11622 - "license": "BSD-3-Clause", 11623 - "dependencies": { 11624 - "side-channel": "^1.0.6" 11625 - }, 11626 - "engines": { 11627 - "node": ">=0.6" 11628 - }, 11629 - "funding": { 11630 - "url": "https://github.com/sponsors/ljharb" 11631 - } 11632 - }, 11633 11728 "node_modules/ext": { 11634 11729 "version": "1.7.0", 11635 11730 "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", ··· 11651 11746 "dev": true 11652 11747 }, 11653 11748 "node_modules/fast-glob": { 11654 - "version": "3.3.2", 11655 - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 11656 - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 11749 + "version": "3.3.3", 11750 + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", 11751 + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", 11657 11752 "dev": true, 11753 + "license": "MIT", 11658 11754 "dependencies": { 11659 11755 "@nodelib/fs.stat": "^2.0.2", 11660 11756 "@nodelib/fs.walk": "^1.2.3", 11661 11757 "glob-parent": "^5.1.2", 11662 11758 "merge2": "^1.3.0", 11663 - "micromatch": "^4.0.4" 11759 + "micromatch": "^4.0.8" 11664 11760 }, 11665 11761 "engines": { 11666 11762 "node": ">=8.6.0" ··· 11944 12040 "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 11945 12041 "dev": true 11946 12042 }, 12043 + "node_modules/fsevents": { 12044 + "version": "2.3.3", 12045 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 12046 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 12047 + "dev": true, 12048 + "hasInstallScript": true, 12049 + "license": "MIT", 12050 + "optional": true, 12051 + "os": [ 12052 + "darwin" 12053 + ], 12054 + "engines": { 12055 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 12056 + } 12057 + }, 11947 12058 "node_modules/function-bind": { 11948 12059 "version": "1.1.2", 11949 12060 "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", ··· 12194 12305 "dev": true 12195 12306 }, 12196 12307 "node_modules/glob/node_modules/brace-expansion": { 12197 - "version": "2.0.1", 12198 - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 12199 - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 12308 + "version": "2.0.2", 12309 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", 12310 + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", 12200 12311 "dev": true, 12312 + "license": "MIT", 12201 12313 "dependencies": { 12202 12314 "balanced-match": "^1.0.0" 12203 12315 } ··· 12737 12849 } 12738 12850 }, 12739 12851 "node_modules/https-proxy-agent": { 12740 - "version": "7.0.4", 12741 - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", 12742 - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", 12852 + "version": "7.0.6", 12853 + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", 12854 + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", 12855 + "license": "MIT", 12743 12856 "dependencies": { 12744 - "agent-base": "^7.0.2", 12857 + "agent-base": "^7.1.2", 12745 12858 "debug": "4" 12746 12859 }, 12747 12860 "engines": { ··· 12781 12894 "license": "BSD-3-Clause" 12782 12895 }, 12783 12896 "node_modules/ignore": { 12784 - "version": "5.3.1", 12785 - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", 12786 - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", 12897 + "version": "5.3.2", 12898 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", 12899 + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", 12787 12900 "dev": true, 12901 + "license": "MIT", 12788 12902 "engines": { 12789 12903 "node": ">= 4" 12790 12904 } ··· 12853 12967 "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 12854 12968 }, 12855 12969 "node_modules/inline-style-parser": { 12856 - "version": "0.2.4", 12857 - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", 12858 - "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==" 12970 + "version": "0.2.7", 12971 + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", 12972 + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", 12973 + "license": "MIT" 12859 12974 }, 12860 12975 "node_modules/inngest": { 12861 12976 "version": "3.40.1", ··· 13016 13131 } 13017 13132 }, 13018 13133 "node_modules/ipaddr.js": { 13019 - "version": "2.2.0", 13020 - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", 13021 - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", 13134 + "version": "2.3.0", 13135 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", 13136 + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", 13022 13137 "license": "MIT", 13023 13138 "engines": { 13024 13139 "node": ">= 10" ··· 14189 14304 } 14190 14305 }, 14191 14306 "node_modules/lru-cache": { 14192 - "version": "10.2.2", 14193 - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", 14194 - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", 14195 - "engines": { 14196 - "node": "14 || >=16.14" 14197 - } 14307 + "version": "10.4.3", 14308 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 14309 + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 14310 + "license": "ISC" 14198 14311 }, 14199 14312 "node_modules/lru-queue": { 14200 14313 "version": "0.1.0", ··· 15298 15411 ] 15299 15412 }, 15300 15413 "node_modules/micromatch": { 15301 - "version": "4.0.7", 15302 - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", 15303 - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", 15414 + "version": "4.0.8", 15415 + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", 15416 + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", 15304 15417 "dev": true, 15418 + "license": "MIT", 15305 15419 "dependencies": { 15306 15420 "braces": "^3.0.3", 15307 15421 "picomatch": "^2.3.1" ··· 15368 15482 } 15369 15483 }, 15370 15484 "node_modules/miniflare/node_modules/undici": { 15371 - "version": "5.28.4", 15372 - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", 15373 - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", 15485 + "version": "5.29.0", 15486 + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", 15487 + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", 15374 15488 "dev": true, 15489 + "license": "MIT", 15375 15490 "dependencies": { 15376 15491 "@fastify/busboy": "^2.0.0" 15377 15492 }, ··· 15465 15580 "license": "MIT" 15466 15581 }, 15467 15582 "node_modules/multiformats": { 15468 - "version": "13.3.2", 15469 - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", 15470 - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", 15583 + "version": "13.4.2", 15584 + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.4.2.tgz", 15585 + "integrity": "sha512-eh6eHCrRi1+POZ3dA+Dq1C6jhP1GNtr9CRINMb67OKzqW9I5DUuZM/3jLPlzhgpGeiNUlEGEbkCYChXMCc/8DQ==", 15471 15586 "license": "Apache-2.0 OR MIT" 15472 15587 }, 15473 15588 "node_modules/mustache": { ··· 16053 16168 "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 16054 16169 }, 16055 16170 "node_modules/path-to-regexp": { 16056 - "version": "6.2.2", 16057 - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", 16058 - "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", 16059 - "dev": true 16171 + "version": "6.3.0", 16172 + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", 16173 + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", 16174 + "dev": true, 16175 + "license": "MIT" 16060 16176 }, 16061 16177 "node_modules/pg": { 16062 16178 "version": "8.16.3", ··· 16526 16642 "prosemirror-view": "^1.37.2" 16527 16643 } 16528 16644 }, 16529 - "node_modules/prosemirror-tables/node_modules/prosemirror-view": { 16530 - "version": "1.39.2", 16531 - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.39.2.tgz", 16532 - "integrity": "sha512-BmOkml0QWNob165gyUxXi5K5CVUgVPpqMEAAml/qzgKn9boLUWVPzQ6LtzXw8Cn1GtRQX4ELumPxqtLTDaAKtg==", 16533 - "license": "MIT", 16534 - "peer": true, 16535 - "dependencies": { 16536 - "prosemirror-model": "^1.20.0", 16537 - "prosemirror-state": "^1.0.0", 16538 - "prosemirror-transform": "^1.1.0" 16539 - } 16540 - }, 16541 16645 "node_modules/prosemirror-trailing-node": { 16542 16646 "version": "3.0.0", 16543 16647 "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz", ··· 16564 16668 } 16565 16669 }, 16566 16670 "node_modules/prosemirror-view": { 16567 - "version": "1.37.1", 16568 - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.37.1.tgz", 16569 - "integrity": "sha512-MEAnjOdXU1InxEmhjgmEzQAikaS6lF3hD64MveTPpjOGNTl87iRLA1HupC/DEV6YuK7m4Q9DHFNTjwIVtqz5NA==", 16671 + "version": "1.41.5", 16672 + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.41.5.tgz", 16673 + "integrity": "sha512-UDQbIPnDrjE8tqUBbPmCOZgtd75htE6W3r0JCmY9bL6W1iemDM37MZEKC49d+tdQ0v/CKx4gjxLoLsfkD2NiZA==", 16570 16674 "license": "MIT", 16571 16675 "dependencies": { 16572 16676 "prosemirror-model": "^1.20.0", ··· 16645 16749 } 16646 16750 }, 16647 16751 "node_modules/qs": { 16648 - "version": "6.13.1", 16649 - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", 16650 - "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", 16752 + "version": "6.13.0", 16753 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", 16754 + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", 16651 16755 "license": "BSD-3-Clause", 16652 16756 "dependencies": { 16653 16757 "side-channel": "^1.0.6" ··· 17387 17491 } 17388 17492 }, 17389 17493 "node_modules/resolve": { 17390 - "version": "1.22.8", 17391 - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 17392 - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 17494 + "version": "1.22.11", 17495 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", 17496 + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", 17497 + "license": "MIT", 17393 17498 "dependencies": { 17394 - "is-core-module": "^2.13.0", 17499 + "is-core-module": "^2.16.1", 17395 17500 "path-parse": "^1.0.7", 17396 17501 "supports-preserve-symlinks-flag": "^1.0.0" 17397 17502 }, 17398 17503 "bin": { 17399 17504 "resolve": "bin/resolve" 17400 17505 }, 17506 + "engines": { 17507 + "node": ">= 0.4" 17508 + }, 17401 17509 "funding": { 17402 17510 "url": "https://github.com/sponsors/ljharb" 17403 17511 } ··· 17620 17728 } 17621 17729 }, 17622 17730 "node_modules/semver": { 17623 - "version": "7.7.2", 17624 - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", 17625 - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", 17731 + "version": "7.7.3", 17732 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", 17733 + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", 17626 17734 "license": "ISC", 17627 17735 "bin": { 17628 17736 "semver": "bin/semver.js" ··· 18251 18359 } 18252 18360 }, 18253 18361 "node_modules/style-to-object": { 18254 - "version": "1.0.8", 18255 - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", 18256 - "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", 18362 + "version": "1.0.14", 18363 + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", 18364 + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", 18365 + "license": "MIT", 18257 18366 "dependencies": { 18258 - "inline-style-parser": "0.2.4" 18367 + "inline-style-parser": "0.2.7" 18259 18368 } 18260 18369 }, 18261 18370 "node_modules/styled-jsx": { ··· 18821 18930 } 18822 18931 }, 18823 18932 "node_modules/undici": { 18824 - "version": "6.21.3", 18825 - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", 18826 - "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", 18933 + "version": "6.23.0", 18934 + "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", 18935 + "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", 18827 18936 "license": "MIT", 18828 18937 "engines": { 18829 18938 "node": ">=18.17" ··· 19821 19930 } 19822 19931 }, 19823 19932 "node_modules/ws": { 19824 - "version": "8.17.0", 19825 - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", 19826 - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", 19933 + "version": "8.19.0", 19934 + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", 19935 + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", 19936 + "license": "MIT", 19827 19937 "engines": { 19828 19938 "node": ">=10.0.0" 19829 19939 }, ··· 20011 20121 } 20012 20122 }, 20013 20123 "node_modules/zod": { 20014 - "version": "3.23.8", 20015 - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", 20016 - "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", 20124 + "version": "3.25.76", 20125 + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", 20126 + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", 20127 + "license": "MIT", 20017 20128 "funding": { 20018 20129 "url": "https://github.com/sponsors/colinhacks" 20019 20130 }
+3 -2
package.json
··· 23 23 "@atproto/api": "^0.16.9", 24 24 "@atproto/common": "^0.4.8", 25 25 "@atproto/identity": "^0.4.6", 26 - "@atproto/lexicon": "^0.5.1", 26 + "@atproto/lexicon": "^0.6.1", 27 27 "@atproto/oauth-client-node": "^0.3.8", 28 28 "@atproto/sync": "^0.1.34", 29 29 "@atproto/syntax": "^0.3.3", ··· 125 125 "ajv": "^8.17.1", 126 126 "whatwg-url": "^14.0.0", 127 127 "@types/react": "19.2.6", 128 - "@types/react-dom": "19.2.3" 128 + "@types/react-dom": "19.2.3", 129 + "@atproto/lexicon": "^0.6.1" 129 130 } 130 131 }
-284
patterns/lexicons.md
··· 1 - # Lexicon System 2 - 3 - ## Overview 4 - 5 - Lexicons define the schema for AT Protocol records. This project has two namespaces: 6 - - **`pub.leaflet.*`** - Leaflet-specific lexicons (documents, publications, blocks, etc.) 7 - - **`site.standard.*`** - Standard site lexicons for interoperability 8 - 9 - The lexicons are defined as TypeScript in `lexicons/src/`, built to JSON in `lexicons/pub/leaflet/` and `lexicons/site/standard/`, and TypeScript types are generated in `lexicons/api/`. 10 - 11 - ## Key Files 12 - 13 - - **`lexicons/src/*.ts`** - Source definitions for `pub.leaflet.*` lexicons 14 - - **`lexicons/site/standard/**/*.json`** - JSON definitions for `site.standard.*` lexicons (manually maintained) 15 - - **`lexicons/build.ts`** - Builds TypeScript sources to JSON 16 - - **`lexicons/api/`** - Generated TypeScript types and client 17 - - **`package.json`** - Contains `lexgen` script 18 - 19 - ## Running Lexicon Generation 20 - 21 - ```bash 22 - npm run lexgen 23 - ``` 24 - 25 - This runs: 26 - 1. `tsx ./lexicons/build.ts` - Builds `pub.leaflet.*` JSON from TypeScript 27 - 2. `lex gen-api` - Generates TypeScript types from all JSON lexicons 28 - 3. `tsx ./lexicons/fix-extensions.ts` - Fixes import extensions 29 - 30 - ## Adding a New pub.leaflet Lexicon 31 - 32 - ### 1. Create the Source Definition 33 - 34 - Create a file in `lexicons/src/` (e.g., `lexicons/src/myLexicon.ts`): 35 - 36 - ```typescript 37 - import { LexiconDoc } from "@atproto/lexicon"; 38 - 39 - export const PubLeafletMyLexicon: LexiconDoc = { 40 - lexicon: 1, 41 - id: "pub.leaflet.myLexicon", 42 - defs: { 43 - main: { 44 - type: "record", // or "object" for non-record types 45 - key: "tid", 46 - record: { 47 - type: "object", 48 - required: ["field1"], 49 - properties: { 50 - field1: { type: "string", maxLength: 1000 }, 51 - field2: { type: "integer", minimum: 0 }, 52 - optionalRef: { type: "ref", ref: "other.lexicon#def" }, 53 - }, 54 - }, 55 - }, 56 - // Additional defs for sub-objects 57 - subType: { 58 - type: "object", 59 - properties: { 60 - nested: { type: "string" }, 61 - }, 62 - }, 63 - }, 64 - }; 65 - ``` 66 - 67 - ### 2. Add to Build 68 - 69 - Update `lexicons/build.ts`: 70 - 71 - ```typescript 72 - import { PubLeafletMyLexicon } from "./src/myLexicon"; 73 - 74 - const lexicons = [ 75 - // ... existing lexicons 76 - PubLeafletMyLexicon, 77 - ]; 78 - ``` 79 - 80 - ### 3. Update lexgen Command (if needed) 81 - 82 - If your lexicon is at the top level of `pub/leaflet/` (not in a subdirectory), add it to the `lexgen` script in `package.json`: 83 - 84 - ```json 85 - "lexgen": "tsx ./lexicons/build.ts && lex gen-api ./lexicons/api ./lexicons/pub/leaflet/document.json ./lexicons/pub/leaflet/myLexicon.json ./lexicons/pub/leaflet/*/* ..." 86 - ``` 87 - 88 - Note: Files in subdirectories (`pub/leaflet/*/*`) are automatically included. 89 - 90 - ### 4. Regenerate Types 91 - 92 - ```bash 93 - npm run lexgen 94 - ``` 95 - 96 - ### 5. Use the Generated Types 97 - 98 - ```typescript 99 - import { PubLeafletMyLexicon } from "lexicons/api"; 100 - 101 - // Type for the record 102 - type MyRecord = PubLeafletMyLexicon.Record; 103 - 104 - // Validation 105 - const result = PubLeafletMyLexicon.validateRecord(data); 106 - if (result.success) { 107 - // result.value is typed 108 - } 109 - 110 - // Type guard 111 - if (PubLeafletMyLexicon.isRecord(data)) { 112 - // data is typed as Record 113 - } 114 - ``` 115 - 116 - ## Adding a New site.standard Lexicon 117 - 118 - ### 1. Create the JSON Definition 119 - 120 - Create a file in `lexicons/site/standard/` (e.g., `lexicons/site/standard/myType.json`): 121 - 122 - ```json 123 - { 124 - "lexicon": 1, 125 - "id": "site.standard.myType", 126 - "defs": { 127 - "main": { 128 - "type": "record", 129 - "key": "tid", 130 - "record": { 131 - "type": "object", 132 - "required": ["field1"], 133 - "properties": { 134 - "field1": { 135 - "type": "string", 136 - "maxLength": 1000 137 - } 138 - } 139 - } 140 - } 141 - } 142 - } 143 - ``` 144 - 145 - ### 2. Regenerate Types 146 - 147 - ```bash 148 - npm run lexgen 149 - ``` 150 - 151 - The `site/*/* site/*/*/*` globs in the lexgen command automatically pick up new files. 152 - 153 - ## Common Lexicon Patterns 154 - 155 - ### Referencing Other Lexicons 156 - 157 - ```typescript 158 - // Reference another lexicon's main def 159 - { type: "ref", ref: "pub.leaflet.publication" } 160 - 161 - // Reference a specific def within a lexicon 162 - { type: "ref", ref: "pub.leaflet.publication#theme" } 163 - 164 - // Reference within the same lexicon 165 - { type: "ref", ref: "#myDef" } 166 - ``` 167 - 168 - ### Union Types 169 - 170 - ```typescript 171 - { 172 - type: "union", 173 - refs: [ 174 - "pub.leaflet.pages.linearDocument", 175 - "pub.leaflet.pages.canvas", 176 - ], 177 - } 178 - 179 - // Open union (allows unknown types) 180 - { 181 - type: "union", 182 - closed: false, // default is true 183 - refs: ["pub.leaflet.content"], 184 - } 185 - ``` 186 - 187 - ### Blob Types (for images/files) 188 - 189 - ```typescript 190 - { 191 - type: "blob", 192 - accept: ["image/*"], // or specific types like ["image/png", "image/jpeg"] 193 - maxSize: 1000000, // bytes 194 - } 195 - ``` 196 - 197 - ### Color Types 198 - 199 - The project has color types defined: 200 - - `pub.leaflet.theme.color#rgb` / `#rgba` 201 - - `site.standard.theme.color#rgb` / `#rgba` 202 - 203 - ```typescript 204 - // In lexicons/src/theme.ts 205 - export const ColorUnion = { 206 - type: "union", 207 - refs: [ 208 - "pub.leaflet.theme.color#rgba", 209 - "pub.leaflet.theme.color#rgb", 210 - ], 211 - }; 212 - ``` 213 - 214 - ## Normalization Between Formats 215 - 216 - Use `lexicons/src/normalize.ts` to convert between `pub.leaflet` and `site.standard` formats: 217 - 218 - ```typescript 219 - import { 220 - normalizeDocument, 221 - normalizePublication, 222 - isLeafletDocument, 223 - isStandardDocument, 224 - getDocumentPages, 225 - } from "lexicons/src/normalize"; 226 - 227 - // Normalize a document from either format 228 - const normalized = normalizeDocument(record); 229 - if (normalized) { 230 - // normalized is always in site.standard.document format 231 - console.log(normalized.title, normalized.site); 232 - 233 - // Get pages if content is pub.leaflet.content 234 - const pages = getDocumentPages(normalized); 235 - } 236 - 237 - // Normalize a publication 238 - const pub = normalizePublication(record); 239 - if (pub) { 240 - console.log(pub.name, pub.url); 241 - } 242 - ``` 243 - 244 - ## Handling in Appview (Firehose Consumer) 245 - 246 - When processing records from the firehose in `appview/index.ts`: 247 - 248 - ```typescript 249 - import { ids } from "lexicons/api/lexicons"; 250 - import { PubLeafletMyLexicon } from "lexicons/api"; 251 - 252 - // In filterCollections: 253 - filterCollections: [ 254 - ids.PubLeafletMyLexicon, 255 - // ... 256 - ], 257 - 258 - // In handleEvent: 259 - if (evt.collection === ids.PubLeafletMyLexicon) { 260 - if (evt.event === "create" || evt.event === "update") { 261 - let record = PubLeafletMyLexicon.validateRecord(evt.record); 262 - if (!record.success) return; 263 - 264 - // Store in database 265 - await supabase.from("my_table").upsert({ 266 - uri: evt.uri.toString(), 267 - data: record.value as Json, 268 - }); 269 - } 270 - if (evt.event === "delete") { 271 - await supabase.from("my_table").delete().eq("uri", evt.uri.toString()); 272 - } 273 - } 274 - ``` 275 - 276 - ## Publishing Lexicons 277 - 278 - To publish lexicons to an AT Protocol PDS: 279 - 280 - ```bash 281 - npm run publish-lexicons 282 - ``` 283 - 284 - This runs `lexicons/publish.ts` which publishes lexicons to the configured PDS.
patterns/notifications.md .claude/skills/notifications.md
+2 -5
src/utils/mentionUtils.ts
··· 19 19 const uri = new AtUri(atUri); 20 20 21 21 if (isPublicationCollection(uri.collection)) { 22 - // Publication URL: /lish/{did}/{rkey} 23 - return `/lish/${uri.host}/${uri.rkey}`; 22 + return `/lish/uri/${encodeURIComponent(atUri)}`; 24 23 } else if (isDocumentCollection(uri.collection)) { 25 - // Document URL - we need to resolve this via the API 26 - // For now, create a redirect route that will handle it 27 24 return `/lish/uri/${encodeURIComponent(atUri)}`; 28 25 } 29 26 ··· 42 39 export function handleMentionClick( 43 40 e: MouseEvent | React.MouseEvent, 44 41 type: "did" | "at-uri", 45 - value: string 42 + value: string, 46 43 ) { 47 44 e.preventDefault(); 48 45 e.stopPropagation();