a tool for shared writing and social publishing

Feature/quotes (#146)

* quote trigger

* added some functionality to quote buttons

* added quote drawer

* fun things with scroll in the quote drawer

* made the scrolling work with the quote sidebar

* added state to the drawer and a floating collapsed header for mobile

* small things to clean up

* moved some stuff around, truncated the quote in teh drawer

* tweaks

* WIP

* styled quotes

* add table for bsky mentions and write from appview

* wip

* a bunch of changes to handle published quotes

* update inngest function

* render list items better

* add z index to interactions drawer

* wip quote styling

* Fix migration issues

* install inngest

* formatting quotes

* forgot to delete something

* multiple changes, make codeblocks not server, make layout work

* only highlight quote on hover

* some styling tweaks

* default to forward selection for quote tooltip position

* add profile images to quotes

* fixed border styling issues

* rm post header on mobile for now!

* tweak bluesky post styles

* fix quotehandle tooltip positioning

* fix appview inngest function call name

---------

Co-authored-by: celine <celine@hyperlink.academy>

authored by awarm.space

celine and committed by
GitHub
908bee1d dfa2cee2

+4042 -2540
-59
.github/workflows/claude.yml
··· 1 - name: Claude Code 2 - 3 - on: 4 - issue_comment: 5 - types: [created] 6 - pull_request_review_comment: 7 - types: [created] 8 - issues: 9 - types: [opened, assigned] 10 - pull_request_review: 11 - types: [submitted] 12 - 13 - jobs: 14 - claude: 15 - if: | 16 - (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) || 17 - (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) || 18 - (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) || 19 - (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))) 20 - runs-on: ubuntu-latest 21 - permissions: 22 - contents: read 23 - pull-requests: read 24 - issues: read 25 - id-token: write 26 - steps: 27 - - name: Checkout repository 28 - uses: actions/checkout@v4 29 - with: 30 - fetch-depth: 1 31 - 32 - - name: Run Claude Code 33 - id: claude 34 - uses: anthropics/claude-code-action@beta 35 - with: 36 - anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} 37 - 38 - # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4) 39 - # model: "claude-opus-4-20250514" 40 - 41 - # Optional: Customize the trigger phrase (default: @claude) 42 - # trigger_phrase: "/claude" 43 - 44 - # Optional: Trigger when specific user is assigned to an issue 45 - # assignee_trigger: "claude-bot" 46 - 47 - # Optional: Allow Claude to run specific commands 48 - # allowed_tools: "Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)" 49 - 50 - # Optional: Add custom instructions for Claude to customize its behavior for your project 51 - # custom_instructions: | 52 - # Follow our coding standards 53 - # Ensure all new code has tests 54 - # Use TypeScript for new files 55 - 56 - # Optional: Custom environment variables for Claude 57 - # claude_env: | 58 - # NODE_ENV: test 59 -
+18
app/api/inngest/client.ts
··· 1 + import { Inngest } from "inngest"; 2 + 3 + import { EventSchemas } from "inngest"; 4 + 5 + export type Events = { 6 + "appview/index-bsky-post-mention": { 7 + data: { 8 + post_uri: string; 9 + document_link: string; 10 + }; 11 + }; 12 + }; 13 + 14 + // Create a client to send and receive events 15 + export const inngest = new Inngest({ 16 + id: "leaflet", 17 + schemas: new EventSchemas().fromRecord<Events>(), 18 + });
+57
app/api/inngest/functions/index_post_mention.ts
··· 1 + import { supabaseServerClient } from "supabase/serverClient"; 2 + import { inngest } from "../client"; 3 + import { AtpAgent, AtUri } from "@atproto/api"; 4 + import { Json } from "supabase/database.types"; 5 + import { ids } from "lexicons/api/lexicons"; 6 + 7 + export const index_post_mention = inngest.createFunction( 8 + { id: "index_post_mention" }, 9 + { event: "appview/index-bsky-post-mention" }, 10 + async ({ event, step }) => { 11 + let url = new URL(event.data.document_link); 12 + let path = url.pathname.split("/").filter(Boolean); 13 + 14 + let { data: pub, error } = await supabaseServerClient 15 + .from("publications") 16 + .select("*") 17 + .eq("record->>base_path", url.host) 18 + .single(); 19 + 20 + if (!pub) { 21 + return { 22 + message: `No publication found for ${url.host}/${path[0]}`, 23 + error, 24 + }; 25 + } 26 + 27 + let bsky_post = await step.run("get-bsky-post-data", async () => { 28 + let agent = new AtpAgent({ service: "https://public.api.bsky.app" }); 29 + let posts = await agent.app.bsky.feed.getPosts({ 30 + uris: [event.data.post_uri], 31 + }); 32 + if (!posts.data.posts[0]) return null; 33 + return posts.data.posts[0]; 34 + }); 35 + 36 + if (!bsky_post) { 37 + return { message: `No post found for ${event.data.post_uri}` }; 38 + } 39 + 40 + await step.run("index-bsky-post", async () => { 41 + await supabaseServerClient.from("bsky_posts").insert({ 42 + uri: bsky_post.uri, 43 + cid: bsky_post.cid, 44 + post_view: bsky_post as Json, 45 + }); 46 + await supabaseServerClient.from("document_mentions_in_bsky").insert({ 47 + uri: bsky_post.uri, 48 + document: AtUri.make( 49 + pub.identity_did, 50 + ids.PubLeafletDocument, 51 + path[0], 52 + ).toString(), 53 + link: event.data.document_link, 54 + }); 55 + }); 56 + }, 57 + );
+9
app/api/inngest/route.tsx
··· 1 + import { serve } from "inngest/next"; 2 + import { inngest } from "app/api/inngest/client"; 3 + import { index_post_mention } from "./functions/index_post_mention"; 4 + 5 + // Create an API that serves zero functions 6 + export const { GET, POST, PUT } = serve({ 7 + client: inngest, 8 + functions: [index_post_mention], 9 + });
+7
app/globals.css
··· 65 65 min-height: -webkit-fill-available; 66 66 @apply font-sans; 67 67 font-synthesis: none; 68 + scrollbar-gutter: stable; 68 69 } 69 70 70 71 #__next { ··· 252 253 @apply outline-offset-1; 253 254 @apply outline-2; 254 255 @apply outline-border; 256 + } 257 + 258 + .transparent-container { 259 + @apply border; 260 + @apply border-border-light; 261 + @apply rounded-md; 255 262 } 256 263 257 264 .container {
+27
app/lish/[did]/[publication]/[rkey]/Interactions/InteractionDrawer.tsx
··· 1 + "use client"; 2 + import { Media } from "components/Media"; 3 + import { Quotes } from "./Quotes"; 4 + import { useInteractionState } from "./Interactions"; 5 + import { Json } from "supabase/database.types"; 6 + 7 + export const InteractionDrawer = (props: { 8 + quotes: { link: string; bsky_posts: { post_view: Json } | null }[]; 9 + did: string; 10 + }) => { 11 + let { drawerOpen: open } = useInteractionState(); 12 + if (!open) return null; 13 + return ( 14 + <> 15 + <div className="sm:pr-4 pr-[6px] snap-center"> 16 + <div className="shrink-0 w-96 max-w-[var(--page-width-units)] h-full flex z-10"> 17 + <div 18 + id="interaction-drawer" 19 + className="opaque-container !rounded-lg h-full w-full px-3 sm:px-4 pt-2 sm:pt-3 pb-6 overflow-scroll " 20 + > 21 + <Quotes {...props} /> 22 + </div> 23 + </div> 24 + </div> 25 + </> 26 + ); 27 + };
+75
app/lish/[did]/[publication]/[rkey]/Interactions/Interactions.tsx
··· 1 + "use client"; 2 + import { QuoteTiny } from "components/Icons/QuoteTiny"; 3 + import { flushSync } from "react-dom"; 4 + import { Json } from "supabase/database.types"; 5 + import { create } from "zustand"; 6 + 7 + export let useInteractionState = create(() => ({ drawerOpen: false })); 8 + export function openInteractionDrawer() { 9 + flushSync(() => { 10 + useInteractionState.setState({ drawerOpen: true }); 11 + }); 12 + let el = document.getElementById("interaction-drawer"); 13 + let isIntersecting = false; 14 + if (el) { 15 + const rect = el.getBoundingClientRect(); 16 + const windowHeight = 17 + window.innerHeight || document.documentElement.clientHeight; 18 + const windowWidth = 19 + window.innerWidth || document.documentElement.clientWidth; 20 + isIntersecting = 21 + rect.top < windowHeight && 22 + rect.bottom > 0 && 23 + rect.left < windowWidth && 24 + rect.right > 0; 25 + } 26 + 27 + if (el && !isIntersecting) el.scrollIntoView({ behavior: "smooth" }); 28 + } 29 + 30 + export const Interactions = (props: { 31 + quotes: { link: string; bsky_posts: { post_view: Json } | null }[]; 32 + compact?: boolean; 33 + className?: string; 34 + }) => { 35 + let { drawerOpen } = useInteractionState(); 36 + 37 + return ( 38 + <div 39 + className={`flex gap-2 text-tertiary ${props.compact ? "text-sm" : ""} ${props.className}`} 40 + > 41 + <button 42 + className={`flex gap-1 items-center ${!props.compact && "px-1 py-0.5 border border-border-light rounded-lg trasparent-outline selected-outline"}`} 43 + onClick={() => { 44 + if (!drawerOpen) openInteractionDrawer(); 45 + else useInteractionState.setState({ drawerOpen: false }); 46 + }} 47 + > 48 + <QuoteTiny /> {props.quotes.length} {!props.compact && "Quotes"} 49 + </button> 50 + </div> 51 + ); 52 + }; 53 + 54 + function getFirstScrollableAncestor(element: HTMLElement): HTMLElement | null { 55 + let parent = element.parentElement; 56 + 57 + while (parent) { 58 + const computedStyle = window.getComputedStyle(parent); 59 + const overflowY = computedStyle.overflowY; 60 + const overflowX = computedStyle.overflowX; 61 + 62 + if ( 63 + overflowY === "scroll" || 64 + overflowY === "auto" || 65 + overflowX === "scroll" || 66 + overflowX === "auto" 67 + ) { 68 + return parent; 69 + } 70 + 71 + parent = parent.parentElement; 72 + } 73 + 74 + return null; 75 + }
+345
app/lish/[did]/[publication]/[rkey]/Interactions/Quotes.tsx
··· 1 + "use client"; 2 + import { CloseTiny } from "components/Icons/CloseTiny"; 3 + import { useContext } from "react"; 4 + import { useIsMobile } from "src/hooks/isMobile"; 5 + import { useInteractionState } from "./Interactions"; 6 + import { PostView } from "@atproto/api/dist/client/types/app/bsky/feed/defs"; 7 + import { AtUri } from "@atproto/api"; 8 + import { Json } from "supabase/database.types"; 9 + import { PostPageContext } from "../PostPageContext"; 10 + import { 11 + PubLeafletBlocksText, 12 + PubLeafletBlocksUnorderedList, 13 + PubLeafletBlocksHeader, 14 + PubLeafletDocument, 15 + PubLeafletPagesLinearDocument, 16 + PubLeafletBlocksCode, 17 + } from "lexicons/api"; 18 + import { 19 + decodeQuotePosition, 20 + QUOTE_PARAM, 21 + QuotePosition, 22 + useActiveHighlightState, 23 + } from "../useHighlight"; 24 + import { PostContent } from "../PostContent"; 25 + import { ProfileViewBasic } from "@atproto/api/dist/client/types/app/bsky/actor/defs"; 26 + 27 + export const Quotes = (props: { 28 + quotes: { link: string; bsky_posts: { post_view: Json } | null }[]; 29 + did: string; 30 + }) => { 31 + let isMobile = useIsMobile(); 32 + let data = useContext(PostPageContext); 33 + 34 + return ( 35 + <div className="flex flex-col gap-2"> 36 + <div className="w-full flex justify-between text-secondary font-bold"> 37 + Quotes 38 + <button 39 + className="text-tertiary" 40 + onClick={() => useInteractionState.setState({ drawerOpen: false })} 41 + > 42 + <CloseTiny /> 43 + </button> 44 + </div> 45 + {props.quotes.length === 0 ? ( 46 + <div className="opaque-container flex flex-col gap-0.5 p-[6px] text-tertiary italic text-sm text-center"> 47 + <div className="font-bold">no quotes yet!</div> 48 + <div>highlight any part of this post to quote it</div> 49 + </div> 50 + ) : ( 51 + <div className="quotes flex flex-col gap-12"> 52 + {props.quotes.map((q, index) => { 53 + let pv = q.bsky_posts?.post_view as unknown as PostView; 54 + let record = data?.data as PubLeafletDocument.Record; 55 + const url = new URL(q.link); 56 + const quoteParam = url.searchParams.get(QUOTE_PARAM); 57 + if (!quoteParam) return null; 58 + const quotePosition = decodeQuotePosition(quoteParam); 59 + if (!quotePosition) return null; 60 + 61 + let page = record.pages[0] as PubLeafletPagesLinearDocument.Main; 62 + // Extract blocks within the quote range 63 + const content = extractQuotedBlocks( 64 + page.blocks || [], 65 + quotePosition, 66 + [], 67 + ); 68 + return ( 69 + <div 70 + className="quoteSection flex flex-col gap-2" 71 + key={index} 72 + onMouseLeave={() => { 73 + useActiveHighlightState.setState({ activeHighlight: null }); 74 + }} 75 + onMouseEnter={() => { 76 + useActiveHighlightState.setState({ activeHighlight: index }); 77 + }} 78 + > 79 + <div 80 + className="quoteSectionQuote text-secondary text-sm text-left pb-1 hover:cursor-pointer" 81 + onClick={(e) => { 82 + let scrollMargin = isMobile 83 + ? 16 84 + : e.currentTarget.getBoundingClientRect().top; 85 + let scrollContainer = 86 + window.document.getElementById("post-page"); 87 + let el = window.document.getElementById( 88 + quotePosition.start.block.join("."), 89 + ); 90 + if (!el || !scrollContainer) return; 91 + let blockRect = el.getBoundingClientRect(); 92 + let quoteScrollTop = 93 + (scrollContainer && 94 + blockRect.top + scrollContainer.scrollTop) || 95 + 0; 96 + 97 + if (blockRect.left < 0) 98 + scrollContainer.scrollIntoView({ behavior: "smooth" }); 99 + scrollContainer?.scrollTo({ 100 + top: quoteScrollTop - scrollMargin, 101 + behavior: "smooth", 102 + }); 103 + }} 104 + > 105 + <div className="italic"> 106 + <PostContent 107 + blocks={content || []} 108 + did={props.did} 109 + preview 110 + /> 111 + </div> 112 + <BskyPost 113 + rkey={new AtUri(pv.uri).rkey} 114 + content={pv.record.text as string} 115 + user={pv.author.displayName || pv.author.handle} 116 + profile={pv.author} 117 + handle={pv.author.handle} 118 + /> 119 + </div> 120 + </div> 121 + ); 122 + })} 123 + </div> 124 + )} 125 + </div> 126 + ); 127 + }; 128 + 129 + const BskyPost = (props: { 130 + rkey: string; 131 + content: string; 132 + user: string; 133 + handle: string; 134 + profile: ProfileViewBasic; 135 + }) => { 136 + return ( 137 + <a 138 + target="_blank" 139 + href={`https://bsky.app/profile/${props.handle}/post/${props.rkey}`} 140 + className="quoteSectionBskyItem opaque-container py-2 px-2 text-sm flex gap-[6px] hover:no-underline font-normal" 141 + > 142 + {props.profile.avatar && ( 143 + <img 144 + className="rounded-full w-6 h-6" 145 + src={props.profile.avatar} 146 + alt={props.profile.displayName} 147 + /> 148 + )} 149 + <div className="flex flex-col"> 150 + <div className="flex items-center gap-2"> 151 + <div className="font-bold">{props.user}</div> 152 + <div className="text-tertiary">@{props.handle}</div> 153 + </div> 154 + <div className="text-secondary">{props.content}</div> 155 + </div> 156 + </a> 157 + ); 158 + }; 159 + 160 + function extractQuotedBlocks( 161 + blocks: PubLeafletPagesLinearDocument.Block[], 162 + quotePosition: QuotePosition, 163 + currentPath: number[], 164 + ): PubLeafletPagesLinearDocument.Block[] { 165 + const result: PubLeafletPagesLinearDocument.Block[] = []; 166 + 167 + blocks.forEach((block, index) => { 168 + const blockPath = [...currentPath, index]; 169 + console.log(blockPath); 170 + 171 + // Handle different block types 172 + if (PubLeafletBlocksUnorderedList.isMain(block.block)) { 173 + // For lists, recursively extract quoted items 174 + const quotedChildren = extractQuotedListItems( 175 + block.block.children, 176 + quotePosition, 177 + blockPath, 178 + ); 179 + 180 + if (quotedChildren.length > 0) { 181 + result.push({ 182 + ...block, 183 + block: { 184 + ...block.block, 185 + children: quotedChildren, 186 + }, 187 + }); 188 + } 189 + return; 190 + } 191 + 192 + if (!isBlockInRange(blockPath, quotePosition)) { 193 + return; 194 + } 195 + if ( 196 + PubLeafletBlocksText.isMain(block.block) || 197 + PubLeafletBlocksHeader.isMain(block.block) || 198 + PubLeafletBlocksCode.isMain(block.block) 199 + ) { 200 + // For text blocks, trim to quoted portion 201 + const trimmedBlock = trimTextBlock(block, blockPath, quotePosition); 202 + if (trimmedBlock) { 203 + result.push(trimmedBlock); 204 + } 205 + } else { 206 + // For other blocks (images, websites), include the whole block if in range 207 + result.push(block); 208 + } 209 + }); 210 + 211 + return result; 212 + } 213 + 214 + function extractQuotedListItems( 215 + items: PubLeafletBlocksUnorderedList.ListItem[], 216 + quotePosition: QuotePosition, 217 + parentPath: number[], 218 + ): PubLeafletBlocksUnorderedList.ListItem[] { 219 + const result: PubLeafletBlocksUnorderedList.ListItem[] = []; 220 + 221 + items.forEach((item, index) => { 222 + const itemPath = [...parentPath, index]; 223 + 224 + // Check if the content is in range 225 + const contentBlock = { block: item.content }; 226 + const trimmedContent = isBlockInRange(itemPath, quotePosition) 227 + ? trimTextBlock(contentBlock, itemPath, quotePosition) 228 + : null; 229 + 230 + // Recursively handle children 231 + let quotedChildren: PubLeafletBlocksUnorderedList.ListItem[] = []; 232 + if (item.children) { 233 + quotedChildren = extractQuotedListItems( 234 + item.children, 235 + quotePosition, 236 + itemPath, 237 + ); 238 + } 239 + 240 + result.push({ 241 + content: trimmedContent?.block || { $type: "null" }, 242 + children: quotedChildren.length > 0 ? quotedChildren : undefined, 243 + }); 244 + }); 245 + 246 + return result; 247 + } 248 + 249 + function isBlockInRange( 250 + blockPath: number[], 251 + quotePosition: QuotePosition, 252 + ): boolean { 253 + const { start, end } = quotePosition; 254 + 255 + // Compare paths lexicographically 256 + const isAfterStart = compareBlockPaths(blockPath, start.block) >= 0; 257 + const isBeforeEnd = compareBlockPaths(blockPath, end.block) <= 0; 258 + 259 + return isAfterStart && isBeforeEnd; 260 + } 261 + 262 + function compareBlockPaths(path1: number[], path2: number[]): number { 263 + const minLength = Math.min(path1.length, path2.length); 264 + 265 + for (let i = 0; i < minLength; i++) { 266 + if (path1[i] < path2[i]) return -1; 267 + if (path1[i] > path2[i]) return 1; 268 + } 269 + 270 + return path1.length - path2.length; 271 + } 272 + 273 + function trimTextBlock( 274 + block: PubLeafletPagesLinearDocument.Block, 275 + blockPath: number[], 276 + quotePosition: QuotePosition, 277 + ): PubLeafletPagesLinearDocument.Block | null { 278 + if ( 279 + !PubLeafletBlocksText.isMain(block.block) && 280 + !PubLeafletBlocksHeader.isMain(block.block) && 281 + !PubLeafletBlocksCode.isMain(block.block) 282 + ) { 283 + return block; 284 + } 285 + 286 + const { start, end } = quotePosition; 287 + let startOffset = 0; 288 + let endOffset = block.block.plaintext.length; 289 + 290 + // If this is the start block, use the start offset 291 + if (arraysEqual(blockPath, start.block)) { 292 + startOffset = start.offset; 293 + } 294 + 295 + // If this is the end block, use the end offset 296 + if (arraysEqual(blockPath, end.block)) { 297 + endOffset = end.offset; 298 + } 299 + 300 + // Extract the quoted portion 301 + const quotedText = block.block.plaintext.substring(startOffset, endOffset); 302 + if (!quotedText) return null; 303 + 304 + // Adjust facets to the new text range 305 + let adjustedFacets; 306 + if ( 307 + PubLeafletBlocksText.isMain(block.block) || 308 + PubLeafletBlocksHeader.isMain(block.block) 309 + ) { 310 + adjustedFacets = block.block?.facets 311 + ?.map((facet) => { 312 + const facetStart = facet.index.byteStart; 313 + const facetEnd = facet.index.byteEnd; 314 + 315 + // Skip facets outside the quoted range 316 + if (facetEnd <= startOffset || facetStart >= endOffset) { 317 + return null; 318 + } 319 + 320 + // Adjust facet indices 321 + return { 322 + ...facet, 323 + index: { 324 + byteStart: Math.max(0, facetStart - startOffset), 325 + byteEnd: Math.min(quotedText.length, facetEnd - startOffset), 326 + }, 327 + }; 328 + }) 329 + .filter((f) => f !== null) as typeof block.block.facets; 330 + } 331 + 332 + return { 333 + ...block, 334 + block: { 335 + ...block.block, 336 + plaintext: quotedText, 337 + //@ts-ignore 338 + facets: adjustedFacets, 339 + }, 340 + }; 341 + } 342 + 343 + function arraysEqual(a: number[], b: number[]): boolean { 344 + return a.length === b.length && a.every((val, index) => val === b[index]); 345 + }
+23
app/lish/[did]/[publication]/[rkey]/PageLayout.tsx
··· 1 + "use client"; 2 + 3 + import { useInteractionState } from "./Interactions/Interactions"; 4 + 5 + export function PageLayout(props: { children: React.ReactNode }) { 6 + let { drawerOpen } = useInteractionState(); 7 + return ( 8 + <div 9 + onScroll={(e) => {}} 10 + className="post w-full relative overflow-x-scroll snap-x snap-mandatory no-scrollbar grow items-stretch flex h-full pwa-padding mx-auto " 11 + id="page-carousel" 12 + > 13 + {/* if you adjust this padding, remember to adjust the negative margins on page 14 + in [rkey]/page/PostPage when card borders are hidden */} 15 + <div 16 + id="pages" 17 + className="postWrapper flex h-full gap-3 py-2 sm:py-6 w-full" 18 + > 19 + {props.children} 20 + </div> 21 + </div> 22 + ); 23 + }
+74 -41
app/lish/[did]/[publication]/[rkey]/PostContent.tsx
··· 17 17 import { codeToHtml } from "shiki"; 18 18 import Katex from "katex"; 19 19 import { StaticMathBlock } from "./StaticMathBlock"; 20 + import { PubCodeBlock } from "./PubCodeBlock"; 20 21 21 22 export function PostContent({ 22 23 blocks, 23 24 did, 25 + preview, 26 + prerenderedCodeBlocks, 24 27 }: { 25 28 blocks: PubLeafletPagesLinearDocument.Block[]; 26 29 did: string; 30 + preview?: boolean; 31 + prerenderedCodeBlocks?: Map<string, string>; 27 32 }) { 28 33 return ( 29 - <div className="postContent flex flex-col"> 34 + <div id="post-content" className="postContent flex flex-col"> 30 35 {blocks.map((b, index) => { 31 - return <Block block={b} did={did} key={index} />; 36 + return ( 37 + <Block 38 + block={b} 39 + did={did} 40 + key={index} 41 + index={[index]} 42 + preview={preview} 43 + prerenderedCodeBlocks={prerenderedCodeBlocks} 44 + /> 45 + ); 32 46 })} 33 47 </div> 34 48 ); 35 49 } 36 50 37 - let Block = async ({ 51 + let Block = ({ 38 52 block, 39 53 did, 40 54 isList, 55 + index, 56 + preview, 57 + prerenderedCodeBlocks, 41 58 }: { 59 + preview?: boolean; 60 + index: number[]; 42 61 block: PubLeafletPagesLinearDocument.Block; 43 62 did: string; 44 63 isList?: boolean; 64 + prerenderedCodeBlocks?: Map<string, string>; 45 65 }) => { 46 66 let b = block; 67 + let blockProps = { 68 + style: { scrollMarginTop: "10rem", scrollMarginBottom: "10rem" }, 69 + id: preview ? undefined : index.join("."), 70 + "data-index": index.join("."), 71 + }; 47 72 let alignment = 48 73 b.alignment === "lex:pub.leaflet.pages.linearDocument#textAlignRight" 49 74 ? "text-right justify-end" ··· 65 90 case PubLeafletBlocksUnorderedList.isMain(b.block): { 66 91 return ( 67 92 <ul className="-ml-[1px] sm:ml-[9px] pb-2"> 68 - {b.block.children.map((child, index) => ( 93 + {b.block.children.map((child, i) => ( 69 94 <ListItem 95 + index={[...index, i]} 70 96 item={child} 71 97 did={did} 72 - key={index} 98 + key={i} 73 99 className={className} 74 100 /> 75 101 ))} ··· 80 106 return <StaticMathBlock block={b.block} />; 81 107 } 82 108 case PubLeafletBlocksCode.isMain(b.block): { 83 - let html = await codeToHtml(b.block.plaintext, { 84 - lang: b.block.language || "plaintext", 85 - theme: b.block.syntaxHighlightingTheme || "github-light", 86 - }); 87 - return ( 88 - <div 89 - className="w-full min-h-[42px] rounded-md border-border-light outline-border-light selected-outline" 90 - dangerouslySetInnerHTML={{ __html: html }} 91 - /> 92 - ); 109 + let html = prerenderedCodeBlocks?.get(index.join(".")); 110 + return <PubCodeBlock block={b.block} prerenderedCode={html} />; 93 111 } 94 112 case PubLeafletBlocksWebsite.isMain(b.block): { 95 113 return ( 96 114 <a 115 + {...blockProps} 97 116 href={b.block.src} 98 117 target="_blank" 99 118 className={` ··· 143 162 } 144 163 case PubLeafletBlocksImage.isMain(b.block): { 145 164 return ( 146 - <div className={`relative flex ${alignment}`}> 165 + <div className={`relative flex ${alignment}`} {...blockProps}> 147 166 <img 148 167 alt={b.block.alt} 149 168 height={b.block.aspectRatio?.height} ··· 169 188 } 170 189 case PubLeafletBlocksText.isMain(b.block): 171 190 return ( 172 - <p className={` ${className}`}> 173 - <TextBlock facets={b.block.facets} plaintext={b.block.plaintext} /> 191 + <p className={` ${className}`} {...blockProps}> 192 + <TextBlock 193 + facets={b.block.facets} 194 + plaintext={b.block.plaintext} 195 + index={index} 196 + preview={preview} 197 + /> 174 198 </p> 175 199 ); 176 200 case PubLeafletBlocksHeader.isMain(b.block): { 177 201 if (b.block.level === 1) 178 202 return ( 179 - <h2 className={`${className}`}> 180 - <TextBlock {...b.block} /> 203 + <h2 className={`${className}`} {...blockProps}> 204 + <TextBlock {...b.block} index={index} preview={preview} /> 181 205 </h2> 182 206 ); 183 207 if (b.block.level === 2) 184 208 return ( 185 - <h3 className={`${className}`}> 186 - <TextBlock {...b.block} /> 209 + <h3 className={`${className}`} {...blockProps}> 210 + <TextBlock {...b.block} index={index} preview={preview} /> 187 211 </h3> 188 212 ); 189 213 if (b.block.level === 3) 190 214 return ( 191 - <h4 className={`${className}`}> 192 - <TextBlock {...b.block} /> 215 + <h4 className={`${className}`} {...blockProps}> 216 + <TextBlock {...b.block} index={index} preview={preview} /> 193 217 </h4> 194 218 ); 195 219 // if (b.block.level === 4) return <h4>{b.block.plaintext}</h4>; 196 220 // if (b.block.level === 5) return <h5>{b.block.plaintext}</h5>; 197 221 return ( 198 - <h6 className={`${className}`}> 199 - <TextBlock {...b.block} /> 222 + <h6 className={`${className}`} {...blockProps}> 223 + <TextBlock {...b.block} index={index} preview={preview} /> 200 224 </h6> 201 225 ); 202 226 } ··· 206 230 }; 207 231 208 232 function ListItem(props: { 233 + index: number[]; 209 234 item: PubLeafletBlocksUnorderedList.ListItem; 210 235 did: string; 211 236 className?: string; 212 237 }) { 238 + let children = props.item.children?.length ? ( 239 + <ul className="-ml-[7px] sm:ml-[7px]"> 240 + {props.item.children.map((child, index) => ( 241 + <ListItem 242 + index={[...props.index, index]} 243 + item={child} 244 + did={props.did} 245 + key={index} 246 + className={props.className} 247 + /> 248 + ))} 249 + </ul> 250 + ) : null; 251 + 213 252 return ( 214 253 <li className={`!pb-0 flex flex-row gap-2`}> 215 254 <div 216 - className={`listMarker shrink-0 mx-2 z-[1] mt-[14px] h-[5px] w-[5px] rounded-full bg-secondary`} 255 + className={`listMarker shrink-0 mx-2 z-[1] mt-[14px] h-[5px] w-[5px] ${props.item.content?.$type !== "null" ? "rounded-full bg-secondary" : ""}`} 217 256 /> 218 - <div className="flex flex-col"> 219 - <Block block={{ block: props.item.content }} did={props.did} isList /> 220 - {props.item.children?.length ? ( 221 - <ul className="-ml-[7px] sm:ml-[7px]"> 222 - {props.item.children.map((child, index) => ( 223 - <ListItem 224 - item={child} 225 - did={props.did} 226 - key={index} 227 - className={props.className} 228 - /> 229 - ))} 230 - </ul> 231 - ) : null} 257 + <div className="flex flex-col w-full"> 258 + <Block 259 + block={{ block: props.item.content }} 260 + did={props.did} 261 + isList 262 + index={props.index} 263 + /> 264 + {children}{" "} 232 265 </div> 233 266 </li> 234 267 );
+63
app/lish/[did]/[publication]/[rkey]/PostHeader/CollapsedPostHeader.tsx
··· 1 + "use client"; 2 + 3 + import { Media } from "components/Media"; 4 + import { 5 + Interactions, 6 + useInteractionState, 7 + } from "../Interactions/Interactions"; 8 + import { useState, useEffect } from "react"; 9 + import { Json } from "supabase/database.types"; 10 + 11 + export const CollapsedPostHeader = (props: { 12 + title: string; 13 + pubIcon?: string; 14 + quotes: { link: string; bsky_posts: { post_view: Json } | null }[]; 15 + }) => { 16 + let [headerVisible, setHeaderVisible] = useState(false); 17 + let { drawerOpen: open } = useInteractionState(); 18 + 19 + useEffect(() => { 20 + let post = window.document.getElementById("post-page"); 21 + 22 + function handleScroll() { 23 + let postHeader = window.document 24 + .getElementById("post-header") 25 + ?.getBoundingClientRect(); 26 + if (postHeader && postHeader.bottom <= 0) { 27 + setHeaderVisible(true); 28 + } else { 29 + setHeaderVisible(false); 30 + } 31 + } 32 + post?.addEventListener("scroll", handleScroll); 33 + return () => { 34 + post?.removeEventListener("scroll", handleScroll); 35 + }; 36 + }, []); 37 + if (!headerVisible) return; 38 + if (open) return; 39 + return ( 40 + <Media 41 + mobile 42 + className="sticky top-0 left-0 right-0 w-full bg-bg-page border-b border-border-light -mx-3" 43 + > 44 + <div className="flex gap-2 items-center justify-between px-3 pt-2 pb-0.5 "> 45 + <div className="text-tertiary font-bold text-sm truncate pr-1 grow"> 46 + {props.title} 47 + </div> 48 + <div className="flex gap-2 "> 49 + <Interactions compact quotes={props.quotes} /> 50 + <div 51 + style={{ 52 + backgroundRepeat: "no-repeat", 53 + backgroundPosition: "center", 54 + backgroundSize: "cover", 55 + backgroundImage: `url(${props.pubIcon})`, 56 + }} 57 + className="shrink-0 w-4 h-4 rounded-full mt-[2px]" 58 + /> 59 + </div> 60 + </div> 61 + </Media> 62 + ); 63 + };
+101
app/lish/[did]/[publication]/[rkey]/PostHeader/PostHeader.tsx
··· 1 + "use client"; 2 + import Link from "next/link"; 3 + import { PubLeafletDocument, PubLeafletPublication } from "lexicons/api"; 4 + import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 5 + import { CollapsedPostHeader } from "./CollapsedPostHeader"; 6 + import { Interactions } from "../Interactions/Interactions"; 7 + import { PostPageData } from "../getPostPageData"; 8 + import { ProfileViewDetailed } from "@atproto/api/dist/client/types/app/bsky/actor/defs"; 9 + import { useIdentityData } from "components/IdentityProvider"; 10 + import { blobRefToSrc } from "src/utils/blobRefToSrc"; 11 + import { AtUri } from "@atproto/syntax"; 12 + 13 + export function PostHeader(props: { 14 + data: PostPageData; 15 + name: string; 16 + profile: ProfileViewDetailed; 17 + }) { 18 + let { identity } = useIdentityData(); 19 + let document = props.data; 20 + 21 + let record = document?.data as PubLeafletDocument.Record; 22 + let profile = props.profile; 23 + let pub = props.data?.documents_in_publications[0].publications; 24 + let pubRecord = pub?.record as PubLeafletPublication.Record; 25 + 26 + if (!document?.data || !document.documents_in_publications[0].publications) 27 + return; 28 + return ( 29 + <> 30 + {/* <CollapsedPostHeader 31 + pubIcon={ 32 + pubRecord?.icon && pub 33 + ? blobRefToSrc(pubRecord.icon.ref, new AtUri(pub.uri).host) 34 + : undefined 35 + } 36 + title={record.title} 37 + quotes={document.document_mentions_in_bsky} 38 + /> */} 39 + <div className="max-w-prose w-full mx-auto" id="post-header"> 40 + <div className="pubHeader flex flex-col pb-5"> 41 + <Link 42 + className="font-bold hover:no-underline text-accent-contrast" 43 + href={ 44 + document && 45 + getPublicationURL( 46 + document.documents_in_publications[0].publications, 47 + ) 48 + } 49 + > 50 + {props.name} 51 + </Link> 52 + <h2 className="">{record.title}</h2> 53 + {record.description ? ( 54 + <p className="italic text-secondary">{record.description}</p> 55 + ) : null} 56 + 57 + <div className="text-sm text-tertiary pt-3 flex gap-1"> 58 + {profile ? ( 59 + <> 60 + <a 61 + className="text-tertiary" 62 + href={`https://bsky.app/profile/${profile.handle}`} 63 + > 64 + by {profile.displayName || profile.handle} 65 + </a> 66 + </> 67 + ) : null} 68 + {record.publishedAt ? ( 69 + <> 70 + | 71 + <p> 72 + {new Date(record.publishedAt).toLocaleDateString(undefined, { 73 + year: "numeric", 74 + month: "long", 75 + day: "2-digit", 76 + })} 77 + </p> 78 + </> 79 + ) : null} 80 + |{" "} 81 + <Interactions compact quotes={document.document_mentions_in_bsky} /> 82 + {identity && 83 + identity.atp_did === 84 + document.documents_in_publications[0]?.publications 85 + .identity_did && ( 86 + <> 87 + {" "} 88 + | 89 + <a 90 + href={`https://leaflet.pub/${document.leaflets_in_publications[0].leaflet}`} 91 + > 92 + Edit Post 93 + </a> 94 + </> 95 + )} 96 + </div> 97 + </div> 98 + </div> 99 + </> 100 + ); 101 + }
+98
app/lish/[did]/[publication]/[rkey]/PostPage.tsx
··· 1 + "use client"; 2 + import { 3 + PubLeafletPagesLinearDocument, 4 + PubLeafletPublication, 5 + } from "lexicons/api"; 6 + import { PostPageData } from "./getPostPageData"; 7 + import { ProfileViewDetailed } from "@atproto/api/dist/client/types/app/bsky/actor/defs"; 8 + import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 9 + import { SubscribeWithBluesky } from "app/lish/Subscribe"; 10 + import { EditTiny } from "components/Icons/EditTiny"; 11 + import { Interactions, useInteractionState } from "./Interactions/Interactions"; 12 + import { PostContent } from "./PostContent"; 13 + import { PostHeader } from "./PostHeader/PostHeader"; 14 + import { useIdentityData } from "components/IdentityProvider"; 15 + 16 + export function PostPage({ 17 + document, 18 + blocks, 19 + name, 20 + did, 21 + profile, 22 + pubRecord, 23 + prerenderedCodeBlocks, 24 + }: { 25 + document: PostPageData; 26 + blocks: PubLeafletPagesLinearDocument.Block[]; 27 + name: string; 28 + profile: ProfileViewDetailed; 29 + pubRecord: PubLeafletPublication.Record; 30 + did: string; 31 + prerenderedCodeBlocks?: Map<string, string>; 32 + }) { 33 + let { identity } = useIdentityData(); 34 + let { drawerOpen } = useInteractionState(); 35 + if (!document || !document.documents_in_publications[0].publications) 36 + return null; 37 + 38 + let hasPageBackground = !!pubRecord.theme?.showPageBackground; 39 + return ( 40 + <> 41 + {(drawerOpen || hasPageBackground) && ( 42 + <div 43 + className="spacer sm:block hidden" 44 + style={{ 45 + width: `calc(50vw - 24px - ((var(--page-width-units)/2))`, 46 + }} 47 + /> 48 + )} 49 + <div 50 + id="post-page" 51 + className={`postPageWrapper relative overflow-y-auto sm:mx-0 mx-[6px] 52 + ${drawerOpen || hasPageBackground ? "max-w-[var(--page-width-units)] shrink-0 snap-center " : "w-full"} 53 + ${ 54 + hasPageBackground 55 + ? "h-full bg-[rgba(var(--bg-page),var(--bg-page-alpha))] rounded-lg border border-border " 56 + : "sm:h-[calc(100%+48px)] h-[calc(100%+24px)] sm:-my-6 -my-3 " 57 + }`} 58 + > 59 + <div 60 + className={`postPageContent sm:max-w-prose mx-auto h-fit w-fit px-3 sm:px-4 ${hasPageBackground ? " pt-2 pb-3 sm:pb-6" : "py-6 sm:py-9"}`} 61 + > 62 + <PostHeader data={document} profile={profile} name={name} /> 63 + <PostContent 64 + blocks={blocks} 65 + did={did} 66 + prerenderedCodeBlocks={prerenderedCodeBlocks} 67 + /> 68 + <Interactions quotes={document.document_mentions_in_bsky} /> 69 + <hr className="border-border-light mb-4 mt-4" /> 70 + {identity && 71 + identity.atp_did === 72 + document.documents_in_publications[0]?.publications 73 + ?.identity_did ? ( 74 + <a 75 + href={`https://leaflet.pub/${document.leaflets_in_publications[0].leaflet}`} 76 + className="flex gap-2 items-center hover:!no-underline selected-outline px-2 py-0.5 bg-accent-1 text-accent-2 font-bold w-fit rounded-lg !border-accent-1 !outline-accent-1 mx-auto" 77 + > 78 + <EditTiny /> Edit Post 79 + </a> 80 + ) : ( 81 + <SubscribeWithBluesky 82 + isPost 83 + base_url={getPublicationURL( 84 + document.documents_in_publications[0].publications, 85 + )} 86 + pub_uri={document.documents_in_publications[0].publications.uri} 87 + subscribers={ 88 + document.documents_in_publications[0].publications 89 + .publication_subscriptions 90 + } 91 + pubName={name} 92 + /> 93 + )} 94 + </div> 95 + </div> 96 + </> 97 + ); 98 + }
+19
app/lish/[did]/[publication]/[rkey]/PostPageContext.tsx
··· 1 + "use client"; 2 + import { createContext } from "react"; 3 + import { PostPageData } from "./getPostPageData"; 4 + 5 + export const PostPageContext = createContext<PostPageData>(null); 6 + 7 + export const PostPageContextProvider = ({ 8 + children, 9 + value, 10 + }: { 11 + children: React.ReactNode; 12 + value: PostPageData; 13 + }) => { 14 + return ( 15 + <PostPageContext.Provider value={value}> 16 + {children} 17 + </PostPageContext.Provider> 18 + ); 19 + };
+28
app/lish/[did]/[publication]/[rkey]/PubCodeBlock.tsx
··· 1 + "use client"; 2 + 3 + import { PubLeafletBlocksCode } from "lexicons/api"; 4 + import { useLayoutEffect, useState } from "react"; 5 + import { codeToHtml } from "shiki"; 6 + 7 + export function PubCodeBlock({ 8 + block, 9 + prerenderedCode, 10 + }: { 11 + block: PubLeafletBlocksCode.Main; 12 + prerenderedCode?: string; 13 + }) { 14 + const [html, setHTML] = useState<string | null>(prerenderedCode || null); 15 + 16 + useLayoutEffect(() => { 17 + codeToHtml(block.plaintext, { 18 + lang: block.language || "plaintext", 19 + theme: block.syntaxHighlightingTheme || "github-light", 20 + }).then(setHTML); 21 + }, [block]); 22 + return ( 23 + <div 24 + className="w-full min-h-[42px] rounded-md border-border-light outline-border-light selected-outline" 25 + dangerouslySetInnerHTML={{ __html: html || "" }} 26 + /> 27 + ); 28 + }
+193
app/lish/[did]/[publication]/[rkey]/QuoteHandler.tsx
··· 1 + "use client"; 2 + import { BlueskyLinkTiny } from "components/Icons/BlueskyLinkTiny"; 3 + import { CopyTiny } from "components/Icons/CopyTiny"; 4 + import { Separator } from "components/Layout"; 5 + import { useSmoker } from "components/Toast"; 6 + import { useEffect, useMemo, useState } from "react"; 7 + import { useInteractionState } from "./Interactions/Interactions"; 8 + import { encodeQuotePosition, QUOTE_PARAM } from "./useHighlight"; 9 + 10 + export function QuoteHandler() { 11 + let [position, setPosition] = useState<{ top: number; left: number } | null>( 12 + null, 13 + ); 14 + useEffect(() => { 15 + const handleSelectionChange = (e: Event) => { 16 + const selection = document.getSelection(); 17 + const postContent = document.getElementById("post-content"); 18 + const isWithinPostContent = 19 + postContent && selection?.rangeCount && selection.rangeCount > 0 20 + ? postContent.contains( 21 + selection.getRangeAt(0).commonAncestorContainer, 22 + ) 23 + : false; 24 + 25 + if (!selection || !isWithinPostContent || !selection?.toString()) 26 + return setPosition(null); 27 + const quoteRect = selection?.getRangeAt(0).getBoundingClientRect(); 28 + if (!quoteRect) return setPosition(null); 29 + 30 + let selectionTop = quoteRect.top; 31 + let selectionLeft = quoteRect.left; 32 + if (selection?.focusNode && selection?.focusOffset) { 33 + const range = document.createRange(); 34 + range.setStart(selection?.focusNode, selection?.focusOffset); 35 + range.setEnd(selection?.focusNode, selection?.focusOffset); 36 + 37 + let endCursorRect = range.getBoundingClientRect(); 38 + selectionLeft = endCursorRect.left - 128; 39 + } 40 + 41 + let dir = selection.direction; 42 + if (!dir) { 43 + const range = selection.getRangeAt(0); 44 + const startContainer = range.startContainer; 45 + const endContainer = range.endContainer; 46 + const startOffset = range.startOffset; 47 + const endOffset = range.endOffset; 48 + 49 + if (startContainer === endContainer) { 50 + dir = startOffset <= endOffset ? "forward" : "backward"; 51 + } else { 52 + const position = startContainer.compareDocumentPosition(endContainer); 53 + dir = 54 + (position & Node.DOCUMENT_POSITION_FOLLOWING) !== 0 55 + ? "forward" 56 + : "backward"; 57 + } 58 + } 59 + 60 + if (selection.direction === "backward") { 61 + selectionTop -= 28; 62 + } else { 63 + // forward 64 + selectionTop += quoteRect.height + 8; 65 + } 66 + 67 + setPosition({ 68 + top: selectionTop, 69 + left: selectionLeft, 70 + }); 71 + }; 72 + 73 + document.addEventListener("selectionchange", handleSelectionChange); 74 + return () => { 75 + document.removeEventListener("selectionchange", handleSelectionChange); 76 + }; 77 + }, []); 78 + 79 + if (position) { 80 + return ( 81 + <div 82 + id="quote-trigger" 83 + className={`accent-container border border-border-light text-accent-contrast px-1 flex gap-2 text-sm justify-center text-center items-center`} 84 + style={{ 85 + position: "absolute", 86 + top: position.top, 87 + left: position.left, 88 + }} 89 + > 90 + <QuoteOptionButtons /> 91 + </div> 92 + ); 93 + } 94 + } 95 + 96 + export const QuoteOptionButtons = () => { 97 + let smoker = useSmoker(); 98 + const getURL = () => { 99 + let selection = document.getSelection()?.getRangeAt(0); 100 + if (!selection) return; 101 + let startIndex = findDataIndex(selection.startContainer); 102 + let startOffset = selection.startOffset; 103 + let endIndex = findDataIndex(selection.endContainer); 104 + let endOffset = selection.endOffset; 105 + if (!startIndex || !endIndex) return; 106 + console.log(startIndex, endIndex); 107 + let quotePosition = encodeQuotePosition({ 108 + start: { 109 + block: startIndex.split(".").map((i) => parseInt(i)), 110 + offset: startOffset, 111 + }, 112 + end: { 113 + block: endIndex.split(".").map((i) => parseInt(i)), 114 + offset: endOffset, 115 + }, 116 + }); 117 + let currentUrl = new URL(window.location.href); 118 + currentUrl.searchParams.set(QUOTE_PARAM, quotePosition); 119 + currentUrl.hash = `#${startIndex}`; 120 + return currentUrl.toString(); 121 + }; 122 + 123 + return ( 124 + <> 125 + <div className="">Share Quote via</div> 126 + 127 + <button 128 + className="flex gap-1 items-center hover:font-bold" 129 + role="link" 130 + onClick={() => { 131 + let url = getURL(); 132 + if (!url) return; 133 + window.open( 134 + `https://bsky.app/intent/compose?text=${encodeURIComponent(url.toString())}`, 135 + "_blank", 136 + ); 137 + }} 138 + > 139 + <BlueskyLinkTiny className="shrink-0" /> 140 + Bluesky 141 + </button> 142 + <Separator classname="h-3" /> 143 + <button 144 + id="copy-quote-link" 145 + className="flex gap-1 items-center hover:font-bold" 146 + onClick={() => { 147 + let rect = document 148 + .getElementById("copy-quote-link") 149 + ?.getBoundingClientRect(); 150 + let url = getURL(); 151 + if (!url) return; 152 + navigator.clipboard.writeText(url.toString()); 153 + 154 + smoker({ 155 + text: <strong>Copied Link</strong>, 156 + position: { 157 + y: rect ? rect.top : 0, 158 + x: rect ? rect.right + 5 : 0, 159 + }, 160 + }); 161 + }} 162 + > 163 + <CopyTiny className="shrink-0" /> 164 + Link 165 + </button> 166 + </> 167 + ); 168 + }; 169 + 170 + function findDataIndex(node: Node): string | null { 171 + if (node.nodeType === Node.ELEMENT_NODE) { 172 + const element = node as Element; 173 + if (element.hasAttribute("data-index")) { 174 + return element.getAttribute("data-index"); 175 + } 176 + } 177 + 178 + if (node.parentNode) { 179 + return findDataIndex(node.parentNode); 180 + } 181 + 182 + return null; 183 + } 184 + 185 + function highlightContent() { 186 + let span = document.createElement("span"); 187 + span.classList.add("highlight", "rounded-md", "scroll-my-6"); 188 + span.style.backgroundColor = "rgba(var(--accent-contrast), .15)"; 189 + span.onclick = () => {}; 190 + const selection = document.getSelection(); 191 + selection?.getRangeAt(0).surroundContents(span); 192 + useInteractionState.setState({ drawerOpen: true }); 193 + }
+9 -5
app/lish/[did]/[publication]/[rkey]/StaticPostContent.tsx
··· 96 96 case PubLeafletBlocksText.isMain(b.block): 97 97 return ( 98 98 <p> 99 - <TextBlock facets={b.block.facets} plaintext={b.block.plaintext} /> 99 + <TextBlock 100 + facets={b.block.facets} 101 + plaintext={b.block.plaintext} 102 + index={[]} 103 + /> 100 104 </p> 101 105 ); 102 106 case PubLeafletBlocksHeader.isMain(b.block): { 103 107 if (b.block.level === 1) 104 108 return ( 105 109 <h1> 106 - <TextBlock {...b.block} /> 110 + <TextBlock {...b.block} index={[]} /> 107 111 </h1> 108 112 ); 109 113 if (b.block.level === 2) 110 114 return ( 111 115 <h2> 112 - <TextBlock {...b.block} /> 116 + <TextBlock {...b.block} index={[]} /> 113 117 </h2> 114 118 ); 115 119 if (b.block.level === 3) 116 120 return ( 117 121 <h3> 118 - <TextBlock {...b.block} /> 122 + <TextBlock {...b.block} index={[]} /> 119 123 </h3> 120 124 ); 121 125 // if (b.block.level === 4) return <h4>{b.block.plaintext}</h4>; 122 126 // if (b.block.level === 5) return <h5>{b.block.plaintext}</h5>; 123 127 return ( 124 128 <h6> 125 - <TextBlock {...b.block} /> 129 + <TextBlock {...b.block} index={[]} /> 126 130 </h6> 127 131 ); 128 132 }
+33 -6
app/lish/[did]/[publication]/[rkey]/TextBlock.tsx
··· 1 + "use client"; 1 2 import { UnicodeString } from "@atproto/api"; 2 3 import { PubLeafletRichtextFacet } from "lexicons/api"; 4 + import { useMemo } from "react"; 5 + import { useHighlight } from "./useHighlight"; 3 6 4 7 type Facet = PubLeafletRichtextFacet.Main; 5 - export function TextBlock(props: { plaintext: string; facets?: Facet[] }) { 6 - const children = []; 7 - let richText = new RichText({ 8 - text: props.plaintext, 9 - facets: props.facets || [], 10 - }); 8 + export function TextBlock(props: { 9 + plaintext: string; 10 + facets?: Facet[]; 11 + index: number[]; 12 + preview?: boolean; 13 + }) { 14 + let children = []; 15 + let highlights = useHighlight(props.index); 16 + let richText = useMemo(() => { 17 + let facets = [...(props.facets || [])]; 18 + if (!props.preview) { 19 + for (let highlight of highlights) { 20 + facets.push({ 21 + $type: "pub.leaflet.richtext.facet", 22 + index: { 23 + byteStart: highlight.startOffset 24 + ? new UnicodeString( 25 + props.plaintext.slice(0, highlight.startOffset), 26 + ).length 27 + : 0, 28 + byteEnd: new UnicodeString( 29 + props.plaintext.slice(0, highlight.endOffset || undefined), 30 + ).length, 31 + }, 32 + features: [{ $type: "pub.leaflet.richtext.facet#highlight" }], 33 + }); 34 + } 35 + } 36 + return new RichText({ text: props.plaintext, facets }); 37 + }, [props.plaintext, props.facets, highlights, props.preview]); 11 38 let counter = 0; 12 39 for (const segment of richText.segments()) { 13 40 let link = segment.facet?.find(PubLeafletRichtextFacet.isLink);
+29
app/lish/[did]/[publication]/[rkey]/extractCodeBlocks.ts
··· 1 + import { 2 + PubLeafletDocument, 3 + PubLeafletPagesLinearDocument, 4 + PubLeafletBlocksCode, 5 + } from "lexicons/api"; 6 + import { codeToHtml } from "shiki"; 7 + 8 + export async function extractCodeBlocks( 9 + blocks: PubLeafletPagesLinearDocument.Block[], 10 + ): Promise<Map<string, string>> { 11 + const codeBlocks = new Map<string, string>(); 12 + 13 + // Process all pages in the document 14 + for (let i = 0; i < blocks.length; i++) { 15 + const block = blocks[i]; 16 + const currentIndex = [i]; 17 + const indexKey = currentIndex.join("."); 18 + 19 + if (PubLeafletBlocksCode.isMain(block.block)) { 20 + const html = await codeToHtml(block.block.plaintext, { 21 + lang: block.block.language || "plaintext", 22 + theme: block.block.syntaxHighlightingTheme || "github-light", 23 + }); 24 + codeBlocks.set(indexKey, html); 25 + } 26 + } 27 + 28 + return codeBlocks; 29 + }
+18
app/lish/[did]/[publication]/[rkey]/getPostPageData.ts
··· 1 + import { supabaseServerClient } from "supabase/serverClient"; 2 + 3 + export type PostPageData = Awaited<ReturnType<typeof getPostPageData>>; 4 + export async function getPostPageData(uri: string) { 5 + let { data: document } = await supabaseServerClient 6 + .from("documents") 7 + .select( 8 + ` 9 + data, 10 + documents_in_publications(publications(*, publication_subscriptions(*))), 11 + document_mentions_in_bsky(*, bsky_posts(*)), 12 + leaflets_in_publications(*) 13 + `, 14 + ) 15 + .eq("uri", uri) 16 + .single(); 17 + return document; 18 + }
+57 -132
app/lish/[did]/[publication]/[rkey]/page.tsx
··· 1 - import Link from "next/link"; 2 1 import { supabaseServerClient } from "supabase/serverClient"; 3 2 import { AtUri } from "@atproto/syntax"; 4 3 import { ids } from "lexicons/api/lexicons"; ··· 6 5 PubLeafletDocument, 7 6 PubLeafletPagesLinearDocument, 8 7 PubLeafletPublication, 9 - PubLeafletThemeColor, 10 8 } from "lexicons/api"; 11 9 import { Metadata } from "next"; 12 - import { getPublicationURL } from "app/lish/createPub/getPublicationURL"; 13 - import { TextBlock } from "./TextBlock"; 14 - import { BskyAgent } from "@atproto/api"; 15 - import { SubscribeWithBluesky } from "app/lish/Subscribe"; 10 + import { AtpAgent } from "@atproto/api"; 11 + import { QuoteHandler } from "./QuoteHandler"; 12 + import { InteractionDrawer } from "./Interactions/InteractionDrawer"; 16 13 import { 17 14 PublicationBackgroundProvider, 18 15 PublicationThemeProvider, 19 16 } from "components/ThemeManager/PublicationThemeProvider"; 20 - import { PostContent } from "./PostContent"; 21 - import { getIdentityData } from "actions/getIdentityData"; 22 - import { EditTiny } from "components/Icons/EditTiny"; 17 + import { getPostPageData } from "./getPostPageData"; 18 + import { PostPageContextProvider } from "./PostPageContext"; 19 + import { PostPage } from "./PostPage"; 20 + import { PageLayout } from "./PageLayout"; 21 + import { extractCodeBlocks } from "./extractCodeBlocks"; 23 22 24 23 export async function generateMetadata(props: { 25 24 params: Promise<{ publication: string; did: string; rkey: string }>; ··· 62 61 </p> 63 62 </div> 64 63 ); 65 - let agent = new BskyAgent({ service: "https://public.api.bsky.app" }); 66 - let identity = await getIdentityData(); 67 - let [{ data: document }, { data: profile }] = await Promise.all([ 68 - supabaseServerClient 69 - .from("documents") 70 - .select( 71 - "*, leaflets_in_publications(*), documents_in_publications(publications(*, publication_subscriptions(*)))", 72 - ) 73 - .eq( 74 - "uri", 75 - AtUri.make(did, ids.PubLeafletDocument, (await props.params).rkey), 76 - ) 77 - .single(), 64 + let agent = new AtpAgent({ service: "https://public.api.bsky.app" }); 65 + let [document, profile] = await Promise.all([ 66 + getPostPageData( 67 + AtUri.make( 68 + did, 69 + ids.PubLeafletDocument, 70 + (await props.params).rkey, 71 + ).toString(), 72 + ), 78 73 agent.getProfile({ actor: did }), 79 74 ]); 80 75 if (!document?.data || !document.documents_in_publications[0].publications) ··· 98 93 .record as PubLeafletPublication.Record; 99 94 100 95 let hasPageBackground = !!pubRecord.theme?.showPageBackground; 96 + let prerenderedCodeBlocks = await extractCodeBlocks(blocks); 101 97 102 98 return ( 103 - <PublicationThemeProvider 104 - record={pubRecord} 105 - pub_creator={ 106 - document.documents_in_publications[0].publications.identity_did 107 - } 108 - > 109 - <PublicationBackgroundProvider 99 + <PostPageContextProvider value={document}> 100 + <PublicationThemeProvider 110 101 record={pubRecord} 111 102 pub_creator={ 112 103 document.documents_in_publications[0].publications.identity_did 113 104 } 114 105 > 115 - <div 116 - className={`flex flex-col sm:py-6 h-full ${hasPageBackground ? "max-w-prose mx-auto sm:px-0 px-[6px] py-2" : "w-full overflow-y-scroll"}`} 106 + <PublicationBackgroundProvider 107 + record={pubRecord} 108 + pub_creator={ 109 + document.documents_in_publications[0].publications.identity_did 110 + } 117 111 > 118 - <div 119 - className={`sm:max-w-prose max-w-[var(--page-width-units)] w-[1000px] mx-auto px-3 sm:px-4 py-3 ${hasPageBackground ? "overflow-auto h-full bg-[rgba(var(--bg-page),var(--bg-page-alpha))] rounded-lg border border-border" : "h-fit "}`} 120 - > 121 - <div className="postHeader flex flex-col pb-5"> 122 - <Link 123 - className="font-bold hover:no-underline text-accent-contrast flex gap-2 items-center" 124 - href={getPublicationURL( 125 - document.documents_in_publications[0].publications, 126 - )} 127 - > 128 - {pubRecord.icon && ( 129 - <div 130 - className="pubDashLogo shrink-0 w-4 h-4 rounded-full border-bg-page" 131 - style={{ 132 - backgroundImage: `url(/api/atproto_images?did=${document.documents_in_publications[0].publications.identity_did}&cid=${(pubRecord.icon.ref as unknown as { $link: string })["$link"]})`, 133 - backgroundRepeat: "no-repeat", 134 - backgroundPosition: "center", 135 - backgroundSize: "cover", 136 - }} 137 - /> 138 - )} 139 - {decodeURIComponent((await props.params).publication)} 140 - </Link> 112 + {/* 113 + TODO: SCROLL PAGE TO FIT DRAWER 114 + If the drawer fits without scrolling, dont scroll 115 + If both drawer and page fit if you scrolled it, scroll it all into the center 116 + If the drawer and pafe doesn't all fit, scroll to drawer 117 + 118 + TODO: SROLL BAR 119 + If there is no drawer && there is no page bg, scroll the entire page 120 + If there is either a drawer open OR a page background, scroll just the post content 141 121 142 - <h2 className="leading-snug">{record.title}</h2> 143 - {record.description ? ( 144 - <p className="italic text-secondary pt-0.5"> 145 - {record.description} 146 - </p> 147 - ) : null} 122 + TODO: HIGHLIGHTING BORKED 123 + on chrome, if you scroll backward, things stop working 124 + seems like if you use an older browser, sel direction is not a thing yet 125 + */} 126 + <PageLayout> 127 + <PostPage 128 + pubRecord={pubRecord} 129 + profile={profile.data} 130 + document={document} 131 + did={did} 132 + blocks={blocks} 133 + name={decodeURIComponent((await props.params).publication)} 134 + prerenderedCodeBlocks={prerenderedCodeBlocks} 135 + /> 136 + <InteractionDrawer 137 + quotes={document.document_mentions_in_bsky} 138 + did={did} 139 + /> 140 + </PageLayout> 148 141 149 - <div className="text-sm text-tertiary pt-3 flex gap-1"> 150 - {profile ? ( 151 - <> 152 - <a 153 - className="text-tertiary" 154 - href={`https://bsky.app/profile/${profile.handle}`} 155 - > 156 - by {profile.displayName || profile.handle} 157 - </a> 158 - </> 159 - ) : null} 160 - {record.publishedAt ? ( 161 - <> 162 - | 163 - <p> 164 - {new Date(record.publishedAt).toLocaleDateString( 165 - undefined, 166 - { 167 - year: "numeric", 168 - month: "long", 169 - day: "2-digit", 170 - }, 171 - )} 172 - </p> 173 - </> 174 - ) : null} 175 - {identity && 176 - identity.atp_did === 177 - document.documents_in_publications[0]?.publications 178 - .identity_did && ( 179 - <> 180 - {" "} 181 - | 182 - <a 183 - href={`https://leaflet.pub/${document.leaflets_in_publications[0].leaflet}`} 184 - > 185 - Edit Post 186 - </a> 187 - </> 188 - )} 189 - </div> 190 - </div> 191 - <PostContent blocks={blocks} did={did} /> 192 - <hr className="border-border-light mb-4 mt-2" /> 193 - {identity && 194 - identity.atp_did === 195 - document.documents_in_publications[0]?.publications 196 - .identity_did ? ( 197 - <a 198 - href={`https://leaflet.pub/${document.leaflets_in_publications[0].leaflet}`} 199 - className="flex gap-2 items-center hover:!no-underline selected-outline px-2 py-0.5 bg-accent-1 text-accent-2 font-bold w-fit rounded-lg !border-accent-1 !outline-accent-1 mx-auto" 200 - > 201 - <EditTiny /> Edit Post 202 - </a> 203 - ) : ( 204 - <SubscribeWithBluesky 205 - isPost 206 - base_url={getPublicationURL( 207 - document.documents_in_publications[0].publications, 208 - )} 209 - pub_uri={document.documents_in_publications[0].publications.uri} 210 - subscribers={ 211 - document.documents_in_publications[0].publications 212 - .publication_subscriptions 213 - } 214 - pubName={decodeURIComponent((await props.params).publication)} 215 - /> 216 - )} 217 - </div> 218 - </div> 219 - </PublicationBackgroundProvider> 220 - </PublicationThemeProvider> 142 + <QuoteHandler /> 143 + </PublicationBackgroundProvider> 144 + </PublicationThemeProvider> 145 + </PostPageContextProvider> 221 146 ); 222 147 }
+123
app/lish/[did]/[publication]/[rkey]/useHighlight.tsx
··· 1 + // Generated w/ Claude 4 2 + 3 + import { useSearchParams } from "next/navigation"; 4 + import { useContext } from "react"; 5 + import { PostPageContext } from "./PostPageContext"; 6 + import { create } from "zustand"; 7 + 8 + export interface QuotePosition { 9 + start: { 10 + block: number[]; 11 + offset: number; 12 + }; 13 + end: { 14 + block: number[]; 15 + offset: number; 16 + }; 17 + } 18 + 19 + export const QUOTE_PARAM = "l_quote"; 20 + export const useActiveHighlightState = create(() => ({ 21 + activeHighlight: null as null | number, 22 + })); 23 + 24 + export const useHighlight = (pos: number[]) => { 25 + let doc = useContext(PostPageContext); 26 + let params = useSearchParams(); 27 + let param_highlight = params.get(QUOTE_PARAM); 28 + let activeHighlight = useActiveHighlightState( 29 + (state) => state.activeHighlight, 30 + ); 31 + let highlights = 32 + doc?.document_mentions_in_bsky 33 + .filter((m, i) => i === activeHighlight) 34 + .map((mention) => { 35 + return new URL(mention.link).searchParams.get(QUOTE_PARAM); 36 + }) 37 + .filter((s) => s !== null) || []; 38 + if (param_highlight) highlights.push(param_highlight); 39 + return highlights 40 + .map((highlight) => { 41 + let quotePosition = decodeQuotePosition(highlight); 42 + if (!quotePosition) return null; 43 + let maxLength = Math.max( 44 + quotePosition.start.block.length, 45 + quotePosition.end.block.length, 46 + ); 47 + let expandedPos = pos.concat( 48 + Array(Math.max(0, maxLength - pos.length)).fill(-1), 49 + ); 50 + if ( 51 + !expandedPos.reduce( 52 + (acc, i, index) => 53 + acc && 54 + i >= quotePosition?.start.block[index] && 55 + i <= quotePosition.end.block[index], 56 + true, 57 + ) 58 + ) { 59 + return null; 60 + } 61 + let startOffset: number | null = null; 62 + let endOffset: number | null = null; 63 + if ( 64 + pos.length === quotePosition.start.block.length && 65 + pos.every((val, index) => val === quotePosition.start.block[index]) 66 + ) { 67 + startOffset = quotePosition.start.offset; 68 + } 69 + 70 + if ( 71 + pos.length === quotePosition.end.block.length && 72 + pos.every((val, index) => val === quotePosition.end.block[index]) 73 + ) { 74 + endOffset = quotePosition.end.offset; 75 + } 76 + return { startOffset, endOffset }; 77 + }) 78 + .filter((highlight) => highlight !== null); 79 + }; 80 + 81 + /** 82 + * Encodes quote position into a URL-friendly string 83 + * Format: startBlock_startOffset-endBlock_endOffset 84 + * Block paths are joined with dots: 1.2.0_45-1.2.3_67 85 + * Simple blocks: 0:12-2:45 86 + */ 87 + export function encodeQuotePosition(position: QuotePosition): string { 88 + const { start, end } = position; 89 + return `${start.block.join(".")}_${start.offset}-${end.block.join(".")}_${end.offset}`; 90 + } 91 + 92 + /** 93 + * Decodes quote position from URL parameter 94 + * Returns null if the format is invalid 95 + */ 96 + export function decodeQuotePosition(encoded: string): QuotePosition | null { 97 + try { 98 + // Match format: blockPath:number-blockPath:number 99 + // Block paths can be: 5, 1.2, 0.1.3, etc. 100 + const match = encoded.match(/^([\d.]+)_(\d+)-([\d.]+)_(\d+)$/); 101 + 102 + if (!match) { 103 + return null; 104 + } 105 + 106 + const [, startBlockPath, startOffset, endBlockPath, endOffset] = match; 107 + 108 + const position: QuotePosition = { 109 + start: { 110 + block: startBlockPath.split(".").map((i) => parseInt(i)), 111 + offset: parseInt(startOffset, 10), 112 + }, 113 + end: { 114 + block: endBlockPath.split(".").map((i) => parseInt(i)), 115 + offset: parseInt(endOffset, 10), 116 + }, 117 + }; 118 + 119 + return position; 120 + } catch (error) { 121 + return null; 122 + } 123 + }
+38
appview/index.ts
··· 9 9 PubLeafletGraphSubscription, 10 10 PubLeafletPublication, 11 11 } from "lexicons/api"; 12 + import { 13 + AppBskyEmbedExternal, 14 + AppBskyFeedPost, 15 + AppBskyRichtextFacet, 16 + } from "@atproto/api"; 12 17 import { AtUri } from "@atproto/syntax"; 13 18 import { writeFile, readFile } from "fs/promises"; 14 19 import { createIdentity } from "actions/createIdentity"; 15 20 import { supabaseServerClient } from "supabase/serverClient"; 16 21 import postgres from "postgres"; 17 22 import { drizzle } from "drizzle-orm/postgres-js"; 23 + import { QUOTE_PARAM } from "app/lish/[did]/[publication]/[rkey]/useHighlight"; 24 + import { inngest } from "app/api/inngest/client"; 18 25 19 26 const cursorFile = process.env.CURSOR_FILE || "/cursor/cursor"; 20 27 ··· 48 55 ids.PubLeafletPublication, 49 56 ids.PubLeafletGraphSubscription, 50 57 ids.AppBskyActorProfile, 58 + "app.bsky.feed.post", 51 59 ], 52 60 handleEvent: async (evt) => { 53 61 if (evt.event === "identity") { ··· 156 164 .from("bsky_profiles") 157 165 .update({ record: evt.record as Json }) 158 166 .eq("did", evt.did); 167 + } 168 + } 169 + if (evt.collection === "app.bsky.feed.post") { 170 + if (evt.event !== "create") return; 171 + let record = AppBskyFeedPost.validateRecord(evt.record); 172 + if (!record.success) return; 173 + let linkFacet = record.value.facets?.find((f) => 174 + f.features.find( 175 + (f) => 176 + AppBskyRichtextFacet.isLink(f) && f.uri.includes(QUOTE_PARAM), 177 + ), 178 + ); 179 + let link = ( 180 + linkFacet?.features.find( 181 + (f) => 182 + AppBskyRichtextFacet.isLink(f) && f.uri.includes(QUOTE_PARAM), 183 + ) as AppBskyRichtextFacet.Link | undefined 184 + )?.uri; 185 + 186 + let embed = 187 + AppBskyEmbedExternal.isMain(record.value.embed) && 188 + record.value.embed.external.uri.includes(QUOTE_PARAM) 189 + ? record.value.embed.external.uri 190 + : null; 191 + let pubUrl = embed || link; 192 + if (pubUrl) { 193 + inngest.send({ 194 + name: "appview/index-bsky-post-mention", 195 + data: { post_uri: evt.uri.toString(), document_link: pubUrl }, 196 + }); 159 197 } 160 198 } 161 199 },
+59
components/Blocks/QuoteEmbedBlock.tsx
··· 1 + import { GoToArrow } from "components/Icons/GoToArrow"; 2 + import { ExternalLinkBlock } from "./ExternalLinkBlock"; 3 + import { Separator } from "components/Layout"; 4 + 5 + export const QuoteEmbedBlockLine = () => { 6 + return ( 7 + <div className="quoteEmbedBlock flex sm:mx-4 mx-3 my-3 sm:my-4 text-secondary text-sm italic"> 8 + <div className="w-2 h-full bg-border" /> 9 + <div className="flex flex-col pl-4"> 10 + <div className="quoteEmbedContent "> 11 + Hello, this is a long quote that I am writing to you! I am so excited 12 + that you decided to quote my stuff. I would love to take a moments and 13 + just say whatever the heck i feel like. Unforunately for you, it is a 14 + rather boring todo list. I need to add an author and pub name, i need 15 + to add a back link, and i need to link about text formatting, if we 16 + want to handle it. 17 + </div> 18 + <div className="quoteEmbedFooter flex gap-2 pt-2 "> 19 + <div className="flex flex-col leading-tight grow"> 20 + <div className="font-bold ">This was made to be quoted</div> 21 + <div className="text-tertiary text-xs">celine</div> 22 + </div> 23 + </div> 24 + </div> 25 + </div> 26 + ); 27 + }; 28 + 29 + export const QuoteEmbedBlock = () => { 30 + return ( 31 + <div className="quoteEmbedBlock transparent-container sm:mx-4 mx-3 my-3 sm:my-4 text-secondary text-sm"> 32 + <div className="quoteEmbedContent p-3"> 33 + Hello, this is a long quote that I am writing to you! I am so excited 34 + that you decided to quote my stuff. I would love to take a moments and 35 + just say whatever the heck i feel like. Unforunately for you, it is a 36 + rather boring todo list. I need to add an author and pub name, i need to 37 + add a back link, and i need to link about text formatting, if we want to 38 + handle it. 39 + </div> 40 + <hr className="border-border-light" /> 41 + <a 42 + className="quoteEmbedFooter flex max-w-full gap-2 px-3 py-2 hover:!no-underline text-secondary" 43 + href="#" 44 + > 45 + <div className="flex flex-col w-[calc(100%-28px)] grow"> 46 + <div className="font-bold w-full truncate"> 47 + This was made to be quoted and if it's very long, to truncate 48 + </div> 49 + <div className="flex gap-[6px] text-tertiary text-xs items-center"> 50 + <div className="underline">lab.leaflet.pub</div> 51 + <Separator classname="h-2" /> 52 + <div>celine</div> 53 + </div> 54 + </div> 55 + <div className=" shrink-0 pt-[1px] bg-test w-5 h-5 rounded-full"></div> 56 + </a> 57 + </div> 58 + ); 59 + };
+1
components/Blocks/index.tsx
··· 16 16 import { Block } from "./Block"; 17 17 import { useEffect } from "react"; 18 18 import { addShortcut } from "src/shortcuts"; 19 + import { QuoteEmbedBlock } from "./QuoteEmbedBlock"; 19 20 20 21 export function Blocks(props: { entityID: string }) { 21 22 let rep = useReplicache();
+18
components/Icons/BlueskyLinkTiny.tsx
··· 1 + import { Props } from "./Props"; 2 + 3 + export const BlueskyLinkTiny = (props: Props) => { 4 + return ( 5 + <svg 6 + width="16" 7 + height="16" 8 + viewBox="0 0 16 16" 9 + fill="none" 10 + xmlns="http://www.w3.org/2000/svg" 11 + > 12 + <path 13 + d="M14.7656 6.8848C15.2697 6.936 15.6629 7.36233 15.6631 7.87992V12.5694C15.6629 13.1215 15.2153 13.5694 14.6631 13.5694C14.1112 13.5691 13.6632 13.1213 13.6631 12.5694V10.2998L9.0332 14.9444L8.95801 15.0137C8.56577 15.3348 7.98589 15.3128 7.61914 14.9473C7.2283 14.5574 7.22747 13.9243 7.61719 13.5332L12.2549 8.87992H9.97461C9.42248 8.87973 8.97461 8.43208 8.97461 7.87992C8.97476 7.32786 9.42256 6.88008 9.97461 6.87992H14.6631L14.7656 6.8848ZM10.1865 1.73441C11.2384 0.927212 12.9424 0.30268 12.9424 2.29007C12.9422 2.64827 12.7609 5.04537 12.6299 5.87992H9.97461C8.87028 5.88006 7.97479 6.77558 7.97461 7.87992C7.97471 8.94304 8.80439 9.80948 9.85156 9.87308L7.8291 11.9024C7.1776 11.2583 6.81468 10.1744 6.66602 9.72855C6.58459 9.48423 6.58532 9.48426 6.50391 9.72855C6.20317 10.6309 5.02953 14.1504 2.34668 11.3369C0.9339 9.85511 1.58769 8.37313 4.15918 7.92582C2.68806 8.18169 1.03394 7.75832 0.580078 6.10062C0.449563 5.62339 0.227775 2.68937 0.227539 2.29007C0.227539 0.30268 1.93158 0.927212 2.9834 1.73441C4.44103 2.85312 6.00924 5.12071 6.58496 6.33793C7.16077 5.12075 8.72884 2.85305 10.1865 1.73441Z" 14 + fill="currentColor" 15 + /> 16 + </svg> 17 + ); 18 + };
+18
components/Icons/CopyTiny.tsx
··· 1 + import { Props } from "./Props"; 2 + 3 + export const CopyTiny = (props: Props) => { 4 + return ( 5 + <svg 6 + width="16" 7 + height="16" 8 + viewBox="0 0 16 16" 9 + fill="none" 10 + xmlns="http://www.w3.org/2000/svg" 11 + > 12 + <path 13 + d="M4.26908 2.55223L7.82376 2.8657C8.37724 2.91446 8.89002 3.17813 9.2515 3.60008L11.2701 5.95652L11.4009 6.12547C11.6838 6.53216 11.8168 7.02792 11.773 7.52586L11.2349 13.6333C11.1318 14.8022 10.1002 15.6669 8.93119 15.5639L3.16751 15.0561C1.99865 14.953 1.13497 13.9213 1.23783 12.7524L1.96634 4.48289C2.06933 3.3139 3.1001 2.44938 4.26908 2.55223ZM4.1597 3.79734C3.67839 3.75494 3.25398 4.11099 3.21146 4.59227L2.48294 12.8618C2.44066 13.3431 2.79655 13.7686 3.27787 13.811L9.04154 14.3188C9.52262 14.3611 9.94709 14.0049 9.98978 13.5239L10.4605 8.17723L8.4263 7.99754C7.39505 7.90645 6.63243 6.99663 6.72318 5.96531L6.8931 4.03855L4.1597 3.79734ZM6.36576 0.319805L13.2554 0.92625C14.1493 1.00512 14.8097 1.79404 14.731 2.68797L13.9283 11.8061C13.8494 12.7001 13.0605 13.3614 12.1665 13.2827L11.8794 13.2573L12.4058 7.28465C12.4582 6.68925 12.2718 6.09769 11.8872 5.64012L9.73685 3.08152C9.35372 2.62581 8.80549 2.33994 8.21244 2.28758L4.58841 1.96824L4.60404 1.79539C4.6828 0.901582 5.47198 0.241343 6.36576 0.319805ZM7.9683 6.07566C7.93837 6.41922 8.19307 6.7221 8.53665 6.75242L10.4243 6.91941C10.395 6.86569 10.3582 6.81825 10.3208 6.77L8.30228 4.41355C8.25125 4.35398 8.19227 4.30256 8.12845 4.25926L7.9683 6.07566Z" 14 + fill="currentColor" 15 + /> 16 + </svg> 17 + ); 18 + };
+19
components/Icons/QuoteTiny.tsx
··· 1 + import { Props } from "./Props"; 2 + 3 + export const QuoteTiny = (props: Props) => { 4 + return ( 5 + <svg 6 + width="16" 7 + height="16" 8 + viewBox="0 0 16 16" 9 + fill="none" 10 + xmlns="http://www.w3.org/2000/svg" 11 + {...props} 12 + > 13 + <path 14 + d="M9.84587 5.33561C11.4619 3.15425 14.3417 3.39636 14.3019 3.74771C14.2657 4.05794 13.4971 3.76588 12.3615 5.03971C11.7289 5.74932 11.6203 6.37868 11.5783 7.20182C12.1527 7.41881 13.2423 7.831 13.4601 8.27603C13.7073 8.72447 13.7967 9.24437 13.7277 9.83561L13.6545 10.4567C13.5647 11.2256 13.269 11.8358 12.7668 12.2868C12.2974 12.7117 11.5893 12.8689 10.6427 12.7585C9.69636 12.6479 9.02919 12.3303 8.64079 11.8053C8.2854 11.2542 8.15259 10.5939 8.24235 9.82486L8.31462 9.20377C8.45622 7.99116 8.96691 6.70195 9.84587 5.33561ZM3.32829 3.56314C4.94416 1.38205 7.82349 1.62396 7.78435 1.97525C7.74814 2.28548 6.9795 1.99346 5.84392 3.26725C5.21135 3.97685 5.10275 4.60622 5.06071 5.42936C5.63514 5.64634 6.72474 6.05852 6.94255 6.50357C7.1898 6.95201 7.27907 7.4719 7.21013 8.06314L7.13786 8.68424C7.0481 9.45328 6.75156 10.0643 6.24919 10.5153C5.77985 10.9401 5.07152 11.0974 4.12517 10.987C3.17876 10.8765 2.51162 10.5579 2.12321 10.0329C1.76788 9.48173 1.63502 8.82138 1.72478 8.0524L1.79704 7.43131C1.93867 6.21872 2.44934 4.92946 3.32829 3.56314Z" 15 + fill="currentColor" 16 + /> 17 + </svg> 18 + ); 19 + };
+101 -85
drizzle/relations.ts
··· 1 1 import { relations } from "drizzle-orm/relations"; 2 - import { entity_sets, entities, facts, identities, email_auth_tokens, bsky_profiles, poll_votes_on_entity, permission_tokens, phone_rsvps_to_entity, custom_domains, custom_domain_routes, email_subscriptions_to_entity, subscribers_to_publications, publications, permission_token_on_homepage, documents, documents_in_publications, publication_domains, leaflets_in_publications, publication_subscriptions, permission_token_rights } from "./schema"; 3 - 4 - export const entitiesRelations = relations(entities, ({one, many}) => ({ 5 - entity_set: one(entity_sets, { 6 - fields: [entities.set], 7 - references: [entity_sets.id] 8 - }), 9 - facts: many(facts), 10 - poll_votes_on_entities_option_entity: many(poll_votes_on_entity, { 11 - relationName: "poll_votes_on_entity_option_entity_entities_id" 12 - }), 13 - poll_votes_on_entities_poll_entity: many(poll_votes_on_entity, { 14 - relationName: "poll_votes_on_entity_poll_entity_entities_id" 15 - }), 16 - permission_tokens: many(permission_tokens), 17 - phone_rsvps_to_entities: many(phone_rsvps_to_entity), 18 - email_subscriptions_to_entities: many(email_subscriptions_to_entity), 19 - })); 2 + import { identities, bsky_profiles, entities, facts, entity_sets, permission_tokens, email_subscriptions_to_entity, email_auth_tokens, custom_domains, phone_rsvps_to_entity, custom_domain_routes, poll_votes_on_entity, subscribers_to_publications, publications, documents, document_mentions_in_bsky, bsky_posts, permission_token_on_homepage, documents_in_publications, publication_domains, publication_subscriptions, leaflets_in_publications, permission_token_rights } from "./schema"; 20 3 21 - export const entity_setsRelations = relations(entity_sets, ({many}) => ({ 22 - entities: many(entities), 23 - permission_token_rights: many(permission_token_rights), 24 - })); 25 - 26 - export const factsRelations = relations(facts, ({one}) => ({ 27 - entity: one(entities, { 28 - fields: [facts.entity], 29 - references: [entities.id] 30 - }), 31 - })); 32 - 33 - export const email_auth_tokensRelations = relations(email_auth_tokens, ({one}) => ({ 4 + export const bsky_profilesRelations = relations(bsky_profiles, ({one}) => ({ 34 5 identity: one(identities, { 35 - fields: [email_auth_tokens.identity], 36 - references: [identities.id] 6 + fields: [bsky_profiles.did], 7 + references: [identities.atp_did] 37 8 }), 38 9 })); 39 10 40 11 export const identitiesRelations = relations(identities, ({one, many}) => ({ 41 - email_auth_tokens: many(email_auth_tokens), 42 12 bsky_profiles: many(bsky_profiles), 43 13 permission_token: one(permission_tokens, { 44 14 fields: [identities.home_page], 45 15 references: [permission_tokens.id] 46 16 }), 17 + email_auth_tokens: many(email_auth_tokens), 47 18 custom_domains_identity: many(custom_domains, { 48 19 relationName: "custom_domains_identity_identities_email" 49 20 }), ··· 56 27 publication_subscriptions: many(publication_subscriptions), 57 28 })); 58 29 59 - export const bsky_profilesRelations = relations(bsky_profiles, ({one}) => ({ 60 - identity: one(identities, { 61 - fields: [bsky_profiles.did], 62 - references: [identities.atp_did] 30 + export const factsRelations = relations(facts, ({one}) => ({ 31 + entity: one(entities, { 32 + fields: [facts.entity], 33 + references: [entities.id] 63 34 }), 64 35 })); 65 36 66 - export const poll_votes_on_entityRelations = relations(poll_votes_on_entity, ({one}) => ({ 67 - entity_option_entity: one(entities, { 68 - fields: [poll_votes_on_entity.option_entity], 69 - references: [entities.id], 37 + export const entitiesRelations = relations(entities, ({one, many}) => ({ 38 + facts: many(facts), 39 + entity_set: one(entity_sets, { 40 + fields: [entities.set], 41 + references: [entity_sets.id] 42 + }), 43 + permission_tokens: many(permission_tokens), 44 + email_subscriptions_to_entities: many(email_subscriptions_to_entity), 45 + phone_rsvps_to_entities: many(phone_rsvps_to_entity), 46 + poll_votes_on_entities_option_entity: many(poll_votes_on_entity, { 70 47 relationName: "poll_votes_on_entity_option_entity_entities_id" 71 48 }), 72 - entity_poll_entity: one(entities, { 73 - fields: [poll_votes_on_entity.poll_entity], 74 - references: [entities.id], 49 + poll_votes_on_entities_poll_entity: many(poll_votes_on_entity, { 75 50 relationName: "poll_votes_on_entity_poll_entity_entities_id" 76 51 }), 52 + })); 53 + 54 + export const entity_setsRelations = relations(entity_sets, ({many}) => ({ 55 + entities: many(entities), 56 + permission_token_rights: many(permission_token_rights), 77 57 })); 78 58 79 59 export const permission_tokensRelations = relations(permission_tokens, ({one, many}) => ({ ··· 82 62 references: [entities.id] 83 63 }), 84 64 identities: many(identities), 65 + email_subscriptions_to_entities: many(email_subscriptions_to_entity), 85 66 custom_domain_routes_edit_permission_token: many(custom_domain_routes, { 86 67 relationName: "custom_domain_routes_edit_permission_token_permission_tokens_id" 87 68 }), 88 69 custom_domain_routes_view_permission_token: many(custom_domain_routes, { 89 70 relationName: "custom_domain_routes_view_permission_token_permission_tokens_id" 90 71 }), 91 - email_subscriptions_to_entities: many(email_subscriptions_to_entity), 92 72 permission_token_on_homepages: many(permission_token_on_homepage), 93 73 leaflets_in_publications: many(leaflets_in_publications), 94 74 permission_token_rights: many(permission_token_rights), 95 75 })); 96 76 97 - export const phone_rsvps_to_entityRelations = relations(phone_rsvps_to_entity, ({one}) => ({ 77 + export const email_subscriptions_to_entityRelations = relations(email_subscriptions_to_entity, ({one}) => ({ 98 78 entity: one(entities, { 99 - fields: [phone_rsvps_to_entity.entity], 79 + fields: [email_subscriptions_to_entity.entity], 100 80 references: [entities.id] 101 81 }), 82 + permission_token: one(permission_tokens, { 83 + fields: [email_subscriptions_to_entity.token], 84 + references: [permission_tokens.id] 85 + }), 102 86 })); 103 87 104 - export const custom_domain_routesRelations = relations(custom_domain_routes, ({one}) => ({ 105 - custom_domain: one(custom_domains, { 106 - fields: [custom_domain_routes.domain], 107 - references: [custom_domains.domain] 108 - }), 109 - permission_token_edit_permission_token: one(permission_tokens, { 110 - fields: [custom_domain_routes.edit_permission_token], 111 - references: [permission_tokens.id], 112 - relationName: "custom_domain_routes_edit_permission_token_permission_tokens_id" 113 - }), 114 - permission_token_view_permission_token: one(permission_tokens, { 115 - fields: [custom_domain_routes.view_permission_token], 116 - references: [permission_tokens.id], 117 - relationName: "custom_domain_routes_view_permission_token_permission_tokens_id" 88 + export const email_auth_tokensRelations = relations(email_auth_tokens, ({one}) => ({ 89 + identity: one(identities, { 90 + fields: [email_auth_tokens.identity], 91 + references: [identities.id] 118 92 }), 119 93 })); 120 94 121 95 export const custom_domainsRelations = relations(custom_domains, ({one, many}) => ({ 122 - custom_domain_routes: many(custom_domain_routes), 123 96 identity_identity: one(identities, { 124 97 fields: [custom_domains.identity], 125 98 references: [identities.email], ··· 130 103 references: [identities.id], 131 104 relationName: "custom_domains_identity_id_identities_id" 132 105 }), 106 + custom_domain_routes: many(custom_domain_routes), 133 107 publication_domains: many(publication_domains), 134 108 })); 135 109 136 - export const email_subscriptions_to_entityRelations = relations(email_subscriptions_to_entity, ({one}) => ({ 110 + export const phone_rsvps_to_entityRelations = relations(phone_rsvps_to_entity, ({one}) => ({ 137 111 entity: one(entities, { 138 - fields: [email_subscriptions_to_entity.entity], 112 + fields: [phone_rsvps_to_entity.entity], 139 113 references: [entities.id] 140 114 }), 141 - permission_token: one(permission_tokens, { 142 - fields: [email_subscriptions_to_entity.token], 143 - references: [permission_tokens.id] 115 + })); 116 + 117 + export const custom_domain_routesRelations = relations(custom_domain_routes, ({one}) => ({ 118 + custom_domain: one(custom_domains, { 119 + fields: [custom_domain_routes.domain], 120 + references: [custom_domains.domain] 121 + }), 122 + permission_token_edit_permission_token: one(permission_tokens, { 123 + fields: [custom_domain_routes.edit_permission_token], 124 + references: [permission_tokens.id], 125 + relationName: "custom_domain_routes_edit_permission_token_permission_tokens_id" 126 + }), 127 + permission_token_view_permission_token: one(permission_tokens, { 128 + fields: [custom_domain_routes.view_permission_token], 129 + references: [permission_tokens.id], 130 + relationName: "custom_domain_routes_view_permission_token_permission_tokens_id" 131 + }), 132 + })); 133 + 134 + export const poll_votes_on_entityRelations = relations(poll_votes_on_entity, ({one}) => ({ 135 + entity_option_entity: one(entities, { 136 + fields: [poll_votes_on_entity.option_entity], 137 + references: [entities.id], 138 + relationName: "poll_votes_on_entity_option_entity_entities_id" 139 + }), 140 + entity_poll_entity: one(entities, { 141 + fields: [poll_votes_on_entity.poll_entity], 142 + references: [entities.id], 143 + relationName: "poll_votes_on_entity_poll_entity_entities_id" 144 144 }), 145 145 })); 146 146 ··· 159 159 subscribers_to_publications: many(subscribers_to_publications), 160 160 documents_in_publications: many(documents_in_publications), 161 161 publication_domains: many(publication_domains), 162 + publication_subscriptions: many(publication_subscriptions), 162 163 leaflets_in_publications: many(leaflets_in_publications), 163 - publication_subscriptions: many(publication_subscriptions), 164 + })); 165 + 166 + export const document_mentions_in_bskyRelations = relations(document_mentions_in_bsky, ({one}) => ({ 167 + document: one(documents, { 168 + fields: [document_mentions_in_bsky.document], 169 + references: [documents.uri] 170 + }), 171 + bsky_post: one(bsky_posts, { 172 + fields: [document_mentions_in_bsky.uri], 173 + references: [bsky_posts.uri] 174 + }), 175 + })); 176 + 177 + export const documentsRelations = relations(documents, ({many}) => ({ 178 + document_mentions_in_bskies: many(document_mentions_in_bsky), 179 + documents_in_publications: many(documents_in_publications), 180 + leaflets_in_publications: many(leaflets_in_publications), 181 + })); 182 + 183 + export const bsky_postsRelations = relations(bsky_posts, ({many}) => ({ 184 + document_mentions_in_bskies: many(document_mentions_in_bsky), 164 185 })); 165 186 166 187 export const permission_token_on_homepageRelations = relations(permission_token_on_homepage, ({one}) => ({ ··· 185 206 }), 186 207 })); 187 208 188 - export const documentsRelations = relations(documents, ({many}) => ({ 189 - documents_in_publications: many(documents_in_publications), 190 - leaflets_in_publications: many(leaflets_in_publications), 191 - })); 192 - 193 209 export const publication_domainsRelations = relations(publication_domains, ({one}) => ({ 194 210 custom_domain: one(custom_domains, { 195 211 fields: [publication_domains.domain], ··· 201 217 }), 202 218 publication: one(publications, { 203 219 fields: [publication_domains.publication], 220 + references: [publications.uri] 221 + }), 222 + })); 223 + 224 + export const publication_subscriptionsRelations = relations(publication_subscriptions, ({one}) => ({ 225 + identity: one(identities, { 226 + fields: [publication_subscriptions.identity], 227 + references: [identities.atp_did] 228 + }), 229 + publication: one(publications, { 230 + fields: [publication_subscriptions.publication], 204 231 references: [publications.uri] 205 232 }), 206 233 })); ··· 216 243 }), 217 244 publication: one(publications, { 218 245 fields: [leaflets_in_publications.publication], 219 - references: [publications.uri] 220 - }), 221 - })); 222 - 223 - export const publication_subscriptionsRelations = relations(publication_subscriptions, ({one}) => ({ 224 - identity: one(identities, { 225 - fields: [publication_subscriptions.identity], 226 - references: [identities.atp_did] 227 - }), 228 - publication: one(publications, { 229 - fields: [publication_subscriptions.publication], 230 246 references: [publications.uri] 231 247 }), 232 248 }));
+84 -75
drizzle/schema.ts
··· 1 - import { pgTable, pgEnum, text, jsonb, timestamp, foreignKey, uuid, index, bigint, boolean, unique, uniqueIndex, smallint, primaryKey } from "drizzle-orm/pg-core" 1 + import { pgTable, pgEnum, text, jsonb, foreignKey, timestamp, uuid, bigint, boolean, unique, uniqueIndex, smallint, primaryKey } from "drizzle-orm/pg-core" 2 2 import { sql } from "drizzle-orm" 3 3 4 4 export const aal_level = pgEnum("aal_level", ['aal1', 'aal2', 'aal3']) 5 5 export const code_challenge_method = pgEnum("code_challenge_method", ['s256', 'plain']) 6 6 export const factor_status = pgEnum("factor_status", ['unverified', 'verified']) 7 - export const factor_type = pgEnum("factor_type", ['totp', 'webauthn', 'phone']) 7 + export const factor_type = pgEnum("factor_type", ['totp', 'webauthn']) 8 8 export const one_time_token_type = pgEnum("one_time_token_type", ['confirmation_token', 'reauthentication_token', 'recovery_token', 'email_change_token_new', 'email_change_token_current', 'phone_change_token']) 9 + export const request_status = pgEnum("request_status", ['PENDING', 'SUCCESS', 'ERROR']) 9 10 export const key_status = pgEnum("key_status", ['default', 'valid', 'invalid', 'expired']) 10 11 export const key_type = pgEnum("key_type", ['aead-ietf', 'aead-det', 'hmacsha512', 'hmacsha256', 'auth', 'shorthash', 'generichash', 'kdf', 'secretbox', 'secretstream', 'stream_xchacha20']) 11 12 export const rsvp_status = pgEnum("rsvp_status", ['GOING', 'NOT_GOING', 'MAYBE']) ··· 18 19 state: jsonb("state").notNull(), 19 20 }); 20 21 22 + export const oauth_session_store = pgTable("oauth_session_store", { 23 + key: text("key").primaryKey().notNull(), 24 + session: jsonb("session").notNull(), 25 + }); 26 + 27 + export const bsky_profiles = pgTable("bsky_profiles", { 28 + did: text("did").primaryKey().notNull().references(() => identities.atp_did, { onDelete: "cascade" } ), 29 + record: jsonb("record").notNull(), 30 + indexed_at: timestamp("indexed_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 31 + handle: text("handle"), 32 + }); 33 + 21 34 export const publications = pgTable("publications", { 22 35 uri: text("uri").primaryKey().notNull(), 23 36 indexed_at: timestamp("indexed_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), ··· 26 39 record: jsonb("record"), 27 40 }); 28 41 29 - export const entities = pgTable("entities", { 30 - id: uuid("id").primaryKey().notNull(), 31 - created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 32 - set: uuid("set").notNull().references(() => entity_sets.id, { onDelete: "cascade", onUpdate: "cascade" } ), 42 + export const bsky_posts = pgTable("bsky_posts", { 43 + uri: text("uri").primaryKey().notNull(), 44 + indexed_at: timestamp("indexed_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 45 + post_view: jsonb("post_view").notNull(), 46 + cid: text("cid").notNull(), 33 47 }); 34 48 35 49 export const facts = pgTable("facts", { ··· 41 55 updated_at: timestamp("updated_at", { mode: 'string' }), 42 56 // You can use { mode: "bigint" } if numbers are exceeding js number limitations 43 57 version: bigint("version", { mode: "number" }).default(0).notNull(), 44 - }, 45 - (table) => { 46 - return { 47 - entity_idx: index("facts_entity_idx").on(table.entity), 48 - } 58 + }); 59 + 60 + export const documents = pgTable("documents", { 61 + uri: text("uri").primaryKey().notNull(), 62 + data: jsonb("data").notNull(), 63 + indexed_at: timestamp("indexed_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 49 64 }); 50 65 51 66 export const replicache_clients = pgTable("replicache_clients", { ··· 53 68 client_group: text("client_group").notNull(), 54 69 // You can use { mode: "bigint" } if numbers are exceeding js number limitations 55 70 last_mutation: bigint("last_mutation", { mode: "number" }).notNull(), 56 - }, 57 - (table) => { 58 - return { 59 - client_group_idx: index("replicache_clients_client_group_idx").on(table.client_group), 60 - } 61 71 }); 62 72 63 - export const email_auth_tokens = pgTable("email_auth_tokens", { 64 - id: uuid("id").defaultRandom().primaryKey().notNull(), 73 + export const entities = pgTable("entities", { 74 + id: uuid("id").primaryKey().notNull(), 65 75 created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 66 - confirmed: boolean("confirmed").default(false).notNull(), 67 - email: text("email"), 68 - confirmation_code: text("confirmation_code").notNull(), 69 - identity: uuid("identity").references(() => identities.id, { onDelete: "cascade", onUpdate: "cascade" } ), 70 - }); 71 - 72 - export const bsky_profiles = pgTable("bsky_profiles", { 73 - did: text("did").primaryKey().notNull().references(() => identities.atp_did, { onDelete: "cascade" } ), 74 - record: jsonb("record").notNull(), 75 - indexed_at: timestamp("indexed_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 76 - handle: text("handle"), 76 + set: uuid("set").notNull().references(() => entity_sets.id, { onDelete: "cascade", onUpdate: "cascade" } ), 77 77 }); 78 78 79 79 export const entity_sets = pgTable("entity_sets", { ··· 81 81 created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 82 82 }); 83 83 84 - export const poll_votes_on_entity = pgTable("poll_votes_on_entity", { 85 - id: uuid("id").defaultRandom().primaryKey().notNull(), 86 - created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 87 - poll_entity: uuid("poll_entity").notNull().references(() => entities.id, { onDelete: "cascade", onUpdate: "cascade" } ), 88 - option_entity: uuid("option_entity").notNull().references(() => entities.id, { onDelete: "cascade", onUpdate: "cascade" } ), 89 - voter_token: uuid("voter_token").notNull(), 90 - }); 91 - 92 84 export const permission_tokens = pgTable("permission_tokens", { 93 85 id: uuid("id").defaultRandom().primaryKey().notNull(), 94 86 root_entity: uuid("root_entity").notNull().references(() => entities.id, { onDelete: "cascade", onUpdate: "cascade" } ), ··· 109 101 } 110 102 }); 111 103 104 + export const email_subscriptions_to_entity = pgTable("email_subscriptions_to_entity", { 105 + id: uuid("id").defaultRandom().primaryKey().notNull(), 106 + entity: uuid("entity").notNull().references(() => entities.id, { onDelete: "cascade" } ), 107 + email: text("email").notNull(), 108 + created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 109 + token: uuid("token").notNull().references(() => permission_tokens.id, { onDelete: "cascade" } ), 110 + confirmed: boolean("confirmed").default(false).notNull(), 111 + confirmation_code: text("confirmation_code").notNull(), 112 + }); 113 + 114 + export const email_auth_tokens = pgTable("email_auth_tokens", { 115 + id: uuid("id").defaultRandom().primaryKey().notNull(), 116 + created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 117 + confirmed: boolean("confirmed").default(false).notNull(), 118 + email: text("email"), 119 + confirmation_code: text("confirmation_code").notNull(), 120 + identity: uuid("identity").references(() => identities.id, { onDelete: "cascade", onUpdate: "cascade" } ), 121 + }); 122 + 112 123 export const phone_number_auth_tokens = pgTable("phone_number_auth_tokens", { 113 124 id: uuid("id").defaultRandom().primaryKey().notNull(), 114 125 created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), ··· 116 127 confirmation_code: text("confirmation_code").notNull(), 117 128 phone_number: text("phone_number").notNull(), 118 129 country_code: text("country_code").notNull(), 130 + }); 131 + 132 + export const custom_domains = pgTable("custom_domains", { 133 + domain: text("domain").primaryKey().notNull(), 134 + identity: text("identity").default('').references(() => identities.email, { onDelete: "cascade", onUpdate: "cascade" } ), 135 + confirmed: boolean("confirmed").notNull(), 136 + created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 137 + identity_id: uuid("identity_id").references(() => identities.id, { onDelete: "cascade" } ), 119 138 }); 120 139 121 140 export const phone_rsvps_to_entity = pgTable("phone_rsvps_to_entity", { ··· 148 167 } 149 168 }); 150 169 151 - export const custom_domains = pgTable("custom_domains", { 152 - domain: text("domain").primaryKey().notNull(), 153 - identity: text("identity").default('').references(() => identities.email, { onDelete: "cascade", onUpdate: "cascade" } ), 154 - confirmed: boolean("confirmed").notNull(), 155 - created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 156 - identity_id: uuid("identity_id").references(() => identities.id, { onDelete: "cascade" } ), 157 - }); 158 - 159 - export const email_subscriptions_to_entity = pgTable("email_subscriptions_to_entity", { 170 + export const poll_votes_on_entity = pgTable("poll_votes_on_entity", { 160 171 id: uuid("id").defaultRandom().primaryKey().notNull(), 161 - entity: uuid("entity").notNull().references(() => entities.id, { onDelete: "cascade" } ), 162 - email: text("email").notNull(), 163 172 created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 164 - token: uuid("token").notNull().references(() => permission_tokens.id, { onDelete: "cascade" } ), 165 - confirmed: boolean("confirmed").default(false).notNull(), 166 - confirmation_code: text("confirmation_code").notNull(), 167 - }); 168 - 169 - export const documents = pgTable("documents", { 170 - uri: text("uri").primaryKey().notNull(), 171 - data: jsonb("data").notNull(), 172 - indexed_at: timestamp("indexed_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 173 - }); 174 - 175 - export const oauth_session_store = pgTable("oauth_session_store", { 176 - key: text("key").primaryKey().notNull(), 177 - session: jsonb("session").notNull(), 173 + poll_entity: uuid("poll_entity").notNull().references(() => entities.id, { onDelete: "cascade", onUpdate: "cascade" } ), 174 + option_entity: uuid("option_entity").notNull().references(() => entities.id, { onDelete: "cascade", onUpdate: "cascade" } ), 175 + voter_token: uuid("voter_token").notNull(), 178 176 }); 179 177 180 178 export const subscribers_to_publications = pgTable("subscribers_to_publications", { ··· 185 183 (table) => { 186 184 return { 187 185 subscribers_to_publications_pkey: primaryKey({ columns: [table.identity, table.publication], name: "subscribers_to_publications_pkey"}), 186 + } 187 + }); 188 + 189 + export const document_mentions_in_bsky = pgTable("document_mentions_in_bsky", { 190 + uri: text("uri").notNull().references(() => bsky_posts.uri, { onDelete: "cascade" } ), 191 + link: text("link").notNull(), 192 + document: text("document").notNull().references(() => documents.uri, { onDelete: "cascade" } ), 193 + }, 194 + (table) => { 195 + return { 196 + document_mentions_in_bsky_pkey: primaryKey({ columns: [table.uri, table.document], name: "document_mentions_in_bsky_pkey"}), 188 197 } 189 198 }); 190 199 ··· 222 231 } 223 232 }); 224 233 225 - export const leaflets_in_publications = pgTable("leaflets_in_publications", { 234 + export const publication_subscriptions = pgTable("publication_subscriptions", { 226 235 publication: text("publication").notNull().references(() => publications.uri, { onDelete: "cascade" } ), 227 - doc: text("doc").default('').references(() => documents.uri, { onDelete: "set null" } ), 228 - leaflet: uuid("leaflet").notNull().references(() => permission_tokens.id, { onDelete: "cascade" } ), 229 - description: text("description").default('').notNull(), 230 - title: text("title").default('').notNull(), 236 + identity: text("identity").notNull().references(() => identities.atp_did, { onDelete: "cascade" } ), 237 + created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 238 + record: jsonb("record").notNull(), 239 + uri: text("uri").notNull(), 231 240 }, 232 241 (table) => { 233 242 return { 234 - leaflets_in_publications_pkey: primaryKey({ columns: [table.publication, table.leaflet], name: "leaflets_in_publications_pkey"}), 243 + publication_subscriptions_pkey: primaryKey({ columns: [table.publication, table.identity], name: "publication_subscriptions_pkey"}), 244 + publication_subscriptions_uri_key: unique("publication_subscriptions_uri_key").on(table.uri), 235 245 } 236 246 }); 237 247 238 - export const publication_subscriptions = pgTable("publication_subscriptions", { 248 + export const leaflets_in_publications = pgTable("leaflets_in_publications", { 239 249 publication: text("publication").notNull().references(() => publications.uri, { onDelete: "cascade" } ), 240 - identity: text("identity").notNull().references(() => identities.atp_did, { onDelete: "cascade" } ), 241 - created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), 242 - record: jsonb("record").notNull(), 243 - uri: text("uri").notNull(), 250 + doc: text("doc").default('').references(() => documents.uri, { onDelete: "set null" } ), 251 + leaflet: uuid("leaflet").notNull().references(() => permission_tokens.id, { onDelete: "cascade" } ), 252 + description: text("description").default('').notNull(), 253 + title: text("title").default('').notNull(), 244 254 }, 245 255 (table) => { 246 256 return { 247 - publication_subscriptions_pkey: primaryKey({ columns: [table.publication, table.identity], name: "publication_subscriptions_pkey"}), 248 - publication_subscriptions_uri_key: unique("publication_subscriptions_uri_key").on(table.uri), 257 + leaflets_in_publications_pkey: primaryKey({ columns: [table.publication, table.leaflet], name: "leaflets_in_publications_pkey"}), 249 258 } 250 259 }); 251 260
+6 -4
feeds/index.ts
··· 27 27 28 28 app.get("/xrpc/app.bsky.feed.getFeedSkeleton", async (c) => { 29 29 let auth = await validateAuth(c.req, serviceDid); 30 + if (!auth) return c.json({ feed: [] }); 30 31 let cursor = c.req.query("cursor"); 31 - if (!auth) return c.json({ feed: [] }); 32 + let limit = parseInt(c.req.query("limit") || "10"); 32 33 33 34 let { data: publications } = await supabaseServerClient 34 35 .from("publication_subscriptions") 35 36 .select(`publications(documents_in_publications(documents(*)))`) 36 37 .eq("identity", auth); 37 - const feed = (publications || []) 38 + 39 + const allPosts = (publications || []) 38 40 .flatMap((pub) => { 39 41 let posts = pub.publications?.documents_in_publications || []; 40 42 return posts; ··· 52 54 }); 53 55 let posts; 54 56 if (!cursor) { 55 - posts = feed.slice(0, 25); 57 + posts = allPosts.slice(0, 25); 56 58 } else { 57 59 let date = cursor.split("::")[0]; 58 60 let uri = cursor.split("::")[1]; 59 - posts = feed 61 + posts = allPosts 60 62 .filter((p) => { 61 63 if (!p.documents?.data) return false; 62 64 let record = p.documents.data as PubLeafletDocument.Record;
+18
lexicons/src/blocks.ts
··· 48 48 }, 49 49 }; 50 50 51 + export const PubLeafletBlocksLeafletQuote: LexiconDoc = { 52 + lexicon: 1, 53 + id: "pub.leaflet.blocks.leafletQuote", 54 + defs: { 55 + main: { 56 + type: "object", 57 + required: ["src"], 58 + properties: { 59 + record: { type: "ref", ref: "com.atproto.repo.strongRef" }, 60 + position: { 61 + type: "union", 62 + refs: ["pub.leaflet.pages.linearDocument#quote"], 63 + }, 64 + }, 65 + }, 66 + }, 67 + }; 68 + 51 69 export const PubLeafletBlocksWebsite: LexiconDoc = { 52 70 lexicon: 1, 53 71 id: "pub.leaflet.blocks.website",
+15
lexicons/src/pages/LinearDocument.ts
··· 29 29 textAlignLeft: { type: "token" }, 30 30 textAlignCenter: { type: "token" }, 31 31 textAlignRight: { type: "token" }, 32 + quote: { 33 + type: "object", 34 + required: ["start", "end"], 35 + properties: { 36 + start: { type: "ref", ref: "#position" }, 37 + end: { type: "ref", ref: "#position" }, 38 + }, 39 + }, 40 + position: { 41 + type: "object", 42 + properties: { 43 + path: { type: "array", items: { type: "integer" } }, 44 + offset: { type: "integer" }, 45 + }, 46 + }, 32 47 }, 33 48 };
+2086 -2133
package-lock.json
··· 42 42 "feed": "^5.0.1", 43 43 "fractional-indexing": "^3.2.0", 44 44 "hono": "^4.7.11", 45 + "inngest": "^3.40.1", 45 46 "ioredis": "^5.6.1", 46 47 "katex": "^0.16.22", 47 48 "linkifyjs": "^4.2.0", ··· 648 649 "node": ">= 16" 649 650 } 650 651 }, 651 - "node_modules/@cbor-extract/cbor-extract-darwin-arm64": { 652 - "version": "2.2.0", 653 - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-arm64/-/cbor-extract-darwin-arm64-2.2.0.tgz", 654 - "integrity": "sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w==", 655 - "cpu": [ 656 - "arm64" 657 - ], 658 - "license": "MIT", 659 - "optional": true, 660 - "os": [ 661 - "darwin" 662 - ] 663 - }, 664 - "node_modules/@cbor-extract/cbor-extract-darwin-x64": { 665 - "version": "2.2.0", 666 - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-x64/-/cbor-extract-darwin-x64-2.2.0.tgz", 667 - "integrity": "sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w==", 668 - "cpu": [ 669 - "x64" 670 - ], 671 - "license": "MIT", 672 - "optional": true, 673 - "os": [ 674 - "darwin" 675 - ] 676 - }, 677 - "node_modules/@cbor-extract/cbor-extract-linux-arm": { 678 - "version": "2.2.0", 679 - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm/-/cbor-extract-linux-arm-2.2.0.tgz", 680 - "integrity": "sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q==", 681 - "cpu": [ 682 - "arm" 683 - ], 684 - "license": "MIT", 685 - "optional": true, 686 - "os": [ 687 - "linux" 688 - ] 689 - }, 690 - "node_modules/@cbor-extract/cbor-extract-linux-arm64": { 691 - "version": "2.2.0", 692 - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-linux-arm64/-/cbor-extract-linux-arm64-2.2.0.tgz", 693 - "integrity": "sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ==", 694 - "cpu": [ 695 - "arm64" 696 - ], 697 - "license": "MIT", 698 - "optional": true, 699 - "os": [ 700 - "linux" 701 - ] 652 + "node_modules/@bufbuild/protobuf": { 653 + "version": "2.6.2", 654 + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.6.2.tgz", 655 + "integrity": "sha512-vLu7SRY84CV/Dd+NUdgtidn2hS5hSMUC1vDBY0VcviTdgRYkU43vIz3vIFbmx14cX1r+mM7WjzE5Fl1fGEM0RQ==", 656 + "license": "(Apache-2.0 AND BSD-3-Clause)" 702 657 }, 703 658 "node_modules/@cbor-extract/cbor-extract-linux-x64": { 704 659 "version": "2.2.0", ··· 713 668 "linux" 714 669 ] 715 670 }, 716 - "node_modules/@cbor-extract/cbor-extract-win32-x64": { 717 - "version": "2.2.0", 718 - "resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.2.0.tgz", 719 - "integrity": "sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w==", 720 - "cpu": [ 721 - "x64" 722 - ], 723 - "license": "MIT", 724 - "optional": true, 725 - "os": [ 726 - "win32" 727 - ] 728 - }, 729 671 "node_modules/@cloudflare/kv-asset-handler": { 730 672 "version": "0.3.2", 731 673 "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.2.tgz", ··· 738 680 "node": ">=16.13" 739 681 } 740 682 }, 741 - "node_modules/@cloudflare/workerd-darwin-64": { 742 - "version": "1.20240524.0", 743 - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240524.0.tgz", 744 - "integrity": "sha512-ATaXjefbTsrv4mpn4Fdua114RRDXcX5Ky+Mv+f4JTUllgalmqC4CYMN4jxRz9IpJU/fNMN8IEfvUyuJBAcl9Iw==", 745 - "cpu": [ 746 - "x64" 747 - ], 748 - "dev": true, 749 - "optional": true, 750 - "os": [ 751 - "darwin" 752 - ], 753 - "engines": { 754 - "node": ">=16" 755 - } 756 - }, 757 - "node_modules/@cloudflare/workerd-darwin-arm64": { 758 - "version": "1.20240524.0", 759 - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240524.0.tgz", 760 - "integrity": "sha512-wnbsZI4CS0QPCd+wnBHQ40C28A/2Qo4ESi1YhE2735G3UNcc876MWksZhsubd+XH0XPIra6eNFqyw6wRMpQOXA==", 761 - "cpu": [ 762 - "arm64" 763 - ], 764 - "dev": true, 765 - "optional": true, 766 - "os": [ 767 - "darwin" 768 - ], 769 - "engines": { 770 - "node": ">=16" 771 - } 772 - }, 773 683 "node_modules/@cloudflare/workerd-linux-64": { 774 684 "version": "1.20240524.0", 775 685 "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240524.0.tgz", ··· 786 696 "node": ">=16" 787 697 } 788 698 }, 789 - "node_modules/@cloudflare/workerd-linux-arm64": { 790 - "version": "1.20240524.0", 791 - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240524.0.tgz", 792 - "integrity": "sha512-/Fr1W671t2triNCDCBWdStxngnbUfZunZ/2e4kaMLzJDJLYDtYdmvOUCBDzUD4ssqmIMbn9RCQQ0U+CLEoqBqw==", 793 - "cpu": [ 794 - "arm64" 795 - ], 796 - "dev": true, 797 - "optional": true, 798 - "os": [ 799 - "linux" 800 - ], 801 - "engines": { 802 - "node": ">=16" 803 - } 804 - }, 805 - "node_modules/@cloudflare/workerd-windows-64": { 806 - "version": "1.20240524.0", 807 - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240524.0.tgz", 808 - "integrity": "sha512-G+ThDEx57g9mAEKqhWnHaaJgpeGYtyhkmwM/BDpLqPks/rAY5YEfZbY4YL1pNk1kkcZDXGrwIsY8xe9Apf5JdA==", 809 - "cpu": [ 810 - "x64" 811 - ], 812 - "dev": true, 813 - "optional": true, 814 - "os": [ 815 - "win32" 816 - ], 817 - "engines": { 818 - "node": ">=16" 819 - } 820 - }, 821 699 "node_modules/@cloudflare/workers-types": { 822 700 "version": "4.20240524.0", 823 701 "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20240524.0.tgz", ··· 860 738 "node": ">=10.0.0" 861 739 } 862 740 }, 863 - "node_modules/@emnapi/runtime": { 864 - "version": "1.4.5", 865 - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", 866 - "integrity": "sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==", 867 - "license": "MIT", 868 - "optional": true, 869 - "dependencies": { 870 - "tslib": "^2.4.0" 871 - } 872 - }, 873 741 "node_modules/@esbuild-kit/core-utils": { 874 742 "version": "3.3.2", 875 743 "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz", ··· 880 748 "source-map-support": "^0.5.21" 881 749 } 882 750 }, 883 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm": { 884 - "version": "0.18.20", 885 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", 886 - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", 887 - "cpu": [ 888 - "arm" 889 - ], 890 - "dev": true, 891 - "optional": true, 892 - "os": [ 893 - "android" 894 - ], 895 - "engines": { 896 - "node": ">=12" 897 - } 898 - }, 899 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm64": { 900 - "version": "0.18.20", 901 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", 902 - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", 903 - "cpu": [ 904 - "arm64" 905 - ], 906 - "dev": true, 907 - "optional": true, 908 - "os": [ 909 - "android" 910 - ], 911 - "engines": { 912 - "node": ">=12" 913 - } 914 - }, 915 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-x64": { 916 - "version": "0.18.20", 917 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", 918 - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", 919 - "cpu": [ 920 - "x64" 921 - ], 922 - "dev": true, 923 - "optional": true, 924 - "os": [ 925 - "android" 926 - ], 927 - "engines": { 928 - "node": ">=12" 929 - } 930 - }, 931 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-arm64": { 932 - "version": "0.18.20", 933 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", 934 - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", 935 - "cpu": [ 936 - "arm64" 937 - ], 938 - "dev": true, 939 - "optional": true, 940 - "os": [ 941 - "darwin" 942 - ], 943 - "engines": { 944 - "node": ">=12" 945 - } 946 - }, 947 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-x64": { 948 - "version": "0.18.20", 949 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", 950 - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", 951 - "cpu": [ 952 - "x64" 953 - ], 954 - "dev": true, 955 - "optional": true, 956 - "os": [ 957 - "darwin" 958 - ], 959 - "engines": { 960 - "node": ">=12" 961 - } 962 - }, 963 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-arm64": { 964 - "version": "0.18.20", 965 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", 966 - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", 967 - "cpu": [ 968 - "arm64" 969 - ], 970 - "dev": true, 971 - "optional": true, 972 - "os": [ 973 - "freebsd" 974 - ], 975 - "engines": { 976 - "node": ">=12" 977 - } 978 - }, 979 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-x64": { 980 - "version": "0.18.20", 981 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", 982 - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", 983 - "cpu": [ 984 - "x64" 985 - ], 986 - "dev": true, 987 - "optional": true, 988 - "os": [ 989 - "freebsd" 990 - ], 991 - "engines": { 992 - "node": ">=12" 993 - } 994 - }, 995 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm": { 996 - "version": "0.18.20", 997 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", 998 - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", 999 - "cpu": [ 1000 - "arm" 1001 - ], 1002 - "dev": true, 1003 - "optional": true, 1004 - "os": [ 1005 - "linux" 1006 - ], 1007 - "engines": { 1008 - "node": ">=12" 1009 - } 1010 - }, 1011 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm64": { 1012 - "version": "0.18.20", 1013 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", 1014 - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", 1015 - "cpu": [ 1016 - "arm64" 1017 - ], 1018 - "dev": true, 1019 - "optional": true, 1020 - "os": [ 1021 - "linux" 1022 - ], 1023 - "engines": { 1024 - "node": ">=12" 1025 - } 1026 - }, 1027 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ia32": { 1028 - "version": "0.18.20", 1029 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", 1030 - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", 1031 - "cpu": [ 1032 - "ia32" 1033 - ], 1034 - "dev": true, 1035 - "optional": true, 1036 - "os": [ 1037 - "linux" 1038 - ], 1039 - "engines": { 1040 - "node": ">=12" 1041 - } 1042 - }, 1043 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-loong64": { 1044 - "version": "0.18.20", 1045 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", 1046 - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", 1047 - "cpu": [ 1048 - "loong64" 1049 - ], 1050 - "dev": true, 1051 - "optional": true, 1052 - "os": [ 1053 - "linux" 1054 - ], 1055 - "engines": { 1056 - "node": ">=12" 1057 - } 1058 - }, 1059 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-mips64el": { 1060 - "version": "0.18.20", 1061 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", 1062 - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", 1063 - "cpu": [ 1064 - "mips64el" 1065 - ], 1066 - "dev": true, 1067 - "optional": true, 1068 - "os": [ 1069 - "linux" 1070 - ], 1071 - "engines": { 1072 - "node": ">=12" 1073 - } 1074 - }, 1075 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ppc64": { 1076 - "version": "0.18.20", 1077 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", 1078 - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", 1079 - "cpu": [ 1080 - "ppc64" 1081 - ], 1082 - "dev": true, 1083 - "optional": true, 1084 - "os": [ 1085 - "linux" 1086 - ], 1087 - "engines": { 1088 - "node": ">=12" 1089 - } 1090 - }, 1091 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-riscv64": { 1092 - "version": "0.18.20", 1093 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", 1094 - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", 1095 - "cpu": [ 1096 - "riscv64" 1097 - ], 1098 - "dev": true, 1099 - "optional": true, 1100 - "os": [ 1101 - "linux" 1102 - ], 1103 - "engines": { 1104 - "node": ">=12" 1105 - } 1106 - }, 1107 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-s390x": { 1108 - "version": "0.18.20", 1109 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", 1110 - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", 1111 - "cpu": [ 1112 - "s390x" 1113 - ], 1114 - "dev": true, 1115 - "optional": true, 1116 - "os": [ 1117 - "linux" 1118 - ], 1119 - "engines": { 1120 - "node": ">=12" 1121 - } 1122 - }, 1123 751 "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-x64": { 1124 752 "version": "0.18.20", 1125 753 "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", ··· 1136 764 "node": ">=12" 1137 765 } 1138 766 }, 1139 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/netbsd-x64": { 1140 - "version": "0.18.20", 1141 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", 1142 - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", 1143 - "cpu": [ 1144 - "x64" 1145 - ], 1146 - "dev": true, 1147 - "optional": true, 1148 - "os": [ 1149 - "netbsd" 1150 - ], 1151 - "engines": { 1152 - "node": ">=12" 1153 - } 1154 - }, 1155 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/openbsd-x64": { 1156 - "version": "0.18.20", 1157 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", 1158 - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", 1159 - "cpu": [ 1160 - "x64" 1161 - ], 1162 - "dev": true, 1163 - "optional": true, 1164 - "os": [ 1165 - "openbsd" 1166 - ], 1167 - "engines": { 1168 - "node": ">=12" 1169 - } 1170 - }, 1171 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/sunos-x64": { 1172 - "version": "0.18.20", 1173 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", 1174 - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", 1175 - "cpu": [ 1176 - "x64" 1177 - ], 1178 - "dev": true, 1179 - "optional": true, 1180 - "os": [ 1181 - "sunos" 1182 - ], 1183 - "engines": { 1184 - "node": ">=12" 1185 - } 1186 - }, 1187 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-arm64": { 1188 - "version": "0.18.20", 1189 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", 1190 - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", 1191 - "cpu": [ 1192 - "arm64" 1193 - ], 1194 - "dev": true, 1195 - "optional": true, 1196 - "os": [ 1197 - "win32" 1198 - ], 1199 - "engines": { 1200 - "node": ">=12" 1201 - } 1202 - }, 1203 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-ia32": { 1204 - "version": "0.18.20", 1205 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", 1206 - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", 1207 - "cpu": [ 1208 - "ia32" 1209 - ], 1210 - "dev": true, 1211 - "optional": true, 1212 - "os": [ 1213 - "win32" 1214 - ], 1215 - "engines": { 1216 - "node": ">=12" 1217 - } 1218 - }, 1219 - "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-x64": { 1220 - "version": "0.18.20", 1221 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", 1222 - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", 1223 - "cpu": [ 1224 - "x64" 1225 - ], 1226 - "dev": true, 1227 - "optional": true, 1228 - "os": [ 1229 - "win32" 1230 - ], 1231 - "engines": { 1232 - "node": ">=12" 1233 - } 1234 - }, 1235 767 "node_modules/@esbuild-kit/core-utils/node_modules/esbuild": { 1236 768 "version": "0.18.20", 1237 769 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", ··· 1301 833 "esbuild": "*" 1302 834 } 1303 835 }, 1304 - "node_modules/@esbuild/aix-ppc64": { 1305 - "version": "0.25.4", 1306 - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", 1307 - "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", 1308 - "cpu": [ 1309 - "ppc64" 1310 - ], 1311 - "dev": true, 1312 - "license": "MIT", 1313 - "optional": true, 1314 - "os": [ 1315 - "aix" 1316 - ], 1317 - "engines": { 1318 - "node": ">=18" 1319 - } 1320 - }, 1321 - "node_modules/@esbuild/android-arm": { 1322 - "version": "0.25.4", 1323 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", 1324 - "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", 1325 - "cpu": [ 1326 - "arm" 1327 - ], 1328 - "dev": true, 1329 - "license": "MIT", 1330 - "optional": true, 1331 - "os": [ 1332 - "android" 1333 - ], 1334 - "engines": { 1335 - "node": ">=18" 1336 - } 1337 - }, 1338 - "node_modules/@esbuild/android-arm64": { 1339 - "version": "0.25.4", 1340 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", 1341 - "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", 1342 - "cpu": [ 1343 - "arm64" 1344 - ], 1345 - "dev": true, 1346 - "license": "MIT", 1347 - "optional": true, 1348 - "os": [ 1349 - "android" 1350 - ], 1351 - "engines": { 1352 - "node": ">=18" 1353 - } 1354 - }, 1355 - "node_modules/@esbuild/android-x64": { 1356 - "version": "0.25.4", 1357 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", 1358 - "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", 1359 - "cpu": [ 1360 - "x64" 1361 - ], 1362 - "dev": true, 1363 - "license": "MIT", 1364 - "optional": true, 1365 - "os": [ 1366 - "android" 1367 - ], 1368 - "engines": { 1369 - "node": ">=18" 1370 - } 1371 - }, 1372 - "node_modules/@esbuild/darwin-arm64": { 1373 - "version": "0.25.4", 1374 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", 1375 - "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", 1376 - "cpu": [ 1377 - "arm64" 1378 - ], 1379 - "dev": true, 1380 - "license": "MIT", 1381 - "optional": true, 1382 - "os": [ 1383 - "darwin" 1384 - ], 1385 - "engines": { 1386 - "node": ">=18" 1387 - } 1388 - }, 1389 - "node_modules/@esbuild/darwin-x64": { 1390 - "version": "0.25.4", 1391 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", 1392 - "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", 1393 - "cpu": [ 1394 - "x64" 1395 - ], 1396 - "dev": true, 1397 - "license": "MIT", 1398 - "optional": true, 1399 - "os": [ 1400 - "darwin" 1401 - ], 1402 - "engines": { 1403 - "node": ">=18" 1404 - } 1405 - }, 1406 - "node_modules/@esbuild/freebsd-arm64": { 1407 - "version": "0.25.4", 1408 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", 1409 - "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", 1410 - "cpu": [ 1411 - "arm64" 1412 - ], 1413 - "dev": true, 1414 - "license": "MIT", 1415 - "optional": true, 1416 - "os": [ 1417 - "freebsd" 1418 - ], 1419 - "engines": { 1420 - "node": ">=18" 1421 - } 1422 - }, 1423 - "node_modules/@esbuild/freebsd-x64": { 1424 - "version": "0.25.4", 1425 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", 1426 - "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", 1427 - "cpu": [ 1428 - "x64" 1429 - ], 1430 - "dev": true, 1431 - "license": "MIT", 1432 - "optional": true, 1433 - "os": [ 1434 - "freebsd" 1435 - ], 1436 - "engines": { 1437 - "node": ">=18" 1438 - } 1439 - }, 1440 - "node_modules/@esbuild/linux-arm": { 1441 - "version": "0.25.4", 1442 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", 1443 - "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", 1444 - "cpu": [ 1445 - "arm" 1446 - ], 1447 - "dev": true, 1448 - "license": "MIT", 1449 - "optional": true, 1450 - "os": [ 1451 - "linux" 1452 - ], 1453 - "engines": { 1454 - "node": ">=18" 1455 - } 1456 - }, 1457 - "node_modules/@esbuild/linux-arm64": { 1458 - "version": "0.25.4", 1459 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", 1460 - "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", 1461 - "cpu": [ 1462 - "arm64" 1463 - ], 1464 - "dev": true, 1465 - "license": "MIT", 1466 - "optional": true, 1467 - "os": [ 1468 - "linux" 1469 - ], 1470 - "engines": { 1471 - "node": ">=18" 1472 - } 1473 - }, 1474 - "node_modules/@esbuild/linux-ia32": { 1475 - "version": "0.25.4", 1476 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", 1477 - "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", 1478 - "cpu": [ 1479 - "ia32" 1480 - ], 1481 - "dev": true, 1482 - "license": "MIT", 1483 - "optional": true, 1484 - "os": [ 1485 - "linux" 1486 - ], 1487 - "engines": { 1488 - "node": ">=18" 1489 - } 1490 - }, 1491 - "node_modules/@esbuild/linux-loong64": { 1492 - "version": "0.25.4", 1493 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", 1494 - "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", 1495 - "cpu": [ 1496 - "loong64" 1497 - ], 1498 - "dev": true, 1499 - "license": "MIT", 1500 - "optional": true, 1501 - "os": [ 1502 - "linux" 1503 - ], 1504 - "engines": { 1505 - "node": ">=18" 1506 - } 1507 - }, 1508 - "node_modules/@esbuild/linux-mips64el": { 1509 - "version": "0.25.4", 1510 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", 1511 - "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", 1512 - "cpu": [ 1513 - "mips64el" 1514 - ], 1515 - "dev": true, 1516 - "license": "MIT", 1517 - "optional": true, 1518 - "os": [ 1519 - "linux" 1520 - ], 1521 - "engines": { 1522 - "node": ">=18" 1523 - } 1524 - }, 1525 - "node_modules/@esbuild/linux-ppc64": { 1526 - "version": "0.25.4", 1527 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", 1528 - "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", 1529 - "cpu": [ 1530 - "ppc64" 1531 - ], 1532 - "dev": true, 1533 - "license": "MIT", 1534 - "optional": true, 1535 - "os": [ 1536 - "linux" 1537 - ], 1538 - "engines": { 1539 - "node": ">=18" 1540 - } 1541 - }, 1542 - "node_modules/@esbuild/linux-riscv64": { 1543 - "version": "0.25.4", 1544 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", 1545 - "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", 1546 - "cpu": [ 1547 - "riscv64" 1548 - ], 1549 - "dev": true, 1550 - "license": "MIT", 1551 - "optional": true, 1552 - "os": [ 1553 - "linux" 1554 - ], 1555 - "engines": { 1556 - "node": ">=18" 1557 - } 1558 - }, 1559 - "node_modules/@esbuild/linux-s390x": { 1560 - "version": "0.25.4", 1561 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", 1562 - "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", 1563 - "cpu": [ 1564 - "s390x" 1565 - ], 1566 - "dev": true, 1567 - "license": "MIT", 1568 - "optional": true, 1569 - "os": [ 1570 - "linux" 1571 - ], 1572 - "engines": { 1573 - "node": ">=18" 1574 - } 1575 - }, 1576 836 "node_modules/@esbuild/linux-x64": { 1577 837 "version": "0.25.4", 1578 838 "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", ··· 1590 850 "node": ">=18" 1591 851 } 1592 852 }, 1593 - "node_modules/@esbuild/netbsd-arm64": { 1594 - "version": "0.25.4", 1595 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", 1596 - "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", 1597 - "cpu": [ 1598 - "arm64" 1599 - ], 1600 - "dev": true, 1601 - "license": "MIT", 1602 - "optional": true, 1603 - "os": [ 1604 - "netbsd" 1605 - ], 1606 - "engines": { 1607 - "node": ">=18" 1608 - } 1609 - }, 1610 - "node_modules/@esbuild/netbsd-x64": { 1611 - "version": "0.25.4", 1612 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", 1613 - "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", 1614 - "cpu": [ 1615 - "x64" 1616 - ], 1617 - "dev": true, 1618 - "license": "MIT", 1619 - "optional": true, 1620 - "os": [ 1621 - "netbsd" 1622 - ], 1623 - "engines": { 1624 - "node": ">=18" 1625 - } 1626 - }, 1627 - "node_modules/@esbuild/openbsd-arm64": { 1628 - "version": "0.25.4", 1629 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", 1630 - "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", 1631 - "cpu": [ 1632 - "arm64" 1633 - ], 1634 - "dev": true, 1635 - "license": "MIT", 1636 - "optional": true, 1637 - "os": [ 1638 - "openbsd" 1639 - ], 1640 - "engines": { 1641 - "node": ">=18" 1642 - } 1643 - }, 1644 - "node_modules/@esbuild/openbsd-x64": { 1645 - "version": "0.25.4", 1646 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", 1647 - "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", 1648 - "cpu": [ 1649 - "x64" 1650 - ], 1651 - "dev": true, 1652 - "license": "MIT", 1653 - "optional": true, 1654 - "os": [ 1655 - "openbsd" 1656 - ], 1657 - "engines": { 1658 - "node": ">=18" 1659 - } 1660 - }, 1661 - "node_modules/@esbuild/sunos-x64": { 1662 - "version": "0.25.4", 1663 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", 1664 - "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", 1665 - "cpu": [ 1666 - "x64" 1667 - ], 1668 - "dev": true, 1669 - "license": "MIT", 1670 - "optional": true, 1671 - "os": [ 1672 - "sunos" 1673 - ], 1674 - "engines": { 1675 - "node": ">=18" 1676 - } 1677 - }, 1678 - "node_modules/@esbuild/win32-arm64": { 1679 - "version": "0.25.4", 1680 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", 1681 - "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", 1682 - "cpu": [ 1683 - "arm64" 1684 - ], 1685 - "dev": true, 1686 - "license": "MIT", 1687 - "optional": true, 1688 - "os": [ 1689 - "win32" 1690 - ], 1691 - "engines": { 1692 - "node": ">=18" 1693 - } 1694 - }, 1695 - "node_modules/@esbuild/win32-ia32": { 1696 - "version": "0.25.4", 1697 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", 1698 - "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", 1699 - "cpu": [ 1700 - "ia32" 1701 - ], 1702 - "dev": true, 1703 - "license": "MIT", 1704 - "optional": true, 1705 - "os": [ 1706 - "win32" 1707 - ], 1708 - "engines": { 1709 - "node": ">=18" 1710 - } 1711 - }, 1712 - "node_modules/@esbuild/win32-x64": { 1713 - "version": "0.25.4", 1714 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", 1715 - "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", 1716 - "cpu": [ 1717 - "x64" 1718 - ], 1719 - "dev": true, 1720 - "license": "MIT", 1721 - "optional": true, 1722 - "os": [ 1723 - "win32" 1724 - ], 1725 - "engines": { 1726 - "node": ">=18" 1727 - } 1728 - }, 1729 853 "node_modules/@eslint-community/eslint-utils": { 1730 854 "version": "4.7.0", 1731 855 "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", ··· 1884 1008 "tslib": "^2.8.0" 1885 1009 } 1886 1010 }, 1011 + "node_modules/@grpc/grpc-js": { 1012 + "version": "1.13.4", 1013 + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz", 1014 + "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==", 1015 + "license": "Apache-2.0", 1016 + "dependencies": { 1017 + "@grpc/proto-loader": "^0.7.13", 1018 + "@js-sdsl/ordered-map": "^4.4.2" 1019 + }, 1020 + "engines": { 1021 + "node": ">=12.10.0" 1022 + } 1023 + }, 1024 + "node_modules/@grpc/proto-loader": { 1025 + "version": "0.7.15", 1026 + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", 1027 + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", 1028 + "license": "Apache-2.0", 1029 + "dependencies": { 1030 + "lodash.camelcase": "^4.3.0", 1031 + "long": "^5.0.0", 1032 + "protobufjs": "^7.2.5", 1033 + "yargs": "^17.7.2" 1034 + }, 1035 + "bin": { 1036 + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" 1037 + }, 1038 + "engines": { 1039 + "node": ">=6" 1040 + } 1041 + }, 1887 1042 "node_modules/@hono/node-server": { 1888 1043 "version": "1.14.3", 1889 1044 "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.14.3.tgz", ··· 1929 1084 "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", 1930 1085 "dev": true 1931 1086 }, 1932 - "node_modules/@img/sharp-darwin-arm64": { 1933 - "version": "0.34.3", 1934 - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.3.tgz", 1935 - "integrity": "sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==", 1936 - "cpu": [ 1937 - "arm64" 1938 - ], 1939 - "license": "Apache-2.0", 1940 - "optional": true, 1941 - "os": [ 1942 - "darwin" 1943 - ], 1944 - "engines": { 1945 - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 1946 - }, 1947 - "funding": { 1948 - "url": "https://opencollective.com/libvips" 1949 - }, 1950 - "optionalDependencies": { 1951 - "@img/sharp-libvips-darwin-arm64": "1.2.0" 1952 - } 1953 - }, 1954 - "node_modules/@img/sharp-darwin-x64": { 1955 - "version": "0.34.3", 1956 - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.3.tgz", 1957 - "integrity": "sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==", 1958 - "cpu": [ 1959 - "x64" 1960 - ], 1961 - "license": "Apache-2.0", 1962 - "optional": true, 1963 - "os": [ 1964 - "darwin" 1965 - ], 1966 - "engines": { 1967 - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 1968 - }, 1969 - "funding": { 1970 - "url": "https://opencollective.com/libvips" 1971 - }, 1972 - "optionalDependencies": { 1973 - "@img/sharp-libvips-darwin-x64": "1.2.0" 1974 - } 1975 - }, 1976 - "node_modules/@img/sharp-libvips-darwin-arm64": { 1977 - "version": "1.2.0", 1978 - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.0.tgz", 1979 - "integrity": "sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==", 1980 - "cpu": [ 1981 - "arm64" 1982 - ], 1983 - "license": "LGPL-3.0-or-later", 1984 - "optional": true, 1985 - "os": [ 1986 - "darwin" 1987 - ], 1988 - "funding": { 1989 - "url": "https://opencollective.com/libvips" 1990 - } 1991 - }, 1992 - "node_modules/@img/sharp-libvips-darwin-x64": { 1993 - "version": "1.2.0", 1994 - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.0.tgz", 1995 - "integrity": "sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==", 1996 - "cpu": [ 1997 - "x64" 1998 - ], 1999 - "license": "LGPL-3.0-or-later", 2000 - "optional": true, 2001 - "os": [ 2002 - "darwin" 2003 - ], 2004 - "funding": { 2005 - "url": "https://opencollective.com/libvips" 2006 - } 2007 - }, 2008 - "node_modules/@img/sharp-libvips-linux-arm": { 2009 - "version": "1.2.0", 2010 - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.0.tgz", 2011 - "integrity": "sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==", 2012 - "cpu": [ 2013 - "arm" 2014 - ], 2015 - "license": "LGPL-3.0-or-later", 2016 - "optional": true, 2017 - "os": [ 2018 - "linux" 2019 - ], 2020 - "funding": { 2021 - "url": "https://opencollective.com/libvips" 2022 - } 2023 - }, 2024 - "node_modules/@img/sharp-libvips-linux-arm64": { 2025 - "version": "1.2.0", 2026 - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.0.tgz", 2027 - "integrity": "sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==", 2028 - "cpu": [ 2029 - "arm64" 2030 - ], 2031 - "license": "LGPL-3.0-or-later", 2032 - "optional": true, 2033 - "os": [ 2034 - "linux" 2035 - ], 2036 - "funding": { 2037 - "url": "https://opencollective.com/libvips" 2038 - } 2039 - }, 2040 - "node_modules/@img/sharp-libvips-linux-ppc64": { 2041 - "version": "1.2.0", 2042 - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.0.tgz", 2043 - "integrity": "sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==", 2044 - "cpu": [ 2045 - "ppc64" 2046 - ], 2047 - "license": "LGPL-3.0-or-later", 2048 - "optional": true, 2049 - "os": [ 2050 - "linux" 2051 - ], 2052 - "funding": { 2053 - "url": "https://opencollective.com/libvips" 2054 - } 2055 - }, 2056 - "node_modules/@img/sharp-libvips-linux-s390x": { 2057 - "version": "1.2.0", 2058 - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.0.tgz", 2059 - "integrity": "sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==", 2060 - "cpu": [ 2061 - "s390x" 2062 - ], 2063 - "license": "LGPL-3.0-or-later", 2064 - "optional": true, 2065 - "os": [ 2066 - "linux" 2067 - ], 2068 - "funding": { 2069 - "url": "https://opencollective.com/libvips" 2070 - } 2071 - }, 2072 1087 "node_modules/@img/sharp-libvips-linux-x64": { 2073 1088 "version": "1.2.0", 2074 1089 "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.0.tgz", ··· 2085 1100 "url": "https://opencollective.com/libvips" 2086 1101 } 2087 1102 }, 2088 - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { 2089 - "version": "1.2.0", 2090 - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.0.tgz", 2091 - "integrity": "sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==", 2092 - "cpu": [ 2093 - "arm64" 2094 - ], 2095 - "license": "LGPL-3.0-or-later", 2096 - "optional": true, 2097 - "os": [ 2098 - "linux" 2099 - ], 2100 - "funding": { 2101 - "url": "https://opencollective.com/libvips" 2102 - } 2103 - }, 2104 - "node_modules/@img/sharp-libvips-linuxmusl-x64": { 2105 - "version": "1.2.0", 2106 - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.0.tgz", 2107 - "integrity": "sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==", 2108 - "cpu": [ 2109 - "x64" 2110 - ], 2111 - "license": "LGPL-3.0-or-later", 2112 - "optional": true, 2113 - "os": [ 2114 - "linux" 2115 - ], 2116 - "funding": { 2117 - "url": "https://opencollective.com/libvips" 2118 - } 2119 - }, 2120 - "node_modules/@img/sharp-linux-arm": { 2121 - "version": "0.34.3", 2122 - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.3.tgz", 2123 - "integrity": "sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==", 2124 - "cpu": [ 2125 - "arm" 2126 - ], 2127 - "license": "Apache-2.0", 2128 - "optional": true, 2129 - "os": [ 2130 - "linux" 2131 - ], 2132 - "engines": { 2133 - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 2134 - }, 2135 - "funding": { 2136 - "url": "https://opencollective.com/libvips" 2137 - }, 2138 - "optionalDependencies": { 2139 - "@img/sharp-libvips-linux-arm": "1.2.0" 2140 - } 2141 - }, 2142 - "node_modules/@img/sharp-linux-arm64": { 2143 - "version": "0.34.3", 2144 - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.3.tgz", 2145 - "integrity": "sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==", 2146 - "cpu": [ 2147 - "arm64" 2148 - ], 2149 - "license": "Apache-2.0", 2150 - "optional": true, 2151 - "os": [ 2152 - "linux" 2153 - ], 2154 - "engines": { 2155 - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 2156 - }, 2157 - "funding": { 2158 - "url": "https://opencollective.com/libvips" 2159 - }, 2160 - "optionalDependencies": { 2161 - "@img/sharp-libvips-linux-arm64": "1.2.0" 2162 - } 2163 - }, 2164 - "node_modules/@img/sharp-linux-ppc64": { 2165 - "version": "0.34.3", 2166 - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.3.tgz", 2167 - "integrity": "sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==", 2168 - "cpu": [ 2169 - "ppc64" 2170 - ], 2171 - "license": "Apache-2.0", 2172 - "optional": true, 2173 - "os": [ 2174 - "linux" 2175 - ], 2176 - "engines": { 2177 - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 2178 - }, 2179 - "funding": { 2180 - "url": "https://opencollective.com/libvips" 2181 - }, 2182 - "optionalDependencies": { 2183 - "@img/sharp-libvips-linux-ppc64": "1.2.0" 2184 - } 2185 - }, 2186 - "node_modules/@img/sharp-linux-s390x": { 2187 - "version": "0.34.3", 2188 - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.3.tgz", 2189 - "integrity": "sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==", 2190 - "cpu": [ 2191 - "s390x" 2192 - ], 2193 - "license": "Apache-2.0", 2194 - "optional": true, 2195 - "os": [ 2196 - "linux" 2197 - ], 2198 - "engines": { 2199 - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 2200 - }, 2201 - "funding": { 2202 - "url": "https://opencollective.com/libvips" 2203 - }, 2204 - "optionalDependencies": { 2205 - "@img/sharp-libvips-linux-s390x": "1.2.0" 2206 - } 2207 - }, 2208 1103 "node_modules/@img/sharp-linux-x64": { 2209 1104 "version": "0.34.3", 2210 1105 "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.3.tgz", ··· 2227 1122 "@img/sharp-libvips-linux-x64": "1.2.0" 2228 1123 } 2229 1124 }, 2230 - "node_modules/@img/sharp-linuxmusl-arm64": { 2231 - "version": "0.34.3", 2232 - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.3.tgz", 2233 - "integrity": "sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==", 2234 - "cpu": [ 2235 - "arm64" 2236 - ], 2237 - "license": "Apache-2.0", 2238 - "optional": true, 2239 - "os": [ 2240 - "linux" 2241 - ], 2242 - "engines": { 2243 - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 2244 - }, 2245 - "funding": { 2246 - "url": "https://opencollective.com/libvips" 2247 - }, 2248 - "optionalDependencies": { 2249 - "@img/sharp-libvips-linuxmusl-arm64": "1.2.0" 2250 - } 2251 - }, 2252 - "node_modules/@img/sharp-linuxmusl-x64": { 2253 - "version": "0.34.3", 2254 - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.3.tgz", 2255 - "integrity": "sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==", 2256 - "cpu": [ 2257 - "x64" 2258 - ], 1125 + "node_modules/@inngest/ai": { 1126 + "version": "0.1.5", 1127 + "resolved": "https://registry.npmjs.org/@inngest/ai/-/ai-0.1.5.tgz", 1128 + "integrity": "sha512-Nj+Ee/O3EYmPIw+2eGryRh+b2TcqaZyL52RaO1/Cz707R/HrJVVDx8uRQo93gSeN4lMlaOluNrdleyM5M5wcQA==", 2259 1129 "license": "Apache-2.0", 2260 - "optional": true, 2261 - "os": [ 2262 - "linux" 2263 - ], 2264 - "engines": { 2265 - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 2266 - }, 2267 - "funding": { 2268 - "url": "https://opencollective.com/libvips" 2269 - }, 2270 - "optionalDependencies": { 2271 - "@img/sharp-libvips-linuxmusl-x64": "1.2.0" 2272 - } 2273 - }, 2274 - "node_modules/@img/sharp-wasm32": { 2275 - "version": "0.34.3", 2276 - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.3.tgz", 2277 - "integrity": "sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==", 2278 - "cpu": [ 2279 - "wasm32" 2280 - ], 2281 - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", 2282 - "optional": true, 2283 1130 "dependencies": { 2284 - "@emnapi/runtime": "^1.4.4" 2285 - }, 2286 - "engines": { 2287 - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 2288 - }, 2289 - "funding": { 2290 - "url": "https://opencollective.com/libvips" 2291 - } 2292 - }, 2293 - "node_modules/@img/sharp-win32-arm64": { 2294 - "version": "0.34.3", 2295 - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.3.tgz", 2296 - "integrity": "sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==", 2297 - "cpu": [ 2298 - "arm64" 2299 - ], 2300 - "license": "Apache-2.0 AND LGPL-3.0-or-later", 2301 - "optional": true, 2302 - "os": [ 2303 - "win32" 2304 - ], 2305 - "engines": { 2306 - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 2307 - }, 2308 - "funding": { 2309 - "url": "https://opencollective.com/libvips" 2310 - } 2311 - }, 2312 - "node_modules/@img/sharp-win32-ia32": { 2313 - "version": "0.34.3", 2314 - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.3.tgz", 2315 - "integrity": "sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==", 2316 - "cpu": [ 2317 - "ia32" 2318 - ], 2319 - "license": "Apache-2.0 AND LGPL-3.0-or-later", 2320 - "optional": true, 2321 - "os": [ 2322 - "win32" 2323 - ], 2324 - "engines": { 2325 - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 2326 - }, 2327 - "funding": { 2328 - "url": "https://opencollective.com/libvips" 2329 - } 2330 - }, 2331 - "node_modules/@img/sharp-win32-x64": { 2332 - "version": "0.34.3", 2333 - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.3.tgz", 2334 - "integrity": "sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==", 2335 - "cpu": [ 2336 - "x64" 2337 - ], 2338 - "license": "Apache-2.0 AND LGPL-3.0-or-later", 2339 - "optional": true, 2340 - "os": [ 2341 - "win32" 2342 - ], 2343 - "engines": { 2344 - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 2345 - }, 2346 - "funding": { 2347 - "url": "https://opencollective.com/libvips" 1131 + "@types/node": "^22.10.5", 1132 + "typescript": "^5.7.3" 2348 1133 } 2349 1134 }, 2350 1135 "node_modules/@internationalized/date": { ··· 2508 1293 "node": ">=18.0.0" 2509 1294 } 2510 1295 }, 1296 + "node_modules/@jpwilliams/waitgroup": { 1297 + "version": "2.1.1", 1298 + "resolved": "https://registry.npmjs.org/@jpwilliams/waitgroup/-/waitgroup-2.1.1.tgz", 1299 + "integrity": "sha512-0CxRhNfkvFCTLZBKGvKxY2FYtYW1yWhO2McLqBL0X5UWvYjIf9suH8anKW/DNutl369A75Ewyoh2iJMwBZ2tRg==", 1300 + "license": "MIT" 1301 + }, 2511 1302 "node_modules/@jridgewell/gen-mapping": { 2512 1303 "version": "0.3.5", 2513 1304 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", ··· 2554 1345 "dependencies": { 2555 1346 "@jridgewell/resolve-uri": "^3.1.0", 2556 1347 "@jridgewell/sourcemap-codec": "^1.4.14" 1348 + } 1349 + }, 1350 + "node_modules/@js-sdsl/ordered-map": { 1351 + "version": "4.4.2", 1352 + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", 1353 + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", 1354 + "license": "MIT", 1355 + "funding": { 1356 + "type": "opencollective", 1357 + "url": "https://opencollective.com/js-sdsl" 2557 1358 } 2558 1359 }, 2559 1360 "node_modules/@mdx-js/loader": { ··· 2736 1537 "node": ">= 8" 2737 1538 } 2738 1539 }, 2739 - "node_modules/@next/swc-darwin-arm64": { 2740 - "version": "15.4.3", 2741 - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.4.3.tgz", 2742 - "integrity": "sha512-YAhZWKeEYY7LHQJiQ8fe3Y6ymfcDcTn7rDC8PDu/pdeIl1Z2LHD4uyPNuQUGCEQT//MSNv6oZCeQzZfTCKZv+A==", 2743 - "cpu": [ 2744 - "arm64" 2745 - ], 2746 - "license": "MIT", 2747 - "optional": true, 2748 - "os": [ 2749 - "darwin" 2750 - ], 2751 - "engines": { 2752 - "node": ">= 10" 2753 - } 2754 - }, 2755 - "node_modules/@next/swc-darwin-x64": { 2756 - "version": "15.4.3", 2757 - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.4.3.tgz", 2758 - "integrity": "sha512-ZPHRdd51xaxCMpT4viQ6h8TgYM1zPW1JIeksPY9wKlyvBVUQqrWqw8kEh1sa7/x0Ied+U7pYHkAkutrUwxbMcg==", 2759 - "cpu": [ 2760 - "x64" 2761 - ], 2762 - "license": "MIT", 2763 - "optional": true, 2764 - "os": [ 2765 - "darwin" 2766 - ], 2767 - "engines": { 2768 - "node": ">= 10" 2769 - } 2770 - }, 2771 - "node_modules/@next/swc-linux-arm64-gnu": { 2772 - "version": "15.4.3", 2773 - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.4.3.tgz", 2774 - "integrity": "sha512-QUdqftCXC5vw5cowucqi9FeOPQ0vdMxoOHLY0J5jPdercwSJFjdi9CkEO4Xkq1eG4t1TB/BG81n6rmTsWoILnw==", 2775 - "cpu": [ 2776 - "arm64" 2777 - ], 2778 - "license": "MIT", 2779 - "optional": true, 2780 - "os": [ 2781 - "linux" 2782 - ], 2783 - "engines": { 2784 - "node": ">= 10" 2785 - } 2786 - }, 2787 - "node_modules/@next/swc-linux-arm64-musl": { 2788 - "version": "15.4.3", 2789 - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.4.3.tgz", 2790 - "integrity": "sha512-HTL31NsmoafX+r5g91Yj3+q34nrn1xKmCWVuNA+fUWO4X0pr+n83uGzLyEOn0kUqbMZ40KmWx+4wsbMoUChkiQ==", 2791 - "cpu": [ 2792 - "arm64" 2793 - ], 2794 - "license": "MIT", 2795 - "optional": true, 2796 - "os": [ 2797 - "linux" 2798 - ], 2799 - "engines": { 2800 - "node": ">= 10" 2801 - } 2802 - }, 2803 1540 "node_modules/@next/swc-linux-x64-gnu": { 2804 1541 "version": "15.4.3", 2805 1542 "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.4.3.tgz", ··· 2816 1553 "node": ">= 10" 2817 1554 } 2818 1555 }, 2819 - "node_modules/@next/swc-linux-x64-musl": { 2820 - "version": "15.4.3", 2821 - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.4.3.tgz", 2822 - "integrity": "sha512-NyXUx6G7AayaRGUsVPenuwhyAoyxjQuQPaK50AXoaAHPwRuif4WmSrXUs8/Y0HJIZh8E/YXRm9H7uuGfiacpuQ==", 2823 - "cpu": [ 2824 - "x64" 2825 - ], 2826 - "license": "MIT", 2827 - "optional": true, 2828 - "os": [ 2829 - "linux" 2830 - ], 2831 - "engines": { 2832 - "node": ">= 10" 2833 - } 2834 - }, 2835 - "node_modules/@next/swc-win32-arm64-msvc": { 2836 - "version": "15.4.3", 2837 - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.4.3.tgz", 2838 - "integrity": "sha512-2CUTmpzN/7cL1a7GjdLkDFlfH3nwMwW8a6JiaAUsL9MtKmNNO3fnXqnY0Zk30fii3hVEl4dr7ztrpYt0t2CcGQ==", 2839 - "cpu": [ 2840 - "arm64" 2841 - ], 2842 - "license": "MIT", 2843 - "optional": true, 2844 - "os": [ 2845 - "win32" 2846 - ], 2847 - "engines": { 2848 - "node": ">= 10" 2849 - } 2850 - }, 2851 - "node_modules/@next/swc-win32-x64-msvc": { 2852 - "version": "15.4.3", 2853 - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.4.3.tgz", 2854 - "integrity": "sha512-i54YgUhvrUQxQD84SjAbkfWhYkOdm/DNRAVekCHLWxVg3aUbyC6NFQn9TwgCkX5QAS2pXCJo3kFboSFvrsd7dA==", 2855 - "cpu": [ 2856 - "x64" 2857 - ], 2858 - "license": "MIT", 2859 - "optional": true, 2860 - "os": [ 2861 - "win32" 2862 - ], 2863 - "engines": { 2864 - "node": ">= 10" 2865 - } 2866 - }, 2867 1556 "node_modules/@noble/curves": { 2868 1557 "version": "1.8.1", 2869 1558 "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", ··· 2927 1616 } 2928 1617 }, 2929 1618 "node_modules/@opentelemetry/api": { 2930 - "version": "1.8.0", 2931 - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz", 2932 - "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==", 2933 - "optional": true, 2934 - "peer": true, 1619 + "version": "1.9.0", 1620 + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", 1621 + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", 1622 + "license": "Apache-2.0", 2935 1623 "engines": { 2936 1624 "node": ">=8.0.0" 2937 1625 } 2938 1626 }, 1627 + "node_modules/@opentelemetry/api-logs": { 1628 + "version": "0.57.2", 1629 + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.57.2.tgz", 1630 + "integrity": "sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==", 1631 + "license": "Apache-2.0", 1632 + "dependencies": { 1633 + "@opentelemetry/api": "^1.3.0" 1634 + }, 1635 + "engines": { 1636 + "node": ">=14" 1637 + } 1638 + }, 1639 + "node_modules/@opentelemetry/auto-instrumentations-node": { 1640 + "version": "0.56.1", 1641 + "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.56.1.tgz", 1642 + "integrity": "sha512-4cK0+unfkXRRbQQg2r9K3ki8JlE0j9Iw8+4DZEkChShAnmviiE+/JMgHGvK+VVcLrSlgV6BBHv4+ZTLukQwhkA==", 1643 + "license": "Apache-2.0", 1644 + "dependencies": { 1645 + "@opentelemetry/instrumentation": "^0.57.1", 1646 + "@opentelemetry/instrumentation-amqplib": "^0.46.1", 1647 + "@opentelemetry/instrumentation-aws-lambda": "^0.50.3", 1648 + "@opentelemetry/instrumentation-aws-sdk": "^0.49.1", 1649 + "@opentelemetry/instrumentation-bunyan": "^0.45.1", 1650 + "@opentelemetry/instrumentation-cassandra-driver": "^0.45.1", 1651 + "@opentelemetry/instrumentation-connect": "^0.43.1", 1652 + "@opentelemetry/instrumentation-cucumber": "^0.14.1", 1653 + "@opentelemetry/instrumentation-dataloader": "^0.16.1", 1654 + "@opentelemetry/instrumentation-dns": "^0.43.1", 1655 + "@opentelemetry/instrumentation-express": "^0.47.1", 1656 + "@opentelemetry/instrumentation-fastify": "^0.44.2", 1657 + "@opentelemetry/instrumentation-fs": "^0.19.1", 1658 + "@opentelemetry/instrumentation-generic-pool": "^0.43.1", 1659 + "@opentelemetry/instrumentation-graphql": "^0.47.1", 1660 + "@opentelemetry/instrumentation-grpc": "^0.57.1", 1661 + "@opentelemetry/instrumentation-hapi": "^0.45.2", 1662 + "@opentelemetry/instrumentation-http": "^0.57.1", 1663 + "@opentelemetry/instrumentation-ioredis": "^0.47.1", 1664 + "@opentelemetry/instrumentation-kafkajs": "^0.7.1", 1665 + "@opentelemetry/instrumentation-knex": "^0.44.1", 1666 + "@opentelemetry/instrumentation-koa": "^0.47.1", 1667 + "@opentelemetry/instrumentation-lru-memoizer": "^0.44.1", 1668 + "@opentelemetry/instrumentation-memcached": "^0.43.1", 1669 + "@opentelemetry/instrumentation-mongodb": "^0.52.0", 1670 + "@opentelemetry/instrumentation-mongoose": "^0.46.1", 1671 + "@opentelemetry/instrumentation-mysql": "^0.45.1", 1672 + "@opentelemetry/instrumentation-mysql2": "^0.45.2", 1673 + "@opentelemetry/instrumentation-nestjs-core": "^0.44.1", 1674 + "@opentelemetry/instrumentation-net": "^0.43.1", 1675 + "@opentelemetry/instrumentation-pg": "^0.51.1", 1676 + "@opentelemetry/instrumentation-pino": "^0.46.1", 1677 + "@opentelemetry/instrumentation-redis": "^0.46.1", 1678 + "@opentelemetry/instrumentation-redis-4": "^0.46.1", 1679 + "@opentelemetry/instrumentation-restify": "^0.45.1", 1680 + "@opentelemetry/instrumentation-router": "^0.44.1", 1681 + "@opentelemetry/instrumentation-socket.io": "^0.46.1", 1682 + "@opentelemetry/instrumentation-tedious": "^0.18.1", 1683 + "@opentelemetry/instrumentation-undici": "^0.10.1", 1684 + "@opentelemetry/instrumentation-winston": "^0.44.1", 1685 + "@opentelemetry/resource-detector-alibaba-cloud": "^0.30.1", 1686 + "@opentelemetry/resource-detector-aws": "^1.12.0", 1687 + "@opentelemetry/resource-detector-azure": "^0.6.1", 1688 + "@opentelemetry/resource-detector-container": "^0.6.1", 1689 + "@opentelemetry/resource-detector-gcp": "^0.33.1", 1690 + "@opentelemetry/resources": "^1.24.0", 1691 + "@opentelemetry/sdk-node": "^0.57.1" 1692 + }, 1693 + "engines": { 1694 + "node": ">=14" 1695 + }, 1696 + "peerDependencies": { 1697 + "@opentelemetry/api": "^1.4.1" 1698 + } 1699 + }, 1700 + "node_modules/@opentelemetry/context-async-hooks": { 1701 + "version": "1.30.1", 1702 + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz", 1703 + "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", 1704 + "license": "Apache-2.0", 1705 + "engines": { 1706 + "node": ">=14" 1707 + }, 1708 + "peerDependencies": { 1709 + "@opentelemetry/api": ">=1.0.0 <1.10.0" 1710 + } 1711 + }, 1712 + "node_modules/@opentelemetry/core": { 1713 + "version": "1.30.1", 1714 + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", 1715 + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", 1716 + "license": "Apache-2.0", 1717 + "dependencies": { 1718 + "@opentelemetry/semantic-conventions": "1.28.0" 1719 + }, 1720 + "engines": { 1721 + "node": ">=14" 1722 + }, 1723 + "peerDependencies": { 1724 + "@opentelemetry/api": ">=1.0.0 <1.10.0" 1725 + } 1726 + }, 1727 + "node_modules/@opentelemetry/exporter-logs-otlp-grpc": { 1728 + "version": "0.57.2", 1729 + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.57.2.tgz", 1730 + "integrity": "sha512-eovEy10n3umjKJl2Ey6TLzikPE+W4cUQ4gCwgGP1RqzTGtgDra0WjIqdy29ohiUKfvmbiL3MndZww58xfIvyFw==", 1731 + "license": "Apache-2.0", 1732 + "dependencies": { 1733 + "@grpc/grpc-js": "^1.7.1", 1734 + "@opentelemetry/core": "1.30.1", 1735 + "@opentelemetry/otlp-exporter-base": "0.57.2", 1736 + "@opentelemetry/otlp-grpc-exporter-base": "0.57.2", 1737 + "@opentelemetry/otlp-transformer": "0.57.2", 1738 + "@opentelemetry/sdk-logs": "0.57.2" 1739 + }, 1740 + "engines": { 1741 + "node": ">=14" 1742 + }, 1743 + "peerDependencies": { 1744 + "@opentelemetry/api": "^1.3.0" 1745 + } 1746 + }, 1747 + "node_modules/@opentelemetry/exporter-logs-otlp-http": { 1748 + "version": "0.57.2", 1749 + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.57.2.tgz", 1750 + "integrity": "sha512-0rygmvLcehBRp56NQVLSleJ5ITTduq/QfU7obOkyWgPpFHulwpw2LYTqNIz5TczKZuy5YY+5D3SDnXZL1tXImg==", 1751 + "license": "Apache-2.0", 1752 + "dependencies": { 1753 + "@opentelemetry/api-logs": "0.57.2", 1754 + "@opentelemetry/core": "1.30.1", 1755 + "@opentelemetry/otlp-exporter-base": "0.57.2", 1756 + "@opentelemetry/otlp-transformer": "0.57.2", 1757 + "@opentelemetry/sdk-logs": "0.57.2" 1758 + }, 1759 + "engines": { 1760 + "node": ">=14" 1761 + }, 1762 + "peerDependencies": { 1763 + "@opentelemetry/api": "^1.3.0" 1764 + } 1765 + }, 1766 + "node_modules/@opentelemetry/exporter-logs-otlp-proto": { 1767 + "version": "0.57.2", 1768 + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.57.2.tgz", 1769 + "integrity": "sha512-ta0ithCin0F8lu9eOf4lEz9YAScecezCHkMMyDkvd9S7AnZNX5ikUmC5EQOQADU+oCcgo/qkQIaKcZvQ0TYKDw==", 1770 + "license": "Apache-2.0", 1771 + "dependencies": { 1772 + "@opentelemetry/api-logs": "0.57.2", 1773 + "@opentelemetry/core": "1.30.1", 1774 + "@opentelemetry/otlp-exporter-base": "0.57.2", 1775 + "@opentelemetry/otlp-transformer": "0.57.2", 1776 + "@opentelemetry/resources": "1.30.1", 1777 + "@opentelemetry/sdk-logs": "0.57.2", 1778 + "@opentelemetry/sdk-trace-base": "1.30.1" 1779 + }, 1780 + "engines": { 1781 + "node": ">=14" 1782 + }, 1783 + "peerDependencies": { 1784 + "@opentelemetry/api": "^1.3.0" 1785 + } 1786 + }, 1787 + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { 1788 + "version": "0.57.2", 1789 + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.57.2.tgz", 1790 + "integrity": "sha512-r70B8yKR41F0EC443b5CGB4rUaOMm99I5N75QQt6sHKxYDzSEc6gm48Diz1CI1biwa5tDPznpylTrywO/pT7qw==", 1791 + "license": "Apache-2.0", 1792 + "dependencies": { 1793 + "@grpc/grpc-js": "^1.7.1", 1794 + "@opentelemetry/core": "1.30.1", 1795 + "@opentelemetry/exporter-metrics-otlp-http": "0.57.2", 1796 + "@opentelemetry/otlp-exporter-base": "0.57.2", 1797 + "@opentelemetry/otlp-grpc-exporter-base": "0.57.2", 1798 + "@opentelemetry/otlp-transformer": "0.57.2", 1799 + "@opentelemetry/resources": "1.30.1", 1800 + "@opentelemetry/sdk-metrics": "1.30.1" 1801 + }, 1802 + "engines": { 1803 + "node": ">=14" 1804 + }, 1805 + "peerDependencies": { 1806 + "@opentelemetry/api": "^1.3.0" 1807 + } 1808 + }, 1809 + "node_modules/@opentelemetry/exporter-metrics-otlp-http": { 1810 + "version": "0.57.2", 1811 + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.57.2.tgz", 1812 + "integrity": "sha512-ttb9+4iKw04IMubjm3t0EZsYRNWr3kg44uUuzfo9CaccYlOh8cDooe4QObDUkvx9d5qQUrbEckhrWKfJnKhemA==", 1813 + "license": "Apache-2.0", 1814 + "dependencies": { 1815 + "@opentelemetry/core": "1.30.1", 1816 + "@opentelemetry/otlp-exporter-base": "0.57.2", 1817 + "@opentelemetry/otlp-transformer": "0.57.2", 1818 + "@opentelemetry/resources": "1.30.1", 1819 + "@opentelemetry/sdk-metrics": "1.30.1" 1820 + }, 1821 + "engines": { 1822 + "node": ">=14" 1823 + }, 1824 + "peerDependencies": { 1825 + "@opentelemetry/api": "^1.3.0" 1826 + } 1827 + }, 1828 + "node_modules/@opentelemetry/exporter-metrics-otlp-proto": { 1829 + "version": "0.57.2", 1830 + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.57.2.tgz", 1831 + "integrity": "sha512-HX068Q2eNs38uf7RIkNN9Hl4Ynl+3lP0++KELkXMCpsCbFO03+0XNNZ1SkwxPlP9jrhQahsMPMkzNXpq3fKsnw==", 1832 + "license": "Apache-2.0", 1833 + "dependencies": { 1834 + "@opentelemetry/core": "1.30.1", 1835 + "@opentelemetry/exporter-metrics-otlp-http": "0.57.2", 1836 + "@opentelemetry/otlp-exporter-base": "0.57.2", 1837 + "@opentelemetry/otlp-transformer": "0.57.2", 1838 + "@opentelemetry/resources": "1.30.1", 1839 + "@opentelemetry/sdk-metrics": "1.30.1" 1840 + }, 1841 + "engines": { 1842 + "node": ">=14" 1843 + }, 1844 + "peerDependencies": { 1845 + "@opentelemetry/api": "^1.3.0" 1846 + } 1847 + }, 1848 + "node_modules/@opentelemetry/exporter-prometheus": { 1849 + "version": "0.57.2", 1850 + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.57.2.tgz", 1851 + "integrity": "sha512-VqIqXnuxWMWE/1NatAGtB1PvsQipwxDcdG4RwA/umdBcW3/iOHp0uejvFHTRN2O78ZPged87ErJajyUBPUhlDQ==", 1852 + "license": "Apache-2.0", 1853 + "dependencies": { 1854 + "@opentelemetry/core": "1.30.1", 1855 + "@opentelemetry/resources": "1.30.1", 1856 + "@opentelemetry/sdk-metrics": "1.30.1" 1857 + }, 1858 + "engines": { 1859 + "node": ">=14" 1860 + }, 1861 + "peerDependencies": { 1862 + "@opentelemetry/api": "^1.3.0" 1863 + } 1864 + }, 1865 + "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { 1866 + "version": "0.57.2", 1867 + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.57.2.tgz", 1868 + "integrity": "sha512-gHU1vA3JnHbNxEXg5iysqCWxN9j83d7/epTYBZflqQnTyCC4N7yZXn/dMM+bEmyhQPGjhCkNZLx4vZuChH1PYw==", 1869 + "license": "Apache-2.0", 1870 + "dependencies": { 1871 + "@grpc/grpc-js": "^1.7.1", 1872 + "@opentelemetry/core": "1.30.1", 1873 + "@opentelemetry/otlp-exporter-base": "0.57.2", 1874 + "@opentelemetry/otlp-grpc-exporter-base": "0.57.2", 1875 + "@opentelemetry/otlp-transformer": "0.57.2", 1876 + "@opentelemetry/resources": "1.30.1", 1877 + "@opentelemetry/sdk-trace-base": "1.30.1" 1878 + }, 1879 + "engines": { 1880 + "node": ">=14" 1881 + }, 1882 + "peerDependencies": { 1883 + "@opentelemetry/api": "^1.3.0" 1884 + } 1885 + }, 1886 + "node_modules/@opentelemetry/exporter-trace-otlp-http": { 1887 + "version": "0.57.2", 1888 + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.57.2.tgz", 1889 + "integrity": "sha512-sB/gkSYFu+0w2dVQ0PWY9fAMl172PKMZ/JrHkkW8dmjCL0CYkmXeE+ssqIL/yBUTPOvpLIpenX5T9RwXRBW/3g==", 1890 + "license": "Apache-2.0", 1891 + "dependencies": { 1892 + "@opentelemetry/core": "1.30.1", 1893 + "@opentelemetry/otlp-exporter-base": "0.57.2", 1894 + "@opentelemetry/otlp-transformer": "0.57.2", 1895 + "@opentelemetry/resources": "1.30.1", 1896 + "@opentelemetry/sdk-trace-base": "1.30.1" 1897 + }, 1898 + "engines": { 1899 + "node": ">=14" 1900 + }, 1901 + "peerDependencies": { 1902 + "@opentelemetry/api": "^1.3.0" 1903 + } 1904 + }, 1905 + "node_modules/@opentelemetry/exporter-trace-otlp-proto": { 1906 + "version": "0.57.2", 1907 + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.57.2.tgz", 1908 + "integrity": "sha512-awDdNRMIwDvUtoRYxRhja5QYH6+McBLtoz1q9BeEsskhZcrGmH/V1fWpGx8n+Rc+542e8pJA6y+aullbIzQmlw==", 1909 + "license": "Apache-2.0", 1910 + "dependencies": { 1911 + "@opentelemetry/core": "1.30.1", 1912 + "@opentelemetry/otlp-exporter-base": "0.57.2", 1913 + "@opentelemetry/otlp-transformer": "0.57.2", 1914 + "@opentelemetry/resources": "1.30.1", 1915 + "@opentelemetry/sdk-trace-base": "1.30.1" 1916 + }, 1917 + "engines": { 1918 + "node": ">=14" 1919 + }, 1920 + "peerDependencies": { 1921 + "@opentelemetry/api": "^1.3.0" 1922 + } 1923 + }, 1924 + "node_modules/@opentelemetry/exporter-zipkin": { 1925 + "version": "1.30.1", 1926 + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.30.1.tgz", 1927 + "integrity": "sha512-6S2QIMJahIquvFaaxmcwpvQQRD/YFaMTNoIxrfPIPOeITN+a8lfEcPDxNxn8JDAaxkg+4EnXhz8upVDYenoQjA==", 1928 + "license": "Apache-2.0", 1929 + "dependencies": { 1930 + "@opentelemetry/core": "1.30.1", 1931 + "@opentelemetry/resources": "1.30.1", 1932 + "@opentelemetry/sdk-trace-base": "1.30.1", 1933 + "@opentelemetry/semantic-conventions": "1.28.0" 1934 + }, 1935 + "engines": { 1936 + "node": ">=14" 1937 + }, 1938 + "peerDependencies": { 1939 + "@opentelemetry/api": "^1.0.0" 1940 + } 1941 + }, 1942 + "node_modules/@opentelemetry/instrumentation": { 1943 + "version": "0.57.2", 1944 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz", 1945 + "integrity": "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==", 1946 + "license": "Apache-2.0", 1947 + "dependencies": { 1948 + "@opentelemetry/api-logs": "0.57.2", 1949 + "@types/shimmer": "^1.2.0", 1950 + "import-in-the-middle": "^1.8.1", 1951 + "require-in-the-middle": "^7.1.1", 1952 + "semver": "^7.5.2", 1953 + "shimmer": "^1.2.1" 1954 + }, 1955 + "engines": { 1956 + "node": ">=14" 1957 + }, 1958 + "peerDependencies": { 1959 + "@opentelemetry/api": "^1.3.0" 1960 + } 1961 + }, 1962 + "node_modules/@opentelemetry/instrumentation-amqplib": { 1963 + "version": "0.46.1", 1964 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.46.1.tgz", 1965 + "integrity": "sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==", 1966 + "license": "Apache-2.0", 1967 + "dependencies": { 1968 + "@opentelemetry/core": "^1.8.0", 1969 + "@opentelemetry/instrumentation": "^0.57.1", 1970 + "@opentelemetry/semantic-conventions": "^1.27.0" 1971 + }, 1972 + "engines": { 1973 + "node": ">=14" 1974 + }, 1975 + "peerDependencies": { 1976 + "@opentelemetry/api": "^1.3.0" 1977 + } 1978 + }, 1979 + "node_modules/@opentelemetry/instrumentation-aws-lambda": { 1980 + "version": "0.50.3", 1981 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.50.3.tgz", 1982 + "integrity": "sha512-kotm/mRvSWUauudxcylc5YCDei+G/r+jnOH6q5S99aPLQ/Ms8D2yonMIxEJUILIPlthEmwLYxkw3ualWzMjm/A==", 1983 + "license": "Apache-2.0", 1984 + "dependencies": { 1985 + "@opentelemetry/instrumentation": "^0.57.1", 1986 + "@opentelemetry/semantic-conventions": "^1.27.0", 1987 + "@types/aws-lambda": "8.10.147" 1988 + }, 1989 + "engines": { 1990 + "node": ">=14" 1991 + }, 1992 + "peerDependencies": { 1993 + "@opentelemetry/api": "^1.3.0" 1994 + } 1995 + }, 1996 + "node_modules/@opentelemetry/instrumentation-aws-sdk": { 1997 + "version": "0.49.1", 1998 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.49.1.tgz", 1999 + "integrity": "sha512-Vbj4BYeV/1K4Pbbfk+gQ8gwYL0w+tBeUwG88cOxnF7CLPO1XnskGV8Q3Gzut2Ah/6Dg17dBtlzEqL3UiFP2Z6A==", 2000 + "license": "Apache-2.0", 2001 + "dependencies": { 2002 + "@opentelemetry/core": "^1.8.0", 2003 + "@opentelemetry/instrumentation": "^0.57.1", 2004 + "@opentelemetry/propagation-utils": "^0.30.16", 2005 + "@opentelemetry/semantic-conventions": "^1.27.0" 2006 + }, 2007 + "engines": { 2008 + "node": ">=14" 2009 + }, 2010 + "peerDependencies": { 2011 + "@opentelemetry/api": "^1.3.0" 2012 + } 2013 + }, 2014 + "node_modules/@opentelemetry/instrumentation-bunyan": { 2015 + "version": "0.45.1", 2016 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.45.1.tgz", 2017 + "integrity": "sha512-T9POV9ccS41UjpsjLrJ4i0m8LfplBiN3dMeH9XZ2btiDrjoaWtDrst6tNb1avetBjkeshOuBp1EWKP22EVSr0g==", 2018 + "license": "Apache-2.0", 2019 + "dependencies": { 2020 + "@opentelemetry/api-logs": "^0.57.1", 2021 + "@opentelemetry/instrumentation": "^0.57.1", 2022 + "@types/bunyan": "1.8.11" 2023 + }, 2024 + "engines": { 2025 + "node": ">=14" 2026 + }, 2027 + "peerDependencies": { 2028 + "@opentelemetry/api": "^1.3.0" 2029 + } 2030 + }, 2031 + "node_modules/@opentelemetry/instrumentation-cassandra-driver": { 2032 + "version": "0.45.1", 2033 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.45.1.tgz", 2034 + "integrity": "sha512-RqnP0rK2hcKK1AKcmYvedLiL6G5TvFGiSUt2vI9wN0cCBdTt9Y9+wxxY19KoGxq7e9T/aHow6P5SUhCVI1sHvQ==", 2035 + "license": "Apache-2.0", 2036 + "dependencies": { 2037 + "@opentelemetry/instrumentation": "^0.57.1", 2038 + "@opentelemetry/semantic-conventions": "^1.27.0" 2039 + }, 2040 + "engines": { 2041 + "node": ">=14" 2042 + }, 2043 + "peerDependencies": { 2044 + "@opentelemetry/api": "^1.3.0" 2045 + } 2046 + }, 2047 + "node_modules/@opentelemetry/instrumentation-connect": { 2048 + "version": "0.43.1", 2049 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.43.1.tgz", 2050 + "integrity": "sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==", 2051 + "license": "Apache-2.0", 2052 + "dependencies": { 2053 + "@opentelemetry/core": "^1.8.0", 2054 + "@opentelemetry/instrumentation": "^0.57.1", 2055 + "@opentelemetry/semantic-conventions": "^1.27.0", 2056 + "@types/connect": "3.4.38" 2057 + }, 2058 + "engines": { 2059 + "node": ">=14" 2060 + }, 2061 + "peerDependencies": { 2062 + "@opentelemetry/api": "^1.3.0" 2063 + } 2064 + }, 2065 + "node_modules/@opentelemetry/instrumentation-cucumber": { 2066 + "version": "0.14.1", 2067 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.14.1.tgz", 2068 + "integrity": "sha512-ybO+tmH85pDO0ywTskmrMtZcccKyQr7Eb7wHy1keR2HFfx46SzZbjHo1AuGAX//Hook3gjM7+w211gJ2bwKe1Q==", 2069 + "license": "Apache-2.0", 2070 + "dependencies": { 2071 + "@opentelemetry/instrumentation": "^0.57.1", 2072 + "@opentelemetry/semantic-conventions": "^1.27.0" 2073 + }, 2074 + "engines": { 2075 + "node": ">=14" 2076 + }, 2077 + "peerDependencies": { 2078 + "@opentelemetry/api": "^1.0.0" 2079 + } 2080 + }, 2081 + "node_modules/@opentelemetry/instrumentation-dataloader": { 2082 + "version": "0.16.1", 2083 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.16.1.tgz", 2084 + "integrity": "sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==", 2085 + "license": "Apache-2.0", 2086 + "dependencies": { 2087 + "@opentelemetry/instrumentation": "^0.57.1" 2088 + }, 2089 + "engines": { 2090 + "node": ">=14" 2091 + }, 2092 + "peerDependencies": { 2093 + "@opentelemetry/api": "^1.3.0" 2094 + } 2095 + }, 2096 + "node_modules/@opentelemetry/instrumentation-dns": { 2097 + "version": "0.43.1", 2098 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.43.1.tgz", 2099 + "integrity": "sha512-e/tMZYU1nc+k+J3259CQtqVZIPsPRSLNoAQbGEmSKrjLEY/KJSbpBZ17lu4dFVBzqoF1cZYIZxn9WPQxy4V9ng==", 2100 + "license": "Apache-2.0", 2101 + "dependencies": { 2102 + "@opentelemetry/instrumentation": "^0.57.1" 2103 + }, 2104 + "engines": { 2105 + "node": ">=14" 2106 + }, 2107 + "peerDependencies": { 2108 + "@opentelemetry/api": "^1.3.0" 2109 + } 2110 + }, 2111 + "node_modules/@opentelemetry/instrumentation-express": { 2112 + "version": "0.47.1", 2113 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.47.1.tgz", 2114 + "integrity": "sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==", 2115 + "license": "Apache-2.0", 2116 + "dependencies": { 2117 + "@opentelemetry/core": "^1.8.0", 2118 + "@opentelemetry/instrumentation": "^0.57.1", 2119 + "@opentelemetry/semantic-conventions": "^1.27.0" 2120 + }, 2121 + "engines": { 2122 + "node": ">=14" 2123 + }, 2124 + "peerDependencies": { 2125 + "@opentelemetry/api": "^1.3.0" 2126 + } 2127 + }, 2128 + "node_modules/@opentelemetry/instrumentation-fastify": { 2129 + "version": "0.44.2", 2130 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.44.2.tgz", 2131 + "integrity": "sha512-arSp97Y4D2NWogoXRb8CzFK3W2ooVdvqRRtQDljFt9uC3zI6OuShgey6CVFC0JxT1iGjkAr1r4PDz23mWrFULQ==", 2132 + "license": "Apache-2.0", 2133 + "dependencies": { 2134 + "@opentelemetry/core": "^1.8.0", 2135 + "@opentelemetry/instrumentation": "^0.57.1", 2136 + "@opentelemetry/semantic-conventions": "^1.27.0" 2137 + }, 2138 + "engines": { 2139 + "node": ">=14" 2140 + }, 2141 + "peerDependencies": { 2142 + "@opentelemetry/api": "^1.3.0" 2143 + } 2144 + }, 2145 + "node_modules/@opentelemetry/instrumentation-fs": { 2146 + "version": "0.19.1", 2147 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.19.1.tgz", 2148 + "integrity": "sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==", 2149 + "license": "Apache-2.0", 2150 + "dependencies": { 2151 + "@opentelemetry/core": "^1.8.0", 2152 + "@opentelemetry/instrumentation": "^0.57.1" 2153 + }, 2154 + "engines": { 2155 + "node": ">=14" 2156 + }, 2157 + "peerDependencies": { 2158 + "@opentelemetry/api": "^1.3.0" 2159 + } 2160 + }, 2161 + "node_modules/@opentelemetry/instrumentation-generic-pool": { 2162 + "version": "0.43.1", 2163 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.43.1.tgz", 2164 + "integrity": "sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==", 2165 + "license": "Apache-2.0", 2166 + "dependencies": { 2167 + "@opentelemetry/instrumentation": "^0.57.1" 2168 + }, 2169 + "engines": { 2170 + "node": ">=14" 2171 + }, 2172 + "peerDependencies": { 2173 + "@opentelemetry/api": "^1.3.0" 2174 + } 2175 + }, 2176 + "node_modules/@opentelemetry/instrumentation-graphql": { 2177 + "version": "0.47.1", 2178 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.47.1.tgz", 2179 + "integrity": "sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==", 2180 + "license": "Apache-2.0", 2181 + "dependencies": { 2182 + "@opentelemetry/instrumentation": "^0.57.1" 2183 + }, 2184 + "engines": { 2185 + "node": ">=14" 2186 + }, 2187 + "peerDependencies": { 2188 + "@opentelemetry/api": "^1.3.0" 2189 + } 2190 + }, 2191 + "node_modules/@opentelemetry/instrumentation-grpc": { 2192 + "version": "0.57.2", 2193 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.57.2.tgz", 2194 + "integrity": "sha512-TR6YQA67cLSZzdxbf2SrbADJy2Y8eBW1+9mF15P0VK2MYcpdoUSmQTF1oMkBwa3B9NwqDFA2fq7wYTTutFQqaQ==", 2195 + "license": "Apache-2.0", 2196 + "dependencies": { 2197 + "@opentelemetry/instrumentation": "0.57.2", 2198 + "@opentelemetry/semantic-conventions": "1.28.0" 2199 + }, 2200 + "engines": { 2201 + "node": ">=14" 2202 + }, 2203 + "peerDependencies": { 2204 + "@opentelemetry/api": "^1.3.0" 2205 + } 2206 + }, 2207 + "node_modules/@opentelemetry/instrumentation-hapi": { 2208 + "version": "0.45.2", 2209 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.45.2.tgz", 2210 + "integrity": "sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ==", 2211 + "license": "Apache-2.0", 2212 + "dependencies": { 2213 + "@opentelemetry/core": "^1.8.0", 2214 + "@opentelemetry/instrumentation": "^0.57.1", 2215 + "@opentelemetry/semantic-conventions": "^1.27.0" 2216 + }, 2217 + "engines": { 2218 + "node": ">=14" 2219 + }, 2220 + "peerDependencies": { 2221 + "@opentelemetry/api": "^1.3.0" 2222 + } 2223 + }, 2224 + "node_modules/@opentelemetry/instrumentation-http": { 2225 + "version": "0.57.2", 2226 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.57.2.tgz", 2227 + "integrity": "sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==", 2228 + "license": "Apache-2.0", 2229 + "dependencies": { 2230 + "@opentelemetry/core": "1.30.1", 2231 + "@opentelemetry/instrumentation": "0.57.2", 2232 + "@opentelemetry/semantic-conventions": "1.28.0", 2233 + "forwarded-parse": "2.1.2", 2234 + "semver": "^7.5.2" 2235 + }, 2236 + "engines": { 2237 + "node": ">=14" 2238 + }, 2239 + "peerDependencies": { 2240 + "@opentelemetry/api": "^1.3.0" 2241 + } 2242 + }, 2243 + "node_modules/@opentelemetry/instrumentation-ioredis": { 2244 + "version": "0.47.1", 2245 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.47.1.tgz", 2246 + "integrity": "sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA==", 2247 + "license": "Apache-2.0", 2248 + "dependencies": { 2249 + "@opentelemetry/instrumentation": "^0.57.1", 2250 + "@opentelemetry/redis-common": "^0.36.2", 2251 + "@opentelemetry/semantic-conventions": "^1.27.0" 2252 + }, 2253 + "engines": { 2254 + "node": ">=14" 2255 + }, 2256 + "peerDependencies": { 2257 + "@opentelemetry/api": "^1.3.0" 2258 + } 2259 + }, 2260 + "node_modules/@opentelemetry/instrumentation-kafkajs": { 2261 + "version": "0.7.1", 2262 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.7.1.tgz", 2263 + "integrity": "sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==", 2264 + "license": "Apache-2.0", 2265 + "dependencies": { 2266 + "@opentelemetry/instrumentation": "^0.57.1", 2267 + "@opentelemetry/semantic-conventions": "^1.27.0" 2268 + }, 2269 + "engines": { 2270 + "node": ">=14" 2271 + }, 2272 + "peerDependencies": { 2273 + "@opentelemetry/api": "^1.3.0" 2274 + } 2275 + }, 2276 + "node_modules/@opentelemetry/instrumentation-knex": { 2277 + "version": "0.44.1", 2278 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.44.1.tgz", 2279 + "integrity": "sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ==", 2280 + "license": "Apache-2.0", 2281 + "dependencies": { 2282 + "@opentelemetry/instrumentation": "^0.57.1", 2283 + "@opentelemetry/semantic-conventions": "^1.27.0" 2284 + }, 2285 + "engines": { 2286 + "node": ">=14" 2287 + }, 2288 + "peerDependencies": { 2289 + "@opentelemetry/api": "^1.3.0" 2290 + } 2291 + }, 2292 + "node_modules/@opentelemetry/instrumentation-koa": { 2293 + "version": "0.47.1", 2294 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.47.1.tgz", 2295 + "integrity": "sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==", 2296 + "license": "Apache-2.0", 2297 + "dependencies": { 2298 + "@opentelemetry/core": "^1.8.0", 2299 + "@opentelemetry/instrumentation": "^0.57.1", 2300 + "@opentelemetry/semantic-conventions": "^1.27.0" 2301 + }, 2302 + "engines": { 2303 + "node": ">=14" 2304 + }, 2305 + "peerDependencies": { 2306 + "@opentelemetry/api": "^1.3.0" 2307 + } 2308 + }, 2309 + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { 2310 + "version": "0.44.1", 2311 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.44.1.tgz", 2312 + "integrity": "sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==", 2313 + "license": "Apache-2.0", 2314 + "dependencies": { 2315 + "@opentelemetry/instrumentation": "^0.57.1" 2316 + }, 2317 + "engines": { 2318 + "node": ">=14" 2319 + }, 2320 + "peerDependencies": { 2321 + "@opentelemetry/api": "^1.3.0" 2322 + } 2323 + }, 2324 + "node_modules/@opentelemetry/instrumentation-memcached": { 2325 + "version": "0.43.1", 2326 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.43.1.tgz", 2327 + "integrity": "sha512-rK5YWC22gmsLp2aEbaPk5F+9r6BFFZuc9GTnW/ErrWpz2XNHUgeFInoPDg4t+Trs8OttIfn8XwkfFkSKqhxanw==", 2328 + "license": "Apache-2.0", 2329 + "dependencies": { 2330 + "@opentelemetry/instrumentation": "^0.57.1", 2331 + "@opentelemetry/semantic-conventions": "^1.27.0", 2332 + "@types/memcached": "^2.2.6" 2333 + }, 2334 + "engines": { 2335 + "node": ">=14" 2336 + }, 2337 + "peerDependencies": { 2338 + "@opentelemetry/api": "^1.3.0" 2339 + } 2340 + }, 2341 + "node_modules/@opentelemetry/instrumentation-mongodb": { 2342 + "version": "0.52.0", 2343 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.52.0.tgz", 2344 + "integrity": "sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==", 2345 + "license": "Apache-2.0", 2346 + "dependencies": { 2347 + "@opentelemetry/instrumentation": "^0.57.1", 2348 + "@opentelemetry/semantic-conventions": "^1.27.0" 2349 + }, 2350 + "engines": { 2351 + "node": ">=14" 2352 + }, 2353 + "peerDependencies": { 2354 + "@opentelemetry/api": "^1.3.0" 2355 + } 2356 + }, 2357 + "node_modules/@opentelemetry/instrumentation-mongoose": { 2358 + "version": "0.46.1", 2359 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.46.1.tgz", 2360 + "integrity": "sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==", 2361 + "license": "Apache-2.0", 2362 + "dependencies": { 2363 + "@opentelemetry/core": "^1.8.0", 2364 + "@opentelemetry/instrumentation": "^0.57.1", 2365 + "@opentelemetry/semantic-conventions": "^1.27.0" 2366 + }, 2367 + "engines": { 2368 + "node": ">=14" 2369 + }, 2370 + "peerDependencies": { 2371 + "@opentelemetry/api": "^1.3.0" 2372 + } 2373 + }, 2374 + "node_modules/@opentelemetry/instrumentation-mysql": { 2375 + "version": "0.45.1", 2376 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.45.1.tgz", 2377 + "integrity": "sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==", 2378 + "license": "Apache-2.0", 2379 + "dependencies": { 2380 + "@opentelemetry/instrumentation": "^0.57.1", 2381 + "@opentelemetry/semantic-conventions": "^1.27.0", 2382 + "@types/mysql": "2.15.26" 2383 + }, 2384 + "engines": { 2385 + "node": ">=14" 2386 + }, 2387 + "peerDependencies": { 2388 + "@opentelemetry/api": "^1.3.0" 2389 + } 2390 + }, 2391 + "node_modules/@opentelemetry/instrumentation-mysql2": { 2392 + "version": "0.45.2", 2393 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.45.2.tgz", 2394 + "integrity": "sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==", 2395 + "license": "Apache-2.0", 2396 + "dependencies": { 2397 + "@opentelemetry/instrumentation": "^0.57.1", 2398 + "@opentelemetry/semantic-conventions": "^1.27.0", 2399 + "@opentelemetry/sql-common": "^0.40.1" 2400 + }, 2401 + "engines": { 2402 + "node": ">=14" 2403 + }, 2404 + "peerDependencies": { 2405 + "@opentelemetry/api": "^1.3.0" 2406 + } 2407 + }, 2408 + "node_modules/@opentelemetry/instrumentation-nestjs-core": { 2409 + "version": "0.44.1", 2410 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.44.1.tgz", 2411 + "integrity": "sha512-4TXaqJK27QXoMqrt4+hcQ6rKFd8B6V4JfrTJKnqBmWR1cbaqd/uwyl9yxhNH1JEkyo8GaBfdpBC4ZE4FuUhPmg==", 2412 + "license": "Apache-2.0", 2413 + "dependencies": { 2414 + "@opentelemetry/instrumentation": "^0.57.1", 2415 + "@opentelemetry/semantic-conventions": "^1.27.0" 2416 + }, 2417 + "engines": { 2418 + "node": ">=14" 2419 + }, 2420 + "peerDependencies": { 2421 + "@opentelemetry/api": "^1.3.0" 2422 + } 2423 + }, 2424 + "node_modules/@opentelemetry/instrumentation-net": { 2425 + "version": "0.43.1", 2426 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.43.1.tgz", 2427 + "integrity": "sha512-TaMqP6tVx9/SxlY81dHlSyP5bWJIKq+K7vKfk4naB/LX4LBePPY3++1s0edpzH+RfwN+tEGVW9zTb9ci0up/lQ==", 2428 + "license": "Apache-2.0", 2429 + "dependencies": { 2430 + "@opentelemetry/instrumentation": "^0.57.1", 2431 + "@opentelemetry/semantic-conventions": "^1.27.0" 2432 + }, 2433 + "engines": { 2434 + "node": ">=14" 2435 + }, 2436 + "peerDependencies": { 2437 + "@opentelemetry/api": "^1.3.0" 2438 + } 2439 + }, 2440 + "node_modules/@opentelemetry/instrumentation-pg": { 2441 + "version": "0.51.1", 2442 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.51.1.tgz", 2443 + "integrity": "sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==", 2444 + "license": "Apache-2.0", 2445 + "dependencies": { 2446 + "@opentelemetry/core": "^1.26.0", 2447 + "@opentelemetry/instrumentation": "^0.57.1", 2448 + "@opentelemetry/semantic-conventions": "^1.27.0", 2449 + "@opentelemetry/sql-common": "^0.40.1", 2450 + "@types/pg": "8.6.1", 2451 + "@types/pg-pool": "2.0.6" 2452 + }, 2453 + "engines": { 2454 + "node": ">=14" 2455 + }, 2456 + "peerDependencies": { 2457 + "@opentelemetry/api": "^1.3.0" 2458 + } 2459 + }, 2460 + "node_modules/@opentelemetry/instrumentation-pino": { 2461 + "version": "0.46.1", 2462 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.46.1.tgz", 2463 + "integrity": "sha512-HB8gD/9CNAKlTV+mdZehnFC4tLUtQ7e+729oGq88e4WipxzZxmMYuRwZ2vzOA9/APtq+MRkERJ9PcoDqSIjZ+g==", 2464 + "license": "Apache-2.0", 2465 + "dependencies": { 2466 + "@opentelemetry/api-logs": "^0.57.1", 2467 + "@opentelemetry/core": "^1.25.0", 2468 + "@opentelemetry/instrumentation": "^0.57.1" 2469 + }, 2470 + "engines": { 2471 + "node": ">=14" 2472 + }, 2473 + "peerDependencies": { 2474 + "@opentelemetry/api": "^1.3.0" 2475 + } 2476 + }, 2477 + "node_modules/@opentelemetry/instrumentation-redis": { 2478 + "version": "0.46.1", 2479 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.46.1.tgz", 2480 + "integrity": "sha512-AN7OvlGlXmlvsgbLHs6dS1bggp6Fcki+GxgYZdSrb/DB692TyfjR7sVILaCe0crnP66aJuXsg9cge3hptHs9UA==", 2481 + "license": "Apache-2.0", 2482 + "dependencies": { 2483 + "@opentelemetry/instrumentation": "^0.57.1", 2484 + "@opentelemetry/redis-common": "^0.36.2", 2485 + "@opentelemetry/semantic-conventions": "^1.27.0" 2486 + }, 2487 + "engines": { 2488 + "node": ">=14" 2489 + }, 2490 + "peerDependencies": { 2491 + "@opentelemetry/api": "^1.3.0" 2492 + } 2493 + }, 2494 + "node_modules/@opentelemetry/instrumentation-redis-4": { 2495 + "version": "0.46.1", 2496 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.46.1.tgz", 2497 + "integrity": "sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==", 2498 + "license": "Apache-2.0", 2499 + "dependencies": { 2500 + "@opentelemetry/instrumentation": "^0.57.1", 2501 + "@opentelemetry/redis-common": "^0.36.2", 2502 + "@opentelemetry/semantic-conventions": "^1.27.0" 2503 + }, 2504 + "engines": { 2505 + "node": ">=14" 2506 + }, 2507 + "peerDependencies": { 2508 + "@opentelemetry/api": "^1.3.0" 2509 + } 2510 + }, 2511 + "node_modules/@opentelemetry/instrumentation-restify": { 2512 + "version": "0.45.1", 2513 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.45.1.tgz", 2514 + "integrity": "sha512-Zd6Go9iEa+0zcoA2vDka9r/plYKaT3BhD3ESIy4JNIzFWXeQBGbH3zZxQIsz0jbNTMEtonlymU7eTLeaGWiApA==", 2515 + "license": "Apache-2.0", 2516 + "dependencies": { 2517 + "@opentelemetry/core": "^1.8.0", 2518 + "@opentelemetry/instrumentation": "^0.57.1", 2519 + "@opentelemetry/semantic-conventions": "^1.27.0" 2520 + }, 2521 + "engines": { 2522 + "node": ">=14" 2523 + }, 2524 + "peerDependencies": { 2525 + "@opentelemetry/api": "^1.3.0" 2526 + } 2527 + }, 2528 + "node_modules/@opentelemetry/instrumentation-router": { 2529 + "version": "0.44.1", 2530 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.44.1.tgz", 2531 + "integrity": "sha512-l4T/S7ByjpY5TCUPeDe1GPns02/5BpR0jroSMexyH3ZnXJt9PtYqx1IKAlOjaFEGEOQF2tGDsMi4PY5l+fSniQ==", 2532 + "license": "Apache-2.0", 2533 + "dependencies": { 2534 + "@opentelemetry/instrumentation": "^0.57.1", 2535 + "@opentelemetry/semantic-conventions": "^1.27.0" 2536 + }, 2537 + "engines": { 2538 + "node": ">=14" 2539 + }, 2540 + "peerDependencies": { 2541 + "@opentelemetry/api": "^1.3.0" 2542 + } 2543 + }, 2544 + "node_modules/@opentelemetry/instrumentation-socket.io": { 2545 + "version": "0.46.1", 2546 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.46.1.tgz", 2547 + "integrity": "sha512-9AsCVUAHOqvfe2RM/2I0DsDnx2ihw1d5jIN4+Bly1YPFTJIbk4+bXjAkr9+X6PUfhiV5urQHZkiYYPU1Q4yzPA==", 2548 + "license": "Apache-2.0", 2549 + "dependencies": { 2550 + "@opentelemetry/instrumentation": "^0.57.1", 2551 + "@opentelemetry/semantic-conventions": "^1.27.0" 2552 + }, 2553 + "engines": { 2554 + "node": ">=14" 2555 + }, 2556 + "peerDependencies": { 2557 + "@opentelemetry/api": "^1.3.0" 2558 + } 2559 + }, 2560 + "node_modules/@opentelemetry/instrumentation-tedious": { 2561 + "version": "0.18.1", 2562 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.18.1.tgz", 2563 + "integrity": "sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==", 2564 + "license": "Apache-2.0", 2565 + "dependencies": { 2566 + "@opentelemetry/instrumentation": "^0.57.1", 2567 + "@opentelemetry/semantic-conventions": "^1.27.0", 2568 + "@types/tedious": "^4.0.14" 2569 + }, 2570 + "engines": { 2571 + "node": ">=14" 2572 + }, 2573 + "peerDependencies": { 2574 + "@opentelemetry/api": "^1.3.0" 2575 + } 2576 + }, 2577 + "node_modules/@opentelemetry/instrumentation-undici": { 2578 + "version": "0.10.1", 2579 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.10.1.tgz", 2580 + "integrity": "sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==", 2581 + "license": "Apache-2.0", 2582 + "dependencies": { 2583 + "@opentelemetry/core": "^1.8.0", 2584 + "@opentelemetry/instrumentation": "^0.57.1" 2585 + }, 2586 + "engines": { 2587 + "node": ">=14" 2588 + }, 2589 + "peerDependencies": { 2590 + "@opentelemetry/api": "^1.7.0" 2591 + } 2592 + }, 2593 + "node_modules/@opentelemetry/instrumentation-winston": { 2594 + "version": "0.44.1", 2595 + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.44.1.tgz", 2596 + "integrity": "sha512-iexblTsT3fP0hHUz/M1mWr+Ylg3bsYN2En/jvKXZtboW3Qkvt17HrQJYTF9leVIkXAfN97QxAcTE99YGbQW7vQ==", 2597 + "license": "Apache-2.0", 2598 + "dependencies": { 2599 + "@opentelemetry/api-logs": "^0.57.1", 2600 + "@opentelemetry/instrumentation": "^0.57.1" 2601 + }, 2602 + "engines": { 2603 + "node": ">=14" 2604 + }, 2605 + "peerDependencies": { 2606 + "@opentelemetry/api": "^1.3.0" 2607 + } 2608 + }, 2609 + "node_modules/@opentelemetry/otlp-exporter-base": { 2610 + "version": "0.57.2", 2611 + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.57.2.tgz", 2612 + "integrity": "sha512-XdxEzL23Urhidyebg5E6jZoaiW5ygP/mRjxLHixogbqwDy2Faduzb5N0o/Oi+XTIJu+iyxXdVORjXax+Qgfxag==", 2613 + "license": "Apache-2.0", 2614 + "dependencies": { 2615 + "@opentelemetry/core": "1.30.1", 2616 + "@opentelemetry/otlp-transformer": "0.57.2" 2617 + }, 2618 + "engines": { 2619 + "node": ">=14" 2620 + }, 2621 + "peerDependencies": { 2622 + "@opentelemetry/api": "^1.3.0" 2623 + } 2624 + }, 2625 + "node_modules/@opentelemetry/otlp-grpc-exporter-base": { 2626 + "version": "0.57.2", 2627 + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.57.2.tgz", 2628 + "integrity": "sha512-USn173KTWy0saqqRB5yU9xUZ2xdgb1Rdu5IosJnm9aV4hMTuFFRTUsQxbgc24QxpCHeoKzzCSnS/JzdV0oM2iQ==", 2629 + "license": "Apache-2.0", 2630 + "dependencies": { 2631 + "@grpc/grpc-js": "^1.7.1", 2632 + "@opentelemetry/core": "1.30.1", 2633 + "@opentelemetry/otlp-exporter-base": "0.57.2", 2634 + "@opentelemetry/otlp-transformer": "0.57.2" 2635 + }, 2636 + "engines": { 2637 + "node": ">=14" 2638 + }, 2639 + "peerDependencies": { 2640 + "@opentelemetry/api": "^1.3.0" 2641 + } 2642 + }, 2643 + "node_modules/@opentelemetry/otlp-transformer": { 2644 + "version": "0.57.2", 2645 + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.57.2.tgz", 2646 + "integrity": "sha512-48IIRj49gbQVK52jYsw70+Jv+JbahT8BqT2Th7C4H7RCM9d0gZ5sgNPoMpWldmfjvIsSgiGJtjfk9MeZvjhoig==", 2647 + "license": "Apache-2.0", 2648 + "dependencies": { 2649 + "@opentelemetry/api-logs": "0.57.2", 2650 + "@opentelemetry/core": "1.30.1", 2651 + "@opentelemetry/resources": "1.30.1", 2652 + "@opentelemetry/sdk-logs": "0.57.2", 2653 + "@opentelemetry/sdk-metrics": "1.30.1", 2654 + "@opentelemetry/sdk-trace-base": "1.30.1", 2655 + "protobufjs": "^7.3.0" 2656 + }, 2657 + "engines": { 2658 + "node": ">=14" 2659 + }, 2660 + "peerDependencies": { 2661 + "@opentelemetry/api": "^1.3.0" 2662 + } 2663 + }, 2664 + "node_modules/@opentelemetry/propagation-utils": { 2665 + "version": "0.30.16", 2666 + "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.30.16.tgz", 2667 + "integrity": "sha512-ZVQ3Z/PQ+2GQlrBfbMMMT0U7MzvYZLCPP800+ooyaBqm4hMvuQHfP028gB9/db0mwkmyEAMad9houukUVxhwcw==", 2668 + "license": "Apache-2.0", 2669 + "engines": { 2670 + "node": ">=14" 2671 + }, 2672 + "peerDependencies": { 2673 + "@opentelemetry/api": "^1.0.0" 2674 + } 2675 + }, 2676 + "node_modules/@opentelemetry/propagator-b3": { 2677 + "version": "1.30.1", 2678 + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.30.1.tgz", 2679 + "integrity": "sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==", 2680 + "license": "Apache-2.0", 2681 + "dependencies": { 2682 + "@opentelemetry/core": "1.30.1" 2683 + }, 2684 + "engines": { 2685 + "node": ">=14" 2686 + }, 2687 + "peerDependencies": { 2688 + "@opentelemetry/api": ">=1.0.0 <1.10.0" 2689 + } 2690 + }, 2691 + "node_modules/@opentelemetry/propagator-jaeger": { 2692 + "version": "1.30.1", 2693 + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.30.1.tgz", 2694 + "integrity": "sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==", 2695 + "license": "Apache-2.0", 2696 + "dependencies": { 2697 + "@opentelemetry/core": "1.30.1" 2698 + }, 2699 + "engines": { 2700 + "node": ">=14" 2701 + }, 2702 + "peerDependencies": { 2703 + "@opentelemetry/api": ">=1.0.0 <1.10.0" 2704 + } 2705 + }, 2706 + "node_modules/@opentelemetry/redis-common": { 2707 + "version": "0.36.2", 2708 + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", 2709 + "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", 2710 + "license": "Apache-2.0", 2711 + "engines": { 2712 + "node": ">=14" 2713 + } 2714 + }, 2715 + "node_modules/@opentelemetry/resource-detector-alibaba-cloud": { 2716 + "version": "0.30.1", 2717 + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.30.1.tgz", 2718 + "integrity": "sha512-9l0FVP3F4+Z6ax27vMzkmhZdNtxAbDqEfy7rduzya3xFLaRiJSvOpw6cru6Edl5LwO+WvgNui+VzHa9ViE8wCg==", 2719 + "license": "Apache-2.0", 2720 + "dependencies": { 2721 + "@opentelemetry/core": "^1.26.0", 2722 + "@opentelemetry/resources": "^1.10.0", 2723 + "@opentelemetry/semantic-conventions": "^1.27.0" 2724 + }, 2725 + "engines": { 2726 + "node": ">=14" 2727 + }, 2728 + "peerDependencies": { 2729 + "@opentelemetry/api": "^1.0.0" 2730 + } 2731 + }, 2732 + "node_modules/@opentelemetry/resource-detector-aws": { 2733 + "version": "1.12.0", 2734 + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.12.0.tgz", 2735 + "integrity": "sha512-Cvi7ckOqiiuWlHBdA1IjS0ufr3sltex2Uws2RK6loVp4gzIJyOijsddAI6IZ5kiO8h/LgCWe8gxPmwkTKImd+Q==", 2736 + "license": "Apache-2.0", 2737 + "dependencies": { 2738 + "@opentelemetry/core": "^1.0.0", 2739 + "@opentelemetry/resources": "^1.10.0", 2740 + "@opentelemetry/semantic-conventions": "^1.27.0" 2741 + }, 2742 + "engines": { 2743 + "node": ">=14" 2744 + }, 2745 + "peerDependencies": { 2746 + "@opentelemetry/api": "^1.0.0" 2747 + } 2748 + }, 2749 + "node_modules/@opentelemetry/resource-detector-azure": { 2750 + "version": "0.6.1", 2751 + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-azure/-/resource-detector-azure-0.6.1.tgz", 2752 + "integrity": "sha512-Djr31QCExVfWViaf9cGJnH+bUInD72p0GEfgDGgjCAztyvyji6WJvKjs6qmkpPN+Ig6KLk0ho2VgzT5Kdl4L2Q==", 2753 + "license": "Apache-2.0", 2754 + "dependencies": { 2755 + "@opentelemetry/core": "^1.25.1", 2756 + "@opentelemetry/resources": "^1.10.1", 2757 + "@opentelemetry/semantic-conventions": "^1.27.0" 2758 + }, 2759 + "engines": { 2760 + "node": ">=14" 2761 + }, 2762 + "peerDependencies": { 2763 + "@opentelemetry/api": "^1.0.0" 2764 + } 2765 + }, 2766 + "node_modules/@opentelemetry/resource-detector-container": { 2767 + "version": "0.6.1", 2768 + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.6.1.tgz", 2769 + "integrity": "sha512-o4sLzx149DQXDmVa8pgjBDEEKOj9SuQnkSLbjUVOpQNnn10v0WNR6wLwh30mFsK26xOJ6SpqZBGKZiT7i5MjlA==", 2770 + "license": "Apache-2.0", 2771 + "dependencies": { 2772 + "@opentelemetry/core": "^1.26.0", 2773 + "@opentelemetry/resources": "^1.10.0", 2774 + "@opentelemetry/semantic-conventions": "^1.27.0" 2775 + }, 2776 + "engines": { 2777 + "node": ">=14" 2778 + }, 2779 + "peerDependencies": { 2780 + "@opentelemetry/api": "^1.0.0" 2781 + } 2782 + }, 2783 + "node_modules/@opentelemetry/resource-detector-gcp": { 2784 + "version": "0.33.1", 2785 + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.33.1.tgz", 2786 + "integrity": "sha512-/aZJXI1rU6Eus04ih2vU0hxXAibXXMzH1WlDZ8bXcTJmhwmTY8cP392+6l7cWeMnTQOibBUz8UKV3nhcCBAefw==", 2787 + "license": "Apache-2.0", 2788 + "dependencies": { 2789 + "@opentelemetry/core": "^1.0.0", 2790 + "@opentelemetry/resources": "^1.10.0", 2791 + "@opentelemetry/semantic-conventions": "^1.27.0", 2792 + "gcp-metadata": "^6.0.0" 2793 + }, 2794 + "engines": { 2795 + "node": ">=14" 2796 + }, 2797 + "peerDependencies": { 2798 + "@opentelemetry/api": "^1.0.0" 2799 + } 2800 + }, 2801 + "node_modules/@opentelemetry/resources": { 2802 + "version": "1.30.1", 2803 + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", 2804 + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", 2805 + "license": "Apache-2.0", 2806 + "dependencies": { 2807 + "@opentelemetry/core": "1.30.1", 2808 + "@opentelemetry/semantic-conventions": "1.28.0" 2809 + }, 2810 + "engines": { 2811 + "node": ">=14" 2812 + }, 2813 + "peerDependencies": { 2814 + "@opentelemetry/api": ">=1.0.0 <1.10.0" 2815 + } 2816 + }, 2817 + "node_modules/@opentelemetry/sdk-logs": { 2818 + "version": "0.57.2", 2819 + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.57.2.tgz", 2820 + "integrity": "sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==", 2821 + "license": "Apache-2.0", 2822 + "dependencies": { 2823 + "@opentelemetry/api-logs": "0.57.2", 2824 + "@opentelemetry/core": "1.30.1", 2825 + "@opentelemetry/resources": "1.30.1" 2826 + }, 2827 + "engines": { 2828 + "node": ">=14" 2829 + }, 2830 + "peerDependencies": { 2831 + "@opentelemetry/api": ">=1.4.0 <1.10.0" 2832 + } 2833 + }, 2834 + "node_modules/@opentelemetry/sdk-metrics": { 2835 + "version": "1.30.1", 2836 + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.30.1.tgz", 2837 + "integrity": "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==", 2838 + "license": "Apache-2.0", 2839 + "dependencies": { 2840 + "@opentelemetry/core": "1.30.1", 2841 + "@opentelemetry/resources": "1.30.1" 2842 + }, 2843 + "engines": { 2844 + "node": ">=14" 2845 + }, 2846 + "peerDependencies": { 2847 + "@opentelemetry/api": ">=1.3.0 <1.10.0" 2848 + } 2849 + }, 2850 + "node_modules/@opentelemetry/sdk-node": { 2851 + "version": "0.57.2", 2852 + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.57.2.tgz", 2853 + "integrity": "sha512-8BaeqZyN5sTuPBtAoY+UtKwXBdqyuRKmekN5bFzAO40CgbGzAxfTpiL3PBerT7rhZ7p2nBdq7FaMv/tBQgHE4A==", 2854 + "license": "Apache-2.0", 2855 + "dependencies": { 2856 + "@opentelemetry/api-logs": "0.57.2", 2857 + "@opentelemetry/core": "1.30.1", 2858 + "@opentelemetry/exporter-logs-otlp-grpc": "0.57.2", 2859 + "@opentelemetry/exporter-logs-otlp-http": "0.57.2", 2860 + "@opentelemetry/exporter-logs-otlp-proto": "0.57.2", 2861 + "@opentelemetry/exporter-metrics-otlp-grpc": "0.57.2", 2862 + "@opentelemetry/exporter-metrics-otlp-http": "0.57.2", 2863 + "@opentelemetry/exporter-metrics-otlp-proto": "0.57.2", 2864 + "@opentelemetry/exporter-prometheus": "0.57.2", 2865 + "@opentelemetry/exporter-trace-otlp-grpc": "0.57.2", 2866 + "@opentelemetry/exporter-trace-otlp-http": "0.57.2", 2867 + "@opentelemetry/exporter-trace-otlp-proto": "0.57.2", 2868 + "@opentelemetry/exporter-zipkin": "1.30.1", 2869 + "@opentelemetry/instrumentation": "0.57.2", 2870 + "@opentelemetry/resources": "1.30.1", 2871 + "@opentelemetry/sdk-logs": "0.57.2", 2872 + "@opentelemetry/sdk-metrics": "1.30.1", 2873 + "@opentelemetry/sdk-trace-base": "1.30.1", 2874 + "@opentelemetry/sdk-trace-node": "1.30.1", 2875 + "@opentelemetry/semantic-conventions": "1.28.0" 2876 + }, 2877 + "engines": { 2878 + "node": ">=14" 2879 + }, 2880 + "peerDependencies": { 2881 + "@opentelemetry/api": ">=1.3.0 <1.10.0" 2882 + } 2883 + }, 2884 + "node_modules/@opentelemetry/sdk-trace-base": { 2885 + "version": "1.30.1", 2886 + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz", 2887 + "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", 2888 + "license": "Apache-2.0", 2889 + "dependencies": { 2890 + "@opentelemetry/core": "1.30.1", 2891 + "@opentelemetry/resources": "1.30.1", 2892 + "@opentelemetry/semantic-conventions": "1.28.0" 2893 + }, 2894 + "engines": { 2895 + "node": ">=14" 2896 + }, 2897 + "peerDependencies": { 2898 + "@opentelemetry/api": ">=1.0.0 <1.10.0" 2899 + } 2900 + }, 2901 + "node_modules/@opentelemetry/sdk-trace-node": { 2902 + "version": "1.30.1", 2903 + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.30.1.tgz", 2904 + "integrity": "sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==", 2905 + "license": "Apache-2.0", 2906 + "dependencies": { 2907 + "@opentelemetry/context-async-hooks": "1.30.1", 2908 + "@opentelemetry/core": "1.30.1", 2909 + "@opentelemetry/propagator-b3": "1.30.1", 2910 + "@opentelemetry/propagator-jaeger": "1.30.1", 2911 + "@opentelemetry/sdk-trace-base": "1.30.1", 2912 + "semver": "^7.5.2" 2913 + }, 2914 + "engines": { 2915 + "node": ">=14" 2916 + }, 2917 + "peerDependencies": { 2918 + "@opentelemetry/api": ">=1.0.0 <1.10.0" 2919 + } 2920 + }, 2921 + "node_modules/@opentelemetry/semantic-conventions": { 2922 + "version": "1.28.0", 2923 + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", 2924 + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", 2925 + "license": "Apache-2.0", 2926 + "engines": { 2927 + "node": ">=14" 2928 + } 2929 + }, 2930 + "node_modules/@opentelemetry/sql-common": { 2931 + "version": "0.40.1", 2932 + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", 2933 + "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", 2934 + "license": "Apache-2.0", 2935 + "dependencies": { 2936 + "@opentelemetry/core": "^1.1.0" 2937 + }, 2938 + "engines": { 2939 + "node": ">=14" 2940 + }, 2941 + "peerDependencies": { 2942 + "@opentelemetry/api": "^1.1.0" 2943 + } 2944 + }, 2939 2945 "node_modules/@pkgjs/parseargs": { 2940 2946 "version": "0.11.0", 2941 2947 "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", ··· 2951 2957 "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", 2952 2958 "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", 2953 2959 "license": "MIT" 2960 + }, 2961 + "node_modules/@protobufjs/aspromise": { 2962 + "version": "1.1.2", 2963 + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 2964 + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", 2965 + "license": "BSD-3-Clause" 2966 + }, 2967 + "node_modules/@protobufjs/base64": { 2968 + "version": "1.1.2", 2969 + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 2970 + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", 2971 + "license": "BSD-3-Clause" 2972 + }, 2973 + "node_modules/@protobufjs/codegen": { 2974 + "version": "2.0.4", 2975 + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 2976 + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", 2977 + "license": "BSD-3-Clause" 2978 + }, 2979 + "node_modules/@protobufjs/eventemitter": { 2980 + "version": "1.1.0", 2981 + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 2982 + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", 2983 + "license": "BSD-3-Clause" 2984 + }, 2985 + "node_modules/@protobufjs/fetch": { 2986 + "version": "1.1.0", 2987 + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 2988 + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", 2989 + "license": "BSD-3-Clause", 2990 + "dependencies": { 2991 + "@protobufjs/aspromise": "^1.1.1", 2992 + "@protobufjs/inquire": "^1.1.0" 2993 + } 2994 + }, 2995 + "node_modules/@protobufjs/float": { 2996 + "version": "1.0.2", 2997 + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 2998 + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", 2999 + "license": "BSD-3-Clause" 3000 + }, 3001 + "node_modules/@protobufjs/inquire": { 3002 + "version": "1.1.0", 3003 + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 3004 + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", 3005 + "license": "BSD-3-Clause" 3006 + }, 3007 + "node_modules/@protobufjs/path": { 3008 + "version": "1.1.2", 3009 + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 3010 + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", 3011 + "license": "BSD-3-Clause" 3012 + }, 3013 + "node_modules/@protobufjs/pool": { 3014 + "version": "1.1.0", 3015 + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 3016 + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", 3017 + "license": "BSD-3-Clause" 3018 + }, 3019 + "node_modules/@protobufjs/utf8": { 3020 + "version": "1.1.0", 3021 + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 3022 + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", 3023 + "license": "BSD-3-Clause" 2954 3024 }, 2955 3025 "node_modules/@radix-ui/number": { 2956 3026 "version": "1.1.1", ··· 5945 6015 "@types/estree": "*" 5946 6016 } 5947 6017 }, 6018 + "node_modules/@types/aws-lambda": { 6019 + "version": "8.10.147", 6020 + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.147.tgz", 6021 + "integrity": "sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew==", 6022 + "license": "MIT" 6023 + }, 6024 + "node_modules/@types/bunyan": { 6025 + "version": "1.8.11", 6026 + "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.11.tgz", 6027 + "integrity": "sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ==", 6028 + "license": "MIT", 6029 + "dependencies": { 6030 + "@types/node": "*" 6031 + } 6032 + }, 6033 + "node_modules/@types/connect": { 6034 + "version": "3.4.38", 6035 + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", 6036 + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", 6037 + "license": "MIT", 6038 + "dependencies": { 6039 + "@types/node": "*" 6040 + } 6041 + }, 5948 6042 "node_modules/@types/debug": { 5949 6043 "version": "4.1.12", 5950 6044 "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", ··· 6025 6119 "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", 6026 6120 "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==" 6027 6121 }, 6122 + "node_modules/@types/memcached": { 6123 + "version": "2.2.10", 6124 + "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", 6125 + "integrity": "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==", 6126 + "license": "MIT", 6127 + "dependencies": { 6128 + "@types/node": "*" 6129 + } 6130 + }, 6028 6131 "node_modules/@types/ms": { 6029 6132 "version": "0.7.34", 6030 6133 "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", 6031 6134 "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" 6032 6135 }, 6136 + "node_modules/@types/mysql": { 6137 + "version": "2.15.26", 6138 + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", 6139 + "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==", 6140 + "license": "MIT", 6141 + "dependencies": { 6142 + "@types/node": "*" 6143 + } 6144 + }, 6033 6145 "node_modules/@types/node": { 6034 6146 "version": "22.15.17", 6035 6147 "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.17.tgz", ··· 6048 6160 "@types/node": "*" 6049 6161 } 6050 6162 }, 6163 + "node_modules/@types/pg": { 6164 + "version": "8.6.1", 6165 + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", 6166 + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", 6167 + "license": "MIT", 6168 + "dependencies": { 6169 + "@types/node": "*", 6170 + "pg-protocol": "*", 6171 + "pg-types": "^2.2.0" 6172 + } 6173 + }, 6174 + "node_modules/@types/pg-pool": { 6175 + "version": "2.0.6", 6176 + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", 6177 + "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", 6178 + "license": "MIT", 6179 + "dependencies": { 6180 + "@types/pg": "*" 6181 + } 6182 + }, 6051 6183 "node_modules/@types/phoenix": { 6052 6184 "version": "1.6.4", 6053 6185 "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.4.tgz", ··· 6070 6202 "license": "MIT", 6071 6203 "peerDependencies": { 6072 6204 "@types/react": "^19.0.0" 6205 + } 6206 + }, 6207 + "node_modules/@types/shimmer": { 6208 + "version": "1.2.0", 6209 + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", 6210 + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", 6211 + "license": "MIT" 6212 + }, 6213 + "node_modules/@types/tedious": { 6214 + "version": "4.0.14", 6215 + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", 6216 + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", 6217 + "license": "MIT", 6218 + "dependencies": { 6219 + "@types/node": "*" 6073 6220 } 6074 6221 }, 6075 6222 "node_modules/@types/unist": { ··· 6387 6534 } 6388 6535 }, 6389 6536 "node_modules/acorn": { 6390 - "version": "8.11.3", 6391 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 6392 - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 6537 + "version": "8.15.0", 6538 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", 6539 + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", 6540 + "license": "MIT", 6393 6541 "bin": { 6394 6542 "acorn": "bin/acorn" 6395 6543 }, ··· 6397 6545 "node": ">=0.4.0" 6398 6546 } 6399 6547 }, 6548 + "node_modules/acorn-import-attributes": { 6549 + "version": "1.9.5", 6550 + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", 6551 + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", 6552 + "license": "MIT", 6553 + "peerDependencies": { 6554 + "acorn": "^8" 6555 + } 6556 + }, 6400 6557 "node_modules/acorn-jsx": { 6401 6558 "version": "5.3.2", 6402 6559 "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", ··· 6417 6574 "version": "7.1.1", 6418 6575 "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", 6419 6576 "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", 6420 - "dev": true, 6421 6577 "dependencies": { 6422 6578 "debug": "^4.3.4" 6423 6579 }, ··· 6446 6602 "version": "5.0.1", 6447 6603 "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 6448 6604 "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 6449 - "dev": true, 6450 6605 "engines": { 6451 6606 "node": ">=8" 6452 6607 } ··· 6455 6610 "version": "4.3.0", 6456 6611 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 6457 6612 "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 6458 - "dev": true, 6459 6613 "dependencies": { 6460 6614 "color-convert": "^2.0.1" 6461 6615 }, ··· 6858 7012 } 6859 7013 ] 6860 7014 }, 7015 + "node_modules/bignumber.js": { 7016 + "version": "9.3.1", 7017 + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", 7018 + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", 7019 + "license": "MIT", 7020 + "engines": { 7021 + "node": "*" 7022 + } 7023 + }, 6861 7024 "node_modules/bin-links": { 6862 7025 "version": "4.0.4", 6863 7026 "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz", ··· 7130 7293 ], 7131 7294 "license": "CC-BY-4.0" 7132 7295 }, 7296 + "node_modules/canonicalize": { 7297 + "version": "1.0.8", 7298 + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", 7299 + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", 7300 + "license": "Apache-2.0" 7301 + }, 7133 7302 "node_modules/capnp-ts": { 7134 7303 "version": "0.7.0", 7135 7304 "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", ··· 7193 7362 "version": "4.1.2", 7194 7363 "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 7195 7364 "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 7196 - "dev": true, 7197 7365 "dependencies": { 7198 7366 "ansi-styles": "^4.1.0", 7199 7367 "supports-color": "^7.1.0" ··· 7286 7454 "node": ">=18" 7287 7455 } 7288 7456 }, 7457 + "node_modules/cjs-module-lexer": { 7458 + "version": "1.4.3", 7459 + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", 7460 + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", 7461 + "license": "MIT" 7462 + }, 7289 7463 "node_modules/cli-color": { 7290 7464 "version": "2.0.4", 7291 7465 "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz", ··· 7307 7481 "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", 7308 7482 "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" 7309 7483 }, 7484 + "node_modules/cliui": { 7485 + "version": "8.0.1", 7486 + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 7487 + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 7488 + "license": "ISC", 7489 + "dependencies": { 7490 + "string-width": "^4.2.0", 7491 + "strip-ansi": "^6.0.1", 7492 + "wrap-ansi": "^7.0.0" 7493 + }, 7494 + "engines": { 7495 + "node": ">=12" 7496 + } 7497 + }, 7310 7498 "node_modules/clsx": { 7311 7499 "version": "2.1.1", 7312 7500 "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", ··· 7470 7658 "license": "MIT", 7471 7659 "peer": true 7472 7660 }, 7661 + "node_modules/cross-fetch": { 7662 + "version": "4.1.0", 7663 + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", 7664 + "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", 7665 + "license": "MIT", 7666 + "dependencies": { 7667 + "node-fetch": "^2.7.0" 7668 + } 7669 + }, 7670 + "node_modules/cross-fetch/node_modules/node-fetch": { 7671 + "version": "2.7.0", 7672 + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 7673 + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 7674 + "license": "MIT", 7675 + "dependencies": { 7676 + "whatwg-url": "^5.0.0" 7677 + }, 7678 + "engines": { 7679 + "node": "4.x || >=6.0.0" 7680 + }, 7681 + "peerDependencies": { 7682 + "encoding": "^0.1.0" 7683 + }, 7684 + "peerDependenciesMeta": { 7685 + "encoding": { 7686 + "optional": true 7687 + } 7688 + } 7689 + }, 7473 7690 "node_modules/cross-spawn": { 7474 7691 "version": "7.0.3", 7475 7692 "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", ··· 7605 7822 "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" 7606 7823 }, 7607 7824 "node_modules/debug": { 7608 - "version": "4.3.4", 7609 - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 7610 - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 7825 + "version": "4.4.1", 7826 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", 7827 + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", 7828 + "license": "MIT", 7611 7829 "dependencies": { 7612 - "ms": "2.1.2" 7830 + "ms": "^2.1.3" 7613 7831 }, 7614 7832 "engines": { 7615 7833 "node": ">=6.0" ··· 7817 8035 "drizzle-kit": "bin.cjs" 7818 8036 } 7819 8037 }, 7820 - "node_modules/drizzle-kit/node_modules/@esbuild/aix-ppc64": { 7821 - "version": "0.19.12", 7822 - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", 7823 - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", 7824 - "cpu": [ 7825 - "ppc64" 7826 - ], 7827 - "dev": true, 7828 - "license": "MIT", 7829 - "optional": true, 7830 - "os": [ 7831 - "aix" 7832 - ], 7833 - "engines": { 7834 - "node": ">=12" 7835 - } 7836 - }, 7837 - "node_modules/drizzle-kit/node_modules/@esbuild/android-arm": { 7838 - "version": "0.19.12", 7839 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", 7840 - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", 7841 - "cpu": [ 7842 - "arm" 7843 - ], 7844 - "dev": true, 7845 - "license": "MIT", 7846 - "optional": true, 7847 - "os": [ 7848 - "android" 7849 - ], 7850 - "engines": { 7851 - "node": ">=12" 7852 - } 7853 - }, 7854 - "node_modules/drizzle-kit/node_modules/@esbuild/android-arm64": { 7855 - "version": "0.19.12", 7856 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", 7857 - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", 7858 - "cpu": [ 7859 - "arm64" 7860 - ], 7861 - "dev": true, 7862 - "license": "MIT", 7863 - "optional": true, 7864 - "os": [ 7865 - "android" 7866 - ], 7867 - "engines": { 7868 - "node": ">=12" 7869 - } 7870 - }, 7871 - "node_modules/drizzle-kit/node_modules/@esbuild/android-x64": { 7872 - "version": "0.19.12", 7873 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", 7874 - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", 7875 - "cpu": [ 7876 - "x64" 7877 - ], 7878 - "dev": true, 7879 - "license": "MIT", 7880 - "optional": true, 7881 - "os": [ 7882 - "android" 7883 - ], 7884 - "engines": { 7885 - "node": ">=12" 7886 - } 7887 - }, 7888 - "node_modules/drizzle-kit/node_modules/@esbuild/darwin-arm64": { 7889 - "version": "0.19.12", 7890 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", 7891 - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", 7892 - "cpu": [ 7893 - "arm64" 7894 - ], 7895 - "dev": true, 7896 - "license": "MIT", 7897 - "optional": true, 7898 - "os": [ 7899 - "darwin" 7900 - ], 7901 - "engines": { 7902 - "node": ">=12" 7903 - } 7904 - }, 7905 - "node_modules/drizzle-kit/node_modules/@esbuild/darwin-x64": { 7906 - "version": "0.19.12", 7907 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", 7908 - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", 7909 - "cpu": [ 7910 - "x64" 7911 - ], 7912 - "dev": true, 7913 - "license": "MIT", 7914 - "optional": true, 7915 - "os": [ 7916 - "darwin" 7917 - ], 7918 - "engines": { 7919 - "node": ">=12" 7920 - } 7921 - }, 7922 - "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-arm64": { 7923 - "version": "0.19.12", 7924 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", 7925 - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", 7926 - "cpu": [ 7927 - "arm64" 7928 - ], 7929 - "dev": true, 7930 - "license": "MIT", 7931 - "optional": true, 7932 - "os": [ 7933 - "freebsd" 7934 - ], 7935 - "engines": { 7936 - "node": ">=12" 7937 - } 7938 - }, 7939 - "node_modules/drizzle-kit/node_modules/@esbuild/freebsd-x64": { 7940 - "version": "0.19.12", 7941 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", 7942 - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", 7943 - "cpu": [ 7944 - "x64" 7945 - ], 7946 - "dev": true, 7947 - "license": "MIT", 7948 - "optional": true, 7949 - "os": [ 7950 - "freebsd" 7951 - ], 7952 - "engines": { 7953 - "node": ">=12" 7954 - } 7955 - }, 7956 - "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm": { 7957 - "version": "0.19.12", 7958 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", 7959 - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", 7960 - "cpu": [ 7961 - "arm" 7962 - ], 7963 - "dev": true, 7964 - "license": "MIT", 7965 - "optional": true, 7966 - "os": [ 7967 - "linux" 7968 - ], 7969 - "engines": { 7970 - "node": ">=12" 7971 - } 7972 - }, 7973 - "node_modules/drizzle-kit/node_modules/@esbuild/linux-arm64": { 7974 - "version": "0.19.12", 7975 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", 7976 - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", 7977 - "cpu": [ 7978 - "arm64" 7979 - ], 7980 - "dev": true, 7981 - "license": "MIT", 7982 - "optional": true, 7983 - "os": [ 7984 - "linux" 7985 - ], 7986 - "engines": { 7987 - "node": ">=12" 7988 - } 7989 - }, 7990 - "node_modules/drizzle-kit/node_modules/@esbuild/linux-ia32": { 7991 - "version": "0.19.12", 7992 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", 7993 - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", 7994 - "cpu": [ 7995 - "ia32" 7996 - ], 7997 - "dev": true, 7998 - "license": "MIT", 7999 - "optional": true, 8000 - "os": [ 8001 - "linux" 8002 - ], 8003 - "engines": { 8004 - "node": ">=12" 8005 - } 8006 - }, 8007 - "node_modules/drizzle-kit/node_modules/@esbuild/linux-loong64": { 8008 - "version": "0.19.12", 8009 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", 8010 - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", 8011 - "cpu": [ 8012 - "loong64" 8013 - ], 8014 - "dev": true, 8015 - "license": "MIT", 8016 - "optional": true, 8017 - "os": [ 8018 - "linux" 8019 - ], 8020 - "engines": { 8021 - "node": ">=12" 8022 - } 8023 - }, 8024 - "node_modules/drizzle-kit/node_modules/@esbuild/linux-mips64el": { 8025 - "version": "0.19.12", 8026 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", 8027 - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", 8028 - "cpu": [ 8029 - "mips64el" 8030 - ], 8031 - "dev": true, 8032 - "license": "MIT", 8033 - "optional": true, 8034 - "os": [ 8035 - "linux" 8036 - ], 8037 - "engines": { 8038 - "node": ">=12" 8039 - } 8040 - }, 8041 - "node_modules/drizzle-kit/node_modules/@esbuild/linux-ppc64": { 8042 - "version": "0.19.12", 8043 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", 8044 - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", 8045 - "cpu": [ 8046 - "ppc64" 8047 - ], 8048 - "dev": true, 8049 - "license": "MIT", 8050 - "optional": true, 8051 - "os": [ 8052 - "linux" 8053 - ], 8054 - "engines": { 8055 - "node": ">=12" 8056 - } 8057 - }, 8058 - "node_modules/drizzle-kit/node_modules/@esbuild/linux-riscv64": { 8059 - "version": "0.19.12", 8060 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", 8061 - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", 8062 - "cpu": [ 8063 - "riscv64" 8064 - ], 8065 - "dev": true, 8066 - "license": "MIT", 8067 - "optional": true, 8068 - "os": [ 8069 - "linux" 8070 - ], 8071 - "engines": { 8072 - "node": ">=12" 8073 - } 8074 - }, 8075 - "node_modules/drizzle-kit/node_modules/@esbuild/linux-s390x": { 8076 - "version": "0.19.12", 8077 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", 8078 - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", 8079 - "cpu": [ 8080 - "s390x" 8081 - ], 8082 - "dev": true, 8083 - "license": "MIT", 8084 - "optional": true, 8085 - "os": [ 8086 - "linux" 8087 - ], 8088 - "engines": { 8089 - "node": ">=12" 8090 - } 8091 - }, 8092 8038 "node_modules/drizzle-kit/node_modules/@esbuild/linux-x64": { 8093 8039 "version": "0.19.12", 8094 8040 "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", ··· 8101 8047 "optional": true, 8102 8048 "os": [ 8103 8049 "linux" 8104 - ], 8105 - "engines": { 8106 - "node": ">=12" 8107 - } 8108 - }, 8109 - "node_modules/drizzle-kit/node_modules/@esbuild/netbsd-x64": { 8110 - "version": "0.19.12", 8111 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", 8112 - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", 8113 - "cpu": [ 8114 - "x64" 8115 - ], 8116 - "dev": true, 8117 - "license": "MIT", 8118 - "optional": true, 8119 - "os": [ 8120 - "netbsd" 8121 - ], 8122 - "engines": { 8123 - "node": ">=12" 8124 - } 8125 - }, 8126 - "node_modules/drizzle-kit/node_modules/@esbuild/openbsd-x64": { 8127 - "version": "0.19.12", 8128 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", 8129 - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", 8130 - "cpu": [ 8131 - "x64" 8132 - ], 8133 - "dev": true, 8134 - "license": "MIT", 8135 - "optional": true, 8136 - "os": [ 8137 - "openbsd" 8138 - ], 8139 - "engines": { 8140 - "node": ">=12" 8141 - } 8142 - }, 8143 - "node_modules/drizzle-kit/node_modules/@esbuild/sunos-x64": { 8144 - "version": "0.19.12", 8145 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", 8146 - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", 8147 - "cpu": [ 8148 - "x64" 8149 - ], 8150 - "dev": true, 8151 - "license": "MIT", 8152 - "optional": true, 8153 - "os": [ 8154 - "sunos" 8155 - ], 8156 - "engines": { 8157 - "node": ">=12" 8158 - } 8159 - }, 8160 - "node_modules/drizzle-kit/node_modules/@esbuild/win32-arm64": { 8161 - "version": "0.19.12", 8162 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", 8163 - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", 8164 - "cpu": [ 8165 - "arm64" 8166 - ], 8167 - "dev": true, 8168 - "license": "MIT", 8169 - "optional": true, 8170 - "os": [ 8171 - "win32" 8172 - ], 8173 - "engines": { 8174 - "node": ">=12" 8175 - } 8176 - }, 8177 - "node_modules/drizzle-kit/node_modules/@esbuild/win32-ia32": { 8178 - "version": "0.19.12", 8179 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", 8180 - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", 8181 - "cpu": [ 8182 - "ia32" 8183 - ], 8184 - "dev": true, 8185 - "license": "MIT", 8186 - "optional": true, 8187 - "os": [ 8188 - "win32" 8189 - ], 8190 - "engines": { 8191 - "node": ">=12" 8192 - } 8193 - }, 8194 - "node_modules/drizzle-kit/node_modules/@esbuild/win32-x64": { 8195 - "version": "0.19.12", 8196 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", 8197 - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", 8198 - "cpu": [ 8199 - "x64" 8200 - ], 8201 - "dev": true, 8202 - "license": "MIT", 8203 - "optional": true, 8204 - "os": [ 8205 - "win32" 8206 8050 ], 8207 8051 "engines": { 8208 8052 "node": ">=12" ··· 8759 8603 "version": "3.1.2", 8760 8604 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", 8761 8605 "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", 8762 - "dev": true, 8763 8606 "engines": { 8764 8607 "node": ">=6" 8765 8608 } ··· 9766 9609 "node": ">= 0.6" 9767 9610 } 9768 9611 }, 9612 + "node_modules/forwarded-parse": { 9613 + "version": "2.1.2", 9614 + "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz", 9615 + "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==", 9616 + "license": "MIT" 9617 + }, 9769 9618 "node_modules/fraction.js": { 9770 9619 "version": "4.3.7", 9771 9620 "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", ··· 9802 9651 "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 9803 9652 "dev": true 9804 9653 }, 9805 - "node_modules/fsevents": { 9806 - "version": "2.3.3", 9807 - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 9808 - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 9809 - "dev": true, 9810 - "hasInstallScript": true, 9811 - "optional": true, 9812 - "os": [ 9813 - "darwin" 9814 - ], 9815 - "engines": { 9816 - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 9817 - } 9818 - }, 9819 9654 "node_modules/function-bind": { 9820 9655 "version": "1.1.2", 9821 9656 "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", ··· 9854 9689 "url": "https://github.com/sponsors/ljharb" 9855 9690 } 9856 9691 }, 9692 + "node_modules/gaxios": { 9693 + "version": "6.7.1", 9694 + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", 9695 + "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", 9696 + "license": "Apache-2.0", 9697 + "dependencies": { 9698 + "extend": "^3.0.2", 9699 + "https-proxy-agent": "^7.0.1", 9700 + "is-stream": "^2.0.0", 9701 + "node-fetch": "^2.6.9", 9702 + "uuid": "^9.0.1" 9703 + }, 9704 + "engines": { 9705 + "node": ">=14" 9706 + } 9707 + }, 9708 + "node_modules/gaxios/node_modules/node-fetch": { 9709 + "version": "2.7.0", 9710 + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 9711 + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 9712 + "license": "MIT", 9713 + "dependencies": { 9714 + "whatwg-url": "^5.0.0" 9715 + }, 9716 + "engines": { 9717 + "node": "4.x || >=6.0.0" 9718 + }, 9719 + "peerDependencies": { 9720 + "encoding": "^0.1.0" 9721 + }, 9722 + "peerDependenciesMeta": { 9723 + "encoding": { 9724 + "optional": true 9725 + } 9726 + } 9727 + }, 9728 + "node_modules/gaxios/node_modules/uuid": { 9729 + "version": "9.0.1", 9730 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", 9731 + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", 9732 + "funding": [ 9733 + "https://github.com/sponsors/broofa", 9734 + "https://github.com/sponsors/ctavan" 9735 + ], 9736 + "license": "MIT", 9737 + "bin": { 9738 + "uuid": "dist/bin/uuid" 9739 + } 9740 + }, 9741 + "node_modules/gcp-metadata": { 9742 + "version": "6.1.1", 9743 + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz", 9744 + "integrity": "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==", 9745 + "license": "Apache-2.0", 9746 + "dependencies": { 9747 + "gaxios": "^6.1.1", 9748 + "google-logging-utils": "^0.0.2", 9749 + "json-bigint": "^1.0.0" 9750 + }, 9751 + "engines": { 9752 + "node": ">=14" 9753 + } 9754 + }, 9755 + "node_modules/get-caller-file": { 9756 + "version": "2.0.5", 9757 + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 9758 + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 9759 + "license": "ISC", 9760 + "engines": { 9761 + "node": "6.* || 8.* || >= 10.*" 9762 + } 9763 + }, 9857 9764 "node_modules/get-intrinsic": { 9858 9765 "version": "1.3.0", 9859 9766 "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", ··· 10036 9943 "url": "https://github.com/sponsors/ljharb" 10037 9944 } 10038 9945 }, 9946 + "node_modules/google-logging-utils": { 9947 + "version": "0.0.2", 9948 + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz", 9949 + "integrity": "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==", 9950 + "license": "Apache-2.0", 9951 + "engines": { 9952 + "node": ">=14" 9953 + } 9954 + }, 10039 9955 "node_modules/gopd": { 10040 9956 "version": "1.2.0", 10041 9957 "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", ··· 10101 10017 "version": "4.0.0", 10102 10018 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 10103 10019 "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 10104 - "dev": true, 10105 10020 "engines": { 10106 10021 "node": ">=8" 10107 10022 } ··· 10159 10074 }, 10160 10075 "funding": { 10161 10076 "url": "https://github.com/sponsors/ljharb" 10077 + } 10078 + }, 10079 + "node_modules/hash.js": { 10080 + "version": "1.1.7", 10081 + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 10082 + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 10083 + "license": "MIT", 10084 + "dependencies": { 10085 + "inherits": "^2.0.3", 10086 + "minimalistic-assert": "^1.0.1" 10162 10087 } 10163 10088 }, 10164 10089 "node_modules/hasown": { ··· 10500 10425 "version": "7.0.4", 10501 10426 "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", 10502 10427 "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", 10503 - "dev": true, 10504 10428 "dependencies": { 10505 10429 "agent-base": "^7.0.2", 10506 10430 "debug": "4" ··· 10577 10501 "url": "https://github.com/sponsors/sindresorhus" 10578 10502 } 10579 10503 }, 10504 + "node_modules/import-in-the-middle": { 10505 + "version": "1.14.2", 10506 + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.2.tgz", 10507 + "integrity": "sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==", 10508 + "license": "Apache-2.0", 10509 + "dependencies": { 10510 + "acorn": "^8.14.0", 10511 + "acorn-import-attributes": "^1.9.5", 10512 + "cjs-module-lexer": "^1.2.2", 10513 + "module-details-from-path": "^1.0.3" 10514 + } 10515 + }, 10580 10516 "node_modules/imurmurhash": { 10581 10517 "version": "0.1.4", 10582 10518 "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", ··· 10607 10543 "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", 10608 10544 "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==" 10609 10545 }, 10546 + "node_modules/inngest": { 10547 + "version": "3.40.1", 10548 + "resolved": "https://registry.npmjs.org/inngest/-/inngest-3.40.1.tgz", 10549 + "integrity": "sha512-SC9Ly28i8NI+WymttE8Jk41L9r/wHXWOnlQoy7e7yoQyZI+R2C4S77DpFwzgEaqGT/H8puc1VDli84RoaffXBg==", 10550 + "license": "Apache-2.0", 10551 + "dependencies": { 10552 + "@bufbuild/protobuf": "^2.2.3", 10553 + "@inngest/ai": "^0.1.3", 10554 + "@jpwilliams/waitgroup": "^2.1.1", 10555 + "@opentelemetry/api": "^1.9.0", 10556 + "@opentelemetry/auto-instrumentations-node": "^0.56.1", 10557 + "@opentelemetry/context-async-hooks": "^1.30.1", 10558 + "@opentelemetry/exporter-trace-otlp-http": "^0.57.2", 10559 + "@opentelemetry/instrumentation": "^0.57.2", 10560 + "@opentelemetry/resources": "^1.30.1", 10561 + "@opentelemetry/sdk-trace-base": "^1.30.1", 10562 + "@types/debug": "^4.1.12", 10563 + "canonicalize": "^1.0.8", 10564 + "chalk": "^4.1.2", 10565 + "cross-fetch": "^4.0.0", 10566 + "debug": "^4.3.4", 10567 + "hash.js": "^1.1.7", 10568 + "json-stringify-safe": "^5.0.1", 10569 + "ms": "^2.1.3", 10570 + "serialize-error-cjs": "^0.1.3", 10571 + "strip-ansi": "^5.2.0", 10572 + "temporal-polyfill": "^0.2.5", 10573 + "zod": "~3.22.3" 10574 + }, 10575 + "engines": { 10576 + "node": ">=14" 10577 + }, 10578 + "peerDependencies": { 10579 + "@sveltejs/kit": ">=1.27.3", 10580 + "@vercel/node": ">=2.15.9", 10581 + "aws-lambda": ">=1.0.7", 10582 + "express": ">=4.19.2", 10583 + "fastify": ">=4.21.0", 10584 + "h3": ">=1.8.1", 10585 + "hono": ">=4.2.7", 10586 + "koa": ">=2.14.2", 10587 + "next": ">=12.0.0", 10588 + "typescript": ">=4.7.2" 10589 + }, 10590 + "peerDependenciesMeta": { 10591 + "@sveltejs/kit": { 10592 + "optional": true 10593 + }, 10594 + "@vercel/node": { 10595 + "optional": true 10596 + }, 10597 + "aws-lambda": { 10598 + "optional": true 10599 + }, 10600 + "express": { 10601 + "optional": true 10602 + }, 10603 + "fastify": { 10604 + "optional": true 10605 + }, 10606 + "h3": { 10607 + "optional": true 10608 + }, 10609 + "hono": { 10610 + "optional": true 10611 + }, 10612 + "koa": { 10613 + "optional": true 10614 + }, 10615 + "next": { 10616 + "optional": true 10617 + }, 10618 + "typescript": { 10619 + "optional": true 10620 + } 10621 + } 10622 + }, 10623 + "node_modules/inngest/node_modules/ansi-regex": { 10624 + "version": "4.1.1", 10625 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", 10626 + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", 10627 + "license": "MIT", 10628 + "engines": { 10629 + "node": ">=6" 10630 + } 10631 + }, 10632 + "node_modules/inngest/node_modules/strip-ansi": { 10633 + "version": "5.2.0", 10634 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 10635 + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 10636 + "license": "MIT", 10637 + "dependencies": { 10638 + "ansi-regex": "^4.1.0" 10639 + }, 10640 + "engines": { 10641 + "node": ">=6" 10642 + } 10643 + }, 10644 + "node_modules/inngest/node_modules/zod": { 10645 + "version": "3.22.5", 10646 + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.5.tgz", 10647 + "integrity": "sha512-HqnGsCdVZ2xc0qWPLdO25WnseXThh0kEYKIdV5F/hTHO75hNZFp8thxSeHhiPrHZKrFTo1SOgkAj9po5bexZlw==", 10648 + "license": "MIT", 10649 + "funding": { 10650 + "url": "https://github.com/sponsors/colinhacks" 10651 + } 10652 + }, 10610 10653 "node_modules/internal-slot": { 10611 10654 "version": "1.1.0", 10612 10655 "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", ··· 10795 10838 "version": "2.16.1", 10796 10839 "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", 10797 10840 "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", 10798 - "dev": true, 10799 10841 "license": "MIT", 10800 10842 "dependencies": { 10801 10843 "hasown": "^2.0.2" ··· 10880 10922 "version": "3.0.0", 10881 10923 "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 10882 10924 "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 10883 - "dev": true, 10884 10925 "engines": { 10885 10926 "node": ">=8" 10886 10927 } ··· 11045 11086 }, 11046 11087 "funding": { 11047 11088 "url": "https://github.com/sponsors/ljharb" 11089 + } 11090 + }, 11091 + "node_modules/is-stream": { 11092 + "version": "2.0.1", 11093 + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 11094 + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 11095 + "license": "MIT", 11096 + "engines": { 11097 + "node": ">=8" 11098 + }, 11099 + "funding": { 11100 + "url": "https://github.com/sponsors/sindresorhus" 11048 11101 } 11049 11102 }, 11050 11103 "node_modules/is-string": { ··· 11227 11280 "js-yaml": "bin/js-yaml.js" 11228 11281 } 11229 11282 }, 11283 + "node_modules/json-bigint": { 11284 + "version": "1.0.0", 11285 + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", 11286 + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", 11287 + "license": "MIT", 11288 + "dependencies": { 11289 + "bignumber.js": "^9.0.0" 11290 + } 11291 + }, 11230 11292 "node_modules/json-buffer": { 11231 11293 "version": "3.0.1", 11232 11294 "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", ··· 11262 11324 "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 11263 11325 "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 11264 11326 "dev": true 11327 + }, 11328 + "node_modules/json-stringify-safe": { 11329 + "version": "5.0.1", 11330 + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 11331 + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", 11332 + "license": "ISC" 11265 11333 }, 11266 11334 "node_modules/json5": { 11267 11335 "version": "1.0.2", ··· 11467 11535 "url": "https://github.com/sponsors/sindresorhus" 11468 11536 } 11469 11537 }, 11538 + "node_modules/lodash.camelcase": { 11539 + "version": "4.3.0", 11540 + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 11541 + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", 11542 + "license": "MIT" 11543 + }, 11470 11544 "node_modules/lodash.defaults": { 11471 11545 "version": "4.2.0", 11472 11546 "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", ··· 11532 11606 "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", 11533 11607 "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", 11534 11608 "dev": true 11609 + }, 11610 + "node_modules/long": { 11611 + "version": "5.3.2", 11612 + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", 11613 + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", 11614 + "license": "Apache-2.0" 11535 11615 }, 11536 11616 "node_modules/longest-streak": { 11537 11617 "version": "3.1.0", ··· 12737 12817 "node": ">=14.0" 12738 12818 } 12739 12819 }, 12820 + "node_modules/minimalistic-assert": { 12821 + "version": "1.0.1", 12822 + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 12823 + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", 12824 + "license": "ISC" 12825 + }, 12740 12826 "node_modules/minimatch": { 12741 12827 "version": "3.1.2", 12742 12828 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", ··· 12872 12958 "url": "https://github.com/sponsors/isaacs" 12873 12959 } 12874 12960 }, 12961 + "node_modules/module-details-from-path": { 12962 + "version": "1.0.4", 12963 + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", 12964 + "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", 12965 + "license": "MIT" 12966 + }, 12875 12967 "node_modules/mrmime": { 12876 12968 "version": "2.0.1", 12877 12969 "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", ··· 12882 12974 } 12883 12975 }, 12884 12976 "node_modules/ms": { 12885 - "version": "2.1.2", 12886 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 12887 - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 12977 + "version": "2.1.3", 12978 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 12979 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 12980 + "license": "MIT" 12888 12981 }, 12889 12982 "node_modules/multiformats": { 12890 12983 "version": "13.3.2", ··· 13516 13609 "node_modules/path-parse": { 13517 13610 "version": "1.0.7", 13518 13611 "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 13519 - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 13520 - "dev": true 13612 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 13521 13613 }, 13522 13614 "node_modules/path-scurry": { 13523 13615 "version": "1.11.1", ··· 13540 13632 "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", 13541 13633 "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", 13542 13634 "dev": true 13635 + }, 13636 + "node_modules/pg-int8": { 13637 + "version": "1.0.1", 13638 + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", 13639 + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", 13640 + "license": "ISC", 13641 + "engines": { 13642 + "node": ">=4.0.0" 13643 + } 13644 + }, 13645 + "node_modules/pg-protocol": { 13646 + "version": "1.10.3", 13647 + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", 13648 + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", 13649 + "license": "MIT" 13650 + }, 13651 + "node_modules/pg-types": { 13652 + "version": "2.2.0", 13653 + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", 13654 + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", 13655 + "license": "MIT", 13656 + "dependencies": { 13657 + "pg-int8": "1.0.1", 13658 + "postgres-array": "~2.0.0", 13659 + "postgres-bytea": "~1.0.0", 13660 + "postgres-date": "~1.0.4", 13661 + "postgres-interval": "^1.1.0" 13662 + }, 13663 + "engines": { 13664 + "node": ">=4" 13665 + } 13543 13666 }, 13544 13667 "node_modules/picocolors": { 13545 13668 "version": "1.0.1", ··· 13785 13908 "url": "https://github.com/sponsors/porsager" 13786 13909 } 13787 13910 }, 13911 + "node_modules/postgres-array": { 13912 + "version": "2.0.0", 13913 + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", 13914 + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", 13915 + "license": "MIT", 13916 + "engines": { 13917 + "node": ">=4" 13918 + } 13919 + }, 13920 + "node_modules/postgres-bytea": { 13921 + "version": "1.0.0", 13922 + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", 13923 + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", 13924 + "license": "MIT", 13925 + "engines": { 13926 + "node": ">=0.10.0" 13927 + } 13928 + }, 13929 + "node_modules/postgres-date": { 13930 + "version": "1.0.7", 13931 + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", 13932 + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", 13933 + "license": "MIT", 13934 + "engines": { 13935 + "node": ">=0.10.0" 13936 + } 13937 + }, 13938 + "node_modules/postgres-interval": { 13939 + "version": "1.2.0", 13940 + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", 13941 + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", 13942 + "license": "MIT", 13943 + "dependencies": { 13944 + "xtend": "^4.0.0" 13945 + }, 13946 + "engines": { 13947 + "node": ">=0.10.0" 13948 + } 13949 + }, 13788 13950 "node_modules/prelude-ls": { 13789 13951 "version": "1.2.1", 13790 13952 "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", ··· 14063 14225 "prosemirror-model": "^1.20.0", 14064 14226 "prosemirror-state": "^1.0.0", 14065 14227 "prosemirror-transform": "^1.1.0" 14228 + } 14229 + }, 14230 + "node_modules/protobufjs": { 14231 + "version": "7.5.3", 14232 + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.3.tgz", 14233 + "integrity": "sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==", 14234 + "hasInstallScript": true, 14235 + "license": "BSD-3-Clause", 14236 + "dependencies": { 14237 + "@protobufjs/aspromise": "^1.1.2", 14238 + "@protobufjs/base64": "^1.1.2", 14239 + "@protobufjs/codegen": "^2.0.4", 14240 + "@protobufjs/eventemitter": "^1.1.0", 14241 + "@protobufjs/fetch": "^1.1.0", 14242 + "@protobufjs/float": "^1.0.2", 14243 + "@protobufjs/inquire": "^1.1.0", 14244 + "@protobufjs/path": "^1.1.2", 14245 + "@protobufjs/pool": "^1.1.0", 14246 + "@protobufjs/utf8": "^1.1.0", 14247 + "@types/node": ">=13.7.0", 14248 + "long": "^5.0.0" 14249 + }, 14250 + "engines": { 14251 + "node": ">=12.0.0" 14066 14252 } 14067 14253 }, 14068 14254 "node_modules/proxy-addr": { ··· 14841 15027 "node": ">=14.8.0" 14842 15028 } 14843 15029 }, 15030 + "node_modules/require-directory": { 15031 + "version": "2.1.1", 15032 + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 15033 + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 15034 + "license": "MIT", 15035 + "engines": { 15036 + "node": ">=0.10.0" 15037 + } 15038 + }, 14844 15039 "node_modules/require-from-string": { 14845 15040 "version": "2.0.2", 14846 15041 "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", ··· 14851 15046 "node": ">=0.10.0" 14852 15047 } 14853 15048 }, 15049 + "node_modules/require-in-the-middle": { 15050 + "version": "7.5.2", 15051 + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz", 15052 + "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==", 15053 + "license": "MIT", 15054 + "dependencies": { 15055 + "debug": "^4.3.5", 15056 + "module-details-from-path": "^1.0.3", 15057 + "resolve": "^1.22.8" 15058 + }, 15059 + "engines": { 15060 + "node": ">=8.6.0" 15061 + } 15062 + }, 14854 15063 "node_modules/resolve": { 14855 15064 "version": "1.22.8", 14856 15065 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 14857 15066 "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 14858 - "dev": true, 14859 15067 "dependencies": { 14860 15068 "is-core-module": "^2.13.0", 14861 15069 "path-parse": "^1.0.7", ··· 15195 15403 "node": ">=4" 15196 15404 } 15197 15405 }, 15198 - "node_modules/send/node_modules/ms": { 15199 - "version": "2.1.3", 15200 - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 15201 - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 15202 - "license": "MIT" 15406 + "node_modules/serialize-error-cjs": { 15407 + "version": "0.1.4", 15408 + "resolved": "https://registry.npmjs.org/serialize-error-cjs/-/serialize-error-cjs-0.1.4.tgz", 15409 + "integrity": "sha512-6a6dNqipzbCPlTFgztfNP2oG+IGcflMe/01zSzGrQcxGMKbIjOemBBD85pH92klWaJavAUWxAh9Z0aU28zxW6A==", 15410 + "deprecated": "Rolling release, please update to 0.2.0", 15411 + "license": "MIT-0", 15412 + "funding": { 15413 + "url": "https://github.com/sponsors/finwo" 15414 + } 15203 15415 }, 15204 15416 "node_modules/serve-static": { 15205 15417 "version": "1.16.2", ··· 15346 15558 "@shikijs/vscode-textmate": "^10.0.2", 15347 15559 "@types/hast": "^3.0.4" 15348 15560 } 15561 + }, 15562 + "node_modules/shimmer": { 15563 + "version": "1.2.1", 15564 + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", 15565 + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", 15566 + "license": "BSD-2-Clause" 15349 15567 }, 15350 15568 "node_modules/side-channel": { 15351 15569 "version": "1.1.0", ··· 15569 15787 "version": "4.2.3", 15570 15788 "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 15571 15789 "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 15572 - "dev": true, 15573 15790 "dependencies": { 15574 15791 "emoji-regex": "^8.0.0", 15575 15792 "is-fullwidth-code-point": "^3.0.0", ··· 15603 15820 "node_modules/string-width/node_modules/emoji-regex": { 15604 15821 "version": "8.0.0", 15605 15822 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 15606 - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 15607 - "dev": true 15823 + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 15608 15824 }, 15609 15825 "node_modules/string.prototype.includes": { 15610 15826 "version": "2.0.1", ··· 15735 15951 "version": "6.0.1", 15736 15952 "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 15737 15953 "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 15738 - "dev": true, 15739 15954 "dependencies": { 15740 15955 "ansi-regex": "^5.0.1" 15741 15956 }, ··· 15926 16141 "version": "7.2.0", 15927 16142 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 15928 16143 "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 15929 - "dev": true, 15930 16144 "dependencies": { 15931 16145 "has-flag": "^4.0.0" 15932 16146 }, ··· 15938 16152 "version": "1.0.0", 15939 16153 "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 15940 16154 "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 15941 - "dev": true, 15942 16155 "engines": { 15943 16156 "node": ">= 0.4" 15944 16157 }, ··· 16022 16235 "node": ">=18" 16023 16236 } 16024 16237 }, 16238 + "node_modules/temporal-polyfill": { 16239 + "version": "0.2.5", 16240 + "resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.2.5.tgz", 16241 + "integrity": "sha512-ye47xp8Cb0nDguAhrrDS1JT1SzwEV9e26sSsrWzVu+yPZ7LzceEcH0i2gci9jWfOfSCCgM3Qv5nOYShVUUFUXA==", 16242 + "license": "MIT", 16243 + "dependencies": { 16244 + "temporal-spec": "^0.2.4" 16245 + } 16246 + }, 16247 + "node_modules/temporal-spec": { 16248 + "version": "0.2.4", 16249 + "resolved": "https://registry.npmjs.org/temporal-spec/-/temporal-spec-0.2.4.tgz", 16250 + "integrity": "sha512-lDMFv4nKQrSjlkHKAlHVqKrBG4DyFfa9F74cmBZ3Iy3ed8yvWnlWSIdi4IKfSqwmazAohBNwiN64qGx4y5Q3IQ==", 16251 + "license": "ISC" 16252 + }, 16025 16253 "node_modules/text-table": { 16026 16254 "version": "0.2.0", 16027 16255 "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", ··· 16387 16615 "version": "5.8.3", 16388 16616 "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", 16389 16617 "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", 16390 - "dev": true, 16391 16618 "license": "Apache-2.0", 16392 16619 "bin": { 16393 16620 "tsc": "bin/tsc", ··· 17013 17240 } 17014 17241 } 17015 17242 }, 17016 - "node_modules/wrangler/node_modules/@esbuild/android-arm": { 17017 - "version": "0.17.19", 17018 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 17019 - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 17020 - "cpu": [ 17021 - "arm" 17022 - ], 17023 - "dev": true, 17024 - "optional": true, 17025 - "os": [ 17026 - "android" 17027 - ], 17028 - "engines": { 17029 - "node": ">=12" 17030 - } 17031 - }, 17032 - "node_modules/wrangler/node_modules/@esbuild/android-arm64": { 17033 - "version": "0.17.19", 17034 - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 17035 - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 17036 - "cpu": [ 17037 - "arm64" 17038 - ], 17039 - "dev": true, 17040 - "optional": true, 17041 - "os": [ 17042 - "android" 17043 - ], 17044 - "engines": { 17045 - "node": ">=12" 17046 - } 17047 - }, 17048 - "node_modules/wrangler/node_modules/@esbuild/android-x64": { 17049 - "version": "0.17.19", 17050 - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 17051 - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 17052 - "cpu": [ 17053 - "x64" 17054 - ], 17055 - "dev": true, 17056 - "optional": true, 17057 - "os": [ 17058 - "android" 17059 - ], 17060 - "engines": { 17061 - "node": ">=12" 17062 - } 17063 - }, 17064 - "node_modules/wrangler/node_modules/@esbuild/darwin-arm64": { 17065 - "version": "0.17.19", 17066 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 17067 - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 17068 - "cpu": [ 17069 - "arm64" 17070 - ], 17071 - "dev": true, 17072 - "optional": true, 17073 - "os": [ 17074 - "darwin" 17075 - ], 17076 - "engines": { 17077 - "node": ">=12" 17078 - } 17079 - }, 17080 - "node_modules/wrangler/node_modules/@esbuild/darwin-x64": { 17081 - "version": "0.17.19", 17082 - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 17083 - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 17084 - "cpu": [ 17085 - "x64" 17086 - ], 17087 - "dev": true, 17088 - "optional": true, 17089 - "os": [ 17090 - "darwin" 17091 - ], 17092 - "engines": { 17093 - "node": ">=12" 17094 - } 17095 - }, 17096 - "node_modules/wrangler/node_modules/@esbuild/freebsd-arm64": { 17097 - "version": "0.17.19", 17098 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 17099 - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 17100 - "cpu": [ 17101 - "arm64" 17102 - ], 17103 - "dev": true, 17104 - "optional": true, 17105 - "os": [ 17106 - "freebsd" 17107 - ], 17108 - "engines": { 17109 - "node": ">=12" 17110 - } 17111 - }, 17112 - "node_modules/wrangler/node_modules/@esbuild/freebsd-x64": { 17113 - "version": "0.17.19", 17114 - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 17115 - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 17116 - "cpu": [ 17117 - "x64" 17118 - ], 17119 - "dev": true, 17120 - "optional": true, 17121 - "os": [ 17122 - "freebsd" 17123 - ], 17124 - "engines": { 17125 - "node": ">=12" 17126 - } 17127 - }, 17128 - "node_modules/wrangler/node_modules/@esbuild/linux-arm": { 17129 - "version": "0.17.19", 17130 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 17131 - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 17132 - "cpu": [ 17133 - "arm" 17134 - ], 17135 - "dev": true, 17136 - "optional": true, 17137 - "os": [ 17138 - "linux" 17139 - ], 17140 - "engines": { 17141 - "node": ">=12" 17142 - } 17143 - }, 17144 - "node_modules/wrangler/node_modules/@esbuild/linux-arm64": { 17145 - "version": "0.17.19", 17146 - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 17147 - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 17148 - "cpu": [ 17149 - "arm64" 17150 - ], 17151 - "dev": true, 17152 - "optional": true, 17153 - "os": [ 17154 - "linux" 17155 - ], 17156 - "engines": { 17157 - "node": ">=12" 17158 - } 17159 - }, 17160 - "node_modules/wrangler/node_modules/@esbuild/linux-ia32": { 17161 - "version": "0.17.19", 17162 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 17163 - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 17164 - "cpu": [ 17165 - "ia32" 17166 - ], 17167 - "dev": true, 17168 - "optional": true, 17169 - "os": [ 17170 - "linux" 17171 - ], 17172 - "engines": { 17173 - "node": ">=12" 17174 - } 17175 - }, 17176 - "node_modules/wrangler/node_modules/@esbuild/linux-loong64": { 17177 - "version": "0.17.19", 17178 - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 17179 - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 17180 - "cpu": [ 17181 - "loong64" 17182 - ], 17183 - "dev": true, 17184 - "optional": true, 17185 - "os": [ 17186 - "linux" 17187 - ], 17188 - "engines": { 17189 - "node": ">=12" 17190 - } 17191 - }, 17192 - "node_modules/wrangler/node_modules/@esbuild/linux-mips64el": { 17193 - "version": "0.17.19", 17194 - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 17195 - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 17196 - "cpu": [ 17197 - "mips64el" 17198 - ], 17199 - "dev": true, 17200 - "optional": true, 17201 - "os": [ 17202 - "linux" 17203 - ], 17204 - "engines": { 17205 - "node": ">=12" 17206 - } 17207 - }, 17208 - "node_modules/wrangler/node_modules/@esbuild/linux-ppc64": { 17209 - "version": "0.17.19", 17210 - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 17211 - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 17212 - "cpu": [ 17213 - "ppc64" 17214 - ], 17215 - "dev": true, 17216 - "optional": true, 17217 - "os": [ 17218 - "linux" 17219 - ], 17220 - "engines": { 17221 - "node": ">=12" 17222 - } 17223 - }, 17224 - "node_modules/wrangler/node_modules/@esbuild/linux-riscv64": { 17225 - "version": "0.17.19", 17226 - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 17227 - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 17228 - "cpu": [ 17229 - "riscv64" 17230 - ], 17231 - "dev": true, 17232 - "optional": true, 17233 - "os": [ 17234 - "linux" 17235 - ], 17236 - "engines": { 17237 - "node": ">=12" 17238 - } 17239 - }, 17240 - "node_modules/wrangler/node_modules/@esbuild/linux-s390x": { 17241 - "version": "0.17.19", 17242 - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 17243 - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 17244 - "cpu": [ 17245 - "s390x" 17246 - ], 17247 - "dev": true, 17248 - "optional": true, 17249 - "os": [ 17250 - "linux" 17251 - ], 17252 - "engines": { 17253 - "node": ">=12" 17254 - } 17255 - }, 17256 17243 "node_modules/wrangler/node_modules/@esbuild/linux-x64": { 17257 17244 "version": "0.17.19", 17258 17245 "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", ··· 17269 17256 "node": ">=12" 17270 17257 } 17271 17258 }, 17272 - "node_modules/wrangler/node_modules/@esbuild/netbsd-x64": { 17273 - "version": "0.17.19", 17274 - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 17275 - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 17276 - "cpu": [ 17277 - "x64" 17278 - ], 17279 - "dev": true, 17280 - "optional": true, 17281 - "os": [ 17282 - "netbsd" 17283 - ], 17284 - "engines": { 17285 - "node": ">=12" 17286 - } 17287 - }, 17288 - "node_modules/wrangler/node_modules/@esbuild/openbsd-x64": { 17289 - "version": "0.17.19", 17290 - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 17291 - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 17292 - "cpu": [ 17293 - "x64" 17294 - ], 17295 - "dev": true, 17296 - "optional": true, 17297 - "os": [ 17298 - "openbsd" 17299 - ], 17300 - "engines": { 17301 - "node": ">=12" 17302 - } 17303 - }, 17304 - "node_modules/wrangler/node_modules/@esbuild/sunos-x64": { 17305 - "version": "0.17.19", 17306 - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 17307 - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 17308 - "cpu": [ 17309 - "x64" 17310 - ], 17311 - "dev": true, 17312 - "optional": true, 17313 - "os": [ 17314 - "sunos" 17315 - ], 17316 - "engines": { 17317 - "node": ">=12" 17318 - } 17319 - }, 17320 - "node_modules/wrangler/node_modules/@esbuild/win32-arm64": { 17321 - "version": "0.17.19", 17322 - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 17323 - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 17324 - "cpu": [ 17325 - "arm64" 17326 - ], 17327 - "dev": true, 17328 - "optional": true, 17329 - "os": [ 17330 - "win32" 17331 - ], 17332 - "engines": { 17333 - "node": ">=12" 17334 - } 17335 - }, 17336 - "node_modules/wrangler/node_modules/@esbuild/win32-ia32": { 17337 - "version": "0.17.19", 17338 - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 17339 - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 17340 - "cpu": [ 17341 - "ia32" 17342 - ], 17343 - "dev": true, 17344 - "optional": true, 17345 - "os": [ 17346 - "win32" 17347 - ], 17348 - "engines": { 17349 - "node": ">=12" 17350 - } 17351 - }, 17352 - "node_modules/wrangler/node_modules/@esbuild/win32-x64": { 17353 - "version": "0.17.19", 17354 - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 17355 - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 17356 - "cpu": [ 17357 - "x64" 17358 - ], 17359 - "dev": true, 17360 - "optional": true, 17361 - "os": [ 17362 - "win32" 17363 - ], 17364 - "engines": { 17365 - "node": ">=12" 17366 - } 17367 - }, 17368 17259 "node_modules/wrangler/node_modules/esbuild": { 17369 17260 "version": "0.17.19", 17370 17261 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", ··· 17402 17293 "@esbuild/win32-x64": "0.17.19" 17403 17294 } 17404 17295 }, 17296 + "node_modules/wrap-ansi": { 17297 + "version": "7.0.0", 17298 + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 17299 + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 17300 + "license": "MIT", 17301 + "dependencies": { 17302 + "ansi-styles": "^4.0.0", 17303 + "string-width": "^4.1.0", 17304 + "strip-ansi": "^6.0.0" 17305 + }, 17306 + "engines": { 17307 + "node": ">=10" 17308 + }, 17309 + "funding": { 17310 + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 17311 + } 17312 + }, 17405 17313 "node_modules/wrap-ansi-cjs": { 17406 17314 "name": "wrap-ansi", 17407 17315 "version": "7.0.0", ··· 17480 17388 "node": ">=6.0" 17481 17389 } 17482 17390 }, 17391 + "node_modules/xtend": { 17392 + "version": "4.0.2", 17393 + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 17394 + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 17395 + "license": "MIT", 17396 + "engines": { 17397 + "node": ">=0.4" 17398 + } 17399 + }, 17483 17400 "node_modules/xxhash-wasm": { 17484 17401 "version": "1.0.2", 17485 17402 "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", ··· 17529 17446 "yjs": "^13.0.0" 17530 17447 } 17531 17448 }, 17449 + "node_modules/y18n": { 17450 + "version": "5.0.8", 17451 + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 17452 + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 17453 + "license": "ISC", 17454 + "engines": { 17455 + "node": ">=10" 17456 + } 17457 + }, 17532 17458 "node_modules/yallist": { 17533 17459 "version": "5.0.0", 17534 17460 "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", ··· 17548 17474 }, 17549 17475 "engines": { 17550 17476 "node": ">= 14" 17477 + } 17478 + }, 17479 + "node_modules/yargs": { 17480 + "version": "17.7.2", 17481 + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 17482 + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 17483 + "license": "MIT", 17484 + "dependencies": { 17485 + "cliui": "^8.0.1", 17486 + "escalade": "^3.1.1", 17487 + "get-caller-file": "^2.0.5", 17488 + "require-directory": "^2.1.1", 17489 + "string-width": "^4.2.3", 17490 + "y18n": "^5.0.5", 17491 + "yargs-parser": "^21.1.1" 17492 + }, 17493 + "engines": { 17494 + "node": ">=12" 17495 + } 17496 + }, 17497 + "node_modules/yargs-parser": { 17498 + "version": "21.1.1", 17499 + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 17500 + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 17501 + "license": "ISC", 17502 + "engines": { 17503 + "node": ">=12" 17551 17504 } 17552 17505 }, 17553 17506 "node_modules/yesno": {
+1
package.json
··· 52 52 "feed": "^5.0.1", 53 53 "fractional-indexing": "^3.2.0", 54 54 "hono": "^4.7.11", 55 + "inngest": "^3.40.1", 55 56 "ioredis": "^5.6.1", 56 57 "katex": "^0.16.22", 57 58 "linkifyjs": "^4.2.0",
+54
supabase/database.types.ts
··· 34 34 } 35 35 public: { 36 36 Tables: { 37 + bsky_posts: { 38 + Row: { 39 + cid: string 40 + indexed_at: string 41 + post_view: Json 42 + uri: string 43 + } 44 + Insert: { 45 + cid: string 46 + indexed_at?: string 47 + post_view: Json 48 + uri: string 49 + } 50 + Update: { 51 + cid?: string 52 + indexed_at?: string 53 + post_view?: Json 54 + uri?: string 55 + } 56 + Relationships: [] 57 + } 37 58 bsky_profiles: { 38 59 Row: { 39 60 did: string ··· 148 169 isOneToOne: false 149 170 referencedRelation: "identities" 150 171 referencedColumns: ["id"] 172 + }, 173 + ] 174 + } 175 + document_mentions_in_bsky: { 176 + Row: { 177 + document: string 178 + link: string 179 + uri: string 180 + } 181 + Insert: { 182 + document: string 183 + link: string 184 + uri: string 185 + } 186 + Update: { 187 + document?: string 188 + link?: string 189 + uri?: string 190 + } 191 + Relationships: [ 192 + { 193 + foreignKeyName: "document_mentions_in_bsky_document_fkey" 194 + columns: ["document"] 195 + isOneToOne: false 196 + referencedRelation: "documents" 197 + referencedColumns: ["uri"] 198 + }, 199 + { 200 + foreignKeyName: "document_mentions_in_bsky_uri_fkey" 201 + columns: ["uri"] 202 + isOneToOne: false 203 + referencedRelation: "bsky_posts" 204 + referencedColumns: ["uri"] 151 205 }, 152 206 ] 153 207 }
+118
supabase/migrations/20250716212938_add_document_mentions_in_bsky.sql
··· 1 + create table "public"."bsky_posts" ( 2 + "uri" text not null, 3 + "indexed_at" timestamp with time zone not null default now(), 4 + "post_view" jsonb not null, 5 + "cid" text not null 6 + ); 7 + 8 + 9 + alter table "public"."bsky_posts" enable row level security; 10 + 11 + create table "public"."document_mentions_in_bsky" ( 12 + "uri" text not null, 13 + "link" text not null, 14 + "document" text not null 15 + ); 16 + 17 + alter table "public"."document_mentions_in_bsky" enable row level security; 18 + 19 + CREATE UNIQUE INDEX bsky_posts_pkey ON public.bsky_posts USING btree (uri); 20 + 21 + CREATE UNIQUE INDEX document_mentions_in_bsky_pkey ON public.document_mentions_in_bsky USING btree (uri, document); 22 + 23 + alter table "public"."bsky_posts" add constraint "bsky_posts_pkey" PRIMARY KEY using index "bsky_posts_pkey"; 24 + 25 + alter table "public"."document_mentions_in_bsky" add constraint "document_mentions_in_bsky_pkey" PRIMARY KEY using index "document_mentions_in_bsky_pkey"; 26 + 27 + 28 + alter table "public"."document_mentions_in_bsky" add constraint "document_mentions_in_bsky_document_fkey" FOREIGN KEY (document) REFERENCES documents(uri) ON DELETE CASCADE not valid; 29 + 30 + alter table "public"."document_mentions_in_bsky" validate constraint "document_mentions_in_bsky_document_fkey"; 31 + 32 + alter table "public"."document_mentions_in_bsky" add constraint "document_mentions_in_bsky_uri_fkey" FOREIGN KEY (uri) REFERENCES bsky_posts(uri) ON DELETE CASCADE not valid; 33 + 34 + alter table "public"."document_mentions_in_bsky" validate constraint "document_mentions_in_bsky_uri_fkey"; 35 + 36 + grant delete on table "public"."bsky_posts" to "anon"; 37 + 38 + grant insert on table "public"."bsky_posts" to "anon"; 39 + 40 + grant references on table "public"."bsky_posts" to "anon"; 41 + 42 + grant select on table "public"."bsky_posts" to "anon"; 43 + 44 + grant trigger on table "public"."bsky_posts" to "anon"; 45 + 46 + grant truncate on table "public"."bsky_posts" to "anon"; 47 + 48 + grant update on table "public"."bsky_posts" to "anon"; 49 + 50 + grant delete on table "public"."bsky_posts" to "authenticated"; 51 + 52 + grant insert on table "public"."bsky_posts" to "authenticated"; 53 + 54 + grant references on table "public"."bsky_posts" to "authenticated"; 55 + 56 + grant select on table "public"."bsky_posts" to "authenticated"; 57 + 58 + grant trigger on table "public"."bsky_posts" to "authenticated"; 59 + 60 + grant truncate on table "public"."bsky_posts" to "authenticated"; 61 + 62 + grant update on table "public"."bsky_posts" to "authenticated"; 63 + 64 + grant delete on table "public"."bsky_posts" to "service_role"; 65 + 66 + grant insert on table "public"."bsky_posts" to "service_role"; 67 + 68 + grant references on table "public"."bsky_posts" to "service_role"; 69 + 70 + grant select on table "public"."bsky_posts" to "service_role"; 71 + 72 + grant trigger on table "public"."bsky_posts" to "service_role"; 73 + 74 + grant truncate on table "public"."bsky_posts" to "service_role"; 75 + 76 + grant update on table "public"."bsky_posts" to "service_role"; 77 + 78 + grant delete on table "public"."document_mentions_in_bsky" to "anon"; 79 + 80 + grant insert on table "public"."document_mentions_in_bsky" to "anon"; 81 + 82 + grant references on table "public"."document_mentions_in_bsky" to "anon"; 83 + 84 + grant select on table "public"."document_mentions_in_bsky" to "anon"; 85 + 86 + grant trigger on table "public"."document_mentions_in_bsky" to "anon"; 87 + 88 + grant truncate on table "public"."document_mentions_in_bsky" to "anon"; 89 + 90 + grant update on table "public"."document_mentions_in_bsky" to "anon"; 91 + 92 + grant delete on table "public"."document_mentions_in_bsky" to "authenticated"; 93 + 94 + grant insert on table "public"."document_mentions_in_bsky" to "authenticated"; 95 + 96 + grant references on table "public"."document_mentions_in_bsky" to "authenticated"; 97 + 98 + grant select on table "public"."document_mentions_in_bsky" to "authenticated"; 99 + 100 + grant trigger on table "public"."document_mentions_in_bsky" to "authenticated"; 101 + 102 + grant truncate on table "public"."document_mentions_in_bsky" to "authenticated"; 103 + 104 + grant update on table "public"."document_mentions_in_bsky" to "authenticated"; 105 + 106 + grant delete on table "public"."document_mentions_in_bsky" to "service_role"; 107 + 108 + grant insert on table "public"."document_mentions_in_bsky" to "service_role"; 109 + 110 + grant references on table "public"."document_mentions_in_bsky" to "service_role"; 111 + 112 + grant select on table "public"."document_mentions_in_bsky" to "service_role"; 113 + 114 + grant trigger on table "public"."document_mentions_in_bsky" to "service_role"; 115 + 116 + grant truncate on table "public"."document_mentions_in_bsky" to "service_role"; 117 + 118 + grant update on table "public"."document_mentions_in_bsky" to "service_role";