@varaos/db 1.1.14 → 1.1.16

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.14",
3
+ "version": "1.1.16",
4
4
  "private": false,
5
5
  "main": "index.js",
6
6
  "files": [
@@ -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;
@@ -0,0 +1,3 @@
1
+ -- AlterTable
2
+ ALTER TABLE "public"."User" ADD COLUMN "storageLimit" BIGINT NOT NULL DEFAULT 524288000,
3
+ ADD COLUMN "storageUsed" BIGINT NOT NULL DEFAULT 0;
@@ -0,0 +1,21 @@
1
+ -- CreateTable
2
+ CREATE TABLE "public"."UserFile" (
3
+ "id" TEXT NOT NULL,
4
+ "userId" TEXT NOT NULL,
5
+ "path" TEXT NOT NULL,
6
+ "size" BIGINT NOT NULL,
7
+ "mimeType" TEXT NOT NULL,
8
+ "category" TEXT NOT NULL,
9
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
10
+
11
+ CONSTRAINT "UserFile_pkey" PRIMARY KEY ("id")
12
+ );
13
+
14
+ -- CreateIndex
15
+ CREATE INDEX "UserFile_userId_idx" ON "public"."UserFile"("userId");
16
+
17
+ -- CreateIndex
18
+ CREATE INDEX "UserFile_category_idx" ON "public"."UserFile"("category");
19
+
20
+ -- AddForeignKey
21
+ ALTER TABLE "public"."UserFile" ADD CONSTRAINT "UserFile_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,13 @@ 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
+
104
+ storageUsed BigInt @default(0) // bytes
105
+ storageLimit BigInt @default(524288000) // 500 MB (beta)
106
+
89
107
  accounts Account[]
90
108
  integrations Integration[]
91
109
  tokenTransactions TokenTransaction[]
@@ -99,13 +117,65 @@ model User {
99
117
  Onboarding Onboarding?
100
118
  ChatSession ChatSession[]
101
119
 
102
- createdAt DateTime @default(now())
103
- updatedAt DateTime @updatedAt
104
- posts Post[]
120
+ createdAt DateTime @default(now())
121
+ updatedAt DateTime @updatedAt
122
+ posts Post[]
123
+ userSessions UserSession[]
124
+ paymentMethods PaymentMethod[]
125
+ userEmails UserEmail[]
126
+ invoices Invoice[]
127
+ userFiles UserFile[]
105
128
 
106
129
  @@index([status])
107
130
  }
108
131
 
132
+ model UserFile {
133
+ id String @id @default(uuid())
134
+ userId String
135
+
136
+ path String // local path or CDN URL
137
+ size BigInt // bytes
138
+ mimeType String
139
+ category String // avatar | memory | export | attachment
140
+
141
+ createdAt DateTime @default(now())
142
+
143
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
144
+
145
+ @@index([userId])
146
+ @@index([category])
147
+ }
148
+
149
+ model UserSession {
150
+ id String @id @default(uuid())
151
+ userId String
152
+ ip String?
153
+ userAgent String?
154
+ lastUsed DateTime
155
+
156
+ revoked Boolean @default(false)
157
+ revokedAt DateTime?
158
+
159
+ expiresAt DateTime
160
+ createdAt DateTime @default(now())
161
+
162
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
163
+
164
+ @@index([userId])
165
+ }
166
+
167
+ model UserEmail {
168
+ id String @id @default(uuid())
169
+ userId String
170
+ email String @unique
171
+ verified Boolean @default(false)
172
+ primary Boolean @default(false)
173
+ type String? // billing | security | notifications
174
+ createdAt DateTime @default(now())
175
+
176
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
177
+ }
178
+
109
179
  model Account {
110
180
  id String @id @default(uuid())
111
181
  userId String
@@ -261,14 +331,34 @@ model AIAgent {
261
331
  ChatSession ChatSession[]
262
332
  }
263
333
 
334
+ model UsageAggregate {
335
+ id String @id @default(uuid())
336
+ userId String
337
+ workspaceId String?
338
+ billingPeriod String
339
+ source String // chat | automation | api
340
+ tokensUsed Int
341
+ requestCount Int
342
+ updatedAt DateTime @updatedAt
343
+
344
+ @@unique([userId, workspaceId, billingPeriod, source])
345
+ }
346
+
264
347
  model TokenTransaction {
265
- id String @id @default(uuid())
348
+ id String @id @default(uuid())
266
349
  userId String
267
350
  agentId String?
268
351
  tokensUsed Int
269
352
  action String
270
- metadata Json?
271
- createdAt DateTime @default(now())
353
+
354
+ source String? // chat | automation | api
355
+ workspaceId String?
356
+ integration String?
357
+
358
+ billingPeriod String? // e.g. "2025-01" (YYYY-MM)
359
+
360
+ metadata Json?
361
+ createdAt DateTime @default(now())
272
362
 
273
363
  user User @relation(fields: [userId], references: [id])
274
364
  agent AIAgent? @relation(fields: [agentId], references: [id])
@@ -519,6 +609,19 @@ model AuditLog {
519
609
  @@index([userId, createdAt])
520
610
  }
521
611
 
612
+ model SecurityEvent {
613
+ id String @id @default(uuid())
614
+ userId String?
615
+ type String // login | logout | password_change | session_revoked
616
+ ip String?
617
+ userAgent String?
618
+ success Boolean
619
+ metadata Json?
620
+ createdAt DateTime @default(now())
621
+
622
+ @@index([userId, createdAt])
623
+ }
624
+
522
625
  /// ─────────────────────────────────────────────
523
626
  /// BILLING / WAITLIST / JOBS / ONBOARDING
524
627
  /// ─────────────────────────────────────────────
@@ -527,13 +630,71 @@ model Subscription {
527
630
  id String @id @default(uuid())
528
631
  userId String
529
632
  plan Plan
530
- status String
633
+ status String // active | trialing | past_due | canceled
531
634
  startedAt DateTime
532
635
  endedAt DateTime?
533
636
  nextPayment DateTime?
534
- metadata Json?
637
+
638
+ razorpayCustomerId String?
639
+ razorpaySubscriptionId String?
640
+ razorpayPlanId String?
641
+
642
+ metadata Json?
535
643
 
536
644
  user User @relation(fields: [userId], references: [id])
645
+
646
+ @@index([razorpayCustomerId])
647
+ @@index([razorpaySubscriptionId])
648
+ }
649
+
650
+ model Invoice {
651
+ id String @id @default(uuid())
652
+ userId String
653
+ subscriptionId String?
654
+ razorpayInvoiceId String
655
+ amount Int
656
+ currency String
657
+ status String // paid | open | failed | refunded
658
+ periodStart DateTime
659
+ periodEnd DateTime
660
+ pdfUrl String?
661
+ metadata Json?
662
+
663
+ createdAt DateTime @default(now())
664
+
665
+ user User @relation(fields: [userId], references: [id])
666
+ }
667
+
668
+ model BillingEvent {
669
+ id String @id @default(uuid())
670
+ provider String // razorpay
671
+
672
+ eventType String
673
+ eventId String @unique // razorpay event ID
674
+
675
+ payload Json
676
+ processed Boolean @default(false)
677
+ createdAt DateTime @default(now())
678
+
679
+ @@index([provider, eventType])
680
+ }
681
+
682
+ model PaymentMethod {
683
+ id String @id @default(uuid())
684
+ userId String
685
+ provider String // razorpay | stripe | paypal
686
+ type String // card
687
+ brand String?
688
+ last4 String?
689
+ expMonth Int?
690
+ expYear Int?
691
+ isDefault Boolean @default(true)
692
+ metadata Json?
693
+
694
+ createdAt DateTime @default(now())
695
+ updatedAt DateTime @updatedAt
696
+
697
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
537
698
  }
538
699
 
539
700
  model WaitList {