SPB Git

spb/rareindex

Public

Integrate agents: header user menu, session bridge, migration 0001, bundler resolution

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Sep 7, 2026) parent 34af8bd Browse files

7 changed files +8,570 −10

modified apps/web/src/components/layout/site-header.tsx +2 −3
@@ -3,6 +3,7 @@ import { NAV, NAV_GROUPS, PRIMARY_NAV } from '@/config/nav';
3 import { ThemeToggle } from './theme-toggle'; 3 import { ThemeToggle } from './theme-toggle';
4 import { MobileNav } from './mobile-nav'; 4 import { MobileNav } from './mobile-nav';
5 import { HeaderSearch } from './header-search'; 5 import { HeaderSearch } from './header-search';
6+import { UserMenu } from '@/components/account/user-menu';
6 7
7 export function Logo({ className }: { className?: string }) { 8 export function Logo({ className }: { className?: string }) {
8 return ( 9 return (
@@ -50,9 +51,7 @@ export function SiteHeader() {
50 <div className="ml-auto flex items-center gap-1.5"> 51 <div className="ml-auto flex items-center gap-1.5">
51 <HeaderSearch /> 52 <HeaderSearch />
52 <ThemeToggle /> 53 <ThemeToggle />
53− <Link href="/account" className="hidden rounded-md border border-border px-2.5 py-1.5 text-[13px] font-medium text-fg hover:bg-inset sm:inline-flex"> 54+ <UserMenu />
54− Sign in
55− </Link>
56 </div> 55 </div>
57 </div> 56 </div>
58 </header> 57 </header>
modified apps/web/src/lib/ai/request.ts +4 −5
@@ -1,6 +1,7 @@
1 import 'server-only'; 1 import 'server-only';
2 import { createHmac, randomUUID } from 'node:crypto'; 2 import { createHmac, randomUUID } from 'node:crypto';
3 import { cookies, headers } from 'next/headers'; 3 import { cookies, headers } from 'next/headers';
4+import { getCurrentUser } from '@/lib/auth/session';
4 import { getDb, aiQuotas, sql } from '@rareindex/database'; 5 import { getDb, aiQuotas, sql } from '@rareindex/database';
5 6
6 const SECRET = () => process.env.SESSION_SECRET ?? 'dev-only'; 7 const SECRET = () => process.env.SESSION_SECRET ?? 'dev-only';
@@ -37,11 +38,9 @@ export async function getAnonId(create = true): Promise<string | null> {
37 */ 38 */
38 export async function currentUserId(): Promise<string | null> { 39 export async function currentUserId(): Promise<string | null> {
39 try { 40 try {
40− const jar = await cookies(); 41+ // Delegates to the account module (hashed session id, revocation, expiry) so both agree.
41− const token = jar.get('ri_session')?.value ?? jar.get('session')?.value; 42+ const user = await getCurrentUser();
42− if (!token || token.length > 200) return null; 43+ return user?.id ?? null;
43− const [row] = await getDb().execute(sql`select user_id from sessions where id = ${token} and expires_at > now() limit 1`);
44− return ((row as { user_id?: string } | undefined)?.user_id) ?? null;
45 } catch { 44 } catch {
46 return null; 45 return null;
47 } 46 }
modified apps/web/tsconfig.json +2 −2
@@ -8,8 +8,8 @@
8 "noUncheckedIndexedAccess": true, 8 "noUncheckedIndexedAccess": true,
9 "noEmit": true, 9 "noEmit": true,
10 "esModuleInterop": true, 10 "esModuleInterop": true,
11− "module": "nodenext", 11+ "module": "esnext",
12− "moduleResolution": "nodenext", 12+ "moduleResolution": "bundler",
13 "resolveJsonModule": true, 13 "resolveJsonModule": true,
14 "isolatedModules": true, 14 "isolatedModules": true,
15 "jsx": "react-jsx", 15 "jsx": "react-jsx",
added packages/database/migrations/0001_living_prima.sql +215 −0
@@ -0,0 +1,215 @@
1+CREATE TABLE "ai_quotas" (
2+ "key" text NOT NULL,
3+ "feature" text NOT NULL,
4+ "date" text NOT NULL,
5+ "count" integer DEFAULT 0 NOT NULL
6+);
7+--> statement-breakpoint
8+CREATE TABLE "research_messages" (
9+ "id" text PRIMARY KEY NOT NULL,
10+ "session_id" text NOT NULL,
11+ "role" text NOT NULL,
12+ "content" text NOT NULL,
13+ "tool_calls" jsonb DEFAULT '[]'::jsonb NOT NULL,
14+ "usage" jsonb DEFAULT '{}'::jsonb NOT NULL,
15+ "usd_est" real DEFAULT 0 NOT NULL,
16+ "model" text,
17+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
18+);
19+--> statement-breakpoint
20+CREATE TABLE "research_sessions" (
21+ "id" text PRIMARY KEY NOT NULL,
22+ "user_id" text,
23+ "anon_id" text,
24+ "title" text,
25+ "model" text,
26+ "message_count" integer DEFAULT 0 NOT NULL,
27+ "usd_est" real DEFAULT 0 NOT NULL,
28+ "archived" boolean DEFAULT false NOT NULL,
29+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
30+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
31+);
32+--> statement-breakpoint
33+CREATE TABLE "scanner_sessions" (
34+ "id" text PRIMARY KEY NOT NULL,
35+ "user_id" text,
36+ "anon_id" text,
37+ "ip_hash" text,
38+ "mode" text NOT NULL,
39+ "input_url" text,
40+ "input_text" text,
41+ "image_count" integer DEFAULT 0 NOT NULL,
42+ "thumbnails" jsonb DEFAULT '[]'::jsonb NOT NULL,
43+ "guess" jsonb DEFAULT '{}'::jsonb NOT NULL,
44+ "guess_confidence" real,
45+ "candidates" jsonb DEFAULT '[]'::jsonb NOT NULL,
46+ "chosen_asset_id" text,
47+ "listing" jsonb DEFAULT '{}'::jsonb NOT NULL,
48+ "model" text,
49+ "usd_est" real DEFAULT 0 NOT NULL,
50+ "duration_ms" integer,
51+ "error" text,
52+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
53+ "chosen_at" timestamp with time zone
54+);
55+--> statement-breakpoint
56+CREATE TABLE "auth_codes" (
57+ "id" text PRIMARY KEY NOT NULL,
58+ "user_id" text,
59+ "email" text NOT NULL,
60+ "purpose" text NOT NULL,
61+ "code_hash" text NOT NULL,
62+ "expires_at" timestamp with time zone NOT NULL,
63+ "attempts" integer DEFAULT 0 NOT NULL,
64+ "consumed_at" timestamp with time zone,
65+ "payload" jsonb DEFAULT '{}'::jsonb NOT NULL,
66+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
67+);
68+--> statement-breakpoint
69+CREATE TABLE "login_events" (
70+ "id" text PRIMARY KEY NOT NULL,
71+ "user_id" text,
72+ "email" text,
73+ "ip" text,
74+ "user_agent" text,
75+ "outcome" text NOT NULL,
76+ "method" text,
77+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
78+);
79+--> statement-breakpoint
80+CREATE TABLE "notifications" (
81+ "id" text PRIMARY KEY NOT NULL,
82+ "user_id" text NOT NULL,
83+ "kind" text NOT NULL,
84+ "title" text NOT NULL,
85+ "body" text,
86+ "href" text,
87+ "payload" jsonb DEFAULT '{}'::jsonb NOT NULL,
88+ "read_at" timestamp with time zone,
89+ "emailed_at" timestamp with time zone,
90+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
91+);
92+--> statement-breakpoint
93+CREATE TABLE "price_targets" (
94+ "id" text PRIMARY KEY NOT NULL,
95+ "user_id" text NOT NULL,
96+ "asset_id" text NOT NULL,
97+ "variant_id" text,
98+ "direction" text DEFAULT 'above' NOT NULL,
99+ "target_usd" numeric(18, 4) NOT NULL,
100+ "baseline_usd" numeric(18, 4),
101+ "note" text,
102+ "hit_at" timestamp with time zone,
103+ "notified_at" timestamp with time zone,
104+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
105+);
106+--> statement-breakpoint
107+CREATE TABLE "rate_limits" (
108+ "key" text PRIMARY KEY NOT NULL,
109+ "count" integer DEFAULT 0 NOT NULL,
110+ "reset_at" timestamp with time zone NOT NULL
111+);
112+--> statement-breakpoint
113+CREATE TABLE "recovery_codes" (
114+ "id" text PRIMARY KEY NOT NULL,
115+ "user_id" text NOT NULL,
116+ "code_hash" text NOT NULL,
117+ "used_at" timestamp with time zone,
118+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
119+);
120+--> statement-breakpoint
121+CREATE TABLE "saved_searches" (
122+ "id" text PRIMARY KEY NOT NULL,
123+ "user_id" text NOT NULL,
124+ "name" text NOT NULL,
125+ "url" text NOT NULL,
126+ "params" jsonb DEFAULT '{}'::jsonb NOT NULL,
127+ "notify" boolean DEFAULT false NOT NULL,
128+ "last_run_at" timestamp with time zone,
129+ "last_count" integer,
130+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
131+);
132+--> statement-breakpoint
133+CREATE TABLE "trusted_devices" (
134+ "id" text PRIMARY KEY NOT NULL,
135+ "user_id" text NOT NULL,
136+ "token_hash" text NOT NULL,
137+ "label" text,
138+ "user_agent" text,
139+ "ip" text,
140+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
141+ "last_used_at" timestamp with time zone,
142+ "expires_at" timestamp with time zone NOT NULL,
143+ "revoked_at" timestamp with time zone
144+);
145+--> statement-breakpoint
146+CREATE TABLE "uploads" (
147+ "id" text PRIMARY KEY NOT NULL,
148+ "user_id" text NOT NULL,
149+ "kind" text NOT NULL,
150+ "path" text NOT NULL,
151+ "mime" text NOT NULL,
152+ "bytes" integer NOT NULL,
153+ "width" integer,
154+ "height" integer,
155+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
156+);
157+--> statement-breakpoint
158+CREATE TABLE "user_badges" (
159+ "user_id" text NOT NULL,
160+ "badge" text NOT NULL,
161+ "evidence" jsonb DEFAULT '{}'::jsonb NOT NULL,
162+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
163+);
164+--> statement-breakpoint
165+DROP INDEX "normalized_records_raw_uq";--> statement-breakpoint
166+ALTER TABLE "normalized_records" ADD COLUMN "seq" integer DEFAULT 0 NOT NULL;--> statement-breakpoint
167+ALTER TABLE "alerts" ADD COLUMN "name" text;--> statement-breakpoint
168+ALTER TABLE "alerts" ADD COLUMN "cooldown_minutes" integer DEFAULT 1440 NOT NULL;--> statement-breakpoint
169+ALTER TABLE "alerts" ADD COLUMN "trigger_count" integer DEFAULT 0 NOT NULL;--> statement-breakpoint
170+ALTER TABLE "collection_items" ADD COLUMN "tags" jsonb DEFAULT '[]'::jsonb NOT NULL;--> statement-breakpoint
171+ALTER TABLE "collection_items" ADD COLUMN "condition" text;--> statement-breakpoint
172+ALTER TABLE "collection_items" ADD COLUMN "manual_value_usd" numeric(18, 4);--> statement-breakpoint
173+ALTER TABLE "collection_items" ADD COLUMN "sold_at" date;--> statement-breakpoint
174+ALTER TABLE "collection_items" ADD COLUMN "sold_price_usd" numeric(18, 4);--> statement-breakpoint
175+ALTER TABLE "collections" ADD COLUMN "kind" text DEFAULT 'collection' NOT NULL;--> statement-breakpoint
176+ALTER TABLE "collections" ADD COLUMN "budget_usd" numeric(18, 4);--> statement-breakpoint
177+ALTER TABLE "collections" ADD COLUMN "color" text;--> statement-breakpoint
178+ALTER TABLE "sessions" ADD COLUMN "ip" text;--> statement-breakpoint
179+ALTER TABLE "sessions" ADD COLUMN "last_seen_at" timestamp with time zone;--> statement-breakpoint
180+ALTER TABLE "sessions" ADD COLUMN "revoked_at" timestamp with time zone;--> statement-breakpoint
181+ALTER TABLE "users" ADD COLUMN "handle" text;--> statement-breakpoint
182+ALTER TABLE "users" ADD COLUMN "avatar_url" text;--> statement-breakpoint
183+ALTER TABLE "users" ADD COLUMN "bio" text;--> statement-breakpoint
184+ALTER TABLE "users" ADD COLUMN "mfa_enabled" boolean DEFAULT false NOT NULL;--> statement-breakpoint
185+ALTER TABLE "users" ADD COLUMN "totp_secret_enc" text;--> statement-breakpoint
186+ALTER TABLE "users" ADD COLUMN "always_ask_code" boolean DEFAULT true NOT NULL;--> statement-breakpoint
187+ALTER TABLE "users" ADD COLUMN "password_changed_at" timestamp with time zone;--> statement-breakpoint
188+ALTER TABLE "users" ADD COLUMN "pending_email" text;--> statement-breakpoint
189+ALTER TABLE "users" ADD COLUMN "deleted_at" timestamp with time zone;--> statement-breakpoint
190+ALTER TABLE "users" ADD COLUMN "purge_after" timestamp with time zone;--> statement-breakpoint
191+ALTER TABLE "watchlist_items" ADD COLUMN "label" text;--> statement-breakpoint
192+ALTER TABLE "watchlist_items" ADD COLUMN "note" text;--> statement-breakpoint
193+ALTER TABLE "watchlist_items" ADD COLUMN "target_price_usd" numeric(18, 4);--> statement-breakpoint
194+ALTER TABLE "watchlist_items" ADD COLUMN "baseline_usd" numeric(18, 4);--> statement-breakpoint
195+CREATE INDEX "ai_quotas_uq" ON "ai_quotas" USING btree ("key","feature","date");--> statement-breakpoint
196+CREATE INDEX "research_messages_session_idx" ON "research_messages" USING btree ("session_id","created_at");--> statement-breakpoint
197+CREATE INDEX "research_sessions_anon_idx" ON "research_sessions" USING btree ("anon_id","updated_at");--> statement-breakpoint
198+CREATE INDEX "research_sessions_user_idx" ON "research_sessions" USING btree ("user_id","updated_at");--> statement-breakpoint
199+CREATE INDEX "scanner_sessions_created_idx" ON "scanner_sessions" USING btree ("created_at");--> statement-breakpoint
200+CREATE INDEX "scanner_sessions_ip_idx" ON "scanner_sessions" USING btree ("ip_hash","created_at");--> statement-breakpoint
201+CREATE INDEX "scanner_sessions_user_idx" ON "scanner_sessions" USING btree ("user_id");--> statement-breakpoint
202+CREATE INDEX "auth_codes_lookup_idx" ON "auth_codes" USING btree ("email","purpose","created_at");--> statement-breakpoint
203+CREATE INDEX "login_events_user_idx" ON "login_events" USING btree ("user_id","created_at");--> statement-breakpoint
204+CREATE INDEX "notifications_user_idx" ON "notifications" USING btree ("user_id","created_at");--> statement-breakpoint
205+CREATE INDEX "notifications_unread_idx" ON "notifications" USING btree ("user_id","read_at");--> statement-breakpoint
206+CREATE INDEX "price_targets_user_idx" ON "price_targets" USING btree ("user_id");--> statement-breakpoint
207+CREATE INDEX "price_targets_asset_idx" ON "price_targets" USING btree ("asset_id","hit_at");--> statement-breakpoint
208+CREATE INDEX "recovery_codes_user_idx" ON "recovery_codes" USING btree ("user_id");--> statement-breakpoint
209+CREATE INDEX "saved_searches_user_idx" ON "saved_searches" USING btree ("user_id");--> statement-breakpoint
210+CREATE INDEX "trusted_devices_user_idx" ON "trusted_devices" USING btree ("user_id");--> statement-breakpoint
211+CREATE UNIQUE INDEX "trusted_devices_token_uq" ON "trusted_devices" USING btree ("token_hash");--> statement-breakpoint
212+CREATE INDEX "uploads_user_idx" ON "uploads" USING btree ("user_id");--> statement-breakpoint
213+CREATE UNIQUE INDEX "user_badges_uq" ON "user_badges" USING btree ("user_id","badge");--> statement-breakpoint
214+CREATE UNIQUE INDEX "normalized_records_raw_uq" ON "normalized_records" USING btree ("raw_record_id","kind","seq");--> statement-breakpoint
215+ALTER TABLE "users" ADD CONSTRAINT "users_handle_unique" UNIQUE("handle");
\ No newline at end of file
added packages/database/migrations/meta/0001_snapshot.json +8103 −0
@@ -0,0 +1,8103 @@
1+{
2+ "id": "598f1844-5c95-4e05-93ae-8f3d5bb6f87b",
3+ "prevId": "5a9ca0fc-7e8f-4e45-90e0-6c16a3a6a052",
4+ "version": "7",
5+ "dialect": "postgresql",
6+ "tables": {
7+ "public.brands": {
8+ "name": "brands",
9+ "schema": "",
10+ "columns": {
11+ "slug": {
12+ "name": "slug",
13+ "type": "text",
14+ "primaryKey": true,
15+ "notNull": true
16+ },
17+ "name": {
18+ "name": "name",
19+ "type": "text",
20+ "primaryKey": false,
21+ "notNull": true
22+ },
23+ "category_slugs": {
24+ "name": "category_slugs",
25+ "type": "text[]",
26+ "primaryKey": false,
27+ "notNull": true,
28+ "default": "'{}'::text[]"
29+ },
30+ "country": {
31+ "name": "country",
32+ "type": "text",
33+ "primaryKey": false,
34+ "notNull": false
35+ },
36+ "founded_year": {
37+ "name": "founded_year",
38+ "type": "integer",
39+ "primaryKey": false,
40+ "notNull": false
41+ },
42+ "metadata": {
43+ "name": "metadata",
44+ "type": "jsonb",
45+ "primaryKey": false,
46+ "notNull": true,
47+ "default": "'{}'::jsonb"
48+ },
49+ "created_at": {
50+ "name": "created_at",
51+ "type": "timestamp with time zone",
52+ "primaryKey": false,
53+ "notNull": true,
54+ "default": "now()"
55+ }
56+ },
57+ "indexes": {
58+ "brands_name_idx": {
59+ "name": "brands_name_idx",
60+ "columns": [
61+ {
62+ "expression": "name",
63+ "isExpression": false,
64+ "asc": true,
65+ "nulls": "last"
66+ }
67+ ],
68+ "isUnique": false,
69+ "concurrently": false,
70+ "method": "btree",
71+ "with": {}
72+ }
73+ },
74+ "foreignKeys": {},
75+ "compositePrimaryKeys": {},
76+ "uniqueConstraints": {},
77+ "policies": {},
78+ "checkConstraints": {},
79+ "isRLSEnabled": false
80+ },
81+ "public.categories": {
82+ "name": "categories",
83+ "schema": "",
84+ "columns": {
85+ "slug": {
86+ "name": "slug",
87+ "type": "text",
88+ "primaryKey": true,
89+ "notNull": true
90+ },
91+ "parent_slug": {
92+ "name": "parent_slug",
93+ "type": "text",
94+ "primaryKey": false,
95+ "notNull": false
96+ },
97+ "family_slug": {
98+ "name": "family_slug",
99+ "type": "text",
100+ "primaryKey": false,
101+ "notNull": true
102+ },
103+ "name": {
104+ "name": "name",
105+ "type": "text",
106+ "primaryKey": false,
107+ "notNull": true
108+ },
109+ "short_name": {
110+ "name": "short_name",
111+ "type": "text",
112+ "primaryKey": false,
113+ "notNull": false
114+ },
115+ "description": {
116+ "name": "description",
117+ "type": "text",
118+ "primaryKey": false,
119+ "notNull": false
120+ },
121+ "level": {
122+ "name": "level",
123+ "type": "integer",
124+ "primaryKey": false,
125+ "notNull": true,
126+ "default": 0
127+ },
128+ "phase": {
129+ "name": "phase",
130+ "type": "integer",
131+ "primaryKey": false,
132+ "notNull": true,
133+ "default": 3
134+ },
135+ "active": {
136+ "name": "active",
137+ "type": "boolean",
138+ "primaryKey": false,
139+ "notNull": true,
140+ "default": true
141+ },
142+ "condition_scale": {
143+ "name": "condition_scale",
144+ "type": "text",
145+ "primaryKey": false,
146+ "notNull": false
147+ },
148+ "graders": {
149+ "name": "graders",
150+ "type": "text[]",
151+ "primaryKey": false,
152+ "notNull": true,
153+ "default": "'{}'::text[]"
154+ },
155+ "index_ticker": {
156+ "name": "index_ticker",
157+ "type": "text",
158+ "primaryKey": false,
159+ "notNull": false
160+ },
161+ "attribute_schema": {
162+ "name": "attribute_schema",
163+ "type": "jsonb",
164+ "primaryKey": false,
165+ "notNull": true,
166+ "default": "'{}'::jsonb"
167+ },
168+ "sort_order": {
169+ "name": "sort_order",
170+ "type": "integer",
171+ "primaryKey": false,
172+ "notNull": true,
173+ "default": 0
174+ },
175+ "compliance_flags": {
176+ "name": "compliance_flags",
177+ "type": "text[]",
178+ "primaryKey": false,
179+ "notNull": true,
180+ "default": "'{}'::text[]"
181+ },
182+ "icon": {
183+ "name": "icon",
184+ "type": "text",
185+ "primaryKey": false,
186+ "notNull": false
187+ },
188+ "created_at": {
189+ "name": "created_at",
190+ "type": "timestamp with time zone",
191+ "primaryKey": false,
192+ "notNull": true,
193+ "default": "now()"
194+ },
195+ "updated_at": {
196+ "name": "updated_at",
197+ "type": "timestamp with time zone",
198+ "primaryKey": false,
199+ "notNull": true,
200+ "default": "now()"
201+ }
202+ },
203+ "indexes": {
204+ "categories_parent_idx": {
205+ "name": "categories_parent_idx",
206+ "columns": [
207+ {
208+ "expression": "parent_slug",
209+ "isExpression": false,
210+ "asc": true,
211+ "nulls": "last"
212+ }
213+ ],
214+ "isUnique": false,
215+ "concurrently": false,
216+ "method": "btree",
217+ "with": {}
218+ },
219+ "categories_family_idx": {
220+ "name": "categories_family_idx",
221+ "columns": [
222+ {
223+ "expression": "family_slug",
224+ "isExpression": false,
225+ "asc": true,
226+ "nulls": "last"
227+ }
228+ ],
229+ "isUnique": false,
230+ "concurrently": false,
231+ "method": "btree",
232+ "with": {}
233+ }
234+ },
235+ "foreignKeys": {},
236+ "compositePrimaryKeys": {},
237+ "uniqueConstraints": {},
238+ "policies": {},
239+ "checkConstraints": {},
240+ "isRLSEnabled": false
241+ },
242+ "public.franchises": {
243+ "name": "franchises",
244+ "schema": "",
245+ "columns": {
246+ "slug": {
247+ "name": "slug",
248+ "type": "text",
249+ "primaryKey": true,
250+ "notNull": true
251+ },
252+ "name": {
253+ "name": "name",
254+ "type": "text",
255+ "primaryKey": false,
256+ "notNull": true
257+ },
258+ "owner": {
259+ "name": "owner",
260+ "type": "text",
261+ "primaryKey": false,
262+ "notNull": false
263+ },
264+ "category_slugs": {
265+ "name": "category_slugs",
266+ "type": "text[]",
267+ "primaryKey": false,
268+ "notNull": true,
269+ "default": "'{}'::text[]"
270+ },
271+ "metadata": {
272+ "name": "metadata",
273+ "type": "jsonb",
274+ "primaryKey": false,
275+ "notNull": true,
276+ "default": "'{}'::jsonb"
277+ },
278+ "created_at": {
279+ "name": "created_at",
280+ "type": "timestamp with time zone",
281+ "primaryKey": false,
282+ "notNull": true,
283+ "default": "now()"
284+ }
285+ },
286+ "indexes": {},
287+ "foreignKeys": {},
288+ "compositePrimaryKeys": {},
289+ "uniqueConstraints": {},
290+ "policies": {},
291+ "checkConstraints": {},
292+ "isRLSEnabled": false
293+ },
294+ "public.graders": {
295+ "name": "graders",
296+ "schema": "",
297+ "columns": {
298+ "slug": {
299+ "name": "slug",
300+ "type": "text",
301+ "primaryKey": true,
302+ "notNull": true
303+ },
304+ "name": {
305+ "name": "name",
306+ "type": "text",
307+ "primaryKey": false,
308+ "notNull": true
309+ },
310+ "category_slugs": {
311+ "name": "category_slugs",
312+ "type": "text[]",
313+ "primaryKey": false,
314+ "notNull": true,
315+ "default": "'{}'::text[]"
316+ },
317+ "scale": {
318+ "name": "scale",
319+ "type": "jsonb",
320+ "primaryKey": false,
321+ "notNull": true,
322+ "default": "'{}'::jsonb"
323+ },
324+ "population_url": {
325+ "name": "population_url",
326+ "type": "text",
327+ "primaryKey": false,
328+ "notNull": false
329+ },
330+ "verify_url": {
331+ "name": "verify_url",
332+ "type": "text",
333+ "primaryKey": false,
334+ "notNull": false
335+ },
336+ "active": {
337+ "name": "active",
338+ "type": "boolean",
339+ "primaryKey": false,
340+ "notNull": true,
341+ "default": true
342+ }
343+ },
344+ "indexes": {},
345+ "foreignKeys": {},
346+ "compositePrimaryKeys": {},
347+ "uniqueConstraints": {},
348+ "policies": {},
349+ "checkConstraints": {},
350+ "isRLSEnabled": false
351+ },
352+ "public.sets": {
353+ "name": "sets",
354+ "schema": "",
355+ "columns": {
356+ "slug": {
357+ "name": "slug",
358+ "type": "text",
359+ "primaryKey": true,
360+ "notNull": true
361+ },
362+ "name": {
363+ "name": "name",
364+ "type": "text",
365+ "primaryKey": false,
366+ "notNull": true
367+ },
368+ "code": {
369+ "name": "code",
370+ "type": "text",
371+ "primaryKey": false,
372+ "notNull": false
373+ },
374+ "category_slug": {
375+ "name": "category_slug",
376+ "type": "text",
377+ "primaryKey": false,
378+ "notNull": true
379+ },
380+ "franchise_slug": {
381+ "name": "franchise_slug",
382+ "type": "text",
383+ "primaryKey": false,
384+ "notNull": false
385+ },
386+ "brand_slug": {
387+ "name": "brand_slug",
388+ "type": "text",
389+ "primaryKey": false,
390+ "notNull": false
391+ },
392+ "release_year": {
393+ "name": "release_year",
394+ "type": "integer",
395+ "primaryKey": false,
396+ "notNull": false
397+ },
398+ "release_date": {
399+ "name": "release_date",
400+ "type": "text",
401+ "primaryKey": false,
402+ "notNull": false
403+ },
404+ "language": {
405+ "name": "language",
406+ "type": "text",
407+ "primaryKey": false,
408+ "notNull": false
409+ },
410+ "total_items": {
411+ "name": "total_items",
412+ "type": "integer",
413+ "primaryKey": false,
414+ "notNull": false
415+ },
416+ "identifiers": {
417+ "name": "identifiers",
418+ "type": "jsonb",
419+ "primaryKey": false,
420+ "notNull": true,
421+ "default": "'{}'::jsonb"
422+ },
423+ "metadata": {
424+ "name": "metadata",
425+ "type": "jsonb",
426+ "primaryKey": false,
427+ "notNull": true,
428+ "default": "'{}'::jsonb"
429+ },
430+ "created_at": {
431+ "name": "created_at",
432+ "type": "timestamp with time zone",
433+ "primaryKey": false,
434+ "notNull": true,
435+ "default": "now()"
436+ }
437+ },
438+ "indexes": {
439+ "sets_category_idx": {
440+ "name": "sets_category_idx",
441+ "columns": [
442+ {
443+ "expression": "category_slug",
444+ "isExpression": false,
445+ "asc": true,
446+ "nulls": "last"
447+ }
448+ ],
449+ "isUnique": false,
450+ "concurrently": false,
451+ "method": "btree",
452+ "with": {}
453+ },
454+ "sets_category_code_uq": {
455+ "name": "sets_category_code_uq",
456+ "columns": [
457+ {
458+ "expression": "category_slug",
459+ "isExpression": false,
460+ "asc": true,
461+ "nulls": "last"
462+ },
463+ {
464+ "expression": "code",
465+ "isExpression": false,
466+ "asc": true,
467+ "nulls": "last"
468+ }
469+ ],
470+ "isUnique": true,
471+ "concurrently": false,
472+ "method": "btree",
473+ "with": {}
474+ }
475+ },
476+ "foreignKeys": {},
477+ "compositePrimaryKeys": {},
478+ "uniqueConstraints": {},
479+ "policies": {},
480+ "checkConstraints": {},
481+ "isRLSEnabled": false
482+ },
483+ "public.taxonomy_proposals": {
484+ "name": "taxonomy_proposals",
485+ "schema": "",
486+ "columns": {
487+ "id": {
488+ "name": "id",
489+ "type": "text",
490+ "primaryKey": true,
491+ "notNull": true
492+ },
493+ "proposed_slug": {
494+ "name": "proposed_slug",
495+ "type": "text",
496+ "primaryKey": false,
497+ "notNull": true
498+ },
499+ "name": {
500+ "name": "name",
501+ "type": "text",
502+ "primaryKey": false,
503+ "notNull": true
504+ },
505+ "parent_slug": {
506+ "name": "parent_slug",
507+ "type": "text",
508+ "primaryKey": false,
509+ "notNull": false
510+ },
511+ "evidence": {
512+ "name": "evidence",
513+ "type": "jsonb",
514+ "primaryKey": false,
515+ "notNull": true,
516+ "default": "'{}'::jsonb"
517+ },
518+ "volume_estimate": {
519+ "name": "volume_estimate",
520+ "type": "integer",
521+ "primaryKey": false,
522+ "notNull": false
523+ },
524+ "status": {
525+ "name": "status",
526+ "type": "text",
527+ "primaryKey": false,
528+ "notNull": true,
529+ "default": "'pending'"
530+ },
531+ "decided_by": {
532+ "name": "decided_by",
533+ "type": "text",
534+ "primaryKey": false,
535+ "notNull": false
536+ },
537+ "decided_at": {
538+ "name": "decided_at",
539+ "type": "text",
540+ "primaryKey": false,
541+ "notNull": false
542+ },
543+ "created_at": {
544+ "name": "created_at",
545+ "type": "timestamp with time zone",
546+ "primaryKey": false,
547+ "notNull": true,
548+ "default": "now()"
549+ }
550+ },
551+ "indexes": {},
552+ "foreignKeys": {},
553+ "compositePrimaryKeys": {},
554+ "uniqueConstraints": {},
555+ "policies": {},
556+ "checkConstraints": {},
557+ "isRLSEnabled": false
558+ },
559+ "public.connector_health": {
560+ "name": "connector_health",
561+ "schema": "",
562+ "columns": {
563+ "connector_id": {
564+ "name": "connector_id",
565+ "type": "text",
566+ "primaryKey": true,
567+ "notNull": true
568+ },
569+ "computed_at": {
570+ "name": "computed_at",
571+ "type": "timestamp with time zone",
572+ "primaryKey": false,
573+ "notNull": true
574+ },
575+ "status": {
576+ "name": "status",
577+ "type": "text",
578+ "primaryKey": false,
579+ "notNull": true
580+ },
581+ "health": {
582+ "name": "health",
583+ "type": "jsonb",
584+ "primaryKey": false,
585+ "notNull": true,
586+ "default": "'{}'::jsonb"
587+ }
588+ },
589+ "indexes": {},
590+ "foreignKeys": {},
591+ "compositePrimaryKeys": {},
592+ "uniqueConstraints": {},
593+ "policies": {},
594+ "checkConstraints": {},
595+ "isRLSEnabled": false
596+ },
597+ "public.connector_runs": {
598+ "name": "connector_runs",
599+ "schema": "",
600+ "columns": {
601+ "id": {
602+ "name": "id",
603+ "type": "text",
604+ "primaryKey": true,
605+ "notNull": true
606+ },
607+ "connector_id": {
608+ "name": "connector_id",
609+ "type": "text",
610+ "primaryKey": false,
611+ "notNull": true
612+ },
613+ "trigger": {
614+ "name": "trigger",
615+ "type": "text",
616+ "primaryKey": false,
617+ "notNull": true,
618+ "default": "'schedule'"
619+ },
620+ "started_at": {
621+ "name": "started_at",
622+ "type": "timestamp with time zone",
623+ "primaryKey": false,
624+ "notNull": true
625+ },
626+ "finished_at": {
627+ "name": "finished_at",
628+ "type": "timestamp with time zone",
629+ "primaryKey": false,
630+ "notNull": false
631+ },
632+ "status": {
633+ "name": "status",
634+ "type": "text",
635+ "primaryKey": false,
636+ "notNull": true,
637+ "default": "'running'"
638+ },
639+ "pages_attempted": {
640+ "name": "pages_attempted",
641+ "type": "integer",
642+ "primaryKey": false,
643+ "notNull": true,
644+ "default": 0
645+ },
646+ "pages_success": {
647+ "name": "pages_success",
648+ "type": "integer",
649+ "primaryKey": false,
650+ "notNull": true,
651+ "default": 0
652+ },
653+ "records_raw": {
654+ "name": "records_raw",
655+ "type": "integer",
656+ "primaryKey": false,
657+ "notNull": true,
658+ "default": 0
659+ },
660+ "records_normalized": {
661+ "name": "records_normalized",
662+ "type": "integer",
663+ "primaryKey": false,
664+ "notNull": true,
665+ "default": 0
666+ },
667+ "records_duplicate": {
668+ "name": "records_duplicate",
669+ "type": "integer",
670+ "primaryKey": false,
671+ "notNull": true,
672+ "default": 0
673+ },
674+ "records_rejected": {
675+ "name": "records_rejected",
676+ "type": "integer",
677+ "primaryKey": false,
678+ "notNull": true,
679+ "default": 0
680+ },
681+ "engine_stats": {
682+ "name": "engine_stats",
683+ "type": "jsonb",
684+ "primaryKey": false,
685+ "notNull": true,
686+ "default": "'{}'::jsonb"
687+ },
688+ "anomalies": {
689+ "name": "anomalies",
690+ "type": "jsonb",
691+ "primaryKey": false,
692+ "notNull": true,
693+ "default": "'[]'::jsonb"
694+ },
695+ "error": {
696+ "name": "error",
697+ "type": "text",
698+ "primaryKey": false,
699+ "notNull": false
700+ },
701+ "cost_credits": {
702+ "name": "cost_credits",
703+ "type": "real",
704+ "primaryKey": false,
705+ "notNull": true,
706+ "default": 0
707+ },
708+ "cost_usd_est": {
709+ "name": "cost_usd_est",
710+ "type": "real",
711+ "primaryKey": false,
712+ "notNull": true,
713+ "default": 0
714+ },
715+ "cursor": {
716+ "name": "cursor",
717+ "type": "jsonb",
718+ "primaryKey": false,
719+ "notNull": true,
720+ "default": "'{}'::jsonb"
721+ }
722+ },
723+ "indexes": {
724+ "connector_runs_connector_started_idx": {
725+ "name": "connector_runs_connector_started_idx",
726+ "columns": [
727+ {
728+ "expression": "connector_id",
729+ "isExpression": false,
730+ "asc": true,
731+ "nulls": "last"
732+ },
733+ {
734+ "expression": "started_at",
735+ "isExpression": false,
736+ "asc": true,
737+ "nulls": "last"
738+ }
739+ ],
740+ "isUnique": false,
741+ "concurrently": false,
742+ "method": "btree",
743+ "with": {}
744+ }
745+ },
746+ "foreignKeys": {},
747+ "compositePrimaryKeys": {},
748+ "uniqueConstraints": {},
749+ "policies": {},
750+ "checkConstraints": {},
751+ "isRLSEnabled": false
752+ },
753+ "public.connectors": {
754+ "name": "connectors",
755+ "schema": "",
756+ "columns": {
757+ "id": {
758+ "name": "id",
759+ "type": "text",
760+ "primaryKey": true,
761+ "notNull": true
762+ },
763+ "source_id": {
764+ "name": "source_id",
765+ "type": "text",
766+ "primaryKey": false,
767+ "notNull": true
768+ },
769+ "display_name": {
770+ "name": "display_name",
771+ "type": "text",
772+ "primaryKey": false,
773+ "notNull": true
774+ },
775+ "engine_priority": {
776+ "name": "engine_priority",
777+ "type": "text[]",
778+ "primaryKey": false,
779+ "notNull": true,
780+ "default": "'{}'::text[]"
781+ },
782+ "categories": {
783+ "name": "categories",
784+ "type": "text[]",
785+ "primaryKey": false,
786+ "notNull": true,
787+ "default": "'{}'::text[]"
788+ },
789+ "regions": {
790+ "name": "regions",
791+ "type": "text[]",
792+ "primaryKey": false,
793+ "notNull": true,
794+ "default": "'{}'::text[]"
795+ },
796+ "languages": {
797+ "name": "languages",
798+ "type": "text[]",
799+ "primaryKey": false,
800+ "notNull": true,
801+ "default": "'{}'::text[]"
802+ },
803+ "currency": {
804+ "name": "currency",
805+ "type": "text[]",
806+ "primaryKey": false,
807+ "notNull": true,
808+ "default": "'{}'::text[]"
809+ },
810+ "supports_listings": {
811+ "name": "supports_listings",
812+ "type": "boolean",
813+ "primaryKey": false,
814+ "notNull": true,
815+ "default": false
816+ },
817+ "supports_sold": {
818+ "name": "supports_sold",
819+ "type": "boolean",
820+ "primaryKey": false,
821+ "notNull": true,
822+ "default": false
823+ },
824+ "supports_auctions": {
825+ "name": "supports_auctions",
826+ "type": "boolean",
827+ "primaryKey": false,
828+ "notNull": true,
829+ "default": false
830+ },
831+ "supports_images": {
832+ "name": "supports_images",
833+ "type": "boolean",
834+ "primaryKey": false,
835+ "notNull": true,
836+ "default": true
837+ },
838+ "supports_catalog": {
839+ "name": "supports_catalog",
840+ "type": "boolean",
841+ "primaryKey": false,
842+ "notNull": true,
843+ "default": false
844+ },
845+ "supports_population": {
846+ "name": "supports_population",
847+ "type": "boolean",
848+ "primaryKey": false,
849+ "notNull": true,
850+ "default": false
851+ },
852+ "refresh_frequency_minutes": {
853+ "name": "refresh_frequency_minutes",
854+ "type": "integer",
855+ "primaryKey": false,
856+ "notNull": true,
857+ "default": 1440
858+ },
859+ "priority": {
860+ "name": "priority",
861+ "type": "text",
862+ "primaryKey": false,
863+ "notNull": true,
864+ "default": "'medium'"
865+ },
866+ "status": {
867+ "name": "status",
868+ "type": "text",
869+ "primaryKey": false,
870+ "notNull": true,
871+ "default": "'active'"
872+ },
873+ "schema_version": {
874+ "name": "schema_version",
875+ "type": "text",
876+ "primaryKey": false,
877+ "notNull": true,
878+ "default": "'1.0'"
879+ },
880+ "connector_version": {
881+ "name": "connector_version",
882+ "type": "text",
883+ "primaryKey": false,
884+ "notNull": true,
885+ "default": "'1.0.0'"
886+ },
887+ "config": {
888+ "name": "config",
889+ "type": "jsonb",
890+ "primaryKey": false,
891+ "notNull": true,
892+ "default": "'{}'::jsonb"
893+ },
894+ "last_run_at": {
895+ "name": "last_run_at",
896+ "type": "timestamp with time zone",
897+ "primaryKey": false,
898+ "notNull": false
899+ },
900+ "last_success_at": {
901+ "name": "last_success_at",
902+ "type": "timestamp with time zone",
903+ "primaryKey": false,
904+ "notNull": false
905+ },
906+ "next_run_at": {
907+ "name": "next_run_at",
908+ "type": "timestamp with time zone",
909+ "primaryKey": false,
910+ "notNull": false
911+ },
912+ "created_at": {
913+ "name": "created_at",
914+ "type": "timestamp with time zone",
915+ "primaryKey": false,
916+ "notNull": true,
917+ "default": "now()"
918+ },
919+ "updated_at": {
920+ "name": "updated_at",
921+ "type": "timestamp with time zone",
922+ "primaryKey": false,
923+ "notNull": true,
924+ "default": "now()"
925+ }
926+ },
927+ "indexes": {},
928+ "foreignKeys": {},
929+ "compositePrimaryKeys": {},
930+ "uniqueConstraints": {},
931+ "policies": {},
932+ "checkConstraints": {},
933+ "isRLSEnabled": false
934+ },
935+ "public.costs": {
936+ "name": "costs",
937+ "schema": "",
938+ "columns": {
939+ "id": {
940+ "name": "id",
941+ "type": "text",
942+ "primaryKey": true,
943+ "notNull": true
944+ },
945+ "occurred_at": {
946+ "name": "occurred_at",
947+ "type": "timestamp with time zone",
948+ "primaryKey": false,
949+ "notNull": true
950+ },
951+ "kind": {
952+ "name": "kind",
953+ "type": "text",
954+ "primaryKey": false,
955+ "notNull": true
956+ },
957+ "provider": {
958+ "name": "provider",
959+ "type": "text",
960+ "primaryKey": false,
961+ "notNull": false
962+ },
963+ "connector_id": {
964+ "name": "connector_id",
965+ "type": "text",
966+ "primaryKey": false,
967+ "notNull": false
968+ },
969+ "category_slug": {
970+ "name": "category_slug",
971+ "type": "text",
972+ "primaryKey": false,
973+ "notNull": false
974+ },
975+ "endpoint": {
976+ "name": "endpoint",
977+ "type": "text",
978+ "primaryKey": false,
979+ "notNull": false
980+ },
981+ "user_id": {
982+ "name": "user_id",
983+ "type": "text",
984+ "primaryKey": false,
985+ "notNull": false
986+ },
987+ "units": {
988+ "name": "units",
989+ "type": "real",
990+ "primaryKey": false,
991+ "notNull": true,
992+ "default": 1
993+ },
994+ "credits": {
995+ "name": "credits",
996+ "type": "real",
997+ "primaryKey": false,
998+ "notNull": true,
999+ "default": 0
1000+ },
1001+ "usd_est": {
1002+ "name": "usd_est",
1003+ "type": "real",
1004+ "primaryKey": false,
1005+ "notNull": true,
1006+ "default": 0
1007+ },
1008+ "metadata": {
1009+ "name": "metadata",
1010+ "type": "jsonb",
1011+ "primaryKey": false,
1012+ "notNull": true,
1013+ "default": "'{}'::jsonb"
1014+ }
1015+ },
1016+ "indexes": {
1017+ "costs_occurred_idx": {
1018+ "name": "costs_occurred_idx",
1019+ "columns": [
1020+ {
1021+ "expression": "occurred_at",
1022+ "isExpression": false,
1023+ "asc": true,
1024+ "nulls": "last"
1025+ }
1026+ ],
1027+ "isUnique": false,
1028+ "concurrently": false,
1029+ "method": "btree",
1030+ "with": {}
1031+ },
1032+ "costs_connector_idx": {
1033+ "name": "costs_connector_idx",
1034+ "columns": [
1035+ {
1036+ "expression": "connector_id",
1037+ "isExpression": false,
1038+ "asc": true,
1039+ "nulls": "last"
1040+ }
1041+ ],
1042+ "isUnique": false,
1043+ "concurrently": false,
1044+ "method": "btree",
1045+ "with": {}
1046+ }
1047+ },
1048+ "foreignKeys": {},
1049+ "compositePrimaryKeys": {},
1050+ "uniqueConstraints": {},
1051+ "policies": {},
1052+ "checkConstraints": {},
1053+ "isRLSEnabled": false
1054+ },
1055+ "public.crawl_state": {
1056+ "name": "crawl_state",
1057+ "schema": "",
1058+ "columns": {
1059+ "url_hash": {
1060+ "name": "url_hash",
1061+ "type": "text",
1062+ "primaryKey": true,
1063+ "notNull": true
1064+ },
1065+ "connector_id": {
1066+ "name": "connector_id",
1067+ "type": "text",
1068+ "primaryKey": false,
1069+ "notNull": true
1070+ },
1071+ "url": {
1072+ "name": "url",
1073+ "type": "text",
1074+ "primaryKey": false,
1075+ "notNull": true
1076+ },
1077+ "etag": {
1078+ "name": "etag",
1079+ "type": "text",
1080+ "primaryKey": false,
1081+ "notNull": false
1082+ },
1083+ "last_modified": {
1084+ "name": "last_modified",
1085+ "type": "text",
1086+ "primaryKey": false,
1087+ "notNull": false
1088+ },
1089+ "content_hash": {
1090+ "name": "content_hash",
1091+ "type": "text",
1092+ "primaryKey": false,
1093+ "notNull": false
1094+ },
1095+ "last_fetched_at": {
1096+ "name": "last_fetched_at",
1097+ "type": "timestamp with time zone",
1098+ "primaryKey": false,
1099+ "notNull": false
1100+ },
1101+ "last_changed_at": {
1102+ "name": "last_changed_at",
1103+ "type": "timestamp with time zone",
1104+ "primaryKey": false,
1105+ "notNull": false
1106+ },
1107+ "fetch_count": {
1108+ "name": "fetch_count",
1109+ "type": "integer",
1110+ "primaryKey": false,
1111+ "notNull": true,
1112+ "default": 0
1113+ },
1114+ "change_count": {
1115+ "name": "change_count",
1116+ "type": "integer",
1117+ "primaryKey": false,
1118+ "notNull": true,
1119+ "default": 0
1120+ },
1121+ "change_interval_hours": {
1122+ "name": "change_interval_hours",
1123+ "type": "real",
1124+ "primaryKey": false,
1125+ "notNull": false
1126+ },
1127+ "next_fetch_at": {
1128+ "name": "next_fetch_at",
1129+ "type": "timestamp with time zone",
1130+ "primaryKey": false,
1131+ "notNull": false
1132+ },
1133+ "last_status": {
1134+ "name": "last_status",
1135+ "type": "integer",
1136+ "primaryKey": false,
1137+ "notNull": false
1138+ },
1139+ "failures": {
1140+ "name": "failures",
1141+ "type": "integer",
1142+ "primaryKey": false,
1143+ "notNull": true,
1144+ "default": 0
1145+ }
1146+ },
1147+ "indexes": {
1148+ "crawl_state_next_idx": {
1149+ "name": "crawl_state_next_idx",
1150+ "columns": [
1151+ {
1152+ "expression": "connector_id",
1153+ "isExpression": false,
1154+ "asc": true,
1155+ "nulls": "last"
1156+ },
1157+ {
1158+ "expression": "next_fetch_at",
1159+ "isExpression": false,
1160+ "asc": true,
1161+ "nulls": "last"
1162+ }
1163+ ],
1164+ "isUnique": false,
1165+ "concurrently": false,
1166+ "method": "btree",
1167+ "with": {}
1168+ }
1169+ },
1170+ "foreignKeys": {},
1171+ "compositePrimaryKeys": {},
1172+ "uniqueConstraints": {},
1173+ "policies": {},
1174+ "checkConstraints": {},
1175+ "isRLSEnabled": false
1176+ },
1177+ "public.sources": {
1178+ "name": "sources",
1179+ "schema": "",
1180+ "columns": {
1181+ "id": {
1182+ "name": "id",
1183+ "type": "text",
1184+ "primaryKey": true,
1185+ "notNull": true
1186+ },
1187+ "name": {
1188+ "name": "name",
1189+ "type": "text",
1190+ "primaryKey": false,
1191+ "notNull": true
1192+ },
1193+ "source_type": {
1194+ "name": "source_type",
1195+ "type": "text",
1196+ "primaryKey": false,
1197+ "notNull": true
1198+ },
1199+ "url": {
1200+ "name": "url",
1201+ "type": "text",
1202+ "primaryKey": false,
1203+ "notNull": false
1204+ },
1205+ "countries": {
1206+ "name": "countries",
1207+ "type": "text[]",
1208+ "primaryKey": false,
1209+ "notNull": true,
1210+ "default": "'{}'::text[]"
1211+ },
1212+ "languages": {
1213+ "name": "languages",
1214+ "type": "text[]",
1215+ "primaryKey": false,
1216+ "notNull": true,
1217+ "default": "'{}'::text[]"
1218+ },
1219+ "currencies": {
1220+ "name": "currencies",
1221+ "type": "text[]",
1222+ "primaryKey": false,
1223+ "notNull": true,
1224+ "default": "'{}'::text[]"
1225+ },
1226+ "trust_score": {
1227+ "name": "trust_score",
1228+ "type": "numeric(8, 6)",
1229+ "primaryKey": false,
1230+ "notNull": true,
1231+ "default": 0.5
1232+ },
1233+ "trust_factors": {
1234+ "name": "trust_factors",
1235+ "type": "jsonb",
1236+ "primaryKey": false,
1237+ "notNull": true,
1238+ "default": "'{}'::jsonb"
1239+ },
1240+ "attribution_required": {
1241+ "name": "attribution_required",
1242+ "type": "boolean",
1243+ "primaryKey": false,
1244+ "notNull": true,
1245+ "default": true
1246+ },
1247+ "terms_url": {
1248+ "name": "terms_url",
1249+ "type": "text",
1250+ "primaryKey": false,
1251+ "notNull": false
1252+ },
1253+ "active": {
1254+ "name": "active",
1255+ "type": "boolean",
1256+ "primaryKey": false,
1257+ "notNull": true,
1258+ "default": true
1259+ },
1260+ "created_at": {
1261+ "name": "created_at",
1262+ "type": "timestamp with time zone",
1263+ "primaryKey": false,
1264+ "notNull": true,
1265+ "default": "now()"
1266+ },
1267+ "updated_at": {
1268+ "name": "updated_at",
1269+ "type": "timestamp with time zone",
1270+ "primaryKey": false,
1271+ "notNull": true,
1272+ "default": "now()"
1273+ }
1274+ },
1275+ "indexes": {},
1276+ "foreignKeys": {},
1277+ "compositePrimaryKeys": {},
1278+ "uniqueConstraints": {},
1279+ "policies": {},
1280+ "checkConstraints": {},
1281+ "isRLSEnabled": false
1282+ },
1283+ "public.audit_log": {
1284+ "name": "audit_log",
1285+ "schema": "",
1286+ "columns": {
1287+ "id": {
1288+ "name": "id",
1289+ "type": "text",
1290+ "primaryKey": true,
1291+ "notNull": true
1292+ },
1293+ "entity_type": {
1294+ "name": "entity_type",
1295+ "type": "text",
1296+ "primaryKey": false,
1297+ "notNull": true
1298+ },
1299+ "entity_id": {
1300+ "name": "entity_id",
1301+ "type": "text",
1302+ "primaryKey": false,
1303+ "notNull": true
1304+ },
1305+ "action": {
1306+ "name": "action",
1307+ "type": "text",
1308+ "primaryKey": false,
1309+ "notNull": true
1310+ },
1311+ "reason": {
1312+ "name": "reason",
1313+ "type": "text",
1314+ "primaryKey": false,
1315+ "notNull": true
1316+ },
1317+ "actor": {
1318+ "name": "actor",
1319+ "type": "text",
1320+ "primaryKey": false,
1321+ "notNull": true,
1322+ "default": "'system'"
1323+ },
1324+ "details": {
1325+ "name": "details",
1326+ "type": "jsonb",
1327+ "primaryKey": false,
1328+ "notNull": true,
1329+ "default": "'{}'::jsonb"
1330+ },
1331+ "created_at": {
1332+ "name": "created_at",
1333+ "type": "timestamp with time zone",
1334+ "primaryKey": false,
1335+ "notNull": true,
1336+ "default": "now()"
1337+ }
1338+ },
1339+ "indexes": {
1340+ "audit_entity_idx": {
1341+ "name": "audit_entity_idx",
1342+ "columns": [
1343+ {
1344+ "expression": "entity_type",
1345+ "isExpression": false,
1346+ "asc": true,
1347+ "nulls": "last"
1348+ },
1349+ {
1350+ "expression": "entity_id",
1351+ "isExpression": false,
1352+ "asc": true,
1353+ "nulls": "last"
1354+ }
1355+ ],
1356+ "isUnique": false,
1357+ "concurrently": false,
1358+ "method": "btree",
1359+ "with": {}
1360+ }
1361+ },
1362+ "foreignKeys": {},
1363+ "compositePrimaryKeys": {},
1364+ "uniqueConstraints": {},
1365+ "policies": {},
1366+ "checkConstraints": {},
1367+ "isRLSEnabled": false
1368+ },
1369+ "public.events": {
1370+ "name": "events",
1371+ "schema": "",
1372+ "columns": {
1373+ "id": {
1374+ "name": "id",
1375+ "type": "text",
1376+ "primaryKey": true,
1377+ "notNull": true
1378+ },
1379+ "type": {
1380+ "name": "type",
1381+ "type": "text",
1382+ "primaryKey": false,
1383+ "notNull": true
1384+ },
1385+ "entity_type": {
1386+ "name": "entity_type",
1387+ "type": "text",
1388+ "primaryKey": false,
1389+ "notNull": false
1390+ },
1391+ "entity_id": {
1392+ "name": "entity_id",
1393+ "type": "text",
1394+ "primaryKey": false,
1395+ "notNull": false
1396+ },
1397+ "payload": {
1398+ "name": "payload",
1399+ "type": "jsonb",
1400+ "primaryKey": false,
1401+ "notNull": true,
1402+ "default": "'{}'::jsonb"
1403+ },
1404+ "created_at": {
1405+ "name": "created_at",
1406+ "type": "timestamp with time zone",
1407+ "primaryKey": false,
1408+ "notNull": true,
1409+ "default": "now()"
1410+ }
1411+ },
1412+ "indexes": {
1413+ "events_type_created_idx": {
1414+ "name": "events_type_created_idx",
1415+ "columns": [
1416+ {
1417+ "expression": "type",
1418+ "isExpression": false,
1419+ "asc": true,
1420+ "nulls": "last"
1421+ },
1422+ {
1423+ "expression": "created_at",
1424+ "isExpression": false,
1425+ "asc": true,
1426+ "nulls": "last"
1427+ }
1428+ ],
1429+ "isUnique": false,
1430+ "concurrently": false,
1431+ "method": "btree",
1432+ "with": {}
1433+ },
1434+ "events_entity_idx": {
1435+ "name": "events_entity_idx",
1436+ "columns": [
1437+ {
1438+ "expression": "entity_type",
1439+ "isExpression": false,
1440+ "asc": true,
1441+ "nulls": "last"
1442+ },
1443+ {
1444+ "expression": "entity_id",
1445+ "isExpression": false,
1446+ "asc": true,
1447+ "nulls": "last"
1448+ }
1449+ ],
1450+ "isUnique": false,
1451+ "concurrently": false,
1452+ "method": "btree",
1453+ "with": {}
1454+ }
1455+ },
1456+ "foreignKeys": {},
1457+ "compositePrimaryKeys": {},
1458+ "uniqueConstraints": {},
1459+ "policies": {},
1460+ "checkConstraints": {},
1461+ "isRLSEnabled": false
1462+ },
1463+ "public.normalized_records": {
1464+ "name": "normalized_records",
1465+ "schema": "",
1466+ "columns": {
1467+ "id": {
1468+ "name": "id",
1469+ "type": "text",
1470+ "primaryKey": true,
1471+ "notNull": true
1472+ },
1473+ "raw_record_id": {
1474+ "name": "raw_record_id",
1475+ "type": "text",
1476+ "primaryKey": false,
1477+ "notNull": true
1478+ },
1479+ "connector_id": {
1480+ "name": "connector_id",
1481+ "type": "text",
1482+ "primaryKey": false,
1483+ "notNull": true
1484+ },
1485+ "source_id": {
1486+ "name": "source_id",
1487+ "type": "text",
1488+ "primaryKey": false,
1489+ "notNull": true
1490+ },
1491+ "kind": {
1492+ "name": "kind",
1493+ "type": "text",
1494+ "primaryKey": false,
1495+ "notNull": true
1496+ },
1497+ "payload": {
1498+ "name": "payload",
1499+ "type": "jsonb",
1500+ "primaryKey": false,
1501+ "notNull": true
1502+ },
1503+ "seq": {
1504+ "name": "seq",
1505+ "type": "integer",
1506+ "primaryKey": false,
1507+ "notNull": true,
1508+ "default": 0
1509+ },
1510+ "asset_id": {
1511+ "name": "asset_id",
1512+ "type": "text",
1513+ "primaryKey": false,
1514+ "notNull": false
1515+ },
1516+ "variant_id": {
1517+ "name": "variant_id",
1518+ "type": "text",
1519+ "primaryKey": false,
1520+ "notNull": false
1521+ },
1522+ "match_method": {
1523+ "name": "match_method",
1524+ "type": "text",
1525+ "primaryKey": false,
1526+ "notNull": false
1527+ },
1528+ "match_confidence": {
1529+ "name": "match_confidence",
1530+ "type": "numeric(8, 6)",
1531+ "primaryKey": false,
1532+ "notNull": false
1533+ },
1534+ "status": {
1535+ "name": "status",
1536+ "type": "text",
1537+ "primaryKey": false,
1538+ "notNull": true,
1539+ "default": "'pending'"
1540+ },
1541+ "reject_reason": {
1542+ "name": "reject_reason",
1543+ "type": "text",
1544+ "primaryKey": false,
1545+ "notNull": false
1546+ },
1547+ "target_id": {
1548+ "name": "target_id",
1549+ "type": "text",
1550+ "primaryKey": false,
1551+ "notNull": false
1552+ },
1553+ "created_at": {
1554+ "name": "created_at",
1555+ "type": "timestamp with time zone",
1556+ "primaryKey": false,
1557+ "notNull": true,
1558+ "default": "now()"
1559+ },
1560+ "processed_at": {
1561+ "name": "processed_at",
1562+ "type": "timestamp with time zone",
1563+ "primaryKey": false,
1564+ "notNull": false
1565+ }
1566+ },
1567+ "indexes": {
1568+ "normalized_records_status_idx": {
1569+ "name": "normalized_records_status_idx",
1570+ "columns": [
1571+ {
1572+ "expression": "status",
1573+ "isExpression": false,
1574+ "asc": true,
1575+ "nulls": "last"
1576+ },
1577+ {
1578+ "expression": "created_at",
1579+ "isExpression": false,
1580+ "asc": true,
1581+ "nulls": "last"
1582+ }
1583+ ],
1584+ "isUnique": false,
1585+ "concurrently": false,
1586+ "method": "btree",
1587+ "with": {}
1588+ },
1589+ "normalized_records_asset_idx": {
1590+ "name": "normalized_records_asset_idx",
1591+ "columns": [
1592+ {
1593+ "expression": "asset_id",
1594+ "isExpression": false,
1595+ "asc": true,
1596+ "nulls": "last"
1597+ }
1598+ ],
1599+ "isUnique": false,
1600+ "concurrently": false,
1601+ "method": "btree",
1602+ "with": {}
1603+ },
1604+ "normalized_records_raw_uq": {
1605+ "name": "normalized_records_raw_uq",
1606+ "columns": [
1607+ {
1608+ "expression": "raw_record_id",
1609+ "isExpression": false,
1610+ "asc": true,
1611+ "nulls": "last"
1612+ },
1613+ {
1614+ "expression": "kind",
1615+ "isExpression": false,
1616+ "asc": true,
1617+ "nulls": "last"
1618+ },
1619+ {
1620+ "expression": "seq",
1621+ "isExpression": false,
1622+ "asc": true,
1623+ "nulls": "last"
1624+ }
1625+ ],
1626+ "isUnique": true,
1627+ "concurrently": false,
1628+ "method": "btree",
1629+ "with": {}
1630+ }
1631+ },
1632+ "foreignKeys": {},
1633+ "compositePrimaryKeys": {},
1634+ "uniqueConstraints": {},
1635+ "policies": {},
1636+ "checkConstraints": {},
1637+ "isRLSEnabled": false
1638+ },
1639+ "public.raw_records": {
1640+ "name": "raw_records",
1641+ "schema": "",
1642+ "columns": {
1643+ "id": {
1644+ "name": "id",
1645+ "type": "text",
1646+ "primaryKey": true,
1647+ "notNull": true
1648+ },
1649+ "connector_id": {
1650+ "name": "connector_id",
1651+ "type": "text",
1652+ "primaryKey": false,
1653+ "notNull": true
1654+ },
1655+ "source_id": {
1656+ "name": "source_id",
1657+ "type": "text",
1658+ "primaryKey": false,
1659+ "notNull": true
1660+ },
1661+ "run_id": {
1662+ "name": "run_id",
1663+ "type": "text",
1664+ "primaryKey": false,
1665+ "notNull": false
1666+ },
1667+ "engine": {
1668+ "name": "engine",
1669+ "type": "text",
1670+ "primaryKey": false,
1671+ "notNull": true
1672+ },
1673+ "url": {
1674+ "name": "url",
1675+ "type": "text",
1676+ "primaryKey": false,
1677+ "notNull": true
1678+ },
1679+ "external_id": {
1680+ "name": "external_id",
1681+ "type": "text",
1682+ "primaryKey": false,
1683+ "notNull": false
1684+ },
1685+ "kind": {
1686+ "name": "kind",
1687+ "type": "text",
1688+ "primaryKey": false,
1689+ "notNull": true
1690+ },
1691+ "fetched_at": {
1692+ "name": "fetched_at",
1693+ "type": "timestamp with time zone",
1694+ "primaryKey": false,
1695+ "notNull": true
1696+ },
1697+ "content_hash": {
1698+ "name": "content_hash",
1699+ "type": "text",
1700+ "primaryKey": false,
1701+ "notNull": true
1702+ },
1703+ "http_status": {
1704+ "name": "http_status",
1705+ "type": "integer",
1706+ "primaryKey": false,
1707+ "notNull": false
1708+ },
1709+ "payload": {
1710+ "name": "payload",
1711+ "type": "jsonb",
1712+ "primaryKey": false,
1713+ "notNull": true
1714+ },
1715+ "snapshot_ref": {
1716+ "name": "snapshot_ref",
1717+ "type": "text",
1718+ "primaryKey": false,
1719+ "notNull": false
1720+ },
1721+ "parser_version": {
1722+ "name": "parser_version",
1723+ "type": "text",
1724+ "primaryKey": false,
1725+ "notNull": true
1726+ },
1727+ "connector_version": {
1728+ "name": "connector_version",
1729+ "type": "text",
1730+ "primaryKey": false,
1731+ "notNull": true
1732+ },
1733+ "processed_at": {
1734+ "name": "processed_at",
1735+ "type": "timestamp with time zone",
1736+ "primaryKey": false,
1737+ "notNull": false
1738+ },
1739+ "process_error": {
1740+ "name": "process_error",
1741+ "type": "text",
1742+ "primaryKey": false,
1743+ "notNull": false
1744+ },
1745+ "created_at": {
1746+ "name": "created_at",
1747+ "type": "timestamp with time zone",
1748+ "primaryKey": false,
1749+ "notNull": true,
1750+ "default": "now()"
1751+ }
1752+ },
1753+ "indexes": {
1754+ "raw_records_connector_hash_uq": {
1755+ "name": "raw_records_connector_hash_uq",
1756+ "columns": [
1757+ {
1758+ "expression": "connector_id",
1759+ "isExpression": false,
1760+ "asc": true,
1761+ "nulls": "last"
1762+ },
1763+ {
1764+ "expression": "content_hash",
1765+ "isExpression": false,
1766+ "asc": true,
1767+ "nulls": "last"
1768+ }
1769+ ],
1770+ "isUnique": true,
1771+ "concurrently": false,
1772+ "method": "btree",
1773+ "with": {}
1774+ },
1775+ "raw_records_connector_fetched_idx": {
1776+ "name": "raw_records_connector_fetched_idx",
1777+ "columns": [
1778+ {
1779+ "expression": "connector_id",
1780+ "isExpression": false,
1781+ "asc": true,
1782+ "nulls": "last"
1783+ },
1784+ {
1785+ "expression": "fetched_at",
1786+ "isExpression": false,
1787+ "asc": true,
1788+ "nulls": "last"
1789+ }
1790+ ],
1791+ "isUnique": false,
1792+ "concurrently": false,
1793+ "method": "btree",
1794+ "with": {}
1795+ },
1796+ "raw_records_unprocessed_idx": {
1797+ "name": "raw_records_unprocessed_idx",
1798+ "columns": [
1799+ {
1800+ "expression": "processed_at",
1801+ "isExpression": false,
1802+ "asc": true,
1803+ "nulls": "last"
1804+ }
1805+ ],
1806+ "isUnique": false,
1807+ "concurrently": false,
1808+ "method": "btree",
1809+ "with": {}
1810+ },
1811+ "raw_records_external_idx": {
1812+ "name": "raw_records_external_idx",
1813+ "columns": [
1814+ {
1815+ "expression": "connector_id",
1816+ "isExpression": false,
1817+ "asc": true,
1818+ "nulls": "last"
1819+ },
1820+ {
1821+ "expression": "external_id",
1822+ "isExpression": false,
1823+ "asc": true,
1824+ "nulls": "last"
1825+ }
1826+ ],
1827+ "isUnique": false,
1828+ "concurrently": false,
1829+ "method": "btree",
1830+ "with": {}
1831+ }
1832+ },
1833+ "foreignKeys": {},
1834+ "compositePrimaryKeys": {},
1835+ "uniqueConstraints": {},
1836+ "policies": {},
1837+ "checkConstraints": {},
1838+ "isRLSEnabled": false
1839+ },
1840+ "public.asset_embeddings": {
1841+ "name": "asset_embeddings",
1842+ "schema": "",
1843+ "columns": {
1844+ "asset_id": {
1845+ "name": "asset_id",
1846+ "type": "text",
1847+ "primaryKey": true,
1848+ "notNull": true
1849+ },
1850+ "model": {
1851+ "name": "model",
1852+ "type": "text",
1853+ "primaryKey": false,
1854+ "notNull": true
1855+ },
1856+ "embedding": {
1857+ "name": "embedding",
1858+ "type": "vector(1536)",
1859+ "primaryKey": false,
1860+ "notNull": true
1861+ },
1862+ "updated_at": {
1863+ "name": "updated_at",
1864+ "type": "timestamp with time zone",
1865+ "primaryKey": false,
1866+ "notNull": true,
1867+ "default": "now()"
1868+ }
1869+ },
1870+ "indexes": {},
1871+ "foreignKeys": {},
1872+ "compositePrimaryKeys": {},
1873+ "uniqueConstraints": {},
1874+ "policies": {},
1875+ "checkConstraints": {},
1876+ "isRLSEnabled": false
1877+ },
1878+ "public.asset_stats": {
1879+ "name": "asset_stats",
1880+ "schema": "",
1881+ "columns": {
1882+ "asset_id": {
1883+ "name": "asset_id",
1884+ "type": "text",
1885+ "primaryKey": true,
1886+ "notNull": true
1887+ },
1888+ "riv_usd": {
1889+ "name": "riv_usd",
1890+ "type": "numeric(18, 4)",
1891+ "primaryKey": false,
1892+ "notNull": false
1893+ },
1894+ "riv_low_usd": {
1895+ "name": "riv_low_usd",
1896+ "type": "numeric(18, 4)",
1897+ "primaryKey": false,
1898+ "notNull": false
1899+ },
1900+ "riv_high_usd": {
1901+ "name": "riv_high_usd",
1902+ "type": "numeric(18, 4)",
1903+ "primaryKey": false,
1904+ "notNull": false
1905+ },
1906+ "riv_confidence": {
1907+ "name": "riv_confidence",
1908+ "type": "numeric(8, 6)",
1909+ "primaryKey": false,
1910+ "notNull": false
1911+ },
1912+ "riv_sample_size": {
1913+ "name": "riv_sample_size",
1914+ "type": "integer",
1915+ "primaryKey": false,
1916+ "notNull": true,
1917+ "default": 0
1918+ },
1919+ "riv_variant_id": {
1920+ "name": "riv_variant_id",
1921+ "type": "text",
1922+ "primaryKey": false,
1923+ "notNull": false
1924+ },
1925+ "latest_sale_usd": {
1926+ "name": "latest_sale_usd",
1927+ "type": "numeric(18, 4)",
1928+ "primaryKey": false,
1929+ "notNull": false
1930+ },
1931+ "latest_sale_at": {
1932+ "name": "latest_sale_at",
1933+ "type": "timestamp with time zone",
1934+ "primaryKey": false,
1935+ "notNull": false
1936+ },
1937+ "change_1d": {
1938+ "name": "change_1d",
1939+ "type": "numeric(8, 6)",
1940+ "primaryKey": false,
1941+ "notNull": false
1942+ },
1943+ "change_7d": {
1944+ "name": "change_7d",
1945+ "type": "numeric(8, 6)",
1946+ "primaryKey": false,
1947+ "notNull": false
1948+ },
1949+ "change_30d": {
1950+ "name": "change_30d",
1951+ "type": "numeric(8, 6)",
1952+ "primaryKey": false,
1953+ "notNull": false
1954+ },
1955+ "change_90d": {
1956+ "name": "change_90d",
1957+ "type": "numeric(8, 6)",
1958+ "primaryKey": false,
1959+ "notNull": false
1960+ },
1961+ "change_1y": {
1962+ "name": "change_1y",
1963+ "type": "numeric(8, 6)",
1964+ "primaryKey": false,
1965+ "notNull": false
1966+ },
1967+ "ath_usd": {
1968+ "name": "ath_usd",
1969+ "type": "numeric(18, 4)",
1970+ "primaryKey": false,
1971+ "notNull": false
1972+ },
1973+ "ath_at": {
1974+ "name": "ath_at",
1975+ "type": "timestamp with time zone",
1976+ "primaryKey": false,
1977+ "notNull": false
1978+ },
1979+ "atl_usd": {
1980+ "name": "atl_usd",
1981+ "type": "numeric(18, 4)",
1982+ "primaryKey": false,
1983+ "notNull": false
1984+ },
1985+ "atl_at": {
1986+ "name": "atl_at",
1987+ "type": "timestamp with time zone",
1988+ "primaryKey": false,
1989+ "notNull": false
1990+ },
1991+ "sales_count": {
1992+ "name": "sales_count",
1993+ "type": "integer",
1994+ "primaryKey": false,
1995+ "notNull": true,
1996+ "default": 0
1997+ },
1998+ "sales_30d": {
1999+ "name": "sales_30d",
2000+ "type": "integer",
2001+ "primaryKey": false,
2002+ "notNull": true,
2003+ "default": 0
2004+ },
2005+ "sales_1y": {
2006+ "name": "sales_1y",
2007+ "type": "integer",
2008+ "primaryKey": false,
2009+ "notNull": true,
2010+ "default": 0
2011+ },
2012+ "volume_30d_usd": {
2013+ "name": "volume_30d_usd",
2014+ "type": "numeric(18, 4)",
2015+ "primaryKey": false,
2016+ "notNull": false
2017+ },
2018+ "active_listings": {
2019+ "name": "active_listings",
2020+ "type": "integer",
2021+ "primaryKey": false,
2022+ "notNull": true,
2023+ "default": 0
2024+ },
2025+ "min_ask_usd": {
2026+ "name": "min_ask_usd",
2027+ "type": "numeric(18, 4)",
2028+ "primaryKey": false,
2029+ "notNull": false
2030+ },
2031+ "observations_count": {
2032+ "name": "observations_count",
2033+ "type": "integer",
2034+ "primaryKey": false,
2035+ "notNull": true,
2036+ "default": 0
2037+ },
2038+ "sources_count": {
2039+ "name": "sources_count",
2040+ "type": "integer",
2041+ "primaryKey": false,
2042+ "notNull": true,
2043+ "default": 0
2044+ },
2045+ "liquidity_score": {
2046+ "name": "liquidity_score",
2047+ "type": "real",
2048+ "primaryKey": false,
2049+ "notNull": false
2050+ },
2051+ "rarity_score": {
2052+ "name": "rarity_score",
2053+ "type": "real",
2054+ "primaryKey": false,
2055+ "notNull": false
2056+ },
2057+ "momentum_7d": {
2058+ "name": "momentum_7d",
2059+ "type": "real",
2060+ "primaryKey": false,
2061+ "notNull": false
2062+ },
2063+ "momentum_30d": {
2064+ "name": "momentum_30d",
2065+ "type": "real",
2066+ "primaryKey": false,
2067+ "notNull": false
2068+ },
2069+ "momentum_90d": {
2070+ "name": "momentum_90d",
2071+ "type": "real",
2072+ "primaryKey": false,
2073+ "notNull": false
2074+ },
2075+ "momentum_1y": {
2076+ "name": "momentum_1y",
2077+ "type": "real",
2078+ "primaryKey": false,
2079+ "notNull": false
2080+ },
2081+ "trending_score": {
2082+ "name": "trending_score",
2083+ "type": "real",
2084+ "primaryKey": false,
2085+ "notNull": false
2086+ },
2087+ "value_opportunity": {
2088+ "name": "value_opportunity",
2089+ "type": "real",
2090+ "primaryKey": false,
2091+ "notNull": false
2092+ },
2093+ "data_quality": {
2094+ "name": "data_quality",
2095+ "type": "real",
2096+ "primaryKey": false,
2097+ "notNull": false
2098+ },
2099+ "watchers": {
2100+ "name": "watchers",
2101+ "type": "integer",
2102+ "primaryKey": false,
2103+ "notNull": true,
2104+ "default": 0
2105+ },
2106+ "views_30d": {
2107+ "name": "views_30d",
2108+ "type": "integer",
2109+ "primaryKey": false,
2110+ "notNull": true,
2111+ "default": 0
2112+ },
2113+ "updated_at": {
2114+ "name": "updated_at",
2115+ "type": "timestamp with time zone",
2116+ "primaryKey": false,
2117+ "notNull": true,
2118+ "default": "now()"
2119+ }
2120+ },
2121+ "indexes": {
2122+ "asset_stats_riv_idx": {
2123+ "name": "asset_stats_riv_idx",
2124+ "columns": [
2125+ {
2126+ "expression": "riv_usd",
2127+ "isExpression": false,
2128+ "asc": true,
2129+ "nulls": "last"
2130+ }
2131+ ],
2132+ "isUnique": false,
2133+ "concurrently": false,
2134+ "method": "btree",
2135+ "with": {}
2136+ },
2137+ "asset_stats_trending_idx": {
2138+ "name": "asset_stats_trending_idx",
2139+ "columns": [
2140+ {
2141+ "expression": "trending_score",
2142+ "isExpression": false,
2143+ "asc": true,
2144+ "nulls": "last"
2145+ }
2146+ ],
2147+ "isUnique": false,
2148+ "concurrently": false,
2149+ "method": "btree",
2150+ "with": {}
2151+ },
2152+ "asset_stats_liquidity_idx": {
2153+ "name": "asset_stats_liquidity_idx",
2154+ "columns": [
2155+ {
2156+ "expression": "liquidity_score",
2157+ "isExpression": false,
2158+ "asc": true,
2159+ "nulls": "last"
2160+ }
2161+ ],
2162+ "isUnique": false,
2163+ "concurrently": false,
2164+ "method": "btree",
2165+ "with": {}
2166+ }
2167+ },
2168+ "foreignKeys": {},
2169+ "compositePrimaryKeys": {},
2170+ "uniqueConstraints": {},
2171+ "policies": {},
2172+ "checkConstraints": {},
2173+ "isRLSEnabled": false
2174+ },
2175+ "public.asset_variants": {
2176+ "name": "asset_variants",
2177+ "schema": "",
2178+ "columns": {
2179+ "id": {
2180+ "name": "id",
2181+ "type": "text",
2182+ "primaryKey": true,
2183+ "notNull": true
2184+ },
2185+ "asset_id": {
2186+ "name": "asset_id",
2187+ "type": "text",
2188+ "primaryKey": false,
2189+ "notNull": true
2190+ },
2191+ "variant_key": {
2192+ "name": "variant_key",
2193+ "type": "text",
2194+ "primaryKey": false,
2195+ "notNull": true
2196+ },
2197+ "grader": {
2198+ "name": "grader",
2199+ "type": "text",
2200+ "primaryKey": false,
2201+ "notNull": false
2202+ },
2203+ "grade": {
2204+ "name": "grade",
2205+ "type": "text",
2206+ "primaryKey": false,
2207+ "notNull": false
2208+ },
2209+ "qualifier": {
2210+ "name": "qualifier",
2211+ "type": "text",
2212+ "primaryKey": false,
2213+ "notNull": false
2214+ },
2215+ "condition": {
2216+ "name": "condition",
2217+ "type": "text",
2218+ "primaryKey": false,
2219+ "notNull": false
2220+ },
2221+ "completeness": {
2222+ "name": "completeness",
2223+ "type": "text",
2224+ "primaryKey": false,
2225+ "notNull": false
2226+ },
2227+ "size_label": {
2228+ "name": "size_label",
2229+ "type": "text",
2230+ "primaryKey": false,
2231+ "notNull": false
2232+ },
2233+ "label": {
2234+ "name": "label",
2235+ "type": "text",
2236+ "primaryKey": false,
2237+ "notNull": true
2238+ },
2239+ "is_default": {
2240+ "name": "is_default",
2241+ "type": "boolean",
2242+ "primaryKey": false,
2243+ "notNull": true,
2244+ "default": false
2245+ },
2246+ "created_at": {
2247+ "name": "created_at",
2248+ "type": "timestamp with time zone",
2249+ "primaryKey": false,
2250+ "notNull": true,
2251+ "default": "now()"
2252+ }
2253+ },
2254+ "indexes": {
2255+ "asset_variants_uq": {
2256+ "name": "asset_variants_uq",
2257+ "columns": [
2258+ {
2259+ "expression": "asset_id",
2260+ "isExpression": false,
2261+ "asc": true,
2262+ "nulls": "last"
2263+ },
2264+ {
2265+ "expression": "variant_key",
2266+ "isExpression": false,
2267+ "asc": true,
2268+ "nulls": "last"
2269+ }
2270+ ],
2271+ "isUnique": true,
2272+ "concurrently": false,
2273+ "method": "btree",
2274+ "with": {}
2275+ },
2276+ "asset_variants_asset_idx": {
2277+ "name": "asset_variants_asset_idx",
2278+ "columns": [
2279+ {
2280+ "expression": "asset_id",
2281+ "isExpression": false,
2282+ "asc": true,
2283+ "nulls": "last"
2284+ }
2285+ ],
2286+ "isUnique": false,
2287+ "concurrently": false,
2288+ "method": "btree",
2289+ "with": {}
2290+ }
2291+ },
2292+ "foreignKeys": {},
2293+ "compositePrimaryKeys": {},
2294+ "uniqueConstraints": {},
2295+ "policies": {},
2296+ "checkConstraints": {},
2297+ "isRLSEnabled": false
2298+ },
2299+ "public.assets": {
2300+ "name": "assets",
2301+ "schema": "",
2302+ "columns": {
2303+ "id": {
2304+ "name": "id",
2305+ "type": "text",
2306+ "primaryKey": true,
2307+ "notNull": true
2308+ },
2309+ "slug": {
2310+ "name": "slug",
2311+ "type": "text",
2312+ "primaryKey": false,
2313+ "notNull": true
2314+ },
2315+ "canonical_key": {
2316+ "name": "canonical_key",
2317+ "type": "text",
2318+ "primaryKey": false,
2319+ "notNull": true
2320+ },
2321+ "category_slug": {
2322+ "name": "category_slug",
2323+ "type": "text",
2324+ "primaryKey": false,
2325+ "notNull": true
2326+ },
2327+ "subcategory_slug": {
2328+ "name": "subcategory_slug",
2329+ "type": "text",
2330+ "primaryKey": false,
2331+ "notNull": false
2332+ },
2333+ "family_slug": {
2334+ "name": "family_slug",
2335+ "type": "text",
2336+ "primaryKey": false,
2337+ "notNull": true
2338+ },
2339+ "franchise": {
2340+ "name": "franchise",
2341+ "type": "text",
2342+ "primaryKey": false,
2343+ "notNull": false
2344+ },
2345+ "brand": {
2346+ "name": "brand",
2347+ "type": "text",
2348+ "primaryKey": false,
2349+ "notNull": false
2350+ },
2351+ "series": {
2352+ "name": "series",
2353+ "type": "text",
2354+ "primaryKey": false,
2355+ "notNull": false
2356+ },
2357+ "set_slug": {
2358+ "name": "set_slug",
2359+ "type": "text",
2360+ "primaryKey": false,
2361+ "notNull": false
2362+ },
2363+ "set_name": {
2364+ "name": "set_name",
2365+ "type": "text",
2366+ "primaryKey": false,
2367+ "notNull": false
2368+ },
2369+ "set_code": {
2370+ "name": "set_code",
2371+ "type": "text",
2372+ "primaryKey": false,
2373+ "notNull": false
2374+ },
2375+ "name": {
2376+ "name": "name",
2377+ "type": "text",
2378+ "primaryKey": false,
2379+ "notNull": true
2380+ },
2381+ "title": {
2382+ "name": "title",
2383+ "type": "text",
2384+ "primaryKey": false,
2385+ "notNull": true
2386+ },
2387+ "model": {
2388+ "name": "model",
2389+ "type": "text",
2390+ "primaryKey": false,
2391+ "notNull": false
2392+ },
2393+ "reference": {
2394+ "name": "reference",
2395+ "type": "text",
2396+ "primaryKey": false,
2397+ "notNull": false
2398+ },
2399+ "number": {
2400+ "name": "number",
2401+ "type": "text",
2402+ "primaryKey": false,
2403+ "notNull": false
2404+ },
2405+ "year": {
2406+ "name": "year",
2407+ "type": "integer",
2408+ "primaryKey": false,
2409+ "notNull": false
2410+ },
2411+ "edition": {
2412+ "name": "edition",
2413+ "type": "text",
2414+ "primaryKey": false,
2415+ "notNull": false
2416+ },
2417+ "variant": {
2418+ "name": "variant",
2419+ "type": "text",
2420+ "primaryKey": false,
2421+ "notNull": false
2422+ },
2423+ "language": {
2424+ "name": "language",
2425+ "type": "text",
2426+ "primaryKey": false,
2427+ "notNull": false
2428+ },
2429+ "region": {
2430+ "name": "region",
2431+ "type": "text",
2432+ "primaryKey": false,
2433+ "notNull": false
2434+ },
2435+ "country": {
2436+ "name": "country",
2437+ "type": "text",
2438+ "primaryKey": false,
2439+ "notNull": false
2440+ },
2441+ "material": {
2442+ "name": "material",
2443+ "type": "text",
2444+ "primaryKey": false,
2445+ "notNull": false
2446+ },
2447+ "size": {
2448+ "name": "size",
2449+ "type": "text",
2450+ "primaryKey": false,
2451+ "notNull": false
2452+ },
2453+ "color": {
2454+ "name": "color",
2455+ "type": "text",
2456+ "primaryKey": false,
2457+ "notNull": false
2458+ },
2459+ "rarity": {
2460+ "name": "rarity",
2461+ "type": "text",
2462+ "primaryKey": false,
2463+ "notNull": false
2464+ },
2465+ "production_quantity": {
2466+ "name": "production_quantity",
2467+ "type": "integer",
2468+ "primaryKey": false,
2469+ "notNull": false
2470+ },
2471+ "original_msrp": {
2472+ "name": "original_msrp",
2473+ "type": "numeric(18, 4)",
2474+ "primaryKey": false,
2475+ "notNull": false
2476+ },
2477+ "original_msrp_currency": {
2478+ "name": "original_msrp_currency",
2479+ "type": "text",
2480+ "primaryKey": false,
2481+ "notNull": false
2482+ },
2483+ "release_date": {
2484+ "name": "release_date",
2485+ "type": "text",
2486+ "primaryKey": false,
2487+ "notNull": false
2488+ },
2489+ "description": {
2490+ "name": "description",
2491+ "type": "text",
2492+ "primaryKey": false,
2493+ "notNull": false
2494+ },
2495+ "hero_image_url": {
2496+ "name": "hero_image_url",
2497+ "type": "text",
2498+ "primaryKey": false,
2499+ "notNull": false
2500+ },
2501+ "identifiers": {
2502+ "name": "identifiers",
2503+ "type": "jsonb",
2504+ "primaryKey": false,
2505+ "notNull": true,
2506+ "default": "'{}'::jsonb"
2507+ },
2508+ "metadata": {
2509+ "name": "metadata",
2510+ "type": "jsonb",
2511+ "primaryKey": false,
2512+ "notNull": true,
2513+ "default": "'{}'::jsonb"
2514+ },
2515+ "merged_from": {
2516+ "name": "merged_from",
2517+ "type": "text[]",
2518+ "primaryKey": false,
2519+ "notNull": true,
2520+ "default": "'{}'::text[]"
2521+ },
2522+ "data_quality": {
2523+ "name": "data_quality",
2524+ "type": "real",
2525+ "primaryKey": false,
2526+ "notNull": true,
2527+ "default": 0
2528+ },
2529+ "verified": {
2530+ "name": "verified",
2531+ "type": "boolean",
2532+ "primaryKey": false,
2533+ "notNull": true,
2534+ "default": false
2535+ },
2536+ "search": {
2537+ "name": "search",
2538+ "type": "tsvector",
2539+ "primaryKey": false,
2540+ "notNull": false,
2541+ "generated": {
2542+ "as": "setweight(to_tsvector('simple', coalesce(name, '')), 'A') || setweight(to_tsvector('simple', coalesce(set_name, '') || ' ' || coalesce(number, '') || ' ' || coalesce(variant, '') || ' ' || coalesce(edition, '')), 'B') || setweight(to_tsvector('simple', coalesce(brand, '') || ' ' || coalesce(franchise, '') || ' ' || coalesce(reference, '') || ' ' || coalesce(model, '') || ' ' || coalesce(year::text, '') || ' ' || coalesce(category_slug, '')), 'C')",
2543+ "type": "stored"
2544+ }
2545+ },
2546+ "created_at": {
2547+ "name": "created_at",
2548+ "type": "timestamp with time zone",
2549+ "primaryKey": false,
2550+ "notNull": true,
2551+ "default": "now()"
2552+ },
2553+ "updated_at": {
2554+ "name": "updated_at",
2555+ "type": "timestamp with time zone",
2556+ "primaryKey": false,
2557+ "notNull": true,
2558+ "default": "now()"
2559+ }
2560+ },
2561+ "indexes": {
2562+ "assets_canonical_key_uq": {
2563+ "name": "assets_canonical_key_uq",
2564+ "columns": [
2565+ {
2566+ "expression": "canonical_key",
2567+ "isExpression": false,
2568+ "asc": true,
2569+ "nulls": "last"
2570+ }
2571+ ],
2572+ "isUnique": true,
2573+ "concurrently": false,
2574+ "method": "btree",
2575+ "with": {}
2576+ },
2577+ "assets_slug_uq": {
2578+ "name": "assets_slug_uq",
2579+ "columns": [
2580+ {
2581+ "expression": "slug",
2582+ "isExpression": false,
2583+ "asc": true,
2584+ "nulls": "last"
2585+ }
2586+ ],
2587+ "isUnique": true,
2588+ "concurrently": false,
2589+ "method": "btree",
2590+ "with": {}
2591+ },
2592+ "assets_category_idx": {
2593+ "name": "assets_category_idx",
2594+ "columns": [
2595+ {
2596+ "expression": "category_slug",
2597+ "isExpression": false,
2598+ "asc": true,
2599+ "nulls": "last"
2600+ }
2601+ ],
2602+ "isUnique": false,
2603+ "concurrently": false,
2604+ "method": "btree",
2605+ "with": {}
2606+ },
2607+ "assets_family_idx": {
2608+ "name": "assets_family_idx",
2609+ "columns": [
2610+ {
2611+ "expression": "family_slug",
2612+ "isExpression": false,
2613+ "asc": true,
2614+ "nulls": "last"
2615+ }
2616+ ],
2617+ "isUnique": false,
2618+ "concurrently": false,
2619+ "method": "btree",
2620+ "with": {}
2621+ },
2622+ "assets_set_idx": {
2623+ "name": "assets_set_idx",
2624+ "columns": [
2625+ {
2626+ "expression": "set_slug",
2627+ "isExpression": false,
2628+ "asc": true,
2629+ "nulls": "last"
2630+ }
2631+ ],
2632+ "isUnique": false,
2633+ "concurrently": false,
2634+ "method": "btree",
2635+ "with": {}
2636+ },
2637+ "assets_search_gin": {
2638+ "name": "assets_search_gin",
2639+ "columns": [
2640+ {
2641+ "expression": "search",
2642+ "isExpression": false,
2643+ "asc": true,
2644+ "nulls": "last"
2645+ }
2646+ ],
2647+ "isUnique": false,
2648+ "concurrently": false,
2649+ "method": "gin",
2650+ "with": {}
2651+ },
2652+ "assets_title_trgm": {
2653+ "name": "assets_title_trgm",
2654+ "columns": [
2655+ {
2656+ "expression": "\"title\" gin_trgm_ops",
2657+ "asc": true,
2658+ "isExpression": true,
2659+ "nulls": "last"
2660+ }
2661+ ],
2662+ "isUnique": false,
2663+ "concurrently": false,
2664+ "method": "gin",
2665+ "with": {}
2666+ },
2667+ "assets_identifiers_gin": {
2668+ "name": "assets_identifiers_gin",
2669+ "columns": [
2670+ {
2671+ "expression": "identifiers",
2672+ "isExpression": false,
2673+ "asc": true,
2674+ "nulls": "last"
2675+ }
2676+ ],
2677+ "isUnique": false,
2678+ "concurrently": false,
2679+ "method": "gin",
2680+ "with": {}
2681+ }
2682+ },
2683+ "foreignKeys": {},
2684+ "compositePrimaryKeys": {},
2685+ "uniqueConstraints": {},
2686+ "policies": {},
2687+ "checkConstraints": {},
2688+ "isRLSEnabled": false
2689+ },
2690+ "public.grade_premiums": {
2691+ "name": "grade_premiums",
2692+ "schema": "",
2693+ "columns": {
2694+ "id": {
2695+ "name": "id",
2696+ "type": "text",
2697+ "primaryKey": true,
2698+ "notNull": true
2699+ },
2700+ "category_slug": {
2701+ "name": "category_slug",
2702+ "type": "text",
2703+ "primaryKey": false,
2704+ "notNull": true
2705+ },
2706+ "grader": {
2707+ "name": "grader",
2708+ "type": "text",
2709+ "primaryKey": false,
2710+ "notNull": true
2711+ },
2712+ "grade": {
2713+ "name": "grade",
2714+ "type": "text",
2715+ "primaryKey": false,
2716+ "notNull": true
2717+ },
2718+ "market_multiplier": {
2719+ "name": "market_multiplier",
2720+ "type": "real",
2721+ "primaryKey": false,
2722+ "notNull": true
2723+ },
2724+ "sample_size": {
2725+ "name": "sample_size",
2726+ "type": "integer",
2727+ "primaryKey": false,
2728+ "notNull": true
2729+ },
2730+ "computed_at": {
2731+ "name": "computed_at",
2732+ "type": "timestamp with time zone",
2733+ "primaryKey": false,
2734+ "notNull": true
2735+ }
2736+ },
2737+ "indexes": {
2738+ "grade_premiums_uq": {
2739+ "name": "grade_premiums_uq",
2740+ "columns": [
2741+ {
2742+ "expression": "category_slug",
2743+ "isExpression": false,
2744+ "asc": true,
2745+ "nulls": "last"
2746+ },
2747+ {
2748+ "expression": "grader",
2749+ "isExpression": false,
2750+ "asc": true,
2751+ "nulls": "last"
2752+ },
2753+ {
2754+ "expression": "grade",
2755+ "isExpression": false,
2756+ "asc": true,
2757+ "nulls": "last"
2758+ }
2759+ ],
2760+ "isUnique": true,
2761+ "concurrently": false,
2762+ "method": "btree",
2763+ "with": {}
2764+ }
2765+ },
2766+ "foreignKeys": {},
2767+ "compositePrimaryKeys": {},
2768+ "uniqueConstraints": {},
2769+ "policies": {},
2770+ "checkConstraints": {},
2771+ "isRLSEnabled": false
2772+ },
2773+ "public.images": {
2774+ "name": "images",
2775+ "schema": "",
2776+ "columns": {
2777+ "id": {
2778+ "name": "id",
2779+ "type": "text",
2780+ "primaryKey": true,
2781+ "notNull": true
2782+ },
2783+ "asset_id": {
2784+ "name": "asset_id",
2785+ "type": "text",
2786+ "primaryKey": false,
2787+ "notNull": false
2788+ },
2789+ "listing_id": {
2790+ "name": "listing_id",
2791+ "type": "text",
2792+ "primaryKey": false,
2793+ "notNull": false
2794+ },
2795+ "sale_id": {
2796+ "name": "sale_id",
2797+ "type": "text",
2798+ "primaryKey": false,
2799+ "notNull": false
2800+ },
2801+ "source_id": {
2802+ "name": "source_id",
2803+ "type": "text",
2804+ "primaryKey": false,
2805+ "notNull": false
2806+ },
2807+ "url": {
2808+ "name": "url",
2809+ "type": "text",
2810+ "primaryKey": false,
2811+ "notNull": true
2812+ },
2813+ "role": {
2814+ "name": "role",
2815+ "type": "text",
2816+ "primaryKey": false,
2817+ "notNull": true,
2818+ "default": "'gallery'"
2819+ },
2820+ "width": {
2821+ "name": "width",
2822+ "type": "integer",
2823+ "primaryKey": false,
2824+ "notNull": false
2825+ },
2826+ "height": {
2827+ "name": "height",
2828+ "type": "integer",
2829+ "primaryKey": false,
2830+ "notNull": false
2831+ },
2832+ "phash": {
2833+ "name": "phash",
2834+ "type": "text",
2835+ "primaryKey": false,
2836+ "notNull": false
2837+ },
2838+ "embedding": {
2839+ "name": "embedding",
2840+ "type": "vector(512)",
2841+ "primaryKey": false,
2842+ "notNull": false
2843+ },
2844+ "attribution": {
2845+ "name": "attribution",
2846+ "type": "text",
2847+ "primaryKey": false,
2848+ "notNull": false
2849+ },
2850+ "created_at": {
2851+ "name": "created_at",
2852+ "type": "timestamp with time zone",
2853+ "primaryKey": false,
2854+ "notNull": true,
2855+ "default": "now()"
2856+ }
2857+ },
2858+ "indexes": {
2859+ "images_asset_idx": {
2860+ "name": "images_asset_idx",
2861+ "columns": [
2862+ {
2863+ "expression": "asset_id",
2864+ "isExpression": false,
2865+ "asc": true,
2866+ "nulls": "last"
2867+ }
2868+ ],
2869+ "isUnique": false,
2870+ "concurrently": false,
2871+ "method": "btree",
2872+ "with": {}
2873+ },
2874+ "images_phash_idx": {
2875+ "name": "images_phash_idx",
2876+ "columns": [
2877+ {
2878+ "expression": "phash",
2879+ "isExpression": false,
2880+ "asc": true,
2881+ "nulls": "last"
2882+ }
2883+ ],
2884+ "isUnique": false,
2885+ "concurrently": false,
2886+ "method": "btree",
2887+ "with": {}
2888+ },
2889+ "images_url_uq": {
2890+ "name": "images_url_uq",
2891+ "columns": [
2892+ {
2893+ "expression": "url",
2894+ "isExpression": false,
2895+ "asc": true,
2896+ "nulls": "last"
2897+ }
2898+ ],
2899+ "isUnique": true,
2900+ "concurrently": false,
2901+ "method": "btree",
2902+ "with": {}
2903+ }
2904+ },
2905+ "foreignKeys": {},
2906+ "compositePrimaryKeys": {},
2907+ "uniqueConstraints": {},
2908+ "policies": {},
2909+ "checkConstraints": {},
2910+ "isRLSEnabled": false
2911+ },
2912+ "public.population_reports": {
2913+ "name": "population_reports",
2914+ "schema": "",
2915+ "columns": {
2916+ "id": {
2917+ "name": "id",
2918+ "type": "text",
2919+ "primaryKey": true,
2920+ "notNull": true
2921+ },
2922+ "asset_id": {
2923+ "name": "asset_id",
2924+ "type": "text",
2925+ "primaryKey": false,
2926+ "notNull": true
2927+ },
2928+ "grader": {
2929+ "name": "grader",
2930+ "type": "text",
2931+ "primaryKey": false,
2932+ "notNull": true
2933+ },
2934+ "source_id": {
2935+ "name": "source_id",
2936+ "type": "text",
2937+ "primaryKey": false,
2938+ "notNull": true
2939+ },
2940+ "source_url": {
2941+ "name": "source_url",
2942+ "type": "text",
2943+ "primaryKey": false,
2944+ "notNull": false
2945+ },
2946+ "report_date": {
2947+ "name": "report_date",
2948+ "type": "text",
2949+ "primaryKey": false,
2950+ "notNull": true
2951+ },
2952+ "total": {
2953+ "name": "total",
2954+ "type": "integer",
2955+ "primaryKey": false,
2956+ "notNull": true
2957+ },
2958+ "by_grade": {
2959+ "name": "by_grade",
2960+ "type": "jsonb",
2961+ "primaryKey": false,
2962+ "notNull": true
2963+ },
2964+ "created_at": {
2965+ "name": "created_at",
2966+ "type": "timestamp with time zone",
2967+ "primaryKey": false,
2968+ "notNull": true,
2969+ "default": "now()"
2970+ }
2971+ },
2972+ "indexes": {
2973+ "population_reports_uq": {
2974+ "name": "population_reports_uq",
2975+ "columns": [
2976+ {
2977+ "expression": "asset_id",
2978+ "isExpression": false,
2979+ "asc": true,
2980+ "nulls": "last"
2981+ },
2982+ {
2983+ "expression": "grader",
2984+ "isExpression": false,
2985+ "asc": true,
2986+ "nulls": "last"
2987+ },
2988+ {
2989+ "expression": "report_date",
2990+ "isExpression": false,
2991+ "asc": true,
2992+ "nulls": "last"
2993+ }
2994+ ],
2995+ "isUnique": true,
2996+ "concurrently": false,
2997+ "method": "btree",
2998+ "with": {}
2999+ }
3000+ },
3001+ "foreignKeys": {},
3002+ "compositePrimaryKeys": {},
3003+ "uniqueConstraints": {},
3004+ "policies": {},
3005+ "checkConstraints": {},
3006+ "isRLSEnabled": false
3007+ },
3008+ "public.variant_stats": {
3009+ "name": "variant_stats",
3010+ "schema": "",
3011+ "columns": {
3012+ "variant_id": {
3013+ "name": "variant_id",
3014+ "type": "text",
3015+ "primaryKey": true,
3016+ "notNull": true
3017+ },
3018+ "asset_id": {
3019+ "name": "asset_id",
3020+ "type": "text",
3021+ "primaryKey": false,
3022+ "notNull": true
3023+ },
3024+ "riv_usd": {
3025+ "name": "riv_usd",
3026+ "type": "numeric(18, 4)",
3027+ "primaryKey": false,
3028+ "notNull": false
3029+ },
3030+ "riv_low_usd": {
3031+ "name": "riv_low_usd",
3032+ "type": "numeric(18, 4)",
3033+ "primaryKey": false,
3034+ "notNull": false
3035+ },
3036+ "riv_high_usd": {
3037+ "name": "riv_high_usd",
3038+ "type": "numeric(18, 4)",
3039+ "primaryKey": false,
3040+ "notNull": false
3041+ },
3042+ "riv_confidence": {
3043+ "name": "riv_confidence",
3044+ "type": "numeric(8, 6)",
3045+ "primaryKey": false,
3046+ "notNull": false
3047+ },
3048+ "riv_sample_size": {
3049+ "name": "riv_sample_size",
3050+ "type": "integer",
3051+ "primaryKey": false,
3052+ "notNull": true,
3053+ "default": 0
3054+ },
3055+ "latest_sale_usd": {
3056+ "name": "latest_sale_usd",
3057+ "type": "numeric(18, 4)",
3058+ "primaryKey": false,
3059+ "notNull": false
3060+ },
3061+ "latest_sale_at": {
3062+ "name": "latest_sale_at",
3063+ "type": "timestamp with time zone",
3064+ "primaryKey": false,
3065+ "notNull": false
3066+ },
3067+ "change_30d": {
3068+ "name": "change_30d",
3069+ "type": "numeric(8, 6)",
3070+ "primaryKey": false,
3071+ "notNull": false
3072+ },
3073+ "change_1y": {
3074+ "name": "change_1y",
3075+ "type": "numeric(8, 6)",
3076+ "primaryKey": false,
3077+ "notNull": false
3078+ },
3079+ "sales_count": {
3080+ "name": "sales_count",
3081+ "type": "integer",
3082+ "primaryKey": false,
3083+ "notNull": true,
3084+ "default": 0
3085+ },
3086+ "sales_30d": {
3087+ "name": "sales_30d",
3088+ "type": "integer",
3089+ "primaryKey": false,
3090+ "notNull": true,
3091+ "default": 0
3092+ },
3093+ "active_listings": {
3094+ "name": "active_listings",
3095+ "type": "integer",
3096+ "primaryKey": false,
3097+ "notNull": true,
3098+ "default": 0
3099+ },
3100+ "min_ask_usd": {
3101+ "name": "min_ask_usd",
3102+ "type": "numeric(18, 4)",
3103+ "primaryKey": false,
3104+ "notNull": false
3105+ },
3106+ "liquidity_score": {
3107+ "name": "liquidity_score",
3108+ "type": "real",
3109+ "primaryKey": false,
3110+ "notNull": false
3111+ },
3112+ "updated_at": {
3113+ "name": "updated_at",
3114+ "type": "timestamp with time zone",
3115+ "primaryKey": false,
3116+ "notNull": true,
3117+ "default": "now()"
3118+ }
3119+ },
3120+ "indexes": {},
3121+ "foreignKeys": {},
3122+ "compositePrimaryKeys": {},
3123+ "uniqueConstraints": {},
3124+ "policies": {},
3125+ "checkConstraints": {},
3126+ "isRLSEnabled": false
3127+ },
3128+ "public.auction_lots": {
3129+ "name": "auction_lots",
3130+ "schema": "",
3131+ "columns": {
3132+ "id": {
3133+ "name": "id",
3134+ "type": "text",
3135+ "primaryKey": true,
3136+ "notNull": true
3137+ },
3138+ "auction_id": {
3139+ "name": "auction_id",
3140+ "type": "text",
3141+ "primaryKey": false,
3142+ "notNull": true
3143+ },
3144+ "asset_id": {
3145+ "name": "asset_id",
3146+ "type": "text",
3147+ "primaryKey": false,
3148+ "notNull": false
3149+ },
3150+ "variant_id": {
3151+ "name": "variant_id",
3152+ "type": "text",
3153+ "primaryKey": false,
3154+ "notNull": false
3155+ },
3156+ "source_id": {
3157+ "name": "source_id",
3158+ "type": "text",
3159+ "primaryKey": false,
3160+ "notNull": true
3161+ },
3162+ "lot_number": {
3163+ "name": "lot_number",
3164+ "type": "text",
3165+ "primaryKey": false,
3166+ "notNull": false
3167+ },
3168+ "title": {
3169+ "name": "title",
3170+ "type": "text",
3171+ "primaryKey": false,
3172+ "notNull": true
3173+ },
3174+ "url": {
3175+ "name": "url",
3176+ "type": "text",
3177+ "primaryKey": false,
3178+ "notNull": true
3179+ },
3180+ "estimate_low": {
3181+ "name": "estimate_low",
3182+ "type": "numeric(18, 4)",
3183+ "primaryKey": false,
3184+ "notNull": false
3185+ },
3186+ "estimate_high": {
3187+ "name": "estimate_high",
3188+ "type": "numeric(18, 4)",
3189+ "primaryKey": false,
3190+ "notNull": false
3191+ },
3192+ "current_bid": {
3193+ "name": "current_bid",
3194+ "type": "numeric(18, 4)",
3195+ "primaryKey": false,
3196+ "notNull": false
3197+ },
3198+ "hammer_price": {
3199+ "name": "hammer_price",
3200+ "type": "numeric(18, 4)",
3201+ "primaryKey": false,
3202+ "notNull": false
3203+ },
3204+ "currency": {
3205+ "name": "currency",
3206+ "type": "text",
3207+ "primaryKey": false,
3208+ "notNull": false
3209+ },
3210+ "bid_count": {
3211+ "name": "bid_count",
3212+ "type": "integer",
3213+ "primaryKey": false,
3214+ "notNull": false
3215+ },
3216+ "starts_at": {
3217+ "name": "starts_at",
3218+ "type": "timestamp with time zone",
3219+ "primaryKey": false,
3220+ "notNull": false
3221+ },
3222+ "ends_at": {
3223+ "name": "ends_at",
3224+ "type": "timestamp with time zone",
3225+ "primaryKey": false,
3226+ "notNull": false
3227+ },
3228+ "status": {
3229+ "name": "status",
3230+ "type": "text",
3231+ "primaryKey": false,
3232+ "notNull": true,
3233+ "default": "'upcoming'"
3234+ },
3235+ "image_urls": {
3236+ "name": "image_urls",
3237+ "type": "jsonb",
3238+ "primaryKey": false,
3239+ "notNull": true,
3240+ "default": "'[]'::jsonb"
3241+ },
3242+ "grader": {
3243+ "name": "grader",
3244+ "type": "text",
3245+ "primaryKey": false,
3246+ "notNull": false
3247+ },
3248+ "grade": {
3249+ "name": "grade",
3250+ "type": "text",
3251+ "primaryKey": false,
3252+ "notNull": false
3253+ },
3254+ "created_at": {
3255+ "name": "created_at",
3256+ "type": "timestamp with time zone",
3257+ "primaryKey": false,
3258+ "notNull": true,
3259+ "default": "now()"
3260+ },
3261+ "updated_at": {
3262+ "name": "updated_at",
3263+ "type": "timestamp with time zone",
3264+ "primaryKey": false,
3265+ "notNull": true,
3266+ "default": "now()"
3267+ }
3268+ },
3269+ "indexes": {
3270+ "auction_lots_url_uq": {
3271+ "name": "auction_lots_url_uq",
3272+ "columns": [
3273+ {
3274+ "expression": "url",
3275+ "isExpression": false,
3276+ "asc": true,
3277+ "nulls": "last"
3278+ }
3279+ ],
3280+ "isUnique": true,
3281+ "concurrently": false,
3282+ "method": "btree",
3283+ "with": {}
3284+ },
3285+ "auction_lots_auction_idx": {
3286+ "name": "auction_lots_auction_idx",
3287+ "columns": [
3288+ {
3289+ "expression": "auction_id",
3290+ "isExpression": false,
3291+ "asc": true,
3292+ "nulls": "last"
3293+ }
3294+ ],
3295+ "isUnique": false,
3296+ "concurrently": false,
3297+ "method": "btree",
3298+ "with": {}
3299+ },
3300+ "auction_lots_asset_idx": {
3301+ "name": "auction_lots_asset_idx",
3302+ "columns": [
3303+ {
3304+ "expression": "asset_id",
3305+ "isExpression": false,
3306+ "asc": true,
3307+ "nulls": "last"
3308+ }
3309+ ],
3310+ "isUnique": false,
3311+ "concurrently": false,
3312+ "method": "btree",
3313+ "with": {}
3314+ },
3315+ "auction_lots_ends_idx": {
3316+ "name": "auction_lots_ends_idx",
3317+ "columns": [
3318+ {
3319+ "expression": "ends_at",
3320+ "isExpression": false,
3321+ "asc": true,
3322+ "nulls": "last"
3323+ }
3324+ ],
3325+ "isUnique": false,
3326+ "concurrently": false,
3327+ "method": "btree",
3328+ "with": {}
3329+ }
3330+ },
3331+ "foreignKeys": {},
3332+ "compositePrimaryKeys": {},
3333+ "uniqueConstraints": {},
3334+ "policies": {},
3335+ "checkConstraints": {},
3336+ "isRLSEnabled": false
3337+ },
3338+ "public.auctions": {
3339+ "name": "auctions",
3340+ "schema": "",
3341+ "columns": {
3342+ "id": {
3343+ "name": "id",
3344+ "type": "text",
3345+ "primaryKey": true,
3346+ "notNull": true
3347+ },
3348+ "source_id": {
3349+ "name": "source_id",
3350+ "type": "text",
3351+ "primaryKey": false,
3352+ "notNull": true
3353+ },
3354+ "auction_house": {
3355+ "name": "auction_house",
3356+ "type": "text",
3357+ "primaryKey": false,
3358+ "notNull": true
3359+ },
3360+ "name": {
3361+ "name": "name",
3362+ "type": "text",
3363+ "primaryKey": false,
3364+ "notNull": true
3365+ },
3366+ "url": {
3367+ "name": "url",
3368+ "type": "text",
3369+ "primaryKey": false,
3370+ "notNull": true
3371+ },
3372+ "starts_at": {
3373+ "name": "starts_at",
3374+ "type": "timestamp with time zone",
3375+ "primaryKey": false,
3376+ "notNull": false
3377+ },
3378+ "ends_at": {
3379+ "name": "ends_at",
3380+ "type": "timestamp with time zone",
3381+ "primaryKey": false,
3382+ "notNull": false
3383+ },
3384+ "location": {
3385+ "name": "location",
3386+ "type": "text",
3387+ "primaryKey": false,
3388+ "notNull": false
3389+ },
3390+ "category_slugs": {
3391+ "name": "category_slugs",
3392+ "type": "text[]",
3393+ "primaryKey": false,
3394+ "notNull": true,
3395+ "default": "'{}'::text[]"
3396+ },
3397+ "lot_count": {
3398+ "name": "lot_count",
3399+ "type": "integer",
3400+ "primaryKey": false,
3401+ "notNull": false
3402+ },
3403+ "status": {
3404+ "name": "status",
3405+ "type": "text",
3406+ "primaryKey": false,
3407+ "notNull": true,
3408+ "default": "'upcoming'"
3409+ },
3410+ "currency": {
3411+ "name": "currency",
3412+ "type": "text",
3413+ "primaryKey": false,
3414+ "notNull": false
3415+ },
3416+ "created_at": {
3417+ "name": "created_at",
3418+ "type": "timestamp with time zone",
3419+ "primaryKey": false,
3420+ "notNull": true,
3421+ "default": "now()"
3422+ },
3423+ "updated_at": {
3424+ "name": "updated_at",
3425+ "type": "timestamp with time zone",
3426+ "primaryKey": false,
3427+ "notNull": true,
3428+ "default": "now()"
3429+ }
3430+ },
3431+ "indexes": {
3432+ "auctions_url_uq": {
3433+ "name": "auctions_url_uq",
3434+ "columns": [
3435+ {
3436+ "expression": "url",
3437+ "isExpression": false,
3438+ "asc": true,
3439+ "nulls": "last"
3440+ }
3441+ ],
3442+ "isUnique": true,
3443+ "concurrently": false,
3444+ "method": "btree",
3445+ "with": {}
3446+ },
3447+ "auctions_ends_idx": {
3448+ "name": "auctions_ends_idx",
3449+ "columns": [
3450+ {
3451+ "expression": "ends_at",
3452+ "isExpression": false,
3453+ "asc": true,
3454+ "nulls": "last"
3455+ }
3456+ ],
3457+ "isUnique": false,
3458+ "concurrently": false,
3459+ "method": "btree",
3460+ "with": {}
3461+ }
3462+ },
3463+ "foreignKeys": {},
3464+ "compositePrimaryKeys": {},
3465+ "uniqueConstraints": {},
3466+ "policies": {},
3467+ "checkConstraints": {},
3468+ "isRLSEnabled": false
3469+ },
3470+ "public.cross_listing_groups": {
3471+ "name": "cross_listing_groups",
3472+ "schema": "",
3473+ "columns": {
3474+ "id": {
3475+ "name": "id",
3476+ "type": "text",
3477+ "primaryKey": true,
3478+ "notNull": true
3479+ },
3480+ "asset_id": {
3481+ "name": "asset_id",
3482+ "type": "text",
3483+ "primaryKey": false,
3484+ "notNull": false
3485+ },
3486+ "signals": {
3487+ "name": "signals",
3488+ "type": "jsonb",
3489+ "primaryKey": false,
3490+ "notNull": true,
3491+ "default": "'{}'::jsonb"
3492+ },
3493+ "created_at": {
3494+ "name": "created_at",
3495+ "type": "timestamp with time zone",
3496+ "primaryKey": false,
3497+ "notNull": true,
3498+ "default": "now()"
3499+ }
3500+ },
3501+ "indexes": {},
3502+ "foreignKeys": {},
3503+ "compositePrimaryKeys": {},
3504+ "uniqueConstraints": {},
3505+ "policies": {},
3506+ "checkConstraints": {},
3507+ "isRLSEnabled": false
3508+ },
3509+ "public.fx_rates": {
3510+ "name": "fx_rates",
3511+ "schema": "",
3512+ "columns": {
3513+ "date": {
3514+ "name": "date",
3515+ "type": "date",
3516+ "primaryKey": false,
3517+ "notNull": true
3518+ },
3519+ "base": {
3520+ "name": "base",
3521+ "type": "text",
3522+ "primaryKey": false,
3523+ "notNull": true
3524+ },
3525+ "quote": {
3526+ "name": "quote",
3527+ "type": "text",
3528+ "primaryKey": false,
3529+ "notNull": true
3530+ },
3531+ "rate": {
3532+ "name": "rate",
3533+ "type": "real",
3534+ "primaryKey": false,
3535+ "notNull": true
3536+ },
3537+ "source": {
3538+ "name": "source",
3539+ "type": "text",
3540+ "primaryKey": false,
3541+ "notNull": true,
3542+ "default": "'ecb'"
3543+ }
3544+ },
3545+ "indexes": {
3546+ "fx_rates_uq": {
3547+ "name": "fx_rates_uq",
3548+ "columns": [
3549+ {
3550+ "expression": "date",
3551+ "isExpression": false,
3552+ "asc": true,
3553+ "nulls": "last"
3554+ },
3555+ {
3556+ "expression": "base",
3557+ "isExpression": false,
3558+ "asc": true,
3559+ "nulls": "last"
3560+ },
3561+ {
3562+ "expression": "quote",
3563+ "isExpression": false,
3564+ "asc": true,
3565+ "nulls": "last"
3566+ }
3567+ ],
3568+ "isUnique": true,
3569+ "concurrently": false,
3570+ "method": "btree",
3571+ "with": {}
3572+ }
3573+ },
3574+ "foreignKeys": {},
3575+ "compositePrimaryKeys": {},
3576+ "uniqueConstraints": {},
3577+ "policies": {},
3578+ "checkConstraints": {},
3579+ "isRLSEnabled": false
3580+ },
3581+ "public.listing_events": {
3582+ "name": "listing_events",
3583+ "schema": "",
3584+ "columns": {
3585+ "id": {
3586+ "name": "id",
3587+ "type": "text",
3588+ "primaryKey": true,
3589+ "notNull": true
3590+ },
3591+ "listing_id": {
3592+ "name": "listing_id",
3593+ "type": "text",
3594+ "primaryKey": false,
3595+ "notNull": true
3596+ },
3597+ "event_type": {
3598+ "name": "event_type",
3599+ "type": "text",
3600+ "primaryKey": false,
3601+ "notNull": true
3602+ },
3603+ "old_price": {
3604+ "name": "old_price",
3605+ "type": "numeric(18, 4)",
3606+ "primaryKey": false,
3607+ "notNull": false
3608+ },
3609+ "new_price": {
3610+ "name": "new_price",
3611+ "type": "numeric(18, 4)",
3612+ "primaryKey": false,
3613+ "notNull": false
3614+ },
3615+ "currency": {
3616+ "name": "currency",
3617+ "type": "text",
3618+ "primaryKey": false,
3619+ "notNull": false
3620+ },
3621+ "occurred_at": {
3622+ "name": "occurred_at",
3623+ "type": "timestamp with time zone",
3624+ "primaryKey": false,
3625+ "notNull": true
3626+ }
3627+ },
3628+ "indexes": {
3629+ "listing_events_listing_idx": {
3630+ "name": "listing_events_listing_idx",
3631+ "columns": [
3632+ {
3633+ "expression": "listing_id",
3634+ "isExpression": false,
3635+ "asc": true,
3636+ "nulls": "last"
3637+ },
3638+ {
3639+ "expression": "occurred_at",
3640+ "isExpression": false,
3641+ "asc": true,
3642+ "nulls": "last"
3643+ }
3644+ ],
3645+ "isUnique": false,
3646+ "concurrently": false,
3647+ "method": "btree",
3648+ "with": {}
3649+ }
3650+ },
3651+ "foreignKeys": {},
3652+ "compositePrimaryKeys": {},
3653+ "uniqueConstraints": {},
3654+ "policies": {},
3655+ "checkConstraints": {},
3656+ "isRLSEnabled": false
3657+ },
3658+ "public.listings": {
3659+ "name": "listings",
3660+ "schema": "",
3661+ "columns": {
3662+ "id": {
3663+ "name": "id",
3664+ "type": "text",
3665+ "primaryKey": true,
3666+ "notNull": true
3667+ },
3668+ "asset_id": {
3669+ "name": "asset_id",
3670+ "type": "text",
3671+ "primaryKey": false,
3672+ "notNull": true
3673+ },
3674+ "variant_id": {
3675+ "name": "variant_id",
3676+ "type": "text",
3677+ "primaryKey": false,
3678+ "notNull": false
3679+ },
3680+ "source_id": {
3681+ "name": "source_id",
3682+ "type": "text",
3683+ "primaryKey": false,
3684+ "notNull": true
3685+ },
3686+ "connector_id": {
3687+ "name": "connector_id",
3688+ "type": "text",
3689+ "primaryKey": false,
3690+ "notNull": true
3691+ },
3692+ "raw_record_id": {
3693+ "name": "raw_record_id",
3694+ "type": "text",
3695+ "primaryKey": false,
3696+ "notNull": false
3697+ },
3698+ "source_url": {
3699+ "name": "source_url",
3700+ "type": "text",
3701+ "primaryKey": false,
3702+ "notNull": true
3703+ },
3704+ "external_id": {
3705+ "name": "external_id",
3706+ "type": "text",
3707+ "primaryKey": false,
3708+ "notNull": true
3709+ },
3710+ "listing_type": {
3711+ "name": "listing_type",
3712+ "type": "text",
3713+ "primaryKey": false,
3714+ "notNull": true,
3715+ "default": "'unknown'"
3716+ },
3717+ "price": {
3718+ "name": "price",
3719+ "type": "numeric(18, 4)",
3720+ "primaryKey": false,
3721+ "notNull": false
3722+ },
3723+ "currency": {
3724+ "name": "currency",
3725+ "type": "text",
3726+ "primaryKey": false,
3727+ "notNull": false
3728+ },
3729+ "price_usd": {
3730+ "name": "price_usd",
3731+ "type": "numeric(18, 4)",
3732+ "primaryKey": false,
3733+ "notNull": false
3734+ },
3735+ "seller": {
3736+ "name": "seller",
3737+ "type": "text",
3738+ "primaryKey": false,
3739+ "notNull": false
3740+ },
3741+ "seller_reputation": {
3742+ "name": "seller_reputation",
3743+ "type": "text",
3744+ "primaryKey": false,
3745+ "notNull": false
3746+ },
3747+ "location": {
3748+ "name": "location",
3749+ "type": "text",
3750+ "primaryKey": false,
3751+ "notNull": false
3752+ },
3753+ "shipping_cost": {
3754+ "name": "shipping_cost",
3755+ "type": "numeric(18, 4)",
3756+ "primaryKey": false,
3757+ "notNull": false
3758+ },
3759+ "quantity": {
3760+ "name": "quantity",
3761+ "type": "integer",
3762+ "primaryKey": false,
3763+ "notNull": false
3764+ },
3765+ "condition": {
3766+ "name": "condition",
3767+ "type": "text",
3768+ "primaryKey": false,
3769+ "notNull": false
3770+ },
3771+ "grader": {
3772+ "name": "grader",
3773+ "type": "text",
3774+ "primaryKey": false,
3775+ "notNull": false
3776+ },
3777+ "grade": {
3778+ "name": "grade",
3779+ "type": "text",
3780+ "primaryKey": false,
3781+ "notNull": false
3782+ },
3783+ "certification_number": {
3784+ "name": "certification_number",
3785+ "type": "text",
3786+ "primaryKey": false,
3787+ "notNull": false
3788+ },
3789+ "image_urls": {
3790+ "name": "image_urls",
3791+ "type": "jsonb",
3792+ "primaryKey": false,
3793+ "notNull": true,
3794+ "default": "'[]'::jsonb"
3795+ },
3796+ "raw_title": {
3797+ "name": "raw_title",
3798+ "type": "text",
3799+ "primaryKey": false,
3800+ "notNull": true
3801+ },
3802+ "description": {
3803+ "name": "description",
3804+ "type": "text",
3805+ "primaryKey": false,
3806+ "notNull": false
3807+ },
3808+ "listed_at": {
3809+ "name": "listed_at",
3810+ "type": "timestamp with time zone",
3811+ "primaryKey": false,
3812+ "notNull": false
3813+ },
3814+ "ends_at": {
3815+ "name": "ends_at",
3816+ "type": "timestamp with time zone",
3817+ "primaryKey": false,
3818+ "notNull": false
3819+ },
3820+ "availability": {
3821+ "name": "availability",
3822+ "type": "text",
3823+ "primaryKey": false,
3824+ "notNull": true,
3825+ "default": "'available'"
3826+ },
3827+ "bid_count": {
3828+ "name": "bid_count",
3829+ "type": "integer",
3830+ "primaryKey": false,
3831+ "notNull": false
3832+ },
3833+ "first_seen_at": {
3834+ "name": "first_seen_at",
3835+ "type": "timestamp with time zone",
3836+ "primaryKey": false,
3837+ "notNull": true
3838+ },
3839+ "last_seen_at": {
3840+ "name": "last_seen_at",
3841+ "type": "timestamp with time zone",
3842+ "primaryKey": false,
3843+ "notNull": true
3844+ },
3845+ "price_changed_at": {
3846+ "name": "price_changed_at",
3847+ "type": "timestamp with time zone",
3848+ "primaryKey": false,
3849+ "notNull": false
3850+ },
3851+ "cross_listing_group_id": {
3852+ "name": "cross_listing_group_id",
3853+ "type": "text",
3854+ "primaryKey": false,
3855+ "notNull": false
3856+ },
3857+ "confidence": {
3858+ "name": "confidence",
3859+ "type": "numeric(8, 6)",
3860+ "primaryKey": false,
3861+ "notNull": true,
3862+ "default": 0.8
3863+ },
3864+ "data_quality": {
3865+ "name": "data_quality",
3866+ "type": "real",
3867+ "primaryKey": false,
3868+ "notNull": true,
3869+ "default": 0
3870+ },
3871+ "flags": {
3872+ "name": "flags",
3873+ "type": "text[]",
3874+ "primaryKey": false,
3875+ "notNull": true,
3876+ "default": "'{}'::text[]"
3877+ },
3878+ "discount_to_riv": {
3879+ "name": "discount_to_riv",
3880+ "type": "numeric(8, 6)",
3881+ "primaryKey": false,
3882+ "notNull": false
3883+ },
3884+ "created_at": {
3885+ "name": "created_at",
3886+ "type": "timestamp with time zone",
3887+ "primaryKey": false,
3888+ "notNull": true,
3889+ "default": "now()"
3890+ },
3891+ "updated_at": {
3892+ "name": "updated_at",
3893+ "type": "timestamp with time zone",
3894+ "primaryKey": false,
3895+ "notNull": true,
3896+ "default": "now()"
3897+ }
3898+ },
3899+ "indexes": {
3900+ "listings_source_external_uq": {
3901+ "name": "listings_source_external_uq",
3902+ "columns": [
3903+ {
3904+ "expression": "source_id",
3905+ "isExpression": false,
3906+ "asc": true,
3907+ "nulls": "last"
3908+ },
3909+ {
3910+ "expression": "external_id",
3911+ "isExpression": false,
3912+ "asc": true,
3913+ "nulls": "last"
3914+ }
3915+ ],
3916+ "isUnique": true,
3917+ "concurrently": false,
3918+ "method": "btree",
3919+ "with": {}
3920+ },
3921+ "listings_asset_avail_idx": {
3922+ "name": "listings_asset_avail_idx",
3923+ "columns": [
3924+ {
3925+ "expression": "asset_id",
3926+ "isExpression": false,
3927+ "asc": true,
3928+ "nulls": "last"
3929+ },
3930+ {
3931+ "expression": "availability",
3932+ "isExpression": false,
3933+ "asc": true,
3934+ "nulls": "last"
3935+ }
3936+ ],
3937+ "isUnique": false,
3938+ "concurrently": false,
3939+ "method": "btree",
3940+ "with": {}
3941+ },
3942+ "listings_avail_price_idx": {
3943+ "name": "listings_avail_price_idx",
3944+ "columns": [
3945+ {
3946+ "expression": "availability",
3947+ "isExpression": false,
3948+ "asc": true,
3949+ "nulls": "last"
3950+ },
3951+ {
3952+ "expression": "price_usd",
3953+ "isExpression": false,
3954+ "asc": true,
3955+ "nulls": "last"
3956+ }
3957+ ],
3958+ "isUnique": false,
3959+ "concurrently": false,
3960+ "method": "btree",
3961+ "with": {}
3962+ },
3963+ "listings_ends_idx": {
3964+ "name": "listings_ends_idx",
3965+ "columns": [
3966+ {
3967+ "expression": "ends_at",
3968+ "isExpression": false,
3969+ "asc": true,
3970+ "nulls": "last"
3971+ }
3972+ ],
3973+ "isUnique": false,
3974+ "concurrently": false,
3975+ "method": "btree",
3976+ "with": {}
3977+ },
3978+ "listings_last_seen_idx": {
3979+ "name": "listings_last_seen_idx",
3980+ "columns": [
3981+ {
3982+ "expression": "last_seen_at",
3983+ "isExpression": false,
3984+ "asc": true,
3985+ "nulls": "last"
3986+ }
3987+ ],
3988+ "isUnique": false,
3989+ "concurrently": false,
3990+ "method": "btree",
3991+ "with": {}
3992+ }
3993+ },
3994+ "foreignKeys": {},
3995+ "compositePrimaryKeys": {},
3996+ "uniqueConstraints": {},
3997+ "policies": {},
3998+ "checkConstraints": {},
3999+ "isRLSEnabled": false
4000+ },
4001+ "public.news": {
4002+ "name": "news",
4003+ "schema": "",
4004+ "columns": {
4005+ "id": {
4006+ "name": "id",
4007+ "type": "text",
4008+ "primaryKey": true,
4009+ "notNull": true
4010+ },
4011+ "source_id": {
4012+ "name": "source_id",
4013+ "type": "text",
4014+ "primaryKey": false,
4015+ "notNull": true
4016+ },
4017+ "url": {
4018+ "name": "url",
4019+ "type": "text",
4020+ "primaryKey": false,
4021+ "notNull": true
4022+ },
4023+ "title": {
4024+ "name": "title",
4025+ "type": "text",
4026+ "primaryKey": false,
4027+ "notNull": true
4028+ },
4029+ "summary": {
4030+ "name": "summary",
4031+ "type": "text",
4032+ "primaryKey": false,
4033+ "notNull": false
4034+ },
4035+ "ai_summary": {
4036+ "name": "ai_summary",
4037+ "type": "text",
4038+ "primaryKey": false,
4039+ "notNull": false
4040+ },
4041+ "published_at": {
4042+ "name": "published_at",
4043+ "type": "timestamp with time zone",
4044+ "primaryKey": false,
4045+ "notNull": false
4046+ },
4047+ "category_slugs": {
4048+ "name": "category_slugs",
4049+ "type": "text[]",
4050+ "primaryKey": false,
4051+ "notNull": true,
4052+ "default": "'{}'::text[]"
4053+ },
4054+ "news_type": {
4055+ "name": "news_type",
4056+ "type": "text",
4057+ "primaryKey": false,
4058+ "notNull": false
4059+ },
4060+ "image_url": {
4061+ "name": "image_url",
4062+ "type": "text",
4063+ "primaryKey": false,
4064+ "notNull": false
4065+ },
4066+ "fetched_at": {
4067+ "name": "fetched_at",
4068+ "type": "timestamp with time zone",
4069+ "primaryKey": false,
4070+ "notNull": true
4071+ }
4072+ },
4073+ "indexes": {
4074+ "news_url_uq": {
4075+ "name": "news_url_uq",
4076+ "columns": [
4077+ {
4078+ "expression": "url",
4079+ "isExpression": false,
4080+ "asc": true,
4081+ "nulls": "last"
4082+ }
4083+ ],
4084+ "isUnique": true,
4085+ "concurrently": false,
4086+ "method": "btree",
4087+ "with": {}
4088+ },
4089+ "news_published_idx": {
4090+ "name": "news_published_idx",
4091+ "columns": [
4092+ {
4093+ "expression": "published_at",
4094+ "isExpression": false,
4095+ "asc": true,
4096+ "nulls": "last"
4097+ }
4098+ ],
4099+ "isUnique": false,
4100+ "concurrently": false,
4101+ "method": "btree",
4102+ "with": {}
4103+ }
4104+ },
4105+ "foreignKeys": {},
4106+ "compositePrimaryKeys": {},
4107+ "uniqueConstraints": {},
4108+ "policies": {},
4109+ "checkConstraints": {},
4110+ "isRLSEnabled": false
4111+ },
4112+ "public.price_observations": {
4113+ "name": "price_observations",
4114+ "schema": "",
4115+ "columns": {
4116+ "id": {
4117+ "name": "id",
4118+ "type": "text",
4119+ "primaryKey": true,
4120+ "notNull": true
4121+ },
4122+ "asset_id": {
4123+ "name": "asset_id",
4124+ "type": "text",
4125+ "primaryKey": false,
4126+ "notNull": true
4127+ },
4128+ "variant_id": {
4129+ "name": "variant_id",
4130+ "type": "text",
4131+ "primaryKey": false,
4132+ "notNull": false
4133+ },
4134+ "source_id": {
4135+ "name": "source_id",
4136+ "type": "text",
4137+ "primaryKey": false,
4138+ "notNull": true
4139+ },
4140+ "connector_id": {
4141+ "name": "connector_id",
4142+ "type": "text",
4143+ "primaryKey": false,
4144+ "notNull": true
4145+ },
4146+ "raw_record_id": {
4147+ "name": "raw_record_id",
4148+ "type": "text",
4149+ "primaryKey": false,
4150+ "notNull": false
4151+ },
4152+ "source_url": {
4153+ "name": "source_url",
4154+ "type": "text",
4155+ "primaryKey": false,
4156+ "notNull": true
4157+ },
4158+ "price_kind": {
4159+ "name": "price_kind",
4160+ "type": "text",
4161+ "primaryKey": false,
4162+ "notNull": true
4163+ },
4164+ "price": {
4165+ "name": "price",
4166+ "type": "numeric(18, 4)",
4167+ "primaryKey": false,
4168+ "notNull": true
4169+ },
4170+ "currency": {
4171+ "name": "currency",
4172+ "type": "text",
4173+ "primaryKey": false,
4174+ "notNull": true
4175+ },
4176+ "price_usd": {
4177+ "name": "price_usd",
4178+ "type": "numeric(18, 4)",
4179+ "primaryKey": false,
4180+ "notNull": true
4181+ },
4182+ "observation_date": {
4183+ "name": "observation_date",
4184+ "type": "date",
4185+ "primaryKey": false,
4186+ "notNull": true
4187+ },
4188+ "sample_size": {
4189+ "name": "sample_size",
4190+ "type": "integer",
4191+ "primaryKey": false,
4192+ "notNull": false
4193+ },
4194+ "dedupe_key": {
4195+ "name": "dedupe_key",
4196+ "type": "text",
4197+ "primaryKey": false,
4198+ "notNull": true
4199+ },
4200+ "created_at": {
4201+ "name": "created_at",
4202+ "type": "timestamp with time zone",
4203+ "primaryKey": false,
4204+ "notNull": true,
4205+ "default": "now()"
4206+ }
4207+ },
4208+ "indexes": {
4209+ "price_observations_dedupe_uq": {
4210+ "name": "price_observations_dedupe_uq",
4211+ "columns": [
4212+ {
4213+ "expression": "dedupe_key",
4214+ "isExpression": false,
4215+ "asc": true,
4216+ "nulls": "last"
4217+ }
4218+ ],
4219+ "isUnique": true,
4220+ "concurrently": false,
4221+ "method": "btree",
4222+ "with": {}
4223+ },
4224+ "price_observations_asset_date_idx": {
4225+ "name": "price_observations_asset_date_idx",
4226+ "columns": [
4227+ {
4228+ "expression": "asset_id",
4229+ "isExpression": false,
4230+ "asc": true,
4231+ "nulls": "last"
4232+ },
4233+ {
4234+ "expression": "observation_date",
4235+ "isExpression": false,
4236+ "asc": true,
4237+ "nulls": "last"
4238+ }
4239+ ],
4240+ "isUnique": false,
4241+ "concurrently": false,
4242+ "method": "btree",
4243+ "with": {}
4244+ }
4245+ },
4246+ "foreignKeys": {},
4247+ "compositePrimaryKeys": {},
4248+ "uniqueConstraints": {},
4249+ "policies": {},
4250+ "checkConstraints": {},
4251+ "isRLSEnabled": false
4252+ },
4253+ "public.sales": {
4254+ "name": "sales",
4255+ "schema": "",
4256+ "columns": {
4257+ "id": {
4258+ "name": "id",
4259+ "type": "text",
4260+ "primaryKey": true,
4261+ "notNull": true
4262+ },
4263+ "asset_id": {
4264+ "name": "asset_id",
4265+ "type": "text",
4266+ "primaryKey": false,
4267+ "notNull": true
4268+ },
4269+ "variant_id": {
4270+ "name": "variant_id",
4271+ "type": "text",
4272+ "primaryKey": false,
4273+ "notNull": false
4274+ },
4275+ "source_id": {
4276+ "name": "source_id",
4277+ "type": "text",
4278+ "primaryKey": false,
4279+ "notNull": true
4280+ },
4281+ "connector_id": {
4282+ "name": "connector_id",
4283+ "type": "text",
4284+ "primaryKey": false,
4285+ "notNull": true
4286+ },
4287+ "raw_record_id": {
4288+ "name": "raw_record_id",
4289+ "type": "text",
4290+ "primaryKey": false,
4291+ "notNull": false
4292+ },
4293+ "normalized_record_id": {
4294+ "name": "normalized_record_id",
4295+ "type": "text",
4296+ "primaryKey": false,
4297+ "notNull": false
4298+ },
4299+ "source_url": {
4300+ "name": "source_url",
4301+ "type": "text",
4302+ "primaryKey": false,
4303+ "notNull": true
4304+ },
4305+ "external_id": {
4306+ "name": "external_id",
4307+ "type": "text",
4308+ "primaryKey": false,
4309+ "notNull": false
4310+ },
4311+ "sale_type": {
4312+ "name": "sale_type",
4313+ "type": "text",
4314+ "primaryKey": false,
4315+ "notNull": true,
4316+ "default": "'unknown'"
4317+ },
4318+ "sale_date": {
4319+ "name": "sale_date",
4320+ "type": "timestamp with time zone",
4321+ "primaryKey": false,
4322+ "notNull": true
4323+ },
4324+ "price": {
4325+ "name": "price",
4326+ "type": "numeric(18, 4)",
4327+ "primaryKey": false,
4328+ "notNull": true
4329+ },
4330+ "currency": {
4331+ "name": "currency",
4332+ "type": "text",
4333+ "primaryKey": false,
4334+ "notNull": true
4335+ },
4336+ "price_usd": {
4337+ "name": "price_usd",
4338+ "type": "numeric(18, 4)",
4339+ "primaryKey": false,
4340+ "notNull": true
4341+ },
4342+ "fx_rate": {
4343+ "name": "fx_rate",
4344+ "type": "real",
4345+ "primaryKey": false,
4346+ "notNull": false
4347+ },
4348+ "fx_date": {
4349+ "name": "fx_date",
4350+ "type": "date",
4351+ "primaryKey": false,
4352+ "notNull": false
4353+ },
4354+ "buyer_premium_included": {
4355+ "name": "buyer_premium_included",
4356+ "type": "boolean",
4357+ "primaryKey": false,
4358+ "notNull": false
4359+ },
4360+ "quantity": {
4361+ "name": "quantity",
4362+ "type": "integer",
4363+ "primaryKey": false,
4364+ "notNull": true,
4365+ "default": 1
4366+ },
4367+ "is_bundle": {
4368+ "name": "is_bundle",
4369+ "type": "boolean",
4370+ "primaryKey": false,
4371+ "notNull": true,
4372+ "default": false
4373+ },
4374+ "condition": {
4375+ "name": "condition",
4376+ "type": "text",
4377+ "primaryKey": false,
4378+ "notNull": false
4379+ },
4380+ "grader": {
4381+ "name": "grader",
4382+ "type": "text",
4383+ "primaryKey": false,
4384+ "notNull": false
4385+ },
4386+ "grade": {
4387+ "name": "grade",
4388+ "type": "text",
4389+ "primaryKey": false,
4390+ "notNull": false
4391+ },
4392+ "certification_number": {
4393+ "name": "certification_number",
4394+ "type": "text",
4395+ "primaryKey": false,
4396+ "notNull": false
4397+ },
4398+ "location": {
4399+ "name": "location",
4400+ "type": "text",
4401+ "primaryKey": false,
4402+ "notNull": false
4403+ },
4404+ "auction_house": {
4405+ "name": "auction_house",
4406+ "type": "text",
4407+ "primaryKey": false,
4408+ "notNull": false
4409+ },
4410+ "lot_number": {
4411+ "name": "lot_number",
4412+ "type": "text",
4413+ "primaryKey": false,
4414+ "notNull": false
4415+ },
4416+ "image_urls": {
4417+ "name": "image_urls",
4418+ "type": "jsonb",
4419+ "primaryKey": false,
4420+ "notNull": true,
4421+ "default": "'[]'::jsonb"
4422+ },
4423+ "raw_title": {
4424+ "name": "raw_title",
4425+ "type": "text",
4426+ "primaryKey": false,
4427+ "notNull": true
4428+ },
4429+ "confidence": {
4430+ "name": "confidence",
4431+ "type": "numeric(8, 6)",
4432+ "primaryKey": false,
4433+ "notNull": true,
4434+ "default": 0.8
4435+ },
4436+ "data_quality": {
4437+ "name": "data_quality",
4438+ "type": "real",
4439+ "primaryKey": false,
4440+ "notNull": true,
4441+ "default": 0
4442+ },
4443+ "status": {
4444+ "name": "status",
4445+ "type": "text",
4446+ "primaryKey": false,
4447+ "notNull": true,
4448+ "default": "'valid'"
4449+ },
4450+ "flags": {
4451+ "name": "flags",
4452+ "type": "text[]",
4453+ "primaryKey": false,
4454+ "notNull": true,
4455+ "default": "'{}'::text[]"
4456+ },
4457+ "dedupe_key": {
4458+ "name": "dedupe_key",
4459+ "type": "text",
4460+ "primaryKey": false,
4461+ "notNull": true
4462+ },
4463+ "created_at": {
4464+ "name": "created_at",
4465+ "type": "timestamp with time zone",
4466+ "primaryKey": false,
4467+ "notNull": true,
4468+ "default": "now()"
4469+ }
4470+ },
4471+ "indexes": {
4472+ "sales_dedupe_uq": {
4473+ "name": "sales_dedupe_uq",
4474+ "columns": [
4475+ {
4476+ "expression": "dedupe_key",
4477+ "isExpression": false,
4478+ "asc": true,
4479+ "nulls": "last"
4480+ }
4481+ ],
4482+ "isUnique": true,
4483+ "concurrently": false,
4484+ "method": "btree",
4485+ "with": {}
4486+ },
4487+ "sales_asset_date_idx": {
4488+ "name": "sales_asset_date_idx",
4489+ "columns": [
4490+ {
4491+ "expression": "asset_id",
4492+ "isExpression": false,
4493+ "asc": true,
4494+ "nulls": "last"
4495+ },
4496+ {
4497+ "expression": "sale_date",
4498+ "isExpression": false,
4499+ "asc": true,
4500+ "nulls": "last"
4501+ }
4502+ ],
4503+ "isUnique": false,
4504+ "concurrently": false,
4505+ "method": "btree",
4506+ "with": {}
4507+ },
4508+ "sales_variant_date_idx": {
4509+ "name": "sales_variant_date_idx",
4510+ "columns": [
4511+ {
4512+ "expression": "variant_id",
4513+ "isExpression": false,
4514+ "asc": true,
4515+ "nulls": "last"
4516+ },
4517+ {
4518+ "expression": "sale_date",
4519+ "isExpression": false,
4520+ "asc": true,
4521+ "nulls": "last"
4522+ }
4523+ ],
4524+ "isUnique": false,
4525+ "concurrently": false,
4526+ "method": "btree",
4527+ "with": {}
4528+ },
4529+ "sales_source_idx": {
4530+ "name": "sales_source_idx",
4531+ "columns": [
4532+ {
4533+ "expression": "source_id",
4534+ "isExpression": false,
4535+ "asc": true,
4536+ "nulls": "last"
4537+ },
4538+ {
4539+ "expression": "sale_date",
4540+ "isExpression": false,
4541+ "asc": true,
4542+ "nulls": "last"
4543+ }
4544+ ],
4545+ "isUnique": false,
4546+ "concurrently": false,
4547+ "method": "btree",
4548+ "with": {}
4549+ },
4550+ "sales_date_idx": {
4551+ "name": "sales_date_idx",
4552+ "columns": [
4553+ {
4554+ "expression": "sale_date",
4555+ "isExpression": false,
4556+ "asc": true,
4557+ "nulls": "last"
4558+ }
4559+ ],
4560+ "isUnique": false,
4561+ "concurrently": false,
4562+ "method": "btree",
4563+ "with": {}
4564+ },
4565+ "sales_price_idx": {
4566+ "name": "sales_price_idx",
4567+ "columns": [
4568+ {
4569+ "expression": "price_usd",
4570+ "isExpression": false,
4571+ "asc": true,
4572+ "nulls": "last"
4573+ }
4574+ ],
4575+ "isUnique": false,
4576+ "concurrently": false,
4577+ "method": "btree",
4578+ "with": {}
4579+ }
4580+ },
4581+ "foreignKeys": {},
4582+ "compositePrimaryKeys": {},
4583+ "uniqueConstraints": {},
4584+ "policies": {},
4585+ "checkConstraints": {},
4586+ "isRLSEnabled": false
4587+ },
4588+ "public.benchmarks": {
4589+ "name": "benchmarks",
4590+ "schema": "",
4591+ "columns": {
4592+ "ticker": {
4593+ "name": "ticker",
4594+ "type": "text",
4595+ "primaryKey": false,
4596+ "notNull": true
4597+ },
4598+ "date": {
4599+ "name": "date",
4600+ "type": "date",
4601+ "primaryKey": false,
4602+ "notNull": true
4603+ },
4604+ "value": {
4605+ "name": "value",
4606+ "type": "real",
4607+ "primaryKey": false,
4608+ "notNull": true
4609+ },
4610+ "source": {
4611+ "name": "source",
4612+ "type": "text",
4613+ "primaryKey": false,
4614+ "notNull": true
4615+ }
4616+ },
4617+ "indexes": {},
4618+ "foreignKeys": {},
4619+ "compositePrimaryKeys": {
4620+ "benchmarks_ticker_date_pk": {
4621+ "name": "benchmarks_ticker_date_pk",
4622+ "columns": [
4623+ "ticker",
4624+ "date"
4625+ ]
4626+ }
4627+ },
4628+ "uniqueConstraints": {},
4629+ "policies": {},
4630+ "checkConstraints": {},
4631+ "isRLSEnabled": false
4632+ },
4633+ "public.category_snapshots": {
4634+ "name": "category_snapshots",
4635+ "schema": "",
4636+ "columns": {
4637+ "category_slug": {
4638+ "name": "category_slug",
4639+ "type": "text",
4640+ "primaryKey": false,
4641+ "notNull": true
4642+ },
4643+ "date": {
4644+ "name": "date",
4645+ "type": "date",
4646+ "primaryKey": false,
4647+ "notNull": true
4648+ },
4649+ "index_value": {
4650+ "name": "index_value",
4651+ "type": "real",
4652+ "primaryKey": false,
4653+ "notNull": false
4654+ },
4655+ "tracked_assets": {
4656+ "name": "tracked_assets",
4657+ "type": "integer",
4658+ "primaryKey": false,
4659+ "notNull": true,
4660+ "default": 0
4661+ },
4662+ "assets_with_valuation": {
4663+ "name": "assets_with_valuation",
4664+ "type": "integer",
4665+ "primaryKey": false,
4666+ "notNull": true,
4667+ "default": 0
4668+ },
4669+ "sales": {
4670+ "name": "sales",
4671+ "type": "integer",
4672+ "primaryKey": false,
4673+ "notNull": true,
4674+ "default": 0
4675+ },
4676+ "volume_usd": {
4677+ "name": "volume_usd",
4678+ "type": "numeric(18, 4)",
4679+ "primaryKey": false,
4680+ "notNull": false
4681+ },
4682+ "median_sale_usd": {
4683+ "name": "median_sale_usd",
4684+ "type": "numeric(18, 4)",
4685+ "primaryKey": false,
4686+ "notNull": false
4687+ },
4688+ "active_listings": {
4689+ "name": "active_listings",
4690+ "type": "integer",
4691+ "primaryKey": false,
4692+ "notNull": true,
4693+ "default": 0
4694+ },
4695+ "market_cap_est_usd": {
4696+ "name": "market_cap_est_usd",
4697+ "type": "numeric(18, 4)",
4698+ "primaryKey": false,
4699+ "notNull": false
4700+ },
4701+ "liquidity_score": {
4702+ "name": "liquidity_score",
4703+ "type": "real",
4704+ "primaryKey": false,
4705+ "notNull": false
4706+ },
4707+ "change_1d": {
4708+ "name": "change_1d",
4709+ "type": "numeric(8, 6)",
4710+ "primaryKey": false,
4711+ "notNull": false
4712+ },
4713+ "change_7d": {
4714+ "name": "change_7d",
4715+ "type": "numeric(8, 6)",
4716+ "primaryKey": false,
4717+ "notNull": false
4718+ },
4719+ "change_30d": {
4720+ "name": "change_30d",
4721+ "type": "numeric(8, 6)",
4722+ "primaryKey": false,
4723+ "notNull": false
4724+ },
4725+ "change_1y": {
4726+ "name": "change_1y",
4727+ "type": "numeric(8, 6)",
4728+ "primaryKey": false,
4729+ "notNull": false
4730+ }
4731+ },
4732+ "indexes": {},
4733+ "foreignKeys": {},
4734+ "compositePrimaryKeys": {
4735+ "category_snapshots_category_slug_date_pk": {
4736+ "name": "category_snapshots_category_slug_date_pk",
4737+ "columns": [
4738+ "category_slug",
4739+ "date"
4740+ ]
4741+ }
4742+ },
4743+ "uniqueConstraints": {},
4744+ "policies": {},
4745+ "checkConstraints": {},
4746+ "isRLSEnabled": false
4747+ },
4748+ "public.correlations": {
4749+ "name": "correlations",
4750+ "schema": "",
4751+ "columns": {
4752+ "a": {
4753+ "name": "a",
4754+ "type": "text",
4755+ "primaryKey": false,
4756+ "notNull": true
4757+ },
4758+ "b": {
4759+ "name": "b",
4760+ "type": "text",
4761+ "primaryKey": false,
4762+ "notNull": true
4763+ },
4764+ "window_days": {
4765+ "name": "window_days",
4766+ "type": "integer",
4767+ "primaryKey": false,
4768+ "notNull": true
4769+ },
4770+ "coefficient": {
4771+ "name": "coefficient",
4772+ "type": "real",
4773+ "primaryKey": false,
4774+ "notNull": true
4775+ },
4776+ "observations": {
4777+ "name": "observations",
4778+ "type": "integer",
4779+ "primaryKey": false,
4780+ "notNull": true
4781+ },
4782+ "computed_at": {
4783+ "name": "computed_at",
4784+ "type": "timestamp with time zone",
4785+ "primaryKey": false,
4786+ "notNull": true
4787+ }
4788+ },
4789+ "indexes": {},
4790+ "foreignKeys": {},
4791+ "compositePrimaryKeys": {
4792+ "correlations_a_b_window_days_pk": {
4793+ "name": "correlations_a_b_window_days_pk",
4794+ "columns": [
4795+ "a",
4796+ "b",
4797+ "window_days"
4798+ ]
4799+ }
4800+ },
4801+ "uniqueConstraints": {},
4802+ "policies": {},
4803+ "checkConstraints": {},
4804+ "isRLSEnabled": false
4805+ },
4806+ "public.index_constituents": {
4807+ "name": "index_constituents",
4808+ "schema": "",
4809+ "columns": {
4810+ "index_id": {
4811+ "name": "index_id",
4812+ "type": "text",
4813+ "primaryKey": false,
4814+ "notNull": true
4815+ },
4816+ "asset_id": {
4817+ "name": "asset_id",
4818+ "type": "text",
4819+ "primaryKey": false,
4820+ "notNull": true
4821+ },
4822+ "variant_id": {
4823+ "name": "variant_id",
4824+ "type": "text",
4825+ "primaryKey": false,
4826+ "notNull": true,
4827+ "default": "''"
4828+ },
4829+ "weight": {
4830+ "name": "weight",
4831+ "type": "real",
4832+ "primaryKey": false,
4833+ "notNull": true,
4834+ "default": 1
4835+ },
4836+ "added_at": {
4837+ "name": "added_at",
4838+ "type": "date",
4839+ "primaryKey": false,
4840+ "notNull": true
4841+ },
4842+ "removed_at": {
4843+ "name": "removed_at",
4844+ "type": "date",
4845+ "primaryKey": false,
4846+ "notNull": false
4847+ },
4848+ "reason": {
4849+ "name": "reason",
4850+ "type": "text",
4851+ "primaryKey": false,
4852+ "notNull": false
4853+ }
4854+ },
4855+ "indexes": {
4856+ "index_constituents_asset_idx": {
4857+ "name": "index_constituents_asset_idx",
4858+ "columns": [
4859+ {
4860+ "expression": "asset_id",
4861+ "isExpression": false,
4862+ "asc": true,
4863+ "nulls": "last"
4864+ }
4865+ ],
4866+ "isUnique": false,
4867+ "concurrently": false,
4868+ "method": "btree",
4869+ "with": {}
4870+ }
4871+ },
4872+ "foreignKeys": {},
4873+ "compositePrimaryKeys": {
4874+ "index_constituents_index_id_asset_id_variant_id_added_at_pk": {
4875+ "name": "index_constituents_index_id_asset_id_variant_id_added_at_pk",
4876+ "columns": [
4877+ "index_id",
4878+ "asset_id",
4879+ "variant_id",
4880+ "added_at"
4881+ ]
4882+ }
4883+ },
4884+ "uniqueConstraints": {},
4885+ "policies": {},
4886+ "checkConstraints": {},
4887+ "isRLSEnabled": false
4888+ },
4889+ "public.index_values": {
4890+ "name": "index_values",
4891+ "schema": "",
4892+ "columns": {
4893+ "index_id": {
4894+ "name": "index_id",
4895+ "type": "text",
4896+ "primaryKey": false,
4897+ "notNull": true
4898+ },
4899+ "date": {
4900+ "name": "date",
4901+ "type": "date",
4902+ "primaryKey": false,
4903+ "notNull": true
4904+ },
4905+ "value": {
4906+ "name": "value",
4907+ "type": "real",
4908+ "primaryKey": false,
4909+ "notNull": true
4910+ },
4911+ "constituents_count": {
4912+ "name": "constituents_count",
4913+ "type": "integer",
4914+ "primaryKey": false,
4915+ "notNull": true,
4916+ "default": 0
4917+ },
4918+ "transactions": {
4919+ "name": "transactions",
4920+ "type": "integer",
4921+ "primaryKey": false,
4922+ "notNull": true,
4923+ "default": 0
4924+ },
4925+ "volume_usd": {
4926+ "name": "volume_usd",
4927+ "type": "numeric(18, 4)",
4928+ "primaryKey": false,
4929+ "notNull": false
4930+ },
4931+ "median_sale_usd": {
4932+ "name": "median_sale_usd",
4933+ "type": "numeric(18, 4)",
4934+ "primaryKey": false,
4935+ "notNull": false
4936+ },
4937+ "avg_sale_usd": {
4938+ "name": "avg_sale_usd",
4939+ "type": "numeric(18, 4)",
4940+ "primaryKey": false,
4941+ "notNull": false
4942+ },
4943+ "market_cap_est_usd": {
4944+ "name": "market_cap_est_usd",
4945+ "type": "numeric(18, 4)",
4946+ "primaryKey": false,
4947+ "notNull": false
4948+ },
4949+ "market_cap_confidence": {
4950+ "name": "market_cap_confidence",
4951+ "type": "text",
4952+ "primaryKey": false,
4953+ "notNull": false
4954+ },
4955+ "liquidity_score": {
4956+ "name": "liquidity_score",
4957+ "type": "real",
4958+ "primaryKey": false,
4959+ "notNull": false
4960+ },
4961+ "momentum": {
4962+ "name": "momentum",
4963+ "type": "real",
4964+ "primaryKey": false,
4965+ "notNull": false
4966+ },
4967+ "breadth": {
4968+ "name": "breadth",
4969+ "type": "integer",
4970+ "primaryKey": false,
4971+ "notNull": false
4972+ },
4973+ "tracked_assets": {
4974+ "name": "tracked_assets",
4975+ "type": "integer",
4976+ "primaryKey": false,
4977+ "notNull": false
4978+ },
4979+ "coverage": {
4980+ "name": "coverage",
4981+ "type": "real",
4982+ "primaryKey": false,
4983+ "notNull": false
4984+ }
4985+ },
4986+ "indexes": {},
4987+ "foreignKeys": {},
4988+ "compositePrimaryKeys": {
4989+ "index_values_index_id_date_pk": {
4990+ "name": "index_values_index_id_date_pk",
4991+ "columns": [
4992+ "index_id",
4993+ "date"
4994+ ]
4995+ }
4996+ },
4997+ "uniqueConstraints": {},
4998+ "policies": {},
4999+ "checkConstraints": {},
5000+ "isRLSEnabled": false
5001+ },
5002+ "public.indices": {
5003+ "name": "indices",
5004+ "schema": "",
5005+ "columns": {
5006+ "id": {
5007+ "name": "id",
5008+ "type": "text",
5009+ "primaryKey": true,
5010+ "notNull": true
5011+ },
5012+ "ticker": {
5013+ "name": "ticker",
5014+ "type": "text",
5015+ "primaryKey": false,
5016+ "notNull": true
5017+ },
5018+ "name": {
5019+ "name": "name",
5020+ "type": "text",
5021+ "primaryKey": false,
5022+ "notNull": true
5023+ },
5024+ "description": {
5025+ "name": "description",
5026+ "type": "text",
5027+ "primaryKey": false,
5028+ "notNull": false
5029+ },
5030+ "category_slugs": {
5031+ "name": "category_slugs",
5032+ "type": "text[]",
5033+ "primaryKey": false,
5034+ "notNull": true,
5035+ "default": "'{}'::text[]"
5036+ },
5037+ "family_slugs": {
5038+ "name": "family_slugs",
5039+ "type": "text[]",
5040+ "primaryKey": false,
5041+ "notNull": true,
5042+ "default": "'{}'::text[]"
5043+ },
5044+ "parent_ticker": {
5045+ "name": "parent_ticker",
5046+ "type": "text",
5047+ "primaryKey": false,
5048+ "notNull": false
5049+ },
5050+ "methodology": {
5051+ "name": "methodology",
5052+ "type": "text",
5053+ "primaryKey": false,
5054+ "notNull": true,
5055+ "default": "'chain_linked_equal_weight_v1'"
5056+ },
5057+ "weighting": {
5058+ "name": "weighting",
5059+ "type": "text",
5060+ "primaryKey": false,
5061+ "notNull": true,
5062+ "default": "'equal'"
5063+ },
5064+ "base_date": {
5065+ "name": "base_date",
5066+ "type": "date",
5067+ "primaryKey": false,
5068+ "notNull": true
5069+ },
5070+ "base_value": {
5071+ "name": "base_value",
5072+ "type": "real",
5073+ "primaryKey": false,
5074+ "notNull": true,
5075+ "default": 1000
5076+ },
5077+ "min_constituents": {
5078+ "name": "min_constituents",
5079+ "type": "integer",
5080+ "primaryKey": false,
5081+ "notNull": true,
5082+ "default": 10
5083+ },
5084+ "active": {
5085+ "name": "active",
5086+ "type": "boolean",
5087+ "primaryKey": false,
5088+ "notNull": true,
5089+ "default": true
5090+ },
5091+ "is_flagship": {
5092+ "name": "is_flagship",
5093+ "type": "boolean",
5094+ "primaryKey": false,
5095+ "notNull": true,
5096+ "default": false
5097+ },
5098+ "color": {
5099+ "name": "color",
5100+ "type": "text",
5101+ "primaryKey": false,
5102+ "notNull": false
5103+ },
5104+ "created_at": {
5105+ "name": "created_at",
5106+ "type": "timestamp with time zone",
5107+ "primaryKey": false,
5108+ "notNull": true,
5109+ "default": "now()"
5110+ }
5111+ },
5112+ "indexes": {},
5113+ "foreignKeys": {},
5114+ "compositePrimaryKeys": {},
5115+ "uniqueConstraints": {
5116+ "indices_ticker_unique": {
5117+ "name": "indices_ticker_unique",
5118+ "nullsNotDistinct": false,
5119+ "columns": [
5120+ "ticker"
5121+ ]
5122+ }
5123+ },
5124+ "policies": {},
5125+ "checkConstraints": {},
5126+ "isRLSEnabled": false
5127+ },
5128+ "public.price_snapshots": {
5129+ "name": "price_snapshots",
5130+ "schema": "",
5131+ "columns": {
5132+ "asset_id": {
5133+ "name": "asset_id",
5134+ "type": "text",
5135+ "primaryKey": false,
5136+ "notNull": true
5137+ },
5138+ "variant_id": {
5139+ "name": "variant_id",
5140+ "type": "text",
5141+ "primaryKey": false,
5142+ "notNull": true,
5143+ "default": "''"
5144+ },
5145+ "date": {
5146+ "name": "date",
5147+ "type": "date",
5148+ "primaryKey": false,
5149+ "notNull": true
5150+ },
5151+ "riv_usd": {
5152+ "name": "riv_usd",
5153+ "type": "numeric(18, 4)",
5154+ "primaryKey": false,
5155+ "notNull": false
5156+ },
5157+ "latest_sale_usd": {
5158+ "name": "latest_sale_usd",
5159+ "type": "numeric(18, 4)",
5160+ "primaryKey": false,
5161+ "notNull": false
5162+ },
5163+ "median_usd": {
5164+ "name": "median_usd",
5165+ "type": "numeric(18, 4)",
5166+ "primaryKey": false,
5167+ "notNull": false
5168+ },
5169+ "sales_count": {
5170+ "name": "sales_count",
5171+ "type": "integer",
5172+ "primaryKey": false,
5173+ "notNull": true,
5174+ "default": 0
5175+ },
5176+ "volume_usd": {
5177+ "name": "volume_usd",
5178+ "type": "numeric(18, 4)",
5179+ "primaryKey": false,
5180+ "notNull": false
5181+ },
5182+ "listings_count": {
5183+ "name": "listings_count",
5184+ "type": "integer",
5185+ "primaryKey": false,
5186+ "notNull": true,
5187+ "default": 0
5188+ },
5189+ "min_ask_usd": {
5190+ "name": "min_ask_usd",
5191+ "type": "numeric(18, 4)",
5192+ "primaryKey": false,
5193+ "notNull": false
5194+ },
5195+ "observation_usd": {
5196+ "name": "observation_usd",
5197+ "type": "numeric(18, 4)",
5198+ "primaryKey": false,
5199+ "notNull": false
5200+ }
5201+ },
5202+ "indexes": {
5203+ "price_snapshots_date_idx": {
5204+ "name": "price_snapshots_date_idx",
5205+ "columns": [
5206+ {
5207+ "expression": "date",
5208+ "isExpression": false,
5209+ "asc": true,
5210+ "nulls": "last"
5211+ }
5212+ ],
5213+ "isUnique": false,
5214+ "concurrently": false,
5215+ "method": "btree",
5216+ "with": {}
5217+ }
5218+ },
5219+ "foreignKeys": {},
5220+ "compositePrimaryKeys": {
5221+ "price_snapshots_asset_id_variant_id_date_pk": {
5222+ "name": "price_snapshots_asset_id_variant_id_date_pk",
5223+ "columns": [
5224+ "asset_id",
5225+ "variant_id",
5226+ "date"
5227+ ]
5228+ }
5229+ },
5230+ "uniqueConstraints": {},
5231+ "policies": {},
5232+ "checkConstraints": {},
5233+ "isRLSEnabled": false
5234+ },
5235+ "public.radar_findings": {
5236+ "name": "radar_findings",
5237+ "schema": "",
5238+ "columns": {
5239+ "id": {
5240+ "name": "id",
5241+ "type": "text",
5242+ "primaryKey": true,
5243+ "notNull": true
5244+ },
5245+ "asset_id": {
5246+ "name": "asset_id",
5247+ "type": "text",
5248+ "primaryKey": false,
5249+ "notNull": true
5250+ },
5251+ "kind": {
5252+ "name": "kind",
5253+ "type": "text",
5254+ "primaryKey": false,
5255+ "notNull": true
5256+ },
5257+ "score": {
5258+ "name": "score",
5259+ "type": "real",
5260+ "primaryKey": false,
5261+ "notNull": true
5262+ },
5263+ "evidence": {
5264+ "name": "evidence",
5265+ "type": "jsonb",
5266+ "primaryKey": false,
5267+ "notNull": true,
5268+ "default": "'{}'::jsonb"
5269+ },
5270+ "entity_type": {
5271+ "name": "entity_type",
5272+ "type": "text",
5273+ "primaryKey": false,
5274+ "notNull": false
5275+ },
5276+ "entity_id": {
5277+ "name": "entity_id",
5278+ "type": "text",
5279+ "primaryKey": false,
5280+ "notNull": false
5281+ },
5282+ "detected_at": {
5283+ "name": "detected_at",
5284+ "type": "timestamp with time zone",
5285+ "primaryKey": false,
5286+ "notNull": true
5287+ },
5288+ "expires_at": {
5289+ "name": "expires_at",
5290+ "type": "timestamp with time zone",
5291+ "primaryKey": false,
5292+ "notNull": false
5293+ }
5294+ },
5295+ "indexes": {
5296+ "radar_kind_idx": {
5297+ "name": "radar_kind_idx",
5298+ "columns": [
5299+ {
5300+ "expression": "kind",
5301+ "isExpression": false,
5302+ "asc": true,
5303+ "nulls": "last"
5304+ },
5305+ {
5306+ "expression": "detected_at",
5307+ "isExpression": false,
5308+ "asc": true,
5309+ "nulls": "last"
5310+ }
5311+ ],
5312+ "isUnique": false,
5313+ "concurrently": false,
5314+ "method": "btree",
5315+ "with": {}
5316+ },
5317+ "radar_entity_uq": {
5318+ "name": "radar_entity_uq",
5319+ "columns": [
5320+ {
5321+ "expression": "kind",
5322+ "isExpression": false,
5323+ "asc": true,
5324+ "nulls": "last"
5325+ },
5326+ {
5327+ "expression": "entity_type",
5328+ "isExpression": false,
5329+ "asc": true,
5330+ "nulls": "last"
5331+ },
5332+ {
5333+ "expression": "entity_id",
5334+ "isExpression": false,
5335+ "asc": true,
5336+ "nulls": "last"
5337+ }
5338+ ],
5339+ "isUnique": true,
5340+ "concurrently": false,
5341+ "method": "btree",
5342+ "with": {}
5343+ }
5344+ },
5345+ "foreignKeys": {},
5346+ "compositePrimaryKeys": {},
5347+ "uniqueConstraints": {},
5348+ "policies": {},
5349+ "checkConstraints": {},
5350+ "isRLSEnabled": false
5351+ },
5352+ "public.valuations": {
5353+ "name": "valuations",
5354+ "schema": "",
5355+ "columns": {
5356+ "id": {
5357+ "name": "id",
5358+ "type": "text",
5359+ "primaryKey": true,
5360+ "notNull": true
5361+ },
5362+ "asset_id": {
5363+ "name": "asset_id",
5364+ "type": "text",
5365+ "primaryKey": false,
5366+ "notNull": true
5367+ },
5368+ "variant_id": {
5369+ "name": "variant_id",
5370+ "type": "text",
5371+ "primaryKey": false,
5372+ "notNull": false
5373+ },
5374+ "computed_at": {
5375+ "name": "computed_at",
5376+ "type": "timestamp with time zone",
5377+ "primaryKey": false,
5378+ "notNull": true
5379+ },
5380+ "riv_usd": {
5381+ "name": "riv_usd",
5382+ "type": "numeric(18, 4)",
5383+ "primaryKey": false,
5384+ "notNull": false
5385+ },
5386+ "low_usd": {
5387+ "name": "low_usd",
5388+ "type": "numeric(18, 4)",
5389+ "primaryKey": false,
5390+ "notNull": false
5391+ },
5392+ "high_usd": {
5393+ "name": "high_usd",
5394+ "type": "numeric(18, 4)",
5395+ "primaryKey": false,
5396+ "notNull": false
5397+ },
5398+ "confidence": {
5399+ "name": "confidence",
5400+ "type": "numeric(8, 6)",
5401+ "primaryKey": false,
5402+ "notNull": true,
5403+ "default": 0
5404+ },
5405+ "confidence_label": {
5406+ "name": "confidence_label",
5407+ "type": "text",
5408+ "primaryKey": false,
5409+ "notNull": true,
5410+ "default": "'insufficient'"
5411+ },
5412+ "sample_size": {
5413+ "name": "sample_size",
5414+ "type": "integer",
5415+ "primaryKey": false,
5416+ "notNull": true,
5417+ "default": 0
5418+ },
5419+ "window_days": {
5420+ "name": "window_days",
5421+ "type": "integer",
5422+ "primaryKey": false,
5423+ "notNull": true,
5424+ "default": 365
5425+ },
5426+ "methods": {
5427+ "name": "methods",
5428+ "type": "jsonb",
5429+ "primaryKey": false,
5430+ "notNull": true,
5431+ "default": "'{}'::jsonb"
5432+ },
5433+ "sales_used": {
5434+ "name": "sales_used",
5435+ "type": "text[]",
5436+ "primaryKey": false,
5437+ "notNull": true,
5438+ "default": "'{}'::text[]"
5439+ },
5440+ "observations_used": {
5441+ "name": "observations_used",
5442+ "type": "integer",
5443+ "primaryKey": false,
5444+ "notNull": true,
5445+ "default": 0
5446+ },
5447+ "method": {
5448+ "name": "method",
5449+ "type": "text",
5450+ "primaryKey": false,
5451+ "notNull": true,
5452+ "default": "'ensemble_v1'"
5453+ },
5454+ "notes": {
5455+ "name": "notes",
5456+ "type": "text[]",
5457+ "primaryKey": false,
5458+ "notNull": true,
5459+ "default": "'{}'::text[]"
5460+ }
5461+ },
5462+ "indexes": {
5463+ "valuations_asset_idx": {
5464+ "name": "valuations_asset_idx",
5465+ "columns": [
5466+ {
5467+ "expression": "asset_id",
5468+ "isExpression": false,
5469+ "asc": true,
5470+ "nulls": "last"
5471+ },
5472+ {
5473+ "expression": "computed_at",
5474+ "isExpression": false,
5475+ "asc": true,
5476+ "nulls": "last"
5477+ }
5478+ ],
5479+ "isUnique": false,
5480+ "concurrently": false,
5481+ "method": "btree",
5482+ "with": {}
5483+ },
5484+ "valuations_variant_idx": {
5485+ "name": "valuations_variant_idx",
5486+ "columns": [
5487+ {
5488+ "expression": "variant_id",
5489+ "isExpression": false,
5490+ "asc": true,
5491+ "nulls": "last"
5492+ },
5493+ {
5494+ "expression": "computed_at",
5495+ "isExpression": false,
5496+ "asc": true,
5497+ "nulls": "last"
5498+ }
5499+ ],
5500+ "isUnique": false,
5501+ "concurrently": false,
5502+ "method": "btree",
5503+ "with": {}
5504+ }
5505+ },
5506+ "foreignKeys": {},
5507+ "compositePrimaryKeys": {},
5508+ "uniqueConstraints": {},
5509+ "policies": {},
5510+ "checkConstraints": {},
5511+ "isRLSEnabled": false
5512+ },
5513+ "public.alert_events": {
5514+ "name": "alert_events",
5515+ "schema": "",
5516+ "columns": {
5517+ "id": {
5518+ "name": "id",
5519+ "type": "text",
5520+ "primaryKey": true,
5521+ "notNull": true
5522+ },
5523+ "alert_id": {
5524+ "name": "alert_id",
5525+ "type": "text",
5526+ "primaryKey": false,
5527+ "notNull": true
5528+ },
5529+ "user_id": {
5530+ "name": "user_id",
5531+ "type": "text",
5532+ "primaryKey": false,
5533+ "notNull": true
5534+ },
5535+ "message": {
5536+ "name": "message",
5537+ "type": "text",
5538+ "primaryKey": false,
5539+ "notNull": true
5540+ },
5541+ "payload": {
5542+ "name": "payload",
5543+ "type": "jsonb",
5544+ "primaryKey": false,
5545+ "notNull": true,
5546+ "default": "'{}'::jsonb"
5547+ },
5548+ "read_at": {
5549+ "name": "read_at",
5550+ "type": "timestamp with time zone",
5551+ "primaryKey": false,
5552+ "notNull": false
5553+ },
5554+ "created_at": {
5555+ "name": "created_at",
5556+ "type": "timestamp with time zone",
5557+ "primaryKey": false,
5558+ "notNull": true,
5559+ "default": "now()"
5560+ }
5561+ },
5562+ "indexes": {
5563+ "alert_events_user_idx": {
5564+ "name": "alert_events_user_idx",
5565+ "columns": [
5566+ {
5567+ "expression": "user_id",
5568+ "isExpression": false,
5569+ "asc": true,
5570+ "nulls": "last"
5571+ },
5572+ {
5573+ "expression": "created_at",
5574+ "isExpression": false,
5575+ "asc": true,
5576+ "nulls": "last"
5577+ }
5578+ ],
5579+ "isUnique": false,
5580+ "concurrently": false,
5581+ "method": "btree",
5582+ "with": {}
5583+ }
5584+ },
5585+ "foreignKeys": {},
5586+ "compositePrimaryKeys": {},
5587+ "uniqueConstraints": {},
5588+ "policies": {},
5589+ "checkConstraints": {},
5590+ "isRLSEnabled": false
5591+ },
5592+ "public.alerts": {
5593+ "name": "alerts",
5594+ "schema": "",
5595+ "columns": {
5596+ "id": {
5597+ "name": "id",
5598+ "type": "text",
5599+ "primaryKey": true,
5600+ "notNull": true
5601+ },
5602+ "user_id": {
5603+ "name": "user_id",
5604+ "type": "text",
5605+ "primaryKey": false,
5606+ "notNull": true
5607+ },
5608+ "alert_type": {
5609+ "name": "alert_type",
5610+ "type": "text",
5611+ "primaryKey": false,
5612+ "notNull": true
5613+ },
5614+ "target_type": {
5615+ "name": "target_type",
5616+ "type": "text",
5617+ "primaryKey": false,
5618+ "notNull": true
5619+ },
5620+ "target_id": {
5621+ "name": "target_id",
5622+ "type": "text",
5623+ "primaryKey": false,
5624+ "notNull": true
5625+ },
5626+ "threshold": {
5627+ "name": "threshold",
5628+ "type": "numeric(18, 4)",
5629+ "primaryKey": false,
5630+ "notNull": false
5631+ },
5632+ "currency": {
5633+ "name": "currency",
5634+ "type": "text",
5635+ "primaryKey": false,
5636+ "notNull": false
5637+ },
5638+ "params": {
5639+ "name": "params",
5640+ "type": "jsonb",
5641+ "primaryKey": false,
5642+ "notNull": true,
5643+ "default": "'{}'::jsonb"
5644+ },
5645+ "channel": {
5646+ "name": "channel",
5647+ "type": "text",
5648+ "primaryKey": false,
5649+ "notNull": true,
5650+ "default": "'inapp'"
5651+ },
5652+ "active": {
5653+ "name": "active",
5654+ "type": "boolean",
5655+ "primaryKey": false,
5656+ "notNull": true,
5657+ "default": true
5658+ },
5659+ "name": {
5660+ "name": "name",
5661+ "type": "text",
5662+ "primaryKey": false,
5663+ "notNull": false
5664+ },
5665+ "cooldown_minutes": {
5666+ "name": "cooldown_minutes",
5667+ "type": "integer",
5668+ "primaryKey": false,
5669+ "notNull": true,
5670+ "default": 1440
5671+ },
5672+ "last_triggered_at": {
5673+ "name": "last_triggered_at",
5674+ "type": "timestamp with time zone",
5675+ "primaryKey": false,
5676+ "notNull": false
5677+ },
5678+ "trigger_count": {
5679+ "name": "trigger_count",
5680+ "type": "integer",
5681+ "primaryKey": false,
5682+ "notNull": true,
5683+ "default": 0
5684+ },
5685+ "created_at": {
5686+ "name": "created_at",
5687+ "type": "timestamp with time zone",
5688+ "primaryKey": false,
5689+ "notNull": true,
5690+ "default": "now()"
5691+ }
5692+ },
5693+ "indexes": {
5694+ "alerts_user_idx": {
5695+ "name": "alerts_user_idx",
5696+ "columns": [
5697+ {
5698+ "expression": "user_id",
5699+ "isExpression": false,
5700+ "asc": true,
5701+ "nulls": "last"
5702+ }
5703+ ],
5704+ "isUnique": false,
5705+ "concurrently": false,
5706+ "method": "btree",
5707+ "with": {}
5708+ },
5709+ "alerts_target_idx": {
5710+ "name": "alerts_target_idx",
5711+ "columns": [
5712+ {
5713+ "expression": "target_type",
5714+ "isExpression": false,
5715+ "asc": true,
5716+ "nulls": "last"
5717+ },
5718+ {
5719+ "expression": "target_id",
5720+ "isExpression": false,
5721+ "asc": true,
5722+ "nulls": "last"
5723+ },
5724+ {
5725+ "expression": "active",
5726+ "isExpression": false,
5727+ "asc": true,
5728+ "nulls": "last"
5729+ }
5730+ ],
5731+ "isUnique": false,
5732+ "concurrently": false,
5733+ "method": "btree",
5734+ "with": {}
5735+ }
5736+ },
5737+ "foreignKeys": {},
5738+ "compositePrimaryKeys": {},
5739+ "uniqueConstraints": {},
5740+ "policies": {},
5741+ "checkConstraints": {},
5742+ "isRLSEnabled": false
5743+ },
5744+ "public.api_keys": {
5745+ "name": "api_keys",
5746+ "schema": "",
5747+ "columns": {
5748+ "id": {
5749+ "name": "id",
5750+ "type": "text",
5751+ "primaryKey": true,
5752+ "notNull": true
5753+ },
5754+ "user_id": {
5755+ "name": "user_id",
5756+ "type": "text",
5757+ "primaryKey": false,
5758+ "notNull": false
5759+ },
5760+ "name": {
5761+ "name": "name",
5762+ "type": "text",
5763+ "primaryKey": false,
5764+ "notNull": true
5765+ },
5766+ "prefix": {
5767+ "name": "prefix",
5768+ "type": "text",
5769+ "primaryKey": false,
5770+ "notNull": true
5771+ },
5772+ "key_hash": {
5773+ "name": "key_hash",
5774+ "type": "text",
5775+ "primaryKey": false,
5776+ "notNull": true
5777+ },
5778+ "tier": {
5779+ "name": "tier",
5780+ "type": "text",
5781+ "primaryKey": false,
5782+ "notNull": true,
5783+ "default": "'free'"
5784+ },
5785+ "rate_limit_per_minute": {
5786+ "name": "rate_limit_per_minute",
5787+ "type": "integer",
5788+ "primaryKey": false,
5789+ "notNull": true,
5790+ "default": 60
5791+ },
5792+ "daily_quota": {
5793+ "name": "daily_quota",
5794+ "type": "integer",
5795+ "primaryKey": false,
5796+ "notNull": true,
5797+ "default": 1000
5798+ },
5799+ "created_at": {
5800+ "name": "created_at",
5801+ "type": "timestamp with time zone",
5802+ "primaryKey": false,
5803+ "notNull": true,
5804+ "default": "now()"
5805+ },
5806+ "last_used_at": {
5807+ "name": "last_used_at",
5808+ "type": "timestamp with time zone",
5809+ "primaryKey": false,
5810+ "notNull": false
5811+ },
5812+ "revoked_at": {
5813+ "name": "revoked_at",
5814+ "type": "timestamp with time zone",
5815+ "primaryKey": false,
5816+ "notNull": false
5817+ }
5818+ },
5819+ "indexes": {
5820+ "api_keys_user_idx": {
5821+ "name": "api_keys_user_idx",
5822+ "columns": [
5823+ {
5824+ "expression": "user_id",
5825+ "isExpression": false,
5826+ "asc": true,
5827+ "nulls": "last"
5828+ }
5829+ ],
5830+ "isUnique": false,
5831+ "concurrently": false,
5832+ "method": "btree",
5833+ "with": {}
5834+ }
5835+ },
5836+ "foreignKeys": {},
5837+ "compositePrimaryKeys": {},
5838+ "uniqueConstraints": {
5839+ "api_keys_key_hash_unique": {
5840+ "name": "api_keys_key_hash_unique",
5841+ "nullsNotDistinct": false,
5842+ "columns": [
5843+ "key_hash"
5844+ ]
5845+ }
5846+ },
5847+ "policies": {},
5848+ "checkConstraints": {},
5849+ "isRLSEnabled": false
5850+ },
5851+ "public.api_usage": {
5852+ "name": "api_usage",
5853+ "schema": "",
5854+ "columns": {
5855+ "key_id": {
5856+ "name": "key_id",
5857+ "type": "text",
5858+ "primaryKey": false,
5859+ "notNull": true
5860+ },
5861+ "date": {
5862+ "name": "date",
5863+ "type": "date",
5864+ "primaryKey": false,
5865+ "notNull": true
5866+ },
5867+ "endpoint": {
5868+ "name": "endpoint",
5869+ "type": "text",
5870+ "primaryKey": false,
5871+ "notNull": true
5872+ },
5873+ "count": {
5874+ "name": "count",
5875+ "type": "integer",
5876+ "primaryKey": false,
5877+ "notNull": true,
5878+ "default": 0
5879+ },
5880+ "latency_ms_avg": {
5881+ "name": "latency_ms_avg",
5882+ "type": "real",
5883+ "primaryKey": false,
5884+ "notNull": false
5885+ }
5886+ },
5887+ "indexes": {},
5888+ "foreignKeys": {},
5889+ "compositePrimaryKeys": {
5890+ "api_usage_key_id_date_endpoint_pk": {
5891+ "name": "api_usage_key_id_date_endpoint_pk",
5892+ "columns": [
5893+ "key_id",
5894+ "date",
5895+ "endpoint"
5896+ ]
5897+ }
5898+ },
5899+ "uniqueConstraints": {},
5900+ "policies": {},
5901+ "checkConstraints": {},
5902+ "isRLSEnabled": false
5903+ },
5904+ "public.asset_views": {
5905+ "name": "asset_views",
5906+ "schema": "",
5907+ "columns": {
5908+ "asset_id": {
5909+ "name": "asset_id",
5910+ "type": "text",
5911+ "primaryKey": false,
5912+ "notNull": true
5913+ },
5914+ "date": {
5915+ "name": "date",
5916+ "type": "date",
5917+ "primaryKey": false,
5918+ "notNull": true
5919+ },
5920+ "views": {
5921+ "name": "views",
5922+ "type": "integer",
5923+ "primaryKey": false,
5924+ "notNull": true,
5925+ "default": 0
5926+ }
5927+ },
5928+ "indexes": {},
5929+ "foreignKeys": {},
5930+ "compositePrimaryKeys": {
5931+ "asset_views_asset_id_date_pk": {
5932+ "name": "asset_views_asset_id_date_pk",
5933+ "columns": [
5934+ "asset_id",
5935+ "date"
5936+ ]
5937+ }
5938+ },
5939+ "uniqueConstraints": {},
5940+ "policies": {},
5941+ "checkConstraints": {},
5942+ "isRLSEnabled": false
5943+ },
5944+ "public.collection_items": {
5945+ "name": "collection_items",
5946+ "schema": "",
5947+ "columns": {
5948+ "id": {
5949+ "name": "id",
5950+ "type": "text",
5951+ "primaryKey": true,
5952+ "notNull": true
5953+ },
5954+ "collection_id": {
5955+ "name": "collection_id",
5956+ "type": "text",
5957+ "primaryKey": false,
5958+ "notNull": true
5959+ },
5960+ "asset_id": {
5961+ "name": "asset_id",
5962+ "type": "text",
5963+ "primaryKey": false,
5964+ "notNull": true
5965+ },
5966+ "variant_id": {
5967+ "name": "variant_id",
5968+ "type": "text",
5969+ "primaryKey": false,
5970+ "notNull": false
5971+ },
5972+ "quantity": {
5973+ "name": "quantity",
5974+ "type": "integer",
5975+ "primaryKey": false,
5976+ "notNull": true,
5977+ "default": 1
5978+ },
5979+ "acquired_at": {
5980+ "name": "acquired_at",
5981+ "type": "date",
5982+ "primaryKey": false,
5983+ "notNull": false
5984+ },
5985+ "purchase_price": {
5986+ "name": "purchase_price",
5987+ "type": "numeric(18, 4)",
5988+ "primaryKey": false,
5989+ "notNull": false
5990+ },
5991+ "purchase_currency": {
5992+ "name": "purchase_currency",
5993+ "type": "text",
5994+ "primaryKey": false,
5995+ "notNull": false
5996+ },
5997+ "purchase_price_usd": {
5998+ "name": "purchase_price_usd",
5999+ "type": "numeric(18, 4)",
6000+ "primaryKey": false,
6001+ "notNull": false
6002+ },
6003+ "source": {
6004+ "name": "source",
6005+ "type": "text",
6006+ "primaryKey": false,
6007+ "notNull": false
6008+ },
6009+ "grader": {
6010+ "name": "grader",
6011+ "type": "text",
6012+ "primaryKey": false,
6013+ "notNull": false
6014+ },
6015+ "grade": {
6016+ "name": "grade",
6017+ "type": "text",
6018+ "primaryKey": false,
6019+ "notNull": false
6020+ },
6021+ "certification_number": {
6022+ "name": "certification_number",
6023+ "type": "text",
6024+ "primaryKey": false,
6025+ "notNull": false
6026+ },
6027+ "serial": {
6028+ "name": "serial",
6029+ "type": "text",
6030+ "primaryKey": false,
6031+ "notNull": false
6032+ },
6033+ "photos": {
6034+ "name": "photos",
6035+ "type": "jsonb",
6036+ "primaryKey": false,
6037+ "notNull": true,
6038+ "default": "'[]'::jsonb"
6039+ },
6040+ "notes": {
6041+ "name": "notes",
6042+ "type": "text",
6043+ "primaryKey": false,
6044+ "notNull": false
6045+ },
6046+ "tags": {
6047+ "name": "tags",
6048+ "type": "jsonb",
6049+ "primaryKey": false,
6050+ "notNull": true,
6051+ "default": "'[]'::jsonb"
6052+ },
6053+ "condition": {
6054+ "name": "condition",
6055+ "type": "text",
6056+ "primaryKey": false,
6057+ "notNull": false
6058+ },
6059+ "manual_value_usd": {
6060+ "name": "manual_value_usd",
6061+ "type": "numeric(18, 4)",
6062+ "primaryKey": false,
6063+ "notNull": false
6064+ },
6065+ "sold_at": {
6066+ "name": "sold_at",
6067+ "type": "date",
6068+ "primaryKey": false,
6069+ "notNull": false
6070+ },
6071+ "sold_price_usd": {
6072+ "name": "sold_price_usd",
6073+ "type": "numeric(18, 4)",
6074+ "primaryKey": false,
6075+ "notNull": false
6076+ },
6077+ "created_at": {
6078+ "name": "created_at",
6079+ "type": "timestamp with time zone",
6080+ "primaryKey": false,
6081+ "notNull": true,
6082+ "default": "now()"
6083+ },
6084+ "updated_at": {
6085+ "name": "updated_at",
6086+ "type": "timestamp with time zone",
6087+ "primaryKey": false,
6088+ "notNull": true,
6089+ "default": "now()"
6090+ }
6091+ },
6092+ "indexes": {
6093+ "collection_items_collection_idx": {
6094+ "name": "collection_items_collection_idx",
6095+ "columns": [
6096+ {
6097+ "expression": "collection_id",
6098+ "isExpression": false,
6099+ "asc": true,
6100+ "nulls": "last"
6101+ }
6102+ ],
6103+ "isUnique": false,
6104+ "concurrently": false,
6105+ "method": "btree",
6106+ "with": {}
6107+ },
6108+ "collection_items_asset_idx": {
6109+ "name": "collection_items_asset_idx",
6110+ "columns": [
6111+ {
6112+ "expression": "asset_id",
6113+ "isExpression": false,
6114+ "asc": true,
6115+ "nulls": "last"
6116+ }
6117+ ],
6118+ "isUnique": false,
6119+ "concurrently": false,
6120+ "method": "btree",
6121+ "with": {}
6122+ }
6123+ },
6124+ "foreignKeys": {},
6125+ "compositePrimaryKeys": {},
6126+ "uniqueConstraints": {},
6127+ "policies": {},
6128+ "checkConstraints": {},
6129+ "isRLSEnabled": false
6130+ },
6131+ "public.collection_snapshots": {
6132+ "name": "collection_snapshots",
6133+ "schema": "",
6134+ "columns": {
6135+ "collection_id": {
6136+ "name": "collection_id",
6137+ "type": "text",
6138+ "primaryKey": false,
6139+ "notNull": true
6140+ },
6141+ "date": {
6142+ "name": "date",
6143+ "type": "date",
6144+ "primaryKey": false,
6145+ "notNull": true
6146+ },
6147+ "value_usd": {
6148+ "name": "value_usd",
6149+ "type": "numeric(18, 4)",
6150+ "primaryKey": false,
6151+ "notNull": true
6152+ },
6153+ "cost_basis_usd": {
6154+ "name": "cost_basis_usd",
6155+ "type": "numeric(18, 4)",
6156+ "primaryKey": false,
6157+ "notNull": true
6158+ },
6159+ "items": {
6160+ "name": "items",
6161+ "type": "integer",
6162+ "primaryKey": false,
6163+ "notNull": true
6164+ }
6165+ },
6166+ "indexes": {},
6167+ "foreignKeys": {},
6168+ "compositePrimaryKeys": {
6169+ "collection_snapshots_collection_id_date_pk": {
6170+ "name": "collection_snapshots_collection_id_date_pk",
6171+ "columns": [
6172+ "collection_id",
6173+ "date"
6174+ ]
6175+ }
6176+ },
6177+ "uniqueConstraints": {},
6178+ "policies": {},
6179+ "checkConstraints": {},
6180+ "isRLSEnabled": false
6181+ },
6182+ "public.collections": {
6183+ "name": "collections",
6184+ "schema": "",
6185+ "columns": {
6186+ "id": {
6187+ "name": "id",
6188+ "type": "text",
6189+ "primaryKey": true,
6190+ "notNull": true
6191+ },
6192+ "user_id": {
6193+ "name": "user_id",
6194+ "type": "text",
6195+ "primaryKey": false,
6196+ "notNull": true
6197+ },
6198+ "name": {
6199+ "name": "name",
6200+ "type": "text",
6201+ "primaryKey": false,
6202+ "notNull": true
6203+ },
6204+ "description": {
6205+ "name": "description",
6206+ "type": "text",
6207+ "primaryKey": false,
6208+ "notNull": false
6209+ },
6210+ "is_public": {
6211+ "name": "is_public",
6212+ "type": "boolean",
6213+ "primaryKey": false,
6214+ "notNull": true,
6215+ "default": false
6216+ },
6217+ "public_slug": {
6218+ "name": "public_slug",
6219+ "type": "text",
6220+ "primaryKey": false,
6221+ "notNull": false
6222+ },
6223+ "kind": {
6224+ "name": "kind",
6225+ "type": "text",
6226+ "primaryKey": false,
6227+ "notNull": true,
6228+ "default": "'collection'"
6229+ },
6230+ "budget_usd": {
6231+ "name": "budget_usd",
6232+ "type": "numeric(18, 4)",
6233+ "primaryKey": false,
6234+ "notNull": false
6235+ },
6236+ "color": {
6237+ "name": "color",
6238+ "type": "text",
6239+ "primaryKey": false,
6240+ "notNull": false
6241+ },
6242+ "created_at": {
6243+ "name": "created_at",
6244+ "type": "timestamp with time zone",
6245+ "primaryKey": false,
6246+ "notNull": true,
6247+ "default": "now()"
6248+ },
6249+ "updated_at": {
6250+ "name": "updated_at",
6251+ "type": "timestamp with time zone",
6252+ "primaryKey": false,
6253+ "notNull": true,
6254+ "default": "now()"
6255+ }
6256+ },
6257+ "indexes": {
6258+ "collections_user_idx": {
6259+ "name": "collections_user_idx",
6260+ "columns": [
6261+ {
6262+ "expression": "user_id",
6263+ "isExpression": false,
6264+ "asc": true,
6265+ "nulls": "last"
6266+ }
6267+ ],
6268+ "isUnique": false,
6269+ "concurrently": false,
6270+ "method": "btree",
6271+ "with": {}
6272+ },
6273+ "collections_public_slug_uq": {
6274+ "name": "collections_public_slug_uq",
6275+ "columns": [
6276+ {
6277+ "expression": "public_slug",
6278+ "isExpression": false,
6279+ "asc": true,
6280+ "nulls": "last"
6281+ }
6282+ ],
6283+ "isUnique": true,
6284+ "concurrently": false,
6285+ "method": "btree",
6286+ "with": {}
6287+ }
6288+ },
6289+ "foreignKeys": {},
6290+ "compositePrimaryKeys": {},
6291+ "uniqueConstraints": {},
6292+ "policies": {},
6293+ "checkConstraints": {},
6294+ "isRLSEnabled": false
6295+ },
6296+ "public.search_log": {
6297+ "name": "search_log",
6298+ "schema": "",
6299+ "columns": {
6300+ "id": {
6301+ "name": "id",
6302+ "type": "text",
6303+ "primaryKey": true,
6304+ "notNull": true
6305+ },
6306+ "query": {
6307+ "name": "query",
6308+ "type": "text",
6309+ "primaryKey": false,
6310+ "notNull": true
6311+ },
6312+ "normalized": {
6313+ "name": "normalized",
6314+ "type": "text",
6315+ "primaryKey": false,
6316+ "notNull": true
6317+ },
6318+ "results": {
6319+ "name": "results",
6320+ "type": "integer",
6321+ "primaryKey": false,
6322+ "notNull": true
6323+ },
6324+ "user_id": {
6325+ "name": "user_id",
6326+ "type": "text",
6327+ "primaryKey": false,
6328+ "notNull": false
6329+ },
6330+ "created_at": {
6331+ "name": "created_at",
6332+ "type": "timestamp with time zone",
6333+ "primaryKey": false,
6334+ "notNull": true,
6335+ "default": "now()"
6336+ }
6337+ },
6338+ "indexes": {
6339+ "search_log_created_idx": {
6340+ "name": "search_log_created_idx",
6341+ "columns": [
6342+ {
6343+ "expression": "created_at",
6344+ "isExpression": false,
6345+ "asc": true,
6346+ "nulls": "last"
6347+ }
6348+ ],
6349+ "isUnique": false,
6350+ "concurrently": false,
6351+ "method": "btree",
6352+ "with": {}
6353+ },
6354+ "search_log_normalized_idx": {
6355+ "name": "search_log_normalized_idx",
6356+ "columns": [
6357+ {
6358+ "expression": "normalized",
6359+ "isExpression": false,
6360+ "asc": true,
6361+ "nulls": "last"
6362+ }
6363+ ],
6364+ "isUnique": false,
6365+ "concurrently": false,
6366+ "method": "btree",
6367+ "with": {}
6368+ }
6369+ },
6370+ "foreignKeys": {},
6371+ "compositePrimaryKeys": {},
6372+ "uniqueConstraints": {},
6373+ "policies": {},
6374+ "checkConstraints": {},
6375+ "isRLSEnabled": false
6376+ },
6377+ "public.sessions": {
6378+ "name": "sessions",
6379+ "schema": "",
6380+ "columns": {
6381+ "id": {
6382+ "name": "id",
6383+ "type": "text",
6384+ "primaryKey": true,
6385+ "notNull": true
6386+ },
6387+ "user_id": {
6388+ "name": "user_id",
6389+ "type": "text",
6390+ "primaryKey": false,
6391+ "notNull": true
6392+ },
6393+ "expires_at": {
6394+ "name": "expires_at",
6395+ "type": "timestamp with time zone",
6396+ "primaryKey": false,
6397+ "notNull": true
6398+ },
6399+ "user_agent": {
6400+ "name": "user_agent",
6401+ "type": "text",
6402+ "primaryKey": false,
6403+ "notNull": false
6404+ },
6405+ "ip": {
6406+ "name": "ip",
6407+ "type": "text",
6408+ "primaryKey": false,
6409+ "notNull": false
6410+ },
6411+ "last_seen_at": {
6412+ "name": "last_seen_at",
6413+ "type": "timestamp with time zone",
6414+ "primaryKey": false,
6415+ "notNull": false
6416+ },
6417+ "revoked_at": {
6418+ "name": "revoked_at",
6419+ "type": "timestamp with time zone",
6420+ "primaryKey": false,
6421+ "notNull": false
6422+ },
6423+ "created_at": {
6424+ "name": "created_at",
6425+ "type": "timestamp with time zone",
6426+ "primaryKey": false,
6427+ "notNull": true,
6428+ "default": "now()"
6429+ }
6430+ },
6431+ "indexes": {
6432+ "sessions_user_idx": {
6433+ "name": "sessions_user_idx",
6434+ "columns": [
6435+ {
6436+ "expression": "user_id",
6437+ "isExpression": false,
6438+ "asc": true,
6439+ "nulls": "last"
6440+ }
6441+ ],
6442+ "isUnique": false,
6443+ "concurrently": false,
6444+ "method": "btree",
6445+ "with": {}
6446+ }
6447+ },
6448+ "foreignKeys": {},
6449+ "compositePrimaryKeys": {},
6450+ "uniqueConstraints": {},
6451+ "policies": {},
6452+ "checkConstraints": {},
6453+ "isRLSEnabled": false
6454+ },
6455+ "public.users": {
6456+ "name": "users",
6457+ "schema": "",
6458+ "columns": {
6459+ "id": {
6460+ "name": "id",
6461+ "type": "text",
6462+ "primaryKey": true,
6463+ "notNull": true
6464+ },
6465+ "email": {
6466+ "name": "email",
6467+ "type": "text",
6468+ "primaryKey": false,
6469+ "notNull": true
6470+ },
6471+ "email_verified_at": {
6472+ "name": "email_verified_at",
6473+ "type": "timestamp with time zone",
6474+ "primaryKey": false,
6475+ "notNull": false
6476+ },
6477+ "password_hash": {
6478+ "name": "password_hash",
6479+ "type": "text",
6480+ "primaryKey": false,
6481+ "notNull": false
6482+ },
6483+ "name": {
6484+ "name": "name",
6485+ "type": "text",
6486+ "primaryKey": false,
6487+ "notNull": false
6488+ },
6489+ "role": {
6490+ "name": "role",
6491+ "type": "text",
6492+ "primaryKey": false,
6493+ "notNull": true,
6494+ "default": "'user'"
6495+ },
6496+ "display_currency": {
6497+ "name": "display_currency",
6498+ "type": "text",
6499+ "primaryKey": false,
6500+ "notNull": true,
6501+ "default": "'USD'"
6502+ },
6503+ "providers": {
6504+ "name": "providers",
6505+ "type": "jsonb",
6506+ "primaryKey": false,
6507+ "notNull": true,
6508+ "default": "'[]'::jsonb"
6509+ },
6510+ "preferences": {
6511+ "name": "preferences",
6512+ "type": "jsonb",
6513+ "primaryKey": false,
6514+ "notNull": true,
6515+ "default": "'{}'::jsonb"
6516+ },
6517+ "handle": {
6518+ "name": "handle",
6519+ "type": "text",
6520+ "primaryKey": false,
6521+ "notNull": false
6522+ },
6523+ "avatar_url": {
6524+ "name": "avatar_url",
6525+ "type": "text",
6526+ "primaryKey": false,
6527+ "notNull": false
6528+ },
6529+ "bio": {
6530+ "name": "bio",
6531+ "type": "text",
6532+ "primaryKey": false,
6533+ "notNull": false
6534+ },
6535+ "mfa_enabled": {
6536+ "name": "mfa_enabled",
6537+ "type": "boolean",
6538+ "primaryKey": false,
6539+ "notNull": true,
6540+ "default": false
6541+ },
6542+ "totp_secret_enc": {
6543+ "name": "totp_secret_enc",
6544+ "type": "text",
6545+ "primaryKey": false,
6546+ "notNull": false
6547+ },
6548+ "always_ask_code": {
6549+ "name": "always_ask_code",
6550+ "type": "boolean",
6551+ "primaryKey": false,
6552+ "notNull": true,
6553+ "default": true
6554+ },
6555+ "password_changed_at": {
6556+ "name": "password_changed_at",
6557+ "type": "timestamp with time zone",
6558+ "primaryKey": false,
6559+ "notNull": false
6560+ },
6561+ "pending_email": {
6562+ "name": "pending_email",
6563+ "type": "text",
6564+ "primaryKey": false,
6565+ "notNull": false
6566+ },
6567+ "deleted_at": {
6568+ "name": "deleted_at",
6569+ "type": "timestamp with time zone",
6570+ "primaryKey": false,
6571+ "notNull": false
6572+ },
6573+ "purge_after": {
6574+ "name": "purge_after",
6575+ "type": "timestamp with time zone",
6576+ "primaryKey": false,
6577+ "notNull": false
6578+ },
6579+ "created_at": {
6580+ "name": "created_at",
6581+ "type": "timestamp with time zone",
6582+ "primaryKey": false,
6583+ "notNull": true,
6584+ "default": "now()"
6585+ },
6586+ "last_login_at": {
6587+ "name": "last_login_at",
6588+ "type": "timestamp with time zone",
6589+ "primaryKey": false,
6590+ "notNull": false
6591+ }
6592+ },
6593+ "indexes": {},
6594+ "foreignKeys": {},
6595+ "compositePrimaryKeys": {},
6596+ "uniqueConstraints": {
6597+ "users_email_unique": {
6598+ "name": "users_email_unique",
6599+ "nullsNotDistinct": false,
6600+ "columns": [
6601+ "email"
6602+ ]
6603+ },
6604+ "users_handle_unique": {
6605+ "name": "users_handle_unique",
6606+ "nullsNotDistinct": false,
6607+ "columns": [
6608+ "handle"
6609+ ]
6610+ }
6611+ },
6612+ "policies": {},
6613+ "checkConstraints": {},
6614+ "isRLSEnabled": false
6615+ },
6616+ "public.watchlist_items": {
6617+ "name": "watchlist_items",
6618+ "schema": "",
6619+ "columns": {
6620+ "id": {
6621+ "name": "id",
6622+ "type": "text",
6623+ "primaryKey": true,
6624+ "notNull": true
6625+ },
6626+ "watchlist_id": {
6627+ "name": "watchlist_id",
6628+ "type": "text",
6629+ "primaryKey": false,
6630+ "notNull": true
6631+ },
6632+ "target_type": {
6633+ "name": "target_type",
6634+ "type": "text",
6635+ "primaryKey": false,
6636+ "notNull": true
6637+ },
6638+ "target_id": {
6639+ "name": "target_id",
6640+ "type": "text",
6641+ "primaryKey": false,
6642+ "notNull": true
6643+ },
6644+ "label": {
6645+ "name": "label",
6646+ "type": "text",
6647+ "primaryKey": false,
6648+ "notNull": false
6649+ },
6650+ "note": {
6651+ "name": "note",
6652+ "type": "text",
6653+ "primaryKey": false,
6654+ "notNull": false
6655+ },
6656+ "target_price_usd": {
6657+ "name": "target_price_usd",
6658+ "type": "numeric(18, 4)",
6659+ "primaryKey": false,
6660+ "notNull": false
6661+ },
6662+ "baseline_usd": {
6663+ "name": "baseline_usd",
6664+ "type": "numeric(18, 4)",
6665+ "primaryKey": false,
6666+ "notNull": false
6667+ },
6668+ "created_at": {
6669+ "name": "created_at",
6670+ "type": "timestamp with time zone",
6671+ "primaryKey": false,
6672+ "notNull": true,
6673+ "default": "now()"
6674+ }
6675+ },
6676+ "indexes": {
6677+ "watchlist_items_uq": {
6678+ "name": "watchlist_items_uq",
6679+ "columns": [
6680+ {
6681+ "expression": "watchlist_id",
6682+ "isExpression": false,
6683+ "asc": true,
6684+ "nulls": "last"
6685+ },
6686+ {
6687+ "expression": "target_type",
6688+ "isExpression": false,
6689+ "asc": true,
6690+ "nulls": "last"
6691+ },
6692+ {
6693+ "expression": "target_id",
6694+ "isExpression": false,
6695+ "asc": true,
6696+ "nulls": "last"
6697+ }
6698+ ],
6699+ "isUnique": true,
6700+ "concurrently": false,
6701+ "method": "btree",
6702+ "with": {}
6703+ }
6704+ },
6705+ "foreignKeys": {},
6706+ "compositePrimaryKeys": {},
6707+ "uniqueConstraints": {},
6708+ "policies": {},
6709+ "checkConstraints": {},
6710+ "isRLSEnabled": false
6711+ },
6712+ "public.watchlists": {
6713+ "name": "watchlists",
6714+ "schema": "",
6715+ "columns": {
6716+ "id": {
6717+ "name": "id",
6718+ "type": "text",
6719+ "primaryKey": true,
6720+ "notNull": true
6721+ },
6722+ "user_id": {
6723+ "name": "user_id",
6724+ "type": "text",
6725+ "primaryKey": false,
6726+ "notNull": true
6727+ },
6728+ "name": {
6729+ "name": "name",
6730+ "type": "text",
6731+ "primaryKey": false,
6732+ "notNull": true,
6733+ "default": "'Watchlist'"
6734+ },
6735+ "created_at": {
6736+ "name": "created_at",
6737+ "type": "timestamp with time zone",
6738+ "primaryKey": false,
6739+ "notNull": true,
6740+ "default": "now()"
6741+ }
6742+ },
6743+ "indexes": {
6744+ "watchlists_user_idx": {
6745+ "name": "watchlists_user_idx",
6746+ "columns": [
6747+ {
6748+ "expression": "user_id",
6749+ "isExpression": false,
6750+ "asc": true,
6751+ "nulls": "last"
6752+ }
6753+ ],
6754+ "isUnique": false,
6755+ "concurrently": false,
6756+ "method": "btree",
6757+ "with": {}
6758+ }
6759+ },
6760+ "foreignKeys": {},
6761+ "compositePrimaryKeys": {},
6762+ "uniqueConstraints": {},
6763+ "policies": {},
6764+ "checkConstraints": {},
6765+ "isRLSEnabled": false
6766+ },
6767+ "public.ai_quotas": {
6768+ "name": "ai_quotas",
6769+ "schema": "",
6770+ "columns": {
6771+ "key": {
6772+ "name": "key",
6773+ "type": "text",
6774+ "primaryKey": false,
6775+ "notNull": true
6776+ },
6777+ "feature": {
6778+ "name": "feature",
6779+ "type": "text",
6780+ "primaryKey": false,
6781+ "notNull": true
6782+ },
6783+ "date": {
6784+ "name": "date",
6785+ "type": "text",
6786+ "primaryKey": false,
6787+ "notNull": true
6788+ },
6789+ "count": {
6790+ "name": "count",
6791+ "type": "integer",
6792+ "primaryKey": false,
6793+ "notNull": true,
6794+ "default": 0
6795+ }
6796+ },
6797+ "indexes": {
6798+ "ai_quotas_uq": {
6799+ "name": "ai_quotas_uq",
6800+ "columns": [
6801+ {
6802+ "expression": "key",
6803+ "isExpression": false,
6804+ "asc": true,
6805+ "nulls": "last"
6806+ },
6807+ {
6808+ "expression": "feature",
6809+ "isExpression": false,
6810+ "asc": true,
6811+ "nulls": "last"
6812+ },
6813+ {
6814+ "expression": "date",
6815+ "isExpression": false,
6816+ "asc": true,
6817+ "nulls": "last"
6818+ }
6819+ ],
6820+ "isUnique": false,
6821+ "concurrently": false,
6822+ "method": "btree",
6823+ "with": {}
6824+ }
6825+ },
6826+ "foreignKeys": {},
6827+ "compositePrimaryKeys": {},
6828+ "uniqueConstraints": {},
6829+ "policies": {},
6830+ "checkConstraints": {},
6831+ "isRLSEnabled": false
6832+ },
6833+ "public.research_messages": {
6834+ "name": "research_messages",
6835+ "schema": "",
6836+ "columns": {
6837+ "id": {
6838+ "name": "id",
6839+ "type": "text",
6840+ "primaryKey": true,
6841+ "notNull": true
6842+ },
6843+ "session_id": {
6844+ "name": "session_id",
6845+ "type": "text",
6846+ "primaryKey": false,
6847+ "notNull": true
6848+ },
6849+ "role": {
6850+ "name": "role",
6851+ "type": "text",
6852+ "primaryKey": false,
6853+ "notNull": true
6854+ },
6855+ "content": {
6856+ "name": "content",
6857+ "type": "text",
6858+ "primaryKey": false,
6859+ "notNull": true
6860+ },
6861+ "tool_calls": {
6862+ "name": "tool_calls",
6863+ "type": "jsonb",
6864+ "primaryKey": false,
6865+ "notNull": true,
6866+ "default": "'[]'::jsonb"
6867+ },
6868+ "usage": {
6869+ "name": "usage",
6870+ "type": "jsonb",
6871+ "primaryKey": false,
6872+ "notNull": true,
6873+ "default": "'{}'::jsonb"
6874+ },
6875+ "usd_est": {
6876+ "name": "usd_est",
6877+ "type": "real",
6878+ "primaryKey": false,
6879+ "notNull": true,
6880+ "default": 0
6881+ },
6882+ "model": {
6883+ "name": "model",
6884+ "type": "text",
6885+ "primaryKey": false,
6886+ "notNull": false
6887+ },
6888+ "created_at": {
6889+ "name": "created_at",
6890+ "type": "timestamp with time zone",
6891+ "primaryKey": false,
6892+ "notNull": true,
6893+ "default": "now()"
6894+ }
6895+ },
6896+ "indexes": {
6897+ "research_messages_session_idx": {
6898+ "name": "research_messages_session_idx",
6899+ "columns": [
6900+ {
6901+ "expression": "session_id",
6902+ "isExpression": false,
6903+ "asc": true,
6904+ "nulls": "last"
6905+ },
6906+ {
6907+ "expression": "created_at",
6908+ "isExpression": false,
6909+ "asc": true,
6910+ "nulls": "last"
6911+ }
6912+ ],
6913+ "isUnique": false,
6914+ "concurrently": false,
6915+ "method": "btree",
6916+ "with": {}
6917+ }
6918+ },
6919+ "foreignKeys": {},
6920+ "compositePrimaryKeys": {},
6921+ "uniqueConstraints": {},
6922+ "policies": {},
6923+ "checkConstraints": {},
6924+ "isRLSEnabled": false
6925+ },
6926+ "public.research_sessions": {
6927+ "name": "research_sessions",
6928+ "schema": "",
6929+ "columns": {
6930+ "id": {
6931+ "name": "id",
6932+ "type": "text",
6933+ "primaryKey": true,
6934+ "notNull": true
6935+ },
6936+ "user_id": {
6937+ "name": "user_id",
6938+ "type": "text",
6939+ "primaryKey": false,
6940+ "notNull": false
6941+ },
6942+ "anon_id": {
6943+ "name": "anon_id",
6944+ "type": "text",
6945+ "primaryKey": false,
6946+ "notNull": false
6947+ },
6948+ "title": {
6949+ "name": "title",
6950+ "type": "text",
6951+ "primaryKey": false,
6952+ "notNull": false
6953+ },
6954+ "model": {
6955+ "name": "model",
6956+ "type": "text",
6957+ "primaryKey": false,
6958+ "notNull": false
6959+ },
6960+ "message_count": {
6961+ "name": "message_count",
6962+ "type": "integer",
6963+ "primaryKey": false,
6964+ "notNull": true,
6965+ "default": 0
6966+ },
6967+ "usd_est": {
6968+ "name": "usd_est",
6969+ "type": "real",
6970+ "primaryKey": false,
6971+ "notNull": true,
6972+ "default": 0
6973+ },
6974+ "archived": {
6975+ "name": "archived",
6976+ "type": "boolean",
6977+ "primaryKey": false,
6978+ "notNull": true,
6979+ "default": false
6980+ },
6981+ "created_at": {
6982+ "name": "created_at",
6983+ "type": "timestamp with time zone",
6984+ "primaryKey": false,
6985+ "notNull": true,
6986+ "default": "now()"
6987+ },
6988+ "updated_at": {
6989+ "name": "updated_at",
6990+ "type": "timestamp with time zone",
6991+ "primaryKey": false,
6992+ "notNull": true,
6993+ "default": "now()"
6994+ }
6995+ },
6996+ "indexes": {
6997+ "research_sessions_anon_idx": {
6998+ "name": "research_sessions_anon_idx",
6999+ "columns": [
7000+ {
7001+ "expression": "anon_id",
7002+ "isExpression": false,
7003+ "asc": true,
7004+ "nulls": "last"
7005+ },
7006+ {
7007+ "expression": "updated_at",
7008+ "isExpression": false,
7009+ "asc": true,
7010+ "nulls": "last"
7011+ }
7012+ ],
7013+ "isUnique": false,
7014+ "concurrently": false,
7015+ "method": "btree",
7016+ "with": {}
7017+ },
7018+ "research_sessions_user_idx": {
7019+ "name": "research_sessions_user_idx",
7020+ "columns": [
7021+ {
7022+ "expression": "user_id",
7023+ "isExpression": false,
7024+ "asc": true,
7025+ "nulls": "last"
7026+ },
7027+ {
7028+ "expression": "updated_at",
7029+ "isExpression": false,
7030+ "asc": true,
7031+ "nulls": "last"
7032+ }
7033+ ],
7034+ "isUnique": false,
7035+ "concurrently": false,
7036+ "method": "btree",
7037+ "with": {}
7038+ }
7039+ },
7040+ "foreignKeys": {},
7041+ "compositePrimaryKeys": {},
7042+ "uniqueConstraints": {},
7043+ "policies": {},
7044+ "checkConstraints": {},
7045+ "isRLSEnabled": false
7046+ },
7047+ "public.scanner_sessions": {
7048+ "name": "scanner_sessions",
7049+ "schema": "",
7050+ "columns": {
7051+ "id": {
7052+ "name": "id",
7053+ "type": "text",
7054+ "primaryKey": true,
7055+ "notNull": true
7056+ },
7057+ "user_id": {
7058+ "name": "user_id",
7059+ "type": "text",
7060+ "primaryKey": false,
7061+ "notNull": false
7062+ },
7063+ "anon_id": {
7064+ "name": "anon_id",
7065+ "type": "text",
7066+ "primaryKey": false,
7067+ "notNull": false
7068+ },
7069+ "ip_hash": {
7070+ "name": "ip_hash",
7071+ "type": "text",
7072+ "primaryKey": false,
7073+ "notNull": false
7074+ },
7075+ "mode": {
7076+ "name": "mode",
7077+ "type": "text",
7078+ "primaryKey": false,
7079+ "notNull": true
7080+ },
7081+ "input_url": {
7082+ "name": "input_url",
7083+ "type": "text",
7084+ "primaryKey": false,
7085+ "notNull": false
7086+ },
7087+ "input_text": {
7088+ "name": "input_text",
7089+ "type": "text",
7090+ "primaryKey": false,
7091+ "notNull": false
7092+ },
7093+ "image_count": {
7094+ "name": "image_count",
7095+ "type": "integer",
7096+ "primaryKey": false,
7097+ "notNull": true,
7098+ "default": 0
7099+ },
7100+ "thumbnails": {
7101+ "name": "thumbnails",
7102+ "type": "jsonb",
7103+ "primaryKey": false,
7104+ "notNull": true,
7105+ "default": "'[]'::jsonb"
7106+ },
7107+ "guess": {
7108+ "name": "guess",
7109+ "type": "jsonb",
7110+ "primaryKey": false,
7111+ "notNull": true,
7112+ "default": "'{}'::jsonb"
7113+ },
7114+ "guess_confidence": {
7115+ "name": "guess_confidence",
7116+ "type": "real",
7117+ "primaryKey": false,
7118+ "notNull": false
7119+ },
7120+ "candidates": {
7121+ "name": "candidates",
7122+ "type": "jsonb",
7123+ "primaryKey": false,
7124+ "notNull": true,
7125+ "default": "'[]'::jsonb"
7126+ },
7127+ "chosen_asset_id": {
7128+ "name": "chosen_asset_id",
7129+ "type": "text",
7130+ "primaryKey": false,
7131+ "notNull": false
7132+ },
7133+ "listing": {
7134+ "name": "listing",
7135+ "type": "jsonb",
7136+ "primaryKey": false,
7137+ "notNull": true,
7138+ "default": "'{}'::jsonb"
7139+ },
7140+ "model": {
7141+ "name": "model",
7142+ "type": "text",
7143+ "primaryKey": false,
7144+ "notNull": false
7145+ },
7146+ "usd_est": {
7147+ "name": "usd_est",
7148+ "type": "real",
7149+ "primaryKey": false,
7150+ "notNull": true,
7151+ "default": 0
7152+ },
7153+ "duration_ms": {
7154+ "name": "duration_ms",
7155+ "type": "integer",
7156+ "primaryKey": false,
7157+ "notNull": false
7158+ },
7159+ "error": {
7160+ "name": "error",
7161+ "type": "text",
7162+ "primaryKey": false,
7163+ "notNull": false
7164+ },
7165+ "created_at": {
7166+ "name": "created_at",
7167+ "type": "timestamp with time zone",
7168+ "primaryKey": false,
7169+ "notNull": true,
7170+ "default": "now()"
7171+ },
7172+ "chosen_at": {
7173+ "name": "chosen_at",
7174+ "type": "timestamp with time zone",
7175+ "primaryKey": false,
7176+ "notNull": false
7177+ }
7178+ },
7179+ "indexes": {
7180+ "scanner_sessions_created_idx": {
7181+ "name": "scanner_sessions_created_idx",
7182+ "columns": [
7183+ {
7184+ "expression": "created_at",
7185+ "isExpression": false,
7186+ "asc": true,
7187+ "nulls": "last"
7188+ }
7189+ ],
7190+ "isUnique": false,
7191+ "concurrently": false,
7192+ "method": "btree",
7193+ "with": {}
7194+ },
7195+ "scanner_sessions_ip_idx": {
7196+ "name": "scanner_sessions_ip_idx",
7197+ "columns": [
7198+ {
7199+ "expression": "ip_hash",
7200+ "isExpression": false,
7201+ "asc": true,
7202+ "nulls": "last"
7203+ },
7204+ {
7205+ "expression": "created_at",
7206+ "isExpression": false,
7207+ "asc": true,
7208+ "nulls": "last"
7209+ }
7210+ ],
7211+ "isUnique": false,
7212+ "concurrently": false,
7213+ "method": "btree",
7214+ "with": {}
7215+ },
7216+ "scanner_sessions_user_idx": {
7217+ "name": "scanner_sessions_user_idx",
7218+ "columns": [
7219+ {
7220+ "expression": "user_id",
7221+ "isExpression": false,
7222+ "asc": true,
7223+ "nulls": "last"
7224+ }
7225+ ],
7226+ "isUnique": false,
7227+ "concurrently": false,
7228+ "method": "btree",
7229+ "with": {}
7230+ }
7231+ },
7232+ "foreignKeys": {},
7233+ "compositePrimaryKeys": {},
7234+ "uniqueConstraints": {},
7235+ "policies": {},
7236+ "checkConstraints": {},
7237+ "isRLSEnabled": false
7238+ },
7239+ "public.auth_codes": {
7240+ "name": "auth_codes",
7241+ "schema": "",
7242+ "columns": {
7243+ "id": {
7244+ "name": "id",
7245+ "type": "text",
7246+ "primaryKey": true,
7247+ "notNull": true
7248+ },
7249+ "user_id": {
7250+ "name": "user_id",
7251+ "type": "text",
7252+ "primaryKey": false,
7253+ "notNull": false
7254+ },
7255+ "email": {
7256+ "name": "email",
7257+ "type": "text",
7258+ "primaryKey": false,
7259+ "notNull": true
7260+ },
7261+ "purpose": {
7262+ "name": "purpose",
7263+ "type": "text",
7264+ "primaryKey": false,
7265+ "notNull": true
7266+ },
7267+ "code_hash": {
7268+ "name": "code_hash",
7269+ "type": "text",
7270+ "primaryKey": false,
7271+ "notNull": true
7272+ },
7273+ "expires_at": {
7274+ "name": "expires_at",
7275+ "type": "timestamp with time zone",
7276+ "primaryKey": false,
7277+ "notNull": true
7278+ },
7279+ "attempts": {
7280+ "name": "attempts",
7281+ "type": "integer",
7282+ "primaryKey": false,
7283+ "notNull": true,
7284+ "default": 0
7285+ },
7286+ "consumed_at": {
7287+ "name": "consumed_at",
7288+ "type": "timestamp with time zone",
7289+ "primaryKey": false,
7290+ "notNull": false
7291+ },
7292+ "payload": {
7293+ "name": "payload",
7294+ "type": "jsonb",
7295+ "primaryKey": false,
7296+ "notNull": true,
7297+ "default": "'{}'::jsonb"
7298+ },
7299+ "created_at": {
7300+ "name": "created_at",
7301+ "type": "timestamp with time zone",
7302+ "primaryKey": false,
7303+ "notNull": true,
7304+ "default": "now()"
7305+ }
7306+ },
7307+ "indexes": {
7308+ "auth_codes_lookup_idx": {
7309+ "name": "auth_codes_lookup_idx",
7310+ "columns": [
7311+ {
7312+ "expression": "email",
7313+ "isExpression": false,
7314+ "asc": true,
7315+ "nulls": "last"
7316+ },
7317+ {
7318+ "expression": "purpose",
7319+ "isExpression": false,
7320+ "asc": true,
7321+ "nulls": "last"
7322+ },
7323+ {
7324+ "expression": "created_at",
7325+ "isExpression": false,
7326+ "asc": true,
7327+ "nulls": "last"
7328+ }
7329+ ],
7330+ "isUnique": false,
7331+ "concurrently": false,
7332+ "method": "btree",
7333+ "with": {}
7334+ }
7335+ },
7336+ "foreignKeys": {},
7337+ "compositePrimaryKeys": {},
7338+ "uniqueConstraints": {},
7339+ "policies": {},
7340+ "checkConstraints": {},
7341+ "isRLSEnabled": false
7342+ },
7343+ "public.login_events": {
7344+ "name": "login_events",
7345+ "schema": "",
7346+ "columns": {
7347+ "id": {
7348+ "name": "id",
7349+ "type": "text",
7350+ "primaryKey": true,
7351+ "notNull": true
7352+ },
7353+ "user_id": {
7354+ "name": "user_id",
7355+ "type": "text",
7356+ "primaryKey": false,
7357+ "notNull": false
7358+ },
7359+ "email": {
7360+ "name": "email",
7361+ "type": "text",
7362+ "primaryKey": false,
7363+ "notNull": false
7364+ },
7365+ "ip": {
7366+ "name": "ip",
7367+ "type": "text",
7368+ "primaryKey": false,
7369+ "notNull": false
7370+ },
7371+ "user_agent": {
7372+ "name": "user_agent",
7373+ "type": "text",
7374+ "primaryKey": false,
7375+ "notNull": false
7376+ },
7377+ "outcome": {
7378+ "name": "outcome",
7379+ "type": "text",
7380+ "primaryKey": false,
7381+ "notNull": true
7382+ },
7383+ "method": {
7384+ "name": "method",
7385+ "type": "text",
7386+ "primaryKey": false,
7387+ "notNull": false
7388+ },
7389+ "created_at": {
7390+ "name": "created_at",
7391+ "type": "timestamp with time zone",
7392+ "primaryKey": false,
7393+ "notNull": true,
7394+ "default": "now()"
7395+ }
7396+ },
7397+ "indexes": {
7398+ "login_events_user_idx": {
7399+ "name": "login_events_user_idx",
7400+ "columns": [
7401+ {
7402+ "expression": "user_id",
7403+ "isExpression": false,
7404+ "asc": true,
7405+ "nulls": "last"
7406+ },
7407+ {
7408+ "expression": "created_at",
7409+ "isExpression": false,
7410+ "asc": true,
7411+ "nulls": "last"
7412+ }
7413+ ],
7414+ "isUnique": false,
7415+ "concurrently": false,
7416+ "method": "btree",
7417+ "with": {}
7418+ }
7419+ },
7420+ "foreignKeys": {},
7421+ "compositePrimaryKeys": {},
7422+ "uniqueConstraints": {},
7423+ "policies": {},
7424+ "checkConstraints": {},
7425+ "isRLSEnabled": false
7426+ },
7427+ "public.notifications": {
7428+ "name": "notifications",
7429+ "schema": "",
7430+ "columns": {
7431+ "id": {
7432+ "name": "id",
7433+ "type": "text",
7434+ "primaryKey": true,
7435+ "notNull": true
7436+ },
7437+ "user_id": {
7438+ "name": "user_id",
7439+ "type": "text",
7440+ "primaryKey": false,
7441+ "notNull": true
7442+ },
7443+ "kind": {
7444+ "name": "kind",
7445+ "type": "text",
7446+ "primaryKey": false,
7447+ "notNull": true
7448+ },
7449+ "title": {
7450+ "name": "title",
7451+ "type": "text",
7452+ "primaryKey": false,
7453+ "notNull": true
7454+ },
7455+ "body": {
7456+ "name": "body",
7457+ "type": "text",
7458+ "primaryKey": false,
7459+ "notNull": false
7460+ },
7461+ "href": {
7462+ "name": "href",
7463+ "type": "text",
7464+ "primaryKey": false,
7465+ "notNull": false
7466+ },
7467+ "payload": {
7468+ "name": "payload",
7469+ "type": "jsonb",
7470+ "primaryKey": false,
7471+ "notNull": true,
7472+ "default": "'{}'::jsonb"
7473+ },
7474+ "read_at": {
7475+ "name": "read_at",
7476+ "type": "timestamp with time zone",
7477+ "primaryKey": false,
7478+ "notNull": false
7479+ },
7480+ "emailed_at": {
7481+ "name": "emailed_at",
7482+ "type": "timestamp with time zone",
7483+ "primaryKey": false,
7484+ "notNull": false
7485+ },
7486+ "created_at": {
7487+ "name": "created_at",
7488+ "type": "timestamp with time zone",
7489+ "primaryKey": false,
7490+ "notNull": true,
7491+ "default": "now()"
7492+ }
7493+ },
7494+ "indexes": {
7495+ "notifications_user_idx": {
7496+ "name": "notifications_user_idx",
7497+ "columns": [
7498+ {
7499+ "expression": "user_id",
7500+ "isExpression": false,
7501+ "asc": true,
7502+ "nulls": "last"
7503+ },
7504+ {
7505+ "expression": "created_at",
7506+ "isExpression": false,
7507+ "asc": true,
7508+ "nulls": "last"
7509+ }
7510+ ],
7511+ "isUnique": false,
7512+ "concurrently": false,
7513+ "method": "btree",
7514+ "with": {}
7515+ },
7516+ "notifications_unread_idx": {
7517+ "name": "notifications_unread_idx",
7518+ "columns": [
7519+ {
7520+ "expression": "user_id",
7521+ "isExpression": false,
7522+ "asc": true,
7523+ "nulls": "last"
7524+ },
7525+ {
7526+ "expression": "read_at",
7527+ "isExpression": false,
7528+ "asc": true,
7529+ "nulls": "last"
7530+ }
7531+ ],
7532+ "isUnique": false,
7533+ "concurrently": false,
7534+ "method": "btree",
7535+ "with": {}
7536+ }
7537+ },
7538+ "foreignKeys": {},
7539+ "compositePrimaryKeys": {},
7540+ "uniqueConstraints": {},
7541+ "policies": {},
7542+ "checkConstraints": {},
7543+ "isRLSEnabled": false
7544+ },
7545+ "public.price_targets": {
7546+ "name": "price_targets",
7547+ "schema": "",
7548+ "columns": {
7549+ "id": {
7550+ "name": "id",
7551+ "type": "text",
7552+ "primaryKey": true,
7553+ "notNull": true
7554+ },
7555+ "user_id": {
7556+ "name": "user_id",
7557+ "type": "text",
7558+ "primaryKey": false,
7559+ "notNull": true
7560+ },
7561+ "asset_id": {
7562+ "name": "asset_id",
7563+ "type": "text",
7564+ "primaryKey": false,
7565+ "notNull": true
7566+ },
7567+ "variant_id": {
7568+ "name": "variant_id",
7569+ "type": "text",
7570+ "primaryKey": false,
7571+ "notNull": false
7572+ },
7573+ "direction": {
7574+ "name": "direction",
7575+ "type": "text",
7576+ "primaryKey": false,
7577+ "notNull": true,
7578+ "default": "'above'"
7579+ },
7580+ "target_usd": {
7581+ "name": "target_usd",
7582+ "type": "numeric(18, 4)",
7583+ "primaryKey": false,
7584+ "notNull": true
7585+ },
7586+ "baseline_usd": {
7587+ "name": "baseline_usd",
7588+ "type": "numeric(18, 4)",
7589+ "primaryKey": false,
7590+ "notNull": false
7591+ },
7592+ "note": {
7593+ "name": "note",
7594+ "type": "text",
7595+ "primaryKey": false,
7596+ "notNull": false
7597+ },
7598+ "hit_at": {
7599+ "name": "hit_at",
7600+ "type": "timestamp with time zone",
7601+ "primaryKey": false,
7602+ "notNull": false
7603+ },
7604+ "notified_at": {
7605+ "name": "notified_at",
7606+ "type": "timestamp with time zone",
7607+ "primaryKey": false,
7608+ "notNull": false
7609+ },
7610+ "created_at": {
7611+ "name": "created_at",
7612+ "type": "timestamp with time zone",
7613+ "primaryKey": false,
7614+ "notNull": true,
7615+ "default": "now()"
7616+ }
7617+ },
7618+ "indexes": {
7619+ "price_targets_user_idx": {
7620+ "name": "price_targets_user_idx",
7621+ "columns": [
7622+ {
7623+ "expression": "user_id",
7624+ "isExpression": false,
7625+ "asc": true,
7626+ "nulls": "last"
7627+ }
7628+ ],
7629+ "isUnique": false,
7630+ "concurrently": false,
7631+ "method": "btree",
7632+ "with": {}
7633+ },
7634+ "price_targets_asset_idx": {
7635+ "name": "price_targets_asset_idx",
7636+ "columns": [
7637+ {
7638+ "expression": "asset_id",
7639+ "isExpression": false,
7640+ "asc": true,
7641+ "nulls": "last"
7642+ },
7643+ {
7644+ "expression": "hit_at",
7645+ "isExpression": false,
7646+ "asc": true,
7647+ "nulls": "last"
7648+ }
7649+ ],
7650+ "isUnique": false,
7651+ "concurrently": false,
7652+ "method": "btree",
7653+ "with": {}
7654+ }
7655+ },
7656+ "foreignKeys": {},
7657+ "compositePrimaryKeys": {},
7658+ "uniqueConstraints": {},
7659+ "policies": {},
7660+ "checkConstraints": {},
7661+ "isRLSEnabled": false
7662+ },
7663+ "public.rate_limits": {
7664+ "name": "rate_limits",
7665+ "schema": "",
7666+ "columns": {
7667+ "key": {
7668+ "name": "key",
7669+ "type": "text",
7670+ "primaryKey": true,
7671+ "notNull": true
7672+ },
7673+ "count": {
7674+ "name": "count",
7675+ "type": "integer",
7676+ "primaryKey": false,
7677+ "notNull": true,
7678+ "default": 0
7679+ },
7680+ "reset_at": {
7681+ "name": "reset_at",
7682+ "type": "timestamp with time zone",
7683+ "primaryKey": false,
7684+ "notNull": true
7685+ }
7686+ },
7687+ "indexes": {},
7688+ "foreignKeys": {},
7689+ "compositePrimaryKeys": {},
7690+ "uniqueConstraints": {},
7691+ "policies": {},
7692+ "checkConstraints": {},
7693+ "isRLSEnabled": false
7694+ },
7695+ "public.recovery_codes": {
7696+ "name": "recovery_codes",
7697+ "schema": "",
7698+ "columns": {
7699+ "id": {
7700+ "name": "id",
7701+ "type": "text",
7702+ "primaryKey": true,
7703+ "notNull": true
7704+ },
7705+ "user_id": {
7706+ "name": "user_id",
7707+ "type": "text",
7708+ "primaryKey": false,
7709+ "notNull": true
7710+ },
7711+ "code_hash": {
7712+ "name": "code_hash",
7713+ "type": "text",
7714+ "primaryKey": false,
7715+ "notNull": true
7716+ },
7717+ "used_at": {
7718+ "name": "used_at",
7719+ "type": "timestamp with time zone",
7720+ "primaryKey": false,
7721+ "notNull": false
7722+ },
7723+ "created_at": {
7724+ "name": "created_at",
7725+ "type": "timestamp with time zone",
7726+ "primaryKey": false,
7727+ "notNull": true,
7728+ "default": "now()"
7729+ }
7730+ },
7731+ "indexes": {
7732+ "recovery_codes_user_idx": {
7733+ "name": "recovery_codes_user_idx",
7734+ "columns": [
7735+ {
7736+ "expression": "user_id",
7737+ "isExpression": false,
7738+ "asc": true,
7739+ "nulls": "last"
7740+ }
7741+ ],
7742+ "isUnique": false,
7743+ "concurrently": false,
7744+ "method": "btree",
7745+ "with": {}
7746+ }
7747+ },
7748+ "foreignKeys": {},
7749+ "compositePrimaryKeys": {},
7750+ "uniqueConstraints": {},
7751+ "policies": {},
7752+ "checkConstraints": {},
7753+ "isRLSEnabled": false
7754+ },
7755+ "public.saved_searches": {
7756+ "name": "saved_searches",
7757+ "schema": "",
7758+ "columns": {
7759+ "id": {
7760+ "name": "id",
7761+ "type": "text",
7762+ "primaryKey": true,
7763+ "notNull": true
7764+ },
7765+ "user_id": {
7766+ "name": "user_id",
7767+ "type": "text",
7768+ "primaryKey": false,
7769+ "notNull": true
7770+ },
7771+ "name": {
7772+ "name": "name",
7773+ "type": "text",
7774+ "primaryKey": false,
7775+ "notNull": true
7776+ },
7777+ "url": {
7778+ "name": "url",
7779+ "type": "text",
7780+ "primaryKey": false,
7781+ "notNull": true
7782+ },
7783+ "params": {
7784+ "name": "params",
7785+ "type": "jsonb",
7786+ "primaryKey": false,
7787+ "notNull": true,
7788+ "default": "'{}'::jsonb"
7789+ },
7790+ "notify": {
7791+ "name": "notify",
7792+ "type": "boolean",
7793+ "primaryKey": false,
7794+ "notNull": true,
7795+ "default": false
7796+ },
7797+ "last_run_at": {
7798+ "name": "last_run_at",
7799+ "type": "timestamp with time zone",
7800+ "primaryKey": false,
7801+ "notNull": false
7802+ },
7803+ "last_count": {
7804+ "name": "last_count",
7805+ "type": "integer",
7806+ "primaryKey": false,
7807+ "notNull": false
7808+ },
7809+ "created_at": {
7810+ "name": "created_at",
7811+ "type": "timestamp with time zone",
7812+ "primaryKey": false,
7813+ "notNull": true,
7814+ "default": "now()"
7815+ }
7816+ },
7817+ "indexes": {
7818+ "saved_searches_user_idx": {
7819+ "name": "saved_searches_user_idx",
7820+ "columns": [
7821+ {
7822+ "expression": "user_id",
7823+ "isExpression": false,
7824+ "asc": true,
7825+ "nulls": "last"
7826+ }
7827+ ],
7828+ "isUnique": false,
7829+ "concurrently": false,
7830+ "method": "btree",
7831+ "with": {}
7832+ }
7833+ },
7834+ "foreignKeys": {},
7835+ "compositePrimaryKeys": {},
7836+ "uniqueConstraints": {},
7837+ "policies": {},
7838+ "checkConstraints": {},
7839+ "isRLSEnabled": false
7840+ },
7841+ "public.trusted_devices": {
7842+ "name": "trusted_devices",
7843+ "schema": "",
7844+ "columns": {
7845+ "id": {
7846+ "name": "id",
7847+ "type": "text",
7848+ "primaryKey": true,
7849+ "notNull": true
7850+ },
7851+ "user_id": {
7852+ "name": "user_id",
7853+ "type": "text",
7854+ "primaryKey": false,
7855+ "notNull": true
7856+ },
7857+ "token_hash": {
7858+ "name": "token_hash",
7859+ "type": "text",
7860+ "primaryKey": false,
7861+ "notNull": true
7862+ },
7863+ "label": {
7864+ "name": "label",
7865+ "type": "text",
7866+ "primaryKey": false,
7867+ "notNull": false
7868+ },
7869+ "user_agent": {
7870+ "name": "user_agent",
7871+ "type": "text",
7872+ "primaryKey": false,
7873+ "notNull": false
7874+ },
7875+ "ip": {
7876+ "name": "ip",
7877+ "type": "text",
7878+ "primaryKey": false,
7879+ "notNull": false
7880+ },
7881+ "created_at": {
7882+ "name": "created_at",
7883+ "type": "timestamp with time zone",
7884+ "primaryKey": false,
7885+ "notNull": true,
7886+ "default": "now()"
7887+ },
7888+ "last_used_at": {
7889+ "name": "last_used_at",
7890+ "type": "timestamp with time zone",
7891+ "primaryKey": false,
7892+ "notNull": false
7893+ },
7894+ "expires_at": {
7895+ "name": "expires_at",
7896+ "type": "timestamp with time zone",
7897+ "primaryKey": false,
7898+ "notNull": true
7899+ },
7900+ "revoked_at": {
7901+ "name": "revoked_at",
7902+ "type": "timestamp with time zone",
7903+ "primaryKey": false,
7904+ "notNull": false
7905+ }
7906+ },
7907+ "indexes": {
7908+ "trusted_devices_user_idx": {
7909+ "name": "trusted_devices_user_idx",
7910+ "columns": [
7911+ {
7912+ "expression": "user_id",
7913+ "isExpression": false,
7914+ "asc": true,
7915+ "nulls": "last"
7916+ }
7917+ ],
7918+ "isUnique": false,
7919+ "concurrently": false,
7920+ "method": "btree",
7921+ "with": {}
7922+ },
7923+ "trusted_devices_token_uq": {
7924+ "name": "trusted_devices_token_uq",
7925+ "columns": [
7926+ {
7927+ "expression": "token_hash",
7928+ "isExpression": false,
7929+ "asc": true,
7930+ "nulls": "last"
7931+ }
7932+ ],
7933+ "isUnique": true,
7934+ "concurrently": false,
7935+ "method": "btree",
7936+ "with": {}
7937+ }
7938+ },
7939+ "foreignKeys": {},
7940+ "compositePrimaryKeys": {},
7941+ "uniqueConstraints": {},
7942+ "policies": {},
7943+ "checkConstraints": {},
7944+ "isRLSEnabled": false
7945+ },
7946+ "public.uploads": {
7947+ "name": "uploads",
7948+ "schema": "",
7949+ "columns": {
7950+ "id": {
7951+ "name": "id",
7952+ "type": "text",
7953+ "primaryKey": true,
7954+ "notNull": true
7955+ },
7956+ "user_id": {
7957+ "name": "user_id",
7958+ "type": "text",
7959+ "primaryKey": false,
7960+ "notNull": true
7961+ },
7962+ "kind": {
7963+ "name": "kind",
7964+ "type": "text",
7965+ "primaryKey": false,
7966+ "notNull": true
7967+ },
7968+ "path": {
7969+ "name": "path",
7970+ "type": "text",
7971+ "primaryKey": false,
7972+ "notNull": true
7973+ },
7974+ "mime": {
7975+ "name": "mime",
7976+ "type": "text",
7977+ "primaryKey": false,
7978+ "notNull": true
7979+ },
7980+ "bytes": {
7981+ "name": "bytes",
7982+ "type": "integer",
7983+ "primaryKey": false,
7984+ "notNull": true
7985+ },
7986+ "width": {
7987+ "name": "width",
7988+ "type": "integer",
7989+ "primaryKey": false,
7990+ "notNull": false
7991+ },
7992+ "height": {
7993+ "name": "height",
7994+ "type": "integer",
7995+ "primaryKey": false,
7996+ "notNull": false
7997+ },
7998+ "created_at": {
7999+ "name": "created_at",
8000+ "type": "timestamp with time zone",
8001+ "primaryKey": false,
8002+ "notNull": true,
8003+ "default": "now()"
8004+ }
8005+ },
8006+ "indexes": {
8007+ "uploads_user_idx": {
8008+ "name": "uploads_user_idx",
8009+ "columns": [
8010+ {
8011+ "expression": "user_id",
8012+ "isExpression": false,
8013+ "asc": true,
8014+ "nulls": "last"
8015+ }
8016+ ],
8017+ "isUnique": false,
8018+ "concurrently": false,
8019+ "method": "btree",
8020+ "with": {}
8021+ }
8022+ },
8023+ "foreignKeys": {},
8024+ "compositePrimaryKeys": {},
8025+ "uniqueConstraints": {},
8026+ "policies": {},
8027+ "checkConstraints": {},
8028+ "isRLSEnabled": false
8029+ },
8030+ "public.user_badges": {
8031+ "name": "user_badges",
8032+ "schema": "",
8033+ "columns": {
8034+ "user_id": {
8035+ "name": "user_id",
8036+ "type": "text",
8037+ "primaryKey": false,
8038+ "notNull": true
8039+ },
8040+ "badge": {
8041+ "name": "badge",
8042+ "type": "text",
8043+ "primaryKey": false,
8044+ "notNull": true
8045+ },
8046+ "evidence": {
8047+ "name": "evidence",
8048+ "type": "jsonb",
8049+ "primaryKey": false,
8050+ "notNull": true,
8051+ "default": "'{}'::jsonb"
8052+ },
8053+ "created_at": {
8054+ "name": "created_at",
8055+ "type": "timestamp with time zone",
8056+ "primaryKey": false,
8057+ "notNull": true,
8058+ "default": "now()"
8059+ }
8060+ },
8061+ "indexes": {
8062+ "user_badges_uq": {
8063+ "name": "user_badges_uq",
8064+ "columns": [
8065+ {
8066+ "expression": "user_id",
8067+ "isExpression": false,
8068+ "asc": true,
8069+ "nulls": "last"
8070+ },
8071+ {
8072+ "expression": "badge",
8073+ "isExpression": false,
8074+ "asc": true,
8075+ "nulls": "last"
8076+ }
8077+ ],
8078+ "isUnique": true,
8079+ "concurrently": false,
8080+ "method": "btree",
8081+ "with": {}
8082+ }
8083+ },
8084+ "foreignKeys": {},
8085+ "compositePrimaryKeys": {},
8086+ "uniqueConstraints": {},
8087+ "policies": {},
8088+ "checkConstraints": {},
8089+ "isRLSEnabled": false
8090+ }
8091+ },
8092+ "enums": {},
8093+ "schemas": {},
8094+ "sequences": {},
8095+ "roles": {},
8096+ "policies": {},
8097+ "views": {},
8098+ "_meta": {
8099+ "columns": {},
8100+ "schemas": {},
8101+ "tables": {}
8102+ }
8103+}
\ No newline at end of file
modified packages/database/migrations/meta/_journal.json +7 −0
@@ -8,6 +8,13 @@
8 "when": 1788754246505, 8 "when": 1788754246505,
9 "tag": "0000_clear_unicorn", 9 "tag": "0000_clear_unicorn",
10 "breakpoints": true 10 "breakpoints": true
11+ },
12+ {
13+ "idx": 1,
14+ "version": "7",
15+ "when": 1788757658711,
16+ "tag": "0001_living_prima",
17+ "breakpoints": true
11 } 18 }
12 ] 19 ]
13 } 20 }
\ No newline at end of file
modified pnpm-lock.yaml +237 −0
@@ -81,6 +81,9 @@ importers:
81 '@rareindex/database': 81 '@rareindex/database':
82 specifier: workspace:* 82 specifier: workspace:*
83 version: link:../../packages/database 83 version: link:../../packages/database
84+ '@rareindex/notify':
85+ specifier: workspace:*
86+ version: link:../../packages/notify
84 '@rareindex/search': 87 '@rareindex/search':
85 specifier: workspace:* 88 specifier: workspace:*
86 version: link:../../packages/search 89 version: link:../../packages/search
@@ -102,9 +105,15 @@ importers:
102 next: 105 next:
103 specifier: 16.3.4 106 specifier: 16.3.4
104 version: 16.3.4(@babel/core@7.29.7)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) 107 version: 16.3.4(@babel/core@7.29.7)(@types/node@24.13.3)(react-dom@19.2.8(react@19.2.8))(react@19.2.8)
108+ otpauth:
109+ specifier: ^9.5.2
110+ version: 9.5.2
105 pg-boss: 111 pg-boss:
106 specifier: ^12.30.0 112 specifier: ^12.30.0
107 version: 12.30.0 113 version: 12.30.0
114+ qrcode:
115+ specifier: ^1.5.4
116+ version: 1.5.4
108 react: 117 react:
109 specifier: 19.2.8 118 specifier: 19.2.8
110 version: 19.2.8 119 version: 19.2.8
@@ -124,6 +133,9 @@ importers:
124 '@types/node': 133 '@types/node':
125 specifier: ^24.0.0 134 specifier: ^24.0.0
126 version: 24.13.3 135 version: 24.13.3
136+ '@types/qrcode':
137+ specifier: ^1.5.6
138+ version: 1.5.6
127 '@types/react': 139 '@types/react':
128 specifier: ^19 140 specifier: ^19
129 version: 19.2.18 141 version: 19.2.18
@@ -274,6 +286,22 @@ importers:
274 specifier: ^3.2.0 286 specifier: ^3.2.0
275 version: 3.2.7(@types/node@24.13.3)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.13) 287 version: 3.2.7(@types/node@24.13.3)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.13)
276 288
289+ packages/notify:
290+ dependencies:
291+ '@rareindex/shared':
292+ specifier: workspace:*
293+ version: link:../shared
294+ devDependencies:
295+ '@types/node':
296+ specifier: ^24.0.0
297+ version: 24.13.3
298+ typescript:
299+ specifier: ^5.9.3
300+ version: 5.9.3
301+ vitest:
302+ specifier: ^3.2.0
303+ version: 3.2.7(@types/node@24.13.3)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.13)
304+
277 packages/search: 305 packages/search:
278 dependencies: 306 dependencies:
279 '@rareindex/database': 307 '@rareindex/database':
@@ -367,6 +395,9 @@ importers:
367 '@rareindex/indices': 395 '@rareindex/indices':
368 specifier: workspace:* 396 specifier: workspace:*
369 version: link:../packages/indices 397 version: link:../packages/indices
398+ '@rareindex/notify':
399+ specifier: workspace:*
400+ version: link:../packages/notify
370 '@rareindex/shared': 401 '@rareindex/shared':
371 specifier: workspace:* 402 specifier: workspace:*
372 version: link:../packages/shared 403 version: link:../packages/shared
@@ -1306,6 +1337,10 @@ packages:
1306 cpu: [x64] 1337 cpu: [x64]
1307 os: [win32] 1338 os: [win32]
1308 1339
1340+ '@noble/hashes@2.4.0':
1341+ resolution: {integrity: sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==}
1342+ engines: {node: '>= 20.19.0'}
1343+
1309 '@nodelib/fs.scandir@2.1.5': 1344 '@nodelib/fs.scandir@2.1.5':
1310 resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 1345 resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
1311 engines: {node: '>= 8'} 1346 engines: {node: '>= 8'}
@@ -1593,6 +1628,9 @@ packages:
1593 '@types/node@24.13.3': 1628 '@types/node@24.13.3':
1594 resolution: {integrity: sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==} 1629 resolution: {integrity: sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==}
1595 1630
1631+ '@types/qrcode@1.5.6':
1632+ resolution: {integrity: sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==}
1633+
1596 '@types/react-dom@19.2.7': 1634 '@types/react-dom@19.2.7':
1597 resolution: {integrity: sha512-I8bPpDLcHBv1qiIiXDCy71Rt8eQDKJP0sMSWJphDdAcdqiJ1sGpZamavoEIRZmYzjia9LuEb2HlYdDpmoENpvQ==} 1635 resolution: {integrity: sha512-I8bPpDLcHBv1qiIiXDCy71Rt8eQDKJP0sMSWJphDdAcdqiJ1sGpZamavoEIRZmYzjia9LuEb2HlYdDpmoENpvQ==}
1598 peerDependencies: 1636 peerDependencies:
@@ -1840,6 +1878,10 @@ packages:
1840 ajv@8.20.0: 1878 ajv@8.20.0:
1841 resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} 1879 resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==}
1842 1880
1881+ ansi-regex@5.0.1:
1882+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
1883+ engines: {node: '>=8'}
1884+
1843 ansi-styles@4.3.0: 1885 ansi-styles@4.3.0:
1844 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 1886 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
1845 engines: {node: '>=8'} 1887 engines: {node: '>=8'}
@@ -1973,6 +2015,10 @@ packages:
1973 resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 2015 resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
1974 engines: {node: '>=6'} 2016 engines: {node: '>=6'}
1975 2017
2018+ camelcase@5.3.1:
2019+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
2020+ engines: {node: '>=6'}
2021+
1976 caniuse-lite@1.0.30001810: 2022 caniuse-lite@1.0.30001810:
1977 resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==} 2023 resolution: {integrity: sha512-TITQPUkaz+aVk5GL6NhOdwk1aEaNTSDPsGFWrTuhKGtjTF70jL/Oht2W4c6rXUe5fu7Ie19VIahAXHIIiWWNeg==}
1978 2024
@@ -1998,6 +2044,9 @@ packages:
1998 client-only@0.0.1: 2044 client-only@0.0.1:
1999 resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 2045 resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
2000 2046
2047+ cliui@6.0.0:
2048+ resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
2049+
2001 color-convert@2.0.1: 2050 color-convert@2.0.1:
2002 resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 2051 resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
2003 engines: {node: '>=7.0.0'} 2052 engines: {node: '>=7.0.0'}
@@ -2065,6 +2114,10 @@ packages:
2065 supports-color: 2114 supports-color:
2066 optional: true 2115 optional: true
2067 2116
2117+ decamelize@1.2.0:
2118+ resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
2119+ engines: {node: '>=0.10.0'}
2120+
2068 deep-eql@5.0.2: 2121 deep-eql@5.0.2:
2069 resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 2122 resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
2070 engines: {node: '>=6'} 2123 engines: {node: '>=6'}
@@ -2088,6 +2141,9 @@ packages:
2088 resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 2141 resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
2089 engines: {node: '>=8'} 2142 engines: {node: '>=8'}
2090 2143
2144+ dijkstrajs@1.0.3:
2145+ resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==}
2146+
2091 doctrine@2.1.0: 2147 doctrine@2.1.0:
2092 resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 2148 resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
2093 engines: {node: '>=0.10.0'} 2149 engines: {node: '>=0.10.0'}
@@ -2208,6 +2264,9 @@ packages:
2208 electron-to-chromium@1.5.422: 2264 electron-to-chromium@1.5.422:
2209 resolution: {integrity: sha512-UvA/32XqrLDdZSn7Jllo1AYNcWji/G0d5M0GTViE7KoGBiMunw3a34Sb2KO4ZZyrSEhqsxFoVhWWJshdyfKqJA==} 2265 resolution: {integrity: sha512-UvA/32XqrLDdZSn7Jllo1AYNcWji/G0d5M0GTViE7KoGBiMunw3a34Sb2KO4ZZyrSEhqsxFoVhWWJshdyfKqJA==}
2210 2266
2267+ emoji-regex@8.0.0:
2268+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
2269+
2211 emoji-regex@9.2.2: 2270 emoji-regex@9.2.2:
2212 resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 2271 resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
2213 2272
@@ -2489,6 +2548,10 @@ packages:
2489 resolution: {integrity: sha512-sJsgZ1sQH2UDuowPuMKg8az7Qc8F0jnj+SKkFWU/+T0xcFlgV5skgXOGUqmQzOdmW6ALA7AhJINWx3qFBkbLHA==} 2548 resolution: {integrity: sha512-sJsgZ1sQH2UDuowPuMKg8az7Qc8F0jnj+SKkFWU/+T0xcFlgV5skgXOGUqmQzOdmW6ALA7AhJINWx3qFBkbLHA==}
2490 engines: {node: '>=20'} 2549 engines: {node: '>=20'}
2491 2550
2551+ find-up@4.1.0:
2552+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
2553+ engines: {node: '>=8'}
2554+
2492 find-up@5.0.0: 2555 find-up@5.0.0:
2493 resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 2556 resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
2494 engines: {node: '>=10'} 2557 engines: {node: '>=10'}
@@ -2527,6 +2590,10 @@ packages:
2527 resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 2590 resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
2528 engines: {node: '>=6.9.0'} 2591 engines: {node: '>=6.9.0'}
2529 2592
2593+ get-caller-file@2.0.5:
2594+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
2595+ engines: {node: 6.* || 8.* || >= 10.*}
2596+
2530 get-intrinsic@1.3.0: 2597 get-intrinsic@1.3.0:
2531 resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 2598 resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
2532 engines: {node: '>= 0.4'} 2599 engines: {node: '>= 0.4'}
@@ -2687,6 +2754,10 @@ packages:
2687 resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} 2754 resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
2688 engines: {node: '>= 0.4'} 2755 engines: {node: '>= 0.4'}
2689 2756
2757+ is-fullwidth-code-point@3.0.0:
2758+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
2759+ engines: {node: '>=8'}
2760+
2690 is-generator-function@1.1.2: 2761 is-generator-function@1.1.2:
2691 resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} 2762 resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
2692 engines: {node: '>= 0.4'} 2763 engines: {node: '>= 0.4'}
@@ -2899,6 +2970,10 @@ packages:
2899 resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} 2970 resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
2900 engines: {node: '>= 12.0.0'} 2971 engines: {node: '>= 12.0.0'}
2901 2972
2973+ locate-path@5.0.0:
2974+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
2975+ engines: {node: '>=8'}
2976+
2902 locate-path@6.0.0: 2977 locate-path@6.0.0:
2903 resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 2978 resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
2904 engines: {node: '>=10'} 2979 engines: {node: '>=10'}
@@ -3074,18 +3149,33 @@ packages:
3074 resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 3149 resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
3075 engines: {node: '>= 0.8.0'} 3150 engines: {node: '>= 0.8.0'}
3076 3151
3152+ otpauth@9.5.2:
3153+ resolution: {integrity: sha512-GQ5emWR/x1tcExT62IBT0UfO95wZzJZyxYOJOGVeQF47SYEN9vmh0vISvDZaNMuFJRG+IaWCKtfm+t9Bfoal6w==}
3154+
3077 own-keys@1.0.2: 3155 own-keys@1.0.2:
3078 resolution: {integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==} 3156 resolution: {integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==}
3079 engines: {node: '>= 0.4'} 3157 engines: {node: '>= 0.4'}
3080 3158
3159+ p-limit@2.3.0:
3160+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
3161+ engines: {node: '>=6'}
3162+
3081 p-limit@3.1.0: 3163 p-limit@3.1.0:
3082 resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 3164 resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
3083 engines: {node: '>=10'} 3165 engines: {node: '>=10'}
3084 3166
3167+ p-locate@4.1.0:
3168+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
3169+ engines: {node: '>=8'}
3170+
3085 p-locate@5.0.0: 3171 p-locate@5.0.0:
3086 resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 3172 resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
3087 engines: {node: '>=10'} 3173 engines: {node: '>=10'}
3088 3174
3175+ p-try@2.2.0:
3176+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
3177+ engines: {node: '>=6'}
3178+
3089 parent-module@1.0.1: 3179 parent-module@1.0.1:
3090 resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 3180 resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
3091 engines: {node: '>=6'} 3181 engines: {node: '>=6'}
@@ -3177,6 +3267,10 @@ packages:
3177 resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==} 3267 resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==}
3178 hasBin: true 3268 hasBin: true
3179 3269
3270+ pngjs@5.0.0:
3271+ resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==}
3272+ engines: {node: '>=10.13.0'}
3273+
3180 possible-typed-array-names@1.1.0: 3274 possible-typed-array-names@1.1.0:
3181 resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} 3275 resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
3182 engines: {node: '>= 0.4'} 3276 engines: {node: '>= 0.4'}
@@ -3230,6 +3324,11 @@ packages:
3230 resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 3324 resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
3231 engines: {node: '>=6'} 3325 engines: {node: '>=6'}
3232 3326
3327+ qrcode@1.5.4:
3328+ resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==}
3329+ engines: {node: '>=10.13.0'}
3330+ hasBin: true
3331+
3233 queue-microtask@1.2.3: 3332 queue-microtask@1.2.3:
3234 resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 3333 resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
3235 3334
@@ -3264,10 +3363,17 @@ packages:
3264 resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} 3363 resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
3265 engines: {node: '>= 0.4'} 3364 engines: {node: '>= 0.4'}
3266 3365
3366+ require-directory@2.1.1:
3367+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
3368+ engines: {node: '>=0.10.0'}
3369+
3267 require-from-string@2.0.2: 3370 require-from-string@2.0.2:
3268 resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 3371 resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
3269 engines: {node: '>=0.10.0'} 3372 engines: {node: '>=0.10.0'}
3270 3373
3374+ require-main-filename@2.0.0:
3375+ resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
3376+
3271 resolve-from@4.0.0: 3377 resolve-from@4.0.0:
3272 resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 3378 resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
3273 engines: {node: '>=4'} 3379 engines: {node: '>=4'}
@@ -3347,6 +3453,9 @@ packages:
3347 server-only@0.0.1: 3453 server-only@0.0.1:
3348 resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} 3454 resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==}
3349 3455
3456+ set-blocking@2.0.0:
3457+ resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
3458+
3350 set-cookie-parser@2.7.2: 3459 set-cookie-parser@2.7.2:
3351 resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} 3460 resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
3352 3461
@@ -3432,6 +3541,10 @@ packages:
3432 resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} 3541 resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
3433 engines: {node: '>= 0.4'} 3542 engines: {node: '>= 0.4'}
3434 3543
3544+ string-width@4.2.3:
3545+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
3546+ engines: {node: '>=8'}
3547+
3435 string.prototype.includes@2.0.1: 3548 string.prototype.includes@2.0.1:
3436 resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} 3549 resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==}
3437 engines: {node: '>= 0.4'} 3550 engines: {node: '>= 0.4'}
@@ -3458,6 +3571,10 @@ packages:
3458 string_decoder@1.3.0: 3571 string_decoder@1.3.0:
3459 resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 3572 resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
3460 3573
3574+ strip-ansi@6.0.1:
3575+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
3576+ engines: {node: '>=8'}
3577+
3461 strip-bom@3.0.0: 3578 strip-bom@3.0.0:
3462 resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 3579 resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
3463 engines: {node: '>=4'} 3580 engines: {node: '>=4'}
@@ -3707,6 +3824,9 @@ packages:
3707 resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 3824 resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
3708 engines: {node: '>= 0.4'} 3825 engines: {node: '>= 0.4'}
3709 3826
3827+ which-module@2.0.1:
3828+ resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
3829+
3710 which-typed-array@1.1.22: 3830 which-typed-array@1.1.22:
3711 resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} 3831 resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==}
3712 engines: {node: '>= 0.4'} 3832 engines: {node: '>= 0.4'}
@@ -3725,13 +3845,28 @@ packages:
3725 resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 3845 resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
3726 engines: {node: '>=0.10.0'} 3846 engines: {node: '>=0.10.0'}
3727 3847
3848+ wrap-ansi@6.2.0:
3849+ resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
3850+ engines: {node: '>=8'}
3851+
3728 xtend@4.0.2: 3852 xtend@4.0.2:
3729 resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 3853 resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
3730 engines: {node: '>=0.4'} 3854 engines: {node: '>=0.4'}
3731 3855
3856+ y18n@4.0.3:
3857+ resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
3858+
3732 yallist@3.1.1: 3859 yallist@3.1.1:
3733 resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 3860 resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
3734 3861
3862+ yargs-parser@18.1.3:
3863+ resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
3864+ engines: {node: '>=6'}
3865+
3866+ yargs@15.4.1:
3867+ resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
3868+ engines: {node: '>=8'}
3869+
3735 yocto-queue@0.1.0: 3870 yocto-queue@0.1.0:
3736 resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3871 resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
3737 engines: {node: '>=10'} 3872 engines: {node: '>=10'}
@@ -4400,6 +4535,8 @@ snapshots:
4400 '@next/swc-win32-x64-msvc@16.3.4': 4535 '@next/swc-win32-x64-msvc@16.3.4':
4401 optional: true 4536 optional: true
4402 4537
4538+ '@noble/hashes@2.4.0': {}
4539+
4403 '@nodelib/fs.scandir@2.1.5': 4540 '@nodelib/fs.scandir@2.1.5':
4404 dependencies: 4541 dependencies:
4405 '@nodelib/fs.stat': 2.0.5 4542 '@nodelib/fs.stat': 2.0.5
@@ -4597,6 +4734,10 @@ snapshots:
4597 dependencies: 4734 dependencies:
4598 undici-types: 7.18.2 4735 undici-types: 7.18.2
4599 4736
4737+ '@types/qrcode@1.5.6':
4738+ dependencies:
4739+ '@types/node': 24.13.3
4740+
4600 '@types/react-dom@19.2.7(@types/react@19.2.18)': 4741 '@types/react-dom@19.2.7(@types/react@19.2.18)':
4601 dependencies: 4742 dependencies:
4602 '@types/react': 19.2.18 4743 '@types/react': 19.2.18
@@ -4838,6 +4979,8 @@ snapshots:
4838 json-schema-traverse: 1.0.0 4979 json-schema-traverse: 1.0.0
4839 require-from-string: 2.0.2 4980 require-from-string: 2.0.2
4840 4981
4982+ ansi-regex@5.0.1: {}
4983+
4841 ansi-styles@4.3.0: 4984 ansi-styles@4.3.0:
4842 dependencies: 4985 dependencies:
4843 color-convert: 2.0.1 4986 color-convert: 2.0.1
@@ -4993,6 +5136,8 @@ snapshots:
4993 5136
4994 callsites@3.1.0: {} 5137 callsites@3.1.0: {}
4995 5138
5139+ camelcase@5.3.1: {}
5140+
4996 caniuse-lite@1.0.30001810: {} 5141 caniuse-lite@1.0.30001810: {}
4997 5142
4998 chai@5.3.3: 5143 chai@5.3.3:
@@ -5035,6 +5180,12 @@ snapshots:
5035 5180
5036 client-only@0.0.1: {} 5181 client-only@0.0.1: {}
5037 5182
5183+ cliui@6.0.0:
5184+ dependencies:
5185+ string-width: 4.2.3
5186+ strip-ansi: 6.0.1
5187+ wrap-ansi: 6.2.0
5188+
5038 color-convert@2.0.1: 5189 color-convert@2.0.1:
5039 dependencies: 5190 dependencies:
5040 color-name: 1.1.4 5191 color-name: 1.1.4
@@ -5097,6 +5248,8 @@ snapshots:
5097 dependencies: 5248 dependencies:
5098 ms: 2.1.3 5249 ms: 2.1.3
5099 5250
5251+ decamelize@1.2.0: {}
5252+
5100 deep-eql@5.0.2: {} 5253 deep-eql@5.0.2: {}
5101 5254
5102 deep-is@0.1.4: {} 5255 deep-is@0.1.4: {}
@@ -5117,6 +5270,8 @@ snapshots:
5117 5270
5118 detect-libc@2.1.2: {} 5271 detect-libc@2.1.2: {}
5119 5272
5273+ dijkstrajs@1.0.3: {}
5274+
5120 doctrine@2.1.0: 5275 doctrine@2.1.0:
5121 dependencies: 5276 dependencies:
5122 esutils: 2.0.3 5277 esutils: 2.0.3
@@ -5159,6 +5314,8 @@ snapshots:
5159 5314
5160 electron-to-chromium@1.5.422: {} 5315 electron-to-chromium@1.5.422: {}
5161 5316
5317+ emoji-regex@8.0.0: {}
5318+
5162 emoji-regex@9.2.2: {} 5319 emoji-regex@9.2.2: {}
5163 5320
5164 encoding-sniffer@0.2.1: 5321 encoding-sniffer@0.2.1:
@@ -5669,6 +5826,11 @@ snapshots:
5669 fast-querystring: 1.1.2 5826 fast-querystring: 1.1.2
5670 safe-regex2: 5.1.1 5827 safe-regex2: 5.1.1
5671 5828
5829+ find-up@4.1.0:
5830+ dependencies:
5831+ locate-path: 5.0.0
5832+ path-exists: 4.0.0
5833+
5672 find-up@5.0.0: 5834 find-up@5.0.0:
5673 dependencies: 5835 dependencies:
5674 locate-path: 6.0.0 5836 locate-path: 6.0.0
@@ -5708,6 +5870,8 @@ snapshots:
5708 5870
5709 gensync@1.0.0-beta.2: {} 5871 gensync@1.0.0-beta.2: {}
5710 5872
5873+ get-caller-file@2.0.5: {}
5874+
5711 get-intrinsic@1.3.0: 5875 get-intrinsic@1.3.0:
5712 dependencies: 5876 dependencies:
5713 call-bind-apply-helpers: 1.0.2 5877 call-bind-apply-helpers: 1.0.2
@@ -5873,6 +6037,8 @@ snapshots:
5873 dependencies: 6037 dependencies:
5874 call-bound: 1.0.4 6038 call-bound: 1.0.4
5875 6039
6040+ is-fullwidth-code-point@3.0.0: {}
6041+
5876 is-generator-function@1.1.2: 6042 is-generator-function@1.1.2:
5877 dependencies: 6043 dependencies:
5878 call-bound: 1.0.4 6044 call-bound: 1.0.4
@@ -6060,6 +6226,10 @@ snapshots:
6060 lightningcss-win32-arm64-msvc: 1.32.0 6226 lightningcss-win32-arm64-msvc: 1.32.0
6061 lightningcss-win32-x64-msvc: 1.32.0 6227 lightningcss-win32-x64-msvc: 1.32.0
6062 6228
6229+ locate-path@5.0.0:
6230+ dependencies:
6231+ p-locate: 4.1.0
6232+
6063 locate-path@6.0.0: 6233 locate-path@6.0.0:
6064 dependencies: 6234 dependencies:
6065 p-locate: 5.0.0 6235 p-locate: 5.0.0
@@ -6215,6 +6385,10 @@ snapshots:
6215 type-check: 0.4.0 6385 type-check: 0.4.0
6216 word-wrap: 1.2.5 6386 word-wrap: 1.2.5
6217 6387
6388+ otpauth@9.5.2:
6389+ dependencies:
6390+ '@noble/hashes': 2.4.0
6391+
6218 own-keys@1.0.2: 6392 own-keys@1.0.2:
6219 dependencies: 6393 dependencies:
6220 call-bound: 1.0.4 6394 call-bound: 1.0.4
@@ -6222,14 +6396,24 @@ snapshots:
6222 object-keys: 1.1.1 6396 object-keys: 1.1.1
6223 safe-push-apply: 1.0.0 6397 safe-push-apply: 1.0.0
6224 6398
6399+ p-limit@2.3.0:
6400+ dependencies:
6401+ p-try: 2.2.0
6402+
6225 p-limit@3.1.0: 6403 p-limit@3.1.0:
6226 dependencies: 6404 dependencies:
6227 yocto-queue: 0.1.0 6405 yocto-queue: 0.1.0
6228 6406
6407+ p-locate@4.1.0:
6408+ dependencies:
6409+ p-limit: 2.3.0
6410+
6229 p-locate@5.0.0: 6411 p-locate@5.0.0:
6230 dependencies: 6412 dependencies:
6231 p-limit: 3.1.0 6413 p-limit: 3.1.0
6232 6414
6415+ p-try@2.2.0: {}
6416+
6233 parent-module@1.0.1: 6417 parent-module@1.0.1:
6234 dependencies: 6418 dependencies:
6235 callsites: 3.1.0 6419 callsites: 3.1.0
@@ -6326,6 +6510,8 @@ snapshots:
6326 sonic-boom: 4.2.1 6510 sonic-boom: 4.2.1
6327 thread-stream: 3.2.0 6511 thread-stream: 3.2.0
6328 6512
6513+ pngjs@5.0.0: {}
6514+
6329 possible-typed-array-names@1.1.0: {} 6515 possible-typed-array-names@1.1.0: {}
6330 6516
6331 postcss@8.5.23: 6517 postcss@8.5.23:
@@ -6368,6 +6554,12 @@ snapshots:
6368 6554
6369 punycode@2.3.1: {} 6555 punycode@2.3.1: {}
6370 6556
6557+ qrcode@1.5.4:
6558+ dependencies:
6559+ dijkstrajs: 1.0.3
6560+ pngjs: 5.0.0
6561+ yargs: 15.4.1
6562+
6371 queue-microtask@1.2.3: {} 6563 queue-microtask@1.2.3: {}
6372 6564
6373 quick-format-unescaped@4.0.4: {} 6565 quick-format-unescaped@4.0.4: {}
@@ -6411,8 +6603,12 @@ snapshots:
6411 gopd: 1.2.0 6603 gopd: 1.2.0
6412 set-function-name: 2.0.2 6604 set-function-name: 2.0.2
6413 6605
6606+ require-directory@2.1.1: {}
6607+
6414 require-from-string@2.0.2: {} 6608 require-from-string@2.0.2: {}
6415 6609
6610+ require-main-filename@2.0.0: {}
6611+
6416 resolve-from@4.0.0: {} 6612 resolve-from@4.0.0: {}
6417 6613
6418 resolve-pkg-maps@1.0.0: {} 6614 resolve-pkg-maps@1.0.0: {}
@@ -6512,6 +6708,8 @@ snapshots:
6512 6708
6513 server-only@0.0.1: {} 6709 server-only@0.0.1: {}
6514 6710
6711+ set-blocking@2.0.0: {}
6712+
6515 set-cookie-parser@2.7.2: {} 6713 set-cookie-parser@2.7.2: {}
6516 6714
6517 set-function-length@1.2.2: 6715 set-function-length@1.2.2:
@@ -6637,6 +6835,12 @@ snapshots:
6637 es-errors: 1.3.0 6835 es-errors: 1.3.0
6638 internal-slot: 1.1.0 6836 internal-slot: 1.1.0
6639 6837
6838+ string-width@4.2.3:
6839+ dependencies:
6840+ emoji-regex: 8.0.0
6841+ is-fullwidth-code-point: 3.0.0
6842+ strip-ansi: 6.0.1
6843+
6640 string.prototype.includes@2.0.1: 6844 string.prototype.includes@2.0.1:
6641 dependencies: 6845 dependencies:
6642 call-bind: 1.0.9 6846 call-bind: 1.0.9
@@ -6692,6 +6896,10 @@ snapshots:
6692 dependencies: 6896 dependencies:
6693 safe-buffer: 5.2.1 6897 safe-buffer: 5.2.1
6694 6898
6899+ strip-ansi@6.0.1:
6900+ dependencies:
6901+ ansi-regex: 5.0.1
6902+
6695 strip-bom@3.0.0: {} 6903 strip-bom@3.0.0: {}
6696 6904
6697 strip-json-comments@3.1.1: {} 6905 strip-json-comments@3.1.1: {}
@@ -6981,6 +7189,8 @@ snapshots:
6981 is-weakmap: 2.0.2 7189 is-weakmap: 2.0.2
6982 is-weakset: 2.0.4 7190 is-weakset: 2.0.4
6983 7191
7192+ which-module@2.0.1: {}
7193+
6984 which-typed-array@1.1.22: 7194 which-typed-array@1.1.22:
6985 dependencies: 7195 dependencies:
6986 available-typed-arrays: 1.0.7 7196 available-typed-arrays: 1.0.7
@@ -7002,10 +7212,37 @@ snapshots:
7002 7212
7003 word-wrap@1.2.5: {} 7213 word-wrap@1.2.5: {}
7004 7214
7215+ wrap-ansi@6.2.0:
7216+ dependencies:
7217+ ansi-styles: 4.3.0
7218+ string-width: 4.2.3
7219+ strip-ansi: 6.0.1
7220+
7005 xtend@4.0.2: {} 7221 xtend@4.0.2: {}
7006 7222
7223+ y18n@4.0.3: {}
7224+
7007 yallist@3.1.1: {} 7225 yallist@3.1.1: {}
7008 7226
7227+ yargs-parser@18.1.3:
7228+ dependencies:
7229+ camelcase: 5.3.1
7230+ decamelize: 1.2.0
7231+
7232+ yargs@15.4.1:
7233+ dependencies:
7234+ cliui: 6.0.0
7235+ decamelize: 1.2.0
7236+ find-up: 4.1.0
7237+ get-caller-file: 2.0.5
7238+ require-directory: 2.1.1
7239+ require-main-filename: 2.0.0
7240+ set-blocking: 2.0.0
7241+ string-width: 4.2.3
7242+ which-module: 2.0.1
7243+ y18n: 4.0.3
7244+ yargs-parser: 18.1.3
7245+
7009 yocto-queue@0.1.0: {} 7246 yocto-queue@0.1.0: {}
7010 7247
7011 zod-validation-error@4.0.2(zod@4.5.4): 7248 zod-validation-error@4.0.2(zod@4.5.4):
7012 7249
Menu

Theme