@varaos/db 1.1.13 → 1.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@varaos/db",
3
- "version": "1.1.13",
3
+ "version": "1.1.15",
4
4
  "private": false,
5
5
  "main": "index.js",
6
6
  "files": [
@@ -0,0 +1,11 @@
1
+ -- DropForeignKey
2
+ ALTER TABLE "public"."PostReaction" DROP CONSTRAINT "PostReaction_visitorId_fkey";
3
+
4
+ -- DropForeignKey
5
+ ALTER TABLE "public"."PostShare" DROP CONSTRAINT "PostShare_visitorId_fkey";
6
+
7
+ -- AddForeignKey
8
+ ALTER TABLE "public"."PostReaction" ADD CONSTRAINT "PostReaction_visitorId_fkey" FOREIGN KEY ("visitorId") REFERENCES "public"."Visitor"("visitorId") ON DELETE SET NULL ON UPDATE CASCADE;
9
+
10
+ -- AddForeignKey
11
+ ALTER TABLE "public"."PostShare" ADD CONSTRAINT "PostShare_visitorId_fkey" FOREIGN KEY ("visitorId") REFERENCES "public"."Visitor"("visitorId") ON DELETE SET NULL ON UPDATE CASCADE;
@@ -0,0 +1,170 @@
1
+ -- CreateEnum
2
+ CREATE TYPE "public"."AuthType" AS ENUM ('credentials', 'oauth', 'hybrid');
3
+
4
+ -- AlterEnum
5
+ -- This migration adds more than one value to an enum.
6
+ -- With PostgreSQL versions 11 and earlier, this is not possible
7
+ -- in a single migration. This can be worked around by creating
8
+ -- multiple migrations, each migration adding only one value to
9
+ -- the enum.
10
+
11
+
12
+ ALTER TYPE "public"."Plan" ADD VALUE 'starter';
13
+ ALTER TYPE "public"."Plan" ADD VALUE 'business';
14
+
15
+ -- AlterTable
16
+ ALTER TABLE "public"."Subscription" ADD COLUMN "razorpayCustomerId" TEXT,
17
+ ADD COLUMN "razorpayPlanId" TEXT,
18
+ ADD COLUMN "razorpaySubscriptionId" TEXT;
19
+
20
+ -- AlterTable
21
+ ALTER TABLE "public"."TokenTransaction" ADD COLUMN "billingPeriod" TEXT,
22
+ ADD COLUMN "integration" TEXT,
23
+ ADD COLUMN "source" TEXT,
24
+ ADD COLUMN "workspaceId" TEXT;
25
+
26
+ -- AlterTable
27
+ ALTER TABLE "public"."User" ADD COLUMN "authType" "public"."AuthType" NOT NULL DEFAULT 'oauth',
28
+ ADD COLUMN "avatarOverrideUrl" TEXT,
29
+ ADD COLUMN "passwordStrength" TEXT;
30
+
31
+ -- CreateTable
32
+ CREATE TABLE "public"."UserSession" (
33
+ "id" TEXT NOT NULL,
34
+ "userId" TEXT NOT NULL,
35
+ "ip" TEXT,
36
+ "userAgent" TEXT,
37
+ "lastUsed" TIMESTAMP(3) NOT NULL,
38
+ "revoked" BOOLEAN NOT NULL DEFAULT false,
39
+ "revokedAt" TIMESTAMP(3),
40
+ "expiresAt" TIMESTAMP(3) NOT NULL,
41
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
42
+
43
+ CONSTRAINT "UserSession_pkey" PRIMARY KEY ("id")
44
+ );
45
+
46
+ -- CreateTable
47
+ CREATE TABLE "public"."UserEmail" (
48
+ "id" TEXT NOT NULL,
49
+ "userId" TEXT NOT NULL,
50
+ "email" TEXT NOT NULL,
51
+ "verified" BOOLEAN NOT NULL DEFAULT false,
52
+ "primary" BOOLEAN NOT NULL DEFAULT false,
53
+ "type" TEXT,
54
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
55
+
56
+ CONSTRAINT "UserEmail_pkey" PRIMARY KEY ("id")
57
+ );
58
+
59
+ -- CreateTable
60
+ CREATE TABLE "public"."UsageAggregate" (
61
+ "id" TEXT NOT NULL,
62
+ "userId" TEXT NOT NULL,
63
+ "workspaceId" TEXT,
64
+ "billingPeriod" TEXT NOT NULL,
65
+ "source" TEXT NOT NULL,
66
+ "tokensUsed" INTEGER NOT NULL,
67
+ "requestCount" INTEGER NOT NULL,
68
+ "updatedAt" TIMESTAMP(3) NOT NULL,
69
+
70
+ CONSTRAINT "UsageAggregate_pkey" PRIMARY KEY ("id")
71
+ );
72
+
73
+ -- CreateTable
74
+ CREATE TABLE "public"."SecurityEvent" (
75
+ "id" TEXT NOT NULL,
76
+ "userId" TEXT,
77
+ "type" TEXT NOT NULL,
78
+ "ip" TEXT,
79
+ "userAgent" TEXT,
80
+ "success" BOOLEAN NOT NULL,
81
+ "metadata" JSONB,
82
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
83
+
84
+ CONSTRAINT "SecurityEvent_pkey" PRIMARY KEY ("id")
85
+ );
86
+
87
+ -- CreateTable
88
+ CREATE TABLE "public"."Invoice" (
89
+ "id" TEXT NOT NULL,
90
+ "userId" TEXT NOT NULL,
91
+ "subscriptionId" TEXT,
92
+ "razorpayInvoiceId" TEXT NOT NULL,
93
+ "amount" INTEGER NOT NULL,
94
+ "currency" TEXT NOT NULL,
95
+ "status" TEXT NOT NULL,
96
+ "periodStart" TIMESTAMP(3) NOT NULL,
97
+ "periodEnd" TIMESTAMP(3) NOT NULL,
98
+ "pdfUrl" TEXT,
99
+ "metadata" JSONB,
100
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
101
+
102
+ CONSTRAINT "Invoice_pkey" PRIMARY KEY ("id")
103
+ );
104
+
105
+ -- CreateTable
106
+ CREATE TABLE "public"."BillingEvent" (
107
+ "id" TEXT NOT NULL,
108
+ "provider" TEXT NOT NULL,
109
+ "eventType" TEXT NOT NULL,
110
+ "eventId" TEXT NOT NULL,
111
+ "payload" JSONB NOT NULL,
112
+ "processed" BOOLEAN NOT NULL DEFAULT false,
113
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
114
+
115
+ CONSTRAINT "BillingEvent_pkey" PRIMARY KEY ("id")
116
+ );
117
+
118
+ -- CreateTable
119
+ CREATE TABLE "public"."PaymentMethod" (
120
+ "id" TEXT NOT NULL,
121
+ "userId" TEXT NOT NULL,
122
+ "provider" TEXT NOT NULL,
123
+ "type" TEXT NOT NULL,
124
+ "brand" TEXT,
125
+ "last4" TEXT,
126
+ "expMonth" INTEGER,
127
+ "expYear" INTEGER,
128
+ "isDefault" BOOLEAN NOT NULL DEFAULT true,
129
+ "metadata" JSONB,
130
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
131
+ "updatedAt" TIMESTAMP(3) NOT NULL,
132
+
133
+ CONSTRAINT "PaymentMethod_pkey" PRIMARY KEY ("id")
134
+ );
135
+
136
+ -- CreateIndex
137
+ CREATE INDEX "UserSession_userId_idx" ON "public"."UserSession"("userId");
138
+
139
+ -- CreateIndex
140
+ CREATE UNIQUE INDEX "UserEmail_email_key" ON "public"."UserEmail"("email");
141
+
142
+ -- CreateIndex
143
+ CREATE UNIQUE INDEX "UsageAggregate_userId_workspaceId_billingPeriod_source_key" ON "public"."UsageAggregate"("userId", "workspaceId", "billingPeriod", "source");
144
+
145
+ -- CreateIndex
146
+ CREATE INDEX "SecurityEvent_userId_createdAt_idx" ON "public"."SecurityEvent"("userId", "createdAt");
147
+
148
+ -- CreateIndex
149
+ CREATE UNIQUE INDEX "BillingEvent_eventId_key" ON "public"."BillingEvent"("eventId");
150
+
151
+ -- CreateIndex
152
+ CREATE INDEX "BillingEvent_provider_eventType_idx" ON "public"."BillingEvent"("provider", "eventType");
153
+
154
+ -- CreateIndex
155
+ CREATE INDEX "Subscription_razorpayCustomerId_idx" ON "public"."Subscription"("razorpayCustomerId");
156
+
157
+ -- CreateIndex
158
+ CREATE INDEX "Subscription_razorpaySubscriptionId_idx" ON "public"."Subscription"("razorpaySubscriptionId");
159
+
160
+ -- AddForeignKey
161
+ ALTER TABLE "public"."UserSession" ADD CONSTRAINT "UserSession_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
162
+
163
+ -- AddForeignKey
164
+ ALTER TABLE "public"."UserEmail" ADD CONSTRAINT "UserEmail_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
165
+
166
+ -- AddForeignKey
167
+ ALTER TABLE "public"."Invoice" ADD CONSTRAINT "Invoice_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
168
+
169
+ -- AddForeignKey
170
+ ALTER TABLE "public"."PaymentMethod" ADD CONSTRAINT "PaymentMethod_userId_fkey" FOREIGN KEY ("userId") REFERENCES "public"."User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -34,10 +34,18 @@ enum Status {
34
34
 
35
35
  enum Plan {
36
36
  free
37
+ starter
37
38
  pro
39
+ business
38
40
  enterprise
39
41
  }
40
42
 
43
+ enum AuthType {
44
+ credentials
45
+ oauth
46
+ hybrid
47
+ }
48
+
41
49
  enum MessageRole {
42
50
  user
43
51
  assistant
@@ -65,9 +73,12 @@ enum ReactionType {
65
73
  /// ─────────────────────────────────────────────
66
74
 
67
75
  model User {
68
- id String @id @default(uuid())
69
- name String
70
- image String?
76
+ id String @id @default(uuid())
77
+ name String
78
+
79
+ image String? // provider image
80
+ avatarOverrideUrl String?
81
+
71
82
  email String @unique
72
83
  password String?
73
84
  emailVerified DateTime?
@@ -86,6 +97,10 @@ model User {
86
97
  creditsUsed Int @default(0)
87
98
  deletedAt DateTime?
88
99
 
100
+ authType AuthType @default(oauth)
101
+
102
+ passwordStrength String? // weak | medium | strong
103
+
89
104
  accounts Account[]
90
105
  integrations Integration[]
91
106
  tokenTransactions TokenTransaction[]
@@ -99,13 +114,47 @@ model User {
99
114
  Onboarding Onboarding?
100
115
  ChatSession ChatSession[]
101
116
 
102
- createdAt DateTime @default(now())
103
- updatedAt DateTime @updatedAt
104
- posts Post[]
117
+ createdAt DateTime @default(now())
118
+ updatedAt DateTime @updatedAt
119
+ posts Post[]
120
+ userSessions UserSession[]
121
+ paymentMethods PaymentMethod[]
122
+ userEmails UserEmail[]
123
+ invoices Invoice[]
105
124
 
106
125
  @@index([status])
107
126
  }
108
127
 
128
+ model UserSession {
129
+ id String @id @default(uuid())
130
+ userId String
131
+ ip String?
132
+ userAgent String?
133
+ lastUsed DateTime
134
+
135
+ revoked Boolean @default(false)
136
+ revokedAt DateTime?
137
+
138
+ expiresAt DateTime
139
+ createdAt DateTime @default(now())
140
+
141
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
142
+
143
+ @@index([userId])
144
+ }
145
+
146
+ model UserEmail {
147
+ id String @id @default(uuid())
148
+ userId String
149
+ email String @unique
150
+ verified Boolean @default(false)
151
+ primary Boolean @default(false)
152
+ type String? // billing | security | notifications
153
+ createdAt DateTime @default(now())
154
+
155
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
156
+ }
157
+
109
158
  model Account {
110
159
  id String @id @default(uuid())
111
160
  userId String
@@ -261,14 +310,34 @@ model AIAgent {
261
310
  ChatSession ChatSession[]
262
311
  }
263
312
 
313
+ model UsageAggregate {
314
+ id String @id @default(uuid())
315
+ userId String
316
+ workspaceId String?
317
+ billingPeriod String
318
+ source String // chat | automation | api
319
+ tokensUsed Int
320
+ requestCount Int
321
+ updatedAt DateTime @updatedAt
322
+
323
+ @@unique([userId, workspaceId, billingPeriod, source])
324
+ }
325
+
264
326
  model TokenTransaction {
265
- id String @id @default(uuid())
327
+ id String @id @default(uuid())
266
328
  userId String
267
329
  agentId String?
268
330
  tokensUsed Int
269
331
  action String
270
- metadata Json?
271
- createdAt DateTime @default(now())
332
+
333
+ source String? // chat | automation | api
334
+ workspaceId String?
335
+ integration String?
336
+
337
+ billingPeriod String? // e.g. "2025-01" (YYYY-MM)
338
+
339
+ metadata Json?
340
+ createdAt DateTime @default(now())
272
341
 
273
342
  user User @relation(fields: [userId], references: [id])
274
343
  agent AIAgent? @relation(fields: [agentId], references: [id])
@@ -519,6 +588,19 @@ model AuditLog {
519
588
  @@index([userId, createdAt])
520
589
  }
521
590
 
591
+ model SecurityEvent {
592
+ id String @id @default(uuid())
593
+ userId String?
594
+ type String // login | logout | password_change | session_revoked
595
+ ip String?
596
+ userAgent String?
597
+ success Boolean
598
+ metadata Json?
599
+ createdAt DateTime @default(now())
600
+
601
+ @@index([userId, createdAt])
602
+ }
603
+
522
604
  /// ─────────────────────────────────────────────
523
605
  /// BILLING / WAITLIST / JOBS / ONBOARDING
524
606
  /// ─────────────────────────────────────────────
@@ -527,13 +609,71 @@ model Subscription {
527
609
  id String @id @default(uuid())
528
610
  userId String
529
611
  plan Plan
530
- status String
612
+ status String // active | trialing | past_due | canceled
531
613
  startedAt DateTime
532
614
  endedAt DateTime?
533
615
  nextPayment DateTime?
534
- metadata Json?
616
+
617
+ razorpayCustomerId String?
618
+ razorpaySubscriptionId String?
619
+ razorpayPlanId String?
620
+
621
+ metadata Json?
535
622
 
536
623
  user User @relation(fields: [userId], references: [id])
624
+
625
+ @@index([razorpayCustomerId])
626
+ @@index([razorpaySubscriptionId])
627
+ }
628
+
629
+ model Invoice {
630
+ id String @id @default(uuid())
631
+ userId String
632
+ subscriptionId String?
633
+ razorpayInvoiceId String
634
+ amount Int
635
+ currency String
636
+ status String // paid | open | failed | refunded
637
+ periodStart DateTime
638
+ periodEnd DateTime
639
+ pdfUrl String?
640
+ metadata Json?
641
+
642
+ createdAt DateTime @default(now())
643
+
644
+ user User @relation(fields: [userId], references: [id])
645
+ }
646
+
647
+ model BillingEvent {
648
+ id String @id @default(uuid())
649
+ provider String // razorpay
650
+
651
+ eventType String
652
+ eventId String @unique // razorpay event ID
653
+
654
+ payload Json
655
+ processed Boolean @default(false)
656
+ createdAt DateTime @default(now())
657
+
658
+ @@index([provider, eventType])
659
+ }
660
+
661
+ model PaymentMethod {
662
+ id String @id @default(uuid())
663
+ userId String
664
+ provider String // razorpay | stripe | paypal
665
+ type String // card
666
+ brand String?
667
+ last4 String?
668
+ expMonth Int?
669
+ expYear Int?
670
+ isDefault Boolean @default(true)
671
+ metadata Json?
672
+
673
+ createdAt DateTime @default(now())
674
+ updatedAt DateTime @updatedAt
675
+
676
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
537
677
  }
538
678
 
539
679
  model WaitList {
@@ -753,7 +893,7 @@ model PostReaction {
753
893
  deletedAt DateTime?
754
894
 
755
895
  post Post @relation(fields: [postId], references: [id], onDelete: Cascade)
756
- visitor Visitor? @relation(fields: [visitorId], references: [id])
896
+ visitor Visitor? @relation(fields: [visitorId], references: [visitorId])
757
897
  identity CommentIdentity? @relation(fields: [identityId], references: [id])
758
898
 
759
899
  createdAt DateTime @default(now())
@@ -780,7 +920,7 @@ model PostShare {
780
920
  metadata Json?
781
921
 
782
922
  post Post @relation(fields: [postId], references: [id], onDelete: Cascade)
783
- visitor Visitor? @relation(fields: [visitorId], references: [id])
923
+ visitor Visitor? @relation(fields: [visitorId], references: [visitorId])
784
924
  identity CommentIdentity? @relation(fields: [identityId], references: [id])
785
925
 
786
926
  createdAt DateTime @default(now())