Bluesky app fork with some witchin' additions 💫

Bsky link card service (#4547)

* setup bskycard

* quick proof of concept for png card generation

* bskycard: use jsx

* bskycard: 3x5 profile layout

* bskycard: add butterfly overlay

* bskycard: tidy

* bskycard: separate and reorganize

* bskycard: tidy

* bskycard: tidy

* bskycard: tidy

* bskycard: poc of transparent overlay and box shadow

* bskycard: reorg impl into src/ directory

* bskycard: use more standard app structure

* bskycard: setup dockerfile, fix build

* bskycard: support for x-origin-verify

* bskycard: card layout, filter images based on labels

* bskycard: tidy

* bskycard: support cluster mode

* bskycard: handle error fetching starter pack info

* bskycard: tidy

* bskycard: fix leak on failed image fetch

* bskycard: build workflow

* bskyogcard: rename from bskycard

* bskyogcard: fix some express plumbing

* bskyogcard: add cdn tags, tidy

authored by devin ivy and committed by GitHub 51f5e6bf eac4668d

+55
.github/workflows/build-and-push-ogcard-aws.yaml
··· 1 + name: build-and-push-ogcard-aws 2 + on: 3 + push: 4 + branches: 5 + - divy/bskycard 6 + 7 + env: 8 + REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }} 9 + USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }} 10 + PASSWORD: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_PASSWORD }} 11 + IMAGE_NAME: bskyogcard 12 + 13 + jobs: 14 + ogcard-container-aws: 15 + if: github.repository == 'bluesky-social/social-app' 16 + runs-on: ubuntu-latest 17 + permissions: 18 + contents: read 19 + packages: write 20 + id-token: write 21 + 22 + steps: 23 + - name: Checkout repository 24 + uses: actions/checkout@v3 25 + 26 + - name: Setup Docker buildx 27 + uses: docker/setup-buildx-action@v1 28 + 29 + - name: Log into registry ${{ env.REGISTRY }} 30 + uses: docker/login-action@v2 31 + with: 32 + registry: ${{ env.REGISTRY }} 33 + username: ${{ env.USERNAME}} 34 + password: ${{ env.PASSWORD }} 35 + 36 + - name: Extract Docker metadata 37 + id: meta 38 + uses: docker/metadata-action@v4 39 + with: 40 + images: | 41 + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} 42 + tags: | 43 + type=sha,enable=true,priority=100,prefix=,suffix=,format=long 44 + 45 + - name: Build and push Docker image 46 + id: build-and-push 47 + uses: docker/build-push-action@v4 48 + with: 49 + context: . 50 + push: ${{ github.event_name != 'pull_request' }} 51 + file: ./Dockerfile.bskyogcard 52 + tags: ${{ steps.meta.outputs.tags }} 53 + labels: ${{ steps.meta.outputs.labels }} 54 + cache-from: type=gha 55 + cache-to: type=gha,mode=max
+41
Dockerfile.bskyogcard
··· 1 + FROM node:20.11-alpine3.18 as build 2 + 3 + # Move files into the image and install 4 + WORKDIR /app 5 + 6 + COPY ./bskyogcard/package.json ./ 7 + COPY ./bskyogcard/yarn.lock ./ 8 + RUN yarn install --frozen-lockfile 9 + 10 + COPY ./bskyogcard ./ 11 + 12 + # build then prune dev deps 13 + RUN yarn build 14 + RUN yarn install --production --ignore-scripts --prefer-offline 15 + 16 + # Uses assets from build stage to reduce build size 17 + FROM node:20.11-alpine3.18 18 + 19 + RUN apk add --update dumb-init 20 + 21 + # Avoid zombie processes, handle signal forwarding 22 + ENTRYPOINT ["dumb-init", "--"] 23 + 24 + WORKDIR /app 25 + COPY --from=build /app /app 26 + RUN mkdir /app/data && chown node /app/data 27 + 28 + VOLUME /app/data 29 + EXPOSE 3000 30 + ENV CARD_PORT=3000 31 + ENV NODE_ENV=production 32 + # potential perf issues w/ io_uring on this version of node 33 + ENV UV_USE_IO_URING=0 34 + 35 + # https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md#non-root-user 36 + USER node 37 + CMD ["node", "--heapsnapshot-signal=SIGUSR2", "--enable-source-maps", "dist/bin.js"] 38 + 39 + LABEL org.opencontainers.image.source=https://github.com/bluesky-social/social-app 40 + LABEL org.opencontainers.image.description="Bsky Card Service" 41 + LABEL org.opencontainers.image.licenses=UNLICENSED
+24
bskyogcard/package.json
··· 1 + { 2 + "name": "bskyogcard", 3 + "version": "0.0.0", 4 + "type": "module", 5 + "main": "src/index.ts", 6 + "scripts": { 7 + "start": "node --loader ts-node/esm ./src/bin.ts", 8 + "build": "tsc && cp -r src/assets dist/assets" 9 + }, 10 + "dependencies": { 11 + "@atproto/api": "0.12.19-next.0", 12 + "@atproto/common": "^0.4.0", 13 + "@resvg/resvg-js": "^2.6.2", 14 + "express": "^4.19.2", 15 + "http-terminator": "^3.2.0", 16 + "pino": "^9.2.0", 17 + "react": "^18.3.1", 18 + "satori": "^0.10.13" 19 + }, 20 + "devDependencies": { 21 + "@types/node": "^20.14.3", 22 + "typescript": "^5.4.5" 23 + } 24 + }
bskyogcard/src/assets/Inter-Bold.ttf

This is a binary file and will not be displayed.

+48
bskyogcard/src/bin.ts
··· 1 + import cluster, {Worker} from 'node:cluster' 2 + 3 + import {envInt} from '@atproto/common' 4 + 5 + import {CardService, envToCfg, httpLogger, readEnv} from './index.js' 6 + 7 + async function main() { 8 + const env = readEnv() 9 + const cfg = envToCfg(env) 10 + const card = await CardService.create(cfg) 11 + await card.start() 12 + httpLogger.info('card service is running') 13 + process.on('SIGTERM', async () => { 14 + httpLogger.info('card service is stopping') 15 + await card.destroy() 16 + httpLogger.info('card service is stopped') 17 + if (cluster.isWorker) process.exit(0) 18 + }) 19 + } 20 + 21 + const workerCount = envInt('CARD_CLUSTER_WORKER_COUNT') 22 + 23 + if (workerCount) { 24 + if (cluster.isPrimary) { 25 + httpLogger.info(`primary ${process.pid} is running`) 26 + const workers = new Set<Worker>() 27 + for (let i = 0; i < workerCount; ++i) { 28 + workers.add(cluster.fork()) 29 + } 30 + let teardown = false 31 + cluster.on('exit', worker => { 32 + workers.delete(worker) 33 + if (!teardown) { 34 + workers.add(cluster.fork()) // restart on crash 35 + } 36 + }) 37 + process.on('SIGTERM', () => { 38 + teardown = true 39 + httpLogger.info('disconnecting workers') 40 + workers.forEach(w => w.kill('SIGTERM')) 41 + }) 42 + } else { 43 + httpLogger.info(`worker ${process.pid} is running`) 44 + main() 45 + } 46 + } else { 47 + main() // non-clustering 48 + }
+16
bskyogcard/src/components/Butterfly.tsx
··· 1 + import React from 'react' 2 + 3 + export function Butterfly(props: React.SVGAttributes<SVGSVGElement>) { 4 + return ( 5 + <svg 6 + xmlns="http://www.w3.org/2000/svg" 7 + fill="none" 8 + viewBox="0 0 568 501" 9 + {...props}> 10 + <path 11 + fill="currentColor" 12 + d="M123.121 33.664C188.241 82.553 258.281 181.68 284 234.873c25.719-53.192 95.759-152.32 160.879-201.21C491.866-1.611 568-28.906 568 57.947c0 17.346-9.945 145.713-15.778 166.555-20.275 72.453-94.155 90.933-159.875 79.748C507.222 323.8 536.444 388.56 473.333 453.32c-119.86 122.992-172.272-30.859-185.702-70.281-2.462-7.227-3.614-10.608-3.631-7.733-.017-2.875-1.169.506-3.631 7.733-13.43 39.422-65.842 193.273-185.702 70.281-63.111-64.76-33.89-129.52 80.986-149.071-65.72 11.185-139.6-7.295-159.875-79.748C9.945 203.659 0 75.291 0 57.946 0-28.906 76.135-1.612 123.121 33.664Z" 13 + /> 14 + </svg> 15 + ) 16 + }
+10
bskyogcard/src/components/Img.tsx
··· 1 + import React from 'react' 2 + 3 + export function Img( 4 + props: Omit<React.ImgHTMLAttributes<HTMLImageElement>, 'src'> & {src: Buffer}, 5 + ) { 6 + const {src, ...others} = props 7 + return ( 8 + <img {...others} src={`data:image/jpeg;base64,${src.toString('base64')}`} /> 9 + ) 10 + }
+149
bskyogcard/src/components/StarterPack.tsx
··· 1 + /* eslint-disable bsky-internal/avoid-unwrapped-text */ 2 + import React from 'react' 3 + import {AppBskyGraphDefs, AppBskyGraphStarterpack} from '@atproto/api' 4 + 5 + import {Butterfly} from './Butterfly.js' 6 + import {Img} from './Img.js' 7 + 8 + export const STARTERPACK_HEIGHT = 630 9 + export const STARTERPACK_WIDTH = 1200 10 + export const TILE_SIZE = STARTERPACK_HEIGHT / 3 11 + 12 + const GRADIENT_TOP = '#0A7AFF' 13 + const GRADIENT_BOTTOM = '#59B9FF' 14 + const IMAGE_STROKE = '#359CFF' 15 + 16 + export function StarterPack(props: { 17 + starterPack: AppBskyGraphDefs.StarterPackView 18 + images: Map<string, Buffer> 19 + }) { 20 + const {starterPack, images} = props 21 + const record = AppBskyGraphStarterpack.isRecord(starterPack.record) 22 + ? starterPack.record 23 + : null 24 + const imagesArray = [...images.values()] 25 + const imageOfCreator = images.get(starterPack.creator.did) 26 + const imagesExceptCreator = [...images.entries()] 27 + .filter(([did]) => did !== starterPack.creator.did) 28 + .map(([, image]) => image) 29 + const imagesAcross: Buffer[] = [] 30 + if (imageOfCreator) { 31 + if (imagesExceptCreator.length >= 6) { 32 + imagesAcross.push(...imagesExceptCreator.slice(0, 3)) 33 + imagesAcross.push(imageOfCreator) 34 + imagesAcross.push(...imagesExceptCreator.slice(3, 6)) 35 + } else { 36 + const firstHalf = Math.floor(imagesExceptCreator.length / 2) 37 + imagesAcross.push(...imagesExceptCreator.slice(0, firstHalf)) 38 + imagesAcross.push(imageOfCreator) 39 + imagesAcross.push( 40 + ...imagesExceptCreator.slice(firstHalf, imagesExceptCreator.length), 41 + ) 42 + } 43 + } else { 44 + imagesAcross.push(...imagesExceptCreator.slice(0, 7)) 45 + } 46 + return ( 47 + <div 48 + style={{ 49 + display: 'flex', 50 + justifyContent: 'center', 51 + width: STARTERPACK_WIDTH, 52 + height: STARTERPACK_HEIGHT, 53 + backgroundColor: 'black', 54 + color: 'white', 55 + fontFamily: 'Inter', 56 + }}> 57 + {/* image tiles */} 58 + <div 59 + style={{ 60 + display: 'flex', 61 + flexWrap: 'wrap', 62 + alignItems: 'stretch', 63 + width: TILE_SIZE * 6, 64 + height: TILE_SIZE * 3, 65 + }}> 66 + {[...Array(18)].map((_, i) => { 67 + const image = imagesArray.at(i % imagesArray.length) 68 + return ( 69 + <div 70 + key={i} 71 + style={{ 72 + display: 'flex', 73 + height: TILE_SIZE, 74 + width: TILE_SIZE, 75 + }}> 76 + {image && <Img height="100%" width="100%" src={image} />} 77 + </div> 78 + ) 79 + })} 80 + {/* background overlay */} 81 + <div 82 + style={{ 83 + display: 'flex', 84 + width: '100%', 85 + height: '100%', 86 + position: 'absolute', 87 + backgroundImage: `linear-gradient(to bottom, ${GRADIENT_TOP}, ${GRADIENT_BOTTOM})`, 88 + opacity: 0.9, 89 + }} 90 + /> 91 + </div> 92 + {/* foreground text & images */} 93 + <div 94 + style={{ 95 + display: 'flex', 96 + alignItems: 'center', 97 + flexDirection: 'column', 98 + width: '100%', 99 + height: '100%', 100 + position: 'absolute', 101 + color: 'white', 102 + }}> 103 + <div 104 + style={{ 105 + color: 'white', 106 + padding: 60, 107 + fontSize: 40, 108 + }}> 109 + JOIN THE CONVERSATION 110 + </div> 111 + <div style={{display: 'flex'}}> 112 + {imagesAcross.map((image, i) => { 113 + return ( 114 + <div 115 + key={i} 116 + style={{ 117 + display: 'flex', 118 + height: 172 + 15 * 2, 119 + width: 172 + 15 * 2, 120 + margin: -15, 121 + border: `15px solid ${IMAGE_STROKE}`, 122 + borderRadius: '50%', 123 + overflow: 'hidden', 124 + }}> 125 + <Img height="100%" width="100%" src={image} /> 126 + </div> 127 + ) 128 + })} 129 + </div> 130 + <div 131 + style={{ 132 + padding: '75px 30px 0px', 133 + fontSize: 65, 134 + }}> 135 + {record?.name || 'Starter Pack'} 136 + </div> 137 + <div 138 + style={{ 139 + display: 'flex', 140 + fontSize: 40, 141 + justifyContent: 'center', 142 + padding: '30px 30px 10px', 143 + }}> 144 + on <Butterfly width="65" style={{margin: '-7px 10px 0'}} /> Bluesky 145 + </div> 146 + </div> 147 + </div> 148 + ) 149 + }
+40
bskyogcard/src/config.ts
··· 1 + import {envInt, envStr} from '@atproto/common' 2 + 3 + export type Config = { 4 + service: ServiceConfig 5 + } 6 + 7 + export type ServiceConfig = { 8 + port: number 9 + version?: string 10 + appviewUrl: string 11 + originVerify?: string 12 + } 13 + 14 + export type Environment = { 15 + port?: number 16 + version?: string 17 + appviewUrl?: string 18 + originVerify?: string 19 + } 20 + 21 + export const readEnv = (): Environment => { 22 + return { 23 + port: envInt('CARD_PORT'), 24 + version: envStr('CARD_VERSION'), 25 + appviewUrl: envStr('CARD_APPVIEW_URL'), 26 + originVerify: envStr('CARD_ORIGIN_VERIFY'), 27 + } 28 + } 29 + 30 + export const envToCfg = (env: Environment): Config => { 31 + const serviceCfg: ServiceConfig = { 32 + port: env.port ?? 3000, 33 + version: env.version, 34 + appviewUrl: env.appviewUrl ?? 'https://api.bsky.app', 35 + originVerify: env.originVerify, 36 + } 37 + return { 38 + service: serviceCfg, 39 + } 40 + }
+44
bskyogcard/src/context.ts
··· 1 + import {readFileSync} from 'node:fs' 2 + 3 + import {AtpAgent} from '@atproto/api' 4 + import * as path from 'path' 5 + import {fileURLToPath} from 'url' 6 + 7 + import {Config} from './config.js' 8 + 9 + const __DIRNAME = path.dirname(fileURLToPath(import.meta.url)) 10 + 11 + export type AppContextOptions = { 12 + cfg: Config 13 + appviewAgent: AtpAgent 14 + fonts: {name: string; data: Buffer}[] 15 + } 16 + 17 + export class AppContext { 18 + cfg: Config 19 + appviewAgent: AtpAgent 20 + fonts: {name: string; data: Buffer}[] 21 + abortController = new AbortController() 22 + 23 + constructor(private opts: AppContextOptions) { 24 + this.cfg = this.opts.cfg 25 + this.appviewAgent = this.opts.appviewAgent 26 + this.fonts = this.opts.fonts 27 + } 28 + 29 + static async fromConfig(cfg: Config, overrides?: Partial<AppContextOptions>) { 30 + const appviewAgent = new AtpAgent({service: cfg.service.appviewUrl}) 31 + const fonts = [ 32 + { 33 + name: 'Inter', 34 + data: readFileSync(path.join(__DIRNAME, 'assets', 'Inter-Bold.ttf')), 35 + }, 36 + ] 37 + return new AppContext({ 38 + cfg, 39 + appviewAgent, 40 + fonts, 41 + ...overrides, 42 + }) 43 + } 44 + }
+41
bskyogcard/src/index.ts
··· 1 + import events from 'node:events' 2 + import http from 'node:http' 3 + 4 + import express from 'express' 5 + import {createHttpTerminator, HttpTerminator} from 'http-terminator' 6 + 7 + import {Config} from './config.js' 8 + import {AppContext} from './context.js' 9 + import {default as routes, errorHandler} from './routes/index.js' 10 + 11 + export * from './config.js' 12 + export * from './logger.js' 13 + 14 + export class CardService { 15 + public server?: http.Server 16 + private terminator?: HttpTerminator 17 + 18 + constructor(public app: express.Application, public ctx: AppContext) {} 19 + 20 + static async create(cfg: Config): Promise<CardService> { 21 + let app = express() 22 + 23 + const ctx = await AppContext.fromConfig(cfg) 24 + app = routes(ctx, app) 25 + app.use(errorHandler) 26 + 27 + return new CardService(app, ctx) 28 + } 29 + 30 + async start() { 31 + this.server = this.app.listen(this.ctx.cfg.service.port) 32 + this.server.keepAliveTimeout = 90000 33 + this.terminator = createHttpTerminator({server: this.server}) 34 + await events.once(this.server, 'listening') 35 + } 36 + 37 + async destroy() { 38 + this.ctx.abortController.abort() 39 + await this.terminator?.terminate() 40 + } 41 + }
+3
bskyogcard/src/logger.ts
··· 1 + import {subsystemLogger} from '@atproto/common' 2 + 3 + export const httpLogger = subsystemLogger('bskyogcard')
+14
bskyogcard/src/routes/health.ts
··· 1 + import {Express} from 'express' 2 + 3 + import {AppContext} from '../context.js' 4 + import {handler} from './util.js' 5 + 6 + export default function (ctx: AppContext, app: Express) { 7 + return app.get( 8 + '/_health', 9 + handler(async (_req, res) => { 10 + const {version} = ctx.cfg.service 11 + return res.send({version}) 12 + }), 13 + ) 14 + }
+13
bskyogcard/src/routes/index.ts
··· 1 + import {Express} from 'express' 2 + 3 + import {AppContext} from '../context.js' 4 + import {default as health} from './health.js' 5 + import {default as starterPack} from './starter-pack.js' 6 + 7 + export * from './util.js' 8 + 9 + export default function (ctx: AppContext, app: Express) { 10 + app = health(ctx, app) // GET /_health 11 + app = starterPack(ctx, app) // GET /start/:actor/:rkey 12 + return app 13 + }
+102
bskyogcard/src/routes/starter-pack.tsx
··· 1 + import assert from 'node:assert' 2 + 3 + import React from 'react' 4 + import {AppBskyGraphDefs, AtUri} from '@atproto/api' 5 + import resvg from '@resvg/resvg-js' 6 + import {Express} from 'express' 7 + import satori from 'satori' 8 + 9 + import { 10 + StarterPack, 11 + STARTERPACK_HEIGHT, 12 + STARTERPACK_WIDTH, 13 + } from '../components/StarterPack.js' 14 + import {AppContext} from '../context.js' 15 + import {httpLogger} from '../logger.js' 16 + import {handler, originVerifyMiddleware} from './util.js' 17 + 18 + export default function (ctx: AppContext, app: Express) { 19 + return app.get( 20 + '/start/:actor/:rkey', 21 + originVerifyMiddleware(ctx), 22 + handler(async (req, res) => { 23 + const {actor, rkey} = req.params 24 + const uri = AtUri.make(actor, 'app.bsky.graph.starterpack', rkey) 25 + let starterPack: AppBskyGraphDefs.StarterPackView 26 + try { 27 + const result = await ctx.appviewAgent.api.app.bsky.graph.getStarterPack( 28 + {starterPack: uri.toString()}, 29 + ) 30 + starterPack = result.data.starterPack 31 + } catch (err) { 32 + httpLogger.warn( 33 + {err, uri: uri.toString()}, 34 + 'could not fetch starter pack', 35 + ) 36 + return res.status(404).end('not found') 37 + } 38 + const imageEntries = await Promise.all( 39 + [starterPack.creator] 40 + .concat(starterPack.listItemsSample.map(li => li.subject)) 41 + // has avatar 42 + .filter(p => p.avatar) 43 + // no sensitive labels 44 + .filter(p => !p.labels.some(l => hideAvatarLabels.has(l.val))) 45 + .map(async p => { 46 + try { 47 + assert(p.avatar) 48 + const image = await getImage(p.avatar) 49 + return [p.did, image] as const 50 + } catch (err) { 51 + httpLogger.warn( 52 + {err, uri: uri.toString(), did: p.did}, 53 + 'could not fetch image', 54 + ) 55 + return [p.did, null] as const 56 + } 57 + }), 58 + ) 59 + const images = new Map( 60 + imageEntries.filter(([_, image]) => image !== null).slice(0, 7), 61 + ) 62 + const svg = await satori( 63 + <StarterPack starterPack={starterPack} images={images} />, 64 + { 65 + fonts: ctx.fonts, 66 + height: STARTERPACK_HEIGHT, 67 + width: STARTERPACK_WIDTH, 68 + }, 69 + ) 70 + const output = await resvg.renderAsync(svg) 71 + res.statusCode = 200 72 + res.setHeader('content-type', 'image/png') 73 + res.setHeader('cdn-tag', [...images.keys()].join(',')) 74 + return res.end(output.asPng()) 75 + }), 76 + ) 77 + } 78 + 79 + async function getImage(url: string) { 80 + const response = await fetch(url) 81 + const arrayBuf = await response.arrayBuffer() // must drain body even if it will be discarded 82 + if (response.status !== 200) return null 83 + return Buffer.from(arrayBuf) 84 + } 85 + 86 + const hideAvatarLabels = new Set([ 87 + '!hide', 88 + '!warn', 89 + 'porn', 90 + 'sexual', 91 + 'nudity', 92 + 'sexual-figurative', 93 + 'graphic-media', 94 + 'self-harm', 95 + 'sensitive', 96 + 'security', 97 + 'impersonation', 98 + 'scam', 99 + 'spam', 100 + 'misleading', 101 + 'inauthentic', 102 + ])
+36
bskyogcard/src/routes/util.ts
··· 1 + import {ErrorRequestHandler, Request, RequestHandler, Response} from 'express' 2 + 3 + import {AppContext} from '../context.js' 4 + import {httpLogger} from '../logger.js' 5 + 6 + export type Handler = (req: Request, res: Response) => Awaited<void> 7 + 8 + export const handler = (runHandler: Handler): RequestHandler => { 9 + return async (req, res, next) => { 10 + try { 11 + await runHandler(req, res) 12 + } catch (err) { 13 + next(err) 14 + } 15 + } 16 + } 17 + 18 + export function originVerifyMiddleware(ctx: AppContext): RequestHandler { 19 + const {originVerify} = ctx.cfg.service 20 + if (!originVerify) return (_req, _res, next) => next() 21 + return (req, res, next) => { 22 + const verifyHeader = req.headers['x-origin-verify'] 23 + if (verifyHeader !== originVerify) { 24 + return res.status(404).end('not found') 25 + } 26 + next() 27 + } 28 + } 29 + 30 + export const errorHandler: ErrorRequestHandler = (err, req, res, next) => { 31 + httpLogger.error({err}, 'request error') 32 + if (res.headersSent) { 33 + return next(err) 34 + } 35 + return res.status(500).end('server error') 36 + }
+11
bskyogcard/tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ESNext", 4 + "module": "NodeNext", 5 + "esModuleInterop": true, 6 + "moduleResolution": "NodeNext", 7 + "jsx": "react-jsx", 8 + "outDir": "dist" 9 + }, 10 + "include": ["./src/index.ts", "./src/bin.ts"] 11 + }
+1113
bskyogcard/yarn.lock
··· 1 + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 + # yarn lockfile v1 3 + 4 + 5 + "@atproto/api@0.12.19-next.0": 6 + version "0.12.19-next.0" 7 + resolved "https://registry.yarnpkg.com/@atproto/api/-/api-0.12.19-next.0.tgz#9592476cbdba8482d0fd8d65e20275c95d6d5fd4" 8 + integrity sha512-wyWr4uIabTgDTBY99y3QyrFxcIx1Mh4DkURgSv8sd/b+w0lfrZAJh0Gg9BXdg/iIjcf/M2lCTL04r0vASfkMVg== 9 + dependencies: 10 + "@atproto/common-web" "^0.3.0" 11 + "@atproto/lexicon" "^0.4.0" 12 + "@atproto/syntax" "^0.3.0" 13 + "@atproto/xrpc" "^0.5.0" 14 + multiformats "^9.9.0" 15 + tlds "^1.234.0" 16 + 17 + "@atproto/common-web@^0.3.0": 18 + version "0.3.0" 19 + resolved "https://registry.yarnpkg.com/@atproto/common-web/-/common-web-0.3.0.tgz#36da8c2c31d8cf8a140c3c8f03223319bf4430bb" 20 + integrity sha512-67VnV6JJyX+ZWyjV7xFQMypAgDmjVaR9ZCuU/QW+mqlqI7fex2uL4Fv+7/jHadgzhuJHVd6OHOvNn0wR5WZYtA== 21 + dependencies: 22 + graphemer "^1.4.0" 23 + multiformats "^9.9.0" 24 + uint8arrays "3.0.0" 25 + zod "^3.21.4" 26 + 27 + "@atproto/common@^0.4.0": 28 + version "0.4.0" 29 + resolved "https://registry.yarnpkg.com/@atproto/common/-/common-0.4.0.tgz#d77696c7eb545426df727837d9ee333b429fe7ef" 30 + integrity sha512-yOXuPlCjT/OK9j+neIGYn9wkxx/AlxQSucysAF0xgwu0Ji8jAtKBf9Jv6R5ObYAjAD/kVUvEYumle+Yq/R9/7g== 31 + dependencies: 32 + "@atproto/common-web" "^0.3.0" 33 + "@ipld/dag-cbor" "^7.0.3" 34 + cbor-x "^1.5.1" 35 + iso-datestring-validator "^2.2.2" 36 + multiformats "^9.9.0" 37 + pino "^8.15.0" 38 + 39 + "@atproto/lexicon@^0.4.0": 40 + version "0.4.0" 41 + resolved "https://registry.yarnpkg.com/@atproto/lexicon/-/lexicon-0.4.0.tgz#63e8829945d80c25524882caa8ed27b1151cc576" 42 + integrity sha512-RvCBKdSI4M8qWm5uTNz1z3R2yIvIhmOsMuleOj8YR6BwRD+QbtUBy3l+xQ7iXf4M5fdfJFxaUNa6Ty0iRwdKqQ== 43 + dependencies: 44 + "@atproto/common-web" "^0.3.0" 45 + "@atproto/syntax" "^0.3.0" 46 + iso-datestring-validator "^2.2.2" 47 + multiformats "^9.9.0" 48 + zod "^3.21.4" 49 + 50 + "@atproto/syntax@^0.3.0": 51 + version "0.3.0" 52 + resolved "https://registry.yarnpkg.com/@atproto/syntax/-/syntax-0.3.0.tgz#fafa2dbea9add37253005cb663e7373e05e618b3" 53 + integrity sha512-Weq0ZBxffGHDXHl9U7BQc2BFJi/e23AL+k+i5+D9hUq/bzT4yjGsrCejkjq0xt82xXDjmhhvQSZ0LqxyZ5woxA== 54 + 55 + "@atproto/xrpc@^0.5.0": 56 + version "0.5.0" 57 + resolved "https://registry.yarnpkg.com/@atproto/xrpc/-/xrpc-0.5.0.tgz#dacbfd8f7b13f0ab5bd56f8fdd4b460e132a6032" 58 + integrity sha512-swu+wyOLvYW4l3n+VAuJbHcPcES+tin2Lsrp8Bw5aIXIICiuFn1YMFlwK9JwVUzTH21Py1s1nHEjr4CJeElJog== 59 + dependencies: 60 + "@atproto/lexicon" "^0.4.0" 61 + zod "^3.21.4" 62 + 63 + "@cbor-extract/cbor-extract-darwin-arm64@2.2.0": 64 + version "2.2.0" 65 + resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-darwin-arm64/-/cbor-extract-darwin-arm64-2.2.0.tgz#8d65cb861a99622e1b4a268e2d522d2ec6137338" 66 + integrity sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w== 67 + 68 + "@cbor-extract/cbor-extract-darwin-x64@2.2.0": 69 + version "2.2.0" 70 + resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-darwin-x64/-/cbor-extract-darwin-x64-2.2.0.tgz#9fbec199c888c5ec485a1839f4fad0485ab6c40a" 71 + integrity sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w== 72 + 73 + "@cbor-extract/cbor-extract-linux-arm64@2.2.0": 74 + version "2.2.0" 75 + resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-linux-arm64/-/cbor-extract-linux-arm64-2.2.0.tgz#bf77e0db4a1d2200a5aa072e02210d5043e953ae" 76 + integrity sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ== 77 + 78 + "@cbor-extract/cbor-extract-linux-arm@2.2.0": 79 + version "2.2.0" 80 + resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-linux-arm/-/cbor-extract-linux-arm-2.2.0.tgz#491335037eb8533ed8e21b139c59f6df04e39709" 81 + integrity sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q== 82 + 83 + "@cbor-extract/cbor-extract-linux-x64@2.2.0": 84 + version "2.2.0" 85 + resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-linux-x64/-/cbor-extract-linux-x64-2.2.0.tgz#672574485ccd24759bf8fb8eab9dbca517d35b97" 86 + integrity sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw== 87 + 88 + "@cbor-extract/cbor-extract-win32-x64@2.2.0": 89 + version "2.2.0" 90 + resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.2.0.tgz#4b3f07af047f984c082de34b116e765cb9af975f" 91 + integrity sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w== 92 + 93 + "@ipld/dag-cbor@^7.0.3": 94 + version "7.0.3" 95 + resolved "https://registry.yarnpkg.com/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz#aa31b28afb11a807c3d627828a344e5521ac4a1e" 96 + integrity sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA== 97 + dependencies: 98 + cborg "^1.6.0" 99 + multiformats "^9.5.4" 100 + 101 + "@resvg/resvg-js-android-arm-eabi@2.6.2": 102 + version "2.6.2" 103 + resolved "https://registry.yarnpkg.com/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.2.tgz#e761e0b688127db64879f455178c92468a9aeabe" 104 + integrity sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA== 105 + 106 + "@resvg/resvg-js-android-arm64@2.6.2": 107 + version "2.6.2" 108 + resolved "https://registry.yarnpkg.com/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.2.tgz#b8cb564d7f6b3f37d9b43129f5dc5fe171e249e4" 109 + integrity sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ== 110 + 111 + "@resvg/resvg-js-darwin-arm64@2.6.2": 112 + version "2.6.2" 113 + resolved "https://registry.yarnpkg.com/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.2.tgz#49bd3faeda5c49f53302d970e6e79d006de18e7d" 114 + integrity sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A== 115 + 116 + "@resvg/resvg-js-darwin-x64@2.6.2": 117 + version "2.6.2" 118 + resolved "https://registry.yarnpkg.com/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.2.tgz#e1344173aa27bfb4d880ab576d1acf1c1648faca" 119 + integrity sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw== 120 + 121 + "@resvg/resvg-js-linux-arm-gnueabihf@2.6.2": 122 + version "2.6.2" 123 + resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.2.tgz#34c445eba45efd68f6130b2ab426d76a7424253d" 124 + integrity sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw== 125 + 126 + "@resvg/resvg-js-linux-arm64-gnu@2.6.2": 127 + version "2.6.2" 128 + resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.2.tgz#30da47087dd8153182198b94fe9f8d994890dae5" 129 + integrity sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg== 130 + 131 + "@resvg/resvg-js-linux-arm64-musl@2.6.2": 132 + version "2.6.2" 133 + resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.2.tgz#5d75b8ff5c83103729c1ca3779987302753c50d4" 134 + integrity sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg== 135 + 136 + "@resvg/resvg-js-linux-x64-gnu@2.6.2": 137 + version "2.6.2" 138 + resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.2.tgz#411abedfaee5edc57cbb7701736cecba522e26f3" 139 + integrity sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw== 140 + 141 + "@resvg/resvg-js-linux-x64-musl@2.6.2": 142 + version "2.6.2" 143 + resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.2.tgz#fe4984038f0372f279e3ff570b72934dd7eb2a5c" 144 + integrity sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ== 145 + 146 + "@resvg/resvg-js-win32-arm64-msvc@2.6.2": 147 + version "2.6.2" 148 + resolved "https://registry.yarnpkg.com/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.2.tgz#d3a053cf7ff687087a2106330c0fdaae706254d1" 149 + integrity sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ== 150 + 151 + "@resvg/resvg-js-win32-ia32-msvc@2.6.2": 152 + version "2.6.2" 153 + resolved "https://registry.yarnpkg.com/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.2.tgz#7cdda1ce29ef7209e28191d917fa5bef0624a4ad" 154 + integrity sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w== 155 + 156 + "@resvg/resvg-js-win32-x64-msvc@2.6.2": 157 + version "2.6.2" 158 + resolved "https://registry.yarnpkg.com/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.2.tgz#cb0ad04525d65f3def4c8d346157a57976d5b388" 159 + integrity sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ== 160 + 161 + "@resvg/resvg-js@^2.6.2": 162 + version "2.6.2" 163 + resolved "https://registry.yarnpkg.com/@resvg/resvg-js/-/resvg-js-2.6.2.tgz#3e92a907d88d879256c585347c5b21a7f3bb5b46" 164 + integrity sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q== 165 + optionalDependencies: 166 + "@resvg/resvg-js-android-arm-eabi" "2.6.2" 167 + "@resvg/resvg-js-android-arm64" "2.6.2" 168 + "@resvg/resvg-js-darwin-arm64" "2.6.2" 169 + "@resvg/resvg-js-darwin-x64" "2.6.2" 170 + "@resvg/resvg-js-linux-arm-gnueabihf" "2.6.2" 171 + "@resvg/resvg-js-linux-arm64-gnu" "2.6.2" 172 + "@resvg/resvg-js-linux-arm64-musl" "2.6.2" 173 + "@resvg/resvg-js-linux-x64-gnu" "2.6.2" 174 + "@resvg/resvg-js-linux-x64-musl" "2.6.2" 175 + "@resvg/resvg-js-win32-arm64-msvc" "2.6.2" 176 + "@resvg/resvg-js-win32-ia32-msvc" "2.6.2" 177 + "@resvg/resvg-js-win32-x64-msvc" "2.6.2" 178 + 179 + "@shuding/opentype.js@1.4.0-beta.0": 180 + version "1.4.0-beta.0" 181 + resolved "https://registry.yarnpkg.com/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz#5d1e7e9e056f546aad41df1c5043f8f85d39e24b" 182 + integrity sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA== 183 + dependencies: 184 + fflate "^0.7.3" 185 + string.prototype.codepointat "^0.2.1" 186 + 187 + "@types/node@^20.14.3": 188 + version "20.14.3" 189 + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.3.tgz#7a9a5d009b0861e7f337166dc435dbfd758db92d" 190 + integrity sha512-Nuzqa6WAxeGnve6SXqiPAM9rA++VQs+iLZ1DDd56y0gdvygSZlQvZuvdFPR3yLqkVxPu4WrO02iDEyH1g+wazw== 191 + dependencies: 192 + undici-types "~5.26.4" 193 + 194 + abort-controller@^3.0.0: 195 + version "3.0.0" 196 + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" 197 + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== 198 + dependencies: 199 + event-target-shim "^5.0.0" 200 + 201 + accepts@~1.3.8: 202 + version "1.3.8" 203 + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" 204 + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 205 + dependencies: 206 + mime-types "~2.1.34" 207 + negotiator "0.6.3" 208 + 209 + array-flatten@1.1.1: 210 + version "1.1.1" 211 + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 212 + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== 213 + 214 + atomic-sleep@^1.0.0: 215 + version "1.0.0" 216 + resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" 217 + integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== 218 + 219 + base64-js@0.0.8: 220 + version "0.0.8" 221 + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978" 222 + integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw== 223 + 224 + base64-js@^1.3.1: 225 + version "1.5.1" 226 + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 227 + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 228 + 229 + body-parser@1.20.2: 230 + version "1.20.2" 231 + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" 232 + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== 233 + dependencies: 234 + bytes "3.1.2" 235 + content-type "~1.0.5" 236 + debug "2.6.9" 237 + depd "2.0.0" 238 + destroy "1.2.0" 239 + http-errors "2.0.0" 240 + iconv-lite "0.4.24" 241 + on-finished "2.4.1" 242 + qs "6.11.0" 243 + raw-body "2.5.2" 244 + type-is "~1.6.18" 245 + unpipe "1.0.0" 246 + 247 + boolean@^3.1.4: 248 + version "3.2.0" 249 + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" 250 + integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== 251 + 252 + buffer@^6.0.3: 253 + version "6.0.3" 254 + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" 255 + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 256 + dependencies: 257 + base64-js "^1.3.1" 258 + ieee754 "^1.2.1" 259 + 260 + bytes@3.1.2: 261 + version "3.1.2" 262 + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 263 + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 264 + 265 + call-bind@^1.0.7: 266 + version "1.0.7" 267 + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" 268 + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== 269 + dependencies: 270 + es-define-property "^1.0.0" 271 + es-errors "^1.3.0" 272 + function-bind "^1.1.2" 273 + get-intrinsic "^1.2.4" 274 + set-function-length "^1.2.1" 275 + 276 + camelize@^1.0.0: 277 + version "1.0.1" 278 + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" 279 + integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== 280 + 281 + cbor-extract@^2.2.0: 282 + version "2.2.0" 283 + resolved "https://registry.yarnpkg.com/cbor-extract/-/cbor-extract-2.2.0.tgz#cee78e630cbeae3918d1e2e58e0cebaf3a3be840" 284 + integrity sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA== 285 + dependencies: 286 + node-gyp-build-optional-packages "5.1.1" 287 + optionalDependencies: 288 + "@cbor-extract/cbor-extract-darwin-arm64" "2.2.0" 289 + "@cbor-extract/cbor-extract-darwin-x64" "2.2.0" 290 + "@cbor-extract/cbor-extract-linux-arm" "2.2.0" 291 + "@cbor-extract/cbor-extract-linux-arm64" "2.2.0" 292 + "@cbor-extract/cbor-extract-linux-x64" "2.2.0" 293 + "@cbor-extract/cbor-extract-win32-x64" "2.2.0" 294 + 295 + cbor-x@^1.5.1: 296 + version "1.5.9" 297 + resolved "https://registry.yarnpkg.com/cbor-x/-/cbor-x-1.5.9.tgz#ed6b2afcd7884bdd697674bfb7332c1473a13ecf" 298 + integrity sha512-OEI5rEu3MeR0WWNUXuIGkxmbXVhABP+VtgAXzm48c9ulkrsvxshjjk94XSOGphyAKeNGLPfAxxzEtgQ6rEVpYQ== 299 + optionalDependencies: 300 + cbor-extract "^2.2.0" 301 + 302 + cborg@^1.6.0: 303 + version "1.10.2" 304 + resolved "https://registry.yarnpkg.com/cborg/-/cborg-1.10.2.tgz#83cd581b55b3574c816f82696307c7512db759a1" 305 + integrity sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug== 306 + 307 + color-name@^1.1.4: 308 + version "1.1.4" 309 + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 310 + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 311 + 312 + content-disposition@0.5.4: 313 + version "0.5.4" 314 + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" 315 + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== 316 + dependencies: 317 + safe-buffer "5.2.1" 318 + 319 + content-type@~1.0.4, content-type@~1.0.5: 320 + version "1.0.5" 321 + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" 322 + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== 323 + 324 + cookie-signature@1.0.6: 325 + version "1.0.6" 326 + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 327 + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== 328 + 329 + cookie@0.6.0: 330 + version "0.6.0" 331 + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" 332 + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== 333 + 334 + css-background-parser@^0.1.0: 335 + version "0.1.0" 336 + resolved "https://registry.yarnpkg.com/css-background-parser/-/css-background-parser-0.1.0.tgz#48a17f7fe6d4d4f1bca3177ddf16c5617950741b" 337 + integrity sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA== 338 + 339 + css-box-shadow@1.0.0-3: 340 + version "1.0.0-3" 341 + resolved "https://registry.yarnpkg.com/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz#9eaeb7140947bf5d649fc49a19e4bbaa5f602713" 342 + integrity sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg== 343 + 344 + css-color-keywords@^1.0.0: 345 + version "1.0.0" 346 + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" 347 + integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== 348 + 349 + css-to-react-native@^3.0.0: 350 + version "3.2.0" 351 + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" 352 + integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== 353 + dependencies: 354 + camelize "^1.0.0" 355 + css-color-keywords "^1.0.0" 356 + postcss-value-parser "^4.0.2" 357 + 358 + debug@2.6.9: 359 + version "2.6.9" 360 + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 361 + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 362 + dependencies: 363 + ms "2.0.0" 364 + 365 + define-data-property@^1.1.4: 366 + version "1.1.4" 367 + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" 368 + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== 369 + dependencies: 370 + es-define-property "^1.0.0" 371 + es-errors "^1.3.0" 372 + gopd "^1.0.1" 373 + 374 + delay@^5.0.0: 375 + version "5.0.0" 376 + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" 377 + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== 378 + 379 + depd@2.0.0: 380 + version "2.0.0" 381 + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" 382 + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 383 + 384 + destroy@1.2.0: 385 + version "1.2.0" 386 + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" 387 + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== 388 + 389 + detect-libc@^2.0.1: 390 + version "2.0.3" 391 + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" 392 + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== 393 + 394 + ee-first@1.1.1: 395 + version "1.1.1" 396 + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 397 + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== 398 + 399 + emoji-regex@^10.2.1: 400 + version "10.3.0" 401 + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" 402 + integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw== 403 + 404 + encodeurl@~1.0.2: 405 + version "1.0.2" 406 + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 407 + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== 408 + 409 + es-define-property@^1.0.0: 410 + version "1.0.0" 411 + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" 412 + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== 413 + dependencies: 414 + get-intrinsic "^1.2.4" 415 + 416 + es-errors@^1.3.0: 417 + version "1.3.0" 418 + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" 419 + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== 420 + 421 + escape-html@^1.0.3, escape-html@~1.0.3: 422 + version "1.0.3" 423 + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 424 + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 425 + 426 + etag@~1.8.1: 427 + version "1.8.1" 428 + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 429 + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== 430 + 431 + event-target-shim@^5.0.0: 432 + version "5.0.1" 433 + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" 434 + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== 435 + 436 + events@^3.3.0: 437 + version "3.3.0" 438 + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" 439 + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 440 + 441 + express@^4.19.2: 442 + version "4.19.2" 443 + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" 444 + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== 445 + dependencies: 446 + accepts "~1.3.8" 447 + array-flatten "1.1.1" 448 + body-parser "1.20.2" 449 + content-disposition "0.5.4" 450 + content-type "~1.0.4" 451 + cookie "0.6.0" 452 + cookie-signature "1.0.6" 453 + debug "2.6.9" 454 + depd "2.0.0" 455 + encodeurl "~1.0.2" 456 + escape-html "~1.0.3" 457 + etag "~1.8.1" 458 + finalhandler "1.2.0" 459 + fresh "0.5.2" 460 + http-errors "2.0.0" 461 + merge-descriptors "1.0.1" 462 + methods "~1.1.2" 463 + on-finished "2.4.1" 464 + parseurl "~1.3.3" 465 + path-to-regexp "0.1.7" 466 + proxy-addr "~2.0.7" 467 + qs "6.11.0" 468 + range-parser "~1.2.1" 469 + safe-buffer "5.2.1" 470 + send "0.18.0" 471 + serve-static "1.15.0" 472 + setprototypeof "1.2.0" 473 + statuses "2.0.1" 474 + type-is "~1.6.18" 475 + utils-merge "1.0.1" 476 + vary "~1.1.2" 477 + 478 + fast-printf@^1.6.9: 479 + version "1.6.9" 480 + resolved "https://registry.yarnpkg.com/fast-printf/-/fast-printf-1.6.9.tgz#212f56570d2dc8ccdd057ee93d50dd414d07d676" 481 + integrity sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg== 482 + dependencies: 483 + boolean "^3.1.4" 484 + 485 + fast-redact@^3.1.1: 486 + version "3.5.0" 487 + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" 488 + integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== 489 + 490 + fflate@^0.7.3: 491 + version "0.7.4" 492 + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.7.4.tgz#61587e5d958fdabb5a9368a302c25363f4f69f50" 493 + integrity sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw== 494 + 495 + finalhandler@1.2.0: 496 + version "1.2.0" 497 + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" 498 + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== 499 + dependencies: 500 + debug "2.6.9" 501 + encodeurl "~1.0.2" 502 + escape-html "~1.0.3" 503 + on-finished "2.4.1" 504 + parseurl "~1.3.3" 505 + statuses "2.0.1" 506 + unpipe "~1.0.0" 507 + 508 + forwarded@0.2.0: 509 + version "0.2.0" 510 + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 511 + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 512 + 513 + fresh@0.5.2: 514 + version "0.5.2" 515 + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 516 + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== 517 + 518 + function-bind@^1.1.2: 519 + version "1.1.2" 520 + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 521 + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 522 + 523 + get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: 524 + version "1.2.4" 525 + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" 526 + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== 527 + dependencies: 528 + es-errors "^1.3.0" 529 + function-bind "^1.1.2" 530 + has-proto "^1.0.1" 531 + has-symbols "^1.0.3" 532 + hasown "^2.0.0" 533 + 534 + gopd@^1.0.1: 535 + version "1.0.1" 536 + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" 537 + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== 538 + dependencies: 539 + get-intrinsic "^1.1.3" 540 + 541 + graphemer@^1.4.0: 542 + version "1.4.0" 543 + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 544 + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 545 + 546 + has-property-descriptors@^1.0.2: 547 + version "1.0.2" 548 + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" 549 + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== 550 + dependencies: 551 + es-define-property "^1.0.0" 552 + 553 + has-proto@^1.0.1: 554 + version "1.0.3" 555 + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" 556 + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== 557 + 558 + has-symbols@^1.0.3: 559 + version "1.0.3" 560 + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 561 + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 562 + 563 + hasown@^2.0.0: 564 + version "2.0.2" 565 + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" 566 + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 567 + dependencies: 568 + function-bind "^1.1.2" 569 + 570 + hex-rgb@^4.1.0: 571 + version "4.3.0" 572 + resolved "https://registry.yarnpkg.com/hex-rgb/-/hex-rgb-4.3.0.tgz#af5e974e83bb2fefe44d55182b004ec818c07776" 573 + integrity sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw== 574 + 575 + http-errors@2.0.0: 576 + version "2.0.0" 577 + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" 578 + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== 579 + dependencies: 580 + depd "2.0.0" 581 + inherits "2.0.4" 582 + setprototypeof "1.2.0" 583 + statuses "2.0.1" 584 + toidentifier "1.0.1" 585 + 586 + http-terminator@^3.2.0: 587 + version "3.2.0" 588 + resolved "https://registry.yarnpkg.com/http-terminator/-/http-terminator-3.2.0.tgz#bc158d2694b733ca4fbf22a35065a81a609fb3e9" 589 + integrity sha512-JLjck1EzPaWjsmIf8bziM3p9fgR1Y3JoUKAkyYEbZmFrIvJM6I8vVJfBGWlEtV9IWOvzNnaTtjuwZeBY2kwB4g== 590 + dependencies: 591 + delay "^5.0.0" 592 + p-wait-for "^3.2.0" 593 + roarr "^7.0.4" 594 + type-fest "^2.3.3" 595 + 596 + iconv-lite@0.4.24: 597 + version "0.4.24" 598 + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 599 + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 600 + dependencies: 601 + safer-buffer ">= 2.1.2 < 3" 602 + 603 + ieee754@^1.2.1: 604 + version "1.2.1" 605 + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 606 + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 607 + 608 + inherits@2.0.4: 609 + version "2.0.4" 610 + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 611 + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 612 + 613 + ipaddr.js@1.9.1: 614 + version "1.9.1" 615 + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 616 + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 617 + 618 + iso-datestring-validator@^2.2.2: 619 + version "2.2.2" 620 + resolved "https://registry.yarnpkg.com/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz#2daa80d2900b7a954f9f731d42f96ee0c19a6895" 621 + integrity sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA== 622 + 623 + "js-tokens@^3.0.0 || ^4.0.0": 624 + version "4.0.0" 625 + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 626 + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 627 + 628 + linebreak@^1.1.0: 629 + version "1.1.0" 630 + resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b" 631 + integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ== 632 + dependencies: 633 + base64-js "0.0.8" 634 + unicode-trie "^2.0.0" 635 + 636 + loose-envify@^1.1.0: 637 + version "1.4.0" 638 + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 639 + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 640 + dependencies: 641 + js-tokens "^3.0.0 || ^4.0.0" 642 + 643 + media-typer@0.3.0: 644 + version "0.3.0" 645 + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 646 + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== 647 + 648 + merge-descriptors@1.0.1: 649 + version "1.0.1" 650 + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 651 + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== 652 + 653 + methods@~1.1.2: 654 + version "1.1.2" 655 + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 656 + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== 657 + 658 + mime-db@1.52.0: 659 + version "1.52.0" 660 + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 661 + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 662 + 663 + mime-types@~2.1.24, mime-types@~2.1.34: 664 + version "2.1.35" 665 + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 666 + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 667 + dependencies: 668 + mime-db "1.52.0" 669 + 670 + mime@1.6.0: 671 + version "1.6.0" 672 + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 673 + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 674 + 675 + ms@2.0.0: 676 + version "2.0.0" 677 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 678 + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== 679 + 680 + ms@2.1.3: 681 + version "2.1.3" 682 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 683 + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 684 + 685 + multiformats@^9.4.2, multiformats@^9.5.4, multiformats@^9.9.0: 686 + version "9.9.0" 687 + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" 688 + integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== 689 + 690 + negotiator@0.6.3: 691 + version "0.6.3" 692 + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" 693 + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 694 + 695 + node-gyp-build-optional-packages@5.1.1: 696 + version "5.1.1" 697 + resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz#52b143b9dd77b7669073cbfe39e3f4118bfc603c" 698 + integrity sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw== 699 + dependencies: 700 + detect-libc "^2.0.1" 701 + 702 + object-inspect@^1.13.1: 703 + version "1.13.1" 704 + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" 705 + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== 706 + 707 + on-exit-leak-free@^2.1.0: 708 + version "2.1.2" 709 + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" 710 + integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== 711 + 712 + on-finished@2.4.1: 713 + version "2.4.1" 714 + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" 715 + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== 716 + dependencies: 717 + ee-first "1.1.1" 718 + 719 + p-finally@^1.0.0: 720 + version "1.0.0" 721 + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 722 + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== 723 + 724 + p-timeout@^3.0.0: 725 + version "3.2.0" 726 + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" 727 + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== 728 + dependencies: 729 + p-finally "^1.0.0" 730 + 731 + p-wait-for@^3.2.0: 732 + version "3.2.0" 733 + resolved "https://registry.yarnpkg.com/p-wait-for/-/p-wait-for-3.2.0.tgz#640429bcabf3b0dd9f492c31539c5718cb6a3f1f" 734 + integrity sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA== 735 + dependencies: 736 + p-timeout "^3.0.0" 737 + 738 + pako@^0.2.5: 739 + version "0.2.9" 740 + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" 741 + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== 742 + 743 + parse-css-color@^0.2.1: 744 + version "0.2.1" 745 + resolved "https://registry.yarnpkg.com/parse-css-color/-/parse-css-color-0.2.1.tgz#b687a583f2e42e66ffdfce80a570706966e807c9" 746 + integrity sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg== 747 + dependencies: 748 + color-name "^1.1.4" 749 + hex-rgb "^4.1.0" 750 + 751 + parseurl@~1.3.3: 752 + version "1.3.3" 753 + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 754 + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 755 + 756 + path-to-regexp@0.1.7: 757 + version "0.1.7" 758 + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 759 + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== 760 + 761 + pino-abstract-transport@^1.2.0: 762 + version "1.2.0" 763 + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz#97f9f2631931e242da531b5c66d3079c12c9d1b5" 764 + integrity sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q== 765 + dependencies: 766 + readable-stream "^4.0.0" 767 + split2 "^4.0.0" 768 + 769 + pino-std-serializers@^6.0.0: 770 + version "6.2.2" 771 + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz#d9a9b5f2b9a402486a5fc4db0a737570a860aab3" 772 + integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== 773 + 774 + pino-std-serializers@^7.0.0: 775 + version "7.0.0" 776 + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz#7c625038b13718dbbd84ab446bd673dc52259e3b" 777 + integrity sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA== 778 + 779 + pino@^8.15.0: 780 + version "8.21.0" 781 + resolved "https://registry.yarnpkg.com/pino/-/pino-8.21.0.tgz#e1207f3675a2722940d62da79a7a55a98409f00d" 782 + integrity sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q== 783 + dependencies: 784 + atomic-sleep "^1.0.0" 785 + fast-redact "^3.1.1" 786 + on-exit-leak-free "^2.1.0" 787 + pino-abstract-transport "^1.2.0" 788 + pino-std-serializers "^6.0.0" 789 + process-warning "^3.0.0" 790 + quick-format-unescaped "^4.0.3" 791 + real-require "^0.2.0" 792 + safe-stable-stringify "^2.3.1" 793 + sonic-boom "^3.7.0" 794 + thread-stream "^2.6.0" 795 + 796 + pino@^9.2.0: 797 + version "9.2.0" 798 + resolved "https://registry.yarnpkg.com/pino/-/pino-9.2.0.tgz#e77a9516f3a3e5550d9b76d9f65ac6118ef02bdd" 799 + integrity sha512-g3/hpwfujK5a4oVbaefoJxezLzsDgLcNJeITvC6yrfwYeT9la+edCK42j5QpEQSQCZgTKapXvnQIdgZwvRaZug== 800 + dependencies: 801 + atomic-sleep "^1.0.0" 802 + fast-redact "^3.1.1" 803 + on-exit-leak-free "^2.1.0" 804 + pino-abstract-transport "^1.2.0" 805 + pino-std-serializers "^7.0.0" 806 + process-warning "^3.0.0" 807 + quick-format-unescaped "^4.0.3" 808 + real-require "^0.2.0" 809 + safe-stable-stringify "^2.3.1" 810 + sonic-boom "^4.0.1" 811 + thread-stream "^3.0.0" 812 + 813 + postcss-value-parser@^4.0.2, postcss-value-parser@^4.2.0: 814 + version "4.2.0" 815 + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" 816 + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== 817 + 818 + process-warning@^3.0.0: 819 + version "3.0.0" 820 + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-3.0.0.tgz#96e5b88884187a1dce6f5c3166d611132058710b" 821 + integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== 822 + 823 + process@^0.11.10: 824 + version "0.11.10" 825 + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 826 + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== 827 + 828 + proxy-addr@~2.0.7: 829 + version "2.0.7" 830 + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 831 + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 832 + dependencies: 833 + forwarded "0.2.0" 834 + ipaddr.js "1.9.1" 835 + 836 + qs@6.11.0: 837 + version "6.11.0" 838 + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" 839 + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== 840 + dependencies: 841 + side-channel "^1.0.4" 842 + 843 + quick-format-unescaped@^4.0.3: 844 + version "4.0.4" 845 + resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" 846 + integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== 847 + 848 + range-parser@~1.2.1: 849 + version "1.2.1" 850 + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 851 + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 852 + 853 + raw-body@2.5.2: 854 + version "2.5.2" 855 + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" 856 + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== 857 + dependencies: 858 + bytes "3.1.2" 859 + http-errors "2.0.0" 860 + iconv-lite "0.4.24" 861 + unpipe "1.0.0" 862 + 863 + react@^18.3.1: 864 + version "18.3.1" 865 + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" 866 + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== 867 + dependencies: 868 + loose-envify "^1.1.0" 869 + 870 + readable-stream@^4.0.0: 871 + version "4.5.2" 872 + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" 873 + integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== 874 + dependencies: 875 + abort-controller "^3.0.0" 876 + buffer "^6.0.3" 877 + events "^3.3.0" 878 + process "^0.11.10" 879 + string_decoder "^1.3.0" 880 + 881 + real-require@^0.2.0: 882 + version "0.2.0" 883 + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" 884 + integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== 885 + 886 + roarr@^7.0.4: 887 + version "7.21.1" 888 + resolved "https://registry.yarnpkg.com/roarr/-/roarr-7.21.1.tgz#fd6452ca822a65f736c35e5372f04ee9f2ca3851" 889 + integrity sha512-3niqt5bXFY1InKU8HKWqqYTYjtrBaxBMnXELXCXUYgtNYGUtZM5rB46HIC430AyacL95iEniGf7RgqsesykLmQ== 890 + dependencies: 891 + fast-printf "^1.6.9" 892 + safe-stable-stringify "^2.4.3" 893 + semver-compare "^1.0.0" 894 + 895 + safe-buffer@5.2.1, safe-buffer@~5.2.0: 896 + version "5.2.1" 897 + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 898 + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 899 + 900 + safe-stable-stringify@^2.3.1, safe-stable-stringify@^2.4.3: 901 + version "2.4.3" 902 + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" 903 + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== 904 + 905 + "safer-buffer@>= 2.1.2 < 3": 906 + version "2.1.2" 907 + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 908 + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 909 + 910 + satori@^0.10.13: 911 + version "0.10.13" 912 + resolved "https://registry.yarnpkg.com/satori/-/satori-0.10.13.tgz#658a9920f55268d2002819387a80a0b6d4bdc262" 913 + integrity sha512-klCwkVYMQ/ZN5inJLHzrUmGwoRfsdP7idB5hfpJ1jfiJk1ErDitK8Hkc6Kll1+Ox2WtqEuGecSZLnmup3CGzvQ== 914 + dependencies: 915 + "@shuding/opentype.js" "1.4.0-beta.0" 916 + css-background-parser "^0.1.0" 917 + css-box-shadow "1.0.0-3" 918 + css-to-react-native "^3.0.0" 919 + emoji-regex "^10.2.1" 920 + escape-html "^1.0.3" 921 + linebreak "^1.1.0" 922 + parse-css-color "^0.2.1" 923 + postcss-value-parser "^4.2.0" 924 + yoga-wasm-web "^0.3.3" 925 + 926 + semver-compare@^1.0.0: 927 + version "1.0.0" 928 + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" 929 + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== 930 + 931 + send@0.18.0: 932 + version "0.18.0" 933 + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" 934 + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== 935 + dependencies: 936 + debug "2.6.9" 937 + depd "2.0.0" 938 + destroy "1.2.0" 939 + encodeurl "~1.0.2" 940 + escape-html "~1.0.3" 941 + etag "~1.8.1" 942 + fresh "0.5.2" 943 + http-errors "2.0.0" 944 + mime "1.6.0" 945 + ms "2.1.3" 946 + on-finished "2.4.1" 947 + range-parser "~1.2.1" 948 + statuses "2.0.1" 949 + 950 + serve-static@1.15.0: 951 + version "1.15.0" 952 + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" 953 + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== 954 + dependencies: 955 + encodeurl "~1.0.2" 956 + escape-html "~1.0.3" 957 + parseurl "~1.3.3" 958 + send "0.18.0" 959 + 960 + set-function-length@^1.2.1: 961 + version "1.2.2" 962 + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" 963 + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== 964 + dependencies: 965 + define-data-property "^1.1.4" 966 + es-errors "^1.3.0" 967 + function-bind "^1.1.2" 968 + get-intrinsic "^1.2.4" 969 + gopd "^1.0.1" 970 + has-property-descriptors "^1.0.2" 971 + 972 + setprototypeof@1.2.0: 973 + version "1.2.0" 974 + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 975 + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 976 + 977 + side-channel@^1.0.4: 978 + version "1.0.6" 979 + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" 980 + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== 981 + dependencies: 982 + call-bind "^1.0.7" 983 + es-errors "^1.3.0" 984 + get-intrinsic "^1.2.4" 985 + object-inspect "^1.13.1" 986 + 987 + sonic-boom@^3.7.0: 988 + version "3.8.1" 989 + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.8.1.tgz#d5ba8c4e26d6176c9a1d14d549d9ff579a163422" 990 + integrity sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg== 991 + dependencies: 992 + atomic-sleep "^1.0.0" 993 + 994 + sonic-boom@^4.0.1: 995 + version "4.0.1" 996 + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.0.1.tgz#515b7cef2c9290cb362c4536388ddeece07aed30" 997 + integrity sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ== 998 + dependencies: 999 + atomic-sleep "^1.0.0" 1000 + 1001 + split2@^4.0.0: 1002 + version "4.2.0" 1003 + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" 1004 + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== 1005 + 1006 + statuses@2.0.1: 1007 + version "2.0.1" 1008 + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" 1009 + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== 1010 + 1011 + string.prototype.codepointat@^0.2.1: 1012 + version "0.2.1" 1013 + resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz#004ad44c8afc727527b108cd462b4d971cd469bc" 1014 + integrity sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg== 1015 + 1016 + string_decoder@^1.3.0: 1017 + version "1.3.0" 1018 + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 1019 + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 1020 + dependencies: 1021 + safe-buffer "~5.2.0" 1022 + 1023 + thread-stream@^2.6.0: 1024 + version "2.7.0" 1025 + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.7.0.tgz#d8a8e1b3fd538a6cca8ce69dbe5d3d097b601e11" 1026 + integrity sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw== 1027 + dependencies: 1028 + real-require "^0.2.0" 1029 + 1030 + thread-stream@^3.0.0: 1031 + version "3.1.0" 1032 + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1" 1033 + integrity sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A== 1034 + dependencies: 1035 + real-require "^0.2.0" 1036 + 1037 + tiny-inflate@^1.0.0: 1038 + version "1.0.3" 1039 + resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4" 1040 + integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw== 1041 + 1042 + tlds@^1.234.0: 1043 + version "1.252.0" 1044 + resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.252.0.tgz#71d9617f4ef4cc7347843bee72428e71b8b0f419" 1045 + integrity sha512-GA16+8HXvqtfEnw/DTcwB0UU354QE1n3+wh08oFjr6Znl7ZLAeUgYzCcK+/CCrOyE0vnHR8/pu3XXG3vDijXpQ== 1046 + 1047 + toidentifier@1.0.1: 1048 + version "1.0.1" 1049 + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 1050 + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 1051 + 1052 + type-fest@^2.3.3: 1053 + version "2.19.0" 1054 + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" 1055 + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== 1056 + 1057 + type-is@~1.6.18: 1058 + version "1.6.18" 1059 + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 1060 + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 1061 + dependencies: 1062 + media-typer "0.3.0" 1063 + mime-types "~2.1.24" 1064 + 1065 + typescript@^5.4.5: 1066 + version "5.4.5" 1067 + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" 1068 + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== 1069 + 1070 + uint8arrays@3.0.0: 1071 + version "3.0.0" 1072 + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.0.0.tgz#260869efb8422418b6f04e3fac73a3908175c63b" 1073 + integrity sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA== 1074 + dependencies: 1075 + multiformats "^9.4.2" 1076 + 1077 + undici-types@~5.26.4: 1078 + version "5.26.5" 1079 + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" 1080 + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== 1081 + 1082 + unicode-trie@^2.0.0: 1083 + version "2.0.0" 1084 + resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8" 1085 + integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ== 1086 + dependencies: 1087 + pako "^0.2.5" 1088 + tiny-inflate "^1.0.0" 1089 + 1090 + unpipe@1.0.0, unpipe@~1.0.0: 1091 + version "1.0.0" 1092 + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1093 + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== 1094 + 1095 + utils-merge@1.0.1: 1096 + version "1.0.1" 1097 + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 1098 + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== 1099 + 1100 + vary@~1.1.2: 1101 + version "1.1.2" 1102 + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1103 + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== 1104 + 1105 + yoga-wasm-web@^0.3.3: 1106 + version "0.3.3" 1107 + resolved "https://registry.yarnpkg.com/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz#eb8e9fcb18e5e651994732f19a220cb885d932ba" 1108 + integrity sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA== 1109 + 1110 + zod@^3.21.4: 1111 + version "3.23.8" 1112 + resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d" 1113 + integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==