diff --git a/.gitignore b/.gitignore index 358b0d1..28a74b1 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ dist/ # Browser-test artifacts **/__screenshots__/ **/.vitest-attachments/ +**/.vitest/ # OS .DS_Store diff --git a/README.md b/README.md index 3fbfccf..628aca4 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ features: ## development +Requires Node.js **22.17+** and the pinned pnpm version. The app uses SvelteKit 3 and `@svelte-atproto/oauth`; see [OAuth and migration notes](docs/sveltekit-3-oauth.md) for permissions, configuration, and compatibility details. + The UI uses the published `@atmo-dev/kit@0.0.2`. A normal install or CI build needs no sibling kit checkout: ```sh diff --git a/apps/web/lex.config.js b/apps/web/lex.config.js index 1be01f6..e90ed50 100644 --- a/apps/web/lex.config.js +++ b/apps/web/lex.config.js @@ -1,25 +1,32 @@ -import { defineLexiconConfig } from "@atcute/lex-cli"; +import { defineLexiconConfig } from '@atcute/lex-cli'; export default defineLexiconConfig({ - files: ["lexicons/custom/**/*.json", "lexicons/pulled/**/*.json", "lexicons/generated/**/*.json"], - outdir: "src/lexicon-types/", - imports: ["@atcute/atproto"], - pull: { - outdir: "lexicons/pulled/", - sources: [ - { - type: "atproto", - mode: "nsids", - nsids: [ - "app.bsky.actor.profile", - "community.lexicon.calendar.event", - "community.lexicon.calendar.rsvp", - "community.lexicon.location.address", - "community.lexicon.location.fsq", - "community.lexicon.location.geo", - "community.lexicon.location.hthree" - ], - }, - ], - }, + generate: { + files: [ + 'lexicons/custom/**/*.json', + 'lexicons/pulled/community/**/*.json', + 'lexicons/generated/**/*.json' + ], + outdir: 'src/lexicon-types/', + imports: ['@atcute/atproto', '@atcute/bluesky'], + clean: true + }, + pull: { + outdir: 'lexicons/pulled/', + sources: [ + { + type: 'atproto', + mode: 'nsids', + nsids: [ + 'app.bsky.actor.profile', + 'community.lexicon.calendar.event', + 'community.lexicon.calendar.rsvp', + 'community.lexicon.location.address', + 'community.lexicon.location.fsq', + 'community.lexicon.location.geo', + 'community.lexicon.location.hthree' + ] + } + ] + } }); diff --git a/apps/web/package.json b/apps/web/package.json index dc19623..e31a683 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -22,78 +22,83 @@ "test": "vitest run", "format": "prettier --write .", "lint": "prettier --check . && eslint .", - "env:generate-key": "npx tsx src/lib/atproto/scripts/generate-key.ts", - "env:generate-secret": "npx tsx src/lib/atproto/scripts/generate-secret.ts", - "env:setup-dev": "npx tsx src/lib/atproto/scripts/setup-dev.ts", - "tunnel": "npx tsx src/lib/atproto/scripts/tunnel.ts", + "env:generate-key": "atproto-oauth keygen", + "env:generate-secret": "atproto-oauth secret", + "env:setup-dev": "atproto-oauth setup", + "tunnel": "cloudflared tunnel --url http://127.0.0.1:5454", "publish-lexicons": "contrail-lex publish", "seed:conference": "bun run scripts/publish-test-conference.ts", "geocode:backfill": "tsx scripts/geocode-events.ts" }, "devDependencies": { - "@atcute/atproto": "^3.1.10", - "@atcute/bluesky": "^3.3.0", - "@atcute/client": "^4.2.1", - "@atcute/identity-resolver": "^1.2.2", - "@atcute/lex-cli": "^2.5.3", - "@atcute/lexicons": "^1.2.9", - "@atcute/oauth-node-client": "^1.1.0", - "@atcute/tid": "^1.1.2", + "@atcute/atproto": "^4.0.4", + "@atcute/bluesky": "^4.0.25", + "@atcute/client": "^5.1.2", + "@atcute/identity-resolver": "^2.0.3", + "@atcute/lex-cli": "^3.3.0", + "@atcute/lexicons": "^2.1.1", + "@atcute/oauth-node-client": "^2.0.1", + "@atcute/tid": "^1.1.4", "@atmo-dev/contrail-appview": "0.12.2", - "@atmo-dev/contrail-lexicons": "^0.4.4", - "@cloudflare/workers-types": "^4.20260317.1", - "@eslint/compat": "^2.0.3", + "@atmo-dev/contrail-lexicons": "^0.4.15", + "@cloudflare/workers-types": "^5.20261026.1", + "@eslint/compat": "^2.1.1", "@eslint/js": "^10.0.1", - "@sveltejs/adapter-cloudflare": "^7.2.8", - "@sveltejs/kit": "^2.55.0", - "@sveltejs/vite-plugin-svelte": "^7.0.0", + "@sveltejs/adapter-cloudflare": "^8.0.1", + "@sveltejs/kit": "^3.1.0", + "@sveltejs/vite-plugin-svelte": "^7.3.1", "@tailwindcss/forms": "^0.5.11", - "@tailwindcss/vite": "^4.2.2", + "@tailwindcss/vite": "^4.3.3", "@types/d3-geo": "^3.1.1", "@types/geojson": "^7946.0.16", - "@types/node": "^22.20.0", - "bits-ui": "^2.16.3", - "eslint": "^10.1.0", + "@types/node": "^24.19.2", + "bits-ui": "^2.20.2", + "eslint": "^10.13.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-svelte": "^3.16.0", - "globals": "^17.4.0", - "sharp": "^0.34.5", + "eslint-plugin-svelte": "^3.23.1", + "globals": "^17.13.0", + "sharp": "^0.35.5", "svelte": "^5.57.3", - "svelte-check": "^4.4.8", - "tailwindcss": "^4.2.2", - "tsx": "^4.21.0", + "svelte-check": "^4.7.7", + "tailwindcss": "^4.3.3", + "tsx": "^4.23.15", "typescript": "^6.0.2", - "typescript-eslint": "^8.57.2", - "unwasm": "0.5.3", - "vite": "^8.0.3", - "vitest": "^4.1.7", - "wrangler": "^4.77.0" + "typescript-eslint": "^8.72.1", + "unwasm": "0.6.3", + "vite": "^8.3.5", + "vitest": "^5.0.5", + "wrangler": "^4.153.0" }, "license": "MIT", "dependencies": { - "@atcute/bluesky-richtext-parser": "^2.1.1", - "@atcute/jetstream": "^1.1.2", + "@atcute/bluesky-richtext-parser": "^2.1.2", + "@atcute/jetstream": "^2.2.0", + "@atcute/password-session": "^1.0.2", "@atmo-dev/contrail": "^0.12.2", "@atmo-dev/events-ui": "workspace:*", "@atmo-dev/kit": "0.0.2", - "@fontsource-variable/caveat": "^5.3.0", - "@internationalized/date": "^3.12.0", - "@number-flow/svelte": "^0.4.0", + "@internationalized/date": "^3.12.4", + "@number-flow/svelte": "^0.4.2", "@sketchyicons/svelte": "^0.5.0", - "@tailwindcss/typography": "^0.5.19", - "@takumi-rs/helpers": "2.16.3", - "@takumi-rs/wasm": "2.16.3", + "@svelte-atproto/oauth": "^0.4.1", + "@tailwindcss/typography": "^0.5.20", + "@takumi-rs/helpers": "2.18.2", + "@takumi-rs/wasm": "2.18.2", "d3-geo": "^3.1.1", - "dompurify": "^3.3.3", - "h3-js": "^4.2.1", - "hls.js": "^1.6.15", - "maplibre-gl": "^5.21.1", - "marked": "^17.0.5", + "dompurify": "^3.4.17", + "h3-js": "^4.5.0", + "hls.js": "^1.7.3", + "maplibre-gl": "^6.16.0", + "marked": "^18.1.2", "mode-watcher": "^1.1.0", - "plyr": "^3.8.4", + "plyr": "^3.8.5", "svelte-boring-avatars": "^1.2.6", - "svelte-maplibre-gl": "^1.0.3", - "valibot": "^1.3.1", - "yaml": "^2.8.1" + "svelte-maplibre-gl": "^2.2.1", + "valibot": "^1.5.0", + "yaml": "^2.9.1" + }, + "imports": { + "#lib": "./src/lib/index.js", + "#lib/*": "./src/lib/*" } } diff --git a/apps/web/src/app.css b/apps/web/src/app.css index ff3f1d8..86ac7e2 100644 --- a/apps/web/src/app.css +++ b/apps/web/src/app.css @@ -1,10 +1,5 @@ @import 'tailwindcss'; @import '@atmo-dev/kit/theme.css'; -@import '@fontsource-variable/caveat'; - -@theme { - --font-handwritten: 'Caveat Variable', cursive; -} @plugin '@tailwindcss/forms'; @plugin '@tailwindcss/typography'; diff --git a/apps/web/src/app.d.ts b/apps/web/src/app.d.ts index a6decec..f03c750 100644 --- a/apps/web/src/app.d.ts +++ b/apps/web/src/app.d.ts @@ -65,64 +65,60 @@ declare global { pageTitle?: string; } // interface PageState {} - interface Platform { - env: { - OAUTH_SESSIONS: KVNamespace; - OAUTH_STATES: KVNamespace; - CLIENT_ASSERTION_KEY: string; - COOKIE_SECRET: string; - OAUTH_PUBLIC_URL: string; - DB: D1Database; - ASSETS?: Fetcher; - OG_IMAGES?: R2Bucket; - OG_DAILY_GENERATION_LIMIT?: string; - OG_CYCLE_GENERATION_LIMIT?: string; - OG_BILLING_CYCLE_START_DAY?: string; - CRON_SECRET: string; - /** Handle or DID of the reply bot, e.g. `going.atmo.rsvp`. */ - BOT_IDENTIFIER?: string; - /** App password for the bot account (set via `wrangler secret put`). */ - BOT_APP_PASSWORD?: string; - /** PDS the bot authenticates against; defaults to bsky.social. */ - BOT_PDS_URL?: string; - /** Meilisearch base url for the search read path (search/near-me). - * When either var is unset, search falls back to the D1 path and - * near-me is unavailable. */ - SEARCH_URL?: string; - /** Read-only Default Search API Key (set via `wrangler secret put`). - * Never the admin or root key. */ - SEARCH_API_KEY?: string; - /** Search index uid; defaults to `events`. Shared by the read path - * and the write sink (one index, written and read), so there is no - * separate write-side index var. */ - SEARCH_INDEX?: string; - /** Meilisearch base url for the WRITE path (the search sink). Kept - * distinct from SEARCH_URL so the writer can use the admin key while - * the read path stays on the search-only key. When unset, the cron - * ingest runs without feeding search (D1 fallback still serves). */ - SEARCH_SINK_URL?: string; - /** Default Admin API Key for the write path (set via - * `wrangler secret put`). Never the instance root key. */ - SEARCH_SINK_API_KEY?: string; - /** Forward-geocoder endpoint for the address→_geo drip (the cron job - * that resolves coordinates for newly-ingested address-only events). - * Nominatim-compatible /search; LocationIQ = `https://us1.locationiq.com/v1/search`. - * Reuses the SEARCH_SINK_* Meili write creds + the DB binding, so this - * plus GEOCODER_KEY are the only drip-specific config. */ - GEOCODER_URL?: string; - /** Geocoder API key (LocationIQ), set via `wrangler secret put`. When - * unset, the drip no-ops (it won't fall back to public Nominatim). */ - GEOCODER_KEY?: string; - /** Optional User-Agent for geocoder requests. */ - GEOCODER_USER_AGENT?: string; - /** Min ms between geocoder calls in the drip — the rate limiter. Set to - * the ceiling the geocoder tier allows; defaults to DEFAULT_GEOCODE_SLEEP_MS. */ - GEOCODE_SLEEP_MS?: string; - }; - /** Cloudflare Worker execution context. Use `ctx.waitUntil(promise)` to - * let the worker keep a fire-and-forget task alive after the response - * has been sent. Optional in dev (wrangler proxy may not provide it). */ - ctx?: { waitUntil(promise: Promise): void }; + } + namespace Cloudflare { + interface Env { + OAUTH_SESSIONS: KVNamespace; + OAUTH_STATES: KVNamespace; + CLIENT_ASSERTION_KEY: string; + COOKIE_SECRET: string; + OAUTH_PUBLIC_URL: string; + DB: D1Database; + ASSETS?: Fetcher; + OG_IMAGES?: R2Bucket; + OG_DAILY_GENERATION_LIMIT?: string; + OG_CYCLE_GENERATION_LIMIT?: string; + OG_BILLING_CYCLE_START_DAY?: string; + CRON_SECRET: string; + /** Handle or DID of the reply bot, e.g. `going.atmo.rsvp`. */ + BOT_IDENTIFIER?: string; + /** App password for the bot account (set via `wrangler secret put`). */ + BOT_APP_PASSWORD?: string; + /** PDS the bot authenticates against; defaults to bsky.social. */ + BOT_PDS_URL?: string; + /** Meilisearch base url for the search read path (search/near-me). + * When either var is unset, search falls back to the D1 path and + * near-me is unavailable. */ + SEARCH_URL?: string; + /** Read-only Default Search API Key (set via `wrangler secret put`). + * Never the admin or root key. */ + SEARCH_API_KEY?: string; + /** Search index uid; defaults to `events`. Shared by the read path + * and the write sink (one index, written and read), so there is no + * separate write-side index var. */ + SEARCH_INDEX?: string; + /** Meilisearch base url for the WRITE path (the search sink). Kept + * distinct from SEARCH_URL so the writer can use the admin key while + * the read path stays on the search-only key. When unset, the cron + * ingest runs without feeding search (D1 fallback still serves). */ + SEARCH_SINK_URL?: string; + /** Default Admin API Key for the write path (set via + * `wrangler secret put`). Never the instance root key. */ + SEARCH_SINK_API_KEY?: string; + /** Forward-geocoder endpoint for the address→_geo drip (the cron job + * that resolves coordinates for newly-ingested address-only events). + * Nominatim-compatible /search; LocationIQ = `https://us1.locationiq.com/v1/search`. + * Reuses the SEARCH_SINK_* Meili write creds + the DB binding, so this + * plus GEOCODER_KEY are the only drip-specific config. */ + GEOCODER_URL?: string; + /** Geocoder API key (LocationIQ), set via `wrangler secret put`. When + * unset, the drip no-ops (it won't fall back to public Nominatim). */ + GEOCODER_KEY?: string; + /** Optional User-Agent for geocoder requests. */ + GEOCODER_USER_AGENT?: string; + /** Min ms between geocoder calls in the drip — the rate limiter. Set to + * the ceiling the geocoder tier allows; defaults to DEFAULT_GEOCODE_SLEEP_MS. */ + GEOCODE_SLEEP_MS?: string; } } } diff --git a/apps/web/src/hooks.server.ts b/apps/web/src/hooks.server.ts index 95ac055..8447e80 100644 --- a/apps/web/src/hooks.server.ts +++ b/apps/web/src/hooks.server.ts @@ -1,12 +1,7 @@ -import type { Handle } from '@sveltejs/kit'; -import { restoreSession } from '$lib/atproto/server/session'; +import { building } from '$app/env'; +import type { Handle } from '@sveltejs/kit/hooks'; +import { getAuth } from '#lib/atproto/server/oauth.js'; -export const handle: Handle = async ({ event, resolve }) => { - const { session, client, did } = await restoreSession(event.cookies, event.platform?.env); - - event.locals.session = session; - event.locals.client = client; - event.locals.did = did; - - return resolve(event); -}; +// The library owns OAuth routes, signed cookies, restoration, and revocation. +export const handle: Handle = (input) => + building ? input.resolve(input.event) : getAuth().handle(input); diff --git a/apps/web/src/lexicon-types/index.ts b/apps/web/src/lexicon-types/index.ts index 2bb9fb4..c86cca1 100644 --- a/apps/web/src/lexicon-types/index.ts +++ b/apps/web/src/lexicon-types/index.ts @@ -1,5 +1,3 @@ -export * as AppBskyActorProfile from "./types/app/bsky/actor/profile.js"; -export * as AppBskyGraphFollow from "./types/app/bsky/graph/follow.js"; export * as CommunityLexiconCalendarEvent from "./types/community/lexicon/calendar/event.js"; export * as CommunityLexiconCalendarRsvp from "./types/community/lexicon/calendar/rsvp.js"; export * as CommunityLexiconLocationAddress from "./types/community/lexicon/location/address.js"; diff --git a/apps/web/src/lexicon-types/types/app/bsky/actor/profile.ts b/apps/web/src/lexicon-types/types/app/bsky/actor/profile.ts deleted file mode 100644 index 205a1fe..0000000 --- a/apps/web/src/lexicon-types/types/app/bsky/actor/profile.ts +++ /dev/null @@ -1,86 +0,0 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; -import type {} from "@atcute/lexicons/ambient"; -import * as ComAtprotoLabelDefs from "@atcute/atproto/types/label/defs"; -import * as ComAtprotoRepoStrongRef from "@atcute/atproto/types/repo/strongRef"; - -const _mainSchema = /*#__PURE__*/ v.record( - /*#__PURE__*/ v.literal("self"), - /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.literal("app.bsky.actor.profile"), - /** - * Small image to be displayed next to posts from account. AKA, 'profile picture' - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - avatar: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - /** - * Larger horizontal image to display behind profile view. - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - banner: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - createdAt: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), - /** - * Free-form profile description text. - * @maxLength 2560 - * @maxGraphemes 256 - */ - description: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 2560), - /*#__PURE__*/ v.stringGraphemes(0, 256), - ]), - ), - /** - * @maxLength 640 - * @maxGraphemes 64 - */ - displayName: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 640), - /*#__PURE__*/ v.stringGraphemes(0, 64), - ]), - ), - get joinedViaStarterPack() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Self-label values, specific to the Bluesky application, on the overall account. - */ - get labels() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.variant([ComAtprotoLabelDefs.selfLabelsSchema]), - ); - }, - get pinnedPost() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Free-form pronouns text. - * @maxLength 200 - * @maxGraphemes 20 - */ - pronouns: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 200), - /*#__PURE__*/ v.stringGraphemes(0, 20), - ]), - ), - website: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.genericUriString()), - }), -); - -type main$schematype = typeof _mainSchema; - -export interface mainSchema extends main$schematype {} - -export const mainSchema = _mainSchema as mainSchema; - -export interface Main extends v.InferInput {} - -declare module "@atcute/lexicons/ambient" { - interface Records { - "app.bsky.actor.profile": mainSchema; - } -} diff --git a/apps/web/src/lexicon-types/types/app/bsky/graph/follow.ts b/apps/web/src/lexicon-types/types/app/bsky/graph/follow.ts deleted file mode 100644 index 43782a5..0000000 --- a/apps/web/src/lexicon-types/types/app/bsky/graph/follow.ts +++ /dev/null @@ -1,30 +0,0 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; -import type {} from "@atcute/lexicons/ambient"; -import * as ComAtprotoRepoStrongRef from "@atcute/atproto/types/repo/strongRef"; - -const _mainSchema = /*#__PURE__*/ v.record( - /*#__PURE__*/ v.tidString(), - /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.literal("app.bsky.graph.follow"), - createdAt: /*#__PURE__*/ v.datetimeString(), - subject: /*#__PURE__*/ v.didString(), - get via() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - }), -); - -type main$schematype = typeof _mainSchema; - -export interface mainSchema extends main$schematype {} - -export const mainSchema = _mainSchema as mainSchema; - -export interface Main extends v.InferInput {} - -declare module "@atcute/lexicons/ambient" { - interface Records { - "app.bsky.graph.follow": mainSchema; - } -} diff --git a/apps/web/src/lexicon-types/types/community/lexicon/calendar/event.ts b/apps/web/src/lexicon-types/types/community/lexicon/calendar/event.ts index 2223e00..7127a51 100644 --- a/apps/web/src/lexicon-types/types/community/lexicon/calendar/event.ts +++ b/apps/web/src/lexicon-types/types/community/lexicon/calendar/event.ts @@ -1,130 +1,99 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; -import type {} from "@atcute/lexicons/ambient"; +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +import type {} from '@atcute/lexicons/ambient'; import * as CommunityLexiconLocationAddress from "../location/address.js"; import * as CommunityLexiconLocationFsq from "../location/fsq.js"; import * as CommunityLexiconLocationGeo from "../location/geo.js"; import * as CommunityLexiconLocationHthree from "../location/hthree.js"; -const _cancelledSchema = /*#__PURE__*/ v.literal( - "community.lexicon.calendar.event#cancelled", -); -const _hybridSchema = /*#__PURE__*/ v.literal( - "community.lexicon.calendar.event#hybrid", -); -const _inpersonSchema = /*#__PURE__*/ v.literal( - "community.lexicon.calendar.event#inperson", -); +const _cancelledSchema = /*#__PURE__*/ v.literal("community.lexicon.calendar.event#cancelled"); +const _hybridSchema = /*#__PURE__*/ v.literal("community.lexicon.calendar.event#hybrid"); +const _inpersonSchema = /*#__PURE__*/ v.literal("community.lexicon.calendar.event#inperson"); const _mainSchema = /*#__PURE__*/ v.record( - /*#__PURE__*/ v.tidString(), - /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.literal("community.lexicon.calendar.event"), - /** - * Client-declared timestamp when the event was created. - */ - createdAt: /*#__PURE__*/ v.datetimeString(), - /** - * The description of the event. - */ - description: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Client-declared timestamp when the event ends. - */ - endsAt: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), - /** - * The locations where the event takes place. - */ - get locations() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array( - /*#__PURE__*/ v.variant([ - uriSchema, - CommunityLexiconLocationAddress.mainSchema, - CommunityLexiconLocationFsq.mainSchema, - CommunityLexiconLocationGeo.mainSchema, - CommunityLexiconLocationHthree.mainSchema, - ]), - ), - ); - }, - /** - * The attendance mode of the event. - */ - get mode() { - return /*#__PURE__*/ v.optional(modeSchema); - }, - /** - * The name of the event. - */ - name: /*#__PURE__*/ v.string(), - /** - * Whether a response is requested from attendees. - */ - rsvpExpected: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), - /** - * Client-declared timestamp when the event starts. - */ - startsAt: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), - /** - * The status of the event. - */ - get status() { - return /*#__PURE__*/ v.optional(statusSchema); - }, - /** - * URIs associated with the event. - */ - get uris() { - return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(uriSchema)); - }, - }), + /*#__PURE__*/ v.tidString(), + /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.literal("community.lexicon.calendar.event"), + /** + * Client-declared timestamp when the event was created. + */ + "createdAt": /*#__PURE__*/ v.datetimeString(), + /** + * The description of the event. + */ + "description": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Client-declared timestamp when the event ends. + */ + "endsAt": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), + /** + * The locations where the event takes place. + */ + get "locations"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(/*#__PURE__*/ v.variant([ + uriSchema, + CommunityLexiconLocationAddress.mainSchema, + CommunityLexiconLocationFsq.mainSchema, + CommunityLexiconLocationGeo.mainSchema, + CommunityLexiconLocationHthree.mainSchema + ]))) + }, + /** + * The attendance mode of the event. + */ + get "mode"() { + return /*#__PURE__*/ v.optional(modeSchema) + }, + /** + * The name of the event. + */ + "name": /*#__PURE__*/ v.string(), + /** + * Whether a response is requested from attendees. + */ + "rsvpExpected": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), + /** + * Client-declared timestamp when the event starts. + */ + "startsAt": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), + /** + * The status of the event. + */ + get "status"() { + return /*#__PURE__*/ v.optional(statusSchema) + }, + /** + * URIs associated with the event. + */ + get "uris"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(uriSchema)) + }, + } + ) ); const _modeSchema = /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.string< - | "community.lexicon.calendar.event#hybrid" - | "community.lexicon.calendar.event#inperson" - | "community.lexicon.calendar.event#virtual" - | (string & {}) - >(), - "community.lexicon.calendar.event#inperson", -); -const _plannedSchema = /*#__PURE__*/ v.literal( - "community.lexicon.calendar.event#planned", -); -const _postponedSchema = /*#__PURE__*/ v.literal( - "community.lexicon.calendar.event#postponed", -); -const _rescheduledSchema = /*#__PURE__*/ v.literal( - "community.lexicon.calendar.event#rescheduled", -); -const _scheduledSchema = /*#__PURE__*/ v.literal( - "community.lexicon.calendar.event#scheduled", + /*#__PURE__*/ v.string<"community.lexicon.calendar.event#hybrid" | "community.lexicon.calendar.event#inperson" | "community.lexicon.calendar.event#virtual" | (string & {})>(), + "community.lexicon.calendar.event#inperson" ); +const _plannedSchema = /*#__PURE__*/ v.literal("community.lexicon.calendar.event#planned"); +const _postponedSchema = /*#__PURE__*/ v.literal("community.lexicon.calendar.event#postponed"); +const _rescheduledSchema = /*#__PURE__*/ v.literal("community.lexicon.calendar.event#rescheduled"); +const _scheduledSchema = /*#__PURE__*/ v.literal("community.lexicon.calendar.event#scheduled"); const _statusSchema = /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.string< - | "community.lexicon.calendar.event#cancelled" - | "community.lexicon.calendar.event#planned" - | "community.lexicon.calendar.event#postponed" - | "community.lexicon.calendar.event#rescheduled" - | "community.lexicon.calendar.event#scheduled" - | (string & {}) - >(), - "community.lexicon.calendar.event#scheduled", + /*#__PURE__*/ v.string<"community.lexicon.calendar.event#cancelled" | "community.lexicon.calendar.event#planned" | "community.lexicon.calendar.event#postponed" | "community.lexicon.calendar.event#rescheduled" | "community.lexicon.calendar.event#scheduled" | (string & {})>(), + "community.lexicon.calendar.event#scheduled" ); -const _uriSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("community.lexicon.calendar.event#uri"), - ), - /** - * The display name of the URI. - */ - name: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - uri: /*#__PURE__*/ v.genericUriString(), -}); -const _virtualSchema = /*#__PURE__*/ v.literal( - "community.lexicon.calendar.event#virtual", +const _uriSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("community.lexicon.calendar.event#uri")), + /** + * The display name of the URI. + */ + "name": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "uri": /*#__PURE__*/ v.genericUriString(), + } ); - +const _virtualSchema = /*#__PURE__*/ v.literal("community.lexicon.calendar.event#virtual"); type cancelled$schematype = typeof _cancelledSchema; type hybrid$schematype = typeof _hybridSchema; type inperson$schematype = typeof _inpersonSchema; @@ -139,18 +108,28 @@ type uri$schematype = typeof _uriSchema; type virtual$schematype = typeof _virtualSchema; export interface cancelledSchema extends cancelled$schematype {} + export interface hybridSchema extends hybrid$schematype {} + export interface inpersonSchema extends inperson$schematype {} + export interface mainSchema extends main$schematype {} + export interface modeSchema extends mode$schematype {} + export interface plannedSchema extends planned$schematype {} + export interface postponedSchema extends postponed$schematype {} + export interface rescheduledSchema extends rescheduled$schematype {} + export interface scheduledSchema extends scheduled$schematype {} + export interface statusSchema extends status$schematype {} + export interface uriSchema extends uri$schematype {} -export interface virtualSchema extends virtual$schematype {} +export interface virtualSchema extends virtual$schematype {} export const cancelledSchema = _cancelledSchema as cancelledSchema; export const hybridSchema = _hybridSchema as hybridSchema; export const inpersonSchema = _inpersonSchema as inpersonSchema; @@ -163,10 +142,10 @@ export const scheduledSchema = _scheduledSchema as scheduledSchema; export const statusSchema = _statusSchema as statusSchema; export const uriSchema = _uriSchema as uriSchema; export const virtualSchema = _virtualSchema as virtualSchema; - export type Cancelled = v.InferInput; export type Hybrid = v.InferInput; export type Inperson = v.InferInput; + export interface Main extends v.InferInput {} export type Mode = v.InferInput; export type Planned = v.InferInput; @@ -174,11 +153,11 @@ export type Postponed = v.InferInput; export type Rescheduled = v.InferInput; export type Scheduled = v.InferInput; export type Status = v.InferInput; + export interface Uri extends v.InferInput {} export type Virtual = v.InferInput; - -declare module "@atcute/lexicons/ambient" { - interface Records { - "community.lexicon.calendar.event": mainSchema; - } +declare module '@atcute/lexicons/ambient' { + interface Records { + "community.lexicon.calendar.event": mainSchema; + } } diff --git a/apps/web/src/lexicon-types/types/community/lexicon/calendar/rsvp.ts b/apps/web/src/lexicon-types/types/community/lexicon/calendar/rsvp.ts index 1b02d00..48feaae 100644 --- a/apps/web/src/lexicon-types/types/community/lexicon/calendar/rsvp.ts +++ b/apps/web/src/lexicon-types/types/community/lexicon/calendar/rsvp.ts @@ -1,61 +1,52 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; -import type {} from "@atcute/lexicons/ambient"; +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +import type {} from '@atcute/lexicons/ambient'; import * as ComAtprotoRepoStrongRef from "@atcute/atproto/types/repo/strongRef"; -const _goingSchema = /*#__PURE__*/ v.literal( - "community.lexicon.calendar.rsvp#going", -); -const _interestedSchema = /*#__PURE__*/ v.literal( - "community.lexicon.calendar.rsvp#interested", -); +const _goingSchema = /*#__PURE__*/ v.literal("community.lexicon.calendar.rsvp#going"); +const _interestedSchema = /*#__PURE__*/ v.literal("community.lexicon.calendar.rsvp#interested"); const _mainSchema = /*#__PURE__*/ v.record( - /*#__PURE__*/ v.tidString(), - /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.literal("community.lexicon.calendar.rsvp"), - /** - * @default "community.lexicon.calendar.rsvp#going" - */ - status: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.string< - | "community.lexicon.calendar.rsvp#going" - | "community.lexicon.calendar.rsvp#interested" - | "community.lexicon.calendar.rsvp#notgoing" - | (string & {}) - >(), - "community.lexicon.calendar.rsvp#going", - ), - get subject() { - return ComAtprotoRepoStrongRef.mainSchema; - }, - }), -); -const _notgoingSchema = /*#__PURE__*/ v.literal( - "community.lexicon.calendar.rsvp#notgoing", + /*#__PURE__*/ v.tidString(), + /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.literal("community.lexicon.calendar.rsvp"), + /** + * @default "community.lexicon.calendar.rsvp#going" + */ + "status": /*#__PURE__*/ v.optional( + /*#__PURE__*/ v.string<"community.lexicon.calendar.rsvp#going" | "community.lexicon.calendar.rsvp#interested" | "community.lexicon.calendar.rsvp#notgoing" | (string & {})>(), + "community.lexicon.calendar.rsvp#going" + ), + get "subject"() { + return ComAtprotoRepoStrongRef.mainSchema + }, + } + ) ); - +const _notgoingSchema = /*#__PURE__*/ v.literal("community.lexicon.calendar.rsvp#notgoing"); type going$schematype = typeof _goingSchema; type interested$schematype = typeof _interestedSchema; type main$schematype = typeof _mainSchema; type notgoing$schematype = typeof _notgoingSchema; export interface goingSchema extends going$schematype {} + export interface interestedSchema extends interested$schematype {} + export interface mainSchema extends main$schematype {} -export interface notgoingSchema extends notgoing$schematype {} +export interface notgoingSchema extends notgoing$schematype {} export const goingSchema = _goingSchema as goingSchema; export const interestedSchema = _interestedSchema as interestedSchema; export const mainSchema = _mainSchema as mainSchema; export const notgoingSchema = _notgoingSchema as notgoingSchema; - export type Going = v.InferInput; export type Interested = v.InferInput; + export interface Main extends v.InferInput {} export type Notgoing = v.InferInput; - -declare module "@atcute/lexicons/ambient" { - interface Records { - "community.lexicon.calendar.rsvp": mainSchema; - } +declare module '@atcute/lexicons/ambient' { + interface Records { + "community.lexicon.calendar.rsvp": mainSchema; + } } diff --git a/apps/web/src/lexicon-types/types/community/lexicon/location/address.ts b/apps/web/src/lexicon-types/types/community/lexicon/location/address.ts index 4e14479..0f6988c 100644 --- a/apps/web/src/lexicon-types/types/community/lexicon/location/address.ts +++ b/apps/web/src/lexicon-types/types/community/lexicon/location/address.ts @@ -1,44 +1,43 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; - -const _mainSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("community.lexicon.location.address"), - ), - /** - * The ISO 3166 country code. Preferably the 2-letter code. - * @minLength 2 - * @maxLength 10 - */ - country: /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(2, 10), - ]), - /** - * The locality of the region. For example, a city in the USA. - */ - locality: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * The name of the location. - */ - name: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * The postal code of the location. - */ - postalCode: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * The administrative region of the country. For example, a state in the USA. - */ - region: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * The street address. - */ - street: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), -}); +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +const _mainSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("community.lexicon.location.address")), + /** + * The ISO 3166 country code. Preferably the 2-letter code. + * @minLength 2 + * @maxLength 10 + */ + "country": /*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [/*#__PURE__*/ v.stringLength(2, 10)] + ), + /** + * The locality of the region. For example, a city in the USA. + */ + "locality": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * The name of the location. + */ + "name": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * The postal code of the location. + */ + "postalCode": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * The administrative region of the country. For example, a state in the USA. + */ + "region": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * The street address. + */ + "street": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + } +); type main$schematype = typeof _mainSchema; export interface mainSchema extends main$schematype {} - export const mainSchema = _mainSchema as mainSchema; export interface Main extends v.InferInput {} diff --git a/apps/web/src/lexicon-types/types/community/lexicon/location/fsq.ts b/apps/web/src/lexicon-types/types/community/lexicon/location/fsq.ts index fd26cbc..7419919 100644 --- a/apps/web/src/lexicon-types/types/community/lexicon/location/fsq.ts +++ b/apps/web/src/lexicon-types/types/community/lexicon/location/fsq.ts @@ -1,26 +1,24 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; - -const _mainSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("community.lexicon.location.fsq"), - ), - /** - * The unique identifier of a Foursquare POI. - */ - fsq_place_id: /*#__PURE__*/ v.string(), - latitude: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - longitude: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * The name of the location. - */ - name: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), -}); +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +const _mainSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("community.lexicon.location.fsq")), + /** + * The unique identifier of a Foursquare POI. + */ + "fsq_place_id": /*#__PURE__*/ v.string(), + "latitude": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "longitude": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * The name of the location. + */ + "name": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + } +); type main$schematype = typeof _mainSchema; export interface mainSchema extends main$schematype {} - export const mainSchema = _mainSchema as mainSchema; export interface Main extends v.InferInput {} diff --git a/apps/web/src/lexicon-types/types/community/lexicon/location/geo.ts b/apps/web/src/lexicon-types/types/community/lexicon/location/geo.ts index 010ed71..e097664 100644 --- a/apps/web/src/lexicon-types/types/community/lexicon/location/geo.ts +++ b/apps/web/src/lexicon-types/types/community/lexicon/location/geo.ts @@ -1,23 +1,21 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; - -const _mainSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("community.lexicon.location.geo"), - ), - altitude: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - latitude: /*#__PURE__*/ v.string(), - longitude: /*#__PURE__*/ v.string(), - /** - * The name of the location. - */ - name: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), -}); +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +const _mainSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("community.lexicon.location.geo")), + "altitude": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "latitude": /*#__PURE__*/ v.string(), + "longitude": /*#__PURE__*/ v.string(), + /** + * The name of the location. + */ + "name": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + } +); type main$schematype = typeof _mainSchema; export interface mainSchema extends main$schematype {} - export const mainSchema = _mainSchema as mainSchema; export interface Main extends v.InferInput {} diff --git a/apps/web/src/lexicon-types/types/community/lexicon/location/hthree.ts b/apps/web/src/lexicon-types/types/community/lexicon/location/hthree.ts index e321602..64f95e4 100644 --- a/apps/web/src/lexicon-types/types/community/lexicon/location/hthree.ts +++ b/apps/web/src/lexicon-types/types/community/lexicon/location/hthree.ts @@ -1,24 +1,22 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; - -const _mainSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("community.lexicon.location.hthree"), - ), - /** - * The name of the location. - */ - name: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * The h3 encoded location. - */ - value: /*#__PURE__*/ v.string(), -}); +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +const _mainSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("community.lexicon.location.hthree")), + /** + * The name of the location. + */ + "name": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * The h3 encoded location. + */ + "value": /*#__PURE__*/ v.string(), + } +); type main$schematype = typeof _mainSchema; export interface mainSchema extends main$schematype {} - export const mainSchema = _mainSchema as mainSchema; export interface Main extends v.InferInput {} diff --git a/apps/web/src/lexicon-types/types/rsvp/atmo/event/getRecord.ts b/apps/web/src/lexicon-types/types/rsvp/atmo/event/getRecord.ts index 8bd5fda..ac72834 100644 --- a/apps/web/src/lexicon-types/types/rsvp/atmo/event/getRecord.ts +++ b/apps/web/src/lexicon-types/types/rsvp/atmo/event/getRecord.ts @@ -1,190 +1,198 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; -import type {} from "@atcute/lexicons/ambient"; +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +import type {} from '@atcute/lexicons/ambient'; import * as ComAtprotoLabelDefs from "@atcute/atproto/types/label/defs"; import * as ComAtprotoRepoStrongRef from "@atcute/atproto/types/repo/strongRef"; import * as CommunityLexiconCalendarEvent from "../../../community/lexicon/calendar/event.js"; import * as CommunityLexiconCalendarRsvp from "../../../community/lexicon/calendar/rsvp.js"; -const _appBskyActorProfileSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.event.getRecord#appBskyActorProfile"), - ), - /** - * Small image to be displayed next to posts from account. AKA, 'profile picture' - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - avatar: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - /** - * Larger horizontal image to display behind profile view. - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - banner: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - createdAt: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), - /** - * Free-form profile description text. - * @maxLength 2560 - * @maxGraphemes 256 - */ - description: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 2560), - /*#__PURE__*/ v.stringGraphemes(0, 256), - ]), - ), - /** - * @maxLength 640 - * @maxGraphemes 64 - */ - displayName: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 640), - /*#__PURE__*/ v.stringGraphemes(0, 64), - ]), - ), - get joinedViaStarterPack() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Self-label values, specific to the Bluesky application, on the overall account. - */ - get labels() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.variant([ComAtprotoLabelDefs.selfLabelsSchema]), - ); - }, - get pinnedPost() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Free-form pronouns text. - * @maxLength 200 - * @maxGraphemes 20 - */ - pronouns: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 200), - /*#__PURE__*/ v.stringGraphemes(0, 20), - ]), - ), - website: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.genericUriString()), -}); -const _hydrateRsvpsSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.event.getRecord#hydrateRsvps"), - ), - get going() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(hydrateRsvpsRecordSchema), - ); - }, - get interested() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(hydrateRsvpsRecordSchema), - ); - }, - get notgoing() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(hydrateRsvpsRecordSchema), - ); - }, - get other() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(hydrateRsvpsRecordSchema), - ); - }, -}); -const _hydrateRsvpsRecordSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.event.getRecord#hydrateRsvpsRecord"), - ), - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - collection: /*#__PURE__*/ v.nsidString(), - did: /*#__PURE__*/ v.didString(), - get record() { - return /*#__PURE__*/ v.optional(CommunityLexiconCalendarRsvp.mainSchema); - }, - rkey: /*#__PURE__*/ v.string(), - time_us: /*#__PURE__*/ v.integer(), - uri: /*#__PURE__*/ v.resourceUriString(), -}); -const _mainSchema = /*#__PURE__*/ v.query("rsvp.atmo.event.getRecord", { - params: /*#__PURE__*/ v.object({ - /** - * Number of rsvps records to embed - * @minimum 1 - * @maximum 50 - */ - hydrateRsvps: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.integer(), [ - /*#__PURE__*/ v.integerRange(1, 50), - ]), - ), - /** - * Include profile + identity info keyed by DID - */ - profiles: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), - /** - * AT URI of the record - */ - uri: /*#__PURE__*/ v.resourceUriString(), - }), - output: { - type: "lex", - schema: /*#__PURE__*/ v.object({ - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), - collection: /*#__PURE__*/ v.nsidString(), - did: /*#__PURE__*/ v.didString(), - get profiles() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(profileEntrySchema), - ); - }, - rkey: /*#__PURE__*/ v.string(), - get rsvps() { - return /*#__PURE__*/ v.optional(hydrateRsvpsSchema); - }, - /** - * Total rsvps count - */ - rsvpsCount: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * rsvps count where status = going - */ - rsvpsGoingCount: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * rsvps count where status = interested - */ - rsvpsInterestedCount: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * rsvps count where status = notgoing - */ - rsvpsNotgoingCount: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - time_us: /*#__PURE__*/ v.integer(), - uri: /*#__PURE__*/ v.resourceUriString(), - get value() { - return CommunityLexiconCalendarEvent.mainSchema; - }, - }), - }, -}); -const _profileEntrySchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.event.getRecord#profileEntry"), - ), - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), - collection: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.nsidString()), - did: /*#__PURE__*/ v.didString(), - handle: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - rkey: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - uri: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), - get value() { - return /*#__PURE__*/ v.optional(appBskyActorProfileSchema); - }, -}); - +const _appBskyActorProfileSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.event.getRecord#appBskyActorProfile")), + /** + * Small image to be displayed next to posts from account. AKA, 'profile picture' + * @accept image/png, image/jpeg + * @maxSize 1000000 + */ + "avatar": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.blob(), + [ + /*#__PURE__*/ v.blobSize(1000000), + /*#__PURE__*/ v.blobAccept(["image/png", "image/jpeg"]) + ] + )), + /** + * Larger horizontal image to display behind profile view. + * @accept image/png, image/jpeg + * @maxSize 1000000 + */ + "banner": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.blob(), + [ + /*#__PURE__*/ v.blobSize(1000000), + /*#__PURE__*/ v.blobAccept(["image/png", "image/jpeg"]) + ] + )), + "createdAt": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), + /** + * Free-form profile description text. + * @maxLength 2560 + * @maxGraphemes 256 + */ + "description": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 2560), + /*#__PURE__*/ v.stringGraphemes(0, 256) + ] + )), + /** + * @maxLength 640 + * @maxGraphemes 64 + */ + "displayName": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 640), + /*#__PURE__*/ v.stringGraphemes(0, 64) + ] + )), + get "joinedViaStarterPack"() { + return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema) + }, + /** + * Self-label values, specific to the Bluesky application, on the overall account. + */ + get "labels"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.variant([ComAtprotoLabelDefs.selfLabelsSchema])) + }, + get "pinnedPost"() { + return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema) + }, + /** + * Free-form pronouns text. + * @maxLength 200 + * @maxGraphemes 20 + */ + "pronouns": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 200), + /*#__PURE__*/ v.stringGraphemes(0, 20) + ] + )), + "website": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.genericUriString()), + } +); +const _hydrateRsvpsSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.event.getRecord#hydrateRsvps")), + get "going"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(hydrateRsvpsRecordSchema)) + }, + get "interested"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(hydrateRsvpsRecordSchema)) + }, + get "notgoing"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(hydrateRsvpsRecordSchema)) + }, + get "other"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(hydrateRsvpsRecordSchema)) + }, + } +); +const _hydrateRsvpsRecordSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.event.getRecord#hydrateRsvpsRecord")), + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "collection": /*#__PURE__*/ v.nsidString(), + "did": /*#__PURE__*/ v.didString(), + get "record"() { + return /*#__PURE__*/ v.optional(CommunityLexiconCalendarRsvp.mainSchema) + }, + "rkey": /*#__PURE__*/ v.string(), + "time_us": /*#__PURE__*/ v.integer(), + "uri": /*#__PURE__*/ v.resourceUriString(), + } +); +const _mainSchema = /*#__PURE__*/ v.query( + "rsvp.atmo.event.getRecord", + { + "params": /*#__PURE__*/ v.object( + { + /** + * Number of rsvps records to embed + * @minimum 1 + * @maximum 50 + */ + "hydrateRsvps": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.integer(), + [/*#__PURE__*/ v.integerRange(1, 50)] + )), + /** + * Include profile + identity info keyed by DID + */ + "profiles": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), + /** + * AT URI of the record + */ + "uri": /*#__PURE__*/ v.resourceUriString(), + } + ), + "output": { + "type": "lex", + "schema": /*#__PURE__*/ v.object( + { + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), + "collection": /*#__PURE__*/ v.nsidString(), + "did": /*#__PURE__*/ v.didString(), + get "profiles"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(profileEntrySchema)) + }, + "rkey": /*#__PURE__*/ v.string(), + get "rsvps"() { + return /*#__PURE__*/ v.optional(hydrateRsvpsSchema) + }, + /** + * Total rsvps count + */ + "rsvpsCount": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * rsvps count where status = going + */ + "rsvpsGoingCount": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * rsvps count where status = interested + */ + "rsvpsInterestedCount": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * rsvps count where status = notgoing + */ + "rsvpsNotgoingCount": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + "time_us": /*#__PURE__*/ v.integer(), + "uri": /*#__PURE__*/ v.resourceUriString(), + get "value"() { + return CommunityLexiconCalendarEvent.mainSchema + }, + } + ), + } + } +); +const _profileEntrySchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.event.getRecord#profileEntry")), + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), + "collection": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.nsidString()), + "did": /*#__PURE__*/ v.didString(), + "handle": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "rkey": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "uri": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), + get "value"() { + return /*#__PURE__*/ v.optional(appBskyActorProfileSchema) + }, + } +); type appBskyActorProfile$schematype = typeof _appBskyActorProfileSchema; type hydrateRsvps$schematype = typeof _hydrateRsvpsSchema; type hydrateRsvpsRecord$schematype = typeof _hydrateRsvpsRecordSchema; @@ -192,33 +200,33 @@ type main$schematype = typeof _mainSchema; type profileEntry$schematype = typeof _profileEntrySchema; export interface appBskyActorProfileSchema extends appBskyActorProfile$schematype {} + export interface hydrateRsvpsSchema extends hydrateRsvps$schematype {} + export interface hydrateRsvpsRecordSchema extends hydrateRsvpsRecord$schematype {} + export interface mainSchema extends main$schematype {} -export interface profileEntrySchema extends profileEntry$schematype {} -export const appBskyActorProfileSchema = - _appBskyActorProfileSchema as appBskyActorProfileSchema; +export interface profileEntrySchema extends profileEntry$schematype {} +export const appBskyActorProfileSchema = _appBskyActorProfileSchema as appBskyActorProfileSchema; export const hydrateRsvpsSchema = _hydrateRsvpsSchema as hydrateRsvpsSchema; -export const hydrateRsvpsRecordSchema = - _hydrateRsvpsRecordSchema as hydrateRsvpsRecordSchema; +export const hydrateRsvpsRecordSchema = _hydrateRsvpsRecordSchema as hydrateRsvpsRecordSchema; export const mainSchema = _mainSchema as mainSchema; export const profileEntrySchema = _profileEntrySchema as profileEntrySchema; -export interface AppBskyActorProfile extends v.InferInput< - typeof appBskyActorProfileSchema -> {} +export interface AppBskyActorProfile extends v.InferInput {} + export interface HydrateRsvps extends v.InferInput {} -export interface HydrateRsvpsRecord extends v.InferInput< - typeof hydrateRsvpsRecordSchema -> {} + +export interface HydrateRsvpsRecord extends v.InferInput {} + export interface ProfileEntry extends v.InferInput {} -export interface $params extends v.InferInput {} -export interface $output extends v.InferXRPCBodyInput {} +export interface $params extends v.InferInput {} -declare module "@atcute/lexicons/ambient" { - interface XRPCQueries { - "rsvp.atmo.event.getRecord": mainSchema; - } +export interface $output extends v.InferXRPCBodyInput {} +declare module '@atcute/lexicons/ambient' { + interface XRPCQueries { + "rsvp.atmo.event.getRecord": mainSchema; + } } diff --git a/apps/web/src/lexicon-types/types/rsvp/atmo/event/listRecords.ts b/apps/web/src/lexicon-types/types/rsvp/atmo/event/listRecords.ts index bc7d8b5..87a9763 100644 --- a/apps/web/src/lexicon-types/types/rsvp/atmo/event/listRecords.ts +++ b/apps/web/src/lexicon-types/types/rsvp/atmo/event/listRecords.ts @@ -1,305 +1,292 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; -import type {} from "@atcute/lexicons/ambient"; +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +import type {} from '@atcute/lexicons/ambient'; import * as ComAtprotoLabelDefs from "@atcute/atproto/types/label/defs"; import * as ComAtprotoRepoStrongRef from "@atcute/atproto/types/repo/strongRef"; import * as CommunityLexiconCalendarEvent from "../../../community/lexicon/calendar/event.js"; import * as CommunityLexiconCalendarRsvp from "../../../community/lexicon/calendar/rsvp.js"; -const _appBskyActorProfileSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.event.listRecords#appBskyActorProfile"), - ), - /** - * Small image to be displayed next to posts from account. AKA, 'profile picture' - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - avatar: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - /** - * Larger horizontal image to display behind profile view. - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - banner: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - createdAt: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), - /** - * Free-form profile description text. - * @maxLength 2560 - * @maxGraphemes 256 - */ - description: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 2560), - /*#__PURE__*/ v.stringGraphemes(0, 256), - ]), - ), - /** - * @maxLength 640 - * @maxGraphemes 64 - */ - displayName: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 640), - /*#__PURE__*/ v.stringGraphemes(0, 64), - ]), - ), - get joinedViaStarterPack() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Self-label values, specific to the Bluesky application, on the overall account. - */ - get labels() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.variant([ComAtprotoLabelDefs.selfLabelsSchema]), - ); - }, - get pinnedPost() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Free-form pronouns text. - * @maxLength 200 - * @maxGraphemes 20 - */ - pronouns: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 200), - /*#__PURE__*/ v.stringGraphemes(0, 20), - ]), - ), - website: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.genericUriString()), -}); -const _hydrateRsvpsSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.event.listRecords#hydrateRsvps"), - ), - get going() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(hydrateRsvpsRecordSchema), - ); - }, - get interested() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(hydrateRsvpsRecordSchema), - ); - }, - get notgoing() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(hydrateRsvpsRecordSchema), - ); - }, - get other() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(hydrateRsvpsRecordSchema), - ); - }, -}); -const _hydrateRsvpsRecordSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.event.listRecords#hydrateRsvpsRecord"), - ), - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - collection: /*#__PURE__*/ v.nsidString(), - did: /*#__PURE__*/ v.didString(), - get record() { - return /*#__PURE__*/ v.optional(CommunityLexiconCalendarRsvp.mainSchema); - }, - rkey: /*#__PURE__*/ v.string(), - time_us: /*#__PURE__*/ v.integer(), - uri: /*#__PURE__*/ v.resourceUriString(), -}); -const _mainSchema = /*#__PURE__*/ v.query("rsvp.atmo.event.listRecords", { - params: /*#__PURE__*/ v.object({ - /** - * Filter by DID or handle (triggers on-demand backfill) - */ - actor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.actorIdentifierString()), - /** - * Maximum value for createdAt - */ - createdAtMax: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Minimum value for createdAt - */ - createdAtMin: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Filter by description - */ - description: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Maximum value for endsAt - */ - endsAtMax: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Minimum value for endsAt - */ - endsAtMin: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Number of rsvps records to embed per record - * @minimum 1 - * @maximum 50 - */ - hydrateRsvps: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.integer(), [ - /*#__PURE__*/ v.integerRange(1, 50), - ]), - ), - /** - * @minimum 1 - * @maximum 200 - * @default 50 - */ - limit: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.integer(), [ - /*#__PURE__*/ v.integerRange(1, 200), - ]), - 50, - ), - /** - * Filter by mode - */ - mode: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Filter by name - */ - name: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Sort direction (default: desc for dates/numbers/counts, asc for strings) - */ - order: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.string<"asc" | "desc" | (string & {})>(), - ), - /** - * Filter by preferences.showInDiscovery - */ - preferencesShowInDiscovery: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.string(), - ), - /** - * Include profile + identity info keyed by DID - */ - profiles: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), - /** - * Minimum total rsvps count - */ - rsvpsCountMin: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * Minimum rsvps count where status = going - */ - rsvpsGoingCountMin: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * Minimum rsvps count where status = interested - */ - rsvpsInterestedCountMin: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.integer(), - ), - /** - * Minimum rsvps count where status = notgoing - */ - rsvpsNotgoingCountMin: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * Full-text search across: mode, name, status, description - */ - search: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Field to sort by (default: time_us) - */ - sort: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.string< - | "createdAt" - | "description" - | "endsAt" - | "mode" - | "name" - | "preferencesShowInDiscovery" - | "rsvpsCount" - | "rsvpsGoingCount" - | "rsvpsInterestedCount" - | "rsvpsNotgoingCount" - | "startsAt" - | "status" - | (string & {}) - >(), - ), - /** - * Maximum value for startsAt - */ - startsAtMax: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Minimum value for startsAt - */ - startsAtMin: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Filter by status - */ - status: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - }), - output: { - type: "lex", - schema: /*#__PURE__*/ v.object({ - cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - get profiles() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(profileEntrySchema), - ); - }, - get records() { - return /*#__PURE__*/ v.array(recordSchema); - }, - }), - }, -}); -const _profileEntrySchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.event.listRecords#profileEntry"), - ), - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), - collection: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.nsidString()), - did: /*#__PURE__*/ v.didString(), - handle: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - rkey: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - uri: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), - get value() { - return /*#__PURE__*/ v.optional(appBskyActorProfileSchema); - }, -}); -const _recordSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.event.listRecords#record"), - ), - cid: /*#__PURE__*/ v.cidString(), - collection: /*#__PURE__*/ v.nsidString(), - did: /*#__PURE__*/ v.didString(), - rkey: /*#__PURE__*/ v.string(), - get rsvps() { - return /*#__PURE__*/ v.optional(hydrateRsvpsSchema); - }, - /** - * Total rsvps count - */ - rsvpsCount: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * rsvps count where status = going - */ - rsvpsGoingCount: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * rsvps count where status = interested - */ - rsvpsInterestedCount: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * rsvps count where status = notgoing - */ - rsvpsNotgoingCount: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - time_us: /*#__PURE__*/ v.integer(), - uri: /*#__PURE__*/ v.resourceUriString(), - get value() { - return CommunityLexiconCalendarEvent.mainSchema; - }, -}); - +const _appBskyActorProfileSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.event.listRecords#appBskyActorProfile")), + /** + * Small image to be displayed next to posts from account. AKA, 'profile picture' + * @accept image/png, image/jpeg + * @maxSize 1000000 + */ + "avatar": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.blob(), + [ + /*#__PURE__*/ v.blobSize(1000000), + /*#__PURE__*/ v.blobAccept(["image/png", "image/jpeg"]) + ] + )), + /** + * Larger horizontal image to display behind profile view. + * @accept image/png, image/jpeg + * @maxSize 1000000 + */ + "banner": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.blob(), + [ + /*#__PURE__*/ v.blobSize(1000000), + /*#__PURE__*/ v.blobAccept(["image/png", "image/jpeg"]) + ] + )), + "createdAt": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), + /** + * Free-form profile description text. + * @maxLength 2560 + * @maxGraphemes 256 + */ + "description": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 2560), + /*#__PURE__*/ v.stringGraphemes(0, 256) + ] + )), + /** + * @maxLength 640 + * @maxGraphemes 64 + */ + "displayName": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 640), + /*#__PURE__*/ v.stringGraphemes(0, 64) + ] + )), + get "joinedViaStarterPack"() { + return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema) + }, + /** + * Self-label values, specific to the Bluesky application, on the overall account. + */ + get "labels"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.variant([ComAtprotoLabelDefs.selfLabelsSchema])) + }, + get "pinnedPost"() { + return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema) + }, + /** + * Free-form pronouns text. + * @maxLength 200 + * @maxGraphemes 20 + */ + "pronouns": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 200), + /*#__PURE__*/ v.stringGraphemes(0, 20) + ] + )), + "website": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.genericUriString()), + } +); +const _hydrateRsvpsSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.event.listRecords#hydrateRsvps")), + get "going"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(hydrateRsvpsRecordSchema)) + }, + get "interested"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(hydrateRsvpsRecordSchema)) + }, + get "notgoing"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(hydrateRsvpsRecordSchema)) + }, + get "other"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(hydrateRsvpsRecordSchema)) + }, + } +); +const _hydrateRsvpsRecordSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.event.listRecords#hydrateRsvpsRecord")), + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "collection": /*#__PURE__*/ v.nsidString(), + "did": /*#__PURE__*/ v.didString(), + get "record"() { + return /*#__PURE__*/ v.optional(CommunityLexiconCalendarRsvp.mainSchema) + }, + "rkey": /*#__PURE__*/ v.string(), + "time_us": /*#__PURE__*/ v.integer(), + "uri": /*#__PURE__*/ v.resourceUriString(), + } +); +const _mainSchema = /*#__PURE__*/ v.query( + "rsvp.atmo.event.listRecords", + { + "params": /*#__PURE__*/ v.object( + { + /** + * Filter by DID or handle (triggers on-demand backfill) + */ + "actor": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.actorIdentifierString()), + /** + * Maximum value for createdAt + */ + "createdAtMax": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Minimum value for createdAt + */ + "createdAtMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "cursor": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Filter by description + */ + "description": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Maximum value for endsAt + */ + "endsAtMax": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Minimum value for endsAt + */ + "endsAtMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Number of rsvps records to embed per record + * @minimum 1 + * @maximum 50 + */ + "hydrateRsvps": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.integer(), + [/*#__PURE__*/ v.integerRange(1, 50)] + )), + /** + * @minimum 1 + * @maximum 200 + * @default 50 + */ + "limit": /*#__PURE__*/ v.optional( + /*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.integer(), + [/*#__PURE__*/ v.integerRange(1, 200)] + ), + 50 + ), + /** + * Filter by mode + */ + "mode": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Filter by name + */ + "name": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Sort direction (default: desc for dates/numbers/counts, asc for strings) + */ + "order": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string<"asc" | "desc" | (string & {})>()), + /** + * Filter by preferences.showInDiscovery + */ + "preferencesShowInDiscovery": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Include profile + identity info keyed by DID + */ + "profiles": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), + /** + * Minimum total rsvps count + */ + "rsvpsCountMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * Minimum rsvps count where status = going + */ + "rsvpsGoingCountMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * Minimum rsvps count where status = interested + */ + "rsvpsInterestedCountMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * Minimum rsvps count where status = notgoing + */ + "rsvpsNotgoingCountMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * Full-text search across: mode, name, status, description + */ + "search": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Field to sort by (default: time_us) + */ + "sort": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string<"createdAt" | "description" | "endsAt" | "mode" | "name" | "preferencesShowInDiscovery" | "rsvpsCount" | "rsvpsGoingCount" | "rsvpsInterestedCount" | "rsvpsNotgoingCount" | "startsAt" | "status" | (string & {})>()), + /** + * Maximum value for startsAt + */ + "startsAtMax": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Minimum value for startsAt + */ + "startsAtMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Filter by status + */ + "status": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + } + ), + "output": { + "type": "lex", + "schema": /*#__PURE__*/ v.object( + { + "cursor": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + get "profiles"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(profileEntrySchema)) + }, + get "records"() { + return /*#__PURE__*/ v.array(recordSchema) + }, + } + ), + } + } +); +const _profileEntrySchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.event.listRecords#profileEntry")), + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), + "collection": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.nsidString()), + "did": /*#__PURE__*/ v.didString(), + "handle": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "rkey": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "uri": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), + get "value"() { + return /*#__PURE__*/ v.optional(appBskyActorProfileSchema) + }, + } +); +const _recordSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.event.listRecords#record")), + "cid": /*#__PURE__*/ v.cidString(), + "collection": /*#__PURE__*/ v.nsidString(), + "did": /*#__PURE__*/ v.didString(), + "rkey": /*#__PURE__*/ v.string(), + get "rsvps"() { + return /*#__PURE__*/ v.optional(hydrateRsvpsSchema) + }, + /** + * Total rsvps count + */ + "rsvpsCount": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * rsvps count where status = going + */ + "rsvpsGoingCount": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * rsvps count where status = interested + */ + "rsvpsInterestedCount": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * rsvps count where status = notgoing + */ + "rsvpsNotgoingCount": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + "time_us": /*#__PURE__*/ v.integer(), + "uri": /*#__PURE__*/ v.resourceUriString(), + get "value"() { + return CommunityLexiconCalendarEvent.mainSchema + }, + } +); type appBskyActorProfile$schematype = typeof _appBskyActorProfileSchema; type hydrateRsvps$schematype = typeof _hydrateRsvpsSchema; type hydrateRsvpsRecord$schematype = typeof _hydrateRsvpsRecordSchema; @@ -308,36 +295,38 @@ type profileEntry$schematype = typeof _profileEntrySchema; type record$schematype = typeof _recordSchema; export interface appBskyActorProfileSchema extends appBskyActorProfile$schematype {} + export interface hydrateRsvpsSchema extends hydrateRsvps$schematype {} + export interface hydrateRsvpsRecordSchema extends hydrateRsvpsRecord$schematype {} + export interface mainSchema extends main$schematype {} + export interface profileEntrySchema extends profileEntry$schematype {} -export interface recordSchema extends record$schematype {} -export const appBskyActorProfileSchema = - _appBskyActorProfileSchema as appBskyActorProfileSchema; +export interface recordSchema extends record$schematype {} +export const appBskyActorProfileSchema = _appBskyActorProfileSchema as appBskyActorProfileSchema; export const hydrateRsvpsSchema = _hydrateRsvpsSchema as hydrateRsvpsSchema; -export const hydrateRsvpsRecordSchema = - _hydrateRsvpsRecordSchema as hydrateRsvpsRecordSchema; +export const hydrateRsvpsRecordSchema = _hydrateRsvpsRecordSchema as hydrateRsvpsRecordSchema; export const mainSchema = _mainSchema as mainSchema; export const profileEntrySchema = _profileEntrySchema as profileEntrySchema; export const recordSchema = _recordSchema as recordSchema; -export interface AppBskyActorProfile extends v.InferInput< - typeof appBskyActorProfileSchema -> {} +export interface AppBskyActorProfile extends v.InferInput {} + export interface HydrateRsvps extends v.InferInput {} -export interface HydrateRsvpsRecord extends v.InferInput< - typeof hydrateRsvpsRecordSchema -> {} + +export interface HydrateRsvpsRecord extends v.InferInput {} + export interface ProfileEntry extends v.InferInput {} + export interface Record extends v.InferInput {} -export interface $params extends v.InferInput {} -export interface $output extends v.InferXRPCBodyInput {} +export interface $params extends v.InferInput {} -declare module "@atcute/lexicons/ambient" { - interface XRPCQueries { - "rsvp.atmo.event.listRecords": mainSchema; - } +export interface $output extends v.InferXRPCBodyInput {} +declare module '@atcute/lexicons/ambient' { + interface XRPCQueries { + "rsvp.atmo.event.listRecords": mainSchema; + } } diff --git a/apps/web/src/lexicon-types/types/rsvp/atmo/getCursor.ts b/apps/web/src/lexicon-types/types/rsvp/atmo/getCursor.ts index 421707c..5e87934 100644 --- a/apps/web/src/lexicon-types/types/rsvp/atmo/getCursor.ts +++ b/apps/web/src/lexicon-types/types/rsvp/atmo/getCursor.ts @@ -1,30 +1,31 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; -import type {} from "@atcute/lexicons/ambient"; - -const _mainSchema = /*#__PURE__*/ v.query("rsvp.atmo.getCursor", { - params: null, - output: { - type: "lex", - schema: /*#__PURE__*/ v.object({ - date: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - seconds_ago: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - time_us: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - }), - }, -}); +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +import type {} from '@atcute/lexicons/ambient'; +const _mainSchema = /*#__PURE__*/ v.query( + "rsvp.atmo.getCursor", + { + "params": null, + "output": { + "type": "lex", + "schema": /*#__PURE__*/ v.object({ + "date": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "seconds_ago": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + "time_us": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + }), + } + } +); type main$schematype = typeof _mainSchema; export interface mainSchema extends main$schematype {} - export const mainSchema = _mainSchema as mainSchema; export interface $params {} -export interface $output extends v.InferXRPCBodyInput {} -declare module "@atcute/lexicons/ambient" { - interface XRPCQueries { - "rsvp.atmo.getCursor": mainSchema; - } +export interface $output extends v.InferXRPCBodyInput {} +declare module '@atcute/lexicons/ambient' { + interface XRPCQueries { + "rsvp.atmo.getCursor": mainSchema; + } } diff --git a/apps/web/src/lexicon-types/types/rsvp/atmo/getFeed.ts b/apps/web/src/lexicon-types/types/rsvp/atmo/getFeed.ts index 1516e67..976c47a 100644 --- a/apps/web/src/lexicon-types/types/rsvp/atmo/getFeed.ts +++ b/apps/web/src/lexicon-types/types/rsvp/atmo/getFeed.ts @@ -1,364 +1,342 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; -import type {} from "@atcute/lexicons/ambient"; +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +import type {} from '@atcute/lexicons/ambient'; import * as ComAtprotoLabelDefs from "@atcute/atproto/types/label/defs"; import * as ComAtprotoRepoStrongRef from "@atcute/atproto/types/repo/strongRef"; import * as CommunityLexiconCalendarEvent from "../../community/lexicon/calendar/event.js"; import * as CommunityLexiconCalendarRsvp from "../../community/lexicon/calendar/rsvp.js"; -const _appBskyActorProfileSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.getFeed#appBskyActorProfile"), - ), - /** - * Small image to be displayed next to posts from account. AKA, 'profile picture' - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - avatar: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - /** - * Larger horizontal image to display behind profile view. - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - banner: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - createdAt: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), - /** - * Free-form profile description text. - * @maxLength 2560 - * @maxGraphemes 256 - */ - description: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 2560), - /*#__PURE__*/ v.stringGraphemes(0, 256), - ]), - ), - /** - * @maxLength 640 - * @maxGraphemes 64 - */ - displayName: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 640), - /*#__PURE__*/ v.stringGraphemes(0, 64), - ]), - ), - get joinedViaStarterPack() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Self-label values, specific to the Bluesky application, on the overall account. - */ - get labels() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.variant([ComAtprotoLabelDefs.selfLabelsSchema]), - ); - }, - get pinnedPost() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Free-form pronouns text. - * @maxLength 200 - * @maxGraphemes 20 - */ - pronouns: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 200), - /*#__PURE__*/ v.stringGraphemes(0, 20), - ]), - ), - website: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.genericUriString()), -}); -const _feedRecord_eventSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.getFeed#feedRecord_event"), - ), - cid: /*#__PURE__*/ v.cidString(), - collection: /*#__PURE__*/ v.nsidString(), - did: /*#__PURE__*/ v.didString(), - rkey: /*#__PURE__*/ v.string(), - get rsvps() { - return /*#__PURE__*/ v.optional(hydrateRsvpsSchema); - }, - /** - * Total rsvps count - */ - rsvpsCount: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * rsvps count where status = going - */ - rsvpsGoingCount: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * rsvps count where status = interested - */ - rsvpsInterestedCount: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * rsvps count where status = notgoing - */ - rsvpsNotgoingCount: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - time_us: /*#__PURE__*/ v.integer(), - uri: /*#__PURE__*/ v.resourceUriString(), - get value() { - return CommunityLexiconCalendarEvent.mainSchema; - }, -}); -const _feedRecord_rsvpSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.getFeed#feedRecord_rsvp"), - ), - cid: /*#__PURE__*/ v.cidString(), - collection: /*#__PURE__*/ v.nsidString(), - did: /*#__PURE__*/ v.didString(), - get event() { - return /*#__PURE__*/ v.optional(refEventRecordSchema); - }, - rkey: /*#__PURE__*/ v.string(), - time_us: /*#__PURE__*/ v.integer(), - uri: /*#__PURE__*/ v.resourceUriString(), - get value() { - return CommunityLexiconCalendarRsvp.mainSchema; - }, -}); -const _hydrateRsvpsSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.getFeed#hydrateRsvps"), - ), - get going() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(hydrateRsvpsRecordSchema), - ); - }, - get interested() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(hydrateRsvpsRecordSchema), - ); - }, - get notgoing() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(hydrateRsvpsRecordSchema), - ); - }, - get other() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(hydrateRsvpsRecordSchema), - ); - }, -}); -const _hydrateRsvpsRecordSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.getFeed#hydrateRsvpsRecord"), - ), - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - collection: /*#__PURE__*/ v.nsidString(), - did: /*#__PURE__*/ v.didString(), - get record() { - return /*#__PURE__*/ v.optional(CommunityLexiconCalendarRsvp.mainSchema); - }, - rkey: /*#__PURE__*/ v.string(), - time_us: /*#__PURE__*/ v.integer(), - uri: /*#__PURE__*/ v.resourceUriString(), -}); -const _mainSchema = /*#__PURE__*/ v.query("rsvp.atmo.getFeed", { - params: /*#__PURE__*/ v.object({ - /** - * DID or handle of the requesting user - */ - actor: /*#__PURE__*/ v.actorIdentifierString(), - /** - * Filter by target collection (defaults to first target) - */ - collection: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.string< - | "community.lexicon.calendar.event" - | "community.lexicon.calendar.rsvp" - | (string & {}) - >(), - ), - /** - * Maximum value for createdAt - */ - createdAtMax: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Minimum value for createdAt - */ - createdAtMin: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Filter by description - */ - description: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Maximum value for endsAt - */ - endsAtMax: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Minimum value for endsAt - */ - endsAtMin: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Feed name - */ - feed: /*#__PURE__*/ v.string<"network" | (string & {})>(), - /** - * Embed the referenced event record - */ - hydrateEvent: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), - /** - * Number of rsvps records to embed per record - * @minimum 1 - * @maximum 50 - */ - hydrateRsvps: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.integer(), [ - /*#__PURE__*/ v.integerRange(1, 50), - ]), - ), - /** - * @minimum 1 - * @maximum 200 - * @default 50 - */ - limit: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.integer(), [ - /*#__PURE__*/ v.integerRange(1, 200), - ]), - 50, - ), - /** - * Filter by mode - */ - mode: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Filter by name - */ - name: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Sort direction - */ - order: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.string<"asc" | "desc" | (string & {})>(), - ), - /** - * Filter by preferences.showInDiscovery - */ - preferencesShowInDiscovery: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.string(), - ), - /** - * Include profile + identity info keyed by DID - */ - profiles: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), - /** - * Minimum total rsvps count - */ - rsvpsCountMin: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * Minimum rsvps count where status = going - */ - rsvpsGoingCountMin: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * Minimum rsvps count where status = interested - */ - rsvpsInterestedCountMin: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.integer(), - ), - /** - * Minimum rsvps count where status = notgoing - */ - rsvpsNotgoingCountMin: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), - /** - * Full-text search - */ - search: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Field to sort by (default: time_us) - */ - sort: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.string< - | "createdAt" - | "description" - | "endsAt" - | "mode" - | "name" - | "preferencesShowInDiscovery" - | "rsvpsCount" - | "rsvpsGoingCount" - | "rsvpsInterestedCount" - | "rsvpsNotgoingCount" - | "startsAt" - | "status" - | "subjectUri" - | (string & {}) - >(), - ), - /** - * Maximum value for startsAt - */ - startsAtMax: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Minimum value for startsAt - */ - startsAtMin: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Filter by status - */ - status: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Filter by subject.uri - */ - subjectUri: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - }), - output: { - type: "lex", - schema: /*#__PURE__*/ v.object({ - cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - get profiles() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(profileEntrySchema), - ); - }, - get records() { - return /*#__PURE__*/ v.array( - /*#__PURE__*/ v.variant([ - feedRecord_eventSchema, - feedRecord_rsvpSchema, - ]), - ); - }, - }), - }, -}); -const _profileEntrySchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.getFeed#profileEntry"), - ), - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), - collection: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.nsidString()), - did: /*#__PURE__*/ v.didString(), - handle: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - rkey: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - uri: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), - get value() { - return /*#__PURE__*/ v.optional(appBskyActorProfileSchema); - }, -}); -const _refEventRecordSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.getFeed#refEventRecord"), - ), - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - collection: /*#__PURE__*/ v.nsidString(), - did: /*#__PURE__*/ v.didString(), - get record() { - return /*#__PURE__*/ v.optional(CommunityLexiconCalendarEvent.mainSchema); - }, - rkey: /*#__PURE__*/ v.string(), - time_us: /*#__PURE__*/ v.integer(), - uri: /*#__PURE__*/ v.resourceUriString(), -}); - +const _appBskyActorProfileSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.getFeed#appBskyActorProfile")), + /** + * Small image to be displayed next to posts from account. AKA, 'profile picture' + * @accept image/png, image/jpeg + * @maxSize 1000000 + */ + "avatar": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.blob(), + [ + /*#__PURE__*/ v.blobSize(1000000), + /*#__PURE__*/ v.blobAccept(["image/png", "image/jpeg"]) + ] + )), + /** + * Larger horizontal image to display behind profile view. + * @accept image/png, image/jpeg + * @maxSize 1000000 + */ + "banner": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.blob(), + [ + /*#__PURE__*/ v.blobSize(1000000), + /*#__PURE__*/ v.blobAccept(["image/png", "image/jpeg"]) + ] + )), + "createdAt": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), + /** + * Free-form profile description text. + * @maxLength 2560 + * @maxGraphemes 256 + */ + "description": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 2560), + /*#__PURE__*/ v.stringGraphemes(0, 256) + ] + )), + /** + * @maxLength 640 + * @maxGraphemes 64 + */ + "displayName": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 640), + /*#__PURE__*/ v.stringGraphemes(0, 64) + ] + )), + get "joinedViaStarterPack"() { + return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema) + }, + /** + * Self-label values, specific to the Bluesky application, on the overall account. + */ + get "labels"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.variant([ComAtprotoLabelDefs.selfLabelsSchema])) + }, + get "pinnedPost"() { + return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema) + }, + /** + * Free-form pronouns text. + * @maxLength 200 + * @maxGraphemes 20 + */ + "pronouns": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 200), + /*#__PURE__*/ v.stringGraphemes(0, 20) + ] + )), + "website": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.genericUriString()), + } +); +const _feedRecord_eventSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.getFeed#feedRecord_event")), + "cid": /*#__PURE__*/ v.cidString(), + "collection": /*#__PURE__*/ v.nsidString(), + "did": /*#__PURE__*/ v.didString(), + "rkey": /*#__PURE__*/ v.string(), + get "rsvps"() { + return /*#__PURE__*/ v.optional(hydrateRsvpsSchema) + }, + /** + * Total rsvps count + */ + "rsvpsCount": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * rsvps count where status = going + */ + "rsvpsGoingCount": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * rsvps count where status = interested + */ + "rsvpsInterestedCount": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * rsvps count where status = notgoing + */ + "rsvpsNotgoingCount": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + "time_us": /*#__PURE__*/ v.integer(), + "uri": /*#__PURE__*/ v.resourceUriString(), + get "value"() { + return CommunityLexiconCalendarEvent.mainSchema + }, + } +); +const _feedRecord_rsvpSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.getFeed#feedRecord_rsvp")), + "cid": /*#__PURE__*/ v.cidString(), + "collection": /*#__PURE__*/ v.nsidString(), + "did": /*#__PURE__*/ v.didString(), + get "event"() { + return /*#__PURE__*/ v.optional(refEventRecordSchema) + }, + "rkey": /*#__PURE__*/ v.string(), + "time_us": /*#__PURE__*/ v.integer(), + "uri": /*#__PURE__*/ v.resourceUriString(), + get "value"() { + return CommunityLexiconCalendarRsvp.mainSchema + }, + } +); +const _hydrateRsvpsSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.getFeed#hydrateRsvps")), + get "going"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(hydrateRsvpsRecordSchema)) + }, + get "interested"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(hydrateRsvpsRecordSchema)) + }, + get "notgoing"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(hydrateRsvpsRecordSchema)) + }, + get "other"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(hydrateRsvpsRecordSchema)) + }, + } +); +const _hydrateRsvpsRecordSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.getFeed#hydrateRsvpsRecord")), + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "collection": /*#__PURE__*/ v.nsidString(), + "did": /*#__PURE__*/ v.didString(), + get "record"() { + return /*#__PURE__*/ v.optional(CommunityLexiconCalendarRsvp.mainSchema) + }, + "rkey": /*#__PURE__*/ v.string(), + "time_us": /*#__PURE__*/ v.integer(), + "uri": /*#__PURE__*/ v.resourceUriString(), + } +); +const _mainSchema = /*#__PURE__*/ v.query( + "rsvp.atmo.getFeed", + { + "params": /*#__PURE__*/ v.object( + { + /** + * DID or handle of the requesting user + */ + "actor": /*#__PURE__*/ v.actorIdentifierString(), + /** + * Filter by target collection (defaults to first target) + */ + "collection": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string<"community.lexicon.calendar.event" | "community.lexicon.calendar.rsvp" | (string & {})>()), + /** + * Maximum value for createdAt + */ + "createdAtMax": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Minimum value for createdAt + */ + "createdAtMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "cursor": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Filter by description + */ + "description": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Maximum value for endsAt + */ + "endsAtMax": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Minimum value for endsAt + */ + "endsAtMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Feed name + */ + "feed": /*#__PURE__*/ v.string<"network" | (string & {})>(), + /** + * Embed the referenced event record + */ + "hydrateEvent": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), + /** + * Number of rsvps records to embed per record + * @minimum 1 + * @maximum 50 + */ + "hydrateRsvps": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.integer(), + [/*#__PURE__*/ v.integerRange(1, 50)] + )), + /** + * @minimum 1 + * @maximum 200 + * @default 50 + */ + "limit": /*#__PURE__*/ v.optional( + /*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.integer(), + [/*#__PURE__*/ v.integerRange(1, 200)] + ), + 50 + ), + /** + * Filter by mode + */ + "mode": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Filter by name + */ + "name": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Sort direction + */ + "order": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string<"asc" | "desc" | (string & {})>()), + /** + * Filter by preferences.showInDiscovery + */ + "preferencesShowInDiscovery": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Include profile + identity info keyed by DID + */ + "profiles": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), + /** + * Minimum total rsvps count + */ + "rsvpsCountMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * Minimum rsvps count where status = going + */ + "rsvpsGoingCountMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * Minimum rsvps count where status = interested + */ + "rsvpsInterestedCountMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * Minimum rsvps count where status = notgoing + */ + "rsvpsNotgoingCountMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.integer()), + /** + * Full-text search + */ + "search": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Field to sort by (default: time_us) + */ + "sort": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string<"createdAt" | "description" | "endsAt" | "mode" | "name" | "preferencesShowInDiscovery" | "rsvpsCount" | "rsvpsGoingCount" | "rsvpsInterestedCount" | "rsvpsNotgoingCount" | "startsAt" | "status" | "subjectUri" | (string & {})>()), + /** + * Maximum value for startsAt + */ + "startsAtMax": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Minimum value for startsAt + */ + "startsAtMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Filter by status + */ + "status": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Filter by subject.uri + */ + "subjectUri": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + } + ), + "output": { + "type": "lex", + "schema": /*#__PURE__*/ v.object( + { + "cursor": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + get "profiles"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(profileEntrySchema)) + }, + get "records"() { + return /*#__PURE__*/ v.array(/*#__PURE__*/ v.variant([ + feedRecord_eventSchema, + feedRecord_rsvpSchema + ])) + }, + } + ), + } + } +); +const _profileEntrySchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.getFeed#profileEntry")), + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), + "collection": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.nsidString()), + "did": /*#__PURE__*/ v.didString(), + "handle": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "rkey": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "uri": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), + get "value"() { + return /*#__PURE__*/ v.optional(appBskyActorProfileSchema) + }, + } +); +const _refEventRecordSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.getFeed#refEventRecord")), + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "collection": /*#__PURE__*/ v.nsidString(), + "did": /*#__PURE__*/ v.didString(), + get "record"() { + return /*#__PURE__*/ v.optional(CommunityLexiconCalendarEvent.mainSchema) + }, + "rkey": /*#__PURE__*/ v.string(), + "time_us": /*#__PURE__*/ v.integer(), + "uri": /*#__PURE__*/ v.resourceUriString(), + } +); type appBskyActorProfile$schematype = typeof _appBskyActorProfileSchema; type feedRecord_event$schematype = typeof _feedRecord_eventSchema; type feedRecord_rsvp$schematype = typeof _feedRecord_rsvpSchema; @@ -369,51 +347,48 @@ type profileEntry$schematype = typeof _profileEntrySchema; type refEventRecord$schematype = typeof _refEventRecordSchema; export interface appBskyActorProfileSchema extends appBskyActorProfile$schematype {} + export interface feedRecord_eventSchema extends feedRecord_event$schematype {} + export interface feedRecord_rsvpSchema extends feedRecord_rsvp$schematype {} + export interface hydrateRsvpsSchema extends hydrateRsvps$schematype {} + export interface hydrateRsvpsRecordSchema extends hydrateRsvpsRecord$schematype {} + export interface mainSchema extends main$schematype {} + export interface profileEntrySchema extends profileEntry$schematype {} -export interface refEventRecordSchema extends refEventRecord$schematype {} -export const appBskyActorProfileSchema = - _appBskyActorProfileSchema as appBskyActorProfileSchema; -export const feedRecord_eventSchema = - _feedRecord_eventSchema as feedRecord_eventSchema; -export const feedRecord_rsvpSchema = - _feedRecord_rsvpSchema as feedRecord_rsvpSchema; +export interface refEventRecordSchema extends refEventRecord$schematype {} +export const appBskyActorProfileSchema = _appBskyActorProfileSchema as appBskyActorProfileSchema; +export const feedRecord_eventSchema = _feedRecord_eventSchema as feedRecord_eventSchema; +export const feedRecord_rsvpSchema = _feedRecord_rsvpSchema as feedRecord_rsvpSchema; export const hydrateRsvpsSchema = _hydrateRsvpsSchema as hydrateRsvpsSchema; -export const hydrateRsvpsRecordSchema = - _hydrateRsvpsRecordSchema as hydrateRsvpsRecordSchema; +export const hydrateRsvpsRecordSchema = _hydrateRsvpsRecordSchema as hydrateRsvpsRecordSchema; export const mainSchema = _mainSchema as mainSchema; export const profileEntrySchema = _profileEntrySchema as profileEntrySchema; -export const refEventRecordSchema = - _refEventRecordSchema as refEventRecordSchema; +export const refEventRecordSchema = _refEventRecordSchema as refEventRecordSchema; + +export interface AppBskyActorProfile extends v.InferInput {} + +export interface FeedRecord_event extends v.InferInput {} + +export interface FeedRecord_rsvp extends v.InferInput {} -export interface AppBskyActorProfile extends v.InferInput< - typeof appBskyActorProfileSchema -> {} -export interface FeedRecord_event extends v.InferInput< - typeof feedRecord_eventSchema -> {} -export interface FeedRecord_rsvp extends v.InferInput< - typeof feedRecord_rsvpSchema -> {} export interface HydrateRsvps extends v.InferInput {} -export interface HydrateRsvpsRecord extends v.InferInput< - typeof hydrateRsvpsRecordSchema -> {} + +export interface HydrateRsvpsRecord extends v.InferInput {} + export interface ProfileEntry extends v.InferInput {} -export interface RefEventRecord extends v.InferInput< - typeof refEventRecordSchema -> {} -export interface $params extends v.InferInput {} -export interface $output extends v.InferXRPCBodyInput {} +export interface RefEventRecord extends v.InferInput {} + +export interface $params extends v.InferInput {} -declare module "@atcute/lexicons/ambient" { - interface XRPCQueries { - "rsvp.atmo.getFeed": mainSchema; - } +export interface $output extends v.InferXRPCBodyInput {} +declare module '@atcute/lexicons/ambient' { + interface XRPCQueries { + "rsvp.atmo.getFeed": mainSchema; + } } diff --git a/apps/web/src/lexicon-types/types/rsvp/atmo/getOverview.ts b/apps/web/src/lexicon-types/types/rsvp/atmo/getOverview.ts index 4af01d3..9c4288f 100644 --- a/apps/web/src/lexicon-types/types/rsvp/atmo/getOverview.ts +++ b/apps/web/src/lexicon-types/types/rsvp/atmo/getOverview.ts @@ -1,47 +1,46 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; -import type {} from "@atcute/lexicons/ambient"; +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +import type {} from '@atcute/lexicons/ambient'; const _collectionStatsSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.getOverview#collectionStats"), - ), - collection: /*#__PURE__*/ v.string(), - records: /*#__PURE__*/ v.integer(), - unique_users: /*#__PURE__*/ v.integer(), + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.getOverview#collectionStats")), + "collection": /*#__PURE__*/ v.string(), + "records": /*#__PURE__*/ v.integer(), + "unique_users": /*#__PURE__*/ v.integer(), }); -const _mainSchema = /*#__PURE__*/ v.query("rsvp.atmo.getOverview", { - params: null, - output: { - type: "lex", - schema: /*#__PURE__*/ v.object({ - get collections() { - return /*#__PURE__*/ v.array(collectionStatsSchema); - }, - total_records: /*#__PURE__*/ v.integer(), - }), - }, -}); - +const _mainSchema = /*#__PURE__*/ v.query( + "rsvp.atmo.getOverview", + { + "params": null, + "output": { + "type": "lex", + "schema": /*#__PURE__*/ v.object( + { + get "collections"() { + return /*#__PURE__*/ v.array(collectionStatsSchema) + }, + "total_records": /*#__PURE__*/ v.integer(), + } + ), + } + } +); type collectionStats$schematype = typeof _collectionStatsSchema; type main$schematype = typeof _mainSchema; export interface collectionStatsSchema extends collectionStats$schematype {} -export interface mainSchema extends main$schematype {} -export const collectionStatsSchema = - _collectionStatsSchema as collectionStatsSchema; +export interface mainSchema extends main$schematype {} +export const collectionStatsSchema = _collectionStatsSchema as collectionStatsSchema; export const mainSchema = _mainSchema as mainSchema; -export interface CollectionStats extends v.InferInput< - typeof collectionStatsSchema -> {} +export interface CollectionStats extends v.InferInput {} export interface $params {} -export interface $output extends v.InferXRPCBodyInput {} -declare module "@atcute/lexicons/ambient" { - interface XRPCQueries { - "rsvp.atmo.getOverview": mainSchema; - } +export interface $output extends v.InferXRPCBodyInput {} +declare module '@atcute/lexicons/ambient' { + interface XRPCQueries { + "rsvp.atmo.getOverview": mainSchema; + } } diff --git a/apps/web/src/lexicon-types/types/rsvp/atmo/getProfile.ts b/apps/web/src/lexicon-types/types/rsvp/atmo/getProfile.ts index 516ec6a..5bf6186 100644 --- a/apps/web/src/lexicon-types/types/rsvp/atmo/getProfile.ts +++ b/apps/web/src/lexicon-types/types/rsvp/atmo/getProfile.ts @@ -1,128 +1,146 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; -import type {} from "@atcute/lexicons/ambient"; +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +import type {} from '@atcute/lexicons/ambient'; import * as ComAtprotoLabelDefs from "@atcute/atproto/types/label/defs"; import * as ComAtprotoRepoStrongRef from "@atcute/atproto/types/repo/strongRef"; -const _appBskyActorProfileSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.getProfile#appBskyActorProfile"), - ), - /** - * Small image to be displayed next to posts from account. AKA, 'profile picture' - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - avatar: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - /** - * Larger horizontal image to display behind profile view. - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - banner: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - createdAt: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), - /** - * Free-form profile description text. - * @maxLength 2560 - * @maxGraphemes 256 - */ - description: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 2560), - /*#__PURE__*/ v.stringGraphemes(0, 256), - ]), - ), - /** - * @maxLength 640 - * @maxGraphemes 64 - */ - displayName: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 640), - /*#__PURE__*/ v.stringGraphemes(0, 64), - ]), - ), - get joinedViaStarterPack() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Self-label values, specific to the Bluesky application, on the overall account. - */ - get labels() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.variant([ComAtprotoLabelDefs.selfLabelsSchema]), - ); - }, - get pinnedPost() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Free-form pronouns text. - * @maxLength 200 - * @maxGraphemes 20 - */ - pronouns: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 200), - /*#__PURE__*/ v.stringGraphemes(0, 20), - ]), - ), - website: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.genericUriString()), -}); -const _mainSchema = /*#__PURE__*/ v.query("rsvp.atmo.getProfile", { - params: /*#__PURE__*/ v.object({ - /** - * DID or handle of the user - */ - actor: /*#__PURE__*/ v.actorIdentifierString(), - }), - output: { - type: "lex", - schema: /*#__PURE__*/ v.object({ - get profiles() { - return /*#__PURE__*/ v.array(profileEntrySchema); - }, - }), - }, -}); -const _profileEntrySchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.getProfile#profileEntry"), - ), - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), - collection: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.nsidString()), - did: /*#__PURE__*/ v.didString(), - handle: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - rkey: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - uri: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), - get value() { - return /*#__PURE__*/ v.optional(appBskyActorProfileSchema); - }, -}); - +const _appBskyActorProfileSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.getProfile#appBskyActorProfile")), + /** + * Small image to be displayed next to posts from account. AKA, 'profile picture' + * @accept image/png, image/jpeg + * @maxSize 1000000 + */ + "avatar": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.blob(), + [ + /*#__PURE__*/ v.blobSize(1000000), + /*#__PURE__*/ v.blobAccept(["image/png", "image/jpeg"]) + ] + )), + /** + * Larger horizontal image to display behind profile view. + * @accept image/png, image/jpeg + * @maxSize 1000000 + */ + "banner": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.blob(), + [ + /*#__PURE__*/ v.blobSize(1000000), + /*#__PURE__*/ v.blobAccept(["image/png", "image/jpeg"]) + ] + )), + "createdAt": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), + /** + * Free-form profile description text. + * @maxLength 2560 + * @maxGraphemes 256 + */ + "description": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 2560), + /*#__PURE__*/ v.stringGraphemes(0, 256) + ] + )), + /** + * @maxLength 640 + * @maxGraphemes 64 + */ + "displayName": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 640), + /*#__PURE__*/ v.stringGraphemes(0, 64) + ] + )), + get "joinedViaStarterPack"() { + return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema) + }, + /** + * Self-label values, specific to the Bluesky application, on the overall account. + */ + get "labels"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.variant([ComAtprotoLabelDefs.selfLabelsSchema])) + }, + get "pinnedPost"() { + return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema) + }, + /** + * Free-form pronouns text. + * @maxLength 200 + * @maxGraphemes 20 + */ + "pronouns": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 200), + /*#__PURE__*/ v.stringGraphemes(0, 20) + ] + )), + "website": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.genericUriString()), + } +); +const _mainSchema = /*#__PURE__*/ v.query( + "rsvp.atmo.getProfile", + { + "params": /*#__PURE__*/ v.object( + { + /** + * DID or handle of the user + */ + "actor": /*#__PURE__*/ v.actorIdentifierString(), + } + ), + "output": { + "type": "lex", + "schema": /*#__PURE__*/ v.object( + { + get "profiles"() { + return /*#__PURE__*/ v.array(profileEntrySchema) + }, + } + ), + } + } +); +const _profileEntrySchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.getProfile#profileEntry")), + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), + "collection": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.nsidString()), + "did": /*#__PURE__*/ v.didString(), + "handle": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "rkey": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "uri": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), + get "value"() { + return /*#__PURE__*/ v.optional(appBskyActorProfileSchema) + }, + } +); type appBskyActorProfile$schematype = typeof _appBskyActorProfileSchema; type main$schematype = typeof _mainSchema; type profileEntry$schematype = typeof _profileEntrySchema; export interface appBskyActorProfileSchema extends appBskyActorProfile$schematype {} + export interface mainSchema extends main$schematype {} -export interface profileEntrySchema extends profileEntry$schematype {} -export const appBskyActorProfileSchema = - _appBskyActorProfileSchema as appBskyActorProfileSchema; +export interface profileEntrySchema extends profileEntry$schematype {} +export const appBskyActorProfileSchema = _appBskyActorProfileSchema as appBskyActorProfileSchema; export const mainSchema = _mainSchema as mainSchema; export const profileEntrySchema = _profileEntrySchema as profileEntrySchema; -export interface AppBskyActorProfile extends v.InferInput< - typeof appBskyActorProfileSchema -> {} +export interface AppBskyActorProfile extends v.InferInput {} + export interface ProfileEntry extends v.InferInput {} -export interface $params extends v.InferInput {} -export interface $output extends v.InferXRPCBodyInput {} +export interface $params extends v.InferInput {} -declare module "@atcute/lexicons/ambient" { - interface XRPCQueries { - "rsvp.atmo.getProfile": mainSchema; - } +export interface $output extends v.InferXRPCBodyInput {} +declare module '@atcute/lexicons/ambient' { + interface XRPCQueries { + "rsvp.atmo.getProfile": mainSchema; + } } diff --git a/apps/web/src/lexicon-types/types/rsvp/atmo/notifyOfUpdate.ts b/apps/web/src/lexicon-types/types/rsvp/atmo/notifyOfUpdate.ts index 194a61f..b2b06b7 100644 --- a/apps/web/src/lexicon-types/types/rsvp/atmo/notifyOfUpdate.ts +++ b/apps/web/src/lexicon-types/types/rsvp/atmo/notifyOfUpdate.ts @@ -1,61 +1,63 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; -import type {} from "@atcute/lexicons/ambient"; - -const _mainSchema = /*#__PURE__*/ v.procedure("rsvp.atmo.notifyOfUpdate", { - params: null, - input: { - type: "lex", - schema: /*#__PURE__*/ v.object({ - /** - * Single AT URI to fetch and index - */ - uri: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), - /** - * Batch of AT URIs to fetch and index (max 25) - * @maxLength 25 - */ - uris: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain( - /*#__PURE__*/ v.array(/*#__PURE__*/ v.resourceUriString()), - [/*#__PURE__*/ v.arrayLength(0, 25)], - ), - ), - }), - }, - output: { - type: "lex", - schema: /*#__PURE__*/ v.object({ - /** - * Number of records deleted (not found on PDS) - */ - deleted: /*#__PURE__*/ v.integer(), - /** - * Errors for individual URIs that could not be processed - */ - errors: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(/*#__PURE__*/ v.string()), - ), - /** - * Number of records created or updated - */ - indexed: /*#__PURE__*/ v.integer(), - }), - }, -}); +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +import type {} from '@atcute/lexicons/ambient'; +const _mainSchema = /*#__PURE__*/ v.procedure( + "rsvp.atmo.notifyOfUpdate", + { + "params": null, + "input": { + "type": "lex", + "schema": /*#__PURE__*/ v.object( + { + /** + * Single AT URI to fetch and index + */ + "uri": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), + /** + * Batch of AT URIs to fetch and index (max 25) + * @maxLength 25 + */ + "uris": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.array(/*#__PURE__*/ v.resourceUriString()), + [/*#__PURE__*/ v.arrayLength(0, 25)] + )), + } + ), + }, + "output": { + "type": "lex", + "schema": /*#__PURE__*/ v.object( + { + /** + * Number of records deleted (not found on PDS) + */ + "deleted": /*#__PURE__*/ v.integer(), + /** + * Errors for individual URIs that could not be processed + */ + "errors": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(/*#__PURE__*/ v.string())), + /** + * Number of records created or updated + */ + "indexed": /*#__PURE__*/ v.integer(), + } + ), + } + } +); type main$schematype = typeof _mainSchema; export interface mainSchema extends main$schematype {} - export const mainSchema = _mainSchema as mainSchema; export interface $params {} -export interface $input extends v.InferXRPCBodyInput {} -export interface $output extends v.InferXRPCBodyInput {} -declare module "@atcute/lexicons/ambient" { - interface XRPCProcedures { - "rsvp.atmo.notifyOfUpdate": mainSchema; - } +export interface $input extends v.InferXRPCBodyInput {} + +export interface $output extends v.InferXRPCBodyInput {} +declare module '@atcute/lexicons/ambient' { + interface XRPCProcedures { + "rsvp.atmo.notifyOfUpdate": mainSchema; + } } diff --git a/apps/web/src/lexicon-types/types/rsvp/atmo/rsvp/getRecord.ts b/apps/web/src/lexicon-types/types/rsvp/atmo/rsvp/getRecord.ts index 9448a02..79d5ccf 100644 --- a/apps/web/src/lexicon-types/types/rsvp/atmo/rsvp/getRecord.ts +++ b/apps/web/src/lexicon-types/types/rsvp/atmo/rsvp/getRecord.ts @@ -1,173 +1,188 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; -import type {} from "@atcute/lexicons/ambient"; +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +import type {} from '@atcute/lexicons/ambient'; import * as ComAtprotoLabelDefs from "@atcute/atproto/types/label/defs"; import * as ComAtprotoRepoStrongRef from "@atcute/atproto/types/repo/strongRef"; import * as CommunityLexiconCalendarEvent from "../../../community/lexicon/calendar/event.js"; import * as CommunityLexiconCalendarRsvp from "../../../community/lexicon/calendar/rsvp.js"; -const _appBskyActorProfileSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.rsvp.getRecord#appBskyActorProfile"), - ), - /** - * Small image to be displayed next to posts from account. AKA, 'profile picture' - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - avatar: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - /** - * Larger horizontal image to display behind profile view. - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - banner: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - createdAt: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), - /** - * Free-form profile description text. - * @maxLength 2560 - * @maxGraphemes 256 - */ - description: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 2560), - /*#__PURE__*/ v.stringGraphemes(0, 256), - ]), - ), - /** - * @maxLength 640 - * @maxGraphemes 64 - */ - displayName: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 640), - /*#__PURE__*/ v.stringGraphemes(0, 64), - ]), - ), - get joinedViaStarterPack() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Self-label values, specific to the Bluesky application, on the overall account. - */ - get labels() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.variant([ComAtprotoLabelDefs.selfLabelsSchema]), - ); - }, - get pinnedPost() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Free-form pronouns text. - * @maxLength 200 - * @maxGraphemes 20 - */ - pronouns: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 200), - /*#__PURE__*/ v.stringGraphemes(0, 20), - ]), - ), - website: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.genericUriString()), -}); -const _mainSchema = /*#__PURE__*/ v.query("rsvp.atmo.rsvp.getRecord", { - params: /*#__PURE__*/ v.object({ - /** - * Embed the referenced event record - */ - hydrateEvent: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), - /** - * Include profile + identity info keyed by DID - */ - profiles: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), - /** - * AT URI of the record - */ - uri: /*#__PURE__*/ v.resourceUriString(), - }), - output: { - type: "lex", - schema: /*#__PURE__*/ v.object({ - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), - collection: /*#__PURE__*/ v.nsidString(), - did: /*#__PURE__*/ v.didString(), - get event() { - return /*#__PURE__*/ v.optional(refEventRecordSchema); - }, - get profiles() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(profileEntrySchema), - ); - }, - rkey: /*#__PURE__*/ v.string(), - time_us: /*#__PURE__*/ v.integer(), - uri: /*#__PURE__*/ v.resourceUriString(), - get value() { - return CommunityLexiconCalendarRsvp.mainSchema; - }, - }), - }, -}); -const _profileEntrySchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.rsvp.getRecord#profileEntry"), - ), - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), - collection: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.nsidString()), - did: /*#__PURE__*/ v.didString(), - handle: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - rkey: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - uri: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), - get value() { - return /*#__PURE__*/ v.optional(appBskyActorProfileSchema); - }, -}); -const _refEventRecordSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.rsvp.getRecord#refEventRecord"), - ), - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - collection: /*#__PURE__*/ v.nsidString(), - did: /*#__PURE__*/ v.didString(), - get record() { - return /*#__PURE__*/ v.optional(CommunityLexiconCalendarEvent.mainSchema); - }, - rkey: /*#__PURE__*/ v.string(), - time_us: /*#__PURE__*/ v.integer(), - uri: /*#__PURE__*/ v.resourceUriString(), -}); - +const _appBskyActorProfileSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.rsvp.getRecord#appBskyActorProfile")), + /** + * Small image to be displayed next to posts from account. AKA, 'profile picture' + * @accept image/png, image/jpeg + * @maxSize 1000000 + */ + "avatar": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.blob(), + [ + /*#__PURE__*/ v.blobSize(1000000), + /*#__PURE__*/ v.blobAccept(["image/png", "image/jpeg"]) + ] + )), + /** + * Larger horizontal image to display behind profile view. + * @accept image/png, image/jpeg + * @maxSize 1000000 + */ + "banner": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.blob(), + [ + /*#__PURE__*/ v.blobSize(1000000), + /*#__PURE__*/ v.blobAccept(["image/png", "image/jpeg"]) + ] + )), + "createdAt": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), + /** + * Free-form profile description text. + * @maxLength 2560 + * @maxGraphemes 256 + */ + "description": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 2560), + /*#__PURE__*/ v.stringGraphemes(0, 256) + ] + )), + /** + * @maxLength 640 + * @maxGraphemes 64 + */ + "displayName": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 640), + /*#__PURE__*/ v.stringGraphemes(0, 64) + ] + )), + get "joinedViaStarterPack"() { + return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema) + }, + /** + * Self-label values, specific to the Bluesky application, on the overall account. + */ + get "labels"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.variant([ComAtprotoLabelDefs.selfLabelsSchema])) + }, + get "pinnedPost"() { + return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema) + }, + /** + * Free-form pronouns text. + * @maxLength 200 + * @maxGraphemes 20 + */ + "pronouns": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 200), + /*#__PURE__*/ v.stringGraphemes(0, 20) + ] + )), + "website": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.genericUriString()), + } +); +const _mainSchema = /*#__PURE__*/ v.query( + "rsvp.atmo.rsvp.getRecord", + { + "params": /*#__PURE__*/ v.object( + { + /** + * Embed the referenced event record + */ + "hydrateEvent": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), + /** + * Include profile + identity info keyed by DID + */ + "profiles": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), + /** + * AT URI of the record + */ + "uri": /*#__PURE__*/ v.resourceUriString(), + } + ), + "output": { + "type": "lex", + "schema": /*#__PURE__*/ v.object( + { + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), + "collection": /*#__PURE__*/ v.nsidString(), + "did": /*#__PURE__*/ v.didString(), + get "event"() { + return /*#__PURE__*/ v.optional(refEventRecordSchema) + }, + get "profiles"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(profileEntrySchema)) + }, + "rkey": /*#__PURE__*/ v.string(), + "time_us": /*#__PURE__*/ v.integer(), + "uri": /*#__PURE__*/ v.resourceUriString(), + get "value"() { + return CommunityLexiconCalendarRsvp.mainSchema + }, + } + ), + } + } +); +const _profileEntrySchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.rsvp.getRecord#profileEntry")), + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), + "collection": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.nsidString()), + "did": /*#__PURE__*/ v.didString(), + "handle": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "rkey": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "uri": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), + get "value"() { + return /*#__PURE__*/ v.optional(appBskyActorProfileSchema) + }, + } +); +const _refEventRecordSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.rsvp.getRecord#refEventRecord")), + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "collection": /*#__PURE__*/ v.nsidString(), + "did": /*#__PURE__*/ v.didString(), + get "record"() { + return /*#__PURE__*/ v.optional(CommunityLexiconCalendarEvent.mainSchema) + }, + "rkey": /*#__PURE__*/ v.string(), + "time_us": /*#__PURE__*/ v.integer(), + "uri": /*#__PURE__*/ v.resourceUriString(), + } +); type appBskyActorProfile$schematype = typeof _appBskyActorProfileSchema; type main$schematype = typeof _mainSchema; type profileEntry$schematype = typeof _profileEntrySchema; type refEventRecord$schematype = typeof _refEventRecordSchema; export interface appBskyActorProfileSchema extends appBskyActorProfile$schematype {} + export interface mainSchema extends main$schematype {} + export interface profileEntrySchema extends profileEntry$schematype {} -export interface refEventRecordSchema extends refEventRecord$schematype {} -export const appBskyActorProfileSchema = - _appBskyActorProfileSchema as appBskyActorProfileSchema; +export interface refEventRecordSchema extends refEventRecord$schematype {} +export const appBskyActorProfileSchema = _appBskyActorProfileSchema as appBskyActorProfileSchema; export const mainSchema = _mainSchema as mainSchema; export const profileEntrySchema = _profileEntrySchema as profileEntrySchema; -export const refEventRecordSchema = - _refEventRecordSchema as refEventRecordSchema; +export const refEventRecordSchema = _refEventRecordSchema as refEventRecordSchema; + +export interface AppBskyActorProfile extends v.InferInput {} -export interface AppBskyActorProfile extends v.InferInput< - typeof appBskyActorProfileSchema -> {} export interface ProfileEntry extends v.InferInput {} -export interface RefEventRecord extends v.InferInput< - typeof refEventRecordSchema -> {} -export interface $params extends v.InferInput {} -export interface $output extends v.InferXRPCBodyInput {} +export interface RefEventRecord extends v.InferInput {} + +export interface $params extends v.InferInput {} -declare module "@atcute/lexicons/ambient" { - interface XRPCQueries { - "rsvp.atmo.rsvp.getRecord": mainSchema; - } +export interface $output extends v.InferXRPCBodyInput {} +declare module '@atcute/lexicons/ambient' { + interface XRPCQueries { + "rsvp.atmo.rsvp.getRecord": mainSchema; + } } diff --git a/apps/web/src/lexicon-types/types/rsvp/atmo/rsvp/listRecords.ts b/apps/web/src/lexicon-types/types/rsvp/atmo/rsvp/listRecords.ts index 648634b..38010b9 100644 --- a/apps/web/src/lexicon-types/types/rsvp/atmo/rsvp/listRecords.ts +++ b/apps/web/src/lexicon-types/types/rsvp/atmo/rsvp/listRecords.ts @@ -1,194 +1,206 @@ -import type {} from "@atcute/lexicons"; -import * as v from "@atcute/lexicons/validations"; -import type {} from "@atcute/lexicons/ambient"; +import type {} from '@atcute/lexicons'; +import * as v from '@atcute/lexicons/validations'; +import type {} from '@atcute/lexicons/ambient'; import * as ComAtprotoLabelDefs from "@atcute/atproto/types/label/defs"; import * as ComAtprotoRepoStrongRef from "@atcute/atproto/types/repo/strongRef"; import * as CommunityLexiconCalendarEvent from "../../../community/lexicon/calendar/event.js"; import * as CommunityLexiconCalendarRsvp from "../../../community/lexicon/calendar/rsvp.js"; -const _appBskyActorProfileSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.rsvp.listRecords#appBskyActorProfile"), - ), - /** - * Small image to be displayed next to posts from account. AKA, 'profile picture' - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - avatar: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - /** - * Larger horizontal image to display behind profile view. - * @accept image/png, image/jpeg - * @maxSize 1000000 - */ - banner: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.blob()), - createdAt: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), - /** - * Free-form profile description text. - * @maxLength 2560 - * @maxGraphemes 256 - */ - description: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 2560), - /*#__PURE__*/ v.stringGraphemes(0, 256), - ]), - ), - /** - * @maxLength 640 - * @maxGraphemes 64 - */ - displayName: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 640), - /*#__PURE__*/ v.stringGraphemes(0, 64), - ]), - ), - get joinedViaStarterPack() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Self-label values, specific to the Bluesky application, on the overall account. - */ - get labels() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.variant([ComAtprotoLabelDefs.selfLabelsSchema]), - ); - }, - get pinnedPost() { - return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema); - }, - /** - * Free-form pronouns text. - * @maxLength 200 - * @maxGraphemes 20 - */ - pronouns: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.string(), [ - /*#__PURE__*/ v.stringLength(0, 200), - /*#__PURE__*/ v.stringGraphemes(0, 20), - ]), - ), - website: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.genericUriString()), -}); -const _mainSchema = /*#__PURE__*/ v.query("rsvp.atmo.rsvp.listRecords", { - params: /*#__PURE__*/ v.object({ - /** - * Filter by DID or handle (triggers on-demand backfill) - */ - actor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.actorIdentifierString()), - /** - * Maximum value for createdAt - */ - createdAtMax: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Minimum value for createdAt - */ - createdAtMin: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Embed the referenced event record - */ - hydrateEvent: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), - /** - * @minimum 1 - * @maximum 200 - * @default 50 - */ - limit: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.constrain(/*#__PURE__*/ v.integer(), [ - /*#__PURE__*/ v.integerRange(1, 200), - ]), - 50, - ), - /** - * Sort direction (default: desc for dates/numbers/counts, asc for strings) - */ - order: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.string<"asc" | "desc" | (string & {})>(), - ), - /** - * Include profile + identity info keyed by DID - */ - profiles: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), - /** - * Field to sort by (default: time_us) - */ - sort: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.string< - "createdAt" | "status" | "subjectUri" | (string & {}) - >(), - ), - /** - * Filter by status - */ - status: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - /** - * Filter by subject.uri - */ - subjectUri: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - }), - output: { - type: "lex", - schema: /*#__PURE__*/ v.object({ - cursor: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - get profiles() { - return /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.array(profileEntrySchema), - ); - }, - get records() { - return /*#__PURE__*/ v.array(recordSchema); - }, - }), - }, -}); -const _profileEntrySchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.rsvp.listRecords#profileEntry"), - ), - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), - collection: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.nsidString()), - did: /*#__PURE__*/ v.didString(), - handle: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - rkey: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - uri: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), - get value() { - return /*#__PURE__*/ v.optional(appBskyActorProfileSchema); - }, -}); -const _recordSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.rsvp.listRecords#record"), - ), - cid: /*#__PURE__*/ v.cidString(), - collection: /*#__PURE__*/ v.nsidString(), - did: /*#__PURE__*/ v.didString(), - get event() { - return /*#__PURE__*/ v.optional(refEventRecordSchema); - }, - rkey: /*#__PURE__*/ v.string(), - time_us: /*#__PURE__*/ v.integer(), - uri: /*#__PURE__*/ v.resourceUriString(), - get value() { - return CommunityLexiconCalendarRsvp.mainSchema; - }, -}); -const _refEventRecordSchema = /*#__PURE__*/ v.object({ - $type: /*#__PURE__*/ v.optional( - /*#__PURE__*/ v.literal("rsvp.atmo.rsvp.listRecords#refEventRecord"), - ), - cid: /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), - collection: /*#__PURE__*/ v.nsidString(), - did: /*#__PURE__*/ v.didString(), - get record() { - return /*#__PURE__*/ v.optional(CommunityLexiconCalendarEvent.mainSchema); - }, - rkey: /*#__PURE__*/ v.string(), - time_us: /*#__PURE__*/ v.integer(), - uri: /*#__PURE__*/ v.resourceUriString(), -}); - +const _appBskyActorProfileSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.rsvp.listRecords#appBskyActorProfile")), + /** + * Small image to be displayed next to posts from account. AKA, 'profile picture' + * @accept image/png, image/jpeg + * @maxSize 1000000 + */ + "avatar": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.blob(), + [ + /*#__PURE__*/ v.blobSize(1000000), + /*#__PURE__*/ v.blobAccept(["image/png", "image/jpeg"]) + ] + )), + /** + * Larger horizontal image to display behind profile view. + * @accept image/png, image/jpeg + * @maxSize 1000000 + */ + "banner": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.blob(), + [ + /*#__PURE__*/ v.blobSize(1000000), + /*#__PURE__*/ v.blobAccept(["image/png", "image/jpeg"]) + ] + )), + "createdAt": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.datetimeString()), + /** + * Free-form profile description text. + * @maxLength 2560 + * @maxGraphemes 256 + */ + "description": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 2560), + /*#__PURE__*/ v.stringGraphemes(0, 256) + ] + )), + /** + * @maxLength 640 + * @maxGraphemes 64 + */ + "displayName": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 640), + /*#__PURE__*/ v.stringGraphemes(0, 64) + ] + )), + get "joinedViaStarterPack"() { + return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema) + }, + /** + * Self-label values, specific to the Bluesky application, on the overall account. + */ + get "labels"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.variant([ComAtprotoLabelDefs.selfLabelsSchema])) + }, + get "pinnedPost"() { + return /*#__PURE__*/ v.optional(ComAtprotoRepoStrongRef.mainSchema) + }, + /** + * Free-form pronouns text. + * @maxLength 200 + * @maxGraphemes 20 + */ + "pronouns": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.string(), + [ + /*#__PURE__*/ v.stringLength(0, 200), + /*#__PURE__*/ v.stringGraphemes(0, 20) + ] + )), + "website": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.genericUriString()), + } +); +const _mainSchema = /*#__PURE__*/ v.query( + "rsvp.atmo.rsvp.listRecords", + { + "params": /*#__PURE__*/ v.object( + { + /** + * Filter by DID or handle (triggers on-demand backfill) + */ + "actor": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.actorIdentifierString()), + /** + * Maximum value for createdAt + */ + "createdAtMax": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Minimum value for createdAt + */ + "createdAtMin": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "cursor": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Embed the referenced event record + */ + "hydrateEvent": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), + /** + * @minimum 1 + * @maximum 200 + * @default 50 + */ + "limit": /*#__PURE__*/ v.optional( + /*#__PURE__*/ v.constrain( + /*#__PURE__*/ v.integer(), + [/*#__PURE__*/ v.integerRange(1, 200)] + ), + 50 + ), + /** + * Sort direction (default: desc for dates/numbers/counts, asc for strings) + */ + "order": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string<"asc" | "desc" | (string & {})>()), + /** + * Include profile + identity info keyed by DID + */ + "profiles": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.boolean()), + /** + * Field to sort by (default: time_us) + */ + "sort": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string<"createdAt" | "status" | "subjectUri" | (string & {})>()), + /** + * Filter by status + */ + "status": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + /** + * Filter by subject.uri + */ + "subjectUri": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + } + ), + "output": { + "type": "lex", + "schema": /*#__PURE__*/ v.object( + { + "cursor": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + get "profiles"() { + return /*#__PURE__*/ v.optional(/*#__PURE__*/ v.array(profileEntrySchema)) + }, + get "records"() { + return /*#__PURE__*/ v.array(recordSchema) + }, + } + ), + } + } +); +const _profileEntrySchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.rsvp.listRecords#profileEntry")), + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.cidString()), + "collection": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.nsidString()), + "did": /*#__PURE__*/ v.didString(), + "handle": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "rkey": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "uri": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.resourceUriString()), + get "value"() { + return /*#__PURE__*/ v.optional(appBskyActorProfileSchema) + }, + } +); +const _recordSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.rsvp.listRecords#record")), + "cid": /*#__PURE__*/ v.cidString(), + "collection": /*#__PURE__*/ v.nsidString(), + "did": /*#__PURE__*/ v.didString(), + get "event"() { + return /*#__PURE__*/ v.optional(refEventRecordSchema) + }, + "rkey": /*#__PURE__*/ v.string(), + "time_us": /*#__PURE__*/ v.integer(), + "uri": /*#__PURE__*/ v.resourceUriString(), + get "value"() { + return CommunityLexiconCalendarRsvp.mainSchema + }, + } +); +const _refEventRecordSchema = /*#__PURE__*/ v.object( + { + "$type": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.literal("rsvp.atmo.rsvp.listRecords#refEventRecord")), + "cid": /*#__PURE__*/ v.optional(/*#__PURE__*/ v.string()), + "collection": /*#__PURE__*/ v.nsidString(), + "did": /*#__PURE__*/ v.didString(), + get "record"() { + return /*#__PURE__*/ v.optional(CommunityLexiconCalendarEvent.mainSchema) + }, + "rkey": /*#__PURE__*/ v.string(), + "time_us": /*#__PURE__*/ v.integer(), + "uri": /*#__PURE__*/ v.resourceUriString(), + } +); type appBskyActorProfile$schematype = typeof _appBskyActorProfileSchema; type main$schematype = typeof _mainSchema; type profileEntry$schematype = typeof _profileEntrySchema; @@ -196,33 +208,33 @@ type record$schematype = typeof _recordSchema; type refEventRecord$schematype = typeof _refEventRecordSchema; export interface appBskyActorProfileSchema extends appBskyActorProfile$schematype {} + export interface mainSchema extends main$schematype {} + export interface profileEntrySchema extends profileEntry$schematype {} + export interface recordSchema extends record$schematype {} -export interface refEventRecordSchema extends refEventRecord$schematype {} -export const appBskyActorProfileSchema = - _appBskyActorProfileSchema as appBskyActorProfileSchema; +export interface refEventRecordSchema extends refEventRecord$schematype {} +export const appBskyActorProfileSchema = _appBskyActorProfileSchema as appBskyActorProfileSchema; export const mainSchema = _mainSchema as mainSchema; export const profileEntrySchema = _profileEntrySchema as profileEntrySchema; export const recordSchema = _recordSchema as recordSchema; -export const refEventRecordSchema = - _refEventRecordSchema as refEventRecordSchema; +export const refEventRecordSchema = _refEventRecordSchema as refEventRecordSchema; + +export interface AppBskyActorProfile extends v.InferInput {} -export interface AppBskyActorProfile extends v.InferInput< - typeof appBskyActorProfileSchema -> {} export interface ProfileEntry extends v.InferInput {} + export interface Record extends v.InferInput {} -export interface RefEventRecord extends v.InferInput< - typeof refEventRecordSchema -> {} -export interface $params extends v.InferInput {} -export interface $output extends v.InferXRPCBodyInput {} +export interface RefEventRecord extends v.InferInput {} + +export interface $params extends v.InferInput {} -declare module "@atcute/lexicons/ambient" { - interface XRPCQueries { - "rsvp.atmo.rsvp.listRecords": mainSchema; - } +export interface $output extends v.InferXRPCBodyInput {} +declare module '@atcute/lexicons/ambient' { + interface XRPCQueries { + "rsvp.atmo.rsvp.listRecords": mainSchema; + } } diff --git a/apps/web/src/lib/actor.test.ts b/apps/web/src/lib/actor.test.ts new file mode 100644 index 0000000..db281a7 --- /dev/null +++ b/apps/web/src/lib/actor.test.ts @@ -0,0 +1,56 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; + +const mocks = vi.hoisted(() => ({ resolveHandle: vi.fn() })); +vi.mock('@svelte-atproto/oauth/helper', () => mocks); +const did = 'did:plc:abcdefghijklmnopqrstuvwx'; + +beforeEach(() => { + vi.resetModules(); + vi.resetAllMocks(); + vi.useFakeTimers(); +}); +afterEach(() => vi.useRealTimers()); + +describe('app actor resolution', () => { + it('does not perform a lookup for a DID', async () => { + const { actorToDid } = await import('./actor'); + expect(await actorToDid(did)).toBe(did); + expect(mocks.resolveHandle).not.toHaveBeenCalled(); + }); + + it('uses the library while keeping successful handle lookups cached', async () => { + mocks.resolveHandle.mockResolvedValue(did); + const { actorToDid } = await import('./actor'); + expect(await actorToDid('alice.test')).toBe(did); + expect(await actorToDid('alice.test')).toBe(did); + expect(mocks.resolveHandle).toHaveBeenCalledExactlyOnceWith({ + handle: 'alice.test', + doh: 'https://mozilla.cloudflare-dns.com/dns-query', + slingshot: false + }); + vi.advanceTimersByTime(60 * 60 * 1000 + 1); + await actorToDid('alice.test'); + expect(mocks.resolveHandle).toHaveBeenCalledTimes(2); + }); + + it('retries a transient failure rather than turning it into a not-found page', async () => { + mocks.resolveHandle.mockRejectedValueOnce(new Error('DNS unavailable')).mockResolvedValue(did); + const { getActor } = await import('./actor'); + const result = getActor('alice.test'); + await vi.runAllTimersAsync(); + expect(await result).toBe(did); + expect(mocks.resolveHandle).toHaveBeenCalledTimes(2); + }); + + it('does not cache failed lookups', async () => { + mocks.resolveHandle.mockRejectedValue(new Error('unresolved')); + const { getActor } = await import('./actor'); + const result = getActor('alice.test'); + await vi.runAllTimersAsync(); + expect(await result).toBeNull(); + expect(mocks.resolveHandle).toHaveBeenCalledTimes(3); + mocks.resolveHandle.mockResolvedValue(did); + expect(await getActor('alice.test')).toBe(did); + expect(mocks.resolveHandle).toHaveBeenCalledTimes(4); + }); +}); diff --git a/apps/web/src/lib/actor.ts b/apps/web/src/lib/actor.ts index cfc2f22..299d510 100644 --- a/apps/web/src/lib/actor.ts +++ b/apps/web/src/lib/actor.ts @@ -1,9 +1,36 @@ -import { actorToDid } from '$lib/atproto/methods'; +import type { Did, Handle } from '@atcute/lexicons'; +import { isDid } from '@atcute/lexicons/syntax'; +import { resolveHandle } from '@svelte-atproto/oauth/helper'; +import { DOH_RESOLVER } from '#lib/atproto/settings.js'; -/** - * Resolves an actor param (handle or DID) to a DID string. - * Returns null if resolution fails. - */ +const HANDLE_CACHE_TTL_MS = 60 * 60 * 1000; +const handleCache = new Map(); + +/** Keep successful actor lookups warm; retry transient DNS/PDS failures. */ +export async function actorToDid(actor: string): Promise { + if (isDid(actor)) return actor; + const cached = handleCache.get(actor); + if (cached && Date.now() - cached.at < HANDLE_CACHE_TTL_MS) return cached.did; + + let lastError: unknown; + for (let attempt = 0; attempt < 3; attempt++) { + try { + const did = await resolveHandle({ + handle: actor as Handle, + doh: DOH_RESOLVER, + slingshot: false + }); + handleCache.set(actor, { did, at: Date.now() }); + return did; + } catch (error) { + lastError = error; + if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 150 * (attempt + 1))); + } + } + throw lastError; +} + +/** Route-facing variant: an unresolved actor is a not-found result. */ export async function getActor(actor: string): Promise { try { return await actorToDid(actor); diff --git a/apps/web/src/lib/atproto/auth.svelte.test.ts b/apps/web/src/lib/atproto/auth.svelte.test.ts new file mode 100644 index 0000000..918a20b --- /dev/null +++ b/apps/web/src/lib/atproto/auth.svelte.test.ts @@ -0,0 +1,54 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +const mocks = vi.hoisted(() => ({ + login: vi.fn(async () => {}), + signup: vi.fn(async () => {}), + logout: vi.fn(async () => {}), + page: { data: {} as Record } +})); +vi.mock('@svelte-atproto/oauth/client', () => mocks); +vi.mock('$app/state', () => ({ page: mocks.page })); +import { login, signup, logout, user } from './auth.svelte'; +import { blueskyPostingScope, requiredScopes } from './settings'; + +beforeEach(() => { + vi.clearAllMocks(); + mocks.page.data = {}; +}); + +describe('OAuth client integration', () => { + it('passes the required-only selection and return-path handling to the library', async () => { + await login(' @alice '); + expect(mocks.login).toHaveBeenCalledExactlyOnceWith('alice.bsky.social', { + scope: requiredScopes, + saveReturnTo: true + }); + }); + it('passes an explicit optional selection without changing a DID', async () => { + await login('did:plc:alice', { scopes: [blueskyPostingScope] }); + expect(mocks.login).toHaveBeenCalledExactlyOnceWith('did:plc:alice', { + scope: [...requiredScopes, blueskyPostingScope], + saveReturnTo: true + }); + }); + it('honors signup selections; default signup does not request Bluesky', async () => { + await signup(); + expect(mocks.signup).toHaveBeenLastCalledWith({ scope: requiredScopes, saveReturnTo: true }); + await signup({ scopes: [blueskyPostingScope] }); + expect(mocks.signup).toHaveBeenLastCalledWith({ + scope: [...requiredScopes, blueskyPostingScope], + saveReturnTo: true + }); + }); + it('does not infer posting permission from login', () => { + mocks.page.data = { did: 'did:plc:alice' }; + expect(user.isLoggedIn).toBe(true); + expect(user.canPostToBluesky).toBe(false); + mocks.page.data.canPostToBluesky = true; + expect(user.canPostToBluesky).toBe(true); + }); + it('delegates revocation and cookie cleanup to the library', async () => { + await logout(); + expect(mocks.logout).toHaveBeenCalledExactlyOnceWith(); + }); +}); diff --git a/apps/web/src/lib/atproto/auth.svelte.ts b/apps/web/src/lib/atproto/auth.svelte.ts index 2859236..b7f6582 100644 --- a/apps/web/src/lib/atproto/auth.svelte.ts +++ b/apps/web/src/lib/atproto/auth.svelte.ts @@ -1,7 +1,13 @@ -import { AppBskyActorDefs } from '@atcute/bluesky'; -import type { ActorIdentifier, Did } from '@atcute/lexicons'; +import type { AppBskyActorDefs } from '@atcute/bluesky'; +import type { Did } from '@atcute/lexicons'; import { page } from '$app/state'; +import { + login as oauthLogin, + signup as oauthSignup, + logout as oauthLogout +} from '@svelte-atproto/oauth/client'; import { ALLOW_SIGNUP, REDIRECT_TO_LAST_PAGE_ON_LOGIN } from './settings'; +import { getLoginScopes } from './permissions'; export const user = { get profile() { @@ -12,64 +18,31 @@ export const user = { }, get did() { return (page.data?.did as Did | null) ?? null; + }, + get canPostToBluesky() { + return page.data?.canPostToBluesky === true; } }; -function saveReturnTo() { - if (REDIRECT_TO_LAST_PAGE_ON_LOGIN) { - document.cookie = `oauth_return_to=${encodeURIComponent(window.location.pathname + window.location.search)};path=/;max-age=600;samesite=lax`; +export function login(handle: string, options?: { scopes: readonly string[] }) { + let normalized = handle.trim().replace(/^@/, ''); + if (!normalized.startsWith('did:') && !normalized.includes('.') && normalized.length > 3) { + normalized += '.bsky.social'; } -} - -export async function login(handle: string) { - if (handle.startsWith('did:')) { - if (handle.length < 6) throw new Error('DID must be at least 6 characters'); - } else if (handle.includes('.') && handle.length > 3) { - handle = (handle.startsWith('@') ? handle.slice(1) : handle) as ActorIdentifier; - if (handle.length < 4) throw new Error('Handle must be at least 4 characters'); - } else if (handle.length > 3) { - handle = ((handle.startsWith('@') ? handle.slice(1) : handle) + - '.bsky.social') as ActorIdentifier; - } else { - throw new Error('Please provide a valid handle or DID.'); - } - - const { oauthLogin } = await import('./server/oauth.remote'); - const { url } = await oauthLogin({ handle }); - saveReturnTo(); - window.location.assign(url); - - // Wait for navigation (prevents UI flash) - await new Promise((_resolve, reject) => { - window.addEventListener('pageshow', () => reject(new Error('user aborted the login request')), { - once: true - }); + return oauthLogin(normalized, { + scope: getLoginScopes(options?.scopes), + saveReturnTo: REDIRECT_TO_LAST_PAGE_ON_LOGIN }); } -export async function signup() { +export function signup(options?: { scopes: readonly string[] }) { if (!ALLOW_SIGNUP) throw new Error('Signup is not enabled'); - - const { oauthLogin } = await import('./server/oauth.remote'); - const { url } = await oauthLogin({ signup: true }); - saveReturnTo(); - window.location.assign(url); - - await new Promise((_resolve, reject) => { - window.addEventListener('pageshow', () => reject(new Error('user aborted the signup request')), { - once: true - }); + return oauthSignup({ + scope: getLoginScopes(options?.scopes), + saveReturnTo: REDIRECT_TO_LAST_PAGE_ON_LOGIN }); } -export async function logout() { - try { - const { oauthLogout } = await import('./server/oauth.remote'); - await oauthLogout(); - } catch (e) { - console.error('Error logging out:', e); - } - - // Full reload to clear server session state - window.location.href = '/'; +export function logout() { + return oauthLogout(); } diff --git a/apps/web/src/lib/atproto/image-helper.ts b/apps/web/src/lib/atproto/image-helper.ts deleted file mode 100644 index 08ddf93..0000000 --- a/apps/web/src/lib/atproto/image-helper.ts +++ /dev/null @@ -1,152 +0,0 @@ -import { getCDNImageBlobUrl, uploadBlob } from './methods'; - -export function compressImage( - file: File | Blob, - maxSize: number = 900 * 1024, - maxDimension: number = 2048 -): Promise<{ - blob: Blob; - aspectRatio: { - width: number; - height: number; - }; -}> { - return new Promise((resolve, reject) => { - const img = new Image(); - const reader = new FileReader(); - - reader.onload = (e) => { - if (!e.target?.result) { - return reject(new Error('Failed to read file.')); - } - img.src = e.target.result as string; - }; - - reader.onerror = (err) => reject(err); - reader.readAsDataURL(file); - - img.onload = () => { - let width = img.width; - let height = img.height; - - // If image is already small enough, return original - if (file.size <= maxSize) { - console.log('skipping compression+resizing, already small enough'); - return resolve({ - blob: file, - aspectRatio: { - width, - height - } - }); - } - - if (width > maxDimension || height > maxDimension) { - if (width > height) { - height = Math.round((maxDimension / width) * height); - width = maxDimension; - } else { - width = Math.round((maxDimension / height) * width); - height = maxDimension; - } - } - - // Create a canvas to draw the image - const canvas = document.createElement('canvas'); - canvas.width = width; - canvas.height = height; - const ctx = canvas.getContext('2d'); - if (!ctx) return reject(new Error('Failed to get canvas context.')); - ctx.drawImage(img, 0, 0, width, height); - - // Use WebP for both compression and transparency support - let quality = 0.9; - - function attemptCompression() { - canvas.toBlob( - (blob) => { - if (!blob) { - return reject(new Error('Compression failed.')); - } - if (blob.size <= maxSize || quality < 0.3) { - resolve({ - blob, - aspectRatio: { - width, - height - } - }); - } else { - quality -= 0.1; - attemptCompression(); - } - }, - 'image/webp', - quality - ); - } - - attemptCompression(); - }; - - img.onerror = (err) => reject(err); - }); -} - -export async function checkAndUploadImage( - recordWithImage: Record, - key: string = 'image', - // e.g. /api/image-proxy?url= - imageProxy?: string -) { - if (!recordWithImage[key]) return; - - // Already uploaded as blob - if (typeof recordWithImage[key] === 'object' && recordWithImage[key].$type === 'blob') { - return; - } - - if (typeof recordWithImage[key] === 'string' && imageProxy) { - const proxyUrl = imageProxy + encodeURIComponent(recordWithImage[key]); - const response = await fetch(proxyUrl); - if (!response.ok) { - throw Error('failed to get image from image proxy'); - } - - const blob = await response.blob(); - const { blob: compressed, aspectRatio } = await compressImage(blob); - - recordWithImage[key] = await uploadBlob({ blob: compressed, aspectRatio }); - - return; - } - - if (recordWithImage[key]?.blob) { - if (recordWithImage[key].objectUrl) { - URL.revokeObjectURL(recordWithImage[key].objectUrl); - } - const { blob: compressed, aspectRatio } = await compressImage(recordWithImage[key].blob); - recordWithImage[key] = await uploadBlob({ blob: compressed, aspectRatio }); - } -} - -export function getImageFromRecord( - recordWithImage: Record | undefined, - did: string, - key: string = 'image' -): string | undefined { - if (!recordWithImage?.[key]) return; - - if (typeof recordWithImage[key] === 'object' && recordWithImage[key].$type === 'blob') { - return getCDNImageBlobUrl({ did, blob: recordWithImage[key] }); - } - - if (recordWithImage[key].objectUrl) return recordWithImage[key].objectUrl; - - if (recordWithImage[key].blob) { - recordWithImage[key].objectUrl = URL.createObjectURL(recordWithImage[key].blob); - return recordWithImage[key].objectUrl; - } - - return recordWithImage[key]; -} diff --git a/apps/web/src/lib/atproto/index.ts b/apps/web/src/lib/atproto/index.ts deleted file mode 100644 index bad3628..0000000 --- a/apps/web/src/lib/atproto/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -export { user, login, signup, logout } from './auth.svelte'; -export { getProfileUrl } from '@atmo-dev/events-ui'; - -export { - parseUri, - resolveHandle, - actorToDid, - getPDS, - getDetailedProfile, - getClient, - listRecords, - getRecord, - putRecord, - deleteRecord, - uploadBlob, - describeRepo, - getBlobURL, - getCDNImageBlobUrl, - searchActorsTypeahead, - createTID -} from './methods'; diff --git a/apps/web/src/lib/atproto/methods.ts b/apps/web/src/lib/atproto/methods.ts deleted file mode 100644 index 8539815..0000000 --- a/apps/web/src/lib/atproto/methods.ts +++ /dev/null @@ -1,433 +0,0 @@ -import { parseResourceUri, type Did, type Handle } from '@atcute/lexicons'; -import { isDid } from '@atcute/lexicons/syntax'; -import { user } from './auth.svelte'; -import { DOH_RESOLVER, type AllowedCollection } from './settings'; -import { - CompositeDidDocumentResolver, - CompositeHandleResolver, - DohJsonHandleResolver, - PlcDidDocumentResolver, - WebDidDocumentResolver, - WellKnownHandleResolver -} from '@atcute/identity-resolver'; -import { Client, simpleFetchHandler } from '@atcute/client'; -import { type AppBskyActorDefs } from '@atcute/bluesky'; - -export type Collection = `${string}.${string}.${string}`; -import * as TID from '@atcute/tid'; - -/** - * Parses an AT Protocol URI into its components. - */ -export function parseUri(uri: string) { - const parts = parseResourceUri(uri); - if (!parts.ok) return; - return parts.value; -} - -/** - * Resolves a handle to a DID using DNS and HTTP methods. - */ -export async function resolveHandle({ handle }: { handle: Handle }) { - const handleResolver = new CompositeHandleResolver({ - methods: { - dns: new DohJsonHandleResolver({ dohUrl: DOH_RESOLVER }), - http: new WellKnownHandleResolver() - } - }); - - const data = await handleResolver.resolve(handle); - return data; -} - -// Handle→DID is stable enough to cache, and resolution hits the network (DoH + -// `.well-known`), which is occasionally flaky. Cache successes (per worker -// isolate) and retry transient failures so a momentary blip doesn't surface to -// callers as an unresolvable actor. Only successes are cached, so a transient -// failure is retried on the next call rather than stuck as a negative. -const HANDLE_CACHE_TTL_MS = 60 * 60 * 1000; -const handleCache = new Map(); - -/** - * Returns a DID given a handle or DID string. Caches + retries handle lookups. - * Throws if resolution genuinely fails after retries (callers should treat that - * as transient, not as "actor doesn't exist"). - */ -export async function actorToDid(actor: string): Promise { - if (isDid(actor)) return actor; - - const cached = handleCache.get(actor); - if (cached && Date.now() - cached.at < HANDLE_CACHE_TTL_MS) return cached.did; - - let lastErr: unknown; - for (let attempt = 0; attempt < 3; attempt++) { - try { - const did = await resolveHandle({ handle: actor as Handle }); - handleCache.set(actor, { did, at: Date.now() }); - return did; - } catch (e) { - lastErr = e; - if (attempt < 2) await new Promise((r) => setTimeout(r, 150 * (attempt + 1))); - } - } - throw lastErr; -} - -const didResolver = new CompositeDidDocumentResolver({ - methods: { - plc: new PlcDidDocumentResolver(), - web: new WebDidDocumentResolver() - } -}); - -/** - * Gets the PDS (Personal Data Server) URL for a given DID. - */ -export async function getPDS(did: Did) { - const doc = await didResolver.resolve(did as Did<'plc'> | Did<'web'>); - if (!doc.service) throw new Error('No PDS found'); - for (const service of doc.service) { - if (service.id === '#atproto_pds') { - return service.serviceEndpoint.toString(); - } - } -} - -/** - * Fetches a detailed Bluesky profile for a user. - */ -export async function getDetailedProfile(data?: { did?: Did; client?: Client }) { - data ??= {}; - data.did ??= user.did ?? undefined; - - if (!data.did) throw new Error('Error getting detailed profile: no did'); - - data.client ??= new Client({ - handler: simpleFetchHandler({ service: 'https://public.api.bsky.app' }) - }); - - const response = await data.client.get('app.bsky.actor.getProfile', { - params: { actor: data.did } - }); - - if (!response.ok) return; - - return response.data; -} - -/** - * Creates an AT Protocol client for a user's PDS. - */ -export async function getClient({ did }: { did: Did }) { - const pds = await getPDS(did); - if (!pds) throw new Error('PDS not found'); - - const client = new Client({ - handler: simpleFetchHandler({ service: pds }) - }); - - return client; -} - -/** - * Lists records from a repository collection with pagination support. - */ -export async function listRecords({ - did, - collection, - cursor, - limit = 100, - client -}: { - did?: Did; - collection: `${string}.${string}.${string}`; - cursor?: string; - limit?: number; - client?: Client; -}) { - did ??= user.did ?? undefined; - if (!collection) { - throw new Error('Missing parameters for listRecords'); - } - if (!did) { - throw new Error('Missing did for listRecords'); - } - - client ??= await getClient({ did }); - - const allRecords = []; - - let currentCursor = cursor; - do { - const response = await client.get('com.atproto.repo.listRecords', { - params: { - repo: did, - collection, - limit: !limit || limit > 100 ? 100 : limit, - cursor: currentCursor - } - }); - - if (!response.ok) { - return allRecords; - } - - allRecords.push(...response.data.records); - currentCursor = response.data.cursor; - } while (currentCursor && (!limit || allRecords.length < limit)); - - return allRecords; -} - -/** - * Fetches a single record from a repository. - */ -export async function getRecord({ - did, - collection, - rkey = 'self', - client -}: { - did?: Did; - collection: Collection; - rkey?: string; - client?: Client; -}) { - did ??= user.did ?? undefined; - - if (!collection) { - throw new Error('Missing parameters for getRecord'); - } - if (!did) { - throw new Error('Missing did for getRecord'); - } - - client ??= await getClient({ did }); - - const record = await client.get('com.atproto.repo.getRecord', { - params: { - repo: did, - collection, - rkey - } - }); - - return JSON.parse(JSON.stringify(record.data)); -} - -/** - * Creates or updates a record via remote function. - */ -export async function putRecord({ - collection, - rkey = 'self', - record -}: { - collection: AllowedCollection; - rkey?: string; - record: Record; -}) { - if (!user.did) throw new Error('Not logged in'); - - const { putRecord: putRecordRemote } = await import('./server/repo.remote'); - const data = await putRecordRemote({ collection, rkey, record }); - return { ok: true, data }; -} - -/** - * Creates a new record (PDS rejects if the rkey already exists). Use this - * instead of putRecord when the OAuth grant only includes the `create` action - * for the target collection (e.g. `app.bsky.feed.post`). - */ -export async function createRecord({ - collection, - rkey, - record -}: { - collection: AllowedCollection; - rkey?: string; - record: Record; -}) { - if (!user.did) throw new Error('Not logged in'); - - const { createRecord: createRecordRemote } = await import('./server/repo.remote'); - const data = await createRecordRemote({ collection, rkey, record }); - return { ok: true, data }; -} - -/** - * Deletes a record via remote function. - */ -export async function deleteRecord({ - collection, - rkey = 'self' -}: { - collection: AllowedCollection; - rkey: string; -}) { - if (!user.did) throw new Error('Not logged in'); - - const { deleteRecord: deleteRecordRemote } = await import('./server/repo.remote'); - const data = await deleteRecordRemote({ collection, rkey }); - return data.ok; -} - -/** - * Gets the dimensions of an image blob. - */ -function getImageDimensions(blob: Blob): Promise<{ width: number; height: number }> { - return new Promise((resolve, reject) => { - const img = new Image(); - const url = URL.createObjectURL(blob); - img.onload = () => { - URL.revokeObjectURL(url); - resolve({ width: img.naturalWidth, height: img.naturalHeight }); - }; - img.onerror = () => { - URL.revokeObjectURL(url); - reject(new Error('Failed to load image for dimensions')); - }; - img.src = url; - }); -} - -/** - * Uploads a blob via remote function. - * Converts the Blob to a byte array for serialization across the remote boundary. - * For image blobs, automatically includes aspectRatio with width and height. - */ -export async function uploadBlob({ - blob, - aspectRatio -}: { - blob: Blob; - aspectRatio?: { width: number; height: number }; -}) { - if (!user.did) throw new Error("Can't upload blob: Not logged in"); - - // Auto-detect dimensions for image blobs if not provided - if (!aspectRatio && blob.type.startsWith('image/')) { - try { - aspectRatio = await getImageDimensions(blob); - } catch { - // Non-critical — proceed without aspectRatio - } - } - - const arrayBuffer = await blob.arrayBuffer(); - const bytes = Array.from(new Uint8Array(arrayBuffer)); - - const { uploadBlob: uploadBlobRemote } = await import('./server/repo.remote'); - const result = await uploadBlobRemote({ - bytes, - mimeType: blob.type || 'application/octet-stream' - }); - - if (aspectRatio) { - return { ...result, aspectRatio }; - } - return result; -} - -/** - * Gets metadata about a repository. - */ -export async function describeRepo({ client, did }: { client?: Client; did?: Did }) { - did ??= user.did ?? undefined; - if (!did) { - throw new Error('Error describeRepo: No did'); - } - client ??= await getClient({ did }); - - const repo = await client.get('com.atproto.repo.describeRepo', { - params: { - repo: did - } - }); - if (!repo.ok) return; - - return repo.data; -} - -/** - * Constructs a URL to fetch a blob directly from a user's PDS. - */ -export async function getBlobURL({ - did, - blob -}: { - did: Did; - blob: { - $type: 'blob'; - ref: { - $link: string; - }; - }; -}) { - const pds = await getPDS(did); - return `${pds}/xrpc/com.atproto.sync.getBlob?did=${did}&cid=${blob.ref.$link}`; -} - -/** - * Constructs a Bluesky CDN URL for an image blob. - * `feed_thumbnail` is at most 1000px; `avatar_thumbnail` is a 128px square crop. - */ -export function getCDNImageBlobUrl({ - did, - blob, - format = 'webp', - preset = 'feed_thumbnail' -}: { - did?: string; - blob: { - $type: 'blob'; - ref: { - $link: string; - }; - }; - format?: 'webp' | 'jpeg' | 'png'; - preset?: 'feed_thumbnail' | 'avatar_thumbnail'; -}) { - did ??= user.did ?? undefined; - - return `https://cdn.bsky.app/img/${preset}/plain/${did}/${blob.ref.$link}@${format}`; -} - -/** - * Searches for actors with typeahead/autocomplete functionality. - */ -export async function searchActorsTypeahead( - q: string, - limit: number = 10, - host?: string -): Promise<{ actors: AppBskyActorDefs.ProfileViewBasic[]; q: string }> { - host ??= 'https://typeahead.waow.tech'; - - // const client = new Client({ - // handler: simpleFetchHandler({ service: host }) - // }); - - // const response = await client.get('app.bsky.actor.searchActorsTypeahead', { - // params: { - // q, - // limit - // } - // }); - - const response = await fetch( - `${host}/xrpc/app.bsky.actor.searchActorsTypeahead?q=${encodeURIComponent(q)}&limit=${limit}`, - { headers: { 'X-Client': 'atmo.rsvp' } } - ); - - if (!response.ok) return { actors: [], q }; - const data = (await response.json()) as { actors: AppBskyActorDefs.ProfileViewBasic[] }; - - return { actors: data.actors, q }; -} - -/** - * Return a TID based on current time - */ -export function createTID() { - return TID.now(); -} diff --git a/apps/web/src/lib/atproto/microcosm.ts b/apps/web/src/lib/atproto/microcosm.ts deleted file mode 100644 index fca5998..0000000 --- a/apps/web/src/lib/atproto/microcosm.ts +++ /dev/null @@ -1,19 +0,0 @@ -const BASE_URL = 'https://ufos-api.microcosm.blue'; - -export interface MicrocosmRecord { - did: string; - collection: string; - rkey: string; - record: T; - time_us: number; -} - -export async function recentRecords( - collections: string | string[] -): Promise[]> { - const collection = Array.isArray(collections) ? collections.join(',') : collections; - const url = `${BASE_URL}/records?collection=${encodeURIComponent(collection)}`; - const res = await fetch(url); - if (!res.ok) throw new Error(`Microcosm API error: ${res.status}`); - return res.json(); -} diff --git a/apps/web/src/lib/atproto/permissions.test.ts b/apps/web/src/lib/atproto/permissions.test.ts new file mode 100644 index 0000000..9367993 --- /dev/null +++ b/apps/web/src/lib/atproto/permissions.test.ts @@ -0,0 +1,53 @@ +import { describe, expect, it } from 'vitest'; +import { resolveLoginOptions } from '@atmo-dev/kit'; +import { canPostToBluesky, getLoginScopes, loginPermissions } from './permissions'; +import { blueskyPostingScope, requiredScopes } from './settings'; + +describe('permission selection', () => { + it('requires events/RSVPs and images, but leaves Bluesky posting off by default', () => { + const options = resolveLoginOptions(loginPermissions, {}); + expect(options.permissionIds).toEqual(['calendar']); + expect(options.scopes).toEqual(requiredScopes); + expect(getLoginScopes(options.scopes)).toEqual(requiredScopes); + }); + + it('cannot deselect calendar access', () => { + expect(resolveLoginOptions(loginPermissions, { calendar: false }).scopes).toEqual( + requiredScopes + ); + expect(getLoginScopes([])).toEqual(requiredScopes); + }); + + it('adds Bluesky only when explicitly selected, without dropping required scopes', () => { + const options = resolveLoginOptions(loginPermissions, { calendar: false, bluesky: true }); + expect(options.permissionIds).toEqual(['calendar', 'bluesky']); + expect(getLoginScopes(options.scopes)).toEqual([...requiredScopes, blueskyPostingScope]); + expect(getLoginScopes([blueskyPostingScope])).toEqual([...requiredScopes, blueskyPostingScope]); + }); + + it('does not accept unrelated scopes from a caller', () => { + expect(getLoginScopes(['transition:generic', 'repo:*'])).toEqual(requiredScopes); + }); +}); + +describe('actual Bluesky grants', () => { + it.each([ + ['atproto'], + ['atproto', blueskyPostingScope], + ['atproto', 'repo:app.bsky.feed.post?action=update'], + ['atproto', 'repo:app.bsky.feed.post?action=delete'], + ['atproto', 'repo:community.lexicon.calendar.event'], + ['atproto', 'repo:app.bsky.feed.post?action=create&unknown=restriction'] + ])('denies absent, opaque, or insufficient grants: %j', (...grant) => { + expect(canPostToBluesky(grant)).toBe(false); + }); + + it.each([ + 'repo:app.bsky.feed.post?action=create', + 'repo?collection=app.bsky.feed.post&action=create', + 'repo:app.bsky.feed.post', + 'repo:*?action=create' + ])('accepts a concrete create grant: %s', (grant) => { + expect(canPostToBluesky(['atproto', grant])).toBe(true); + }); +}); diff --git a/apps/web/src/lib/atproto/permissions.ts b/apps/web/src/lib/atproto/permissions.ts new file mode 100644 index 0000000..879c04b --- /dev/null +++ b/apps/web/src/lib/atproto/permissions.ts @@ -0,0 +1,39 @@ +import type { LoginPermission } from '@atmo-dev/kit'; +import { hasCapability, type Capability, type Scope } from '@svelte-atproto/oauth/permissions'; +import { blueskyPostingScope, requiredScopes } from './settings'; + +export const loginPermissions: readonly LoginPermission[] = [ + { + id: 'calendar', + label: 'Events and RSVPs', + description: 'Create and edit events, RSVP, and upload event images.', + scopes: requiredScopes.slice(1), + required: true + }, + { + id: 'bluesky', + label: 'Post to Bluesky', + description: 'Share events directly from your account.', + scopes: [blueskyPostingScope], + defaultSelected: false + } +]; + +/** Always retain required permissions, including for signup and direct callers. */ +export function getLoginScopes(selected: readonly string[] = []): string[] { + return [ + ...requiredScopes, + ...(selected.includes(blueskyPostingScope) ? [blueskyPostingScope] : []) + ]; +} + +export const blueskyPostCapability = { + type: 'repo', + collection: 'app.bsky.feed.post', + action: 'create' +} as const satisfies Capability; + +/** Only concrete token grants count; include: requests alone prove nothing. */ +export function canPostToBluesky(grantedScope: Scope): boolean { + return hasCapability(grantedScope, blueskyPostCapability); +} diff --git a/apps/web/src/lib/atproto/port.ts b/apps/web/src/lib/atproto/port.ts deleted file mode 100644 index 8e4e74f..0000000 --- a/apps/web/src/lib/atproto/port.ts +++ /dev/null @@ -1,3 +0,0 @@ -// Dev server port — generated by setup-dev, shared by vite, oauth, and tunnel. -// Each project gets a unique random port (5200–7200) so multiple projects can run simultaneously. -export const DEV_PORT = 5454; diff --git a/apps/web/src/lib/atproto/repo.remote.test.ts b/apps/web/src/lib/atproto/repo.remote.test.ts new file mode 100644 index 0000000..348635c --- /dev/null +++ b/apps/web/src/lib/atproto/repo.remote.test.ts @@ -0,0 +1,79 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +const mocks = vi.hoisted(() => ({ + can: vi.fn(), + post: vi.fn(), + getRequestEvent: vi.fn() +})); +vi.mock('$app/server', () => ({ + command: (_schema: unknown, handler: unknown) => + Object.assign(handler as object, { __: { type: 'command' } }), + getRequestEvent: mocks.getRequestEvent +})); +vi.mock('./server/oauth', () => ({ getAuth: () => ({ api: { can: mocks.can } }) })); +import { createRecord, putRecord, deleteRecord } from './repo.remote'; + +beforeEach(() => { + vi.resetAllMocks(); + mocks.getRequestEvent.mockReturnValue({ + locals: { did: 'did:plc:alice', client: { post: mocks.post } } + }); + mocks.post.mockResolvedValue({ + ok: true, + data: { uri: 'at://did:plc:alice/app.bsky.feed.post/post', cid: 'cid' } + }); +}); + +describe('Bluesky write enforcement', () => { + it('rejects direct post requests without a concrete grant, not only in the UI', async () => { + mocks.can.mockResolvedValue(false); + await expect( + createRecord({ collection: 'app.bsky.feed.post', record: {} }) + ).rejects.toMatchObject({ status: 403 }); + expect(mocks.post).not.toHaveBeenCalled(); + }); + it('checks create permission before posting', async () => { + mocks.can.mockResolvedValue(true); + await createRecord({ collection: 'app.bsky.feed.post', record: {} }); + expect(mocks.can).toHaveBeenCalledExactlyOnceWith({ + type: 'repo', + collection: 'app.bsky.feed.post', + action: 'create' + }); + expect(mocks.post).toHaveBeenCalledOnce(); + }); + it('checks the appropriate action for update and delete', async () => { + mocks.can.mockResolvedValue(false); + await expect( + putRecord({ collection: 'app.bsky.feed.post', rkey: 'post', record: {} }) + ).rejects.toMatchObject({ status: 403 }); + await expect( + deleteRecord({ collection: 'app.bsky.feed.post', rkey: 'post' }) + ).rejects.toMatchObject({ status: 403 }); + expect(mocks.can.mock.calls.map(([capability]) => capability.action)).toEqual([ + 'update', + 'delete' + ]); + expect(mocks.post).not.toHaveBeenCalled(); + }); + it('leaves required calendar writes independent of optional Bluesky access', async () => { + await createRecord({ collection: 'community.lexicon.calendar.event', record: {} }); + await putRecord({ collection: 'community.lexicon.calendar.rsvp', rkey: 'rsvp', record: {} }); + expect(mocks.can).not.toHaveBeenCalled(); + expect(mocks.post).toHaveBeenCalledTimes(2); + }); + it('propagates PDS write failures instead of returning a successful-looking result', async () => { + mocks.post.mockResolvedValue({ ok: false, status: 409, data: { error: 'InvalidSwap' } }); + const input = { collection: 'community.lexicon.calendar.event', rkey: 'event', record: {} }; + await expect(createRecord(input)).rejects.toMatchObject({ status: 409 }); + await expect(putRecord(input)).rejects.toMatchObject({ status: 409 }); + await expect(deleteRecord(input)).rejects.toMatchObject({ status: 409 }); + }); + it('fails closed when the token grant cannot be read', async () => { + mocks.can.mockRejectedValue(new Error('temporary token failure')); + await expect(createRecord({ collection: 'app.bsky.feed.post', record: {} })).rejects.toThrow( + 'temporary token failure' + ); + expect(mocks.post).not.toHaveBeenCalled(); + }); +}); diff --git a/apps/web/src/lib/atproto/server/repo.remote.ts b/apps/web/src/lib/atproto/repo.remote.ts similarity index 78% rename from apps/web/src/lib/atproto/server/repo.remote.ts rename to apps/web/src/lib/atproto/repo.remote.ts index b798306..5cca6e5 100644 --- a/apps/web/src/lib/atproto/server/repo.remote.ts +++ b/apps/web/src/lib/atproto/repo.remote.ts @@ -1,7 +1,17 @@ import { error } from '@sveltejs/kit'; import { command, getRequestEvent } from '$app/server'; import * as v from 'valibot'; -import { allowedCollections } from '../settings'; +import { allowedCollections } from './settings'; +import { getAuth } from './server/oauth'; + +async function assertWritePermission(collection: string, action: 'create' | 'update' | 'delete') { + if ( + collection === 'app.bsky.feed.post' && + !(await getAuth().api.can({ type: 'repo', collection, action })) + ) { + error(403, 'Bluesky posting permission is required'); + } +} // Validate collection format and check against allowed list from settings const collectionSchema = v.pipe( @@ -26,6 +36,7 @@ export const putRecord = command( const { locals } = getRequestEvent(); if (!locals.client || !locals.did) error(401, 'Not authenticated'); + await assertWritePermission(input.collection, 'update'); const response = await locals.client.post('com.atproto.repo.putRecord', { input: { collection: input.collection as `${string}.${string}.${string}`, @@ -35,6 +46,7 @@ export const putRecord = command( } }); + if (!response.ok) error(response.status, 'Saving record failed'); return response.data; } ); @@ -49,6 +61,7 @@ export const createRecord = command( const { locals } = getRequestEvent(); if (!locals.client || !locals.did) error(401, 'Not authenticated'); + await assertWritePermission(input.collection, 'create'); const response = await locals.client.post('com.atproto.repo.createRecord', { input: { collection: input.collection as `${string}.${string}.${string}`, @@ -58,6 +71,7 @@ export const createRecord = command( } }); + if (!response.ok) error(response.status, 'Creating record failed'); return response.data; } ); @@ -71,6 +85,7 @@ export const deleteRecord = command( const { locals } = getRequestEvent(); if (!locals.client || !locals.did) error(401, 'Not authenticated'); + await assertWritePermission(input.collection, 'delete'); const response = await locals.client.post('com.atproto.repo.deleteRecord', { input: { collection: input.collection as `${string}.${string}.${string}`, @@ -79,7 +94,8 @@ export const deleteRecord = command( } }); - return { ok: response.ok }; + if (!response.ok) error(response.status, 'Deleting record failed'); + return { ok: true }; } ); diff --git a/apps/web/src/lib/atproto/scripts/generate-key.ts b/apps/web/src/lib/atproto/scripts/generate-key.ts deleted file mode 100644 index 3d1cc8a..0000000 --- a/apps/web/src/lib/atproto/scripts/generate-key.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { generateClientAssertionKey } from '@atcute/oauth-node-client'; - -const key = await generateClientAssertionKey('main-key'); -console.log(JSON.stringify(key)); diff --git a/apps/web/src/lib/atproto/scripts/generate-secret.ts b/apps/web/src/lib/atproto/scripts/generate-secret.ts deleted file mode 100644 index 9092066..0000000 --- a/apps/web/src/lib/atproto/scripts/generate-secret.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { randomBytes } from 'node:crypto'; - -console.log(randomBytes(32).toString('base64url')); diff --git a/apps/web/src/lib/atproto/scripts/setup-dev.ts b/apps/web/src/lib/atproto/scripts/setup-dev.ts deleted file mode 100644 index bdc8ccf..0000000 --- a/apps/web/src/lib/atproto/scripts/setup-dev.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { existsSync } from 'node:fs'; -import { copyFile, readFile, writeFile } from 'node:fs/promises'; -import { resolve } from 'node:path'; -import { randomBytes, randomInt } from 'node:crypto'; - -import { generateClientAssertionKey } from '@atcute/oauth-node-client'; - -const cwd = process.cwd(); -const examplePath = resolve(cwd, '.env.example'); -const envPath = resolve(cwd, '.env'); - -if (!existsSync(envPath)) { - if (!existsSync(examplePath)) { - throw new Error(`missing .env.example (expected at ${examplePath})`); - } - await copyFile(examplePath, envPath); - console.log(`created ${envPath}`); -} - -const upsertVar = (input: string, key: string, value: string): string => { - const line = `${key}=${value}`; - const re = new RegExp(`^${key}=.*$`, 'm'); - - if (re.test(input)) { - const match = input.match(re); - const current = match ? match[0].slice(key.length + 1).trim() : ''; - // Only overwrite if empty/placeholder - if (current === '' || current === "''" || current === '""' || current.includes('...')) { - return input.replace(re, line); - } - return input; - } - - const suffix = input.endsWith('\n') || input.length === 0 ? '' : '\n'; - return `${input}${suffix}${line}\n`; -}; - -let vars = await readFile(envPath, 'utf8'); - -const secret = randomBytes(32).toString('base64url'); -vars = upsertVar(vars, 'COOKIE_SECRET', secret); - -const jwk = await generateClientAssertionKey('main-key'); -vars = upsertVar(vars, 'CLIENT_ASSERTION_KEY', JSON.stringify(jwk)); - -await writeFile(envPath, vars); -console.log(`updated ${envPath}`); - -// Generate a random dev port (5200–7200) so multiple projects can run simultaneously -const portPath = resolve(cwd, 'src/lib/atproto/port.ts'); -const portFile = await readFile(portPath, 'utf8'); -const currentPort = portFile.match(/DEV_PORT\s*=\s*(\d+)/); -if (currentPort && parseInt(currentPort[1]) === 5183) { - const port = randomInt(5200, 7201); - const updated = portFile.replace(/DEV_PORT\s*=\s*\d+/, `DEV_PORT = ${port}`); - await writeFile(portPath, updated); - console.log(`set DEV_PORT to ${port} in port.ts`); -} else { - console.log(`DEV_PORT already customized (${currentPort?.[1]}), skipping`); -} diff --git a/apps/web/src/lib/atproto/scripts/tunnel.ts b/apps/web/src/lib/atproto/scripts/tunnel.ts deleted file mode 100644 index 9c37d5f..0000000 --- a/apps/web/src/lib/atproto/scripts/tunnel.ts +++ /dev/null @@ -1,195 +0,0 @@ -import { readFileSync, writeFileSync } from 'node:fs'; -import { resolve } from 'node:path'; -import { spawn } from 'node:child_process'; -import { DEV_PORT } from '../port'; - -const cwd = process.cwd(); -const envPath = resolve(cwd, '.env'); -const vitePath = resolve(cwd, 'vite.config.ts'); - -let tunnelUrl: string | null = null; -let statusBarActive = false; - -// ── ANSI status bar ────────────────────────────────────────────── -// Reserves the bottom row of the terminal for a persistent status line. -// Logs scroll in the region above it. - -function getColumns(): number { - return process.stdout.columns || 80; -} - -function getRows(): number { - return process.stdout.rows || 24; -} - -function setupScrollRegion(): void { - if (!process.stdout.isTTY) return; - statusBarActive = true; - const rows = getRows(); - // Set scroll region to all rows except the last - process.stdout.write(`\x1b[1;${rows - 1}r`); - // Move cursor into scroll region - process.stdout.write(`\x1b[${rows - 1};1H`); -} - -function drawStatusBar(text: string): void { - if (!process.stdout.isTTY) { - process.stdout.write(text + '\n'); - return; - } - const rows = getRows(); - const cols = getColumns(); - // Save cursor, move to bottom row, clear it, write status, restore cursor - process.stdout.write('\x1b7'); - process.stdout.write(`\x1b[${rows};1H`); - process.stdout.write('\x1b[2K'); - // Inverse video for the bar - process.stdout.write(`\x1b[7m ${text.padEnd(cols - 1)}\x1b[0m`); - process.stdout.write('\x1b8'); -} - -function clearStatusBar(): void { - if (!process.stdout.isTTY || !statusBarActive) return; - const rows = getRows(); - // Reset scroll region to full terminal - process.stdout.write(`\x1b[1;${rows}r`); - // Clear the bottom row - process.stdout.write(`\x1b[${rows};1H\x1b[2K`); - // Move cursor up - process.stdout.write(`\x1b[${rows - 1};1H`); - statusBarActive = false; -} - -function writeLog(text: string): void { - if (statusBarActive && process.stdout.isTTY) { - // Write inside the scroll region, which auto-scrolls above the bar - process.stdout.write(text); - } else { - process.stdout.write(text); - } -} - -// Redraw on terminal resize -process.stdout.on('resize', () => { - if (!statusBarActive || !tunnelUrl) return; - setupScrollRegion(); - drawStatusBar(`Tunnel: ${tunnelUrl} | Ctrl+C to stop`); -}); - -// ── .env helpers ───────────────────────────────────────────────── - -function readEnv(): string { - return readFileSync(envPath, 'utf8'); -} - -function writeEnv(content: string): void { - writeFileSync(envPath, content); -} - -function setEnvVar(key: string, value: string): void { - let env = readEnv(); - const re = new RegExp(`^(#\\s*)?${key}=.*$`, 'm'); - const line = `${key}=${value}`; - - if (re.test(env)) { - env = env.replace(re, line); - } else { - env = env.trimEnd() + '\n' + line + '\n'; - } - writeEnv(env); -} - -function clearEnvVar(key: string): void { - let env = readEnv(); - const re = new RegExp(`^${key}=.*$`, 'm'); - - if (re.test(env)) { - env = env.replace(re, `# ${key}=`); - writeEnv(env); - } -} - -// ── vite config helpers ────────────────────────────────────────── - -function setViteAllowedHosts(hostname: string): void { - let vite = readFileSync(vitePath, 'utf8'); - - if (/allowedHosts\s*:/.test(vite)) { - vite = vite.replace(/allowedHosts\s*:\s*\[.*?\]/s, `allowedHosts: ['${hostname}']`); - } else if (/server\s*:\s*\{/.test(vite)) { - vite = vite.replace(/server\s*:\s*\{/, `server: {\n\t\tallowedHosts: ['${hostname}'],`); - } - - writeFileSync(vitePath, vite); -} - -function clearViteAllowedHosts(): void { - let vite = readFileSync(vitePath, 'utf8'); - - if (/allowedHosts\s*:/.test(vite)) { - vite = vite.replace(/allowedHosts\s*:\s*\[.*?\]/s, 'allowedHosts: []'); - } - - writeFileSync(vitePath, vite); -} - -// ── cleanup ────────────────────────────────────────────────────── - -function cleanup(): void { - clearStatusBar(); - console.log('\nCleaning up...'); - if (tunnelUrl) { - clearEnvVar('OAUTH_PUBLIC_URL'); - console.log(' Cleared OAUTH_PUBLIC_URL from .env'); - clearViteAllowedHosts(); - console.log(' Cleared allowedHosts from vite.config.ts'); - } -} - -// ── main ───────────────────────────────────────────────────────── - -const child = spawn('cloudflared', ['tunnel', '--url', `http://localhost:${DEV_PORT}`], { - stdio: ['ignore', 'pipe', 'pipe'] -}); - -child.stderr.on('data', (data: Buffer) => { - const output = data.toString(); - - if (!tunnelUrl) { - const match = output.match(/https:\/\/[a-z0-9-]+\.trycloudflare\.com/); - if (match) { - tunnelUrl = match[0]; - const hostname = new URL(tunnelUrl).hostname; - - setEnvVar('OAUTH_PUBLIC_URL', tunnelUrl); - setViteAllowedHosts(hostname); - - writeLog(`\n Set OAUTH_PUBLIC_URL=${tunnelUrl}\n`); - writeLog(` Set vite allowedHosts to [${hostname}]\n`); - writeLog(` Tunnel is ready! Restart your dev server to pick up the new URL.\n\n`); - - setupScrollRegion(); - drawStatusBar(`Tunnel: ${tunnelUrl} | Ctrl+C to stop`); - return; - } - } - - writeLog(output); -}); - -child.stdout.on('data', (data: Buffer) => { - writeLog(data.toString()); -}); - -child.on('close', (code) => { - cleanup(); - process.exit(code ?? 0); -}); - -process.on('SIGINT', () => { - child.kill('SIGINT'); -}); - -process.on('SIGTERM', () => { - child.kill('SIGTERM'); -}); diff --git a/apps/web/src/lib/atproto/server/kv-store.ts b/apps/web/src/lib/atproto/server/kv-store.ts deleted file mode 100644 index 35c3dcb..0000000 --- a/apps/web/src/lib/atproto/server/kv-store.ts +++ /dev/null @@ -1,38 +0,0 @@ -import type { Store } from '@atcute/oauth-node-client'; - -export class KVStore implements Store { - private kv: KVNamespace; - private expirationTtl?: number; - - constructor(kv: KVNamespace, options?: { expirationTtl?: number }) { - this.kv = kv; - this.expirationTtl = options?.expirationTtl; - } - - async get(key: K): Promise { - const value = await this.kv.get(key, 'text'); - if (value === null) return undefined; - return JSON.parse(value) as V; - } - - async set(key: K, value: V): Promise { - await this.kv.put(key, JSON.stringify(value), { - expirationTtl: this.expirationTtl - }); - } - - async delete(key: K): Promise { - await this.kv.delete(key); - } - - async clear(): Promise { - let cursor: string | undefined; - do { - const result = await this.kv.list({ cursor }); - for (const key of result.keys) { - await this.kv.delete(key.name); - } - cursor = result.list_complete ? undefined : result.cursor; - } while (cursor); - } -} diff --git a/apps/web/src/lib/atproto/server/oauth.remote.ts b/apps/web/src/lib/atproto/server/oauth.remote.ts deleted file mode 100644 index f087d53..0000000 --- a/apps/web/src/lib/atproto/server/oauth.remote.ts +++ /dev/null @@ -1,56 +0,0 @@ -import * as v from 'valibot'; -import { error } from '@sveltejs/kit'; -import { command, getRequestEvent } from '$app/server'; -import { createOAuthClient } from './oauth'; -import { getSignedCookie } from './signed-cookie'; -import { scopes, signUpPDS } from '../settings'; -import type { ActorIdentifier, Did } from '@atcute/lexicons'; - -export const oauthLogin = command( - v.object({ - handle: v.optional(v.pipe(v.string(), v.minLength(3))), - signup: v.optional(v.boolean()) - }), - async (input) => { - const { platform } = getRequestEvent(); - - try { - const oauth = createOAuthClient(platform?.env); - - const target = input.signup - ? ({ type: 'pds', serviceUrl: signUpPDS } as const) - : ({ type: 'account', identifier: input.handle as ActorIdentifier } as const); - - const { url } = await oauth.authorize({ - target, - scope: scopes.join(' '), - prompt: input.signup ? 'create' : undefined - }); - - return { url: url.toString() }; - } catch (e) { - if (e && typeof e === 'object' && 'status' in e) throw e; // re-throw SvelteKit errors - const message = e instanceof Error ? e.message : 'Login failed'; - error(400, message); - } - } -); - -export const oauthLogout = command(async () => { - const { cookies, platform } = getRequestEvent(); - const did = getSignedCookie(cookies, 'did') as Did | null; - - if (did) { - try { - const oauth = createOAuthClient(platform?.env); - await oauth.revoke(did); - } catch (e) { - console.error('Error revoking session:', e); - } - } - - cookies.delete('did', { path: '/' }); - cookies.delete('scope', { path: '/' }); - - return { ok: true }; -}); diff --git a/apps/web/src/lib/atproto/server/oauth.test.ts b/apps/web/src/lib/atproto/server/oauth.test.ts new file mode 100644 index 0000000..49a8d2e --- /dev/null +++ b/apps/web/src/lib/atproto/server/oauth.test.ts @@ -0,0 +1,104 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import type { AtprotoAuthConfig } from '@svelte-atproto/oauth/server'; +import { scopes, signUpPDS } from '../settings'; +import { dev } from '$app/env'; +import { oauthRequestLock } from './oauth'; + +const mocks = vi.hoisted(() => ({ + create: vi.fn((_config: AtprotoAuthConfig) => ({ api: {}, handlers: {}, handle: () => {} })) +})); +vi.mock('@svelte-atproto/oauth/server', () => ({ createAtprotoAuth: mocks.create })); +beforeEach(() => { + vi.resetModules(); + vi.clearAllMocks(); +}); + +describe('OAuth library configuration', () => { + it('preserves origin, signing credentials, signup, port, and declared metadata scopes', async () => { + const { env } = await import('cloudflare:workers'); + Object.assign(env, { + OAUTH_PUBLIC_URL: 'https://atmo.example', + COOKIE_SECRET: 'secret', + CLIENT_ASSERTION_KEY: 'private-key' + }); + const { getAuth } = await import('./oauth'); + expect(getAuth()).toBe(getAuth()); + expect(mocks.create).toHaveBeenCalledOnce(); + expect(mocks.create).toHaveBeenCalledWith( + expect.objectContaining({ + origin: 'https://atmo.example', + cookieSecret: 'secret', + clientAssertionKey: 'private-key', + scope: scopes, + signupPDS: signUpPDS[dev ? 'development' : 'production'], + devPort: 5454, + redirectPath: '/oauth/callback' + }) + ); + }); + it('uses direct Worker bindings and retains state TTL and session keys', async () => { + const sessions = { put: vi.fn(), get: vi.fn(), delete: vi.fn(), list: vi.fn() }; + const states = { ...sessions, put: vi.fn() }; + const { env } = await import('cloudflare:workers'); + Object.assign(env, { OAUTH_SESSIONS: sessions, OAUTH_STATES: states }); + const { getAuth } = await import('./oauth'); + getAuth(); + const config = mocks.create.mock.calls[0][0] as AtprotoAuthConfig; + const sessionStore = ( + config.sessions as () => { set(key: string, value: unknown): Promise } + )(); + const stateStore = ( + config.states as () => { set(key: string, value: unknown): Promise } + )(); + await sessionStore.set('did:plc:alice', { token: 'test' }); + await stateStore.set('state', { requestedScope: ['atproto'] }); + expect(sessions.put).toHaveBeenCalledWith('did:plc:alice', '{"token":"test"}', { + expirationTtl: undefined + }); + expect(states.put).toHaveBeenCalledWith('state', '{"requestedScope":["atproto"]}', { + expirationTtl: 600 + }); + }); + it('lets the library fall back to memory when local KV bindings are absent', async () => { + const { getAuth } = await import('./oauth'); + getAuth(); + const config = mocks.create.mock.calls[0][0] as AtprotoAuthConfig; + expect((config.sessions as () => unknown)()).toBeUndefined(); + expect((config.states as () => unknown)()).toBeUndefined(); + }); +}); + +describe('shared OAuth refresh lock', () => { + it('serializes interactive and background operations on the same session', async () => { + const gate = Promise.withResolvers(); + const order: string[] = []; + const first = oauthRequestLock('same-session', async () => { + order.push('first:start'); + await gate.promise; + order.push('first:end'); + }); + const second = oauthRequestLock('same-session', async () => { + order.push('second'); + }); + await Promise.resolve(); + expect(order).toEqual(['first:start']); + gate.resolve(); + await Promise.all([first, second]); + expect(order).toEqual(['first:start', 'first:end', 'second']); + }); + it('does not leave a session locked after a failed operation', async () => { + await expect( + oauthRequestLock('failed-session', async () => { + throw new Error('failure'); + }) + ).rejects.toThrow('failure'); + expect(await oauthRequestLock('failed-session', async () => 'next')).toBe('next'); + }); + it('does not block unrelated sessions', async () => { + const gate = Promise.withResolvers(); + const first = oauthRequestLock('one-session', async () => gate.promise); + expect(await oauthRequestLock('another-session', async () => 'ready')).toBe('ready'); + gate.resolve(); + await first; + }); +}); diff --git a/apps/web/src/lib/atproto/server/oauth.ts b/apps/web/src/lib/atproto/server/oauth.ts index 5255316..af06573 100644 --- a/apps/web/src/lib/atproto/server/oauth.ts +++ b/apps/web/src/lib/atproto/server/oauth.ts @@ -1,99 +1,55 @@ +import { env } from 'cloudflare:workers'; +import { dev } from '$app/env'; import { - OAuthClient, - MemoryStore, - type ClientAssertionPrivateJwk, - type OAuthClientStores, - type OAuthSession, - type StoredSession, - type StoredState -} from '@atcute/oauth-node-client'; -import type { Did } from '@atcute/lexicons'; + createAtprotoAuth, + type AtprotoAuth, + type RequestLock +} from '@svelte-atproto/oauth/server'; +import { cloudflareKV } from '@svelte-atproto/oauth/server/stores/cloudflare'; import { - CompositeDidDocumentResolver, - CompositeHandleResolver, - DohJsonHandleResolver, - LocalActorResolver, - PlcDidDocumentResolver, - WebDidDocumentResolver, - WellKnownHandleResolver -} from '@atcute/identity-resolver'; -import { KVStore } from './kv-store'; -import { DOH_RESOLVER, REDIRECT_PATH, scopes } from '../settings'; -import { DEV_PORT } from '../port'; -import { dev } from '$app/environment'; - -function createActorResolver() { - return new LocalActorResolver({ - handleResolver: new CompositeHandleResolver({ - methods: { - dns: new DohJsonHandleResolver({ dohUrl: DOH_RESOLVER }), - http: new WellKnownHandleResolver() - } - }), - didDocumentResolver: new CompositeDidDocumentResolver({ - methods: { - plc: new PlcDidDocumentResolver(), - web: new WebDidDocumentResolver() - } - }) - }); -} - -function createStores(env?: App.Platform['env']): OAuthClientStores { - if (env?.OAUTH_SESSIONS && env?.OAUTH_STATES) { - return { - sessions: new KVStore(env.OAUTH_SESSIONS), - states: new KVStore(env.OAUTH_STATES, { expirationTtl: 600 }) - }; - } - // Fallback to in-memory stores (dev without wrangler) - return { - sessions: new MemoryStore(), - states: new MemoryStore({ ttl: 600_000 }) - }; -} - -let cachedClient: OAuthClient | null = null; - -export function createOAuthClient(env?: App.Platform['env']): OAuthClient { - if (cachedClient) return cachedClient; - - const actorResolver = createActorResolver(); - const stores = createStores(env); - - if (dev && !env?.OAUTH_PUBLIC_URL) { - cachedClient = new OAuthClient({ - metadata: { - redirect_uris: [`http://127.0.0.1:${DEV_PORT}${REDIRECT_PATH}`], - scope: scopes - }, - actorResolver, - stores - }); - return cachedClient; - } - - if (!env?.OAUTH_PUBLIC_URL) { - throw new Error('OAUTH_PUBLIC_URL is not set'); + ALLOW_SIGNUP, + DEV_PORT, + DOH_RESOLVER, + REDIRECT_PATH, + scopes, + signUpPDS +} from '../settings'; +const pending = new Map>(); + +/** Serialize interactive and bot refreshes in this process, as the library's + * default lock does. This is not a distributed lock across Workers. */ +export const oauthRequestLock: RequestLock = async (name, operation) => { + const previous = pending.get(name); + const current = (async () => { + if (previous) await previous.catch(() => {}); + return operation(); + })(); + pending.set(name, current); + try { + return await current; + } finally { + if (pending.get(name) === current) pending.delete(name); } - if (!env.CLIENT_ASSERTION_KEY) { - throw new Error('CLIENT_ASSERTION_KEY secret is not set. Run: pnpm env:generate-key'); - } - const site = env.OAUTH_PUBLIC_URL; - const key: ClientAssertionPrivateJwk = JSON.parse(env.CLIENT_ASSERTION_KEY); - - cachedClient = new OAuthClient({ - metadata: { - client_id: site + '/oauth-client-metadata.json', - redirect_uris: [site + REDIRECT_PATH], - scope: scopes, - jwks_uri: site + '/oauth/jwks.json' - }, - keyset: [key], - actorResolver, - stores - }); - return cachedClient; +}; + +let auth: AtprotoAuth | undefined; + +/** Construct lazily: Worker bindings are unavailable during prerender/build. */ +export function getAuth(): AtprotoAuth { + return (auth ??= createAtprotoAuth({ + origin: env.OAUTH_PUBLIC_URL, + cookieSecret: env.COOKIE_SECRET, + clientAssertionKey: env.CLIENT_ASSERTION_KEY, + scope: scopes, + signupPDS: ALLOW_SIGNUP ? signUpPDS[dev ? 'development' : 'production'] : undefined, + redirectPath: REDIRECT_PATH, + devPort: DEV_PORT, + doh: DOH_RESOLVER, + requestLock: oauthRequestLock, + // Pass bindings directly: the library's name-based adapter still reads + // event.platform, which was removed in SvelteKit 3. Preserve KV keys and + // the 10-minute state TTL; missing local bindings fall back to memory. + sessions: () => (env.OAUTH_SESSIONS ? cloudflareKV(env.OAUTH_SESSIONS) : undefined), + states: () => (env.OAUTH_STATES ? cloudflareKV(env.OAUTH_STATES, { ttl: 600 }) : undefined) + })); } - -export type { OAuthSession }; diff --git a/apps/web/src/lib/atproto/server/profile.ts b/apps/web/src/lib/atproto/server/profile.ts index d81bd53..2a83f86 100644 --- a/apps/web/src/lib/atproto/server/profile.ts +++ b/apps/web/src/lib/atproto/server/profile.ts @@ -1,6 +1,6 @@ import type { Did } from '@atcute/lexicons'; -import { getProfileFromContrail, getProfileBlobUrl } from '$lib/contrail'; -import { getServerClient } from '$lib/contrail/index'; +import { getProfileFromContrail, getProfileBlobUrl } from '#lib/contrail.js'; +import { getServerClient } from '#lib/contrail/index.js'; export async function loadProfile(did: Did, db: D1Database) { try { diff --git a/apps/web/src/lib/atproto/server/session.ts b/apps/web/src/lib/atproto/server/session.ts deleted file mode 100644 index 2c1fe8f..0000000 --- a/apps/web/src/lib/atproto/server/session.ts +++ /dev/null @@ -1,73 +0,0 @@ -import type { Cookies } from '@sveltejs/kit'; -import { Client } from '@atcute/client'; -import type { Did } from '@atcute/lexicons'; -import { - type OAuthSession, - TokenInvalidError, - TokenRefreshError, - TokenRevokedError, - AuthMethodUnsatisfiableError -} from '@atcute/oauth-node-client'; -import { createOAuthClient } from './oauth'; -import { getSignedCookie } from './signed-cookie'; -import { scopes } from '../settings'; - -export type SessionLocals = { - session: OAuthSession | null; - client: Client | null; - did: Did | null; -}; - -/** - * Restores an OAuth session from the signed `did` cookie. - * Returns session locals to be assigned to `event.locals`. - * Deletes the cookie only if the session is genuinely unrecoverable. - * Transient failures (network, KV) preserve the cookie for retry. - */ -export async function restoreSession( - cookies: Cookies, - env?: App.Platform['env'] -): Promise { - const did = getSignedCookie(cookies, 'did') as Did | null; - - if (!did) { - return { session: null, client: null, did: null }; - } - - // If permissions changed since login, invalidate the session - const savedScope = getSignedCookie(cookies, 'scope'); - if (savedScope !== null && savedScope !== scopes.join(' ')) { - cookies.delete('did', { path: '/' }); - cookies.delete('scope', { path: '/' }); - return { session: null, client: null, did: null }; - } - - try { - const oauth = createOAuthClient(env); - const session = await oauth.restore(did); - - return { - session, - client: new Client({ handler: session }), - did - }; - } catch (e) { - console.error('Failed to restore session:', e); - - // Only delete cookies when the session is genuinely unrecoverable. - // Transient errors (network issues, KV hiccups) should preserve the - // cookie so the next request can retry without forcing a full re-login. - const isSessionGone = - e instanceof TokenInvalidError || - e instanceof TokenRevokedError || - e instanceof TokenRefreshError || - e instanceof AuthMethodUnsatisfiableError; - - if (isSessionGone) { - cookies.delete('did', { path: '/' }); - cookies.delete('scope', { path: '/' }); - } - - return { session: null, client: null, did: null }; - } -} diff --git a/apps/web/src/lib/atproto/server/signed-cookie.ts b/apps/web/src/lib/atproto/server/signed-cookie.ts deleted file mode 100644 index 6cde19c..0000000 --- a/apps/web/src/lib/atproto/server/signed-cookie.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { createHmac, timingSafeEqual } from 'node:crypto'; - -import type { Cookies } from '@sveltejs/kit'; - -import { env } from '$env/dynamic/private'; -import { dev } from '$app/environment'; - -const SEPARATOR = '.'; - -function getSecret(): string { - const secret = env.COOKIE_SECRET; - if (secret) return secret; - if (dev) return 'dev-cookie-secret-not-for-production'; - throw new Error('COOKIE_SECRET is not set'); -} - -function toBase64Url(bytes: Uint8Array): string { - let binary = ''; - for (const byte of bytes) binary += String.fromCharCode(byte); - return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); -} - -function fromBase64Url(str: string): Uint8Array { - const padded = str + '='.repeat((4 - (str.length % 4)) % 4); - const base64 = padded.replace(/-/g, '+').replace(/_/g, '/'); - const binary = atob(base64); - const bytes = new Uint8Array(binary.length); - for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i); - return bytes; -} - -function hmacSha256(data: string): Uint8Array { - return createHmac('sha256', getSecret()).update(data).digest(); -} - -export function getSignedCookie(cookies: Cookies, name: string): string | null { - const signed = cookies.get(name); - if (!signed) return null; - - const idx = signed.lastIndexOf(SEPARATOR); - if (idx === -1) return null; - - const value = signed.slice(0, idx); - const sig = signed.slice(idx + 1); - - let expected: Uint8Array; - let got: Uint8Array; - try { - expected = hmacSha256(value); - got = fromBase64Url(sig); - } catch { - return null; - } - - if (got.length !== expected.length || !timingSafeEqual(got, expected)) return null; - - return value; -} - -export function setSignedCookie( - cookies: Cookies, - name: string, - value: string, - options: Parameters[2] -): void { - const sig = toBase64Url(hmacSha256(value)); - const signed = `${value}${SEPARATOR}${sig}`; - cookies.set(name, signed, options); -} diff --git a/apps/web/src/lib/atproto/settings.test.ts b/apps/web/src/lib/atproto/settings.test.ts index 75b8701..952965f 100644 --- a/apps/web/src/lib/atproto/settings.test.ts +++ b/apps/web/src/lib/atproto/settings.test.ts @@ -1,6 +1,4 @@ -import { describe, expect, it, vi } from 'vitest'; - -vi.mock('$app/environment', () => ({ dev: false })); +import { describe, expect, it } from 'vitest'; import { allowedCollections, collections, scopes } from './settings'; diff --git a/apps/web/src/lib/atproto/settings.ts b/apps/web/src/lib/atproto/settings.ts index 7a760d4..cc50565 100644 --- a/apps/web/src/lib/atproto/settings.ts +++ b/apps/web/src/lib/atproto/settings.ts @@ -1,5 +1,5 @@ -import { dev } from '$app/environment'; -import { scope } from '@atcute/oauth-node-client'; +// Pure configuration, shared with Vite (no SvelteKit/runtime imports). +export const DEV_PORT = 5454; // Writable calendar collections for the server-side record allowlist. // OAuth access is granted by community.lexicon.calendar.authFull below. @@ -15,21 +15,27 @@ export type AllowedCollection = (typeof allowedCollections)[number]; // Request only the permissions needed for publishing. // Event RPCs are public; the old rsvp.atmo.permissionSet include also grants // obsolete private Spaces methods and must not be requested. -export const scopes = [ +export const requiredScopes = [ 'atproto', // No audience: we need the repo grants, not the set's inherited RPC grants. 'include:community.lexicon.calendar.authFull', - scope.blob({ accept: ['image/*'] }), - 'include:app.bsky.authCreatePosts' + 'blob?accept=image/*' ]; +export const blueskyPostingScope = 'include:app.bsky.authCreatePosts'; + +// Metadata declares all supported permissions. Each login explicitly requests +// only requiredScopes plus the optional permissions selected by the user. +export const scopes = [...requiredScopes, blueskyPostingScope]; + // set to false to disable signup export const ALLOW_SIGNUP = true; // which PDS to use for signup (change to your preferred PDS) -const devPDS = 'https://pds.rip/'; -const prodPDS = 'https://selfhosted.social/'; -export const signUpPDS = dev ? devPDS : prodPDS; +export const signUpPDS = { + development: 'https://pds.rip/', + production: 'https://selfhosted.social/' +}; // where to redirect after oauth login/signup export const REDIRECT_PATH = '/oauth/callback'; diff --git a/apps/web/src/lib/bot/oauth.test.ts b/apps/web/src/lib/bot/oauth.test.ts new file mode 100644 index 0000000..65d75cf --- /dev/null +++ b/apps/web/src/lib/bot/oauth.test.ts @@ -0,0 +1,48 @@ +import { describe, expect, it, vi } from 'vitest'; +import type { StoredSession, Store } from '@atcute/oauth-node-client'; +import type { Did } from '@atcute/lexicons'; +import type { SessionWithHistory } from '@svelte-atproto/oauth/server'; +import { backgroundSessions } from './oauth'; + +const did = 'did:plc:alice' as Did; +function store(previous: SessionWithHistory | undefined) { + return { + get: vi.fn(async () => previous), + set: vi.fn(), + delete: vi.fn(), + clear: vi.fn() + } satisfies Store; +} + +describe('reply bot OAuth compatibility', () => { + it('retains requested scopes and login generation when rotating tokens', async () => { + const history = { + version: 1 as const, + requestedScope: ['atproto', 'include:community.lexicon.calendar.authFull'] + }; + const backing = store({ + svelteAtproto: history, + svelteAtprotoSessionId: 'generation' + } as SessionWithHistory); + const refreshed = { tokenSet: { access_token: 'new-token' } } as unknown as StoredSession; + await backgroundSessions(backing).set(did, refreshed); + expect(backing.set).toHaveBeenCalledExactlyOnceWith(did, { + ...refreshed, + svelteAtproto: history, + svelteAtprotoSessionId: 'generation' + }); + }); + it('does not invent scope history for an old session', async () => { + const backing = store(undefined); + const refreshed = {} as StoredSession; + await backgroundSessions(backing).set(did, refreshed); + expect(backing.set).toHaveBeenCalledExactlyOnceWith(did, refreshed); + }); + it('still saves a rotated token if the advisory-history read fails', async () => { + const backing = store(undefined); + backing.get.mockRejectedValue(new Error('KV read unavailable')); + const refreshed = {} as StoredSession; + await backgroundSessions(backing).set(did, refreshed); + expect(backing.set).toHaveBeenCalledExactlyOnceWith(did, refreshed); + }); +}); diff --git a/apps/web/src/lib/bot/oauth.ts b/apps/web/src/lib/bot/oauth.ts new file mode 100644 index 0000000..8a939aa --- /dev/null +++ b/apps/web/src/lib/bot/oauth.ts @@ -0,0 +1,77 @@ +import { env } from 'cloudflare:workers'; +import { getRequestEvent } from '$app/server'; +import { + OAuthClient, + type ClientAssertionPrivateJwk, + type OAuthClientMetadata, + type ConfidentialClientMetadata, + type PublicClientMetadata, + type Store, + type StoredSession, + type StoredState +} from '@atcute/oauth-node-client'; +import type { Did } from '@atcute/lexicons'; +import { createActorResolver } from '@svelte-atproto/oauth/network'; +import { cloudflareKV } from '@svelte-atproto/oauth/server/stores/cloudflare'; +import type { SessionWithHistory } from '@svelte-atproto/oauth/server'; +import { getAuth, oauthRequestLock } from '#lib/atproto/server/oauth.js'; +import { DEV_PORT, DOH_RESOLVER, REDIRECT_PATH } from '#lib/atproto/settings.js'; + +/** Preserve the library's request history and login generation on bot refreshes. */ +export function backgroundSessions(store: Store): Store { + return { + get: (did) => store.get(did), + delete: (did) => store.delete(did), + clear: () => store.clear(), + async set(did, session) { + let previous: SessionWithHistory | undefined; + try { + previous = await store.get(did); + } catch { + // A refresh has already spent its old token; save the new one even + // if a transient read failure prevents preserving advisory history. + } + await store.set(did, { + ...session, + ...(previous?.svelteAtproto ? { svelteAtproto: previous.svelteAtproto } : {}), + ...(previous?.svelteAtprotoSessionId + ? { svelteAtprotoSessionId: previous.svelteAtprotoSessionId } + : {}) + } as SessionWithHistory); + } + }; +} + +let client: OAuthClient | undefined; + +/** The library API restores only the current browser's session. The reply bot + * needs another user's stored grant during cron; use the SDK solely for that + * operation, with the library's metadata, storage format, and shared lock. */ +export async function restoreRsvpSession(did: Did) { + if (!client) { + const response = await getAuth().handlers.metadata(getRequestEvent()); + if (!response.ok) throw new Error('OAuth client metadata unavailable'); + const metadata = (await response.json()) as OAuthClientMetadata; + const prefix = env.OAUTH_PUBLIC_URL + ? `${env.OAUTH_PUBLIC_URL}/oauth-client-metadata.json` + : `loopback:${DEV_PORT}${REDIRECT_PATH}`; + const common = { + actorResolver: createActorResolver({ doh: DOH_RESOLVER }), + stores: { + sessions: backgroundSessions(cloudflareKV(env.OAUTH_SESSIONS)), + states: cloudflareKV(env.OAUTH_STATES, { ttl: 600 }) + }, + requestLock: (name: string, operation: () => Promise) => + oauthRequestLock(`${prefix}:${name}`, operation) + }; + client = + metadata.token_endpoint_auth_method === 'private_key_jwt' + ? new OAuthClient({ + ...common, + metadata: metadata as ConfidentialClientMetadata, + keyset: [JSON.parse(env.CLIENT_ASSERTION_KEY) as ClientAssertionPrivateJwk] + }) + : new OAuthClient({ ...common, metadata: metadata as PublicClientMetadata }); + } + return client.restore(did); +} diff --git a/apps/web/src/lib/bot/process-mentions.test.ts b/apps/web/src/lib/bot/process-mentions.test.ts index 285798a..da1a1f4 100644 --- a/apps/web/src/lib/bot/process-mentions.test.ts +++ b/apps/web/src/lib/bot/process-mentions.test.ts @@ -11,7 +11,7 @@ const mocks = vi.hoisted(() => ({ replyToPost: vi.fn(), recordOutcome: vi.fn() })); -vi.mock('$lib/contrail/index', () => ({ getServerClient: mocks.getServerClient })); +vi.mock('#lib/contrail/index.js', () => ({ getServerClient: mocks.getServerClient })); vi.mock('./session', () => ({ getBotHandle: mocks.getBotHandle })); vi.mock('./resolve-event', () => ({ findEventLink: mocks.findEventLink, @@ -68,7 +68,7 @@ describe('reply bot RSVP requests', () => { externalOnly, externalRsvpUrl: 'https://example.com/event' }); - await processBotMentions({} as App.Platform['env'], {} as D1Database); + await processBotMentions({} as Cloudflare.Env, {} as D1Database); expect(mocks.rsvpOnBehalf).not.toHaveBeenCalled(); expect(mocks.likePost).not.toHaveBeenCalled(); expect(mocks.replyToPost).toHaveBeenCalledWith( @@ -96,7 +96,7 @@ describe('reply bot RSVP requests', () => { externalOnly: false, externalRsvpUrl: null }); - await processBotMentions({} as App.Platform['env'], {} as D1Database); + await processBotMentions({} as Cloudflare.Env, {} as D1Database); expect(mocks.rsvpOnBehalf).toHaveBeenCalledOnce(); expect(mocks.likePost).toHaveBeenCalledOnce(); expect(mocks.replyToPost).not.toHaveBeenCalled(); diff --git a/apps/web/src/lib/bot/process-mentions.ts b/apps/web/src/lib/bot/process-mentions.ts index fc660f2..15d57c4 100644 --- a/apps/web/src/lib/bot/process-mentions.ts +++ b/apps/web/src/lib/bot/process-mentions.ts @@ -1,5 +1,5 @@ import type { Did } from '@atcute/lexicons'; -import { getServerClient } from '$lib/contrail/index'; +import { getServerClient } from '#lib/contrail/index.js'; import { MAX_MENTIONS_PER_RUN, NOTIF_LIMIT, REPLIES } from './config'; import { getBotHandle, type BotHandle } from './session'; import { @@ -27,7 +27,7 @@ type Mention = { * their post, or reply with a hint. Wrapped per-mention so one failure can't * stall the batch; unrecorded failures are retried on the next tick. */ -export async function processBotMentions(env: App.Platform['env'], db: D1Database): Promise { +export async function processBotMentions(env: Cloudflare.Env, db: D1Database): Promise { const bot = await getBotHandle(env); if (!bot) return; @@ -67,7 +67,7 @@ export async function processBotMentions(env: App.Platform['env'], db: D1Databas } async function handleMention( - env: App.Platform['env'], + env: Cloudflare.Env, db: D1Database, bot: BotHandle, mention: Mention diff --git a/apps/web/src/lib/bot/resolve-event.test.ts b/apps/web/src/lib/bot/resolve-event.test.ts index a449cee..c6bae48 100644 --- a/apps/web/src/lib/bot/resolve-event.test.ts +++ b/apps/web/src/lib/bot/resolve-event.test.ts @@ -5,8 +5,8 @@ const { getEventRecordFromContrail, getPDS } = vi.hoisted(() => ({ getEventRecordFromContrail: vi.fn(), getPDS: vi.fn(async () => 'https://pds.example') })); -vi.mock('$lib/contrail', () => ({ getEventRecordFromContrail })); -vi.mock('$lib/atproto/methods', () => ({ getPDS })); +vi.mock('#lib/contrail.js', () => ({ getEventRecordFromContrail })); +vi.mock('@svelte-atproto/oauth/helper', () => ({ getPDS })); import { loadEvent } from './resolve-event'; afterEach(() => { diff --git a/apps/web/src/lib/bot/resolve-event.ts b/apps/web/src/lib/bot/resolve-event.ts index 57cf11d..7a55113 100644 --- a/apps/web/src/lib/bot/resolve-event.ts +++ b/apps/web/src/lib/bot/resolve-event.ts @@ -1,8 +1,8 @@ import type { Client } from '@atcute/client'; import type { Did } from '@atcute/lexicons'; import type { Handle, ResourceUri } from '@atcute/lexicons/syntax'; -import { getEventRecordFromContrail } from '$lib/contrail'; -import { getPDS } from '$lib/atproto/methods'; +import { getEventRecordFromContrail } from '#lib/contrail.js'; +import { getPDS } from '@svelte-atproto/oauth/helper'; import { ATMO_HOSTS, EVENT_COLLECTION } from './config'; /** The fields of a Bluesky post record we care about for link extraction. */ diff --git a/apps/web/src/lib/bot/rsvp.ts b/apps/web/src/lib/bot/rsvp.ts index a14636c..513968c 100644 --- a/apps/web/src/lib/bot/rsvp.ts +++ b/apps/web/src/lib/bot/rsvp.ts @@ -7,8 +7,8 @@ import { TokenRevokedError, AuthMethodUnsatisfiableError } from '@atcute/oauth-node-client'; -import { createOAuthClient } from '$lib/atproto/server/oauth'; -import { getRsvpStatus, getViewerRsvpFromContrail } from '$lib/contrail'; +import { restoreRsvpSession } from './oauth'; +import { getRsvpStatus, getViewerRsvpFromContrail } from '#lib/contrail.js'; import { RSVP_COLLECTION, RSVP_GOING_STATUS } from './config'; import type { ResolvedEvent } from './resolve-event'; @@ -37,7 +37,7 @@ function isSessionGone(e: unknown): boolean { * interested/notgoing we flip the existing record to going. */ export async function rsvpOnBehalf( - env: App.Platform['env'], + env: Cloudflare.Env, serverClient: Client, userDid: Did, event: ResolvedEvent @@ -47,7 +47,7 @@ export async function rsvpOnBehalf( let session; try { - session = await createOAuthClient(env).restore(userDid); + session = await restoreRsvpSession(userDid); } catch (e) { if (isSessionGone(e)) return 'no-token'; console.error('[bot] session restore failed (transient):', e); diff --git a/apps/web/src/lib/bot/session.test.ts b/apps/web/src/lib/bot/session.test.ts new file mode 100644 index 0000000..8133fe2 --- /dev/null +++ b/apps/web/src/lib/bot/session.test.ts @@ -0,0 +1,61 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +const mocks = vi.hoisted(() => ({ login: vi.fn() })); +vi.mock('@atcute/password-session', () => ({ PasswordSession: { login: mocks.login } })); +import { getBotHandle } from './session'; +import { DEFAULT_BOT_PDS } from './config'; + +beforeEach(() => { + vi.resetAllMocks(); +}); + +describe('reply bot password-session migration', () => { + it('does not attempt login when the bot is unconfigured', async () => { + const warn = vi.spyOn(console, 'warn').mockImplementation(() => {}); + expect(await getBotHandle({} as Cloudflare.Env)).toBeNull(); + expect(mocks.login).not.toHaveBeenCalled(); + warn.mockRestore(); + }); + it('resumes legacy credentials under the same KV key, supplying the newly required service', async () => { + const saved = { + did: 'did:plc:bot', + accessJwt: 'old', + refreshJwt: 'refresh', + handle: 'bot.test' + }; + const kv = { get: vi.fn(async () => JSON.stringify(saved)), put: vi.fn() }; + const manager = { + did: saved.did, + session: { ...saved, service: DEFAULT_BOT_PDS }, + handle: vi.fn() + }; + mocks.login.mockResolvedValue(manager); + const bot = await getBotHandle({ + BOT_IDENTIFIER: 'bot.test', + BOT_APP_PASSWORD: 'password', + OAUTH_SESSIONS: kv + } as unknown as Cloudflare.Env); + expect(mocks.login).toHaveBeenCalledExactlyOnceWith( + { service: DEFAULT_BOT_PDS, identifier: 'bot.test', password: 'password' }, + { session: { ...saved, service: DEFAULT_BOT_PDS } } + ); + expect(kv.get).toHaveBeenCalledWith('bot:session:bot.test', 'text'); + expect(bot?.did).toBe(saved.did); + manager.session.accessJwt = 'rotated'; + await bot?.flush(); + expect(kv.put).toHaveBeenLastCalledWith( + 'bot:session:bot.test', + JSON.stringify(manager.session) + ); + }); + it('can log in afresh if the old KV value is malformed', async () => { + const kv = { get: vi.fn(async () => 'not-json'), put: vi.fn() }; + mocks.login.mockResolvedValue({ did: 'did:plc:bot', session: {}, handle: vi.fn() }); + await getBotHandle({ + BOT_IDENTIFIER: 'bot.test', + BOT_APP_PASSWORD: 'password', + OAUTH_SESSIONS: kv + } as unknown as Cloudflare.Env); + expect(mocks.login).toHaveBeenCalledWith(expect.anything(), { session: undefined }); + }); +}); diff --git a/apps/web/src/lib/bot/session.ts b/apps/web/src/lib/bot/session.ts index dc15061..a664df1 100644 --- a/apps/web/src/lib/bot/session.ts +++ b/apps/web/src/lib/bot/session.ts @@ -1,29 +1,19 @@ -import { Client, CredentialManager, type AtpSessionData } from '@atcute/client'; +import { Client } from '@atcute/client'; +import { PasswordSession, type PasswordSessionData } from '@atcute/password-session'; import type { Did } from '@atcute/lexicons'; import { DEFAULT_BOT_PDS } from './config'; -/** - * Authenticated handle for the bot account. `client` makes API calls; - * `flush()` persists the (possibly refreshed) session back to KV — call it once - * at the end of a run so rotated tokens survive to the next tick. - */ +/** Authenticated reply bot; flush rotated credentials after each run. */ export type BotHandle = { client: Client; did: Did; flush: () => Promise; }; -/** KV key for the bot's persisted credential session (namespaced away from DIDs). */ const sessionKey = (identifier: string) => `bot:session:${identifier}`; -/** - * Log the bot in (or resume a persisted session) using an app password. - * - * Reuses the OAUTH_SESSIONS KV namespace for storage. Returns `null` when the - * bot isn't configured (no identifier/password) so the cron can no-op cleanly - * in dev or before the secret is set. - */ -export async function getBotHandle(env: App.Platform['env']): Promise { +/** Reuse the existing bot session without changing its KV key or account. */ +export async function getBotHandle(env: Cloudflare.Env): Promise { const identifier = env.BOT_IDENTIFIER; const password = env.BOT_APP_PASSWORD; if (!identifier || !password) { @@ -33,39 +23,27 @@ export async function getBotHandle(env: App.Platform['env']): Promise saveSession(kv, key, manager.session) }; } -async function loadSession(kv: KVNamespace, key: string): Promise { +async function loadSession(kv: KVNamespace, key: string): Promise { const raw = await kv.get(key, 'text'); if (!raw) return undefined; try { - return JSON.parse(raw) as AtpSessionData; + return JSON.parse(raw) as PasswordSessionData; } catch { return undefined; } @@ -74,8 +52,7 @@ async function loadSession(kv: KVNamespace, key: string): Promise { - if (!session) return; await kv.put(key, JSON.stringify(session)); } diff --git a/apps/web/src/lib/cal/ical.ts b/apps/web/src/lib/cal/ical.ts index e291002..140de6e 100644 --- a/apps/web/src/lib/cal/ical.ts +++ b/apps/web/src/lib/cal/ical.ts @@ -1,4 +1,4 @@ -import type { EventData } from '$lib/event-types'; +import type { EventData } from '#lib/event-types.js'; /** * Escape text for iCal fields (RFC 5545 Section 3.3.11). @@ -172,9 +172,7 @@ function generateVEvent(event: ICalEvent): string | null { if (organizer) { const organizerUrl = toAbsoluteUrl(`/${organizer}`, url) ?? url; - lines.push( - `ORGANIZER;CN=${escapeText(organizer)}:${organizerUrl}` - ); + lines.push(`ORGANIZER;CN=${escapeText(organizer)}:${organizerUrl}`); } // Attendees @@ -185,9 +183,7 @@ function generateVEvent(event: ICalEvent): string | null { if (!attendeeUrl) continue; - lines.push( - `ATTENDEE;CN=${escapeText(attendee.name)};PARTSTAT=${partstat}:${attendeeUrl}` - ); + lines.push(`ATTENDEE;CN=${escapeText(attendee.name)};PARTSTAT=${partstat}:${attendeeUrl}`); } } diff --git a/apps/web/src/lib/cal/sanitize.ts b/apps/web/src/lib/cal/sanitize.ts index 8ae1ffa..63f2340 100644 --- a/apps/web/src/lib/cal/sanitize.ts +++ b/apps/web/src/lib/cal/sanitize.ts @@ -1,4 +1,4 @@ -import { browser } from '$app/environment'; +import { browser } from '$app/env'; // Lightweight regex-based sanitizer for SSR in Cloudflare Workers // where DOMPurify is not available. Strips common XSS vectors. diff --git a/apps/web/src/lib/components/CreateEventModal.svelte b/apps/web/src/lib/components/CreateEventModal.svelte index 5dd1e3b..2b0ba5e 100644 --- a/apps/web/src/lib/components/CreateEventModal.svelte +++ b/apps/web/src/lib/components/CreateEventModal.svelte @@ -43,7 +43,7 @@ import { ArrowLeft, ArrowRight, CalendarPlus, Link } from '@sketchyicons/svelte'; import { goto } from '$app/navigation'; import { resolve } from '$app/paths'; - import type { EventImportPrefill } from '$lib/import-event'; + import type { EventImportPrefill } from '#lib/import-event.js'; type Step = 'choose' | 'import'; let step: Step = $state('choose'); @@ -65,7 +65,7 @@ function openCreate() { createEventModalState.hide(); reset(); - goto(resolve('/create')); + goto(resolve('create')); } async function openImport() { @@ -118,7 +118,7 @@ window.sessionStorage.setItem(IMPORT_STORAGE_KEY, JSON.stringify(pending)); createEventModalState.hide(); reset(); - await goto(resolve('/create')); + await goto(resolve('create')); } catch (err) { console.error('import-event request failed:', err); importError = 'Could not reach the import service.'; diff --git a/apps/web/src/lib/components/EventList.svelte b/apps/web/src/lib/components/EventList.svelte index c34a601..c5438ec 100644 --- a/apps/web/src/lib/components/EventList.svelte +++ b/apps/web/src/lib/components/EventList.svelte @@ -1,11 +1,11 @@ @@ -21,12 +24,18 @@ bind:open={atProtoLoginModalState.open} {searchActors} persistRecentAccounts - login={async (handle) => { - await login(handle); + permissions={loginPermissions} + login={async (handle, _actor, options) => { + await login(handle, options); return true; }} - signup={async () => { - signup(); - return true; + signup={() => { + atProtoLoginModalState.hide(); + signupOpen = true; + return false; }} /> + +{#if signupOpen} + +{/if} diff --git a/apps/web/src/lib/components/RecentActivity.svelte b/apps/web/src/lib/components/RecentActivity.svelte index cba08da..82fb380 100644 --- a/apps/web/src/lib/components/RecentActivity.svelte +++ b/apps/web/src/lib/components/RecentActivity.svelte @@ -1,7 +1,7 @@ + + +
+ {#each loginPermissions as permission (permission.id)} +
+ + (choices = { ...choices, [permission.id]: event.currentTarget.checked })} + class="mt-0.5" + /> +
+ +

{permission.description}

+
+
+ {/each} + {#if error}{/if} + +
+
diff --git a/apps/web/src/lib/components/UserProfile.svelte b/apps/web/src/lib/components/UserProfile.svelte index 41880b6..fcb5d5e 100644 --- a/apps/web/src/lib/components/UserProfile.svelte +++ b/apps/web/src/lib/components/UserProfile.svelte @@ -1,6 +1,6 @@ diff --git a/apps/web/src/routes/(app)/events/now/+page.server.ts b/apps/web/src/routes/(app)/events/now/+page.server.ts index b587aae..6e6ef11 100644 --- a/apps/web/src/routes/(app)/events/now/+page.server.ts +++ b/apps/web/src/routes/(app)/events/now/+page.server.ts @@ -1,12 +1,13 @@ -import { getServerClient } from '$lib/contrail/index'; -import { happeningNowMeiliQuery, happeningNowQuery } from '$lib/contrail/queries'; -import { rawForQuery } from '$lib/contrail/cursor'; -import { searchBackendFromEnv } from '$lib/search/server/query'; -import { getTopicBySlug } from '$lib/topics'; +import { env } from 'cloudflare:workers'; +import { getServerClient } from '#lib/contrail/index.js'; +import { happeningNowMeiliQuery, happeningNowQuery } from '#lib/contrail/queries.js'; +import { rawForQuery } from '#lib/contrail/cursor.js'; +import { searchBackendFromEnv } from '#lib/search/server/query.js'; +import { getTopicBySlug } from '#lib/topics.js'; import type { PageServerLoad } from './$types'; -export const load: PageServerLoad = async ({ url, platform }) => { - const client = getServerClient(platform!.env.DB); +export const load: PageServerLoad = async ({ url }) => { + const client = getServerClient(env.DB); // SCOPE, so a "See all N" offered beside a scoped band lands on the same N. // Unscoped (from home / /events) this is the whole live list, as before. @@ -29,8 +30,8 @@ export const load: PageServerLoad = async ({ url, platform }) => { // such choice — its search is re-derived from the slug on both sides, so both // stay on D1. Page 1 may fall back to D1; a continuation may not. const page = - term && searchBackendFromEnv(platform?.env) - ? ((await happeningNowMeiliQuery(platform?.env, client, { term }, cursor).catch((err) => { + term && searchBackendFromEnv(env) + ? ((await happeningNowMeiliQuery(env, client, { term }, cursor).catch((err) => { console.error('happening-now search backend failed, falling back to D1:', err); return null; })) ?? (await happeningNowQuery(client, cursor, { search: term }))) diff --git a/apps/web/src/routes/(app)/events/now/+page.svelte b/apps/web/src/routes/(app)/events/now/+page.svelte index dc3fc3b..b5e34fd 100644 --- a/apps/web/src/routes/(app)/events/now/+page.svelte +++ b/apps/web/src/routes/(app)/events/now/+page.svelte @@ -1,5 +1,5 @@ - + diff --git a/apps/web/src/routes/(app)/p/[actor]/e/[rkey]/data.json/+server.ts b/apps/web/src/routes/(app)/p/[actor]/e/[rkey]/data.json/+server.ts index 29bdf6f..98004bf 100644 --- a/apps/web/src/routes/(app)/p/[actor]/e/[rkey]/data.json/+server.ts +++ b/apps/web/src/routes/(app)/p/[actor]/e/[rkey]/data.json/+server.ts @@ -1,10 +1,11 @@ +import { env } from 'cloudflare:workers'; import { json, error } from '@sveltejs/kit'; -import { getActor } from '$lib/actor'; -import { getEventRecordFromContrail } from '$lib/contrail'; -import { getServerClient } from '$lib/contrail/index'; +import { getActor } from '#lib/actor.js'; +import { getEventRecordFromContrail } from '#lib/contrail.js'; +import { getServerClient } from '#lib/contrail/index.js'; -export async function GET({ params, platform }) { - const client = getServerClient(platform!.env.DB); +export async function GET({ params }) { + const client = getServerClient(env.DB); const did = await getActor(params.actor); if (!did || !params.rkey) { diff --git a/apps/web/src/routes/(app)/p/[actor]/e/[rkey]/edit/+page.server.ts b/apps/web/src/routes/(app)/p/[actor]/e/[rkey]/edit/+page.server.ts index 6956fa9..548eba1 100644 --- a/apps/web/src/routes/(app)/p/[actor]/e/[rkey]/edit/+page.server.ts +++ b/apps/web/src/routes/(app)/p/[actor]/e/[rkey]/edit/+page.server.ts @@ -1,10 +1,11 @@ +import { env } from 'cloudflare:workers'; import { error } from '@sveltejs/kit'; -import { getActor } from '$lib/actor'; -import { flattenEventRecord, getEventRecordFromContrail } from '$lib/contrail'; -import { getServerClient } from '$lib/contrail/index'; +import { getActor } from '#lib/actor.js'; +import { flattenEventRecord, getEventRecordFromContrail } from '#lib/contrail.js'; +import { getServerClient } from '#lib/contrail/index.js'; -export async function load({ params, platform }) { - const client = getServerClient(platform!.env.DB); +export async function load({ params }) { + const client = getServerClient(env.DB); const { rkey } = params; const did = await getActor(params.actor); diff --git a/apps/web/src/routes/(app)/p/[actor]/e/[rkey]/edit/+page.svelte b/apps/web/src/routes/(app)/p/[actor]/e/[rkey]/edit/+page.svelte index 7c464c3..54107ff 100644 --- a/apps/web/src/routes/(app)/p/[actor]/e/[rkey]/edit/+page.svelte +++ b/apps/web/src/routes/(app)/p/[actor]/e/[rkey]/edit/+page.svelte @@ -1,12 +1,13 @@ diff --git a/apps/web/src/routes/(app)/topics/[slug]/+page.server.ts b/apps/web/src/routes/(app)/topics/[slug]/+page.server.ts index a1d3104..c30b005 100644 --- a/apps/web/src/routes/(app)/topics/[slug]/+page.server.ts +++ b/apps/web/src/routes/(app)/topics/[slug]/+page.server.ts @@ -1,20 +1,21 @@ +import { env } from 'cloudflare:workers'; import { error, redirect } from '@sveltejs/kit'; import { resolve } from '$app/paths'; -import { getTopicBySlug, orQueryFromSlug } from '$lib/topics'; -import { getServerClient } from '$lib/contrail/index'; -import { topicQuery } from '$lib/contrail/queries'; -import { ongoingQuery, withOngoing } from '$lib/contrail/ongoing'; -import { rawForQuery } from '$lib/contrail/cursor'; +import { getTopicBySlug, orQueryFromSlug } from '#lib/topics.js'; +import { getServerClient } from '#lib/contrail/index.js'; +import { topicQuery } from '#lib/contrail/queries.js'; +import { ongoingQuery, withOngoing } from '#lib/contrail/ongoing.js'; +import { rawForQuery } from '#lib/contrail/cursor.js'; import type { PageServerLoad } from './$types'; -export const load: PageServerLoad = async ({ params, url, platform }) => { +export const load: PageServerLoad = async ({ params, url }) => { const topic = getTopicBySlug(params.slug); if (!topic) error(404, 'Topic not found'); if (topic.slug !== params.slug) { redirect(308, resolve('/(app)/topics/[slug]', { slug: topic.slug })); } - const client = getServerClient(platform!.env.DB); + const client = getServerClient(env.DB); // Deep-link ?cursor= resumes only a 'topic' cursor for this slug; else fresh page 1. const cursor = rawForQuery(url.searchParams.get('cursor'), 'topic', { slug: params.slug }); diff --git a/apps/web/src/routes/(app)/topics/[slug]/+page.svelte b/apps/web/src/routes/(app)/topics/[slug]/+page.svelte index 220f301..5c7db88 100644 --- a/apps/web/src/routes/(app)/topics/[slug]/+page.svelte +++ b/apps/web/src/routes/(app)/topics/[slug]/+page.svelte @@ -1,6 +1,6 @@ 0) postRecord.facets = facets; + // The grant may have changed while resolving facets or uploading a thumb. + if (viewer.canPostToBluesky !== true) return; const postResp = await adapter.createRecord({ collection: 'app.bsky.feed.post', record: postRecord @@ -231,7 +233,12 @@ diff --git a/packages/ui/src/ShareModal.svelte b/packages/ui/src/ShareModal.svelte index ad1fde2..11636c7 100644 --- a/packages/ui/src/ShareModal.svelte +++ b/packages/ui/src/ShareModal.svelte @@ -58,14 +58,24 @@ let blueskyButton = $state(null); - let canPostDirectly = $derived(!!eventDid && !!eventRkey && !!eventName && viewer.isLoggedIn); + let canPostDirectly = $derived( + !!eventDid && + !!eventRkey && + !!eventName && + viewer.isLoggedIn && + viewer.canPostToBluesky === true + ); + + $effect(() => { + if (!canPostDirectly) showPostModal = false; + }); let blueskyIntentUrl = $derived( `https://bsky.app/intent/compose?text=${encodeURIComponent(shareText || url)}` ); function handleBlueskyClick() { - showPostModal = true; + if (canPostDirectly) showPostModal = true; } function handlePostedFromInner(ref: { uri: string; cid: string; showComments: boolean }) { diff --git a/packages/ui/src/editor/adapter.ts b/packages/ui/src/editor/adapter.ts index 040decc..9af3f06 100644 --- a/packages/ui/src/editor/adapter.ts +++ b/packages/ui/src/editor/adapter.ts @@ -16,6 +16,8 @@ export type EditorBlobRef = { export type EditorViewer = { isLoggedIn: boolean; + /** Explicit capability from the host's token grant; absent means denied. */ + canPostToBluesky?: boolean; did: string | null; handle?: string; displayName?: string; diff --git a/packages/ui/src/event-view/plyr-icons.ts b/packages/ui/src/event-view/plyr-icons.ts index a8f00c2..0836b10 100644 --- a/packages/ui/src/event-view/plyr-icons.ts +++ b/packages/ui/src/event-view/plyr-icons.ts @@ -9,7 +9,7 @@ import { Volume2, VolumeX } from '@sketchyicons/svelte'; -import type { Options } from 'plyr'; +import type Plyr from 'plyr'; const prefix = 'atmo-sketchy-plyr'; const icons = { @@ -25,7 +25,7 @@ const icons = { }; /** Called in the browser before constructing either video player. */ -export function sketchyPlyrIcons(): Pick { +export function sketchyPlyrIcons(): Pick { // One local sprite serves every player, without fetching Plyr's stock CDN icons. if (!document.getElementById(prefix)) { const ns = 'http://www.w3.org/2000/svg'; diff --git a/packages/ui/svelte.config.js b/packages/ui/svelte.config.js index b3058f3..558a395 100644 --- a/packages/ui/svelte.config.js +++ b/packages/ui/svelte.config.js @@ -1,6 +1,6 @@ import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; -/** @type {import('@sveltejs/kit').Config} */ +// Preprocessing for svelte-package and the standalone Svelte Vite plugin. const config = { preprocess: vitePreprocess() }; diff --git a/packages/ui/tests/fixtures.ts b/packages/ui/tests/fixtures.ts index b2f8d3b..cb83c7b 100644 --- a/packages/ui/tests/fixtures.ts +++ b/packages/ui/tests/fixtures.ts @@ -3,6 +3,7 @@ import type { EditorAdapter, EditorViewer } from '../src/editor/adapter.js'; import type { FlatEventRecord } from '../src/contrail.js'; export const viewer: EditorViewer = { isLoggedIn: true, + canPostToBluesky: true, did: 'did:plc:abcdefghijklmnopqrstuvwx', handle: 'host.example.com', displayName: 'Test Host' diff --git a/packages/ui/tests/migration.svelte.spec.ts b/packages/ui/tests/migration.svelte.spec.ts index 76720f6..2b25dd3 100644 --- a/packages/ui/tests/migration.svelte.spec.ts +++ b/packages/ui/tests/migration.svelte.spec.ts @@ -129,7 +129,7 @@ describe('Atmo Kit migration', () => { }); await expect .element(page.getByRole('combobox', { name: 'Post text' })) - .toHaveTextContent('Join @host.example.com'); + .toHaveTextContent('Join @host.example.com for #smallweb https://example.com'); await page.getByRole('button', { name: 'Post', exact: true }).click(); await expect.poll(() => adapter.createRecord).toHaveBeenCalled(); expect(adapter.createRecord).toHaveBeenCalledWith( diff --git a/packages/ui/tests/share-permissions.svelte.spec.ts b/packages/ui/tests/share-permissions.svelte.spec.ts new file mode 100644 index 0000000..ece7f35 --- /dev/null +++ b/packages/ui/tests/share-permissions.svelte.spec.ts @@ -0,0 +1,82 @@ +import { page } from 'vitest/browser'; +import { describe, expect, it } from 'vitest'; +import { render } from 'vitest-browser-svelte'; +import ShareModal from '../src/ShareModal.svelte'; +import PostToBlueskyModal from '../src/PostToBlueskyModal.svelte'; +import { createAdapter, event, viewer } from './fixtures.js'; +import './theme.css'; + +const url = 'https://atmo.rsvp/p/host.example.com/e/test-event'; +const props = { + open: true, + url, + eventDid: event.did, + eventRkey: event.rkey, + eventName: event.name, + shareText: `Join us! ${url}` +}; + +describe('Bluesky cross-post permission', () => { + it.each([false, undefined])( + 'offers manual sharing, not direct posting, for permission %s', + async (canPostToBluesky) => { + const adapter = createAdapter(); + render(ShareModal, { ...props, adapter, viewer: { ...viewer, canPostToBluesky } }); + await expect + .element(page.getByRole('button', { name: 'Share to Bluesky' })) + .not.toBeInTheDocument(); + await expect + .element(page.getByRole('link', { name: 'Share to Bluesky' })) + .toHaveAttribute( + 'href', + `https://bsky.app/intent/compose?text=${encodeURIComponent(props.shareText)}` + ); + expect(adapter.createRecord).not.toHaveBeenCalled(); + } + ); + + it('shows direct posting only for an authenticated, permitted viewer', async () => { + render(ShareModal, { ...props, adapter: createAdapter(), viewer }); + await page.getByRole('button', { name: 'Share to Bluesky' }).click(); + await expect.element(page.getByRole('button', { name: 'Post', exact: true })).toBeVisible(); + }); + + it('closes a previously opened composer when permission is removed', async () => { + const adapter = createAdapter(); + const { rerender } = await render(ShareModal, { ...props, adapter, viewer }); + await page.getByRole('button', { name: 'Share to Bluesky' }).click(); + await expect.element(page.getByRole('button', { name: 'Post', exact: true })).toBeVisible(); + await rerender({ viewer: { ...viewer, canPostToBluesky: false } }); + await expect + .element(page.getByRole('button', { name: 'Post', exact: true })) + .not.toBeInTheDocument(); + expect(adapter.createRecord).not.toHaveBeenCalled(); + }); + + it('does not trust a capability without an authenticated session', async () => { + render(ShareModal, { + ...props, + adapter: createAdapter(), + viewer: { ...viewer, isLoggedIn: false } + }); + await expect + .element(page.getByRole('button', { name: 'Share to Bluesky' })) + .not.toBeInTheDocument(); + }); + + it('also disables posting if the inner composer is mounted directly without permission', async () => { + const adapter = createAdapter(); + render(PostToBlueskyModal, { + open: true, + eventDid: event.did, + eventRkey: event.rkey, + eventName: event.name, + eventUrl: url, + initialText: 'Join us!', + adapter, + viewer: { ...viewer, canPostToBluesky: false } + }); + await expect.element(page.getByRole('button', { name: 'Post', exact: true })).toBeDisabled(); + expect(adapter.createRecord).not.toHaveBeenCalled(); + }); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b13d50d..d2123fa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,147 +13,150 @@ importers: .: devDependencies: '@changesets/cli': - specifier: ^2.31.0 - version: 2.31.0(@types/node@22.20.0) + specifier: ^3.0.3 + version: 3.0.3 prettier: - specifier: ^3.8.1 - version: 3.8.1 + specifier: ^3.9.10 + version: 3.9.10 prettier-plugin-svelte: - specifier: ^3.5.1 - version: 3.5.1(prettier@3.8.1)(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + specifier: ^4.1.1 + version: 4.1.1(prettier@3.9.10)(svelte@5.57.3(@typescript-eslint/types@8.72.1)) prettier-plugin-tailwindcss: - specifier: ^0.7.2 - version: 0.7.2(prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.57.3(@typescript-eslint/types@8.57.2)))(prettier@3.8.1) + specifier: ^0.8.1 + version: 0.8.1(prettier-plugin-svelte@4.1.1(prettier@3.9.10)(svelte@5.57.3(@typescript-eslint/types@8.72.1)))(prettier@3.9.10) apps/web: dependencies: '@atcute/bluesky-richtext-parser': - specifier: ^2.1.1 - version: 2.1.1 + specifier: ^2.1.2 + version: 2.1.2 '@atcute/jetstream': - specifier: ^1.1.2 - version: 1.1.2 + specifier: ^2.2.0 + version: 2.2.0(@atcute/cid@2.4.1)(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/password-session': + specifier: ^1.0.2 + version: 1.0.2(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2) '@atmo-dev/contrail': specifier: ^0.12.2 - version: 0.12.2(wrangler@4.77.0(@cloudflare/workers-types@4.20260317.1)) + version: 0.12.2(wrangler@4.153.0(@cloudflare/workers-types@5.20261026.1)(@types/node@24.19.2)) '@atmo-dev/events-ui': specifier: workspace:* version: link:../../packages/ui '@atmo-dev/kit': specifier: 0.0.2 - version: 0.0.2(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(@tiptap/extensions@3.32.0(@tiptap/core@3.32.0(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0)(@tiptap/suggestion@3.32.0(@floating-ui/dom@1.8.0)(@tiptap/core@3.32.0(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(tailwindcss@4.2.2) - '@fontsource-variable/caveat': - specifier: ^5.3.0 - version: 5.3.0 + version: 0.0.2(@internationalized/date@3.12.4)(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(@tiptap/extensions@3.32.0(@tiptap/core@3.32.0(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0)(@tiptap/suggestion@3.32.0(@floating-ui/dom@1.8.0)(@tiptap/core@3.32.0(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(tailwindcss@4.3.3) '@internationalized/date': - specifier: ^3.12.0 - version: 3.12.0 + specifier: ^3.12.4 + version: 3.12.4 '@number-flow/svelte': - specifier: ^0.4.0 - version: 0.4.0(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + specifier: ^0.4.2 + version: 0.4.2(svelte@5.57.3(@typescript-eslint/types@8.72.1)) '@sketchyicons/svelte': specifier: ^0.5.0 - version: 0.5.0(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + version: 0.5.0(svelte@5.57.3(@typescript-eslint/types@8.72.1)) + '@svelte-atproto/oauth': + specifier: ^0.4.1 + version: 0.4.1(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2) '@tailwindcss/typography': - specifier: ^0.5.19 - version: 0.5.19(tailwindcss@4.2.2) + specifier: ^0.5.20 + version: 0.5.20(tailwindcss@4.3.3) '@takumi-rs/helpers': - specifier: 2.16.3 - version: 2.16.3 + specifier: 2.18.2 + version: 2.18.2 '@takumi-rs/wasm': - specifier: 2.16.3 - version: 2.16.3 + specifier: 2.18.2 + version: 2.18.2 d3-geo: specifier: ^3.1.1 version: 3.1.1 dompurify: - specifier: ^3.3.3 - version: 3.3.3 + specifier: ^3.4.17 + version: 3.4.17 h3-js: - specifier: ^4.2.1 - version: 4.4.0 + specifier: ^4.5.0 + version: 4.5.0 hls.js: - specifier: ^1.6.15 - version: 1.6.15 + specifier: ^1.7.3 + version: 1.7.3 maplibre-gl: - specifier: ^5.21.1 - version: 5.21.1 + specifier: ^6.16.0 + version: 6.16.0 marked: - specifier: ^17.0.5 - version: 17.0.5 + specifier: ^18.1.2 + version: 18.1.2 mode-watcher: specifier: ^1.1.0 - version: 1.1.0(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + version: 1.1.0(svelte@5.57.3(@typescript-eslint/types@8.72.1)) plyr: - specifier: ^3.8.4 - version: 3.8.4 + specifier: ^3.8.5 + version: 3.8.5 svelte-boring-avatars: specifier: ^1.2.6 version: 1.2.6 svelte-maplibre-gl: - specifier: ^1.0.3 - version: 1.0.3(maplibre-gl@5.21.1)(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + specifier: ^2.2.1 + version: 2.2.1(maplibre-gl@6.16.0)(svelte@5.57.3(@typescript-eslint/types@8.72.1)) valibot: - specifier: ^1.3.1 - version: 1.3.1(typescript@6.0.2) + specifier: ^1.5.0 + version: 1.5.0(typescript@6.0.2) yaml: - specifier: ^2.8.1 - version: 2.9.0 + specifier: ^2.9.1 + version: 2.9.1 devDependencies: '@atcute/atproto': - specifier: ^3.1.10 - version: 3.1.10 + specifier: ^4.0.4 + version: 4.0.4(@atcute/lexicons@2.1.1) '@atcute/bluesky': - specifier: ^3.3.0 - version: 3.3.0 + specifier: ^4.0.25 + version: 4.0.25(@atcute/lexicons@2.1.1) '@atcute/client': - specifier: ^4.2.1 - version: 4.2.1 + specifier: ^5.1.2 + version: 5.1.2(@atcute/lexicons@2.1.1)(typescript@6.0.2) '@atcute/identity-resolver': - specifier: ^1.2.2 - version: 1.2.2(@atcute/identity@1.1.4) + specifier: ^2.0.3 + version: 2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2) '@atcute/lex-cli': - specifier: ^2.5.3 - version: 2.5.3 + specifier: ^3.3.0 + version: 3.3.0(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)(prettier@3.9.10)(typescript@6.0.2) '@atcute/lexicons': - specifier: ^1.2.9 - version: 1.2.9 + specifier: ^2.1.1 + version: 2.1.1 '@atcute/oauth-node-client': - specifier: ^1.1.0 - version: 1.1.0 + specifier: ^2.0.1 + version: 2.0.1(@atcute/identity-resolver@2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2) '@atcute/tid': - specifier: ^1.1.2 - version: 1.1.2 + specifier: ^1.1.4 + version: 1.1.4 '@atmo-dev/contrail-appview': specifier: 0.12.2 version: 0.12.2(patch_hash=6f9c80a051e9e07c3668edd12c912190196f26394e6ec22f8326a1b5acc2d8f9) '@atmo-dev/contrail-lexicons': - specifier: ^0.4.4 - version: 0.4.4(wrangler@4.77.0(@cloudflare/workers-types@4.20260317.1)) + specifier: ^0.4.15 + version: 0.4.15(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)(wrangler@4.153.0(@cloudflare/workers-types@5.20261026.1)(@types/node@24.19.2)) '@cloudflare/workers-types': - specifier: ^4.20260317.1 - version: 4.20260317.1 + specifier: ^5.20261026.1 + version: 5.20261026.1 '@eslint/compat': - specifier: ^2.0.3 - version: 2.0.3(eslint@10.1.0(jiti@2.6.1)) + specifier: ^2.1.1 + version: 2.1.1(eslint@10.13.0(jiti@2.7.0)) '@eslint/js': specifier: ^10.0.1 - version: 10.0.1(eslint@10.1.0(jiti@2.6.1)) + version: 10.0.1(eslint@10.13.0(jiti@2.7.0)) '@sveltejs/adapter-cloudflare': - specifier: ^7.2.8 - version: 7.2.8(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(wrangler@4.77.0(@cloudflare/workers-types@4.20260317.1)) + specifier: ^8.0.1 + version: 8.0.1(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(wrangler@4.153.0(@cloudflare/workers-types@5.20261026.1)(@types/node@24.19.2)) '@sveltejs/kit': - specifier: ^2.55.0 - version: 2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) + specifier: ^3.1.0 + version: 3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) '@sveltejs/vite-plugin-svelte': - specifier: ^7.0.0 - version: 7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) + specifier: ^7.3.1 + version: 7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) '@tailwindcss/forms': specifier: ^0.5.11 - version: 0.5.11(tailwindcss@4.2.2) + version: 0.5.11(tailwindcss@4.3.3) '@tailwindcss/vite': - specifier: ^4.2.2 - version: 4.2.2(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) + specifier: ^4.3.3 + version: 4.3.3(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) '@types/d3-geo': specifier: ^3.1.1 version: 3.1.1 @@ -161,254 +164,365 @@ importers: specifier: ^7946.0.16 version: 7946.0.16 '@types/node': - specifier: ^22.20.0 - version: 22.20.0 + specifier: ^24.19.2 + version: 24.19.2 bits-ui: - specifier: ^2.16.3 - version: 2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + specifier: ^2.20.2 + version: 2.20.2(@internationalized/date@3.12.4)(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1)) eslint: - specifier: ^10.1.0 - version: 10.1.0(jiti@2.6.1) + specifier: ^10.13.0 + version: 10.13.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.1.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.13.0(jiti@2.7.0)) eslint-plugin-svelte: - specifier: ^3.16.0 - version: 3.16.0(eslint@10.1.0(jiti@2.6.1))(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + specifier: ^3.23.1 + version: 3.23.1(eslint@10.13.0(jiti@2.7.0))(svelte@5.57.3(@typescript-eslint/types@8.72.1)) globals: - specifier: ^17.4.0 - version: 17.4.0 + specifier: ^17.13.0 + version: 17.13.0 sharp: - specifier: ^0.34.5 - version: 0.34.5 + specifier: ^0.35.5 + version: 0.35.5(@types/node@24.19.2) svelte: specifier: ^5.57.3 - version: 5.57.3(@typescript-eslint/types@8.57.2) + version: 5.57.3(@typescript-eslint/types@8.72.1) svelte-check: - specifier: ^4.4.8 - version: 4.4.8(picomatch@4.0.4)(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2) + specifier: ^4.7.7 + version: 4.7.7(picomatch@4.0.7)(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2) tailwindcss: - specifier: ^4.2.2 - version: 4.2.2 + specifier: ^4.3.3 + version: 4.3.3 tsx: - specifier: ^4.21.0 - version: 4.21.0 + specifier: ^4.23.15 + version: 4.23.15 typescript: specifier: ^6.0.2 version: 6.0.2 typescript-eslint: - specifier: ^8.57.2 - version: 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + specifier: ^8.72.1 + version: 8.72.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2) unwasm: - specifier: 0.5.3 - version: 0.5.3 + specifier: 0.6.3 + version: 0.6.3 vite: - specifier: ^8.0.3 - version: 8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0) + specifier: ^8.3.5 + version: 8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1) vitest: - specifier: ^4.1.7 - version: 4.1.8(@types/node@22.20.0)(@vitest/browser-playwright@4.1.8)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) + specifier: ^5.0.5 + version: 5.0.5(@types/node@24.19.2)(@vitest/browser-playwright@5.0.5)(@vitest/ui@5.0.5)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) wrangler: - specifier: ^4.77.0 - version: 4.77.0(@cloudflare/workers-types@4.20260317.1) + specifier: ^4.153.0 + version: 4.153.0(@cloudflare/workers-types@5.20261026.1)(@types/node@24.19.2) packages/ui: dependencies: '@atcute/bluesky-richtext-parser': - specifier: ^2.1.1 - version: 2.1.1 + specifier: ^2.1.2 + version: 2.1.2 '@atcute/tid': - specifier: ^1.1.2 - version: 1.1.2 + specifier: ^1.1.4 + version: 1.1.4 '@atmo-dev/contrail-lexicons': - specifier: ^0.4.4 - version: 0.4.4(wrangler@4.77.0(@cloudflare/workers-types@4.20260317.1)) + specifier: ^0.4.15 + version: 0.4.15(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)(wrangler@4.153.0(@cloudflare/workers-types@5.20261026.1)(@types/node@24.19.2)) '@internationalized/date': - specifier: ^3.12.0 - version: 3.12.0 + specifier: ^3.12.4 + version: 3.12.4 '@number-flow/svelte': - specifier: ^0.4.0 - version: 0.4.0(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + specifier: ^0.4.2 + version: 0.4.2(svelte@5.57.3(@typescript-eslint/types@8.72.1)) dompurify: - specifier: ^3.3.3 - version: 3.3.3 + specifier: ^3.4.17 + version: 3.4.17 esm-env: specifier: ^1.2.2 version: 1.2.2 h3-js: - specifier: ^4.4.0 - version: 4.4.0 + specifier: ^4.5.0 + version: 4.5.0 i18n-iso-countries: specifier: ^7.14.0 version: 7.14.0 marked: - specifier: ^17.0.5 - version: 17.0.5 + specifier: ^18.1.2 + version: 18.1.2 svelte-boring-avatars: specifier: ^1.2.6 version: 1.2.6 valibot: - specifier: ^1.3.1 - version: 1.3.1(typescript@6.0.2) + specifier: ^1.5.0 + version: 1.5.0(typescript@6.0.2) devDependencies: '@atmo-dev/kit': - specifier: 0.0.2 - version: 0.0.2(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(@tiptap/extensions@3.32.0(@tiptap/core@3.32.0(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0)(@tiptap/suggestion@3.32.0(@floating-ui/dom@1.8.0)(@tiptap/core@3.32.0(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(tailwindcss@4.2.2) + specifier: ^0.0.2 + version: 0.0.2(@internationalized/date@3.12.4)(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(@tiptap/extensions@3.32.0(@tiptap/core@3.32.0(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0)(@tiptap/suggestion@3.32.0(@floating-ui/dom@1.8.0)(@tiptap/core@3.32.0(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(tailwindcss@4.3.3) '@sketchyicons/svelte': specifier: ^0.5.0 - version: 0.5.0(svelte@5.57.3(@typescript-eslint/types@8.57.2)) - '@sveltejs/kit': - specifier: ^2.55.0 - version: 2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) + version: 0.5.0(svelte@5.57.3(@typescript-eslint/types@8.72.1)) '@sveltejs/package': - specifier: ^2.5.5 - version: 2.5.7(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2) + specifier: ^3.0.1 + version: 3.0.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2) '@sveltejs/vite-plugin-svelte': - specifier: ^7.0.0 - version: 7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) + specifier: ^7.3.1 + version: 7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) '@tailwindcss/typography': - specifier: ^0.5.19 - version: 0.5.19(tailwindcss@4.2.2) + specifier: ^0.5.20 + version: 0.5.20(tailwindcss@4.3.3) '@tailwindcss/vite': - specifier: ^4.2.2 - version: 4.2.2(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) + specifier: ^4.3.3 + version: 4.3.3(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) '@vitest/browser-playwright': - specifier: ^4.1.8 - version: 4.1.8(playwright@1.64.1)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.8) + specifier: ^5.0.5 + version: 5.0.5(playwright@1.64.1)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1))(vitest@5.0.5) axe-core: specifier: ^4.14.0 version: 4.14.0 bits-ui: - specifier: ^2.16.3 - version: 2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + specifier: ^2.20.2 + version: 2.20.2(@internationalized/date@3.12.4)(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1)) hls.js: - specifier: ^1.6.15 - version: 1.6.15 + specifier: ^1.7.3 + version: 1.7.3 maplibre-gl: - specifier: ^5.21.1 - version: 5.21.1 + specifier: ^6.16.0 + version: 6.16.0 playwright: specifier: ^1.64.1 version: 1.64.1 plyr: - specifier: ^3.8.4 - version: 3.8.4 + specifier: ^3.8.5 + version: 3.8.5 publint: - specifier: ^0.3.16 - version: 0.3.19 + specifier: ^0.3.25 + version: 0.3.25 svelte: specifier: ^5.57.3 - version: 5.57.3(@typescript-eslint/types@8.57.2) + version: 5.57.3(@typescript-eslint/types@8.72.1) svelte-check: - specifier: ^4.4.8 - version: 4.4.8(picomatch@4.0.4)(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2) + specifier: ^4.7.7 + version: 4.7.7(picomatch@4.0.7)(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2) svelte-maplibre-gl: - specifier: ^1.0.3 - version: 1.0.3(maplibre-gl@5.21.1)(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + specifier: ^2.2.1 + version: 2.2.1(maplibre-gl@6.16.0)(svelte@5.57.3(@typescript-eslint/types@8.72.1)) tailwindcss: - specifier: ^4.2.2 - version: 4.2.2 + specifier: ^4.3.3 + version: 4.3.3 typescript: specifier: ^6.0.2 version: 6.0.2 vite: - specifier: ^8.0.3 - version: 8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0) + specifier: ^8.3.5 + version: 8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1) vitest: - specifier: ^4.1.8 - version: 4.1.8(@types/node@22.20.0)(@vitest/browser-playwright@4.1.8)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) + specifier: ^5.0.5 + version: 5.0.5(@types/node@24.19.2)(@vitest/browser-playwright@5.0.5)(@vitest/ui@5.0.5)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) vitest-browser-svelte: specifier: ^3.1.0 - version: 3.1.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vitest@4.1.8) + version: 3.1.0(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vitest@5.0.5) packages: - '@atcute/atproto@3.1.10': - resolution: {integrity: sha512-+GKZpOc0PJcdWMQEkTfg/rSNDAAHxmAUGBl60g2az15etqJn5WaUPNGFE2sB7hKpwi5Ue2h/L0OacINcE/JDDQ==} + '@atcute/atproto@3.1.12': + resolution: {integrity: sha512-SaHY0vV5+VfS2ViOcbYtxPmmh82vbxoK5ccHTGn5+ciHNY2arEVcBUFbIQKtsQP4PPZ+lNAVooH+Wh62flvCzg==} + peerDependencies: + '@atcute/lexicons': ^1.0.0 - '@atcute/bluesky-richtext-parser@2.1.1': - resolution: {integrity: sha512-2CJiZ1oLAxQEz6BL5r1m/p+m89bb02959dFEvMvYI7CbHgIzbZsDOp3JB2XVu49DjPNtd9Mz5VnF5OBBpTgWdg==} + '@atcute/atproto@4.0.4': + resolution: {integrity: sha512-aEp5wQVPVbZcFJUwoi54tyT+ehRI/xtPe9T0zIvcryHAVXF/zxHtNboM+htbZLOAGsDFsqzgCyxph0Bafw7L8w==} + peerDependencies: + '@atcute/lexicons': ^2.0.0 '@atcute/bluesky-richtext-parser@2.1.2': resolution: {integrity: sha512-Wt3rGAszLY7z1S1wx2j3SXIbMpij+kFdtx0ODp67csPZ4xThAQ53r7pdcTIOmMzfymV4/nFYnTLrzBi0XDpKJA==} - '@atcute/bluesky@3.3.0': - resolution: {integrity: sha512-TrLnlxuD6F/D2ZYzJ3aCiRD0yiFuhmVsd6oULNzzr8V9Xzlufg0yxkRiGmbMiF2iI508y/MFi6vzo625301c5A==} + '@atcute/bluesky@4.0.25': + resolution: {integrity: sha512-oUjcpJrz5yy5lgNOvPC/9yZitK7V3tL01LVaiPDfQi4YB4ERbUirVAkb416O//n50tIAkBclhIF3I2MOPk+Pgg==} + peerDependencies: + '@atcute/lexicons': ^2.0.0 + + '@atcute/car@5.1.2': + resolution: {integrity: sha512-OCMwkNQtzkSwuWzyBFLF6w7YGYu7qJXkcDaYp618FyVnbqVsDr9fsfGEZ+p5FjYuvruZOXUH/PlZ2hRjavSEYg==} + peerDependencies: + '@atcute/cbor': ^2.0.0 + '@atcute/cid': ^2.0.0 - '@atcute/car@5.1.1': - resolution: {integrity: sha512-MeRUJNXYgAHrJZw7mMoZJb9xIqv3LZLQw90rRRAVAo8SGNdICwyqe6Bf2LGesX73QM04MBuYO6Kqhvold3TFfg==} + '@atcute/car@6.1.0': + resolution: {integrity: sha512-Dp7MlyI3YT7NiIUK6bm2ZyA95Pdun+DuFlcr40ZsGdqhOkKrctZT7wMZXSs6IYd7RorjSnddEJDh51hqrkNSPQ==} + peerDependencies: + '@atcute/cbor': ^2.0.0 + '@atcute/cid': ^2.0.0 '@atcute/cbor@2.3.2': resolution: {integrity: sha512-xP2SORSau/VVI00x2V4BjwIkHr6EQ7l/MXEOPaa4LGYtePFc4gnD4L1yN10dT5NEuUnvGEuCh6arLB7gz1smVQ==} + '@atcute/cbor@2.3.8': + resolution: {integrity: sha512-gazXBcNTr2U3cRaCjfRbq2GKHJnWapUUA3mgehL+0tbVXEty2wf/LIwF9z46gjqjX2DYGGwkybF8lTI3dzHaNQ==} + peerDependencies: + '@atcute/cid': ^2.5.0 + '@atcute/cid@2.4.1': resolution: {integrity: sha512-bwhna69RCv7yetXudtj+2qrMPYvhhIQqvJz6YUpUS98v7OdF3X2dnye9Nig2NDrklZcuyOsu7sQo7GOykJXRLQ==} - '@atcute/client@4.2.1': - resolution: {integrity: sha512-ZBFM2pW075JtgGFu5g7HHZBecrClhlcNH8GVP9Zz1aViWR+cjjBsTpeE63rJs+FCOHFYlirUyo5L8SGZ4kMINw==} + '@atcute/client@4.2.2': + resolution: {integrity: sha512-z16BaGgdO6WIkDCxqeI+zhnh2KmW9jsjd312PJ6YYsoDBpPPqL+WkBmxQ7eO9C6CMFxXsZpYcM81RzZEETA4PQ==} + peerDependencies: + '@atcute/lexicons': ^1.0.0 + + '@atcute/client@5.1.2': + resolution: {integrity: sha512-V3MOJudmmbuiFfrmLR3/ZGA+PKcI4E4ZNEDGKMX/YrvFrHyElD1/gb8NxLesrlIcHefiulqfX9dAl6hOkIt7CA==} + peerDependencies: + '@atcute/lexicons': ^2.0.0 '@atcute/crypto@2.4.1': resolution: {integrity: sha512-tJ3Pi/XYcAsABKtqSlSOTKfO5YiQ4XdqlTuPS8HiRZSezOPcXBFFzAFWpSIJPURbVPFQL3LLrrK0Ea24wl5qeQ==} - '@atcute/identity-resolver@1.2.2': - resolution: {integrity: sha512-eUh/UH4bFvuXS0X7epYCeJC/kj4rbBXfSRumLEH4smMVwNOgTo7cL/0Srty+P/qVPoZEyXdfEbS0PHJyzoXmHw==} + '@atcute/crypto@2.4.4': + resolution: {integrity: sha512-Yc7lXz4ndDjbs+/WrKeGS+sVEr+sx8xi5zSVInKNl0FAEY6KbvcT+bjaU9A3erUVviFp9yEcu/1aSg/f+GPpBg==} + + '@atcute/firehose@1.2.0': + resolution: {integrity: sha512-u6Oh137haGOzWNFbJzakUjjDOHvVNORY5r5H4v9OfHqVzFOYwSDptMYsD2TlRf4BbdtmHfjCb7pL1/D0eMfh6Q==} + peerDependencies: + '@atcute/lexicons': ^2.1.0 + + '@atcute/identity-resolver@1.2.3': + resolution: {integrity: sha512-q891zLUMtgoD60y5Pv2YmTg4wIf4ipFuIhZlIuQTTB7qM9sGxmBbe2quzTRCTl3pnsLEmTz7l+3Dszgoutsp5w==} peerDependencies: '@atcute/identity': ^1.0.0 + '@atcute/lexicons': ^1.0.0 + + '@atcute/identity-resolver@2.0.3': + resolution: {integrity: sha512-yiVeMExbZvPbnFSfJCSnseb4V/N7/mYANMBLQAnkfGLXzUKZ+8dqhXroMAMl3jj07lyfSXiN1nI2rAfLijhCPQ==} + peerDependencies: + '@atcute/identity': ^2.0.0 + '@atcute/lexicons': ^2.0.0 '@atcute/identity@1.1.4': resolution: {integrity: sha512-RCw1IqflfuSYCxK5m0lZCm0UnvIzcUnuhngiBhJEJb9a9Mc2SEf1xP3H8N5r8pvEH1LoAYd6/zrvCNU+uy9esw==} - '@atcute/jetstream@1.1.2': - resolution: {integrity: sha512-u6p/h2xppp7LE6W/9xErAJ6frfN60s8adZuCKtfAaaBBiiYbb1CfpzN8Uc+2qtJZNorqGvuuDb5572Jmh7yHBQ==} + '@atcute/identity@1.1.5': + resolution: {integrity: sha512-5i9nl1UVnBDPCumUwrLNl4BZpGvQ/XABEXbjhiw3PQwRUfpQA8FqByDGxXy2gWpFDrNvQ9yVuOoNsjzxJgjjVA==} + peerDependencies: + '@atcute/lexicons': ^1.0.0 - '@atcute/lex-cli@2.5.3': - resolution: {integrity: sha512-829rvezMOfRkJQRKvupNT8TWT/YYffJ2QsB80D9aPjkXSogrETZA7xZcPaMZBXg+mJaVbLO9S4ThPQmlF0L4UQ==} + '@atcute/identity@2.0.2': + resolution: {integrity: sha512-amr/EQceqVtBVmjBK4uUF7nKKYuRttadigpvOcAn4dnO6SNSwSjQi8KDH9LnukEotPsSP4UDsQvNfHWEoUcslw==} + peerDependencies: + '@atcute/lexicons': ^2.0.0 + + '@atcute/jetstream@1.1.3': + resolution: {integrity: sha512-IlivviByHDKEC+qsfBL2DSHx9MkJxH0vsoYKc0ouZ8HKwXzR/GSwyjZ8TKb2KyVzbVfh1UPifLW9E3lCoGqaOw==} + peerDependencies: + '@atcute/lexicons': ^1.0.0 + + '@atcute/jetstream@2.2.0': + resolution: {integrity: sha512-2Aux4AxUj+mRLNyI1L7kycZM/q9UuAF4pGcyuWVfGLrK95OgAe4BSyCn33HbuKidBYZPwQjDn+j6B8fz5cOUYg==} + peerDependencies: + '@atcute/lexicons': ^2.0.0 + + '@atcute/lex-cli@2.8.2': + resolution: {integrity: sha512-CqF1AGHtYeB2Hj9yDt1BUsoUx4HCXHlo7Oj4OLavFaA/9JU4Yc4fs/KYlDtIQMxNi9k3pPLAbU0/0c8z3m8J7g==} + hasBin: true + + '@atcute/lex-cli@3.3.0': + resolution: {integrity: sha512-dTDS1/xs6EeeLR5sFkraeeV+DjJEGTT2KWryeu6swlao/uz96JbmxW1fi16/FM6UOBjDBZKKtzcnCWfmb4OzHw==} hasBin: true + peerDependencies: + prettier: ^3.8.4 + peerDependenciesMeta: + prettier: + optional: true - '@atcute/lexicon-doc@2.1.2': - resolution: {integrity: sha512-jTLcOka7b8BIn2SnIZm2m7l6unlJ0gpgW1MnRpSqNbly/AvyRUR/GREduh/QmjT4SGasDm8vdhrM0kOSPFpDLQ==} + '@atcute/lexicon-doc@2.2.1': + resolution: {integrity: sha512-Stdf4wX2Abn4VqPrlVmmGummxb/csPiZf5KbbVpHzrL6O18VW1FeI1zkUn0aNjP/vtZSS2Sqq3WsijuzQa+yCQ==} + peerDependencies: + '@atcute/lexicons': ^1.0.0 + + '@atcute/lexicon-doc@3.1.0': + resolution: {integrity: sha512-kKHYf6f5rm55WuUI3JOZ4WdWC/sjDH3g30dZNwYKxY8cK41qOu601o5KtiaNj10xbt9cumuNNBQa+qOU15j0UA==} + peerDependencies: + '@atcute/lexicons': ^2.0.0 - '@atcute/lexicon-resolver@0.1.6': - resolution: {integrity: sha512-wJC/ChmpP7k+ywpOd07CMvioXjIGaFpF3bDwXLi/086LYjSWHOvtW6pyC+mqP5wLhjyH2hn4wmi77Buew1l1aw==} + '@atcute/lexicon-resolver@0.1.7': + resolution: {integrity: sha512-b9a02EZXmlBCXTCmnteoQ9R7ohF9ZV1kEKuLdjIwhOV2d9GWnkgu1si/snB9q1HsN/H8E7bjrNFchL3cgy6xcA==} peerDependencies: '@atcute/identity': ^1.1.0 '@atcute/identity-resolver': ^1.1.3 + '@atcute/lexicon-doc': ^2.0.0 + '@atcute/lexicons': ^1.0.0 + + '@atcute/lexicon-resolver@1.0.2': + resolution: {integrity: sha512-FKDlZdDxh89z+LxSKciWXF+40n9z5emsKtdmPpJJRhsA0yXMxD9vzw8rt1N9Q+ZhsPjwQ86ZsZ3oQVIkmjEYuQ==} + peerDependencies: + '@atcute/identity': ^2.0.0 + '@atcute/identity-resolver': ^2.0.0 + '@atcute/lexicon-doc': ^3.0.0 + '@atcute/lexicons': ^2.0.0 - '@atcute/lexicons@1.2.9': - resolution: {integrity: sha512-/RRHm2Cw9o8Mcsrq0eo8fjS9okKYLGfuFwrQ0YoP/6sdSDsXshaTLJsvLlcUcaDaSJ1YFOuHIo3zr2Om2F/16g==} + '@atcute/lexicons@1.3.1': + resolution: {integrity: sha512-2JVxDmHt+QwsUoPyVYWIN7ZLRLfLx4GeJxKFjA9ofStuby9hCMv7Q4GAPIXuJD8wPv8vrnhr1yRNQhiJX+bthw==} '@atcute/lexicons@2.1.1': resolution: {integrity: sha512-kHyqUW8g/Fq9LTctGh0TVBx0AmtecV6VSrRprrSbqKqHe9q8C6y+YPL3EMNq2l93XA1iDHkkvYwLdTcKL/lNbA==} - '@atcute/mst@1.0.0': - resolution: {integrity: sha512-pMce2efib+dmKtnGnIvJZitVncJkpr3AmhyfgfYllni8KzsaDGsJmuGavSVpuojAhQe+6jYwHFtpm/beiiH4uw==} + '@atcute/mst@1.1.1': + resolution: {integrity: sha512-QWoW69Pg5RWrc0B98Cp5K4UjeXI+2vzBrWmoBUW4nSR51LsamOnG9HsWovcOoCRhnj1ZYAMlnAc5Eh8+gJFoSA==} + peerDependencies: + '@atcute/cbor': ^2.0.0 + '@atcute/cid': ^2.5.0 '@atcute/multibase@1.2.0': resolution: {integrity: sha512-ZK2GRra+qIYq9nNuQB52m2ul0hOmCQEtPobGfTSUxm7pF0OGEkWGkWHugFhNEDVzHzTwPxHp6VGotdZFue4lYQ==} - '@atcute/oauth-crypto@0.1.0': - resolution: {integrity: sha512-qZYDCNLF/4B6AndYT1rsQelN8621AC5u/sL5PHvlr/qqAbmmUwCBGjEgRSyZtHE1AqD60VNiSMlOgAuEQTSl3w==} + '@atcute/multibase@1.2.5': + resolution: {integrity: sha512-cReTONgYpQo/VHD3ZmzPNoyBKJgSk1J4h//cvvdVVJBMar+SjlQ/sUXeTjQfuyfmDKv+TLKhmutLcvbMcQ9Rvw==} + + '@atcute/oauth-browser-client@5.1.0': + resolution: {integrity: sha512-pcRhAeNQ36Gutear6jJobumoIK1KUJAyirhXcZYhN8rzDrhP+nuBYpxl7TIgAy99Q6+2B0aouzZ8bRjlwGbZBQ==} + peerDependencies: + '@atcute/identity-resolver': ^2.0.0 + '@atcute/lexicons': ^2.0.0 + + '@atcute/oauth-crypto@1.0.1': + resolution: {integrity: sha512-ghC8ceFx0r6pi5X3dNoET1K6PNg8afeAOZLD4PKLhrpVYdRtRrgY4uqAe3ojtSIjoS6GXmVm063CoJ2xtg/MoQ==} + + '@atcute/oauth-keyset@0.1.3': + resolution: {integrity: sha512-VSNUb2TLUTyntgzfn58kwNL4kp4TD+M868tyyrFWlCaDVy0pDnVFfUXa1z1W+DBWLL9ICy2qTdPitRokAZKivw==} - '@atcute/oauth-keyset@0.1.0': - resolution: {integrity: sha512-+wqT/+I5Lg9VzKnKY3g88+N45xbq+wsdT6bHDGqCVa2u57gRvolFF4dY+weMfc/OX641BIZO6/o+zFtKBsMQnQ==} + '@atcute/oauth-node-client@2.0.1': + resolution: {integrity: sha512-MgqN9Rnt5nuUH5zriETtbQrwcx/tWaELKaFVQtqggMtRI4k4IP5+ZbnG40tiJjbZfSclapA2kwOnT14kO0nAxg==} + peerDependencies: + '@atcute/identity-resolver': ^2.0.0 + '@atcute/lexicons': ^2.0.0 - '@atcute/oauth-node-client@1.1.0': - resolution: {integrity: sha512-xCp/VfjtvTeKscKR/oI2hdMTp1/DaF/7ll8b6yZOCgbKlVDDfhCn5mmKNVARGTNaoywxrXG3XffbWCIx3/E87w==} + '@atcute/oauth-types@1.0.1': + resolution: {integrity: sha512-9uFP/nK0PgPDsaNbLArzrCHvTZO1k04cSEX5jZ75W2Jh7Jxbh/CSTenSrad3CZXuX6y6hDquEtl6H/IqLtTmHw==} - '@atcute/oauth-types@0.1.1': - resolution: {integrity: sha512-u+3KMjse3Uc/9hDyilu1QVN7IpcnjVXgRzhddzBB8Uh6wePHNVBDdi9wQvFTVVA3zmxtMJVptXRyLLg6Ou9bqg==} + '@atcute/password-session@1.0.2': + resolution: {integrity: sha512-BJo9e9AJFiUOmoswTJ3tmH4nv2WiWpzZ4gC89Zhq5Uh52OefZy1r+WTis1xcz1mCdIWEmPoJe76CKgHVGYzhJw==} + peerDependencies: + '@atcute/identity': ^2.0.0 + '@atcute/lexicons': ^2.0.0 - '@atcute/repo@0.1.3': - resolution: {integrity: sha512-kN4gkrkQgJwI5xkVQ9zSdI8ULR47uH48EdJdjMvKAWsSDu8zKYd8ZQ6n778qa6o3WYEq02v9QVf7pzeU+3fYVA==} + '@atcute/repo@0.1.5': + resolution: {integrity: sha512-VFQhAJmgD2oX7Zz6zNRKZeWwYPJu5JsluNt2UiOCXdnbhAPC9z9SdhLzPceWeZB1a/IuFTMgIgDE5SGUZmgJCg==} + peerDependencies: + '@atcute/cbor': ^2.0.0 + '@atcute/cid': ^2.0.0 + '@atcute/lexicons': ^1.0.0 - '@atcute/tid@1.1.2': - resolution: {integrity: sha512-bmPuOX/TOfcm/vsK9vM98spjkcx2wgd9S2PeK5oLgEr8IbNRPq7iMCAPzOL1nu5XAW3LlkOYQEbYRcw5vcQ37w==} + '@atcute/repo@1.1.1': + resolution: {integrity: sha512-MSaIerKFLh+YFdVZ5y+dxVu49U1f+7PpkhWH5wsMy1dbJcFJ8qbIc1MZRwqjmXxyCQ9FPOVeVvbwp//BCkqU9g==} + peerDependencies: + '@atcute/cbor': ^2.0.0 + '@atcute/cid': ^2.5.0 + '@atcute/lexicons': ^2.0.0 - '@atcute/time-ms@1.3.2': - resolution: {integrity: sha512-F+qOyR9pO55g1d/QmN+Gr+fimoUQQLusdGSB6pjV0wW5KPILR4oQ4e2ZhWzqUbeHLAgWvgoTTMsMDdz62Xa2tg==} + '@atcute/tid@1.1.4': + resolution: {integrity: sha512-RVjGAxu+WgcQjs7AkicZKOqLOncnuXh7a0xUHTfXTYZjXSszB7jBLgrcLWjpU0mBTko9dT+GajsXAcBGYmzYKQ==} - '@atcute/uint8array@1.1.1': - resolution: {integrity: sha512-3LsC8XB8TKe9q/5hOA5sFuzGaIFdJZJNewC5OKa3o/eU6+K7JR6see9Zy2JbQERNVnRl11EzbNov1efgLMAs4g==} + '@atcute/time-ms@1.3.3': + resolution: {integrity: sha512-FeK2Xsv4ymP+PoTWtmMFuJmpxDBQsj+jNMnd/YpIm3etcIPj1YFb7DeTAG1c/Xvp8AM38MLdqUCc35/mANnBtw==} '@atcute/uint8array@1.2.1': resolution: {integrity: sha512-qsDY5lKIutT5FJeVOD3Au0OxqRJjEd5UKm4z7zM0kMQFX4vMKfBIEmBMDAEUpwZXlpxkvGhVZ1PEu67BG9o8cw==} @@ -416,14 +530,14 @@ packages: '@atcute/util-fetch@1.0.5': resolution: {integrity: sha512-qjHj01BGxjSjIFdPiAjSARnodJIIyKxnCMMEcXMESo9TAyND6XZQqrie5fia+LlYWVXdpsTds8uFQwc9jdKTig==} - '@atcute/util-text@1.2.0': - resolution: {integrity: sha512-b8WSh+Z7K601eUFFmTFj8QPKDO8Ic0VDDj63sdKzpkm+ySQKsYT5nXekViGqFVKbyKj1V5FyvZvgXad6/aI4QQ==} + '@atcute/util-fetch@2.1.0': + resolution: {integrity: sha512-zn1+4iHoIo7E5XLSCBkPYUd0IwE/tgdLdbqqLrxZrC3e9lB8vpA+v3TryivD+cB6mO4kSJXjCQoaAs0/cbwtyA==} '@atcute/util-text@1.3.4': resolution: {integrity: sha512-u2UAM7iSM09sQaSG9jtxWFSPgB8boVj50/BoyMvYnhVgGBu+nXIuAcdDUQCsZA44YZgTPPhN/b86JX+jH7SPzQ==} - '@atcute/varint@2.0.0': - resolution: {integrity: sha512-CEY/oVK/nVpL4e5y3sdenLETDL6/Xu5xsE/0TupK+f0Yv8jcD60t2gD8SHROWSvUwYLdkjczLCSA7YrtnjCzWw==} + '@atcute/varint@2.0.2': + resolution: {integrity: sha512-/+hS1juMgnmf6eL6lICUkTw7wcGTo3I+Q0L1PI521mUz77rGSC6nXAUNKtvm2wYJpuWdEGq+GILGoYkOArn0TQ==} '@atcute/xrpc-server@0.1.12': resolution: {integrity: sha512-70KIerQlljp5+s6t0u6YNN9klEboQUZa2hhoi/hmXIO1cIKEORettTMctnyjfcCJaSfAuj42dxPu51GTZBlm8w==} @@ -442,8 +556,8 @@ packages: pg: optional: true - '@atmo-dev/contrail-lexicons@0.4.4': - resolution: {integrity: sha512-rb22K1H0NYp9Y7Okui/ny42T3X4xfj795p+pPrtWeBsio2ZsK9uuFtn3E+XnB314sGSUQQSe0FtkgVCUjLT+uQ==} + '@atmo-dev/contrail-lexicons@0.4.15': + resolution: {integrity: sha512-2LAzwfZ0wcFbOfNKM3J6uvaDFPSUah/UBy7X1VF7OAq2Ou3DnHjcN1STIwRWND+vpHNtvZaFdRmwX9WeTOi7HA==} hasBin: true '@atmo-dev/contrail-record-host@0.12.2': @@ -461,463 +575,305 @@ packages: wrangler: optional: true - '@atmo-dev/contrail@0.5.0': - resolution: {integrity: sha512-PeeA3Q6NDwaho2dgaW4QANPRvhjKBml17MMxjcq6DwQG7p0MTUqoa2RM1G7DpA8CAIPrRXTVcosb6ybqshlWtQ==} - hasBin: true - peerDependencies: - pg: ^8.0.0 - wrangler: ^4.0.0 - peerDependenciesMeta: - pg: - optional: true - wrangler: - optional: true - '@atmo-dev/kit@0.0.2': resolution: {integrity: sha512-oqVzlYjlrJSF2kKMQwHCYV6VFmgTEX4fD6dn31Ze58+6K9vJevghDj+QcnJxrGB5slRULrkaxJRnFLoBFKmrUw==} peerDependencies: svelte: '>=5.48.0 <6' tailwindcss: ^4.0.0 - '@babel/runtime@7.29.2': - resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} - engines: {node: '>=6.9.0'} - '@badrap/valita@0.4.6': resolution: {integrity: sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==} engines: {node: '>= 18'} - '@blazediff/core@1.9.1': - resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} + '@blazediff/core@1.10.0': + resolution: {integrity: sha512-AOQff0zgR7cGsZL+4E7hVkmujoPUpm0J9xzWGWZj5wCjd3gmxESXAPfKyuzs93VdpQNFhHlBhfOjrcZ+XTERtQ==} - '@changesets/apply-release-plan@7.1.1': - resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==} + '@cacheable/memory@2.2.0': + resolution: {integrity: sha512-CTLKqLItRCEixEAewD3/j9DB3/o96gpTPD4eJ1v+DGOlxZRZncRQkGYqqnAGCscYd6RNeXfGeiuCphsPtqyIfQ==} - '@changesets/assemble-release-plan@6.0.10': - resolution: {integrity: sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==} + '@cacheable/utils@2.5.0': + resolution: {integrity: sha512-buipgOVDkkPXNR5+xBpDw7Zk2n1EvU7qBJCNUcL7rhQ//kfpOXPAvQ511Os0vpLYJ1pZnvudNytkQt2hst3wqA==} - '@changesets/changelog-git@0.2.1': - resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} + '@changesets/apply-release-plan@8.1.1': + resolution: {integrity: sha512-nk2Hbq3M9NeHMdaIRBDvawKrQJzXB9sGyBUE5yWnIKtvdcNCPj75zBekJYr0gTT2ecJH3eFeTrc8eisPImcv0Q==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/cli@2.31.0': - resolution: {integrity: sha512-AhI4enNTgHu2IZr6K4WZyf0EPch4XVMn1yOMFmCD9gsfBGqMYaHXls5HyDv6/CL5axVQABz68eG30eCtbr2wFg==} - hasBin: true + '@changesets/assemble-release-plan@7.0.0': + resolution: {integrity: sha512-oEW8BxdA604kGGtDSCiHr5w9Tv4UWe9I2k61IBNZzCOE1kbYaJj4v+lFQNgcEZFkUc2pV/+hASErGDvpJOZCTg==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/config@3.1.4': - resolution: {integrity: sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==} + '@changesets/changelog-git@1.0.0': + resolution: {integrity: sha512-3Dst2Ime2Op5nd4XmWJLPIgp11ZFqJqSkVug9izK6TDcIV4YlhPS4ECbEVR+eGI0bk0r1ItogD4j2Oli87bJrA==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/errors@0.2.0': - resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + '@changesets/cli@3.0.3': + resolution: {integrity: sha512-L1i67bMfkK6iC/kDejuNO4pFgTRcWIObsD6Qof2woP1I4M8tj17DGlcpRaTzTv1DYSP5EMwWdEtR8X0Pj5Jg3Q==} + engines: {node: ^22.11 || ^24 || >=26, npm: '>=10.9.0', pnpm: '>=10.0.0', yarn: '>=4.5.2'} + hasBin: true - '@changesets/get-dependents-graph@2.1.4': - resolution: {integrity: sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==} + '@changesets/config@4.0.1': + resolution: {integrity: sha512-PxpxSQLQSLDjceAgRq+4FWlU+HflDIw03mmPVipxoQx9xrXFUjmqTy3SE+n/2t+DqPdpPiLWVr5NRiLZvjyLwg==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/get-release-plan@4.0.16': - resolution: {integrity: sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==} + '@changesets/errors@1.0.0': + resolution: {integrity: sha512-ElN/mEzn6zmETgjwf5MclCMa9ef59sAR0lfO8VSYIsiRvbC2FbLB/92EoYw10Sl0kGixxHFiJZUSv7dA+YpR8g==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/get-version-range-type@0.4.0': - resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + '@changesets/format@0.1.3': + resolution: {integrity: sha512-zTZrJbfY81+/MsXsey6i3jQjpApz4PqRQ+nouHGDJhCa5sKCExwR9mZFQ/67lMsqZDNy2G2v3wTbzOmZ56EtaQ==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/git@3.0.4': - resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} + '@changesets/get-dependents-graph@3.0.0': + resolution: {integrity: sha512-ji/t5wFA1zREKXRUePE6Qi+Qu2UgxCeSSGQrphezwvQZrp49B7sJ+8+wvM0tA7zPeSxYKCojDy3WWgrl+s+awg==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/logger@0.1.1': - resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} + '@changesets/git@4.0.1': + resolution: {integrity: sha512-6vWpIAC4LkpmlqaIu37ViT5enyd9+uBwAiGqCGhASvkSHBgx4PrtTGXWTMFYpDmZbjgyonyVgMciPrW4MqtJsA==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/parse@0.4.3': - resolution: {integrity: sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==} + '@changesets/parse@1.0.0': + resolution: {integrity: sha512-P0iaMb9p9CRYZiTgAllEIF9AUMQHIy1G72tKlcIqJp61icZSsKQNiOPdxAMZG8m/DvZwt/oz5xEbTpike//dWg==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/pre@2.0.2': - resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} + '@changesets/pre@3.0.0': + resolution: {integrity: sha512-Zm/6YliV/a2oeWTqHJf6KxLrQwgcK1i/BRDl2m0EKZvbnxV5fG9QRhwJJGshjsZTUTS6dkfURQ2K6aAvgNw/3Q==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/read@0.6.7': - resolution: {integrity: sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==} + '@changesets/read@1.0.1': + resolution: {integrity: sha512-nzvSC6RcTiWf/dsuwZFXpLzGGsRHYCL68U3uHV7srsulU93aVWY7u2GEJiDZ+4GIIElfaW5EqtKC0UHroY+LTQ==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/should-skip-package@0.1.2': - resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} + '@changesets/should-skip-package@1.0.0': + resolution: {integrity: sha512-pwqoJmbONn1XgXmZXPEExgAaT+HdZLjALFTDgIm+PnS5KeO2nLtzA2/Q+4aMFY14kFMuXKG30MObhvDzWgzDgg==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/types@4.1.0': - resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + '@changesets/types@7.0.0': + resolution: {integrity: sha512-c5GoiQyt3pxiXjrWSNoP8/GRf4kG+VnKzovx1OQM8dYYALlSwgedmkPmJ+ZqGxqwg9D3Bkj85Uo4KLd5BN3A0w==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/types@6.1.0': - resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} + '@changesets/write@1.0.1': + resolution: {integrity: sha512-q/ThtP9gcnEP6xlv7LrY26C2mHqdGBti/MmOVngt/M/oIGYkssmQGxPK9WzBNt2juVcH/vml2WQ+ra8LXYOTaA==} + engines: {node: ^22.11 || ^24 || >=26} - '@changesets/write@0.4.0': - resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@clack/core@1.5.1': + resolution: {integrity: sha512-iHTrHA8MtVuLl2TfZySmcKv1qO2PoyC9Z7pfSDozEuV5vtY3/wcOPKJXlqJ5Oq2Cx5DDGQGAMVx6HZfRRoVEbQ==} + engines: {node: '>= 20.12.0'} - '@cloudflare/kv-asset-handler@0.4.2': - resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==} - engines: {node: '>=18.0.0'} + '@clack/prompts@1.8.1': + resolution: {integrity: sha512-dlT1m5e/0yUL0kRNcQn7yGLVThkgbB0Ga/1AmfDDC/8ik6AIiSf2QLQO2zPYvefsHP0aFgxO93cVLCCfDp7kzQ==} + engines: {node: '>= 20.12.0'} - '@cloudflare/unenv-preset@2.16.0': - resolution: {integrity: sha512-8ovsRpwzPoEqPUzoErAYVv8l3FMZNeBVQfJTvtzP4AgLSRGZISRfuChFxHWUQd3n6cnrwkuTGxT+2cGo8EsyYg==} + '@cloudflare/kv-asset-handler@0.5.0': + resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} + engines: {node: '>=22.0.0'} + + '@cloudflare/unenv-preset@2.16.2': + resolution: {integrity: sha512-JBP1+Z7ZSNG/d4mRP+y8VC5dka3tZVMLEZRvS+rzQ4DGV1EoxRFQckcJTTkXbHSQiTj0DtNI01Zwb/V2fX0mvQ==} peerDependencies: unenv: 2.0.0-rc.24 - workerd: 1.20260301.1 || ~1.20260302.1 || ~1.20260303.1 || ~1.20260304.1 || >1.20260305.0 <2.0.0-0 + workerd: '>1.20260305.0 <2.0.0-0' peerDependenciesMeta: workerd: optional: true - '@cloudflare/workerd-darwin-64@1.20260317.1': - resolution: {integrity: sha512-8hjh3sPMwY8M/zedq3/sXoA2Q4BedlGufn3KOOleIG+5a4ReQKLlUah140D7J6zlKmYZAFMJ4tWC7hCuI/s79g==} + '@cloudflare/workerd-darwin-64@1.20261023.1': + resolution: {integrity: sha512-lsEx0i7nR0PNG/erUFFHmQmiidEhLfDE5uQmAL9421/y4/ycuxDDOSaxu3VGGYFFPK5sduyUeMmjIlX4CwOBFg==} engines: {node: '>=16'} cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20260317.1': - resolution: {integrity: sha512-M/MnNyvO5HMgoIdr3QHjdCj2T1ki9gt0vIUnxYxBu9ISXS/jgtMl6chUVPJ7zHYBn9MyYr8ByeN6frjYxj0MGg==} + '@cloudflare/workerd-darwin-arm64@1.20261023.1': + resolution: {integrity: sha512-5e79fHgabdDD8EgmjOhJ1S+xMsf6DbC7fL7IgTBizMnzOp0P2isDn7pYmUxI9AJZE9FVQ4RUilH/I36YNg+GQQ==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] - '@cloudflare/workerd-linux-64@1.20260317.1': - resolution: {integrity: sha512-1ltuEjkRcS3fsVF7CxsKlWiRmzq2ZqMfqDN0qUOgbUwkpXsLVJsXmoblaLf5OP00ELlcgF0QsN0p2xPEua4Uug==} + '@cloudflare/workerd-linux-64@1.20261023.1': + resolution: {integrity: sha512-VHQ6jKFSihjR2+x1buby8XTdBLLJztVnYiB7OLOTYO8aDXB+c1Rd2410PdgFuFYc4AgFEk6PCJLyCLL5L1KBnw==} engines: {node: '>=16'} cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20260317.1': - resolution: {integrity: sha512-3QrNnPF1xlaNwkHpasvRvAMidOvQs2NhXQmALJrEfpIJ/IDL2la8g499yXp3eqhG3hVMCB07XVY149GTs42Xtw==} + '@cloudflare/workerd-linux-arm64@1.20261023.1': + resolution: {integrity: sha512-ilpRHzfDN8YFRM5CLRKuFw40x/LJBS89yVdhdQmxehlVDuBqjKpJB++zPFbTgKRRFaNupgnXc8RHktXAIhgCmQ==} engines: {node: '>=16'} cpu: [arm64] os: [linux] - '@cloudflare/workerd-windows-64@1.20260317.1': - resolution: {integrity: sha512-MfZTz+7LfuIpMGTa3RLXHX8Z/pnycZLItn94WRdHr8LPVet+C5/1Nzei399w/jr3+kzT4pDKk26JF/tlI5elpQ==} + '@cloudflare/workerd-windows-64@1.20261023.1': + resolution: {integrity: sha512-279WLVjNsMycAwr0EZNiNEf0l2SY6NUtsN80NwZzbTHzakmiN+WSx4w38muxPm+PAU0oSPPAPXKVD+H6Hya8xw==} engines: {node: '>=16'} cpu: [x64] os: [win32] - '@cloudflare/workers-types@4.20260317.1': - resolution: {integrity: sha512-+G4eVwyCpm8Au1ex8vQBCuA9wnwqetz4tPNRoB/53qvktERWBRMQnrtvC1k584yRE3emMThtuY0gWshvSJ++PQ==} + '@cloudflare/workers-types@5.20261026.1': + resolution: {integrity: sha512-E+KMLXOMip7uzfkFYoSjAF0n0+VFkK2KFU0Md/PM3JkPpC9Km0/YAoDttkmxAoZLGbK1wQRAFg2IJtyZkTBCHg==} '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@emnapi/core@1.9.1': - resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} - - '@emnapi/runtime@1.9.1': - resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} - - '@emnapi/wasi-threads@1.2.0': - resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} - - '@esbuild/aix-ppc64@0.27.3': - resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] + '@emnapi/runtime@1.11.3': + resolution: {integrity: sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==} - '@esbuild/aix-ppc64@0.27.4': - resolution: {integrity: sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q==} + '@esbuild/aix-ppc64@0.28.2': + resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.27.3': - resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.27.4': - resolution: {integrity: sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw==} + '@esbuild/android-arm64@0.28.2': + resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.27.3': - resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.27.4': - resolution: {integrity: sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ==} + '@esbuild/android-arm@0.28.2': + resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.27.3': - resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - - '@esbuild/android-x64@0.27.4': - resolution: {integrity: sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw==} + '@esbuild/android-x64@0.28.2': + resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.27.3': - resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - - '@esbuild/darwin-arm64@0.27.4': - resolution: {integrity: sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ==} + '@esbuild/darwin-arm64@0.28.2': + resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.27.3': - resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - - '@esbuild/darwin-x64@0.27.4': - resolution: {integrity: sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw==} + '@esbuild/darwin-x64@0.28.2': + resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.27.3': - resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - - '@esbuild/freebsd-arm64@0.27.4': - resolution: {integrity: sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw==} + '@esbuild/freebsd-arm64@0.28.2': + resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.27.3': - resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - - '@esbuild/freebsd-x64@0.27.4': - resolution: {integrity: sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ==} + '@esbuild/freebsd-x64@0.28.2': + resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.27.3': - resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm64@0.27.4': - resolution: {integrity: sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA==} + '@esbuild/linux-arm64@0.28.2': + resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.27.3': - resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.27.4': - resolution: {integrity: sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg==} + '@esbuild/linux-arm@0.28.2': + resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.27.3': - resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - - '@esbuild/linux-ia32@0.27.4': - resolution: {integrity: sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA==} + '@esbuild/linux-ia32@0.28.2': + resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.27.3': - resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - - '@esbuild/linux-loong64@0.27.4': - resolution: {integrity: sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA==} + '@esbuild/linux-loong64@0.28.2': + resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.27.3': - resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - - '@esbuild/linux-mips64el@0.27.4': - resolution: {integrity: sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw==} + '@esbuild/linux-mips64el@0.28.2': + resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.27.3': - resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} + '@esbuild/linux-ppc64@0.28.2': + resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.27.4': - resolution: {integrity: sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.3': - resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - - '@esbuild/linux-riscv64@0.27.4': - resolution: {integrity: sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw==} + '@esbuild/linux-riscv64@0.28.2': + resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.27.3': - resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - - '@esbuild/linux-s390x@0.27.4': - resolution: {integrity: sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA==} + '@esbuild/linux-s390x@0.28.2': + resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.27.3': - resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - - '@esbuild/linux-x64@0.27.4': - resolution: {integrity: sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA==} + '@esbuild/linux-x64@0.28.2': + resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.27.3': - resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - - '@esbuild/netbsd-arm64@0.27.4': - resolution: {integrity: sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q==} + '@esbuild/netbsd-arm64@0.28.2': + resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.27.3': - resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - - '@esbuild/netbsd-x64@0.27.4': - resolution: {integrity: sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg==} + '@esbuild/netbsd-x64@0.28.2': + resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.27.3': - resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-arm64@0.27.4': - resolution: {integrity: sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow==} + '@esbuild/openbsd-arm64@0.28.2': + resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.27.3': - resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.4': - resolution: {integrity: sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ==} + '@esbuild/openbsd-x64@0.28.2': + resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.27.3': - resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.27.4': - resolution: {integrity: sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg==} + '@esbuild/openharmony-arm64@0.28.2': + resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.27.3': - resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.27.4': - resolution: {integrity: sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g==} + '@esbuild/sunos-x64@0.28.2': + resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.27.3': - resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.27.4': - resolution: {integrity: sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg==} + '@esbuild/win32-arm64@0.28.2': + resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.27.3': - resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.27.4': - resolution: {integrity: sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw==} + '@esbuild/win32-ia32@0.28.2': + resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.27.3': - resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.27.4': - resolution: {integrity: sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg==} + '@esbuild/win32-x64@0.28.2': + resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + '@eslint-community/eslint-utils@4.10.1': + resolution: {integrity: sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -926,8 +882,8 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/compat@2.0.3': - resolution: {integrity: sha512-SjIJhGigp8hmd1YGIBwh7Ovri7Kisl42GYFjrOyHhtfYGGoLW6teYi/5p8W50KSsawUPpuLOSmsq1bD0NGQLBw==} + '@eslint/compat@2.1.1': + resolution: {integrity: sha512-rMcy8GSrwNzcISX/BlTDY/GLB4eCopEuy9woIls3To+15OLxykZrxxq+WUcylCPCQ6F4MujjBM1DX5V1aqI3Vw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: eslint: ^8.40 || 9 || 10 @@ -935,16 +891,16 @@ packages: eslint: optional: true - '@eslint/config-array@0.23.3': - resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==} + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.5.3': - resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==} + '@eslint/config-helpers@0.7.0': + resolution: {integrity: sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/core@1.1.1': - resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==} + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/js@10.0.1': @@ -956,44 +912,36 @@ packages: eslint: optional: true - '@eslint/object-schema@3.0.3': - resolution: {integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==} + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.6.1': - resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==} + '@eslint/plugin-kit@0.7.3': + resolution: {integrity: sha512-IkO+/KEUvwbVpiURZg+P7zF74z5Jxe0UgJxVni+RtoHQ6IZieXaO02kmadomap/q+l6bc/jdPGGqTjhuZnuz1Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@floating-ui/core@1.7.5': - resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} - '@floating-ui/core@1.8.0': resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==} - '@floating-ui/dom@1.7.6': - resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} - '@floating-ui/dom@1.8.0': resolution: {integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==} - '@floating-ui/utils@0.2.11': - resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - '@floating-ui/utils@0.2.12': resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} - '@fontsource-variable/caveat@5.3.0': - resolution: {integrity: sha512-Q3mjghoYIlXgwqBPJKZ4q6f3zu921Gq7UU76r9Z+NAmhapHfX130GIFpOCYf8vt2SIcgCi9RHDT7anfJKg/kiA==} - '@fontsource-variable/figtree@5.3.0': resolution: {integrity: sha512-VRVodD7OiG7apQwE8/2fMjaqpY/a0qRJqL5HtYj8CKIVps+9amaFcdfKmDIf7iqYQx6iPLlArVXAfKeIZmVcNQ==} - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.7': - resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': @@ -1008,166 +956,166 @@ packages: resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} - '@img/sharp-darwin-arm64@0.34.5': - resolution: {integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-darwin-arm64@0.35.5': + resolution: {integrity: sha512-QRUlFQ0WxvdWyqqG/WtI3iupfD5rBzmCHXSdPsY91sAtVtTo7Q4cb6zOccZ3gqEqkr0f1As1ehLqmEpDsRf+lg==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.5': - resolution: {integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-darwin-x64@0.35.5': + resolution: {integrity: sha512-+BR255RhDlpygUpOc/Jdt1nT6DQ3XG/ERo5wbcdOf5Q320dKtPCKPLR1LJs9VGXRaMa8l1uUa0tkCNOXiAxZUw==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.4': - resolution: {integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==} + '@img/sharp-freebsd-wasm32@0.35.5': + resolution: {integrity: sha512-Y/z91nEZ4uIBX5X3nfTovjU9lHNKFYbL2lpHCLVNmXQK03VIZvXBBt0KxbPGp2SdGSF+2mQU4e+hQaWOt86iAw==} + engines: {node: '>=20.9.0'} + os: [freebsd] + + '@img/sharp-libvips-darwin-arm64@1.3.4': + resolution: {integrity: sha512-5R89nBYiRdUlSWJxPhO+GVtaXzXSxKnRu/xqMn3KTA3L9EB9Oy/P+Nn2f2vlhPuUdy/Zusb2DarbyTpGCfEDuw==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.4': - resolution: {integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==} + '@img/sharp-libvips-darwin-x64@1.3.4': + resolution: {integrity: sha512-iR2OKH80yi0U+dUplyh3/xdpFvps6YkCwsXenIJxqxR1v9o+xtKTGbS9H7cps+2Vxjc8B1j96p75NmTGjIhtpQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.2.4': - resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} + '@img/sharp-libvips-linux-arm64@1.3.4': + resolution: {integrity: sha512-Y3dgX/6lE2QhQb+Gxy0WZxfg9MEm/JBjamZpS2IklP7xIQoKN4hzAm7KcMVGtaVDt3neE9OKBC7vAfonA/Lr1A==} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-arm@1.2.4': - resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} + '@img/sharp-libvips-linux-arm@1.3.4': + resolution: {integrity: sha512-LmRtTsOHuvM2+wlO2Db37dx5MiZhB0FvSunciw48YjdOkZz9KAiRbm8ujeMOA1INqmei5NapFxYEK1D1ZSidmw==} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-ppc64@1.2.4': - resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} + '@img/sharp-libvips-linux-ppc64@1.3.4': + resolution: {integrity: sha512-Le6boB8Tai0Nis+gIxIpKx68UDVVIqdR8Tin5Yf1z2LJJQLDJvCDRqRu+jC2qCoD+eIomonmOwB4smBRxfVpYQ==} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-riscv64@1.2.4': - resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} + '@img/sharp-libvips-linux-riscv64@1.3.4': + resolution: {integrity: sha512-aHkkIEHPRdQEegJN20MLmGtxYD9R2wQr3Cwpddnu5+YKMt6Uzax7S9h5gpZTo8wyrGuZSlfQ63OevL5mTyOC7Q==} cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-s390x@1.2.4': - resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} + '@img/sharp-libvips-linux-s390x@1.3.4': + resolution: {integrity: sha512-ra/mB6MikESDUO7Yg+Mi95bFBb9GsObURuhnOv3OqknjGe9sZrG8tCe9q0xSIGrtLgvgw0gKnFWcK4blSgQOuQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-libvips-linux-x64@1.2.4': - resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} + '@img/sharp-libvips-linux-x64@1.3.4': + resolution: {integrity: sha512-GJ//SSXbnwSDes02umB3nDJLFcQzw8a18V8fyhqr6tV515tOEMdImjjxj1AoafMRz56F3PHgftnj1QEKSU1zkw==} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': - resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} + '@img/sharp-libvips-linuxmusl-arm64@1.3.4': + resolution: {integrity: sha512-hvulFwtjUcagsis6BBxHwGFwWoNZjgYmULGVrZcyfNbjA8hKILbRxGg15/7w5HDyXHXUos/j6baAWqnCyQ2DWA==} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-libvips-linuxmusl-x64@1.2.4': - resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} + '@img/sharp-libvips-linuxmusl-x64@1.3.4': + resolution: {integrity: sha512-6zXKeE/p39I1AmA3cJG35eyBGNqNddLnUXjhwBnsGjFPWqf5VKkDBEqaEkPDoTEtkxwi2vv8Tcr2mDyP4So7Fg==} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-linux-arm64@0.34.5': - resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-arm64@0.35.5': + resolution: {integrity: sha512-LYVx5JTsOM2CBzmxreh+nl64/3H6Xb09iSLknqH47z2T2DFFxDeFLP5y4dJwe6H7uGQlHPyEEtIqyo3DYsRwdQ==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] libc: [glibc] - '@img/sharp-linux-arm@0.34.5': - resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-arm@0.35.5': + resolution: {integrity: sha512-LEaXK2WdXVK5ykcw0buWyPMsmLLL2vpHLD6yrNSW+JGEL3BZPA4tpKN6iaMc4AxTTAoaX/sU1rOL51lcIz48ZQ==} + engines: {node: '>=20.9.0'} cpu: [arm] os: [linux] libc: [glibc] - '@img/sharp-linux-ppc64@0.34.5': - resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-ppc64@0.35.5': + resolution: {integrity: sha512-QVxAAq8evVRI9ia2vqgwrmWucn5Dfv+JdWzj75pD8omHLPSP7f8p20O8jxzjCcuCEQEOtYOZUmX1hkiZ0kdevA==} + engines: {node: '>=20.9.0'} cpu: [ppc64] os: [linux] libc: [glibc] - '@img/sharp-linux-riscv64@0.34.5': - resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-riscv64@0.35.5': + resolution: {integrity: sha512-LtdreXguaavKODPIfzJ4kffx7UNt1omwtK0rch4EBbbSTXPnxWmYSayXdLJw0fJzQ97kHt1gL/yh4tvU+nCyRQ==} + engines: {node: '>=20.9.0'} cpu: [riscv64] os: [linux] libc: [glibc] - '@img/sharp-linux-s390x@0.34.5': - resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-s390x@0.35.5': + resolution: {integrity: sha512-UZasTOFiYzotTsGOCu42BfUzP6Tu6Do/947iRm1RsLKvlllxwGcn4RN27LibGWceix4Y+Pmw3jsnTcCQIgWjqA==} + engines: {node: '>=20.9.0'} cpu: [s390x] os: [linux] libc: [glibc] - '@img/sharp-linux-x64@0.34.5': - resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linux-x64@0.35.5': + resolution: {integrity: sha512-SxFtLTeJInhAA9Q836kux2vZNeOBQEx658qvbboZScr0wIARym3IcGmW7KpVD5sbVg0Ojy+udFQdayYIZyoNog==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] libc: [glibc] - '@img/sharp-linuxmusl-arm64@0.34.5': - resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linuxmusl-arm64@0.35.5': + resolution: {integrity: sha512-9HbMclmI1zlNkFRs3z9/eBtDjfD0sGlrX1z6b1qwmiFY5ElDLh4BC0LPBdVp7z1DXFiKlIcznf+ZlsuZzLxQqg==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [linux] libc: [musl] - '@img/sharp-linuxmusl-x64@0.34.5': - resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-linuxmusl-x64@0.35.5': + resolution: {integrity: sha512-4KOphqB035HrVdqLZfCgMzzERrQkkzOwRhl4OAkRO1YCldbaFjySXMaK534Mo0V+LndnlJk+sbUyLeU0ULyD1A==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [linux] libc: [musl] - '@img/sharp-wasm32@0.34.5': - resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-wasm32@0.35.5': + resolution: {integrity: sha512-Ptsga1su4tQx+LLF1ECS9U6nz5kmrXKo6XVbtR48Ke3ZRxxgaWBu7IDtEe1quo8hiupwm6WFqxVlXaSf7IINGQ==} + engines: {node: '>=20.9.0'} + + '@img/sharp-webcontainers-wasm32@0.35.5': + resolution: {integrity: sha512-hfhF/FmoQyTUkA0bIKFOtw536BQSeBMe6BF6QyWlrPxT754+TFLaZ7sKKTfvvM0yJgKgaYTwnFCIZ/GuDw5SUA==} + engines: {node: '>=20.9.0'} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.5': - resolution: {integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-win32-arm64@0.35.5': + resolution: {integrity: sha512-X4t7g+7ZA5DKblCBEXGjUqqemj4vczING/5viFwAL8h4N3qYeyjwdCvRLHi4EdOUI+2Z7UFlp1VM+p/AuEtm6Q==} + engines: {node: '>=20.9.0'} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.5': - resolution: {integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-win32-ia32@0.35.5': + resolution: {integrity: sha512-5Zm82LoBc43nhwNybZlG7Y1KO//Zhsn306fQl29ZOuStHLGTo3BWL83q3cznX0poxSAMuYL1On/BHBxkBeKr6A==} + engines: {node: ^20.9.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.5': - resolution: {integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + '@img/sharp-win32-x64@0.35.5': + resolution: {integrity: sha512-x76eH0vEiHlcMQu8Y8IenntaACtddpT6W0wmXtWrnKcnKI7ME5DdgqhAD6SEWOEl1v2zDvkZDhFA9KnURwpfqg==} + engines: {node: '>=20.9.0'} cpu: [x64] os: [win32] - '@inquirer/external-editor@1.0.3': - resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@internationalized/date@3.12.0': - resolution: {integrity: sha512-/PyIMzK29jtXaGU23qTvNZxvBXRtKbNnGDFD+PY6CZw/Y8Ex8pFUzkuCJCG9aOqmShjqhS9mPqP6Dk5onQY8rQ==} + '@internationalized/date@3.12.4': + resolution: {integrity: sha512-M1dEn4c1U1HsSlaVR8upZtSqvXrTkHDfv18H01uCSJyjVLDxnBR38v/fMxecmlwXKR4i9HeZcmgQAPE6A+aGJQ==} '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1179,9 +1127,6 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/sourcemap-codec@1.6.0': resolution: {integrity: sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==} @@ -1191,90 +1136,102 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@manypkg/find-root@1.1.0': - resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + '@keyv/bigmap@1.3.1': + resolution: {integrity: sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==} + engines: {node: '>= 18'} + peerDependencies: + keyv: ^5.6.0 + + '@keyv/serialize@1.1.1': + resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@manypkg/get-packages@1.1.3': - resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + '@manypkg/find-root@3.1.0': + resolution: {integrity: sha512-BcSqCyKhBVZ5YkSzOiheMCV41kqAFptW6xGqYSTjkVTl9XQpr+pqHhwgGCOHQtjDCv7Is6EFyA14Sm5GVbVABA==} + engines: {node: '>=20.0.0'} - '@mapbox/jsonlint-lines-primitives@2.0.2': - resolution: {integrity: sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==} - engines: {node: '>= 0.6'} + '@manypkg/get-packages@3.1.0': + resolution: {integrity: sha512-0TbBVyvPrP7xGYBI/cP8UP+yl/z+HtbTttAD7FMAJgn/kXOTwh5/60TsqP9ZYY710forNfyV0N8P/IE/ujGZJg==} + engines: {node: '>=20.0.0'} - '@mapbox/point-geometry@1.1.0': - resolution: {integrity: sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==} + '@manypkg/tools@2.1.2': + resolution: {integrity: sha512-6QEf6yqFbETdwGITKq57aYoPfX/3K8XFNwsAlx0C1M7o8cb79sv1M3w+tWuWvIcSbNqrLF7OD7YpZMVVz335hQ==} + engines: {node: '>=20.0.0'} - '@mapbox/tiny-sdf@2.0.7': - resolution: {integrity: sha512-25gQLQMcpivjOSA40g3gO6qgiFPDpWRoMfd+G/GoppPIeP6JDaMMkMrEJnMZhKyyS6iKwVt5YKu02vCUyJM3Ug==} + '@mapbox/jsonlint-lines-primitives@2.0.3': + resolution: {integrity: sha512-0SElaV0uMxEnxzBhhX9WTuPyUeMsAN/SS0i16tjuba4/mio63MG9khjC1a0JAiPGXAwvwm4UfHJURCN7nyudQg==} + engines: {node: '>= 22'} - '@mapbox/unitbezier@0.0.1': - resolution: {integrity: sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==} + '@mapbox/point-geometry@1.1.0': + resolution: {integrity: sha512-YGcBz1cg4ATXDCM/71L9xveh4dynfGmcLDqufR+nQQy3fKwsAZsWd/x4621/6uJaeB9mwOHE6hPeDgXz9uViUQ==} - '@mapbox/vector-tile@2.0.4': - resolution: {integrity: sha512-AkOLcbgGTdXScosBWwmmD7cDlvOjkg/DetGva26pIRiZPdeJYjYKarIlb4uxVzi6bwHO6EWH82eZ5Nuv4T5DUg==} + '@mapbox/tiny-sdf@2.3.0': + resolution: {integrity: sha512-gBvcNDBBB66bgQYvnaJ6Jk+VCaMmVq5+IZR2kWPisT88Z8s0kBQt6hfVi8QgRW8Vpg0UWZzBA4ZSyzHHC+VeRA==} - '@mapbox/whoots-js@3.1.0': - resolution: {integrity: sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==} - engines: {node: '>=6.0.0'} + '@mapbox/unitbezier@1.0.0': + resolution: {integrity: sha512-fqd515fjBmANKGGsQ286E2Wvj/XvDFpGzwJxq4CI6jMQue6Oy04uCKp+JWKF00xRTmk6cEu1jPJ9p3xqH8YWqQ==} - '@maplibre/geojson-vt@5.0.4': - resolution: {integrity: sha512-KGg9sma45S+stfH9vPCJk1J0lSDLWZgCT9Y8u8qWZJyjFlP8MNP1WGTxIMYJZjDvVT3PDn05kN1C95Sut1HpgQ==} + '@mapbox/vector-tile@3.0.0': + resolution: {integrity: sha512-Qf10S1uIHMk20ri/IVBnpS+esUEkVaR5Hftmz88jTInrpmWgPGJfPe3LVjjlE77trLx8tH6qjTG7uWH9hIq/0Q==} - '@maplibre/geojson-vt@6.0.4': - resolution: {integrity: sha512-HYv3POhMRCdhP3UPPATM/hfcy6/WuVIf5FKboH8u/ZuFMTnAIcSVlq5nfOqroLokd925w2QtE7YwquFOIacwVQ==} + '@maplibre/geojson-vt@6.3.0': + resolution: {integrity: sha512-3Zw2jsU9pIJG3G2CQFbLjWj2MlAHodhD7cSY+15iywUuLmmkgzcKRnueVRZ4AcC/5wOtfhidcJAAzBpoBNs3Xg==} - '@maplibre/maplibre-gl-style-spec@24.7.0': - resolution: {integrity: sha512-Ed7rcKYU5iELfablg9Mj+TVCsXsPBgdMyXPRAxb2v7oWg9YJnpQdZ5msDs1LESu/mtXy3Z48Vdppv2t/x5kAhw==} + '@maplibre/maplibre-gl-style-spec@26.4.4': + resolution: {integrity: sha512-hG4RZR4PBd/+6A3ODdZ3AnQRF106ZQk1y3bhwDg8bH/A4Oz2tnRUJVVWs9BZa6gXZ1d3UKe89C+Mm+olGBELvA==} hasBin: true - '@maplibre/mlt@1.1.8': - resolution: {integrity: sha512-8vtfYGidr1rNkv5IwIoU2lfe3Oy+Wa8HluzQYcQi9cveU9K3pweAal/poQj4GJ0K/EW4bTQp2wVAs09g2yDRZg==} + '@maplibre/mlt@1.3.0': + resolution: {integrity: sha512-7M2O7ABM80Oi8XPkfkrjKB8mOBIxGoVgkA52Mu4RMWoBvvMdagQ522+WxVYujZsMpqIr3BpzrTbXrm4k8lCzCQ==} + + '@maplibre/vt-pbf@4.3.3': + resolution: {integrity: sha512-dEe5XUd64RQbxNxy2OzIkJnwNDWjVmSXjCd0A7zLirm7QJ/WWbmtDFIkfsiM4yt1cplqzG6oSivRYeWx1SM1yg==} - '@maplibre/vt-pbf@4.3.0': - resolution: {integrity: sha512-jIvp8F5hQCcreqOOpEt42TJMUlsrEcpf/kI1T2v85YrQRV6PPXUcEXUg5karKtH6oh47XJZ4kHu56pUkOuqA7w==} + '@mary-ext/ds-queue@0.1.0': + resolution: {integrity: sha512-7CIK/NZrACIzPq2x8SyRFMe7glujx4v1foQfJV6/WOvfosMcn/XOX+ZzrGo3+vjIGE5aEmQpFjWO3lktnOu+xQ==} '@mary-ext/event-iterator@1.0.0': resolution: {integrity: sha512-l6gCPsWJ8aRCe/s7/oCmero70kDHgIK5m4uJvYgwEYTqVxoBOIXbKr5tnkLqUHEg6mNduB4IWvms3h70Hp9ADQ==} + '@mary-ext/event-iterator@1.1.1': + resolution: {integrity: sha512-G+moITMlbSWPoB/ZGY52g2+8EjVIVcXnsnB9TMj6cF9kS9ZND+pcxzMkcIC0jM9ULYenNecf1ctZ7F6IxDcI9A==} + '@mary-ext/simple-event-emitter@1.0.1': resolution: {integrity: sha512-9+VvZisxZ/gSg+JJH7hmXaA8Qj42Qjz3O58RSB+INYc8iLA0icATZxHB9vKbj59ojDGZjO3hCKzMXocx3L0H8w==} - '@napi-rs/wasm-runtime@1.1.1': - resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} + '@mary-ext/simple-event-emitter@1.1.0': + resolution: {integrity: sha512-Tx5raGtZ0n3f42+04rDt0G6n008g5FwxPQIkZcsMSkKB2dNTQnRkvk/iaa59khud71Ckiz1pH9HPetGO7w/Xaw==} '@noble/secp256k1@3.0.0': resolution: {integrity: sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg==} - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@noble/secp256k1@3.2.0': + resolution: {integrity: sha512-Z3ZAWOTxJ0EuTuZTi7Y69iK7GgrLHh8sgm45lVDhg/b3Nk1TpAiKhick2KkZisHuupeepSkyIydN/J459SdX1w==} - '@number-flow/svelte@0.4.0': - resolution: {integrity: sha512-9tnowrlZlBV3IVe3Gm1V7yXSf4Ugag2k7iW45xqb04HXSa1ApEImopvGWAjJpHDvS849o+UCb0YH461Mtde9lA==} + '@number-flow/svelte@0.4.2': + resolution: {integrity: sha512-svlhRTdBXl1MKfRcrCllqvSZkb2qt0Ep+qEh3TUAcv8E4pnf9wJfhKzx5ISKZcFbpS117i+257U4LHyuTYdTuA==} peerDependencies: svelte: ^4 || ^5 '@oomfware/eval@0.1.0': resolution: {integrity: sha512-EIkukTd3zDQEHUjcfFRDq79Jgm4OEyUrEUvp/SwgjfoH2POaE5cvaswIonFwdt8fSzJF5xtAdgcgIoKD8sPpjg==} - '@optique/core@0.6.11': - resolution: {integrity: sha512-GVLFihzBA1j78NFlkU5N1Lu0jRqET0k6Z66WK8VQKG/a3cxmCInVGSKMIdQG8i6pgC8wD5OizF6Y3QMztmhAxg==} + '@oomfware/kempt@0.1.4': + resolution: {integrity: sha512-7ik6b58VC17dMX2SZq0LUHaOYupavbtXFA3UxIsAPV2Gc8+HXv9BLJ9Di52zn/8RkDWhoLf0TAcfGYHlnHUiuw==} + + '@optique/core@1.3.6': + resolution: {integrity: sha512-BXVuVyxP9bg8FbyvBYrSHisnAeG3XTf1xcuUjAWgDWKfzZssMGbSrMdiv4tA+BK3+CrSo6no+uHWpiHh4HMKeg==} engines: {bun: '>=1.2.0', deno: '>=2.3.0', node: '>=20.0.0'} - '@optique/run@0.6.11': - resolution: {integrity: sha512-tsXBEygGSzNpFK2gjsRlXBn7FiScUeLFWIZNpoAZ8iG85Km0/3K9xgqlQAXoQ+uEZBe4XplnzyCDvmEgbyNT8w==} + '@optique/run@1.3.6': + resolution: {integrity: sha512-uxlHO8vG/5ni1V+t+jdmYqiyYYY5uOevO/6U866oBpnlOxOGn2ZWIlPpDXAU3e5GRu4VecbeXoNff18yRDGoQw==} engines: {bun: '>=1.2.0', deno: '>=2.3.0', node: '>=20.0.0'} - '@oxc-project/types@0.122.0': - resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} + '@oxc-project/types@0.155.0': + resolution: {integrity: sha512-SeE8JPwW1xs1tHeNycjUtUBdhorRa8o4jlvjwk49R7/Z291i+4DQa7JJIgOm/TaYQZx+QrPQbVJ/9c8dMIZN8Q==} + + '@pnpm/deps.graph-sequencer@1100.0.1': + resolution: {integrity: sha512-pOr5+q1fLYKwFN3LAJuGZEnfXDcQ73zqgDHMtGy+K+uIoUqyY+6MeDCWFwfu+4EFuq76I5EPFofoNAI+Bmmq4A==} + engines: {node: '>=22.13'} '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -1288,107 +1245,108 @@ packages: '@poppinss/exception@1.2.3': resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} - '@publint/pack@0.1.4': - resolution: {integrity: sha512-HDVTWq3H0uTXiU0eeSQntcVUTPP3GamzeXI41+x7uU9J65JgWQh3qWZHblR1i0npXfFtF+mxBiU2nJH8znxWnQ==} + '@publint/pack@0.1.7': + resolution: {integrity: sha512-4EDEmvxWtgsCnnVeBvtFIFZtUhPPt1+bA9JrSwU4Sa//6oKtzCSlGGXYJr44OD9aGISymbieJ4mCKHUygUDU+g==} engines: {node: '>=18'} - '@rolldown/binding-android-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==} + '@rolldown/binding-android-arm-eabi@1.2.15': + resolution: {integrity: sha512-aLcgK9gIJ3YRvrrtfSBbRa27F5WrpiTaPulnFpsHPxpUHgFlSgnU4854MHwoRGEBhfRJDWCS2WQ7lIjskE9Olw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@rolldown/binding-android-arm64@1.2.15': + resolution: {integrity: sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==} + '@rolldown/binding-darwin-arm64@1.2.15': + resolution: {integrity: sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.12': - resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==} + '@rolldown/binding-darwin-x64@1.2.15': + resolution: {integrity: sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.12': - resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==} + '@rolldown/binding-freebsd-x64@1.2.15': + resolution: {integrity: sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': - resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.15': + resolution: {integrity: sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==} + '@rolldown/binding-linux-arm64-gnu@1.2.15': + resolution: {integrity: sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': - resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} + '@rolldown/binding-linux-arm64-musl@1.2.15': + resolution: {integrity: sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} + '@rolldown/binding-linux-ppc64-gnu@1.2.15': + resolution: {integrity: sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} + '@rolldown/binding-linux-s390x-gnu@1.2.15': + resolution: {integrity: sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': - resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} + '@rolldown/binding-linux-x64-gnu@1.2.15': + resolution: {integrity: sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': - resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} + '@rolldown/binding-linux-x64-musl@1.2.15': + resolution: {integrity: sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': - resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} + '@rolldown/binding-openharmony-arm64@1.2.15': + resolution: {integrity: sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': - resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': - resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==} + '@rolldown/binding-win32-arm64-msvc@1.2.15': + resolution: {integrity: sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': - resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==} + '@rolldown/binding-win32-x64-msvc@1.2.15': + resolution: {integrity: sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.12': - resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} '@sindresorhus/is@7.2.0': resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} @@ -1400,129 +1358,139 @@ packages: peerDependencies: svelte: ^5.0.0 - '@speed-highlight/core@1.2.15': - resolution: {integrity: sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==} + '@speed-highlight/core@1.2.24': + resolution: {integrity: sha512-qeW2e1l78afw8VhRPfPQ1Gjj+KU5XFQ/OFV5ti6eTa9bruO7mJyZtA4vw0ofqmA3tKCkROE9xLk3VZoeRc98nw==} '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@sveltejs/acorn-typescript@1.0.13': - resolution: {integrity: sha512-wgKggnhZVL9Bfx1OaKKTrYY9BFRk6C8UAkQNUcIv1+llzYrIqy+RZm5HPKzn0NpEBvTVhTqB4kQyllZywsRBRQ==} + '@svelte-atproto/oauth@0.4.1': + resolution: {integrity: sha512-ctjduBC7AQ2PPlq62SVecV9oU48/oGVOWlyGaagiQtnQz77qqGkO+E7OGDrAuREP/X/hAF6t2a46Xfj3APCYhQ==} + hasBin: true peerDependencies: - acorn: ^8.9.0 + '@sveltejs/kit': ^2.0.0 || ^3.0.0 + svelte: ^5.0.0 - '@sveltejs/acorn-typescript@1.0.9': - resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} + '@sveltejs/acorn-typescript@1.0.13': + resolution: {integrity: sha512-wgKggnhZVL9Bfx1OaKKTrYY9BFRk6C8UAkQNUcIv1+llzYrIqy+RZm5HPKzn0NpEBvTVhTqB4kQyllZywsRBRQ==} peerDependencies: acorn: ^8.9.0 - '@sveltejs/adapter-cloudflare@7.2.8': - resolution: {integrity: sha512-bIdhY/Fi4AQmqiBdQVKnafH1h9Gw+xbCvHyUu4EouC8rJOU02zwhi14k/FDhQ0mJF1iblIu3m8UNQ8GpGIvIOQ==} + '@sveltejs/adapter-cloudflare@8.0.1': + resolution: {integrity: sha512-KISMvrFOLpn7sm7wQr26XhkVIBYQLq1wYcFZvNgHqWxyN/kVZb/ldu7+jJtWi+Ai0mNw+OPRecHadzEB5TGQ6A==} peerDependencies: - '@sveltejs/kit': ^2.0.0 - wrangler: ^4.0.0 + '@sveltejs/kit': ^3.0.0-next.0 + wrangler: ^4.118.0 - '@sveltejs/kit@2.55.0': - resolution: {integrity: sha512-MdFRjevVxmAknf2NbaUkDF16jSIzXMWd4Nfah0Qp8TtQVoSp3bV4jKt8mX7z7qTUTWvgSaxtR0EG5WJf53gcuA==} - engines: {node: '>=18.13'} + '@sveltejs/kit@3.1.0': + resolution: {integrity: sha512-JTWlq2HQlkqx6vIoxhC0R6sc4WVqbQoRyEmr5YlqKmiYbzY1U3awtSWTmjMLlS056a49AmkQR6rnNANXIE8B0Q==} + engines: {node: '>=22.17'} hasBin: true peerDependencies: '@opentelemetry/api': ^1.0.0 - '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0 - svelte: ^4.0.0 || ^5.0.0-next.0 - typescript: ^5.3.3 - vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0 + '@sveltejs/vite-plugin-svelte': ^7.0.0 + svelte: ^5.57.1 + typescript: ^6.0.0 + vite: ^8.0.12 peerDependenciesMeta: '@opentelemetry/api': optional: true typescript: optional: true - '@sveltejs/package@2.5.7': - resolution: {integrity: sha512-qqD9xa9H7TDiGFrF6rz7AirOR8k15qDK/9i4MIE8te4vWsv5GEogPks61rrZcLy+yWph+aI6pIj2MdoK3YI8AQ==} - engines: {node: ^16.14 || >=18} + '@sveltejs/load-config@0.2.3': + resolution: {integrity: sha512-VT3qmUb8pRV2QrZjd8iAmtg8lf4W0TIjZbvXtz5MKei/q96teWZgGJyyidJzOjzZzvdq616eSRVeMYIQChUTAQ==} + engines: {node: '>= 18.0.0'} + + '@sveltejs/package@3.0.1': + resolution: {integrity: sha512-QblEaqd2r685OZWVO4I0DLAKUOozIp7YxvahxPYntv+4zzMQbisX2vubBEg2d8riF+bPF13AqTzMFlhyuSlaRQ==} + engines: {node: '>=22'} hasBin: true peerDependencies: svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 + typescript: ^6.0.0 + peerDependenciesMeta: + typescript: + optional: true - '@sveltejs/vite-plugin-svelte@7.0.0': - resolution: {integrity: sha512-ILXmxC7HAsnkK2eslgPetrqqW1BKSL7LktsFgqzNj83MaivMGZzluWq32m25j2mDOjmSKX7GGWahePhuEs7P/g==} + '@sveltejs/vite-plugin-svelte@7.3.1': + resolution: {integrity: sha512-ZPsLN8B1e/En+Ak5s4V7srFDT532oS0qieLsQwu63NGKsS+iAjoO2Js1BochlHlglcU+Pt7WAO3C5Ee+4f6gVA==} engines: {node: ^20.19 || ^22.12 || >=24} peerDependencies: svelte: ^5.46.4 vite: ^8.0.0-beta.7 || ^8.0.0 - '@swc/helpers@0.5.20': - resolution: {integrity: sha512-2egEBHUMasdypIzrprsu8g+OEVd7Vp2MM3a2eVlM/cyFYto0nGz5BX5BTgh/ShZZI9ed+ozEq+Ngt+rgmUs8tw==} + '@swc/helpers@0.5.23': + resolution: {integrity: sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==} '@tailwindcss/forms@0.5.11': resolution: {integrity: sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==} peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' - '@tailwindcss/node@4.2.2': - resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==} + '@tailwindcss/node@4.3.3': + resolution: {integrity: sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==} - '@tailwindcss/oxide-android-arm64@4.2.2': - resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==} + '@tailwindcss/oxide-android-arm64@4.3.3': + resolution: {integrity: sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==} engines: {node: '>= 20'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.2.2': - resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==} + '@tailwindcss/oxide-darwin-arm64@4.3.3': + resolution: {integrity: sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==} engines: {node: '>= 20'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.2.2': - resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==} + '@tailwindcss/oxide-darwin-x64@4.3.3': + resolution: {integrity: sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==} engines: {node: '>= 20'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.2.2': - resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==} + '@tailwindcss/oxide-freebsd-x64@4.3.3': + resolution: {integrity: sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==} engines: {node: '>= 20'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': - resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': + resolution: {integrity: sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==} engines: {node: '>= 20'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': - resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==} + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': + resolution: {integrity: sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-arm64-musl@4.2.2': - resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==} + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': + resolution: {integrity: sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==} engines: {node: '>= 20'} cpu: [arm64] os: [linux] libc: [musl] - '@tailwindcss/oxide-linux-x64-gnu@4.2.2': - resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==} + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': + resolution: {integrity: sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==} engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [glibc] - '@tailwindcss/oxide-linux-x64-musl@4.2.2': - resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==} + '@tailwindcss/oxide-linux-x64-musl@4.3.3': + resolution: {integrity: sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==} engines: {node: '>= 20'} cpu: [x64] os: [linux] libc: [musl] - '@tailwindcss/oxide-wasm32-wasi@4.2.2': - resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==} + '@tailwindcss/oxide-wasm32-wasi@4.3.3': + resolution: {integrity: sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -1533,34 +1501,34 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': - resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==} + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': + resolution: {integrity: sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==} engines: {node: '>= 20'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.2.2': - resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==} + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': + resolution: {integrity: sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==} engines: {node: '>= 20'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.2.2': - resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==} + '@tailwindcss/oxide@4.3.3': + resolution: {integrity: sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==} engines: {node: '>= 20'} - '@tailwindcss/typography@0.5.19': - resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} + '@tailwindcss/typography@0.5.20': + resolution: {integrity: sha512-hwbzQuNUfcPvbegQFatVPl/MY/tcM9KLl963hQ5laJKPh81TEZ1+dNG9PirGvcaDBkp+BCshExAyKVPW91dozw==} peerDependencies: - tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' + tailwindcss: '>=3.0.0 || >=4.0.0 || insiders' - '@tailwindcss/vite@4.2.2': - resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==} + '@tailwindcss/vite@4.3.3': + resolution: {integrity: sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==} peerDependencies: vite: ^5.2.0 || ^6 || ^7 || ^8 - '@takumi-rs/helpers@2.16.3': - resolution: {integrity: sha512-RVa02yhVPde1ZBR2uJEDICC2k0aFPInoeaZqFnwBIGeoK0hlVUDU9DewZX62KFj+0TeWZPnUKqAwbBzAz84VAg==} + '@takumi-rs/helpers@2.18.2': + resolution: {integrity: sha512-HHVdYmGxLos+Jn67mYU64gc+nW372zP8pF6zCnLzn3JMbGtcX5jV7a0N5uZseXkGrfGR07tsdWQbTkpO4Ms+WA==} engines: {node: '>=18'} peerDependencies: preact: ^10.0.0 || ^11.0.0 @@ -1571,8 +1539,8 @@ packages: react: optional: true - '@takumi-rs/wasm@2.16.3': - resolution: {integrity: sha512-5Qjbqdj27YlNm1EB/NaqMyAR4wRrCXffTWo5j79rFrvqUyl3U2wnPrmEibE5IAo+KwENduQpXcNp2OLSvJ8cDw==} + '@takumi-rs/wasm@2.18.2': + resolution: {integrity: sha512-Ap8rA5TRcfLRpKagM3NK0JGKo4TO0DrTI7fAFpKM5R04yIVvibT8Qq/FqFcYBqWdlVxfxwzdMAdn/Glxkx9WAA==} engines: {node: '>=20.19'} peerDependencies: csstype: '*' @@ -1644,15 +1612,9 @@ packages: '@tiptap/core': 3.32.0 '@tiptap/pm': 3.32.0 - '@tybys/wasm-util@0.10.1': - resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} - '@types/cookie@0.6.0': - resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/d3-geo@3.1.1': resolution: {integrity: sha512-65Emv9fQiQQqphLlRkuQ5ypPsOmWPhtBGCMv61JDPEPMvsx+gzhGf74yw1a78xFKPj6zw4AgQICJoQv0vK9M2w==} @@ -1662,9 +1624,6 @@ packages: '@types/esrecurse@4.3.1': resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} @@ -1674,95 +1633,86 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/node@12.20.55': - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - - '@types/node@22.20.0': - resolution: {integrity: sha512-QWlFW2wf3nTjC13/DqRnBpR4ZO36VJH/JVBkA/vcnmbTBNQIlnObqyqZE1tUR7+Ni23Lda8R1BxMfbXRpCUx5g==} - - '@types/supercluster@7.1.3': - resolution: {integrity: sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==} + '@types/node@24.19.2': + resolution: {integrity: sha512-93d49wCWJkCyN87MxLpNN6KXPCwFw7bVUg79mGUV1OS40JGWwVCr8n61DXCSqz7CV6/VfPkb7xec7uP2M+QHWQ==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} - '@typescript-eslint/eslint-plugin@8.57.2': - resolution: {integrity: sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==} + '@typescript-eslint/eslint-plugin@8.72.1': + resolution: {integrity: sha512-5CokTWXpmbylfFabsbvHC0CAw3XLaGnoa+nFJX5FR592h/LoZsENUE6p/rg5xvkKrFEXz6pYmgI29AgXc2N3BQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.57.2 + '@typescript-eslint/parser': ^8.72.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/parser@8.57.2': - resolution: {integrity: sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==} + '@typescript-eslint/parser@8.72.1': + resolution: {integrity: sha512-ZGwZP4OCfyA0AQTpEAMWz+rtX01DRhQWW5hB0ucKDEIX5U7jdmPSaMx94rQfaPAQzIYz2BimOgKOJtjfpRFQ9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.57.2': - resolution: {integrity: sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==} + '@typescript-eslint/project-service@8.72.1': + resolution: {integrity: sha512-fAuVMkwdO/huI8nyo/WKnNKf6Gag93S56Rh3Ts5mGcavwSdaN8tRg1gCeIGX8PF+nzp1BjGfO4gHhGzW1J6jTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/scope-manager@8.57.2': - resolution: {integrity: sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==} + '@typescript-eslint/scope-manager@8.72.1': + resolution: {integrity: sha512-lC/t6eMCZZQAAKZEYGL6RDVSuFehpdmMT6h+nJIjIa6oylN/PwDgDVtEIbB7O9xFfZYtZAYLoLlDNWKJhtF+uQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.57.2': - resolution: {integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==} + '@typescript-eslint/tsconfig-utils@8.72.1': + resolution: {integrity: sha512-e4D5R5vpeAEPBxT2BAzsFQL3sbwyeeeo5+aczgNSRK1V734jE7pTqaGFU+fXapWEQwnZbpFaTn32+Z8DwS6OTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/type-utils@8.57.2': - resolution: {integrity: sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==} + '@typescript-eslint/type-utils@8.72.1': + resolution: {integrity: sha512-iY2wlmyrXJmx4yxUGP3aYCFF3cA/6ShddOKmLU2dx7LnEykbAM8WThlxZEfd1NddqceF6eJmZUayxx9oKIYNlg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/types@8.57.2': - resolution: {integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==} + '@typescript-eslint/types@8.72.1': + resolution: {integrity: sha512-LmE5IhQet1BWOWEXqBrVtBPsMAOQ6Nzk35d+WLh3mk4EUF33sqlfxjio1MdYeSvKSG5skactKKuixBIKXhL4Rw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.57.2': - resolution: {integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==} + '@typescript-eslint/typescript-estree@8.72.1': + resolution: {integrity: sha512-DAlUoUV93hIvrtIQLwCbmZQYVZwOMhiHJrOVUUIWicFZaIYjTRqlY3I/NZevfkLmSqkNHRu2qYDcq9lrn16oOQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/utils@8.57.2': - resolution: {integrity: sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==} + '@typescript-eslint/utils@8.72.1': + resolution: {integrity: sha512-5v5liypurJBFHCBNqh/RjsymAD+VWcE0djuGY/BUqp5fC3Qn+luWDEksjuTtWjPn6i5zQlUtkZCRG/CYG0yCkA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/visitor-keys@8.57.2': - resolution: {integrity: sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==} + '@typescript-eslint/visitor-keys@8.72.1': + resolution: {integrity: sha512-SB8xqipSzZHUePCCLNeYxqnxq83X61/qzNhjQGbTfjxGZIeOEP7tBgWYX05Tcd6CgE02WdTJnh5b8kMZJ/+bnQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vitest/browser-playwright@4.1.8': - resolution: {integrity: sha512-SR7FqgegaexEg73xvf3ArtygXegagMdXnL0EZMpxrWvvhQxvicD/E8p0ib0J91riPRtQUViyh67Xjw3NqvyhVg==} + '@vitest/browser-playwright@5.0.5': + resolution: {integrity: sha512-lcdThFUUcMV9mGGV1SUiZXPxfjgW4CssA7o3STxzh8WK0tT2r526kc12tZIBRZfoLMwkhxjLmMXkWXONzdsDQw==} peerDependencies: playwright: '*' - vitest: 4.1.8 + vitest: 5.0.5 - '@vitest/browser@4.1.8': - resolution: {integrity: sha512-u21VzX07HzlJYpFgkxmjEXar/tG2UqWGgyGG/46SrrPc7rSdCTPw5vuowopO9CIqF8UCUQzDFdbVnNpw6N0BfQ==} + '@vitest/browser@5.0.5': + resolution: {integrity: sha512-IDMoZX/iZ8rkilw7weaSgN8tJ7iZ9hUv0wYoKXyiyjWjWFwLSWAY707DcVTgxTYOudWC1E3HA9LYn7kVa9a7uQ==} peerDependencies: - vitest: 4.1.8 + vitest: 5.0.5 - '@vitest/expect@4.1.8': - resolution: {integrity: sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ==} - - '@vitest/mocker@4.1.8': - resolution: {integrity: sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==} + '@vitest/mocker@5.0.5': + resolution: {integrity: sha512-xLL3lkDegJZw+MGoGaCCsFayDZthGgpAtr3Vziyfc4p7xH89K7KRPcRBBh/kEYm0Aqkt5DtTmkYpBtRV/FrHZg==} peerDependencies: - msw: ^2.4.9 + msw: ^2.4.9 || ^3.0.0 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: @@ -1770,61 +1720,37 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.8': - resolution: {integrity: sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==} - - '@vitest/runner@4.1.8': - resolution: {integrity: sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==} + '@vitest/pretty-format@5.0.5': + resolution: {integrity: sha512-24sSdIlMA9DVPXnYiB9siwU0bTd887Y9jX3+vabztCSsvHwo7ipvJ/a2L3Rljw8+2rK1f5fCj3h5U9I/Jsqgbw==} - '@vitest/snapshot@4.1.8': - resolution: {integrity: sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==} + '@vitest/spy@5.0.5': + resolution: {integrity: sha512-lwJRExuH417257Q5wv9QYugN9IMJkoxcrKrYxGPQkBzl7wlNpTUxD/5yNX4ESKVUIShKPgkGchYPFMWOOk0wzw==} - '@vitest/spy@4.1.8': - resolution: {integrity: sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==} + '@vitest/ui@5.0.5': + resolution: {integrity: sha512-dCoGUOdgmCaSB2g+WQ/spPCBkytAWdNUkFSXY4z+eYp2d8JEOY8v0uDRaJTG9qf/kTlTVZ4CuYMYMz/f1HS/qQ==} + peerDependencies: + vitest: 5.0.5 - '@vitest/utils@4.1.8': - resolution: {integrity: sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==} + '@vitest/utils@5.0.5': + resolution: {integrity: sha512-/rBu7gzLDQI/SC79Tn98b5DwOgaHU/Gt4I9OVeP3YofzNaYtbImRCOJQmT1S6vOJg9gEIlWC+r3QxKkjuSa1nQ==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.19.0: resolution: {integrity: sha512-oJlA3XiRm7Cyk6qFD2Jn8ak9B7jSy0qy00ADO3+8dpT0LSjFihQYv4C02LFCSYJV3Q37xYwwRy5m+IpIiUzqWw==} engines: {node: '>=0.4.0'} hasBin: true - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - - ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} aria-query@5.3.1: resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} engines: {node: '>= 0.4'} - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -1841,19 +1767,11 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} - engines: {node: '>=4'} + bidi-js@1.1.0: + resolution: {integrity: sha512-fX1Onk0tdVPC7obPWB5EbJ1z7NVhLq4m2xZLq2YXBkxzMXIGRpNMU88n0EPgWseKl12J7zXs7qrDxPK4sRs2fg==} - bits-ui@2.16.3: - resolution: {integrity: sha512-5hJ5dEhf5yPzkRFcxzgQHScGodeo0gK0MUUXrdLlRHWaBOBGZiacWLG96j/wwFatKwZvouw7q+sn14i0fx3RIg==} - engines: {node: '>=20'} - peerDependencies: - '@internationalized/date': ^3.8.1 - svelte: ^5.33.0 - - bits-ui@2.20.2: - resolution: {integrity: sha512-cb1eQD1wZEhJWb1dTLiAdYWqeUI5v7f+7EAHmetxBuELI9lo4cpAIfGEjald/PR4wTR80Fu5DFH+IaY1OKn+tg==} + bits-ui@2.20.2: + resolution: {integrity: sha512-cb1eQD1wZEhJWb1dTLiAdYWqeUI5v7f+7EAHmetxBuELI9lo4cpAIfGEjald/PR4wTR80Fu5DFH+IaY1OKn+tg==} engines: {node: '>=20'} peerDependencies: '@internationalized/date': ^3.8.1 @@ -1862,28 +1780,28 @@ packages: blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} - engines: {node: 18 || 20 || >=22} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + brace-expansion@5.0.12: + resolution: {integrity: sha512-YovQ3rzhaLMIrDjNDMkNS01tea93qhEhG5xy8f6+R0l+dw3Ki+5sCoIoI942iuLZTHWogWktgwVDhU09iNEimQ==} + engines: {node: 20 || >=22} cac@7.0.0: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} + cac@7.1.0: + resolution: {integrity: sha512-LMDU/U2yA4IPIY8KT0NsNPWEYZvAMkbgyspxJ6btJaYV+WMDOHAZCmB0lsTObiHaRS1V/ztKAl7+TSkTqXyeoA==} + engines: {node: '>=20.19.0'} + + cacheable@2.5.0: + resolution: {integrity: sha512-60cyAOytib/OzBw1JNSoSV/boK1AtHryDIjvVBk7XbN4ugfkM3+Sry7fEjNgPMGgOjuaZPAp8ruZ0Cxafwyq9g==} + canvas-confetti@1.9.4: resolution: {integrity: sha512-yxQbJkAVrFXWNbTUjPqjF7G+g6pDotOUHGbkZq2NELZUMDpiJ85rIEazVb8GTaAptNW2miJAXbs1BtioA251Pw==} - chai@6.2.2: - resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + chai@6.3.0: + resolution: {integrity: sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==} engines: {node: '>=18'} - chardet@2.1.1: - resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -1896,25 +1814,16 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - confbox@0.1.8: - resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} - - confbox@0.3.1: - resolution: {integrity: sha512-cKUSoKa8YxFZZSmraVi7onONx3amu77ngK3kGpsYHDH7drPwCRkQE1RYMPlLRrMtnciRj274XNRxcHxnKmDSnA==} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} - engines: {node: '>= 0.6'} - cookie@1.1.1: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} engines: {node: '>=18'} - core-js@3.49.0: - resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==} + cookie@2.0.1: + resolution: {integrity: sha512-yuToqVvRrj6pfDXREyQAAv8SkAEk/8GS3jQRTiUMm66TVtBYmqQeoEjL2Lmq8Rpo6271vH76InTChTitEAm65w==} + engines: {node: '>=22'} cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} @@ -1959,54 +1868,34 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} - devalue@5.6.4: - resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==} - devalue@5.9.4: resolution: {integrity: sha512-sPAT4pztbu6586/hrhOnMKS17IJrvg12mXiSPSS3W5qDeN2RGgvZ0diZCm31dBbnevfVmujNO3IM2wrS4Y2Rhg==} diacritics@1.3.0: resolution: {integrity: sha512-wlwEkqcsaxvPJML+rDh/2iS824jbREk6DUMUKkEaSlxdYHeS43cClJtsWglvw2RfeXGm6ohKDqsXteJ5sP5enA==} - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dompurify@3.4.17: + resolution: {integrity: sha512-B/pSlYVHQ58kqISD/yDjuJ1yfzI34m1gF4lAod2bwSRhiN4K5Cl3H8Af7hqB2PmTL911tdEudnnXn5FnhRoz0w==} - dompurify@3.3.3: - resolution: {integrity: sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA==} + earcut@3.2.4: + resolution: {integrity: sha512-FHc6yNpnTORB0tM5kmZ03iD2mDuNakDE2lvf4Hw1XkfxtEHIGVi01B/GqUSwx+NcC1WGjidAfpTXzeALtPtfpg==} - earcut@3.0.2: - resolution: {integrity: sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==} - - enhanced-resolve@5.20.1: - resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} + enhanced-resolve@5.26.0: + resolution: {integrity: sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw==} engines: {node: '>=10.13.0'} - enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} - error-stack-parser-es@1.0.5: resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} - es-module-lexer@2.1.0: - resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} - - esbuild@0.27.3: - resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} - engines: {node: '>=18'} - hasBin: true + es-module-lexer@2.3.2: + resolution: {integrity: sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==} - esbuild@0.27.4: - resolution: {integrity: sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ==} + esbuild@0.28.2: + resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} engines: {node: '>=18'} hasBin: true @@ -2020,8 +1909,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-svelte@3.16.0: - resolution: {integrity: sha512-DJXxqpYZUxcE0SfYo8EJzV2ZC+zAD7fJp1n1HwcEMRR1cOEUYvjT9GuzJeNghMjgb7uxuK3IJAzI+x6zzUxO5A==} + eslint-plugin-svelte@3.23.1: + resolution: {integrity: sha512-+w86Jlx4IRUuuvtqD6j4njql+akx+81JnpvbN5de3AV5iq2SexvST/Jr51CiTlKeY0i+vhoKjPO/ywFKIP75sA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.1 || ^9.0.0 || ^10.0.0 @@ -2050,8 +1939,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.1.0: - resolution: {integrity: sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==} + eslint@10.13.0: + resolution: {integrity: sha512-UohDjD4zSzEwhf58M3O7vc/ycc8O1I7dNlhtD0WxE8Px8EHNJKtUwzBqrzeGhisRuv2ag4sAYswszCJRgKXYUg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -2071,11 +1960,6 @@ packages: resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - esquery@1.7.0: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} @@ -2106,31 +1990,30 @@ packages: event-target-polyfill@0.0.4: resolution: {integrity: sha512-Gs6RLjzlLRdT8X9ZipJdIZI/Y6/HhRLyq9RdDlCsnpxr/+Nn6bU2EFGuC94GjxqhM+Nmij2Vcq98yoHrU8uNFQ==} - expect-type@1.3.0: - resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + expect-type@1.4.0: + resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} exsolve@1.1.3: resolution: {integrity: sha512-kuzL9zherLQoqDeQaS55AiiIg1kb4KYXaSusTtgZTPlvKP2gGCI82LNmBNh5RjDVUXIcmgx+/Mx7vPwRzBbhJA==} - extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.20.1: - resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + fast-string-truncated-width@3.0.3: + resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} + + fast-string-width@3.0.2: + resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} + + fast-wrap-ansi@0.2.2: + resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==} fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} @@ -2141,52 +2024,30 @@ packages: picomatch: optional: true - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} + fflate@0.8.3: + resolution: {integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==} - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + file-entry-cache@11.1.5: + resolution: {integrity: sha512-+PFTHITI08JIGhnNpGNI8T8inUpgZfk3GNEqfT9R2zZV2iFXg3CvqzSl/uEhs7TSGujYRELEANyDvS8Fj7+S7Q==} find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - - flatted@3.4.2: - resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} - - fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} + flat-cache@6.1.23: + resolution: {integrity: sha512-f++BY9pTk+983xK1FLzlLpmM0i0z+jHmx3QESGkURMXujQZz1k5wzwX6hjnQ8goaD0B+sYnDK1yZ6MTyZfUaqA==} - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + flatted@3.4.4: + resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - get-tsconfig@4.13.7: - resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} - gl-matrix@3.4.4: resolution: {integrity: sha512-latSnyDNt/8zYUB6VIJ6PCh2jBjJX6gnDsoCZ7LyW7GkqrD51EWwa9qCoGixj8YqBtETQK/xY7OmpTF8xz1DdQ==} - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} @@ -2195,23 +2056,20 @@ packages: resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} - globals@17.4.0: - resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==} + globals@17.13.0: + resolution: {integrity: sha512-RwMTC61u7hrG3ZJMkZQOK4JLJrKS8QtoTii63EmWvFXHqycY9FObBJQCbsLxSO8kjKhWE5kV1GC+Vb1g3RI0Zg==} engines: {node: '>=18'} - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - h3-js@4.4.0: - resolution: {integrity: sha512-DvJh07MhGgY2KcC4OeZc8SSyA+ZXpdvoh6uCzGpoKvWtZxJB+g6VXXC1+eWYkaMIsLz7J/ErhOalHCpcs1KYog==} + h3-js@4.5.0: + resolution: {integrity: sha512-uKmdPc+DuarnR+XqZxEuWOMw7KzzKROrx3MLeJpFnMOs78S9M5eZ+X5RieS9UcSFQqbeXzbfWuX/W9Pyajinqw==} engines: {node: '>=4', npm: '>=3', yarn: '>=1.3.0'} - hls.js@1.6.15: - resolution: {integrity: sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==} + hashery@1.5.1: + resolution: {integrity: sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==} + engines: {node: '>=20'} hls.js@1.7.3: resolution: {integrity: sha512-MsPlx6yVW4Qv4C7mEVou4/gk/5cN2dVxOTnrNjPSmyH2f0Ln+/UkG10Ax1PE6OvrmTVPKgQYozTtBaPOuCzq7A==} @@ -2220,26 +2078,31 @@ packages: resolution: {integrity: sha512-am5zfg3yu6sqn5yjKBNqhnTX7Cv+m00ox+7jbaKkrLMRJ4rAdldd1xPd/JzbBWspqaQv6RSTrgFN95EsfhC+7w==} engines: {node: '>=16.9.0'} - human-id@4.1.3: - resolution: {integrity: sha512-tsYlhAYpjCKa//8rXZ9DqKEawhPoSytweBC2eNvcaDK+57RZLHGqNs3PZTQO6yekLFSuvA6AlnAfrw1uBvtb+Q==} + hookified@1.15.1: + resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==} + + hookified@2.2.0: + resolution: {integrity: sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==} + + human-id@4.2.2: + resolution: {integrity: sha512-Z+8unD6em/MJwyrkWQ2M3wygRGI1+MztbutiNwk1DCuEPXOZRWGjtcMPZYP1exY9iNZMhd7ZOSMQSo9WYtiQRw==} hasBin: true i18n-iso-countries@7.14.0: resolution: {integrity: sha512-nXHJZYtNrfsi1UQbyRqm3Gou431elgLjKl//CYlnBGt5aTWdRPH1PiS2T/p/n8Q8LnqYqzQJik3Q7mkwvLokeg==} engines: {node: '>= 12'} - iconv-lite@0.7.2: - resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} - engines: {node: '>=0.10.0'} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + ignore@7.0.14: + resolution: {integrity: sha512-wCBiZ77u1tuWde6G/nfOtLaCTYcFDU5yCzARzK10y+rLhzYoL7a7yEemcopcc2Mzow7gZOIjnV2ym1NYmdiJOQ==} engines: {node: '>= 4'} + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -2259,21 +2122,9 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} - is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} - engines: {node: '>=4'} - - is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2281,16 +2132,12 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - js-yaml@3.14.2: - resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} - hasBin: true - - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -2301,25 +2148,25 @@ packages: json-stringify-pretty-compact@4.0.0: resolution: {integrity: sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==} - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - kdbush@4.0.2: - resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==} + kdbush@4.1.0: + resolution: {integrity: sha512-e9vurzrXJQrFX6ckpHP3bvj5l+9CnYzkxDNnNQ1h2QTqdWsUAJgXiKdGNcOa1EY85dU8KbQ+z/FdQdB7P+9yfQ==} - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@5.6.0: + resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - knitwork@1.3.0: - resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==} - known-css-properties@0.37.0: resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} + launch-editor@2.14.2: + resolution: {integrity: sha512-NHJEb30MGBCkmZXLZwz25t37QR4aY03ZzPYUJXOJaOa92uWwExI9SBQUuIznBYc1xkD7cJNGX7oc3Nl3sq2kQQ==} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -2330,30 +2177,60 @@ packages: cpu: [arm64] os: [android] + lightningcss-android-arm64@1.33.0: + resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + lightningcss-darwin-arm64@1.32.0: resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] + lightningcss-darwin-arm64@1.33.0: + resolution: {integrity: sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + lightningcss-darwin-x64@1.32.0: resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] + lightningcss-darwin-x64@1.33.0: + resolution: {integrity: sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + lightningcss-freebsd-x64@1.32.0: resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] + lightningcss-freebsd-x64@1.33.0: + resolution: {integrity: sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + lightningcss-linux-arm-gnueabihf@1.32.0: resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] + lightningcss-linux-arm-gnueabihf@1.33.0: + resolution: {integrity: sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + lightningcss-linux-arm64-gnu@1.32.0: resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} engines: {node: '>= 12.0.0'} @@ -2361,6 +2238,13 @@ packages: os: [linux] libc: [glibc] + lightningcss-linux-arm64-gnu@1.33.0: + resolution: {integrity: sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [glibc] + lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} @@ -2368,6 +2252,13 @@ packages: os: [linux] libc: [musl] + lightningcss-linux-arm64-musl@1.33.0: + resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + libc: [musl] + lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} @@ -2375,6 +2266,13 @@ packages: os: [linux] libc: [glibc] + lightningcss-linux-x64-gnu@1.33.0: + resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [glibc] + lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} @@ -2382,22 +2280,45 @@ packages: os: [linux] libc: [musl] + lightningcss-linux-x64-musl@1.33.0: + resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + libc: [musl] + lightningcss-win32-arm64-msvc@1.32.0: resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] + lightningcss-win32-arm64-msvc@1.33.0: + resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + lightningcss-win32-x64-msvc@1.32.0: resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] + lightningcss-win32-x64-msvc@1.33.0: + resolution: {integrity: sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + lightningcss@1.32.0: resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} engines: {node: '>= 12.0.0'} + lightningcss@1.33.0: + resolution: {integrity: sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==} + engines: {node: '>= 12.0.0'} + lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -2408,17 +2329,10 @@ packages: locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -2426,42 +2340,33 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - maplibre-gl@5.21.1: - resolution: {integrity: sha512-zto1RTnFkOpOO1bm93ElCXF1huey2N4LvXaGLMFcYAu9txh0OhGIdX1q3LZLkrMKgMxMeYduaQo+DVNzg098fg==} + magic-string@1.4.4: + resolution: {integrity: sha512-jQz9sVhrZuphH4NrAIHSgkDJCluQO7Ioi4KGRLa7aTUjAODQ13hENX0YIytqYE/rIkO485gQG2LeBxJaW53kkQ==} + + maplibre-gl@6.16.0: + resolution: {integrity: sha512-gApO66EMtoDZuio680RUBvskR7ahFd/NNhLN4tBAs+Y7FeT4gQV8zVFgYVMRmFxQznOEzecW19w6xOd9XjZjiA==} engines: {node: '>=16.14.0', npm: '>=8.1.0'} - marked@17.0.5: - resolution: {integrity: sha512-6hLvc0/JEbRjRgzI6wnT2P1XuM1/RrrDEX0kPt0N7jGm1133g6X7DlxFasUIx+72aKAr904GTxhSLDrd5DIlZg==} + marked@18.1.2: + resolution: {integrity: sha512-DfOnvLAQ6WYeWxWO1u4RyFOeqyHup6dks5PPqnoFiooU7ipRvidO/2j8plhAHIiZg574E9ZlzSjUiPMLAzFkgg==} engines: {node: '>= 20'} hasBin: true - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - mini-svg-data-uri@1.4.4: resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} hasBin: true - miniflare@4.20260317.2: - resolution: {integrity: sha512-qNL+yWAFMX6fr0pWU6Lx1vNpPobpnDSF1V8eunIckWvoIQl8y1oBjL2RJFEGY3un+l3f9gwW9dirDPP26usYJQ==} - engines: {node: '>=18.0.0'} - hasBin: true + miniflare@5.20261023.0-beta: + resolution: {integrity: sha512-SHY8A98gCvmrnBLqABHRTSh3duAL1z+tHPRZu/tqxHFqVARrZ4oQis/ALYwp3XvzHvs6B/ff/CdcCafqP+cOFA==} + engines: {node: '>=22.0.0'} - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} engines: {node: 18 || 20 || >=22} minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - mlly@1.8.2: - resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} - mode-watcher@1.1.0: resolution: {integrity: sha512-mUT9RRGPDYenk59qJauN1rhsIMKBmWA3xMF+uRwE8MW/tjhaDSCCARqkSuDTq8vr4/2KcAxIGVjACxTjdk5C3g==} peerDependencies: @@ -2481,24 +2386,34 @@ packages: murmurhash-js@1.0.0: resolution: {integrity: sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.20: + resolution: {integrity: sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.7: - resolution: {integrity: sha512-ua3NDgISf6jdwezAheMOk4mbE1LXjm1DfMUDMuJf4AqxLFK3ccGpgWizwa5YV7Yz9EpXwEaWoRXSb/BnV0t5dQ==} + nanoid@5.1.16: + resolution: {integrity: sha512-kVrnsrJqMR8+oLJnGEmSWw9BivK5mt7H3FZatVRjrc5wGqFYuBxX1yG7+A7Gi5AefkX6t/oCkizcQgpu0cY1dQ==} engines: {node: ^18 || >=20} hasBin: true + nanoid@6.0.2: + resolution: {integrity: sha512-hIvVOb9Qr1p/9CNNLOe0OlWvgx/ziTsVwKN/GDSsuArN2K0wDiafP3s0SWmsm7o2BdnyS8Z9Z64NFBUbn6ziBg==} + engines: {node: ^22 || ^24 || >=26} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - number-flow@0.6.0: - resolution: {integrity: sha512-K8flNq2Wqus53vjp/btVo3qXFkagF8dIdYavreBfE7hlvFFG/b1HMGEH6nZL+mlrJ+4lbLP9OmPv3t2rmRkpSQ==} + number-flow@0.6.2: + resolution: {integrity: sha512-MCnImG4Q5vPwhSXnov56nOuyyKn6LC+Qd7II1UiKc+ACRtug5iAtn0+CwXNxM38AC5lSowEY+oYEtZX2qMnUyw==} + + obug@2.2.1: + resolution: {integrity: sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==} + engines: {node: '>=12.20.0'} - obug@2.1.1: - resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + obug@3.0.0: + resolution: {integrity: sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==} + engines: {node: '>=12.20.0'} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} @@ -2507,45 +2422,19 @@ packages: orderedmap@2.1.1: resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} - outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - - p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - package-manager-detector@0.2.11: - resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==} + package-manager-detector@1.9.0: + resolution: {integrity: sha512-zAMfbta9nPA8AKkA4WdmNAT8R8s6Dk0/xwPsqNnRidMFcLo1YkLuPDTgs2f64XdzS8vbLNnoJ+uUIkgbz7oRHA==} - package-manager-detector@1.6.0: - resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} - - partysocket@1.1.16: - resolution: {integrity: sha512-d7xFv+ZC7x0p/DAHWJ5FhxQhimIx+ucyZY+kxL0cKddLBmK9c4p2tEA/L+dOOrWm6EYrRwrBjKQV0uSzOY9x1w==} + partysocket@1.3.0: + resolution: {integrity: sha512-1zToNyolZFK/7nuAw/K2bZrNzFqaZyRoCEkS+9vG6WSC5ikrN6qWRe96q6ImU51uptz2r+dAwSkwhJVdQi4LiA==} peerDependencies: react: '>=17' peerDependenciesMeta: @@ -2563,38 +2452,20 @@ packages: path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pbf@4.0.1: - resolution: {integrity: sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==} + pbf@5.1.2: + resolution: {integrity: sha512-mnvGdvOrIvJOBGUEdGkrVXjN8E/VkIJCkf2eS1DH2yv82ORUlLttmDt0rWY38yYZmVwciZwBUvHM20qxBZf40w==} hasBin: true picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.2: - resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} - engines: {node: '>=8.6'} - - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} engines: {node: '>=12'} - pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - - pkg-types@1.3.1: - resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - - pkg-types@2.3.3: - resolution: {integrity: sha512-j/lCFdcppV0JxWpCEITdbDltBxPP6cHT+yNJ6Go2OgoSA9518X847X9z0p6LtA4Nc16+eQzCZjRrWanTGvHJ5w==} - playwright-core@1.64.1: resolution: {integrity: sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ==} engines: {node: '>=20'} @@ -2605,8 +2476,9 @@ packages: engines: {node: '>=20'} hasBin: true - plyr@3.8.4: - resolution: {integrity: sha512-DrzLbK9Wol3zeiuZCleD9aUOl0KAaBHR9H6WVVVYPZ4Ya+LYxUFTgSF1jooHcMQCv96Ws96wCaZzIoP3bES8pQ==} + plyr@3.8.5: + resolution: {integrity: sha512-SqGU1s76fq4lI8ABYhi1uxwrcLGYqmyiMazFAUIOQKKwt6S7FfflEMljLaM3SV8HUUb1KdZ04FY/SNFRpPZHUw==} + engines: {node: ^22.18.0 || >=24.11.0} deprecated: 'Plyr is deprecated and receives security updates only. Use Video.js 10 for new projects. Migration guide: https://videojs.org/docs/framework/html/guides/migrate-from-plyr' pngjs@7.0.0: @@ -2625,8 +2497,8 @@ packages: ts-node: optional: true - postcss-safe-parser@7.0.1: - resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} + postcss-safe-parser@7.1.0: + resolution: {integrity: sha512-1WzZxRLaAFwEh6Do+zyGpjWV3nGJNxxhuh7Ubu/q1ICImMgZJnLwhoaEpRbG4pJppp2Y1ncL9ffA2f+LhrefQg==} engines: {node: '>=18.0'} peerDependencies: postcss: ^8.4.31 @@ -2641,12 +2513,12 @@ packages: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} engines: {node: '>=4'} - postcss-selector-parser@7.1.1: - resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} + postcss-selector-parser@7.1.7: + resolution: {integrity: sha512-wWBro/7hJ40ye6TPiXkUQoXKCw23xSsjriUvqd7Uls9Sso3oLiON1flc18cCdnjgCRXw4fBVqUJJeOdDTh3P3g==} engines: {node: '>=4'} - postcss@8.5.8: - resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + postcss@8.5.32: + resolution: {integrity: sha512-LJlKCCAUFKOuZxipUdYw1NzIITEsPcgyOG9LkvRJvuKj/bRzbuRY0ARXvL0pWGpsZvn8jku+LMep2eU0seHp8g==} engines: {node: ^10 || ^12 || >=14} potpack@2.1.0: @@ -2656,14 +2528,15 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-svelte@3.5.1: - resolution: {integrity: sha512-65+fr5+cgIKWKiqM1Doum4uX6bY8iFCdztvvp2RcF+AJoieaw9kJOFMNcJo/bkmKYsxFaM9OsVZK/gWauG/5mg==} + prettier-plugin-svelte@4.1.1: + resolution: {integrity: sha512-wXvbXMjSvb4C9ENWTHXyd+ihakKCsJ6rJhLP6/8HFNj4GkZr48jqL9PoKsl2sk7SyCZRTnJ7O2TTowUpOxP/KA==} + engines: {node: '>=20'} peerDependencies: prettier: ^3.0.0 - svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 + svelte: ^5.0.0 - prettier-plugin-tailwindcss@0.7.2: - resolution: {integrity: sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==} + prettier-plugin-tailwindcss@0.8.1: + resolution: {integrity: sha512-iaFMYqDsE4ffdDkn5qup0j5f2aCEBFZrdrZnvu9QKTlWx/iGPeQ4HHu7b7fCPMxeo9nwQBiOAh2nSypdFYWJkw==} engines: {node: '>=20.19'} peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' @@ -2717,13 +2590,8 @@ packages: prettier-plugin-svelte: optional: true - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - - prettier@3.8.1: - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} + prettier@3.9.10: + resolution: {integrity: sha512-skGHTH1Yb9QvaTC4hWnRTzEYtCpApF0UMBPz+t/0ZPzP8ihefo/btKd+QA7pUE0fEwA1SbS/NmhyEcstdXOIdA==} engines: {node: '>=14'} hasBin: true @@ -2766,11 +2634,11 @@ packages: prosemirror-view@1.42.8: resolution: {integrity: sha512-ftDZjCs9AjAekXmCfJRn2U3IdlRCl0Yc4tZT1/jJWCsz4DiSifEBXtWmpJpw/4f1Rg328uAUQ+u2lCJ0+AVZkw==} - protocol-buffers-schema@3.6.0: - resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} + protocol-buffers-schema@3.6.1: + resolution: {integrity: sha512-VG2K63Igkiv9p76tk1lilczEK1cT+kCjKtkdhw1dQZV3k3IXJbd3o6Ho8b9zJZaHSnT2hKe4I+ObmX9w6m5SmQ==} - publint@0.3.19: - resolution: {integrity: sha512-J3p4GOocCRFyLLFRzGfIhAwWgk0Kkcdxj5iFspFvCYbyiJs5IhCM8gsIkcNeQL+tdpV671RtJQiTFSUKhl1Wjg==} + publint@0.3.25: + resolution: {integrity: sha512-WMMbn/d7JqRlfXQL/JUI4n5skC8cJ5WVr8/wT5mmiYWkUdENkZr1I5rgs2+dQPVRgoJd+JRYtB46MTsuDylw9g==} engines: {node: '>=18'} hasBin: true @@ -2778,11 +2646,9 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - quansync@0.2.11: - resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + qified@0.10.1: + resolution: {integrity: sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==} + engines: {node: '>=20'} quickselect@3.0.0: resolution: {integrity: sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==} @@ -2790,47 +2656,29 @@ packages: rangetouch@2.0.1: resolution: {integrity: sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==} - read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} - engines: {node: '>=6'} - readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} - readdirp@5.0.0: - resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==} + readdirp@5.1.1: + resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==} engines: {node: '>= 20.19.0'} - regexparam@3.0.0: - resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==} - engines: {node: '>=8'} - - resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} resolve-protobuf-schema@2.1.0: resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rolldown@1.0.0-rc.12: - resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==} + rolldown@1.2.15: + resolution: {integrity: sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true rope-sequence@1.3.4: resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - runed@0.23.4: resolution: {integrity: sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==} peerDependencies: @@ -2850,30 +2698,26 @@ packages: '@sveltejs/kit': optional: true - rw@1.3.3: - resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} - sade@1.8.1: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - scule@1.3.0: resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} hasBin: true - set-cookie-parser@3.1.0: - resolution: {integrity: sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==} - - sharp@0.34.5: - resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + sharp@0.35.5: + resolution: {integrity: sha512-Ywn4OnzGukp7CDMrp08RQ50YKmuwG47brZgIVPTvBaaAfQlRlygrRqSrxdCiL9M+LlzLBiJ68IR1QqvzHyjC7g==} + engines: {node: '>=20.9.0'} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -2883,51 +2727,27 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - siginfo@2.0.0: - resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + shell-quote@1.12.0: + resolution: {integrity: sha512-PcByqNyT/38F2kDNi006HAMRJaULuBzq/FOsw3qdZvX/GA9W/jamDaRskgHjubHiftXK5sIFxLNkvrXUwcof6Q==} + engines: {node: '>= 0.4'} sirv@3.0.2: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + source-map-js@1.2.2: + resolution: {integrity: sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==} engines: {node: '>=0.10.0'} - spawndamnit@3.0.1: - resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - stackback@0.0.2: - resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} - - std-env@4.1.0: - resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} + std-env@4.3.0: + resolution: {integrity: sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==} style-to-object@1.0.14: resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} - supercluster@8.0.1: - resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==} - supports-color@10.2.2: resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} @@ -2935,27 +2755,27 @@ packages: svelte-boring-avatars@1.2.6: resolution: {integrity: sha512-8+Z1DhsMUVI/V/5ik00Arw0PgbJcMdhTXq3YGqccBc5bYFeceCtMEMB0aWGhi8xFV+0aqZbWvS89Hcj16LlfHA==} - svelte-check@4.4.8: - resolution: {integrity: sha512-67adfgBox5eNSNIvIIwgFizKGdcRrGpiMoNO2obHcYuLz7iTa8Xgm/NGU3ntMFnNm8K1grFOIG6HhMLX/vcN8w==} + svelte-check@4.7.7: + resolution: {integrity: sha512-Ge2IMdeTpbJuzNFGRiiMg0RWgbScysKQu7xwcyFJ22+DU9F5nPX51+Q3gHmGqRxYQMx2knreVWt5oCtfe0vf2g==} engines: {node: '>= 18.0.0'} hasBin: true peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 - typescript: '>=5.0.0' + typescript: ^5.0.0 || ^6.0.0 - svelte-eslint-parser@1.6.0: - resolution: {integrity: sha512-qoB1ehychT6OxEtQAqc/guSqLS20SlA53Uijl7x375s8nlUT0lb9ol/gzraEEatQwsyPTJo87s2CmKL9Xab+Uw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.30.3} + svelte-eslint-parser@1.10.0: + resolution: {integrity: sha512-1bNtsoGwEx/J1qNz1xa5dSt/Ue5+C7+WpV92cCPZDbF6dx/YXHKzC9yTP25vFvAK40yd/mHXi1WACZO7FGf0Bw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.34.6} peerDependencies: svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: svelte: optional: true - svelte-maplibre-gl@1.0.3: - resolution: {integrity: sha512-pGZMLN5EcJoe6lREyaY2lsbkvrnKjIGHJRM2ijN+TUDeJbV9oecjBxbDXQZd8b5X4JJztSG915L731dFdhhSwA==} + svelte-maplibre-gl@2.2.1: + resolution: {integrity: sha512-HCJBs5WhKtQ4aba4AhU9sE/XE0X7NgVNRQG27qUEdsXeUGdE6ZPQoaQSyKE8WzbGR8+GGfyGFajz1+1le51TCQ==} peerDependencies: - maplibre-gl: ^5.0.0 || ^4.0.0 + maplibre-gl: ^5.19.0 || ^6.0.0 svelte: '>=5.0.0' svelte-toolbelt@0.10.6: @@ -2970,8 +2790,8 @@ packages: peerDependencies: svelte: ^5.0.0 - svelte2tsx@0.7.55: - resolution: {integrity: sha512-JWzgeM3lqySRNfqcsesvVEh8LhTWBxQJ9RMjzJ+VepdmXtVnNd0SbtGctG6+/fbHq0N6mhwSd823gszw9JHeGQ==} + svelte2tsx@0.7.62: + resolution: {integrity: sha512-ZXfsmL0jzAs01ho0w5z5LSIC2WgSdpTF0QCwaXLq7oHgho4P9fTgHlLp1pKAx6/xtVYRSW5nGH5ZRpEHZCqliA==} peerDependencies: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 || ^6.0.0 @@ -2980,48 +2800,38 @@ packages: resolution: {integrity: sha512-5mAftM3SoDV9X0zdF386F9p2pv8iKOwi/KfBS1XnBAkVCKFzVOLHUoa8iGWAt4buoicLmyWVRpuuD5wplXOQsg==} engines: {node: '>=18'} - tabbable@6.4.0: - resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} - tabbable@6.5.1: resolution: {integrity: sha512-dMCuwDUY6Noz3zVKLefBC4wq+aJV20yc7vWmM7uTNGwtQSFF5kX7OUIUsxuVajz/bdt5Xqdah3/0NLjth+cM5A==} tailwind-merge@3.7.0: resolution: {integrity: sha512-XPPUyAc+cvspz3lHTcR/QgPfW2A0lv/xQNIjX3HGhLR+Nq2lHaLq5MtTesHn8GUr3W3DguT2KT5x3NVgRtYwmA==} - tailwindcss@4.2.2: - resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} + tailwindcss@4.3.3: + resolution: {integrity: sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==} - tapable@2.3.2: - resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} + tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} - term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} - engines: {node: '>=8'} - - tinybench@2.9.0: - resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinybench@6.2.2: + resolution: {integrity: sha512-nIZ2N2dFpjBsg2hgitKu7mA+FvsIJuGJOwysRngmVRRmWgR/UyPjwJj8c/fT/dhm8EkHnF5EOogRf+0Z2qrimA==} + engines: {node: '>=20.0.0'} - tinyexec@1.2.4: - resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + tinyexec@1.3.1: + resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==} engines: {node: '>=18'} - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} tinyqueue@3.0.0: resolution: {integrity: sha512-gRa9gwYU3ECmQYv3lslts5hxuIa90veaEcxDYuu3QGOIAEM2mOZkVHp48ANJuu1CURtRdHKUBY5Lm1tHV+sD4g==} - tinyrainbow@3.1.0: - resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + tinyrainbow@3.2.0: + resolution: {integrity: sha512-LgO3D9yZJjApUiuUfl9iFAwrtaX4+lok3wJIqttGoKCHlWUqHqbQpnxCf82L8FjgKsh4iGo78hqJwgL8F6To2A==} engines: {node: '>=14.0.0'} - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -3035,8 +2845,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + tsx@4.23.15: + resolution: {integrity: sha512-Yiex1Ovn8z2xPpOWckIiysV1SSyRMY9BkLF++q0yKiDxCqRhosKfMg3janKkiLBwZ5c/YryloKwGZcrEmtwxKw==} engines: {node: '>=18.0.0'} hasBin: true @@ -3048,43 +2858,33 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typescript-eslint@8.57.2: - resolution: {integrity: sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==} + typescript-eslint@8.72.1: + resolution: {integrity: sha512-3Li9FfPmQp45nxEtFD1ZCrYFI3cYK5kpyNtmm1H7lMagm8u9sy6PTjy3ytwQZs7KNukOyKFHAZ6z6GjYFeaeXw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' + typescript: '>=4.8.4 <6.1.0' typescript@6.0.2: resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} engines: {node: '>=14.17'} hasBin: true - ufo@1.6.4: - resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - - undici@7.24.4: - resolution: {integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==} + undici@7.30.1: + resolution: {integrity: sha512-03KrMbjIFDWQR5RNPrSw3bd1r12JpyFQl9/yxjUbJtqkjmllqC5lFjZh6ujeuJCKr8EOQvRW872Oy/az+nLYxg==} engines: {node: '>=20.18.1'} unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} - unicode-segmenter@0.14.5: - resolution: {integrity: sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==} - unicode-segmenter@0.17.3: resolution: {integrity: sha512-hKZwqBjJDmqNrq1+LjDxck1qLzJFcLLJM2Xq92ORRHOuau6GSHeELmn+uyk6zNH1CK9mogrUJGP9WJCJUQXMAw==} - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - - unwasm@0.5.3: - resolution: {integrity: sha512-keBgTSfp3r6+s9ZcSma+0chwxQdmLbB5+dAD9vjtB21UTMYuKAxHXCU1K2CbCtnP09EaWeRvACnXk0EJtUx+hw==} + unwasm@0.6.3: + resolution: {integrity: sha512-RrzGPLDcIrxSng5tXeqZgdRuQqH4z8Bj/jQzvximAzU+s3ATHiFWBZz9+FVc8CKZxFQdtlSSDTk5NXTfR+Mh7w==} uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -3095,22 +2895,22 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - valibot@1.3.1: - resolution: {integrity: sha512-sfdRir/QFM0JaF22hqTroPc5xy4DimuGQVKFrzF1YfGwaS1nJot3Y8VqMdLO2Lg27fMzat2yD3pY5PbAYO39Gg==} + valibot@1.5.0: + resolution: {integrity: sha512-nil6AkP2TChWL43Z5uJ6GTxX01CUA+g8LWUM+N/rB9NBbkUMaUsi9PUNzlUPgoKASgmx9f7eGOYpJ04/fSa6FQ==} peerDependencies: typescript: '>=5' peerDependenciesMeta: typescript: optional: true - vite@8.0.3: - resolution: {integrity: sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==} + vite@8.3.5: + resolution: {integrity: sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.1.0 - esbuild: ^0.27.0 + '@vitejs/devtools': ^0.7.1 || ^0.8.0 + esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 sass: ^1.70.0 @@ -3146,10 +2946,10 @@ packages: yaml: optional: true - vitefu@1.1.2: - resolution: {integrity: sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==} + vitefu@1.1.3: + resolution: {integrity: sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==} peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: vite: optional: true @@ -3160,23 +2960,23 @@ packages: svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0 vitest: ^4.0.0 || ^5.0.0 - vitest@4.1.8: - resolution: {integrity: sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + vitest@5.0.5: + resolution: {integrity: sha512-cPODOMF8YnkiiYtDdHo6n4wWmBrOBBbOIYH2d33M4l3CdNn72h+qMmO6uXffUN6A5AZFXNND/d+krS9mgkXRfg==} + engines: {node: ^22.12.0 || ^24.0.0 || >=26.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.8 - '@vitest/browser-preview': 4.1.8 - '@vitest/browser-webdriverio': 4.1.8 - '@vitest/coverage-istanbul': 4.1.8 - '@vitest/coverage-v8': 4.1.8 - '@vitest/ui': 4.1.8 + '@types/node': ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 5.0.5 + '@vitest/browser-preview': 5.0.5 + '@vitest/browser-webdriverio': ^5.0.0-beta.5 || >=5.0.0 + '@vitest/coverage-istanbul': 5.0.5 + '@vitest/coverage-v8': 5.0.5 + '@vitest/ui': 5.0.5 happy-dom: '*' jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + vite: ^6.4.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -3209,36 +3009,32 @@ packages: engines: {node: '>= 8'} hasBin: true - why-is-node-running@2.3.0: - resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} - engines: {node: '>=8'} + why-is-node-running@3.2.1: + resolution: {integrity: sha512-Tb2FUhB4vUsGQlfSquQLYkApkuPAFQXGFzxWKHHumVz2dK+X1RUm/HnID4+TfIGYJ1kTcwOaCk/buYCEJr6YjQ==} + engines: {node: '>=20.11'} hasBin: true word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - workerd@1.20260317.1: - resolution: {integrity: sha512-ZuEq1OdrJBS+NV+L5HMYPCzVn49a2O60slQiiLpG44jqtlOo+S167fWC76kEXteXLLLydeuRrluRel7WdOUa4g==} + workerd@1.20261023.1: + resolution: {integrity: sha512-NeofJFyaYNpqKpFRJW3ApuonaerPd6/JWlfTtLDYf2A6ygqrDEFnYgEXmc0hhOxqnJsSM+kXJN6VebPojzRrsg==} engines: {node: '>=16'} hasBin: true - worktop@0.8.0-next.18: - resolution: {integrity: sha512-+TvsA6VAVoMC3XDKR5MoC/qlLqDixEfOBysDEKnPIPou/NvoPWCAuXHXMsswwlvmEuvX56lQjvELLyLuzTKvRw==} - engines: {node: '>=12'} - - wrangler@4.77.0: - resolution: {integrity: sha512-E2Gm69+K++BFd3QvoWjC290RPQj1vDOUotA++sNHmtKPb7EP6C8Qv+1D5Ii73tfZtyNgakpqHlh8lBBbVWTKAQ==} - engines: {node: '>=20.3.0'} + wrangler@4.153.0: + resolution: {integrity: sha512-Hn1AowKzZao/729rMpdpxBZt/RaKQNJ4GtKtHQcOrwT+J/GIq0iwl680+dhJyO00iSsXaCkxoNcLg3yVIwIvyw==} + engines: {node: '>=22.0.0'} hasBin: true peerDependencies: - '@cloudflare/workers-types': ^4.20260317.1 + '@cloudflare/workers-types': ^5.20261023.1 peerDependenciesMeta: '@cloudflare/workers-types': optional: true - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + ws@8.21.0: + resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -3265,8 +3061,8 @@ packages: resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} - yaml@2.9.0: - resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} + yaml@2.9.1: + resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==} engines: {node: '>= 14.6'} hasBin: true @@ -3284,113 +3080,244 @@ packages: youch@4.1.0-beta.10: resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} - zimmerframe@1.1.4: - resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} + zimmerframe@1.1.5: + resolution: {integrity: sha512-msJxIvYDYcoNL+PJsu+7qmpDWsYmAxTY+2TNYXXF0hzBzBk0BMecOqDOG/EckUoKCuKwObfbugIl8QpqHDXeFA==} snapshots: - '@atcute/atproto@3.1.10': + '@atcute/atproto@3.1.12(@atcute/lexicons@1.3.1)': dependencies: - '@atcute/lexicons': 1.2.9 + '@atcute/lexicons': 1.3.1 - '@atcute/bluesky-richtext-parser@2.1.1': {} + '@atcute/atproto@4.0.4(@atcute/lexicons@2.1.1)': + dependencies: + '@atcute/lexicons': 2.1.1 '@atcute/bluesky-richtext-parser@2.1.2': {} - '@atcute/bluesky@3.3.0': + '@atcute/bluesky@4.0.25(@atcute/lexicons@2.1.1)': dependencies: - '@atcute/atproto': 3.1.10 - '@atcute/lexicons': 1.2.9 + '@atcute/atproto': 4.0.4(@atcute/lexicons@2.1.1) + '@atcute/lexicons': 2.1.1 - '@atcute/car@5.1.1': + '@atcute/car@5.1.2(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)': dependencies: - '@atcute/cbor': 2.3.2 + '@atcute/cbor': 2.3.8(@atcute/cid@2.4.1) + '@atcute/cid': 2.4.1 + '@atcute/uint8array': 1.2.1 + '@atcute/varint': 2.0.2 + + '@atcute/car@6.1.0(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)': + dependencies: + '@atcute/cbor': 2.3.8(@atcute/cid@2.4.1) '@atcute/cid': 2.4.1 - '@atcute/uint8array': 1.1.1 - '@atcute/varint': 2.0.0 + '@atcute/uint8array': 1.2.1 + '@atcute/varint': 2.0.2 '@atcute/cbor@2.3.2': dependencies: '@atcute/cid': 2.4.1 '@atcute/multibase': 1.2.0 - '@atcute/uint8array': 1.1.1 + '@atcute/uint8array': 1.2.1 + + '@atcute/cbor@2.3.8(@atcute/cid@2.4.1)': + dependencies: + '@atcute/cid': 2.4.1 + '@atcute/multibase': 1.2.5 + '@atcute/uint8array': 1.2.1 '@atcute/cid@2.4.1': dependencies: '@atcute/multibase': 1.2.0 - '@atcute/uint8array': 1.1.1 + '@atcute/uint8array': 1.2.1 - '@atcute/client@4.2.1': + '@atcute/client@4.2.2(@atcute/lexicons@1.3.1)': dependencies: - '@atcute/identity': 1.1.4 - '@atcute/lexicons': 1.2.9 + '@atcute/identity': 1.1.5(@atcute/lexicons@1.3.1) + '@atcute/lexicons': 1.3.1 + + '@atcute/client@5.1.2(@atcute/lexicons@2.1.1)(typescript@6.0.2)': + dependencies: + '@atcute/identity': 2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/lexicons': 2.1.1 + transitivePeerDependencies: + - typescript '@atcute/crypto@2.4.1': dependencies: '@atcute/multibase': 1.2.0 - '@atcute/uint8array': 1.1.1 + '@atcute/uint8array': 1.2.1 '@noble/secp256k1': 3.0.0 - '@atcute/identity-resolver@1.2.2(@atcute/identity@1.1.4)': + '@atcute/crypto@2.4.4': + dependencies: + '@atcute/multibase': 1.2.5 + '@atcute/uint8array': 1.2.1 + '@noble/secp256k1': 3.2.0 + + '@atcute/firehose@1.2.0(@atcute/cid@2.4.1)(@atcute/lexicons@2.1.1)': + dependencies: + '@atcute/cbor': 2.3.8(@atcute/cid@2.4.1) + '@atcute/lexicons': 2.1.1 + '@atcute/uint8array': 1.2.1 + '@mary-ext/event-iterator': 1.1.1 + '@mary-ext/simple-event-emitter': 1.1.0 + partysocket: 1.3.0 + transitivePeerDependencies: + - '@atcute/cid' + - react + + '@atcute/identity-resolver@1.2.3(@atcute/identity@1.1.4)(@atcute/lexicons@1.3.1)': dependencies: '@atcute/identity': 1.1.4 - '@atcute/lexicons': 1.2.9 + '@atcute/lexicons': 1.3.1 + '@atcute/util-fetch': 1.0.5 + '@badrap/valita': 0.4.6 + + '@atcute/identity-resolver@1.2.3(@atcute/identity@1.1.5(@atcute/lexicons@1.3.1))(@atcute/lexicons@1.3.1)': + dependencies: + '@atcute/identity': 1.1.5(@atcute/lexicons@1.3.1) + '@atcute/lexicons': 1.3.1 '@atcute/util-fetch': 1.0.5 '@badrap/valita': 0.4.6 + '@atcute/identity-resolver@2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2)': + dependencies: + '@atcute/identity': 2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/lexicons': 2.1.1 + '@atcute/util-fetch': 2.1.0(typescript@6.0.2) + valibot: 1.5.0(typescript@6.0.2) + transitivePeerDependencies: + - typescript + '@atcute/identity@1.1.4': dependencies: - '@atcute/lexicons': 1.2.9 + '@atcute/lexicons': 1.3.1 '@badrap/valita': 0.4.6 - '@atcute/jetstream@1.1.2': + '@atcute/identity@1.1.5(@atcute/lexicons@1.3.1)': + dependencies: + '@atcute/lexicons': 1.3.1 + '@badrap/valita': 0.4.6 + + '@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2)': + dependencies: + '@atcute/lexicons': 2.1.1 + valibot: 1.5.0(typescript@6.0.2) + transitivePeerDependencies: + - typescript + + '@atcute/jetstream@1.1.3(@atcute/lexicons@1.3.1)': dependencies: - '@atcute/lexicons': 1.2.9 + '@atcute/lexicons': 1.3.1 '@badrap/valita': 0.4.6 '@mary-ext/event-iterator': 1.0.0 '@mary-ext/simple-event-emitter': 1.0.1 - partysocket: 1.1.16 + partysocket: 1.3.0 type-fest: 4.41.0 - yocto-queue: 1.2.2 transitivePeerDependencies: - react - '@atcute/lex-cli@2.5.3': + '@atcute/jetstream@2.2.0(@atcute/cid@2.4.1)(@atcute/lexicons@2.1.1)(typescript@6.0.2)': dependencies: - '@atcute/identity': 1.1.4 - '@atcute/identity-resolver': 1.2.2(@atcute/identity@1.1.4) - '@atcute/lexicon-doc': 2.1.2 - '@atcute/lexicon-resolver': 0.1.6(@atcute/identity-resolver@1.2.2(@atcute/identity@1.1.4))(@atcute/identity@1.1.4) - '@atcute/lexicons': 1.2.9 + '@atcute/atproto': 4.0.4(@atcute/lexicons@2.1.1) + '@atcute/firehose': 1.2.0(@atcute/cid@2.4.1)(@atcute/lexicons@2.1.1) + '@atcute/lexicons': 2.1.1 + '@mary-ext/event-iterator': 1.1.1 + '@mary-ext/simple-event-emitter': 1.1.0 + partysocket: 1.3.0 + valibot: 1.5.0(typescript@6.0.2) + transitivePeerDependencies: + - '@atcute/cid' + - react + - typescript + + '@atcute/lex-cli@2.8.2(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)': + dependencies: + '@atcute/identity': 1.1.5(@atcute/lexicons@1.3.1) + '@atcute/identity-resolver': 1.2.3(@atcute/identity@1.1.5(@atcute/lexicons@1.3.1))(@atcute/lexicons@1.3.1) + '@atcute/lexicon-doc': 2.2.1(@atcute/lexicons@1.3.1) + '@atcute/lexicon-resolver': 0.1.7(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)(@atcute/identity-resolver@1.2.3(@atcute/identity@1.1.5(@atcute/lexicons@1.3.1))(@atcute/lexicons@1.3.1))(@atcute/identity@1.1.5(@atcute/lexicons@1.3.1))(@atcute/lexicon-doc@2.2.1(@atcute/lexicons@1.3.1))(@atcute/lexicons@1.3.1) + '@atcute/lexicons': 1.3.1 '@badrap/valita': 0.4.6 - '@optique/core': 0.6.11 - '@optique/run': 0.6.11 + '@optique/core': 1.3.6 + '@optique/run': 1.3.6 picocolors: 1.1.1 - prettier: 3.8.1 + prettier: 3.9.10 + transitivePeerDependencies: + - '@atcute/cbor' + - '@atcute/cid' - '@atcute/lexicon-doc@2.1.2': + '@atcute/lex-cli@3.3.0(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)(prettier@3.9.10)(typescript@6.0.2)': dependencies: - '@atcute/identity': 1.1.4 - '@atcute/lexicons': 1.2.9 - '@atcute/uint8array': 1.1.1 - '@atcute/util-text': 1.2.0 + '@atcute/identity': 2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/identity-resolver': 2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/lexicon-doc': 3.1.0(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/lexicon-resolver': 1.0.2(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)(@atcute/identity-resolver@2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicon-doc@3.1.0(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/lexicons': 2.1.1 + '@oomfware/kempt': 0.1.4 + '@optique/core': 1.3.6 + '@optique/run': 1.3.6 + picocolors: 1.1.1 + valibot: 1.5.0(typescript@6.0.2) + optionalDependencies: + prettier: 3.9.10 + transitivePeerDependencies: + - '@atcute/cbor' + - '@atcute/cid' + - typescript + + '@atcute/lexicon-doc@2.2.1(@atcute/lexicons@1.3.1)': + dependencies: + '@atcute/identity': 1.1.5(@atcute/lexicons@1.3.1) + '@atcute/lexicons': 1.3.1 + '@atcute/uint8array': 1.2.1 + '@atcute/util-text': 1.3.4 '@badrap/valita': 0.4.6 - '@atcute/lexicon-resolver@0.1.6(@atcute/identity-resolver@1.2.2(@atcute/identity@1.1.4))(@atcute/identity@1.1.4)': + '@atcute/lexicon-doc@3.1.0(@atcute/lexicons@2.1.1)(typescript@6.0.2)': dependencies: - '@atcute/crypto': 2.4.1 - '@atcute/identity': 1.1.4 - '@atcute/identity-resolver': 1.2.2(@atcute/identity@1.1.4) - '@atcute/lexicon-doc': 2.1.2 - '@atcute/lexicons': 1.2.9 - '@atcute/repo': 0.1.3 + '@atcute/identity': 2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/lexicons': 2.1.1 + '@atcute/uint8array': 1.2.1 + '@atcute/util-text': 1.3.4 + valibot: 1.5.0(typescript@6.0.2) + transitivePeerDependencies: + - typescript + + '@atcute/lexicon-resolver@0.1.7(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)(@atcute/identity-resolver@1.2.3(@atcute/identity@1.1.5(@atcute/lexicons@1.3.1))(@atcute/lexicons@1.3.1))(@atcute/identity@1.1.5(@atcute/lexicons@1.3.1))(@atcute/lexicon-doc@2.2.1(@atcute/lexicons@1.3.1))(@atcute/lexicons@1.3.1)': + dependencies: + '@atcute/crypto': 2.4.4 + '@atcute/identity': 1.1.5(@atcute/lexicons@1.3.1) + '@atcute/identity-resolver': 1.2.3(@atcute/identity@1.1.5(@atcute/lexicons@1.3.1))(@atcute/lexicons@1.3.1) + '@atcute/lexicon-doc': 2.2.1(@atcute/lexicons@1.3.1) + '@atcute/lexicons': 1.3.1 + '@atcute/repo': 0.1.5(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)(@atcute/lexicons@1.3.1) '@atcute/util-fetch': 1.0.5 '@badrap/valita': 0.4.6 + transitivePeerDependencies: + - '@atcute/cbor' + - '@atcute/cid' - '@atcute/lexicons@1.2.9': + '@atcute/lexicon-resolver@1.0.2(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)(@atcute/identity-resolver@2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicon-doc@3.1.0(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2)': dependencies: - '@atcute/uint8array': 1.1.1 - '@atcute/util-text': 1.2.0 + '@atcute/crypto': 2.4.4 + '@atcute/identity': 2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/identity-resolver': 2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/lexicon-doc': 3.1.0(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/lexicons': 2.1.1 + '@atcute/repo': 1.1.1(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)(@atcute/lexicons@2.1.1) + '@atcute/util-fetch': 2.1.0(typescript@6.0.2) + valibot: 1.5.0(typescript@6.0.2) + transitivePeerDependencies: + - '@atcute/cbor' + - '@atcute/cid' + - typescript + + '@atcute/lexicons@1.3.1': + dependencies: + '@atcute/uint8array': 1.2.1 + '@atcute/util-text': 1.3.4 '@standard-schema/spec': 1.1.0 esm-env: 1.2.2 @@ -3402,64 +3329,104 @@ snapshots: '@standard-schema/spec': 1.1.0 esm-env: 1.2.2 - '@atcute/mst@1.0.0': + '@atcute/mst@1.1.1(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)': dependencies: - '@atcute/cbor': 2.3.2 + '@atcute/cbor': 2.3.8(@atcute/cid@2.4.1) '@atcute/cid': 2.4.1 - '@atcute/uint8array': 1.1.1 + '@atcute/uint8array': 1.2.1 '@atcute/multibase@1.2.0': dependencies: - '@atcute/uint8array': 1.1.1 + '@atcute/uint8array': 1.2.1 - '@atcute/oauth-crypto@0.1.0': + '@atcute/multibase@1.2.5': dependencies: - '@atcute/multibase': 1.2.0 - '@atcute/uint8array': 1.1.1 - '@badrap/valita': 0.4.6 - nanoid: 5.1.7 + '@atcute/uint8array': 1.2.1 - '@atcute/oauth-keyset@0.1.0': + '@atcute/oauth-browser-client@5.1.0(@atcute/identity-resolver@2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2)': dependencies: - '@atcute/oauth-crypto': 0.1.0 + '@atcute/client': 5.1.2(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/identity-resolver': 2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/lexicons': 2.1.1 + '@atcute/oauth-crypto': 1.0.1(typescript@6.0.2) + '@atcute/oauth-types': 1.0.1(typescript@6.0.2) + nanoid: 6.0.2 + transitivePeerDependencies: + - typescript - '@atcute/oauth-node-client@1.1.0': + '@atcute/oauth-crypto@1.0.1(typescript@6.0.2)': dependencies: - '@atcute/client': 4.2.1 - '@atcute/identity': 1.1.4 - '@atcute/identity-resolver': 1.2.2(@atcute/identity@1.1.4) - '@atcute/lexicons': 1.2.9 - '@atcute/oauth-crypto': 0.1.0 - '@atcute/oauth-keyset': 0.1.0 - '@atcute/oauth-types': 0.1.1 - '@atcute/util-fetch': 1.0.5 - '@badrap/valita': 0.4.6 - nanoid: 5.1.7 + '@atcute/multibase': 1.2.5 + '@atcute/uint8array': 1.2.1 + nanoid: 5.1.16 + valibot: 1.5.0(typescript@6.0.2) + transitivePeerDependencies: + - typescript - '@atcute/oauth-types@0.1.1': + '@atcute/oauth-keyset@0.1.3(typescript@6.0.2)': dependencies: - '@atcute/identity': 1.1.4 - '@atcute/lexicons': 1.2.9 - '@atcute/oauth-keyset': 0.1.0 - '@badrap/valita': 0.4.6 + '@atcute/oauth-crypto': 1.0.1(typescript@6.0.2) + transitivePeerDependencies: + - typescript - '@atcute/repo@0.1.3': + '@atcute/oauth-node-client@2.0.1(@atcute/identity-resolver@2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2)': dependencies: - '@atcute/car': 5.1.1 - '@atcute/cbor': 2.3.2 + '@atcute/client': 5.1.2(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/identity': 2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/identity-resolver': 2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/lexicons': 2.1.1 + '@atcute/oauth-crypto': 1.0.1(typescript@6.0.2) + '@atcute/oauth-keyset': 0.1.3(typescript@6.0.2) + '@atcute/oauth-types': 1.0.1(typescript@6.0.2) + '@atcute/util-fetch': 2.1.0(typescript@6.0.2) + nanoid: 5.1.16 + valibot: 1.5.0(typescript@6.0.2) + transitivePeerDependencies: + - typescript + + '@atcute/oauth-types@1.0.1(typescript@6.0.2)': + dependencies: + '@atcute/identity': 2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/lexicons': 2.1.1 + '@atcute/oauth-keyset': 0.1.3(typescript@6.0.2) + valibot: 1.5.0(typescript@6.0.2) + transitivePeerDependencies: + - typescript + + '@atcute/password-session@1.0.2(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2)': + dependencies: + '@atcute/client': 5.1.2(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/identity': 2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/lexicons': 2.1.1 + transitivePeerDependencies: + - typescript + + '@atcute/repo@0.1.5(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)(@atcute/lexicons@1.3.1)': + dependencies: + '@atcute/car': 5.1.2(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1) + '@atcute/cbor': 2.3.8(@atcute/cid@2.4.1) '@atcute/cid': 2.4.1 - '@atcute/crypto': 2.4.1 - '@atcute/lexicons': 1.2.9 - '@atcute/mst': 1.0.0 - '@atcute/uint8array': 1.1.1 + '@atcute/crypto': 2.4.4 + '@atcute/lexicons': 1.3.1 + '@atcute/mst': 1.1.1(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1) + '@atcute/uint8array': 1.2.1 - '@atcute/tid@1.1.2': + '@atcute/repo@1.1.1(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)(@atcute/lexicons@2.1.1)': dependencies: - '@atcute/time-ms': 1.3.2 + '@atcute/car': 6.1.0(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1) + '@atcute/cbor': 2.3.8(@atcute/cid@2.4.1) + '@atcute/cid': 2.4.1 + '@atcute/crypto': 2.4.4 + '@atcute/lexicons': 2.1.1 + '@atcute/mst': 1.1.1(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1) + '@atcute/uint8array': 1.2.1 + '@mary-ext/ds-queue': 0.1.0 - '@atcute/time-ms@1.3.2': {} + '@atcute/tid@1.1.4': + dependencies: + '@atcute/time-ms': 1.3.3 - '@atcute/uint8array@1.1.1': {} + '@atcute/time-ms@1.3.3': {} '@atcute/uint8array@1.2.1': {} @@ -3467,38 +3434,40 @@ snapshots: dependencies: '@badrap/valita': 0.4.6 - '@atcute/util-text@1.2.0': + '@atcute/util-fetch@2.1.0(typescript@6.0.2)': dependencies: - unicode-segmenter: 0.14.5 + valibot: 1.5.0(typescript@6.0.2) + transitivePeerDependencies: + - typescript '@atcute/util-text@1.3.4': dependencies: unicode-segmenter: 0.17.3 - '@atcute/varint@2.0.0': {} + '@atcute/varint@2.0.2': {} '@atcute/xrpc-server@0.1.12': dependencies: '@atcute/cbor': 2.3.2 '@atcute/crypto': 2.4.1 '@atcute/identity': 1.1.4 - '@atcute/identity-resolver': 1.2.2(@atcute/identity@1.1.4) - '@atcute/lexicons': 1.2.9 + '@atcute/identity-resolver': 1.2.3(@atcute/identity@1.1.4)(@atcute/lexicons@1.3.1) + '@atcute/lexicons': 1.3.1 '@atcute/multibase': 1.2.0 - '@atcute/uint8array': 1.1.1 + '@atcute/uint8array': 1.2.1 '@badrap/valita': 0.4.6 - nanoid: 5.1.7 + nanoid: 5.1.16 '@atmo-dev/contrail-appview@0.12.2(patch_hash=6f9c80a051e9e07c3668edd12c912190196f26394e6ec22f8326a1b5acc2d8f9)': dependencies: - '@atcute/atproto': 3.1.10 + '@atcute/atproto': 3.1.12(@atcute/lexicons@1.3.1) '@atcute/cbor': 2.3.2 '@atcute/cid': 2.4.1 - '@atcute/client': 4.2.1 + '@atcute/client': 4.2.2(@atcute/lexicons@1.3.1) '@atcute/identity': 1.1.4 - '@atcute/identity-resolver': 1.2.2(@atcute/identity@1.1.4) - '@atcute/jetstream': 1.1.2 - '@atcute/lexicons': 1.2.9 + '@atcute/identity-resolver': 1.2.3(@atcute/identity@1.1.4)(@atcute/lexicons@1.3.1) + '@atcute/jetstream': 1.1.3(@atcute/lexicons@1.3.1) + '@atcute/lexicons': 1.3.1 '@atcute/xrpc-server': 0.1.12 '@atmo-dev/contrail-authority': 0.12.2 '@atmo-dev/contrail-base': 0.12.2(patch_hash=f13888cab253afcb9fe4fa92ace590d94e28ba71a58fea3919d6c2284daffa22) @@ -3511,7 +3480,7 @@ snapshots: '@atmo-dev/contrail-authority@0.12.2': dependencies: '@atcute/cid': 2.4.1 - '@atcute/lexicons': 1.2.9 + '@atcute/lexicons': 1.3.1 '@atmo-dev/contrail-base': 0.12.2(patch_hash=f13888cab253afcb9fe4fa92ace590d94e28ba71a58fea3919d6c2284daffa22) hono: 4.12.14 transitivePeerDependencies: @@ -3519,20 +3488,22 @@ snapshots: '@atmo-dev/contrail-base@0.12.2(patch_hash=f13888cab253afcb9fe4fa92ace590d94e28ba71a58fea3919d6c2284daffa22)': dependencies: - '@atcute/atproto': 3.1.10 + '@atcute/atproto': 3.1.12(@atcute/lexicons@1.3.1) '@atcute/cid': 2.4.1 - '@atcute/client': 4.2.1 + '@atcute/client': 4.2.2(@atcute/lexicons@1.3.1) '@atcute/identity': 1.1.4 - '@atcute/identity-resolver': 1.2.2(@atcute/identity@1.1.4) - '@atcute/lexicons': 1.2.9 + '@atcute/identity-resolver': 1.2.3(@atcute/identity@1.1.4)(@atcute/lexicons@1.3.1) + '@atcute/lexicons': 1.3.1 '@atcute/xrpc-server': 0.1.12 hono: 4.12.14 - '@atmo-dev/contrail-lexicons@0.4.4(wrangler@4.77.0(@cloudflare/workers-types@4.20260317.1))': + '@atmo-dev/contrail-lexicons@0.4.15(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1)(wrangler@4.153.0(@cloudflare/workers-types@5.20261026.1)(@types/node@24.19.2))': dependencies: - '@atcute/lex-cli': 2.5.3 - '@atmo-dev/contrail': 0.5.0(wrangler@4.77.0(@cloudflare/workers-types@4.20260317.1)) + '@atcute/lex-cli': 2.8.2(@atcute/cbor@2.3.8(@atcute/cid@2.4.1))(@atcute/cid@2.4.1) + '@atmo-dev/contrail': 0.12.2(wrangler@4.153.0(@cloudflare/workers-types@5.20261026.1)(@types/node@24.19.2)) transitivePeerDependencies: + - '@atcute/cbor' + - '@atcute/cid' - pg - react - wrangler @@ -3545,16 +3516,16 @@ snapshots: transitivePeerDependencies: - pg - '@atmo-dev/contrail@0.12.2(wrangler@4.77.0(@cloudflare/workers-types@4.20260317.1))': + '@atmo-dev/contrail@0.12.2(wrangler@4.153.0(@cloudflare/workers-types@5.20261026.1)(@types/node@24.19.2))': dependencies: - '@atcute/atproto': 3.1.10 + '@atcute/atproto': 3.1.12(@atcute/lexicons@1.3.1) '@atcute/cbor': 2.3.2 '@atcute/cid': 2.4.1 - '@atcute/client': 4.2.1 + '@atcute/client': 4.2.2(@atcute/lexicons@1.3.1) '@atcute/identity': 1.1.4 - '@atcute/identity-resolver': 1.2.2(@atcute/identity@1.1.4) - '@atcute/jetstream': 1.1.2 - '@atcute/lexicons': 1.2.9 + '@atcute/identity-resolver': 1.2.3(@atcute/identity@1.1.4)(@atcute/lexicons@1.3.1) + '@atcute/jetstream': 1.1.3(@atcute/lexicons@1.3.1) + '@atcute/lexicons': 1.3.1 '@atcute/xrpc-server': 0.1.12 '@atmo-dev/contrail-appview': 0.12.2(patch_hash=6f9c80a051e9e07c3668edd12c912190196f26394e6ec22f8326a1b5acc2d8f9) '@atmo-dev/contrail-authority': 0.12.2 @@ -3564,35 +3535,16 @@ snapshots: hono: 4.12.14 jiti: 2.6.1 optionalDependencies: - wrangler: 4.77.0(@cloudflare/workers-types@4.20260317.1) - transitivePeerDependencies: - - react - - '@atmo-dev/contrail@0.5.0(wrangler@4.77.0(@cloudflare/workers-types@4.20260317.1))': - dependencies: - '@atcute/atproto': 3.1.10 - '@atcute/cbor': 2.3.2 - '@atcute/cid': 2.4.1 - '@atcute/client': 4.2.1 - '@atcute/identity': 1.1.4 - '@atcute/identity-resolver': 1.2.2(@atcute/identity@1.1.4) - '@atcute/jetstream': 1.1.2 - '@atcute/lexicons': 1.2.9 - '@atcute/xrpc-server': 0.1.12 - cac: 7.0.0 - hono: 4.12.14 - jiti: 2.6.1 - optionalDependencies: - wrangler: 4.77.0(@cloudflare/workers-types@4.20260317.1) + wrangler: 4.153.0(@cloudflare/workers-types@5.20261026.1)(@types/node@24.19.2) transitivePeerDependencies: - react - '@atmo-dev/kit@0.0.2(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(@tiptap/extensions@3.32.0(@tiptap/core@3.32.0(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0)(@tiptap/suggestion@3.32.0(@floating-ui/dom@1.8.0)(@tiptap/core@3.32.0(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(tailwindcss@4.2.2)': + '@atmo-dev/kit@0.0.2(@internationalized/date@3.12.4)(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(@tiptap/extensions@3.32.0(@tiptap/core@3.32.0(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0)(@tiptap/suggestion@3.32.0(@floating-ui/dom@1.8.0)(@tiptap/core@3.32.0(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(tailwindcss@4.3.3)': dependencies: '@atcute/bluesky-richtext-parser': 2.1.2 '@atcute/lexicons': 2.1.1 '@fontsource-variable/figtree': 5.3.0 - '@sketchyicons/svelte': 0.5.0(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + '@sketchyicons/svelte': 0.5.0(svelte@5.57.3(@typescript-eslint/types@8.72.1)) '@tiptap/core': 3.32.0(@tiptap/pm@3.32.0) '@tiptap/extension-document': 3.32.0(@tiptap/core@3.32.0(@tiptap/pm@3.32.0)) '@tiptap/extension-hard-break': 3.32.0(@tiptap/core@3.32.0(@tiptap/pm@3.32.0)) @@ -3601,13 +3553,13 @@ snapshots: '@tiptap/extension-paragraph': 3.32.0(@tiptap/core@3.32.0(@tiptap/pm@3.32.0)) '@tiptap/extension-placeholder': 3.32.0(@tiptap/extensions@3.32.0(@tiptap/core@3.32.0(@tiptap/pm@3.32.0))(@tiptap/pm@3.32.0)) '@tiptap/extension-text': 3.32.0(@tiptap/core@3.32.0(@tiptap/pm@3.32.0)) - bits-ui: 2.20.2(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + bits-ui: 2.20.2(@internationalized/date@3.12.4)(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1)) canvas-confetti: 1.9.4 clsx: 2.1.1 hls.js: 1.7.3 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) tailwind-merge: 3.7.0 - tailwindcss: 4.2.2 + tailwindcss: 4.3.3 transitivePeerDependencies: - '@internationalized/date' - '@sveltejs/kit' @@ -3615,543 +3567,432 @@ snapshots: - '@tiptap/pm' - '@tiptap/suggestion' - '@babel/runtime@7.29.2': {} - '@badrap/valita@0.4.6': {} - '@blazediff/core@1.9.1': {} - - '@changesets/apply-release-plan@7.1.1': - dependencies: - '@changesets/config': 3.1.4 - '@changesets/get-version-range-type': 0.4.0 - '@changesets/git': 3.0.4 - '@changesets/should-skip-package': 0.1.2 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - detect-indent: 6.1.0 - fs-extra: 7.0.1 - lodash.startcase: 4.4.0 - outdent: 0.5.0 - prettier: 2.8.8 - resolve-from: 5.0.0 - semver: 7.7.4 - - '@changesets/assemble-release-plan@6.0.10': - dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.4 - '@changesets/should-skip-package': 0.1.2 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - semver: 7.7.4 - - '@changesets/changelog-git@0.2.1': - dependencies: - '@changesets/types': 6.1.0 - - '@changesets/cli@2.31.0(@types/node@22.20.0)': - dependencies: - '@changesets/apply-release-plan': 7.1.1 - '@changesets/assemble-release-plan': 6.0.10 - '@changesets/changelog-git': 0.2.1 - '@changesets/config': 3.1.4 - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.4 - '@changesets/get-release-plan': 4.0.16 - '@changesets/git': 3.0.4 - '@changesets/logger': 0.1.1 - '@changesets/pre': 2.0.2 - '@changesets/read': 0.6.7 - '@changesets/should-skip-package': 0.1.2 - '@changesets/types': 6.1.0 - '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.3(@types/node@22.20.0) - '@manypkg/get-packages': 1.1.3 - ansi-colors: 4.1.3 - enquirer: 2.4.1 - fs-extra: 7.0.1 - mri: 1.2.0 - package-manager-detector: 0.2.11 - picocolors: 1.1.1 - resolve-from: 5.0.0 - semver: 7.7.4 - spawndamnit: 3.0.1 - term-size: 2.2.1 - transitivePeerDependencies: - - '@types/node' + '@blazediff/core@1.10.0': {} - '@changesets/config@3.1.4': + '@cacheable/memory@2.2.0': dependencies: - '@changesets/errors': 0.2.0 - '@changesets/get-dependents-graph': 2.1.4 - '@changesets/logger': 0.1.1 - '@changesets/should-skip-package': 0.1.2 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 - micromatch: 4.0.8 + '@cacheable/utils': 2.5.0 + '@keyv/bigmap': 1.3.1(keyv@5.6.0) + hookified: 1.15.1 + keyv: 5.6.0 - '@changesets/errors@0.2.0': + '@cacheable/utils@2.5.0': dependencies: - extendable-error: 0.1.7 + hashery: 1.5.1 + keyv: 5.6.0 - '@changesets/get-dependents-graph@2.1.4': + '@changesets/apply-release-plan@8.1.1': dependencies: - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - picocolors: 1.1.1 - semver: 7.7.4 + '@changesets/config': 4.0.1 + '@changesets/format': 0.1.3 + '@changesets/git': 4.0.1 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 + import-meta-resolve: 4.2.0 + jsonc-parser: 3.3.1 + semver: 7.8.5 - '@changesets/get-release-plan@4.0.16': + '@changesets/assemble-release-plan@7.0.0': dependencies: - '@changesets/assemble-release-plan': 6.0.10 - '@changesets/config': 3.1.4 - '@changesets/pre': 2.0.2 - '@changesets/read': 0.6.7 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 + '@changesets/errors': 1.0.0 + '@changesets/get-dependents-graph': 3.0.0 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 + semver: 7.8.5 - '@changesets/get-version-range-type@0.4.0': {} - - '@changesets/git@3.0.4': - dependencies: - '@changesets/errors': 0.2.0 - '@manypkg/get-packages': 1.1.3 - is-subdir: 1.2.0 - micromatch: 4.0.8 - spawndamnit: 3.0.1 - - '@changesets/logger@0.1.1': + '@changesets/changelog-git@1.0.0': dependencies: - picocolors: 1.1.1 + '@changesets/types': 7.0.0 - '@changesets/parse@0.4.3': + '@changesets/cli@3.0.3': dependencies: - '@changesets/types': 6.1.0 - js-yaml: 4.1.1 + '@changesets/apply-release-plan': 8.1.1 + '@changesets/assemble-release-plan': 7.0.0 + '@changesets/changelog-git': 1.0.0 + '@changesets/config': 4.0.1 + '@changesets/errors': 1.0.0 + '@changesets/get-dependents-graph': 3.0.0 + '@changesets/git': 4.0.1 + '@changesets/pre': 3.0.0 + '@changesets/read': 1.0.1 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 + '@changesets/write': 1.0.1 + '@clack/prompts': 1.8.1 + '@manypkg/get-packages': 3.1.0 + '@pnpm/deps.graph-sequencer': 1100.0.1 + cac: 7.1.0 + import-meta-resolve: 4.2.0 + launch-editor: 2.14.2 + package-manager-detector: 1.9.0 + semver: 7.8.5 + tinyexec: 1.3.1 - '@changesets/pre@2.0.2': + '@changesets/config@4.0.1': dependencies: - '@changesets/errors': 0.2.0 - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 - fs-extra: 7.0.1 + '@changesets/get-dependents-graph': 3.0.0 + '@changesets/should-skip-package': 1.0.0 + '@changesets/types': 7.0.0 + '@manypkg/get-packages': 3.1.0 + picomatch: 4.0.7 - '@changesets/read@0.6.7': - dependencies: - '@changesets/git': 3.0.4 - '@changesets/logger': 0.1.1 - '@changesets/parse': 0.4.3 - '@changesets/types': 6.1.0 - fs-extra: 7.0.1 - p-filter: 2.1.0 - picocolors: 1.1.1 + '@changesets/errors@1.0.0': {} - '@changesets/should-skip-package@0.1.2': + '@changesets/format@0.1.3': dependencies: - '@changesets/types': 6.1.0 - '@manypkg/get-packages': 1.1.3 + package-manager-detector: 1.9.0 + tinyexec: 1.3.1 - '@changesets/types@4.1.0': {} - - '@changesets/types@6.1.0': {} - - '@changesets/write@0.4.0': + '@changesets/get-dependents-graph@3.0.0': dependencies: - '@changesets/types': 6.1.0 - fs-extra: 7.0.1 - human-id: 4.1.3 - prettier: 2.8.8 + '@changesets/types': 7.0.0 + semver: 7.8.5 - '@cloudflare/kv-asset-handler@0.4.2': {} - - '@cloudflare/unenv-preset@2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260317.1)': + '@changesets/git@4.0.1': dependencies: - unenv: 2.0.0-rc.24 - optionalDependencies: - workerd: 1.20260317.1 - - '@cloudflare/workerd-darwin-64@1.20260317.1': - optional: true - - '@cloudflare/workerd-darwin-arm64@1.20260317.1': - optional: true - - '@cloudflare/workerd-linux-64@1.20260317.1': - optional: true - - '@cloudflare/workerd-linux-arm64@1.20260317.1': - optional: true + '@changesets/errors': 1.0.0 + '@changesets/types': 7.0.0 + '@manypkg/get-packages': 3.1.0 + picomatch: 4.0.7 + tinyexec: 1.3.1 - '@cloudflare/workerd-windows-64@1.20260317.1': - optional: true - - '@cloudflare/workers-types@4.20260317.1': {} - - '@cspotcode/source-map-support@0.8.1': + '@changesets/parse@1.0.0': dependencies: - '@jridgewell/trace-mapping': 0.3.9 + '@changesets/types': 7.0.0 + yaml: 2.9.1 - '@emnapi/core@1.9.1': + '@changesets/pre@3.0.0': dependencies: - '@emnapi/wasi-threads': 1.2.0 - tslib: 2.8.1 - optional: true + '@changesets/errors': 1.0.0 + '@changesets/types': 7.0.0 + '@manypkg/get-packages': 3.1.0 - '@emnapi/runtime@1.9.1': + '@changesets/read@1.0.1': dependencies: - tslib: 2.8.1 - optional: true + '@changesets/git': 4.0.1 + '@changesets/parse': 1.0.0 + '@changesets/types': 7.0.0 - '@emnapi/wasi-threads@1.2.0': + '@changesets/should-skip-package@1.0.0': dependencies: - tslib: 2.8.1 - optional: true - - '@esbuild/aix-ppc64@0.27.3': - optional: true + '@changesets/types': 7.0.0 - '@esbuild/aix-ppc64@0.27.4': - optional: true - - '@esbuild/android-arm64@0.27.3': - optional: true - - '@esbuild/android-arm64@0.27.4': - optional: true - - '@esbuild/android-arm@0.27.3': - optional: true - - '@esbuild/android-arm@0.27.4': - optional: true - - '@esbuild/android-x64@0.27.3': - optional: true - - '@esbuild/android-x64@0.27.4': - optional: true + '@changesets/types@7.0.0': {} - '@esbuild/darwin-arm64@0.27.3': - optional: true - - '@esbuild/darwin-arm64@0.27.4': - optional: true - - '@esbuild/darwin-x64@0.27.3': - optional: true - - '@esbuild/darwin-x64@0.27.4': - optional: true - - '@esbuild/freebsd-arm64@0.27.3': - optional: true - - '@esbuild/freebsd-arm64@0.27.4': - optional: true + '@changesets/write@1.0.1': + dependencies: + '@changesets/format': 0.1.3 + '@changesets/types': 7.0.0 + human-id: 4.2.2 - '@esbuild/freebsd-x64@0.27.3': - optional: true + '@clack/core@1.5.1': + dependencies: + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 - '@esbuild/freebsd-x64@0.27.4': - optional: true + '@clack/prompts@1.8.1': + dependencies: + '@clack/core': 1.5.1 + fast-string-width: 3.0.2 + fast-wrap-ansi: 0.2.2 + sisteransi: 1.0.5 - '@esbuild/linux-arm64@0.27.3': - optional: true + '@cloudflare/kv-asset-handler@0.5.0': {} - '@esbuild/linux-arm64@0.27.4': - optional: true + '@cloudflare/unenv-preset@2.16.2(unenv@2.0.0-rc.24)(workerd@1.20261023.1)': + dependencies: + unenv: 2.0.0-rc.24 + optionalDependencies: + workerd: 1.20261023.1 - '@esbuild/linux-arm@0.27.3': + '@cloudflare/workerd-darwin-64@1.20261023.1': optional: true - '@esbuild/linux-arm@0.27.4': + '@cloudflare/workerd-darwin-arm64@1.20261023.1': optional: true - '@esbuild/linux-ia32@0.27.3': + '@cloudflare/workerd-linux-64@1.20261023.1': optional: true - '@esbuild/linux-ia32@0.27.4': + '@cloudflare/workerd-linux-arm64@1.20261023.1': optional: true - '@esbuild/linux-loong64@0.27.3': + '@cloudflare/workerd-windows-64@1.20261023.1': optional: true - '@esbuild/linux-loong64@0.27.4': - optional: true + '@cloudflare/workers-types@5.20261026.1': {} - '@esbuild/linux-mips64el@0.27.3': - optional: true + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 - '@esbuild/linux-mips64el@0.27.4': + '@emnapi/runtime@1.11.3': + dependencies: + tslib: 2.8.1 optional: true - '@esbuild/linux-ppc64@0.27.3': + '@esbuild/aix-ppc64@0.28.2': optional: true - '@esbuild/linux-ppc64@0.27.4': + '@esbuild/android-arm64@0.28.2': optional: true - '@esbuild/linux-riscv64@0.27.3': + '@esbuild/android-arm@0.28.2': optional: true - '@esbuild/linux-riscv64@0.27.4': + '@esbuild/android-x64@0.28.2': optional: true - '@esbuild/linux-s390x@0.27.3': + '@esbuild/darwin-arm64@0.28.2': optional: true - '@esbuild/linux-s390x@0.27.4': + '@esbuild/darwin-x64@0.28.2': optional: true - '@esbuild/linux-x64@0.27.3': + '@esbuild/freebsd-arm64@0.28.2': optional: true - '@esbuild/linux-x64@0.27.4': + '@esbuild/freebsd-x64@0.28.2': optional: true - '@esbuild/netbsd-arm64@0.27.3': + '@esbuild/linux-arm64@0.28.2': optional: true - '@esbuild/netbsd-arm64@0.27.4': + '@esbuild/linux-arm@0.28.2': optional: true - '@esbuild/netbsd-x64@0.27.3': + '@esbuild/linux-ia32@0.28.2': optional: true - '@esbuild/netbsd-x64@0.27.4': + '@esbuild/linux-loong64@0.28.2': optional: true - '@esbuild/openbsd-arm64@0.27.3': + '@esbuild/linux-mips64el@0.28.2': optional: true - '@esbuild/openbsd-arm64@0.27.4': + '@esbuild/linux-ppc64@0.28.2': optional: true - '@esbuild/openbsd-x64@0.27.3': + '@esbuild/linux-riscv64@0.28.2': optional: true - '@esbuild/openbsd-x64@0.27.4': + '@esbuild/linux-s390x@0.28.2': optional: true - '@esbuild/openharmony-arm64@0.27.3': + '@esbuild/linux-x64@0.28.2': optional: true - '@esbuild/openharmony-arm64@0.27.4': + '@esbuild/netbsd-arm64@0.28.2': optional: true - '@esbuild/sunos-x64@0.27.3': + '@esbuild/netbsd-x64@0.28.2': optional: true - '@esbuild/sunos-x64@0.27.4': + '@esbuild/openbsd-arm64@0.28.2': optional: true - '@esbuild/win32-arm64@0.27.3': + '@esbuild/openbsd-x64@0.28.2': optional: true - '@esbuild/win32-arm64@0.27.4': + '@esbuild/openharmony-arm64@0.28.2': optional: true - '@esbuild/win32-ia32@0.27.3': + '@esbuild/sunos-x64@0.28.2': optional: true - '@esbuild/win32-ia32@0.27.4': + '@esbuild/win32-arm64@0.28.2': optional: true - '@esbuild/win32-x64@0.27.3': + '@esbuild/win32-ia32@0.28.2': optional: true - '@esbuild/win32-x64@0.27.4': + '@esbuild/win32-x64@0.28.2': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.1.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.10.1(eslint@10.13.0(jiti@2.7.0))': dependencies: - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.13.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@2.0.3(eslint@10.1.0(jiti@2.6.1))': + '@eslint/compat@2.1.1(eslint@10.13.0(jiti@2.7.0))': dependencies: - '@eslint/core': 1.1.1 + '@eslint/core': 1.2.1 optionalDependencies: - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.13.0(jiti@2.7.0) - '@eslint/config-array@0.23.3': + '@eslint/config-array@0.23.5': dependencies: - '@eslint/object-schema': 3.0.3 + '@eslint/object-schema': 3.0.5 debug: 4.4.3 - minimatch: 10.2.4 + minimatch: 10.2.6 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.5.3': + '@eslint/config-helpers@0.7.0': dependencies: - '@eslint/core': 1.1.1 + '@eslint/core': 1.2.1 - '@eslint/core@1.1.1': + '@eslint/core@1.2.1': dependencies: '@types/json-schema': 7.0.15 - '@eslint/js@10.0.1(eslint@10.1.0(jiti@2.6.1))': + '@eslint/js@10.0.1(eslint@10.13.0(jiti@2.7.0))': optionalDependencies: - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.13.0(jiti@2.7.0) - '@eslint/object-schema@3.0.3': {} + '@eslint/object-schema@3.0.5': {} - '@eslint/plugin-kit@0.6.1': + '@eslint/plugin-kit@0.7.3': dependencies: - '@eslint/core': 1.1.1 + '@eslint/core': 1.2.1 levn: 0.4.1 - '@floating-ui/core@1.7.5': - dependencies: - '@floating-ui/utils': 0.2.11 - '@floating-ui/core@1.8.0': dependencies: '@floating-ui/utils': 0.2.12 - '@floating-ui/dom@1.7.6': - dependencies: - '@floating-ui/core': 1.7.5 - '@floating-ui/utils': 0.2.11 - '@floating-ui/dom@1.8.0': dependencies: '@floating-ui/core': 1.8.0 '@floating-ui/utils': 0.2.12 - '@floating-ui/utils@0.2.11': {} - '@floating-ui/utils@0.2.12': {} - '@fontsource-variable/caveat@5.3.0': {} - '@fontsource-variable/figtree@5.3.0': {} - '@humanfs/core@0.19.1': {} + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 - '@humanfs/node@0.16.7': + '@humanfs/node@0.16.8': dependencies: - '@humanfs/core': 0.19.1 + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 '@humanwhocodes/retry': 0.4.3 + '@humanfs/types@0.15.0': {} + '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.4.3': {} '@img/colour@1.1.0': {} - '@img/sharp-darwin-arm64@0.34.5': + '@img/sharp-darwin-arm64@0.35.5': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.4 + '@img/sharp-libvips-darwin-arm64': 1.3.4 optional: true - '@img/sharp-darwin-x64@0.34.5': + '@img/sharp-darwin-x64@0.35.5': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.4 + '@img/sharp-libvips-darwin-x64': 1.3.4 + optional: true + + '@img/sharp-freebsd-wasm32@0.35.5': + dependencies: + '@img/sharp-wasm32': 0.35.5 optional: true - '@img/sharp-libvips-darwin-arm64@1.2.4': + '@img/sharp-libvips-darwin-arm64@1.3.4': optional: true - '@img/sharp-libvips-darwin-x64@1.2.4': + '@img/sharp-libvips-darwin-x64@1.3.4': optional: true - '@img/sharp-libvips-linux-arm64@1.2.4': + '@img/sharp-libvips-linux-arm64@1.3.4': optional: true - '@img/sharp-libvips-linux-arm@1.2.4': + '@img/sharp-libvips-linux-arm@1.3.4': optional: true - '@img/sharp-libvips-linux-ppc64@1.2.4': + '@img/sharp-libvips-linux-ppc64@1.3.4': optional: true - '@img/sharp-libvips-linux-riscv64@1.2.4': + '@img/sharp-libvips-linux-riscv64@1.3.4': optional: true - '@img/sharp-libvips-linux-s390x@1.2.4': + '@img/sharp-libvips-linux-s390x@1.3.4': optional: true - '@img/sharp-libvips-linux-x64@1.2.4': + '@img/sharp-libvips-linux-x64@1.3.4': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.4': + '@img/sharp-libvips-linuxmusl-arm64@1.3.4': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.4': + '@img/sharp-libvips-linuxmusl-x64@1.3.4': optional: true - '@img/sharp-linux-arm64@0.34.5': + '@img/sharp-linux-arm64@0.35.5': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.4 + '@img/sharp-libvips-linux-arm64': 1.3.4 optional: true - '@img/sharp-linux-arm@0.34.5': + '@img/sharp-linux-arm@0.35.5': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.4 + '@img/sharp-libvips-linux-arm': 1.3.4 optional: true - '@img/sharp-linux-ppc64@0.34.5': + '@img/sharp-linux-ppc64@0.35.5': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.4 + '@img/sharp-libvips-linux-ppc64': 1.3.4 optional: true - '@img/sharp-linux-riscv64@0.34.5': + '@img/sharp-linux-riscv64@0.35.5': optionalDependencies: - '@img/sharp-libvips-linux-riscv64': 1.2.4 + '@img/sharp-libvips-linux-riscv64': 1.3.4 optional: true - '@img/sharp-linux-s390x@0.34.5': + '@img/sharp-linux-s390x@0.35.5': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.4 + '@img/sharp-libvips-linux-s390x': 1.3.4 optional: true - '@img/sharp-linux-x64@0.34.5': + '@img/sharp-linux-x64@0.35.5': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.4 + '@img/sharp-libvips-linux-x64': 1.3.4 optional: true - '@img/sharp-linuxmusl-arm64@0.34.5': + '@img/sharp-linuxmusl-arm64@0.35.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.4 optional: true - '@img/sharp-linuxmusl-x64@0.34.5': + '@img/sharp-linuxmusl-x64@0.35.5': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 + '@img/sharp-libvips-linuxmusl-x64': 1.3.4 optional: true - '@img/sharp-wasm32@0.34.5': + '@img/sharp-wasm32@0.35.5': dependencies: - '@emnapi/runtime': 1.9.1 + '@emnapi/runtime': 1.11.3 optional: true - '@img/sharp-win32-arm64@0.34.5': + '@img/sharp-webcontainers-wasm32@0.35.5': + dependencies: + '@img/sharp-wasm32': 0.35.5 optional: true - '@img/sharp-win32-ia32@0.34.5': + '@img/sharp-win32-arm64@0.35.5': optional: true - '@img/sharp-win32-x64@0.34.5': + '@img/sharp-win32-ia32@0.35.5': optional: true - '@inquirer/external-editor@1.0.3(@types/node@22.20.0)': - dependencies: - chardet: 2.1.1 - iconv-lite: 0.7.2 - optionalDependencies: - '@types/node': 22.20.0 + '@img/sharp-win32-x64@0.35.5': + optional: true - '@internationalized/date@3.12.0': + '@internationalized/date@3.12.4': dependencies: - '@swc/helpers': 0.5.20 + '@swc/helpers': 0.5.23 '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/remapping@2.3.5': @@ -4161,124 +4002,115 @@ snapshots: '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/sourcemap-codec@1.6.0': {} '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 - '@manypkg/find-root@1.1.0': + '@keyv/bigmap@1.3.1(keyv@5.6.0)': dependencies: - '@babel/runtime': 7.29.2 - '@types/node': 12.20.55 - find-up: 4.1.0 - fs-extra: 8.1.0 + hashery: 1.5.1 + hookified: 1.15.1 + keyv: 5.6.0 + + '@keyv/serialize@1.1.1': {} - '@manypkg/get-packages@1.1.3': + '@manypkg/find-root@3.1.0': dependencies: - '@babel/runtime': 7.29.2 - '@changesets/types': 4.1.0 - '@manypkg/find-root': 1.1.0 - fs-extra: 8.1.0 - globby: 11.1.0 - read-yaml-file: 1.1.0 + '@manypkg/tools': 2.1.2 - '@mapbox/jsonlint-lines-primitives@2.0.2': {} + '@manypkg/get-packages@3.1.0': + dependencies: + '@manypkg/find-root': 3.1.0 + '@manypkg/tools': 2.1.2 + + '@manypkg/tools@2.1.2': + dependencies: + jju: 1.4.0 + tinyglobby: 0.2.17 + yaml: 2.9.1 + + '@mapbox/jsonlint-lines-primitives@2.0.3': {} '@mapbox/point-geometry@1.1.0': {} - '@mapbox/tiny-sdf@2.0.7': {} + '@mapbox/tiny-sdf@2.3.0': {} - '@mapbox/unitbezier@0.0.1': {} + '@mapbox/unitbezier@1.0.0': {} - '@mapbox/vector-tile@2.0.4': + '@mapbox/vector-tile@3.0.0': dependencies: '@mapbox/point-geometry': 1.1.0 '@types/geojson': 7946.0.16 - pbf: 4.0.1 + pbf: 5.1.2 - '@mapbox/whoots-js@3.1.0': {} - - '@maplibre/geojson-vt@5.0.4': {} - - '@maplibre/geojson-vt@6.0.4': + '@maplibre/geojson-vt@6.3.0': dependencies: - kdbush: 4.0.2 + kdbush: 4.1.0 - '@maplibre/maplibre-gl-style-spec@24.7.0': + '@maplibre/maplibre-gl-style-spec@26.4.4': dependencies: - '@mapbox/jsonlint-lines-primitives': 2.0.2 - '@mapbox/unitbezier': 0.0.1 + '@mapbox/jsonlint-lines-primitives': 2.0.3 + '@mapbox/unitbezier': 1.0.0 json-stringify-pretty-compact: 4.0.0 minimist: 1.2.8 quickselect: 3.0.0 - rw: 1.3.3 tinyqueue: 3.0.0 - '@maplibre/mlt@1.1.8': + '@maplibre/mlt@1.3.0': dependencies: '@mapbox/point-geometry': 1.1.0 - '@maplibre/vt-pbf@4.3.0': + '@maplibre/vt-pbf@4.3.3': dependencies: '@mapbox/point-geometry': 1.1.0 - '@mapbox/vector-tile': 2.0.4 - '@maplibre/geojson-vt': 5.0.4 '@types/geojson': 7946.0.16 - '@types/supercluster': 7.1.3 - pbf: 4.0.1 - supercluster: 8.0.1 + pbf: 5.1.2 + + '@mary-ext/ds-queue@0.1.0': {} '@mary-ext/event-iterator@1.0.0': dependencies: yocto-queue: 1.2.2 - '@mary-ext/simple-event-emitter@1.0.1': {} - - '@napi-rs/wasm-runtime@1.1.1': + '@mary-ext/event-iterator@1.1.1': dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 - '@tybys/wasm-util': 0.10.1 - optional: true + '@mary-ext/ds-queue': 0.1.0 - '@noble/secp256k1@3.0.0': {} + '@mary-ext/simple-event-emitter@1.0.1': {} - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@mary-ext/simple-event-emitter@1.1.0': {} - '@nodelib/fs.stat@2.0.5': {} + '@noble/secp256k1@3.0.0': {} - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.1 + '@noble/secp256k1@3.2.0': {} - '@number-flow/svelte@0.4.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))': + '@number-flow/svelte@0.4.2(svelte@5.57.3(@typescript-eslint/types@8.72.1))': dependencies: esm-env: 1.2.2 - number-flow: 0.6.0 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + number-flow: 0.6.2 + svelte: 5.57.3(@typescript-eslint/types@8.72.1) '@oomfware/eval@0.1.0': {} - '@optique/core@0.6.11': {} + '@oomfware/kempt@0.1.4': {} + + '@optique/core@1.3.6': {} - '@optique/run@0.6.11': + '@optique/run@1.3.6': dependencies: - '@optique/core': 0.6.11 + '@optique/core': 1.3.6 - '@oxc-project/types@0.122.0': {} + '@oxc-project/types@0.155.0': {} + + '@pnpm/deps.graph-sequencer@1100.0.1': {} '@polka/url@1.0.0-next.29': {} @@ -4294,216 +4126,224 @@ snapshots: '@poppinss/exception@1.2.3': {} - '@publint/pack@0.1.4': {} + '@publint/pack@0.1.7': + dependencies: + tinyexec: 1.3.1 - '@rolldown/binding-android-arm64@1.0.0-rc.12': + '@rolldown/binding-android-arm-eabi@1.2.15': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + '@rolldown/binding-android-arm64@1.2.15': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.12': + '@rolldown/binding-darwin-arm64@1.2.15': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + '@rolldown/binding-darwin-x64@1.2.15': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + '@rolldown/binding-freebsd-x64@1.2.15': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-arm-gnueabihf@1.2.15': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + '@rolldown/binding-linux-arm64-gnu@1.2.15': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-arm64-musl@1.2.15': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-ppc64-gnu@1.2.15': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + '@rolldown/binding-linux-s390x-gnu@1.2.15': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + '@rolldown/binding-linux-x64-gnu@1.2.15': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + '@rolldown/binding-linux-x64-musl@1.2.15': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': - dependencies: - '@napi-rs/wasm-runtime': 1.1.1 + '@rolldown/binding-openharmony-arm64@1.2.15': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + '@rolldown/binding-win32-arm64-msvc@1.2.15': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + '@rolldown/binding-win32-x64-msvc@1.2.15': optional: true - '@rolldown/pluginutils@1.0.0-rc.12': {} + '@rolldown/pluginutils@1.0.1': {} '@sindresorhus/is@7.2.0': {} - '@sketchyicons/svelte@0.5.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))': + '@sketchyicons/svelte@0.5.0(svelte@5.57.3(@typescript-eslint/types@8.72.1))': dependencies: - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) - '@speed-highlight/core@1.2.15': {} + '@speed-highlight/core@1.2.24': {} '@standard-schema/spec@1.1.0': {} - '@sveltejs/acorn-typescript@1.0.13(acorn@8.19.0)': + '@svelte-atproto/oauth@0.4.1(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)': dependencies: - acorn: 8.19.0 + '@atcute/atproto': 4.0.4(@atcute/lexicons@2.1.1) + '@atcute/bluesky': 4.0.25(@atcute/lexicons@2.1.1) + '@atcute/client': 5.1.2(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/identity-resolver': 2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/lexicons': 2.1.1 + '@atcute/oauth-browser-client': 5.1.0(@atcute/identity-resolver@2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/oauth-node-client': 2.0.1(@atcute/identity-resolver@2.0.3(@atcute/identity@2.0.2(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2))(@atcute/lexicons@2.1.1)(typescript@6.0.2) + '@atcute/tid': 1.1.4 + '@sveltejs/kit': 3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) + transitivePeerDependencies: + - '@atcute/identity' + - typescript - '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': + '@sveltejs/acorn-typescript@1.0.13(acorn@8.19.0)': dependencies: - acorn: 8.16.0 + acorn: 8.19.0 - '@sveltejs/adapter-cloudflare@7.2.8(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(wrangler@4.77.0(@cloudflare/workers-types@4.20260317.1))': + '@sveltejs/adapter-cloudflare@8.0.1(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(wrangler@4.153.0(@cloudflare/workers-types@5.20261026.1)(@types/node@24.19.2))': dependencies: - '@cloudflare/workers-types': 4.20260317.1 - '@sveltejs/kit': 2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) - worktop: 0.8.0-next.18 - wrangler: 4.77.0(@cloudflare/workers-types@4.20260317.1) + '@cloudflare/workers-types': 5.20261026.1 + '@rolldown/pluginutils': 1.0.1 + '@sveltejs/kit': 3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) + wrangler: 4.153.0(@cloudflare/workers-types@5.20261026.1)(@types/node@24.19.2) - '@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0))': + '@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1))': dependencies: + '@rolldown/pluginutils': 1.0.1 '@standard-schema/spec': 1.1.0 - '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) - '@sveltejs/vite-plugin-svelte': 7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) - '@types/cookie': 0.6.0 - acorn: 8.16.0 - cookie: 0.6.0 - devalue: 5.6.4 + '@sveltejs/vite-plugin-svelte': 7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) + cookie: 2.0.1 + devalue: 5.9.4 esm-env: 1.2.2 - kleur: 4.1.5 - magic-string: 0.30.21 + magic-string: 1.4.4 mrmime: 2.0.1 - set-cookie-parser: 3.1.0 sirv: 3.0.2 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) - vite: 8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) + vite: 8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1) optionalDependencies: typescript: 6.0.2 - '@sveltejs/package@2.5.7(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)': + '@sveltejs/load-config@0.2.3': {} + + '@sveltejs/package@3.0.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)': dependencies: + '@sveltejs/load-config': 0.2.3 chokidar: 5.0.0 - kleur: 4.1.5 - sade: 1.8.1 - semver: 7.7.4 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) - svelte2tsx: 0.7.55(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2) - transitivePeerDependencies: - - typescript + svelte: 5.57.3(@typescript-eslint/types@8.72.1) + svelte2tsx: 0.7.62(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2) + optionalDependencies: + typescript: 6.0.2 - '@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0))': + '@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1))': dependencies: deepmerge: 4.3.1 - magic-string: 0.30.21 - obug: 2.1.1 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) - vite: 8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0) - vitefu: 1.1.2(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) + magic-string: 1.4.4 + obug: 2.2.1 + svelte: 5.57.3(@typescript-eslint/types@8.72.1) + vite: 8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1) + vitefu: 1.1.3(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) - '@swc/helpers@0.5.20': + '@swc/helpers@0.5.23': dependencies: tslib: 2.8.1 - '@tailwindcss/forms@0.5.11(tailwindcss@4.2.2)': + '@tailwindcss/forms@0.5.11(tailwindcss@4.3.3)': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 4.2.2 + tailwindcss: 4.3.3 - '@tailwindcss/node@4.2.2': + '@tailwindcss/node@4.3.3': dependencies: '@jridgewell/remapping': 2.3.5 - enhanced-resolve: 5.20.1 - jiti: 2.6.1 + enhanced-resolve: 5.26.0 + jiti: 2.7.0 lightningcss: 1.32.0 magic-string: 0.30.21 - source-map-js: 1.2.1 - tailwindcss: 4.2.2 + source-map-js: 1.2.2 + tailwindcss: 4.3.3 - '@tailwindcss/oxide-android-arm64@4.2.2': + '@tailwindcss/oxide-android-arm64@4.3.3': optional: true - '@tailwindcss/oxide-darwin-arm64@4.2.2': + '@tailwindcss/oxide-darwin-arm64@4.3.3': optional: true - '@tailwindcss/oxide-darwin-x64@4.2.2': + '@tailwindcss/oxide-darwin-x64@4.3.3': optional: true - '@tailwindcss/oxide-freebsd-x64@4.2.2': + '@tailwindcss/oxide-freebsd-x64@4.3.3': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.3.3': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.2.2': + '@tailwindcss/oxide-linux-arm64-gnu@4.3.3': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.2.2': + '@tailwindcss/oxide-linux-arm64-musl@4.3.3': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.2.2': + '@tailwindcss/oxide-linux-x64-gnu@4.3.3': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.2.2': + '@tailwindcss/oxide-linux-x64-musl@4.3.3': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.2.2': + '@tailwindcss/oxide-wasm32-wasi@4.3.3': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.2.2': + '@tailwindcss/oxide-win32-arm64-msvc@4.3.3': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.2.2': + '@tailwindcss/oxide-win32-x64-msvc@4.3.3': optional: true - '@tailwindcss/oxide@4.2.2': + '@tailwindcss/oxide@4.3.3': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.2.2 - '@tailwindcss/oxide-darwin-arm64': 4.2.2 - '@tailwindcss/oxide-darwin-x64': 4.2.2 - '@tailwindcss/oxide-freebsd-x64': 4.2.2 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2 - '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2 - '@tailwindcss/oxide-linux-arm64-musl': 4.2.2 - '@tailwindcss/oxide-linux-x64-gnu': 4.2.2 - '@tailwindcss/oxide-linux-x64-musl': 4.2.2 - '@tailwindcss/oxide-wasm32-wasi': 4.2.2 - '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2 - '@tailwindcss/oxide-win32-x64-msvc': 4.2.2 - - '@tailwindcss/typography@0.5.19(tailwindcss@4.2.2)': + '@tailwindcss/oxide-android-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-arm64': 4.3.3 + '@tailwindcss/oxide-darwin-x64': 4.3.3 + '@tailwindcss/oxide-freebsd-x64': 4.3.3 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.3.3 + '@tailwindcss/oxide-linux-arm64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-arm64-musl': 4.3.3 + '@tailwindcss/oxide-linux-x64-gnu': 4.3.3 + '@tailwindcss/oxide-linux-x64-musl': 4.3.3 + '@tailwindcss/oxide-wasm32-wasi': 4.3.3 + '@tailwindcss/oxide-win32-arm64-msvc': 4.3.3 + '@tailwindcss/oxide-win32-x64-msvc': 4.3.3 + + '@tailwindcss/typography@0.5.20(tailwindcss@4.3.3)': dependencies: postcss-selector-parser: 6.0.10 - tailwindcss: 4.2.2 + tailwindcss: 4.3.3 - '@tailwindcss/vite@4.2.2(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0))': + '@tailwindcss/vite@4.3.3(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1))': dependencies: - '@tailwindcss/node': 4.2.2 - '@tailwindcss/oxide': 4.2.2 - tailwindcss: 4.2.2 - vite: 8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0) + '@tailwindcss/node': 4.3.3 + '@tailwindcss/oxide': 4.3.3 + tailwindcss: 4.3.3 + vite: 8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1) - '@takumi-rs/helpers@2.16.3': {} + '@takumi-rs/helpers@2.18.2': {} - '@takumi-rs/wasm@2.16.3': + '@takumi-rs/wasm@2.18.2': dependencies: - '@takumi-rs/helpers': 2.16.3 + '@takumi-rs/helpers': 2.18.2 transitivePeerDependencies: - preact - react - '@testing-library/svelte-core@1.1.3(svelte@5.57.3(@typescript-eslint/types@8.57.2))': + '@testing-library/svelte-core@1.1.3(svelte@5.57.3(@typescript-eslint/types@8.72.1))': dependencies: - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) '@tiptap/core@3.32.0(@tiptap/pm@3.32.0)': dependencies: @@ -4566,18 +4406,11 @@ snapshots: '@tiptap/core': 3.32.0(@tiptap/pm@3.32.0) '@tiptap/pm': 3.32.0 - '@tybys/wasm-util@0.10.1': - dependencies: - tslib: 2.8.1 - optional: true - '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 assertion-error: 2.0.1 - '@types/cookie@0.6.0': {} - '@types/d3-geo@3.1.1': dependencies: '@types/geojson': 7946.0.16 @@ -4586,141 +4419,134 @@ snapshots: '@types/esrecurse@4.3.1': {} - '@types/estree@1.0.8': {} - '@types/estree@1.0.9': {} '@types/geojson@7946.0.16': {} '@types/json-schema@7.0.15': {} - '@types/node@12.20.55': {} - - '@types/node@22.20.0': - dependencies: - undici-types: 6.21.0 - - '@types/supercluster@7.1.3': + '@types/node@24.19.2': dependencies: - '@types/geojson': 7946.0.16 + undici-types: 7.24.6 '@types/trusted-types@2.0.7': optional: true - '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + '@typescript-eslint/eslint-plugin@8.72.1(@typescript-eslint/parser@8.72.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/type-utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.57.2 - eslint: 10.1.0(jiti@2.6.1) - ignore: 7.0.5 + '@typescript-eslint/parser': 8.72.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.72.1 + '@typescript-eslint/type-utils': 8.72.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2) + '@typescript-eslint/utils': 8.72.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.72.1 + eslint: 10.13.0(jiti@2.7.0) + ignore: 7.0.14 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.2) typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + '@typescript-eslint/parser@8.72.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2)': dependencies: - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.57.2 + '@typescript-eslint/scope-manager': 8.72.1 + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/typescript-estree': 8.72.1(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.72.1 debug: 4.4.3 - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.13.0(jiti@2.7.0) typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.2(typescript@6.0.2)': + '@typescript-eslint/project-service@8.72.1(typescript@6.0.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@6.0.2) - '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/tsconfig-utils': 8.72.1(typescript@6.0.2) + '@typescript-eslint/types': 8.72.1 debug: 4.4.3 typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.57.2': + '@typescript-eslint/scope-manager@8.72.1': dependencies: - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/visitor-keys': 8.57.2 + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/visitor-keys': 8.72.1 - '@typescript-eslint/tsconfig-utils@8.57.2(typescript@6.0.2)': + '@typescript-eslint/tsconfig-utils@8.72.1(typescript@6.0.2)': dependencies: typescript: 6.0.2 - '@typescript-eslint/type-utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + '@typescript-eslint/type-utils@8.72.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2)': dependencies: - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/typescript-estree': 8.72.1(typescript@6.0.2) + '@typescript-eslint/utils': 8.72.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2) debug: 4.4.3 - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.13.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@6.0.2) typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.57.2': {} + '@typescript-eslint/types@8.72.1': {} - '@typescript-eslint/typescript-estree@8.57.2(typescript@6.0.2)': + '@typescript-eslint/typescript-estree@8.72.1(typescript@6.0.2)': dependencies: - '@typescript-eslint/project-service': 8.57.2(typescript@6.0.2) - '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@6.0.2) - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/visitor-keys': 8.57.2 + '@typescript-eslint/project-service': 8.72.1(typescript@6.0.2) + '@typescript-eslint/tsconfig-utils': 8.72.1(typescript@6.0.2) + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/visitor-keys': 8.72.1 debug: 4.4.3 - minimatch: 10.2.4 - semver: 7.7.4 - tinyglobby: 0.2.15 + minimatch: 10.2.6 + semver: 7.8.5 + tinyglobby: 0.2.17 ts-api-utils: 2.5.0(typescript@6.0.2) typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + '@typescript-eslint/utils@8.72.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.57.2 - '@typescript-eslint/types': 8.57.2 - '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) - eslint: 10.1.0(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@2.7.0)) + '@typescript-eslint/scope-manager': 8.72.1 + '@typescript-eslint/types': 8.72.1 + '@typescript-eslint/typescript-estree': 8.72.1(typescript@6.0.2) + eslint: 10.13.0(jiti@2.7.0) typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.57.2': + '@typescript-eslint/visitor-keys@8.72.1': dependencies: - '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/types': 8.72.1 eslint-visitor-keys: 5.0.1 - '@vitest/browser-playwright@4.1.8(playwright@1.64.1)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.8)': + '@vitest/browser-playwright@5.0.5(playwright@1.64.1)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1))(vitest@5.0.5)': dependencies: - '@vitest/browser': 4.1.8(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.8) - '@vitest/mocker': 4.1.8(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) + '@vitest/browser': 5.0.5(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1))(vitest@5.0.5) + '@vitest/mocker': 5.0.5(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) playwright: 1.64.1 - tinyrainbow: 3.1.0 - vitest: 4.1.8(@types/node@22.20.0)(@vitest/browser-playwright@4.1.8)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) + tinyrainbow: 3.2.0 + vitest: 5.0.5(@types/node@24.19.2)(@vitest/browser-playwright@5.0.5)(@vitest/ui@5.0.5)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.1.8(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.8)': + '@vitest/browser@5.0.5(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1))(vitest@5.0.5)': dependencies: - '@blazediff/core': 1.9.1 - '@vitest/mocker': 4.1.8(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) - '@vitest/utils': 4.1.8 - magic-string: 0.30.21 + '@blazediff/core': 1.10.0 + '@vitest/mocker': 5.0.5(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) + '@vitest/ui': 5.0.5(vitest@5.0.5) + '@vitest/utils': 5.0.5 + magic-string: 1.4.4 pngjs: 7.0.0 sirv: 3.0.2 - tinyrainbow: 3.1.0 - vitest: 4.1.8(@types/node@22.20.0)(@vitest/browser-playwright@4.1.8)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) + tinyrainbow: 3.2.0 + vitest: 5.0.5(@types/node@24.19.2)(@vitest/browser-playwright@5.0.5)(@vitest/ui@5.0.5)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) ws: 8.22.0 transitivePeerDependencies: - bufferutil @@ -4728,76 +4554,52 @@ snapshots: - utf-8-validate - vite - '@vitest/expect@4.1.8': - dependencies: - '@standard-schema/spec': 1.1.0 - '@types/chai': 5.2.3 - '@vitest/spy': 4.1.8 - '@vitest/utils': 4.1.8 - chai: 6.2.2 - tinyrainbow: 3.1.0 - - '@vitest/mocker@4.1.8(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0))': + '@vitest/mocker@5.0.5(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1))': dependencies: - '@vitest/spy': 4.1.8 + '@jridgewell/trace-mapping': 0.3.31 + '@vitest/spy': 5.0.5 estree-walker: 3.0.3 - magic-string: 0.30.21 + magic-string: 1.4.4 optionalDependencies: - vite: 8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1) - '@vitest/pretty-format@4.1.8': + '@vitest/pretty-format@5.0.5': dependencies: - tinyrainbow: 3.1.0 + tinyrainbow: 3.2.0 - '@vitest/runner@4.1.8': - dependencies: - '@vitest/utils': 4.1.8 - pathe: 2.0.3 + '@vitest/spy@5.0.5': {} - '@vitest/snapshot@4.1.8': + '@vitest/ui@5.0.5(vitest@5.0.5)': dependencies: - '@vitest/pretty-format': 4.1.8 - '@vitest/utils': 4.1.8 - magic-string: 0.30.21 + '@vitest/utils': 5.0.5 + fflate: 0.8.3 + flatted: 3.4.4 pathe: 2.0.3 + sirv: 3.0.2 + tinyrainbow: 3.2.0 + vitest: 5.0.5(@types/node@24.19.2)(@vitest/browser-playwright@5.0.5)(@vitest/ui@5.0.5)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) - '@vitest/spy@4.1.8': {} - - '@vitest/utils@4.1.8': + '@vitest/utils@5.0.5': dependencies: - '@vitest/pretty-format': 4.1.8 + '@vitest/pretty-format': 5.0.5 convert-source-map: 2.0.0 - tinyrainbow: 3.1.0 + tinyrainbow: 3.2.0 - acorn-jsx@5.3.2(acorn@8.16.0): + acorn-jsx@5.3.2(acorn@8.19.0): dependencies: - acorn: 8.16.0 - - acorn@8.16.0: {} + acorn: 8.19.0 acorn@8.19.0: {} - ajv@6.14.0: + ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ansi-colors@4.1.3: {} - - ansi-regex@5.0.1: {} - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - - argparse@2.0.1: {} - aria-query@5.3.1: {} - array-union@2.1.0: {} - assertion-error@2.0.1: {} axe-core@4.14.0: {} @@ -4806,53 +4608,44 @@ snapshots: balanced-match@4.0.4: {} - better-path-resolve@1.0.0: + bidi-js@1.1.0: dependencies: - is-windows: 1.0.2 - - bits-ui@2.16.3(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2)): - dependencies: - '@floating-ui/core': 1.7.5 - '@floating-ui/dom': 1.7.6 - '@internationalized/date': 3.12.0 - esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2)) - svelte: 5.57.3(@typescript-eslint/types@8.57.2) - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2)) - tabbable: 6.4.0 - transitivePeerDependencies: - - '@sveltejs/kit' + require-from-string: 2.0.2 - bits-ui@2.20.2(@internationalized/date@3.12.0)(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2)): + bits-ui@2.20.2(@internationalized/date@3.12.4)(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1)): dependencies: '@floating-ui/core': 1.8.0 '@floating-ui/dom': 1.8.0 - '@internationalized/date': 3.12.0 + '@internationalized/date': 3.12.4 esm-env: 1.2.2 - runed: 0.35.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2)) - svelte: 5.57.3(@typescript-eslint/types@8.57.2) - svelte-toolbelt: 0.10.6(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + runed: 0.35.1(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1)) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) + svelte-toolbelt: 0.10.6(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1)) tabbable: 6.5.1 transitivePeerDependencies: - '@sveltejs/kit' blake3-wasm@2.1.5: {} - brace-expansion@5.0.5: + brace-expansion@5.0.12: dependencies: balanced-match: 4.0.4 - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - cac@7.0.0: {} - canvas-confetti@1.9.4: {} + cac@7.1.0: {} - chai@6.2.2: {} + cacheable@2.5.0: + dependencies: + '@cacheable/memory': 2.2.0 + '@cacheable/utils': 2.5.0 + hookified: 1.15.1 + keyv: 5.6.0 + qified: 0.10.1 + + canvas-confetti@1.9.4: {} - chardet@2.1.1: {} + chai@6.3.0: {} chokidar@4.0.3: dependencies: @@ -4860,21 +4653,15 @@ snapshots: chokidar@5.0.0: dependencies: - readdirp: 5.0.0 + readdirp: 5.1.1 clsx@2.1.1: {} - confbox@0.1.8: {} - - confbox@0.3.1: {} - convert-source-map@2.0.0: {} - cookie@0.6.0: {} - cookie@1.1.1: {} - core-js@3.49.0: {} + cookie@2.0.1: {} cross-spawn@7.0.6: dependencies: @@ -4906,119 +4693,77 @@ snapshots: dequal@2.0.3: {} - detect-indent@6.1.0: {} - detect-libc@2.1.2: {} - devalue@5.6.4: {} - devalue@5.9.4: {} diacritics@1.3.0: {} - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - dompurify@3.3.3: + dompurify@3.4.17: optionalDependencies: '@types/trusted-types': 2.0.7 - earcut@3.0.2: {} + earcut@3.2.4: {} - enhanced-resolve@5.20.1: + enhanced-resolve@5.26.0: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.2 - - enquirer@2.4.1: - dependencies: - ansi-colors: 4.1.3 - strip-ansi: 6.0.1 + tapable: 2.3.3 error-stack-parser-es@1.0.5: {} - es-module-lexer@2.1.0: {} + es-module-lexer@2.3.2: {} - esbuild@0.27.3: + esbuild@0.28.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.27.3 - '@esbuild/android-arm': 0.27.3 - '@esbuild/android-arm64': 0.27.3 - '@esbuild/android-x64': 0.27.3 - '@esbuild/darwin-arm64': 0.27.3 - '@esbuild/darwin-x64': 0.27.3 - '@esbuild/freebsd-arm64': 0.27.3 - '@esbuild/freebsd-x64': 0.27.3 - '@esbuild/linux-arm': 0.27.3 - '@esbuild/linux-arm64': 0.27.3 - '@esbuild/linux-ia32': 0.27.3 - '@esbuild/linux-loong64': 0.27.3 - '@esbuild/linux-mips64el': 0.27.3 - '@esbuild/linux-ppc64': 0.27.3 - '@esbuild/linux-riscv64': 0.27.3 - '@esbuild/linux-s390x': 0.27.3 - '@esbuild/linux-x64': 0.27.3 - '@esbuild/netbsd-arm64': 0.27.3 - '@esbuild/netbsd-x64': 0.27.3 - '@esbuild/openbsd-arm64': 0.27.3 - '@esbuild/openbsd-x64': 0.27.3 - '@esbuild/openharmony-arm64': 0.27.3 - '@esbuild/sunos-x64': 0.27.3 - '@esbuild/win32-arm64': 0.27.3 - '@esbuild/win32-ia32': 0.27.3 - '@esbuild/win32-x64': 0.27.3 - - esbuild@0.27.4: - optionalDependencies: - '@esbuild/aix-ppc64': 0.27.4 - '@esbuild/android-arm': 0.27.4 - '@esbuild/android-arm64': 0.27.4 - '@esbuild/android-x64': 0.27.4 - '@esbuild/darwin-arm64': 0.27.4 - '@esbuild/darwin-x64': 0.27.4 - '@esbuild/freebsd-arm64': 0.27.4 - '@esbuild/freebsd-x64': 0.27.4 - '@esbuild/linux-arm': 0.27.4 - '@esbuild/linux-arm64': 0.27.4 - '@esbuild/linux-ia32': 0.27.4 - '@esbuild/linux-loong64': 0.27.4 - '@esbuild/linux-mips64el': 0.27.4 - '@esbuild/linux-ppc64': 0.27.4 - '@esbuild/linux-riscv64': 0.27.4 - '@esbuild/linux-s390x': 0.27.4 - '@esbuild/linux-x64': 0.27.4 - '@esbuild/netbsd-arm64': 0.27.4 - '@esbuild/netbsd-x64': 0.27.4 - '@esbuild/openbsd-arm64': 0.27.4 - '@esbuild/openbsd-x64': 0.27.4 - '@esbuild/openharmony-arm64': 0.27.4 - '@esbuild/sunos-x64': 0.27.4 - '@esbuild/win32-arm64': 0.27.4 - '@esbuild/win32-ia32': 0.27.4 - '@esbuild/win32-x64': 0.27.4 + '@esbuild/aix-ppc64': 0.28.2 + '@esbuild/android-arm': 0.28.2 + '@esbuild/android-arm64': 0.28.2 + '@esbuild/android-x64': 0.28.2 + '@esbuild/darwin-arm64': 0.28.2 + '@esbuild/darwin-x64': 0.28.2 + '@esbuild/freebsd-arm64': 0.28.2 + '@esbuild/freebsd-x64': 0.28.2 + '@esbuild/linux-arm': 0.28.2 + '@esbuild/linux-arm64': 0.28.2 + '@esbuild/linux-ia32': 0.28.2 + '@esbuild/linux-loong64': 0.28.2 + '@esbuild/linux-mips64el': 0.28.2 + '@esbuild/linux-ppc64': 0.28.2 + '@esbuild/linux-riscv64': 0.28.2 + '@esbuild/linux-s390x': 0.28.2 + '@esbuild/linux-x64': 0.28.2 + '@esbuild/netbsd-arm64': 0.28.2 + '@esbuild/netbsd-x64': 0.28.2 + '@esbuild/openbsd-arm64': 0.28.2 + '@esbuild/openbsd-x64': 0.28.2 + '@esbuild/openharmony-arm64': 0.28.2 + '@esbuild/sunos-x64': 0.28.2 + '@esbuild/win32-arm64': 0.28.2 + '@esbuild/win32-ia32': 0.28.2 + '@esbuild/win32-x64': 0.28.2 escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.13.0(jiti@2.7.0)): dependencies: - eslint: 10.1.0(jiti@2.6.1) + eslint: 10.13.0(jiti@2.7.0) - eslint-plugin-svelte@3.16.0(eslint@10.1.0(jiti@2.6.1))(svelte@5.57.3(@typescript-eslint/types@8.57.2)): + eslint-plugin-svelte@3.23.1(eslint@10.13.0(jiti@2.7.0))(svelte@5.57.3(@typescript-eslint/types@8.72.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) - '@jridgewell/sourcemap-codec': 1.5.5 - eslint: 10.1.0(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@2.7.0)) + '@jridgewell/sourcemap-codec': 1.6.0 + eslint: 10.13.0(jiti@2.7.0) esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 - postcss: 8.5.8 - postcss-load-config: 3.1.4(postcss@8.5.8) - postcss-safe-parser: 7.0.1(postcss@8.5.8) - semver: 7.7.4 - svelte-eslint-parser: 1.6.0(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + postcss: 8.5.32 + postcss-load-config: 3.1.4(postcss@8.5.32) + postcss-safe-parser: 7.1.0(postcss@8.5.32) + semver: 7.8.5 + svelte-eslint-parser: 1.10.0(svelte@5.57.3(@typescript-eslint/types@8.72.1)) optionalDependencies: - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) transitivePeerDependencies: - ts-node @@ -5030,7 +4775,7 @@ snapshots: eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -5040,19 +4785,19 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.1.0(jiti@2.6.1): + eslint@10.13.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.10.1(eslint@10.13.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.3 - '@eslint/config-helpers': 0.5.3 - '@eslint/core': 1.1.1 - '@eslint/plugin-kit': 0.6.1 - '@humanfs/node': 0.16.7 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.7.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.3 + '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - ajv: 6.14.0 + '@types/estree': 1.0.9 + ajv: 6.15.0 cross-spawn: 7.0.6 debug: 4.4.3 escape-string-regexp: 4.0.0 @@ -5062,18 +4807,18 @@ snapshots: esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 + file-entry-cache: 11.1.5 find-up: 5.0.0 glob-parent: 6.0.2 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - minimatch: 10.2.4 + minimatch: 10.2.6 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.6.1 + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -5081,27 +4826,25 @@ snapshots: espree@10.4.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.19.0 + acorn-jsx: 5.3.2(acorn@8.19.0) eslint-visitor-keys: 4.2.1 espree@11.2.0: dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn: 8.19.0 + acorn-jsx: 5.3.2(acorn@8.19.0) eslint-visitor-keys: 5.0.1 - esprima@4.0.1: {} - esquery@1.7.0: dependencies: estraverse: 5.3.0 - esrap@2.4.0(@typescript-eslint/types@8.57.2): + esrap@2.4.0(@typescript-eslint/types@8.72.1): dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 optionalDependencies: - '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/types': 8.72.1 esrecurse@4.3.0: dependencies: @@ -5117,124 +4860,89 @@ snapshots: event-target-polyfill@0.0.4: {} - expect-type@1.3.0: {} + expect-type@1.4.0: {} exsolve@1.1.3: {} - extendable-error@0.1.7: {} - fast-deep-equal@3.1.3: {} - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} - fastq@1.20.1: - dependencies: - reusify: 1.1.0 - - fdir@6.5.0(picomatch@4.0.4): - optionalDependencies: - picomatch: 4.0.4 + fast-string-truncated-width@3.0.3: {} - file-entry-cache@8.0.0: + fast-string-width@3.0.2: dependencies: - flat-cache: 4.0.1 + fast-string-truncated-width: 3.0.3 - fill-range@7.1.1: + fast-wrap-ansi@0.2.2: dependencies: - to-regex-range: 5.0.1 + fast-string-width: 3.0.2 + + fdir@6.5.0(picomatch@4.0.7): + optionalDependencies: + picomatch: 4.0.7 + + fflate@0.8.3: {} - find-up@4.1.0: + file-entry-cache@11.1.5: dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 + flat-cache: 6.1.23 find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@4.0.1: - dependencies: - flatted: 3.4.2 - keyv: 4.5.4 - - flatted@3.4.2: {} - - fs-extra@7.0.1: + flat-cache@6.1.23: dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 + cacheable: 2.5.0 + flatted: 3.4.4 + hookified: 1.15.1 - fs-extra@8.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 + flatted@3.4.4: {} fsevents@2.3.3: optional: true - get-tsconfig@4.13.7: - dependencies: - resolve-pkg-maps: 1.0.0 - gl-matrix@3.4.4: {} - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - glob-parent@6.0.2: dependencies: is-glob: 4.0.3 globals@16.5.0: {} - globals@17.4.0: {} - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.3 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 + globals@17.13.0: {} graceful-fs@4.2.11: {} - h3-js@4.4.0: {} + h3-js@4.5.0: {} - hls.js@1.6.15: {} + hashery@1.5.1: + dependencies: + hookified: 1.15.1 hls.js@1.7.3: {} hono@4.12.14: {} - human-id@4.1.3: {} + hookified@1.15.1: {} + + hookified@2.2.0: {} + + human-id@4.2.2: {} i18n-iso-countries@7.14.0: dependencies: diacritics: 1.3.0 - iconv-lite@0.7.2: - dependencies: - safer-buffer: 2.1.2 - ignore@5.3.2: {} - ignore@7.0.5: {} + ignore@7.0.14: {} + + import-meta-resolve@4.2.0: {} imurmurhash@0.1.4: {} @@ -5248,32 +4956,17 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-number@7.0.0: {} - is-reference@3.0.3: dependencies: - '@types/estree': 1.0.8 - - is-subdir@1.2.0: - dependencies: - better-path-resolve: 1.0.0 - - is-windows@1.0.2: {} + '@types/estree': 1.0.9 isexe@2.0.0: {} jiti@2.6.1: {} - js-yaml@3.14.2: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 + jiti@2.7.0: {} - json-buffer@3.0.1: {} + jju@1.4.0: {} json-schema-traverse@0.4.1: {} @@ -5281,22 +4974,23 @@ snapshots: json-stringify-pretty-compact@4.0.0: {} - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 + jsonc-parser@3.3.1: {} - kdbush@4.0.2: {} + kdbush@4.1.0: {} - keyv@4.5.4: + keyv@5.6.0: dependencies: - json-buffer: 3.0.1 + '@keyv/serialize': 1.1.1 kleur@4.1.5: {} - knitwork@1.3.0: {} - known-css-properties@0.37.0: {} + launch-editor@2.14.2: + dependencies: + picocolors: 1.1.1 + shell-quote: 1.12.0 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -5305,36 +4999,69 @@ snapshots: lightningcss-android-arm64@1.32.0: optional: true + lightningcss-android-arm64@1.33.0: + optional: true + lightningcss-darwin-arm64@1.32.0: optional: true + lightningcss-darwin-arm64@1.33.0: + optional: true + lightningcss-darwin-x64@1.32.0: optional: true + lightningcss-darwin-x64@1.33.0: + optional: true + lightningcss-freebsd-x64@1.32.0: optional: true + lightningcss-freebsd-x64@1.33.0: + optional: true + lightningcss-linux-arm-gnueabihf@1.32.0: optional: true + lightningcss-linux-arm-gnueabihf@1.33.0: + optional: true + lightningcss-linux-arm64-gnu@1.32.0: optional: true + lightningcss-linux-arm64-gnu@1.33.0: + optional: true + lightningcss-linux-arm64-musl@1.32.0: optional: true + lightningcss-linux-arm64-musl@1.33.0: + optional: true + lightningcss-linux-x64-gnu@1.32.0: optional: true + lightningcss-linux-x64-gnu@1.33.0: + optional: true + lightningcss-linux-x64-musl@1.32.0: optional: true + lightningcss-linux-x64-musl@1.33.0: + optional: true + lightningcss-win32-arm64-msvc@1.32.0: optional: true + lightningcss-win32-arm64-msvc@1.33.0: + optional: true + lightningcss-win32-x64-msvc@1.32.0: optional: true + lightningcss-win32-x64-msvc@1.33.0: + optional: true + lightningcss@1.32.0: dependencies: detect-libc: 2.1.2 @@ -5351,91 +5078,91 @@ snapshots: lightningcss-win32-arm64-msvc: 1.32.0 lightningcss-win32-x64-msvc: 1.32.0 + lightningcss@1.33.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.33.0 + lightningcss-darwin-arm64: 1.33.0 + lightningcss-darwin-x64: 1.33.0 + lightningcss-freebsd-x64: 1.33.0 + lightningcss-linux-arm-gnueabihf: 1.33.0 + lightningcss-linux-arm64-gnu: 1.33.0 + lightningcss-linux-arm64-musl: 1.33.0 + lightningcss-linux-x64-gnu: 1.33.0 + lightningcss-linux-x64-musl: 1.33.0 + lightningcss-win32-arm64-msvc: 1.33.0 + lightningcss-win32-x64-msvc: 1.33.0 + lilconfig@2.1.0: {} loadjs@4.3.0: {} locate-character@3.0.0: {} - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - locate-path@6.0.0: dependencies: p-locate: 5.0.0 - lodash.startcase@4.4.0: {} - lz-string@1.5.0: {} magic-string@0.30.21: dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.6.0 + + magic-string@1.4.4: + dependencies: + '@jridgewell/sourcemap-codec': 1.6.0 - maplibre-gl@5.21.1: + maplibre-gl@6.16.0: dependencies: - '@mapbox/jsonlint-lines-primitives': 2.0.2 '@mapbox/point-geometry': 1.1.0 - '@mapbox/tiny-sdf': 2.0.7 - '@mapbox/unitbezier': 0.0.1 - '@mapbox/vector-tile': 2.0.4 - '@mapbox/whoots-js': 3.1.0 - '@maplibre/geojson-vt': 6.0.4 - '@maplibre/maplibre-gl-style-spec': 24.7.0 - '@maplibre/mlt': 1.1.8 - '@maplibre/vt-pbf': 4.3.0 + '@mapbox/tiny-sdf': 2.3.0 + '@mapbox/unitbezier': 1.0.0 + '@mapbox/vector-tile': 3.0.0 + '@maplibre/geojson-vt': 6.3.0 + '@maplibre/maplibre-gl-style-spec': 26.4.4 + '@maplibre/mlt': 1.3.0 + '@maplibre/vt-pbf': 4.3.3 '@types/geojson': 7946.0.16 - earcut: 3.0.2 + bidi-js: 1.1.0 + earcut: 3.2.4 gl-matrix: 3.4.4 - kdbush: 4.0.2 + kdbush: 4.1.0 murmurhash-js: 1.0.0 - pbf: 4.0.1 + pbf: 5.1.2 potpack: 2.1.0 quickselect: 3.0.0 tinyqueue: 3.0.0 - marked@17.0.5: {} - - merge2@1.4.1: {} - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.2 + marked@18.1.2: {} mini-svg-data-uri@1.4.4: {} - miniflare@4.20260317.2: + miniflare@5.20261023.0-beta(@types/node@24.19.2): dependencies: '@cspotcode/source-map-support': 0.8.1 - sharp: 0.34.5 - undici: 7.24.4 - workerd: 1.20260317.1 - ws: 8.18.0 + sharp: 0.35.5(@types/node@24.19.2) + undici: 7.30.1 + workerd: 1.20261023.1 + ws: 8.21.0 youch: 4.1.0-beta.10 transitivePeerDependencies: + - '@types/node' - bufferutil - utf-8-validate - minimatch@10.2.4: + minimatch@10.2.6: dependencies: - brace-expansion: 5.0.5 + brace-expansion: 5.0.12 minimist@1.2.8: {} - mlly@1.8.2: - dependencies: - acorn: 8.16.0 - pathe: 2.0.3 - pkg-types: 1.3.1 - ufo: 1.6.4 - - mode-watcher@1.1.0(svelte@5.57.3(@typescript-eslint/types@8.57.2)): + mode-watcher@1.1.0(svelte@5.57.3(@typescript-eslint/types@8.72.1)): dependencies: - runed: 0.25.0(svelte@5.57.3(@typescript-eslint/types@8.57.2)) - svelte: 5.57.3(@typescript-eslint/types@8.57.2) - svelte-toolbelt: 0.7.1(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + runed: 0.25.0(svelte@5.57.3(@typescript-eslint/types@8.72.1)) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) + svelte-toolbelt: 0.7.1(svelte@5.57.3(@typescript-eslint/types@8.72.1)) mri@1.2.0: {} @@ -5445,17 +5172,21 @@ snapshots: murmurhash-js@1.0.0: {} - nanoid@3.3.11: {} + nanoid@3.3.20: {} + + nanoid@5.1.16: {} - nanoid@5.1.7: {} + nanoid@6.0.2: {} natural-compare@1.4.0: {} - number-flow@0.6.0: + number-flow@0.6.2: dependencies: esm-env: 1.2.2 - obug@2.1.1: {} + obug@2.2.1: {} + + obug@3.0.0: {} optionator@0.9.4: dependencies: @@ -5468,39 +5199,17 @@ snapshots: orderedmap@2.1.1: {} - outdent@0.5.0: {} - - p-filter@2.1.0: - dependencies: - p-map: 2.1.0 - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 - p-map@2.1.0: {} - - p-try@2.2.0: {} - - package-manager-detector@0.2.11: - dependencies: - quansync: 0.2.11 - - package-manager-detector@1.6.0: {} + package-manager-detector@1.9.0: {} - partysocket@1.1.16: + partysocket@1.3.0: dependencies: event-target-polyfill: 0.0.4 @@ -5510,33 +5219,15 @@ snapshots: path-to-regexp@6.3.0: {} - path-type@4.0.0: {} - pathe@2.0.3: {} - pbf@4.0.1: + pbf@5.1.2: dependencies: resolve-protobuf-schema: 2.1.0 picocolors@1.1.1: {} - picomatch@2.3.2: {} - - picomatch@4.0.4: {} - - pify@4.0.1: {} - - pkg-types@1.3.1: - dependencies: - confbox: 0.1.8 - mlly: 1.8.2 - pathe: 2.0.3 - - pkg-types@2.3.3: - dependencies: - confbox: 0.3.1 - exsolve: 1.1.3 - pathe: 2.0.3 + picomatch@4.0.7: {} playwright-core@1.64.1: {} @@ -5544,9 +5235,8 @@ snapshots: dependencies: playwright-core: 1.64.1 - plyr@3.8.4: + plyr@3.8.5: dependencies: - core-js: 3.49.0 custom-event-polyfill: 1.0.7 loadjs: 4.3.0 rangetouch: 2.0.1 @@ -5554,55 +5244,53 @@ snapshots: pngjs@7.0.0: {} - postcss-load-config@3.1.4(postcss@8.5.8): + postcss-load-config@3.1.4(postcss@8.5.32): dependencies: lilconfig: 2.1.0 yaml: 1.10.3 optionalDependencies: - postcss: 8.5.8 + postcss: 8.5.32 - postcss-safe-parser@7.0.1(postcss@8.5.8): + postcss-safe-parser@7.1.0(postcss@8.5.32): dependencies: - postcss: 8.5.8 + postcss: 8.5.32 - postcss-scss@4.0.9(postcss@8.5.8): + postcss-scss@4.0.9(postcss@8.5.32): dependencies: - postcss: 8.5.8 + postcss: 8.5.32 postcss-selector-parser@6.0.10: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@7.1.1: + postcss-selector-parser@7.1.7: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss@8.5.8: + postcss@8.5.32: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.20 picocolors: 1.1.1 - source-map-js: 1.2.1 + source-map-js: 1.2.2 potpack@2.1.0: {} prelude-ls@1.2.1: {} - prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.57.3(@typescript-eslint/types@8.57.2)): + prettier-plugin-svelte@4.1.1(prettier@3.9.10)(svelte@5.57.3(@typescript-eslint/types@8.72.1)): dependencies: - prettier: 3.8.1 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + prettier: 3.9.10 + svelte: 5.57.3(@typescript-eslint/types@8.72.1) - prettier-plugin-tailwindcss@0.7.2(prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.57.3(@typescript-eslint/types@8.57.2)))(prettier@3.8.1): + prettier-plugin-tailwindcss@0.8.1(prettier-plugin-svelte@4.1.1(prettier@3.9.10)(svelte@5.57.3(@typescript-eslint/types@8.72.1)))(prettier@3.9.10): dependencies: - prettier: 3.8.1 + prettier: 3.9.10 optionalDependencies: - prettier-plugin-svelte: 3.5.1(prettier@3.8.1)(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + prettier-plugin-svelte: 4.1.1(prettier@3.9.10)(svelte@5.57.3(@typescript-eslint/types@8.72.1)) - prettier@2.8.8: {} - - prettier@3.8.1: {} + prettier@3.9.10: {} prosemirror-changeset@2.4.4: dependencies: @@ -5678,138 +5366,117 @@ snapshots: prosemirror-state: 1.4.4 prosemirror-transform: 1.12.4 - protocol-buffers-schema@3.6.0: {} + protocol-buffers-schema@3.6.1: {} - publint@0.3.19: + publint@0.3.25: dependencies: - '@publint/pack': 0.1.4 - package-manager-detector: 1.6.0 + '@publint/pack': 0.1.7 + package-manager-detector: 1.9.0 picocolors: 1.1.1 sade: 1.8.1 punycode@2.3.1: {} - quansync@0.2.11: {} - - queue-microtask@1.2.3: {} + qified@0.10.1: + dependencies: + hookified: 2.2.0 quickselect@3.0.0: {} rangetouch@2.0.1: {} - read-yaml-file@1.1.0: - dependencies: - graceful-fs: 4.2.11 - js-yaml: 3.14.2 - pify: 4.0.1 - strip-bom: 3.0.0 - readdirp@4.1.2: {} - readdirp@5.0.0: {} - - regexparam@3.0.0: {} - - resolve-from@5.0.0: {} + readdirp@5.1.1: {} - resolve-pkg-maps@1.0.0: {} + require-from-string@2.0.2: {} resolve-protobuf-schema@2.1.0: dependencies: - protocol-buffers-schema: 3.6.0 + protocol-buffers-schema: 3.6.1 - reusify@1.1.0: {} - - rolldown@1.0.0-rc.12: + rolldown@1.2.15: dependencies: - '@oxc-project/types': 0.122.0 - '@rolldown/pluginutils': 1.0.0-rc.12 + '@oxc-project/types': 0.155.0 + '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.12 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.12 - '@rolldown/binding-darwin-x64': 1.0.0-rc.12 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.12 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 + '@rolldown/binding-android-arm-eabi': 1.2.15 + '@rolldown/binding-android-arm64': 1.2.15 + '@rolldown/binding-darwin-arm64': 1.2.15 + '@rolldown/binding-darwin-x64': 1.2.15 + '@rolldown/binding-freebsd-x64': 1.2.15 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.15 + '@rolldown/binding-linux-arm64-gnu': 1.2.15 + '@rolldown/binding-linux-arm64-musl': 1.2.15 + '@rolldown/binding-linux-ppc64-gnu': 1.2.15 + '@rolldown/binding-linux-s390x-gnu': 1.2.15 + '@rolldown/binding-linux-x64-gnu': 1.2.15 + '@rolldown/binding-linux-x64-musl': 1.2.15 + '@rolldown/binding-openharmony-arm64': 1.2.15 + '@rolldown/binding-win32-arm64-msvc': 1.2.15 + '@rolldown/binding-win32-x64-msvc': 1.2.15 rope-sequence@1.3.4: {} - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - runed@0.23.4(svelte@5.57.3(@typescript-eslint/types@8.57.2)): + runed@0.23.4(svelte@5.57.3(@typescript-eslint/types@8.72.1)): dependencies: esm-env: 1.2.2 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) - runed@0.25.0(svelte@5.57.3(@typescript-eslint/types@8.57.2)): + runed@0.25.0(svelte@5.57.3(@typescript-eslint/types@8.72.1)): dependencies: esm-env: 1.2.2 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) - runed@0.35.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2)): + runed@0.35.1(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1)): dependencies: dequal: 2.0.3 esm-env: 1.2.2 lz-string: 1.5.0 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) optionalDependencies: - '@sveltejs/kit': 2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) - - rw@1.3.3: {} + '@sveltejs/kit': 3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) sade@1.8.1: dependencies: mri: 1.2.0 - safer-buffer@2.1.2: {} - scule@1.3.0: {} - semver@7.7.4: {} - - set-cookie-parser@3.1.0: {} + semver@7.8.5: {} - sharp@0.34.5: + sharp@0.35.5(@types/node@24.19.2): dependencies: '@img/colour': 1.1.0 detect-libc: 2.1.2 - semver: 7.7.4 + semver: 7.8.5 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.5 - '@img/sharp-darwin-x64': 0.34.5 - '@img/sharp-libvips-darwin-arm64': 1.2.4 - '@img/sharp-libvips-darwin-x64': 1.2.4 - '@img/sharp-libvips-linux-arm': 1.2.4 - '@img/sharp-libvips-linux-arm64': 1.2.4 - '@img/sharp-libvips-linux-ppc64': 1.2.4 - '@img/sharp-libvips-linux-riscv64': 1.2.4 - '@img/sharp-libvips-linux-s390x': 1.2.4 - '@img/sharp-libvips-linux-x64': 1.2.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.4 - '@img/sharp-libvips-linuxmusl-x64': 1.2.4 - '@img/sharp-linux-arm': 0.34.5 - '@img/sharp-linux-arm64': 0.34.5 - '@img/sharp-linux-ppc64': 0.34.5 - '@img/sharp-linux-riscv64': 0.34.5 - '@img/sharp-linux-s390x': 0.34.5 - '@img/sharp-linux-x64': 0.34.5 - '@img/sharp-linuxmusl-arm64': 0.34.5 - '@img/sharp-linuxmusl-x64': 0.34.5 - '@img/sharp-wasm32': 0.34.5 - '@img/sharp-win32-arm64': 0.34.5 - '@img/sharp-win32-ia32': 0.34.5 - '@img/sharp-win32-x64': 0.34.5 + '@img/sharp-darwin-arm64': 0.35.5 + '@img/sharp-darwin-x64': 0.35.5 + '@img/sharp-freebsd-wasm32': 0.35.5 + '@img/sharp-libvips-darwin-arm64': 1.3.4 + '@img/sharp-libvips-darwin-x64': 1.3.4 + '@img/sharp-libvips-linux-arm': 1.3.4 + '@img/sharp-libvips-linux-arm64': 1.3.4 + '@img/sharp-libvips-linux-ppc64': 1.3.4 + '@img/sharp-libvips-linux-riscv64': 1.3.4 + '@img/sharp-libvips-linux-s390x': 1.3.4 + '@img/sharp-libvips-linux-x64': 1.3.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.3.4 + '@img/sharp-libvips-linuxmusl-x64': 1.3.4 + '@img/sharp-linux-arm': 0.35.5 + '@img/sharp-linux-arm64': 0.35.5 + '@img/sharp-linux-ppc64': 0.35.5 + '@img/sharp-linux-riscv64': 0.35.5 + '@img/sharp-linux-s390x': 0.35.5 + '@img/sharp-linux-x64': 0.35.5 + '@img/sharp-linuxmusl-arm64': 0.35.5 + '@img/sharp-linuxmusl-x64': 0.35.5 + '@img/sharp-webcontainers-wasm32': 0.35.5 + '@img/sharp-win32-arm64': 0.35.5 + '@img/sharp-win32-ia32': 0.35.5 + '@img/sharp-win32-x64': 0.35.5 + '@types/node': 24.19.2 shebang-command@2.0.0: dependencies: @@ -5817,9 +5484,7 @@ snapshots: shebang-regex@3.0.0: {} - siginfo@2.0.0: {} - - signal-exit@4.1.0: {} + shell-quote@1.12.0: {} sirv@3.0.2: dependencies: @@ -5827,92 +5492,74 @@ snapshots: mrmime: 2.0.1 totalist: 3.0.1 - slash@3.0.0: {} - - source-map-js@1.2.1: {} - - spawndamnit@3.0.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - - sprintf-js@1.0.3: {} + sisteransi@1.0.5: {} - stackback@0.0.2: {} + source-map-js@1.2.2: {} - std-env@4.1.0: {} - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-bom@3.0.0: {} + std-env@4.3.0: {} style-to-object@1.0.14: dependencies: inline-style-parser: 0.2.7 - supercluster@8.0.1: - dependencies: - kdbush: 4.0.2 - supports-color@10.2.2: {} svelte-boring-avatars@1.2.6: {} - svelte-check@4.4.8(picomatch@4.0.4)(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2): + svelte-check@4.7.7(picomatch@4.0.7)(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2): dependencies: '@jridgewell/trace-mapping': 0.3.31 + '@sveltejs/load-config': 0.2.3 chokidar: 4.0.3 - fdir: 6.5.0(picomatch@4.0.4) + fdir: 6.5.0(picomatch@4.0.7) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) typescript: 6.0.2 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.6.0(svelte@5.57.3(@typescript-eslint/types@8.57.2)): + svelte-eslint-parser@1.10.0(svelte@5.57.3(@typescript-eslint/types@8.72.1)): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - postcss: 8.5.8 - postcss-scss: 4.0.9(postcss@8.5.8) - postcss-selector-parser: 7.1.1 - semver: 7.7.4 + postcss: 8.5.32 + postcss-scss: 4.0.9(postcss@8.5.32) + postcss-selector-parser: 7.1.7 + semver: 7.8.5 optionalDependencies: - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) - svelte-maplibre-gl@1.0.3(maplibre-gl@5.21.1)(svelte@5.57.3(@typescript-eslint/types@8.57.2)): + svelte-maplibre-gl@2.2.1(maplibre-gl@6.16.0)(svelte@5.57.3(@typescript-eslint/types@8.72.1)): dependencies: - maplibre-gl: 5.21.1 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + maplibre-gl: 6.16.0 + svelte: 5.57.3(@typescript-eslint/types@8.72.1) - svelte-toolbelt@0.10.6(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2)): + svelte-toolbelt@0.10.6(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1)): dependencies: clsx: 2.1.1 - runed: 0.35.1(@sveltejs/kit@2.55.0(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)))(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + runed: 0.35.1(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)))(svelte@5.57.3(@typescript-eslint/types@8.72.1)) style-to-object: 1.0.14 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) transitivePeerDependencies: - '@sveltejs/kit' - svelte-toolbelt@0.7.1(svelte@5.57.3(@typescript-eslint/types@8.57.2)): + svelte-toolbelt@0.7.1(svelte@5.57.3(@typescript-eslint/types@8.72.1)): dependencies: clsx: 2.1.1 - runed: 0.23.4(svelte@5.57.3(@typescript-eslint/types@8.57.2)) + runed: 0.23.4(svelte@5.57.3(@typescript-eslint/types@8.72.1)) style-to-object: 1.0.14 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) - svelte2tsx@0.7.55(svelte@5.57.3(@typescript-eslint/types@8.57.2))(typescript@6.0.2): + svelte2tsx@0.7.62(svelte@5.57.3(@typescript-eslint/types@8.72.1))(typescript@6.0.2): dependencies: dedent-js: 1.0.1 scule: 1.3.0 - svelte: 5.57.3(@typescript-eslint/types@8.57.2) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) typescript: 6.0.2 - svelte@5.57.3(@typescript-eslint/types@8.57.2): + svelte@5.57.3(@typescript-eslint/types@8.72.1): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.6.0 @@ -5924,42 +5571,34 @@ snapshots: clsx: 2.1.1 devalue: 5.9.4 esm-env: 1.2.2 - esrap: 2.4.0(@typescript-eslint/types@8.57.2) + esrap: 2.4.0(@typescript-eslint/types@8.72.1) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 - zimmerframe: 1.1.4 + zimmerframe: 1.1.5 transitivePeerDependencies: - '@typescript-eslint/types' - tabbable@6.4.0: {} - tabbable@6.5.1: {} tailwind-merge@3.7.0: {} - tailwindcss@4.2.2: {} + tailwindcss@4.3.3: {} - tapable@2.3.2: {} + tapable@2.3.3: {} - term-size@2.2.1: {} + tinybench@6.2.2: {} - tinybench@2.9.0: {} + tinyexec@1.3.1: {} - tinyexec@1.2.4: {} - - tinyglobby@0.2.15: + tinyglobby@0.2.17: dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + fdir: 6.5.0(picomatch@4.0.7) + picomatch: 4.0.7 tinyqueue@3.0.0: {} - tinyrainbow@3.1.0: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 + tinyrainbow@3.2.0: {} totalist@3.0.1: {} @@ -5969,10 +5608,9 @@ snapshots: tslib@2.8.1: {} - tsx@4.21.0: + tsx@4.23.15: dependencies: - esbuild: 0.27.4 - get-tsconfig: 4.13.7 + esbuild: 0.28.2 optionalDependencies: fsevents: 2.3.3 @@ -5982,43 +5620,33 @@ snapshots: type-fest@4.41.0: {} - typescript-eslint@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2): + typescript-eslint@8.72.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) - '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - eslint: 10.1.0(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.72.1(@typescript-eslint/parser@8.72.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2) + '@typescript-eslint/parser': 8.72.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2) + '@typescript-eslint/typescript-estree': 8.72.1(typescript@6.0.2) + '@typescript-eslint/utils': 8.72.1(eslint@10.13.0(jiti@2.7.0))(typescript@6.0.2) + eslint: 10.13.0(jiti@2.7.0) typescript: 6.0.2 transitivePeerDependencies: - supports-color typescript@6.0.2: {} - ufo@1.6.4: {} - - undici-types@6.21.0: {} + undici-types@7.24.6: {} - undici@7.24.4: {} + undici@7.30.1: {} unenv@2.0.0-rc.24: dependencies: pathe: 2.0.3 - unicode-segmenter@0.14.5: {} - unicode-segmenter@0.17.3: {} - universalify@0.1.2: {} - - unwasm@0.5.3: + unwasm@0.6.3: dependencies: exsolve: 1.1.3 - knitwork: 1.3.0 - magic-string: 0.30.21 - mlly: 1.8.2 - pathe: 2.0.3 - pkg-types: 2.3.3 + magic-string: 1.4.4 uri-js@4.4.1: dependencies: @@ -6028,60 +5656,55 @@ snapshots: util-deprecate@1.0.2: {} - valibot@1.3.1(typescript@6.0.2): + valibot@1.5.0(typescript@6.0.2): optionalDependencies: typescript: 6.0.2 - vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0): + vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1): dependencies: - lightningcss: 1.32.0 - picomatch: 4.0.4 - postcss: 8.5.8 - rolldown: 1.0.0-rc.12 - tinyglobby: 0.2.15 + lightningcss: 1.33.0 + picomatch: 4.0.7 + postcss: 8.5.32 + rolldown: 1.2.15 + tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 22.20.0 - esbuild: 0.27.4 + '@types/node': 24.19.2 + esbuild: 0.28.2 fsevents: 2.3.3 - jiti: 2.6.1 - tsx: 4.21.0 - yaml: 2.9.0 + jiti: 2.7.0 + tsx: 4.23.15 + yaml: 2.9.1 - vitefu@1.1.2(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)): + vitefu@1.1.3(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)): optionalDependencies: - vite: 8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0) + vite: 8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1) - vitest-browser-svelte@3.1.0(svelte@5.57.3(@typescript-eslint/types@8.57.2))(vitest@4.1.8): + vitest-browser-svelte@3.1.0(svelte@5.57.3(@typescript-eslint/types@8.72.1))(vitest@5.0.5): dependencies: - '@testing-library/svelte-core': 1.1.3(svelte@5.57.3(@typescript-eslint/types@8.57.2)) - svelte: 5.57.3(@typescript-eslint/types@8.57.2) - vitest: 4.1.8(@types/node@22.20.0)(@vitest/browser-playwright@4.1.8)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) + '@testing-library/svelte-core': 1.1.3(svelte@5.57.3(@typescript-eslint/types@8.72.1)) + svelte: 5.57.3(@typescript-eslint/types@8.72.1) + vitest: 5.0.5(@types/node@24.19.2)(@vitest/browser-playwright@5.0.5)(@vitest/ui@5.0.5)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) - vitest@4.1.8(@types/node@22.20.0)(@vitest/browser-playwright@4.1.8)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)): + vitest@5.0.5(@types/node@24.19.2)(@vitest/browser-playwright@5.0.5)(@vitest/ui@5.0.5)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)): dependencies: - '@vitest/expect': 4.1.8 - '@vitest/mocker': 4.1.8(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0)) - '@vitest/pretty-format': 4.1.8 - '@vitest/runner': 4.1.8 - '@vitest/snapshot': 4.1.8 - '@vitest/spy': 4.1.8 - '@vitest/utils': 4.1.8 - es-module-lexer: 2.1.0 - expect-type: 1.3.0 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.4 - std-env: 4.1.0 - tinybench: 2.9.0 - tinyexec: 1.2.4 - tinyglobby: 0.2.15 - tinyrainbow: 3.1.0 - vite: 8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0) - why-is-node-running: 2.3.0 + '@types/chai': 5.2.3 + '@vitest/mocker': 5.0.5(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1)) + chai: 6.3.0 + es-module-lexer: 2.3.2 + expect-type: 1.4.0 + magic-string: 1.4.4 + obug: 3.0.0 + picomatch: 4.0.7 + std-env: 4.3.0 + tinybench: 6.2.2 + tinyexec: 1.3.1 + tinyglobby: 0.2.17 + vite: 8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1) + why-is-node-running: 3.2.1 optionalDependencies: - '@types/node': 22.20.0 - '@vitest/browser-playwright': 4.1.8(playwright@1.64.1)(vite@8.0.3(@types/node@22.20.0)(esbuild@0.27.4)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.9.0))(vitest@4.1.8) + '@types/node': 24.19.2 + '@vitest/browser-playwright': 5.0.5(playwright@1.64.1)(vite@8.3.5(@types/node@24.19.2)(esbuild@0.28.2)(jiti@2.7.0)(tsx@4.23.15)(yaml@2.9.1))(vitest@5.0.5) + '@vitest/ui': 5.0.5(vitest@5.0.5) transitivePeerDependencies: - msw @@ -6091,50 +5714,43 @@ snapshots: dependencies: isexe: 2.0.0 - why-is-node-running@2.3.0: - dependencies: - siginfo: 2.0.0 - stackback: 0.0.2 + why-is-node-running@3.2.1: {} word-wrap@1.2.5: {} - workerd@1.20260317.1: + workerd@1.20261023.1: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20260317.1 - '@cloudflare/workerd-darwin-arm64': 1.20260317.1 - '@cloudflare/workerd-linux-64': 1.20260317.1 - '@cloudflare/workerd-linux-arm64': 1.20260317.1 - '@cloudflare/workerd-windows-64': 1.20260317.1 + '@cloudflare/workerd-darwin-64': 1.20261023.1 + '@cloudflare/workerd-darwin-arm64': 1.20261023.1 + '@cloudflare/workerd-linux-64': 1.20261023.1 + '@cloudflare/workerd-linux-arm64': 1.20261023.1 + '@cloudflare/workerd-windows-64': 1.20261023.1 - worktop@0.8.0-next.18: + wrangler@4.153.0(@cloudflare/workers-types@5.20261026.1)(@types/node@24.19.2): dependencies: - mrmime: 2.0.1 - regexparam: 3.0.0 - - wrangler@4.77.0(@cloudflare/workers-types@4.20260317.1): - dependencies: - '@cloudflare/kv-asset-handler': 0.4.2 - '@cloudflare/unenv-preset': 2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260317.1) + '@cloudflare/kv-asset-handler': 0.5.0 + '@cloudflare/unenv-preset': 2.16.2(unenv@2.0.0-rc.24)(workerd@1.20261023.1) blake3-wasm: 2.1.5 - esbuild: 0.27.3 - miniflare: 4.20260317.2 + esbuild: 0.28.2 + miniflare: 5.20261023.0-beta(@types/node@24.19.2) path-to-regexp: 6.3.0 unenv: 2.0.0-rc.24 - workerd: 1.20260317.1 + workerd: 1.20261023.1 optionalDependencies: - '@cloudflare/workers-types': 4.20260317.1 + '@cloudflare/workers-types': 5.20261026.1 fsevents: 2.3.3 transitivePeerDependencies: + - '@types/node' - bufferutil - utf-8-validate - ws@8.18.0: {} + ws@8.21.0: {} ws@8.22.0: {} yaml@1.10.3: {} - yaml@2.9.0: {} + yaml@2.9.1: {} yocto-queue@0.1.0: {} @@ -6149,8 +5765,8 @@ snapshots: dependencies: '@poppinss/colors': 4.1.6 '@poppinss/dumper': 0.6.5 - '@speed-highlight/core': 1.2.15 + '@speed-highlight/core': 1.2.24 cookie: 1.1.1 youch-core: 0.3.3 - zimmerframe@1.1.4: {} + zimmerframe@1.1.5: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f7f73f9..8e273c3 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -7,6 +7,7 @@ verifyDepsBeforeRun: false allowBuilds: core-js: true esbuild: true + plyr: false sharp: true workerd: true # First-party packages we publish ourselves — exempt from the minimum-release-age @@ -15,6 +16,7 @@ allowBuilds: # just-published contrail for ~24h). Scope glob so we don't re-add per version. minimumReleaseAgeExclude: - '@atmo-dev/*' + - '@svelte-atproto/*' - svelte@5.57.3 patchedDependencies: '@atmo-dev/contrail-appview@0.12.2': patches/@atmo-dev__contrail-appview@0.12.2.patch