@ucptools/validator 1.0.1 → 1.2.0
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/dist/auth/config.d.ts +20 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +114 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +17 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/middleware.d.ts +45 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +170 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/service.d.ts +80 -0
- package/dist/auth/service.d.ts.map +1 -0
- package/dist/auth/service.js +298 -0
- package/dist/auth/service.js.map +1 -0
- package/dist/cli/index.js +96 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mock-server.d.ts +20 -0
- package/dist/cli/mock-server.d.ts.map +1 -0
- package/dist/cli/mock-server.js +261 -0
- package/dist/cli/mock-server.js.map +1 -0
- package/dist/db/index.d.ts +8 -2
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +22 -5
- package/dist/db/index.js.map +1 -1
- package/dist/db/schema.d.ts +3570 -128
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +377 -17
- package/dist/db/schema.js.map +1 -1
- package/dist/db/utils.d.ts +252 -0
- package/dist/db/utils.d.ts.map +1 -0
- package/dist/db/utils.js +295 -0
- package/dist/db/utils.js.map +1 -0
- package/dist/feed-analyzer/feed-analyzer.d.ts.map +1 -1
- package/dist/feed-analyzer/feed-analyzer.js +218 -4
- package/dist/feed-analyzer/feed-analyzer.js.map +1 -1
- package/dist/feed-analyzer/types.d.ts +82 -1
- package/dist/feed-analyzer/types.d.ts.map +1 -1
- package/dist/feed-analyzer/types.js +13 -0
- package/dist/feed-analyzer/types.js.map +1 -1
- package/dist/generator/profile-builder.d.ts.map +1 -1
- package/dist/generator/profile-builder.js +158 -115
- package/dist/generator/profile-builder.js.map +1 -1
- package/dist/lib/analytics.d.ts +349 -0
- package/dist/lib/analytics.d.ts.map +1 -0
- package/dist/lib/analytics.js +198 -0
- package/dist/lib/analytics.js.map +1 -0
- package/dist/security/security-scanner.d.ts.map +1 -1
- package/dist/security/security-scanner.js +130 -2
- package/dist/security/security-scanner.js.map +1 -1
- package/dist/security/types.d.ts +32 -0
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/types.js.map +1 -1
- package/dist/services/analytics.d.ts +114 -0
- package/dist/services/analytics.d.ts.map +1 -0
- package/dist/services/analytics.js +862 -0
- package/dist/services/analytics.js.map +1 -0
- package/dist/services/badge.d.ts +31 -0
- package/dist/services/badge.d.ts.map +1 -0
- package/dist/services/badge.js +152 -0
- package/dist/services/badge.js.map +1 -0
- package/dist/services/cron.d.ts +127 -0
- package/dist/services/cron.d.ts.map +1 -0
- package/dist/services/cron.js +693 -0
- package/dist/services/cron.js.map +1 -0
- package/dist/services/directory.d.ts +2 -0
- package/dist/services/directory.d.ts.map +1 -1
- package/dist/services/directory.js +45 -27
- package/dist/services/directory.js.map +1 -1
- package/dist/services/email.d.ts +127 -0
- package/dist/services/email.d.ts.map +1 -0
- package/dist/services/email.js +876 -0
- package/dist/services/email.js.map +1 -0
- package/dist/services/hosted-profiles.d.ts +77 -0
- package/dist/services/hosted-profiles.d.ts.map +1 -0
- package/dist/services/hosted-profiles.js +433 -0
- package/dist/services/hosted-profiles.js.map +1 -0
- package/dist/services/latency.d.ts +67 -0
- package/dist/services/latency.d.ts.map +1 -0
- package/dist/services/latency.js +274 -0
- package/dist/services/latency.js.map +1 -0
- package/dist/services/manifest-compliance.d.ts +64 -0
- package/dist/services/manifest-compliance.d.ts.map +1 -0
- package/dist/services/manifest-compliance.js +271 -0
- package/dist/services/manifest-compliance.js.map +1 -0
- package/dist/services/monitoring-diff.d.ts +31 -0
- package/dist/services/monitoring-diff.d.ts.map +1 -0
- package/dist/services/monitoring-diff.js +189 -0
- package/dist/services/monitoring-diff.js.map +1 -0
- package/dist/services/notifications.d.ts +46 -0
- package/dist/services/notifications.d.ts.map +1 -0
- package/dist/services/notifications.js +88 -0
- package/dist/services/notifications.js.map +1 -0
- package/dist/services/posthog.d.ts +43 -0
- package/dist/services/posthog.d.ts.map +1 -0
- package/dist/services/posthog.js +110 -0
- package/dist/services/posthog.js.map +1 -0
- package/dist/services/stripe.d.ts +93 -0
- package/dist/services/stripe.d.ts.map +1 -0
- package/dist/services/stripe.js +490 -0
- package/dist/services/stripe.js.map +1 -0
- package/dist/services/validation-history.d.ts +99 -0
- package/dist/services/validation-history.d.ts.map +1 -0
- package/dist/services/validation-history.js +344 -0
- package/dist/services/validation-history.js.map +1 -0
- package/dist/services/validation-logging.d.ts +103 -0
- package/dist/services/validation-logging.d.ts.map +1 -0
- package/dist/services/validation-logging.js +210 -0
- package/dist/services/validation-logging.js.map +1 -0
- package/dist/services/validation.d.ts +119 -0
- package/dist/services/validation.d.ts.map +1 -0
- package/dist/services/validation.js +1185 -0
- package/dist/services/validation.js.map +1 -0
- package/dist/simulator/agent-simulator.d.ts.map +1 -1
- package/dist/simulator/agent-simulator.js +229 -9
- package/dist/simulator/agent-simulator.js.map +1 -1
- package/dist/simulator/types.d.ts +26 -0
- package/dist/simulator/types.d.ts.map +1 -1
- package/dist/simulator/types.js.map +1 -1
- package/dist/types/acp-validation.d.ts +87 -0
- package/dist/types/acp-validation.d.ts.map +1 -0
- package/dist/types/acp-validation.js +40 -0
- package/dist/types/acp-validation.js.map +1 -0
- package/dist/types/analytics.d.ts +182 -0
- package/dist/types/analytics.d.ts.map +1 -0
- package/dist/types/analytics.js +7 -0
- package/dist/types/analytics.js.map +1 -0
- package/dist/types/generator.d.ts +4 -0
- package/dist/types/generator.d.ts.map +1 -1
- package/dist/types/ucp-profile.d.ts +32 -2
- package/dist/types/ucp-profile.d.ts.map +1 -1
- package/dist/types/ucp-profile.js +31 -1
- package/dist/types/ucp-profile.js.map +1 -1
- package/dist/types/validation.d.ts +14 -0
- package/dist/types/validation.d.ts.map +1 -1
- package/dist/types/validation.js +19 -0
- package/dist/types/validation.js.map +1 -1
- package/dist/validator/acp/index.d.ts +31 -0
- package/dist/validator/acp/index.d.ts.map +1 -0
- package/dist/validator/acp/index.js +574 -0
- package/dist/validator/acp/index.js.map +1 -0
- package/dist/validator/network-validator.d.ts.map +1 -1
- package/dist/validator/network-validator.js +23 -13
- package/dist/validator/network-validator.js.map +1 -1
- package/dist/validator/rules-validator.d.ts +8 -0
- package/dist/validator/rules-validator.d.ts.map +1 -1
- package/dist/validator/rules-validator.js +159 -43
- package/dist/validator/rules-validator.js.map +1 -1
- package/dist/validator/structural-validator.d.ts.map +1 -1
- package/dist/validator/structural-validator.js +283 -53
- package/dist/validator/structural-validator.js.map +1 -1
- package/dist/validator/utils.d.ts +62 -0
- package/dist/validator/utils.d.ts.map +1 -0
- package/dist/validator/utils.js +151 -0
- package/dist/validator/utils.js.map +1 -0
- package/package.json +45 -12
- package/.claude/settings.local.json +0 -60
- package/.vercel/README.txt +0 -11
- package/.vercel/project.json +0 -1
- package/publish-output.txt +0 -0
- package/tsconfig.json +0 -20
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Utility Functions
|
|
3
|
+
* Helper functions for database operations, seeding, and testing
|
|
4
|
+
*/
|
|
5
|
+
import { users, apiKeys, type NewSubscription, type NewMonitoredDomain, type NewValidationHistoryEntry } from './schema.js';
|
|
6
|
+
/**
|
|
7
|
+
* Create a new user with hashed password
|
|
8
|
+
*/
|
|
9
|
+
export declare function createUser(data: {
|
|
10
|
+
email: string;
|
|
11
|
+
name?: string;
|
|
12
|
+
password?: string;
|
|
13
|
+
stripeCustomerId?: string;
|
|
14
|
+
}): Promise<typeof users.$inferSelect>;
|
|
15
|
+
/**
|
|
16
|
+
* Get user by email
|
|
17
|
+
*/
|
|
18
|
+
export declare function getUserByEmail(email: string): Promise<{
|
|
19
|
+
id: string;
|
|
20
|
+
name: string | null;
|
|
21
|
+
email: string;
|
|
22
|
+
emailVerified: Date | null;
|
|
23
|
+
image: string | null;
|
|
24
|
+
passwordHash: string | null;
|
|
25
|
+
stripeCustomerId: string | null;
|
|
26
|
+
createdAt: Date;
|
|
27
|
+
updatedAt: Date;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Get user by ID
|
|
31
|
+
*/
|
|
32
|
+
export declare function getUserById(id: string): Promise<{
|
|
33
|
+
id: string;
|
|
34
|
+
name: string | null;
|
|
35
|
+
email: string;
|
|
36
|
+
emailVerified: Date | null;
|
|
37
|
+
image: string | null;
|
|
38
|
+
passwordHash: string | null;
|
|
39
|
+
stripeCustomerId: string | null;
|
|
40
|
+
createdAt: Date;
|
|
41
|
+
updatedAt: Date;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Create or update a subscription
|
|
45
|
+
*/
|
|
46
|
+
export declare function upsertSubscription(data: NewSubscription): Promise<{
|
|
47
|
+
id: string;
|
|
48
|
+
status: string;
|
|
49
|
+
createdAt: Date;
|
|
50
|
+
updatedAt: Date;
|
|
51
|
+
userId: string;
|
|
52
|
+
stripeSubscriptionId: string | null;
|
|
53
|
+
stripePriceId: string | null;
|
|
54
|
+
tier: string;
|
|
55
|
+
currentPeriodStart: Date | null;
|
|
56
|
+
currentPeriodEnd: Date | null;
|
|
57
|
+
cancelAtPeriodEnd: boolean | null;
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* Get user's current subscription
|
|
61
|
+
*/
|
|
62
|
+
export declare function getUserSubscription(userId: string): Promise<{
|
|
63
|
+
id: string;
|
|
64
|
+
userId: string;
|
|
65
|
+
stripeSubscriptionId: string | null;
|
|
66
|
+
stripePriceId: string | null;
|
|
67
|
+
tier: string;
|
|
68
|
+
status: string;
|
|
69
|
+
currentPeriodStart: Date | null;
|
|
70
|
+
currentPeriodEnd: Date | null;
|
|
71
|
+
cancelAtPeriodEnd: boolean | null;
|
|
72
|
+
createdAt: Date;
|
|
73
|
+
updatedAt: Date;
|
|
74
|
+
}>;
|
|
75
|
+
import { getTierLimits } from '../api/tier-config/tiers.js';
|
|
76
|
+
export { getTierLimits };
|
|
77
|
+
/**
|
|
78
|
+
* Add a monitored domain for a user
|
|
79
|
+
*/
|
|
80
|
+
export declare function addMonitoredDomain(data: NewMonitoredDomain): Promise<{
|
|
81
|
+
id: string;
|
|
82
|
+
domain: string;
|
|
83
|
+
createdAt: Date;
|
|
84
|
+
updatedAt: Date;
|
|
85
|
+
userId: string;
|
|
86
|
+
displayName: string | null;
|
|
87
|
+
lastScore: number | null;
|
|
88
|
+
lastGrade: string | null;
|
|
89
|
+
lastCheckedAt: Date | null;
|
|
90
|
+
alertOnScoreChange: boolean | null;
|
|
91
|
+
alertOnGradeChange: boolean | null;
|
|
92
|
+
alertThreshold: number | null;
|
|
93
|
+
monitoringFrequency: string | null;
|
|
94
|
+
webhookUrl: string | null;
|
|
95
|
+
webhookEnabled: boolean | null;
|
|
96
|
+
lastSeverity: string | null;
|
|
97
|
+
isActive: boolean | null;
|
|
98
|
+
}>;
|
|
99
|
+
/**
|
|
100
|
+
* Get user's monitored domains
|
|
101
|
+
*/
|
|
102
|
+
export declare function getUserMonitoredDomains(userId: string): Promise<{
|
|
103
|
+
id: string;
|
|
104
|
+
userId: string;
|
|
105
|
+
domain: string;
|
|
106
|
+
displayName: string | null;
|
|
107
|
+
lastScore: number | null;
|
|
108
|
+
lastGrade: string | null;
|
|
109
|
+
lastCheckedAt: Date | null;
|
|
110
|
+
alertOnScoreChange: boolean | null;
|
|
111
|
+
alertOnGradeChange: boolean | null;
|
|
112
|
+
alertThreshold: number | null;
|
|
113
|
+
monitoringFrequency: string | null;
|
|
114
|
+
webhookUrl: string | null;
|
|
115
|
+
webhookEnabled: boolean | null;
|
|
116
|
+
lastSeverity: string | null;
|
|
117
|
+
isActive: boolean | null;
|
|
118
|
+
createdAt: Date;
|
|
119
|
+
updatedAt: Date;
|
|
120
|
+
}[]>;
|
|
121
|
+
/**
|
|
122
|
+
* Update domain validation results
|
|
123
|
+
*/
|
|
124
|
+
export declare function updateDomainValidation(domainId: string, score: number, grade: string, hasUcp: boolean): Promise<{
|
|
125
|
+
id: string;
|
|
126
|
+
userId: string;
|
|
127
|
+
domain: string;
|
|
128
|
+
displayName: string | null;
|
|
129
|
+
lastScore: number | null;
|
|
130
|
+
lastGrade: string | null;
|
|
131
|
+
lastCheckedAt: Date | null;
|
|
132
|
+
alertOnScoreChange: boolean | null;
|
|
133
|
+
alertOnGradeChange: boolean | null;
|
|
134
|
+
alertThreshold: number | null;
|
|
135
|
+
monitoringFrequency: string | null;
|
|
136
|
+
webhookUrl: string | null;
|
|
137
|
+
webhookEnabled: boolean | null;
|
|
138
|
+
lastSeverity: string | null;
|
|
139
|
+
isActive: boolean | null;
|
|
140
|
+
createdAt: Date;
|
|
141
|
+
updatedAt: Date;
|
|
142
|
+
}>;
|
|
143
|
+
/**
|
|
144
|
+
* Add validation history entry
|
|
145
|
+
*/
|
|
146
|
+
export declare function addValidationHistory(data: NewValidationHistoryEntry): Promise<{
|
|
147
|
+
id: string;
|
|
148
|
+
grade: string | null;
|
|
149
|
+
score: number | null;
|
|
150
|
+
severity: string | null;
|
|
151
|
+
domainId: string;
|
|
152
|
+
hasUcp: boolean | null;
|
|
153
|
+
issuesCount: number | null;
|
|
154
|
+
errorsCount: number | null;
|
|
155
|
+
warningsCount: number | null;
|
|
156
|
+
resultJson: string | null;
|
|
157
|
+
changesSummary: string | null;
|
|
158
|
+
validatedAt: Date;
|
|
159
|
+
}>;
|
|
160
|
+
/**
|
|
161
|
+
* Get validation history for a domain
|
|
162
|
+
*/
|
|
163
|
+
export declare function getDomainHistory(domainId: string, limit?: number): Promise<{
|
|
164
|
+
id: string;
|
|
165
|
+
domainId: string;
|
|
166
|
+
score: number | null;
|
|
167
|
+
grade: string | null;
|
|
168
|
+
hasUcp: boolean | null;
|
|
169
|
+
issuesCount: number | null;
|
|
170
|
+
errorsCount: number | null;
|
|
171
|
+
warningsCount: number | null;
|
|
172
|
+
resultJson: string | null;
|
|
173
|
+
severity: string | null;
|
|
174
|
+
changesSummary: string | null;
|
|
175
|
+
validatedAt: Date;
|
|
176
|
+
}[]>;
|
|
177
|
+
/**
|
|
178
|
+
* Create API key for user
|
|
179
|
+
*/
|
|
180
|
+
export declare function createApiKey(userId: string, name: string, monthlyLimit?: number): Promise<{
|
|
181
|
+
key: string;
|
|
182
|
+
apiKey: typeof apiKeys.$inferSelect;
|
|
183
|
+
}>;
|
|
184
|
+
/**
|
|
185
|
+
* Get user's API keys
|
|
186
|
+
*/
|
|
187
|
+
export declare function getUserApiKeys(userId: string): Promise<{
|
|
188
|
+
id: string;
|
|
189
|
+
userId: string;
|
|
190
|
+
keyHash: string;
|
|
191
|
+
keyPrefix: string;
|
|
192
|
+
name: string;
|
|
193
|
+
lastUsedAt: Date | null;
|
|
194
|
+
callsThisMonth: number | null;
|
|
195
|
+
monthlyLimit: number | null;
|
|
196
|
+
isActive: boolean | null;
|
|
197
|
+
expiresAt: Date | null;
|
|
198
|
+
createdAt: Date;
|
|
199
|
+
}[]>;
|
|
200
|
+
/**
|
|
201
|
+
* Increment API key usage
|
|
202
|
+
*/
|
|
203
|
+
export declare function incrementApiKeyUsage(keyId: string): Promise<{
|
|
204
|
+
id: string;
|
|
205
|
+
userId: string;
|
|
206
|
+
keyHash: string;
|
|
207
|
+
keyPrefix: string;
|
|
208
|
+
name: string;
|
|
209
|
+
lastUsedAt: Date | null;
|
|
210
|
+
callsThisMonth: number | null;
|
|
211
|
+
monthlyLimit: number | null;
|
|
212
|
+
isActive: boolean | null;
|
|
213
|
+
expiresAt: Date | null;
|
|
214
|
+
createdAt: Date;
|
|
215
|
+
}>;
|
|
216
|
+
/**
|
|
217
|
+
* Reset monthly API call counters (for cron job)
|
|
218
|
+
*/
|
|
219
|
+
export declare function resetMonthlyApiCalls(): Promise<void>;
|
|
220
|
+
/**
|
|
221
|
+
* Check if user can add more domains based on their subscription tier
|
|
222
|
+
*
|
|
223
|
+
* Returns an object with:
|
|
224
|
+
* - allowed: boolean - whether the user can add more domains
|
|
225
|
+
* - currentCount: number - current number of active domains
|
|
226
|
+
* - maxAllowed: number - maximum domains allowed for their tier
|
|
227
|
+
* - tier: string - the user's subscription tier
|
|
228
|
+
*/
|
|
229
|
+
export declare function canAddDomain(userId: string): Promise<{
|
|
230
|
+
allowed: boolean;
|
|
231
|
+
currentCount: number;
|
|
232
|
+
maxAllowed: number;
|
|
233
|
+
tier: string;
|
|
234
|
+
}>;
|
|
235
|
+
/**
|
|
236
|
+
* Check if user can add more hosted profiles based on their subscription tier
|
|
237
|
+
*/
|
|
238
|
+
export declare function canAddHostedProfile(userId: string): Promise<{
|
|
239
|
+
allowed: boolean;
|
|
240
|
+
currentCount: number;
|
|
241
|
+
maxAllowed: number;
|
|
242
|
+
tier: string;
|
|
243
|
+
}>;
|
|
244
|
+
/**
|
|
245
|
+
* Check if user can create more API keys
|
|
246
|
+
*/
|
|
247
|
+
export declare function canCreateApiKey(userId: string): Promise<boolean>;
|
|
248
|
+
/**
|
|
249
|
+
* Clean up test data (for testing)
|
|
250
|
+
*/
|
|
251
|
+
export declare function cleanupTestData(email: string): Promise<void>;
|
|
252
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/db/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACH,KAAK,EAIL,OAAO,EAGP,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAEjC,MAAM,aAAa,CAAC;AAKrB;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B,GAAG,OAAO,CAAC,OAAO,KAAK,CAAC,YAAY,CAAC,CAYrC;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM;;;;;;;;;;GAIjD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;GAI3C;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,eAAe;;;;;;;;;;;;GAyB7D;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;;;GAOvD;AAID,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB;;;;;;;;;;;;;;;;;;GAoBhE;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;KAM3D;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CACxC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO;;;;;;;;;;;;;;;;;;GAgBlB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,yBAAyB;;;;;;;;;;;;;GAIzE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAW;;;;;;;;;;;;;KASrB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,OAAO,CAAC,YAAY,CAAA;CAAE,CAAC,CAoB/D;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;;;KAGlD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM;;;;;;;;;;;;GAavD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,kBASzC;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC,CA6BD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC,CA2BD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUtE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,iBASlD"}
|
package/dist/db/utils.js
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Database Utility Functions
|
|
4
|
+
* Helper functions for database operations, seeding, and testing
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getTierLimits = void 0;
|
|
8
|
+
exports.createUser = createUser;
|
|
9
|
+
exports.getUserByEmail = getUserByEmail;
|
|
10
|
+
exports.getUserById = getUserById;
|
|
11
|
+
exports.upsertSubscription = upsertSubscription;
|
|
12
|
+
exports.getUserSubscription = getUserSubscription;
|
|
13
|
+
exports.addMonitoredDomain = addMonitoredDomain;
|
|
14
|
+
exports.getUserMonitoredDomains = getUserMonitoredDomains;
|
|
15
|
+
exports.updateDomainValidation = updateDomainValidation;
|
|
16
|
+
exports.addValidationHistory = addValidationHistory;
|
|
17
|
+
exports.getDomainHistory = getDomainHistory;
|
|
18
|
+
exports.createApiKey = createApiKey;
|
|
19
|
+
exports.getUserApiKeys = getUserApiKeys;
|
|
20
|
+
exports.incrementApiKeyUsage = incrementApiKeyUsage;
|
|
21
|
+
exports.resetMonthlyApiCalls = resetMonthlyApiCalls;
|
|
22
|
+
exports.canAddDomain = canAddDomain;
|
|
23
|
+
exports.canAddHostedProfile = canAddHostedProfile;
|
|
24
|
+
exports.canCreateApiKey = canCreateApiKey;
|
|
25
|
+
exports.cleanupTestData = cleanupTestData;
|
|
26
|
+
const index_js_1 = require("./index.js");
|
|
27
|
+
const schema_js_1 = require("./schema.js");
|
|
28
|
+
const drizzle_orm_1 = require("drizzle-orm");
|
|
29
|
+
const bcryptjs_1 = require("bcryptjs");
|
|
30
|
+
const nanoid_1 = require("nanoid");
|
|
31
|
+
/**
|
|
32
|
+
* Create a new user with hashed password
|
|
33
|
+
*/
|
|
34
|
+
async function createUser(data) {
|
|
35
|
+
const db = (0, index_js_1.getDb)();
|
|
36
|
+
const userData = {
|
|
37
|
+
email: data.email,
|
|
38
|
+
name: data.name,
|
|
39
|
+
passwordHash: data.password ? await (0, bcryptjs_1.hash)(data.password, 10) : undefined,
|
|
40
|
+
stripeCustomerId: data.stripeCustomerId,
|
|
41
|
+
};
|
|
42
|
+
const [user] = await db.insert(schema_js_1.users).values(userData).returning();
|
|
43
|
+
return user;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get user by email
|
|
47
|
+
*/
|
|
48
|
+
async function getUserByEmail(email) {
|
|
49
|
+
const db = (0, index_js_1.getDb)();
|
|
50
|
+
const [user] = await db.select().from(schema_js_1.users).where((0, drizzle_orm_1.eq)(schema_js_1.users.email, email));
|
|
51
|
+
return user || null;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Get user by ID
|
|
55
|
+
*/
|
|
56
|
+
async function getUserById(id) {
|
|
57
|
+
const db = (0, index_js_1.getDb)();
|
|
58
|
+
const [user] = await db.select().from(schema_js_1.users).where((0, drizzle_orm_1.eq)(schema_js_1.users.id, id));
|
|
59
|
+
return user || null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Create or update a subscription
|
|
63
|
+
*/
|
|
64
|
+
async function upsertSubscription(data) {
|
|
65
|
+
const db = (0, index_js_1.getDb)();
|
|
66
|
+
// Check if subscription exists for this user
|
|
67
|
+
const [existing] = await db
|
|
68
|
+
.select()
|
|
69
|
+
.from(schema_js_1.subscriptions)
|
|
70
|
+
.where((0, drizzle_orm_1.eq)(schema_js_1.subscriptions.userId, data.userId));
|
|
71
|
+
if (existing) {
|
|
72
|
+
// Update existing subscription
|
|
73
|
+
const [updated] = await db
|
|
74
|
+
.update(schema_js_1.subscriptions)
|
|
75
|
+
.set({
|
|
76
|
+
...data,
|
|
77
|
+
updatedAt: new Date(),
|
|
78
|
+
})
|
|
79
|
+
.where((0, drizzle_orm_1.eq)(schema_js_1.subscriptions.userId, data.userId))
|
|
80
|
+
.returning();
|
|
81
|
+
return updated;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// Create new subscription
|
|
85
|
+
const [created] = await db.insert(schema_js_1.subscriptions).values(data).returning();
|
|
86
|
+
return created;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get user's current subscription
|
|
91
|
+
*/
|
|
92
|
+
async function getUserSubscription(userId) {
|
|
93
|
+
const db = (0, index_js_1.getDb)();
|
|
94
|
+
const [subscription] = await db
|
|
95
|
+
.select()
|
|
96
|
+
.from(schema_js_1.subscriptions)
|
|
97
|
+
.where((0, drizzle_orm_1.eq)(schema_js_1.subscriptions.userId, userId));
|
|
98
|
+
return subscription || null;
|
|
99
|
+
}
|
|
100
|
+
// Import and re-export getTierLimits from centralized config
|
|
101
|
+
// All tier limits are defined in src/api/tier-config/tiers.ts
|
|
102
|
+
const tiers_js_1 = require("../api/tier-config/tiers.js");
|
|
103
|
+
Object.defineProperty(exports, "getTierLimits", { enumerable: true, get: function () { return tiers_js_1.getTierLimits; } });
|
|
104
|
+
/**
|
|
105
|
+
* Add a monitored domain for a user
|
|
106
|
+
*/
|
|
107
|
+
async function addMonitoredDomain(data) {
|
|
108
|
+
const db = (0, index_js_1.getDb)();
|
|
109
|
+
// Check if domain already exists for this user
|
|
110
|
+
const [existing] = await db
|
|
111
|
+
.select()
|
|
112
|
+
.from(schema_js_1.monitoredDomains)
|
|
113
|
+
.where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema_js_1.monitoredDomains.userId, data.userId), (0, drizzle_orm_1.eq)(schema_js_1.monitoredDomains.domain, data.domain)));
|
|
114
|
+
if (existing) {
|
|
115
|
+
throw new Error(`Domain ${data.domain} is already being monitored`);
|
|
116
|
+
}
|
|
117
|
+
const [domain] = await db.insert(schema_js_1.monitoredDomains).values(data).returning();
|
|
118
|
+
return domain;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get user's monitored domains
|
|
122
|
+
*/
|
|
123
|
+
async function getUserMonitoredDomains(userId) {
|
|
124
|
+
const db = (0, index_js_1.getDb)();
|
|
125
|
+
return db
|
|
126
|
+
.select()
|
|
127
|
+
.from(schema_js_1.monitoredDomains)
|
|
128
|
+
.where((0, drizzle_orm_1.eq)(schema_js_1.monitoredDomains.userId, userId));
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Update domain validation results
|
|
132
|
+
*/
|
|
133
|
+
async function updateDomainValidation(domainId, score, grade, hasUcp) {
|
|
134
|
+
const db = (0, index_js_1.getDb)();
|
|
135
|
+
const [updated] = await db
|
|
136
|
+
.update(schema_js_1.monitoredDomains)
|
|
137
|
+
.set({
|
|
138
|
+
lastScore: score,
|
|
139
|
+
lastGrade: grade,
|
|
140
|
+
lastCheckedAt: new Date(),
|
|
141
|
+
updatedAt: new Date(),
|
|
142
|
+
})
|
|
143
|
+
.where((0, drizzle_orm_1.eq)(schema_js_1.monitoredDomains.id, domainId))
|
|
144
|
+
.returning();
|
|
145
|
+
return updated;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Add validation history entry
|
|
149
|
+
*/
|
|
150
|
+
async function addValidationHistory(data) {
|
|
151
|
+
const db = (0, index_js_1.getDb)();
|
|
152
|
+
const [entry] = await db.insert(schema_js_1.validationHistory).values(data).returning();
|
|
153
|
+
return entry;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get validation history for a domain
|
|
157
|
+
*/
|
|
158
|
+
async function getDomainHistory(domainId, limit = 30) {
|
|
159
|
+
const db = (0, index_js_1.getDb)();
|
|
160
|
+
return db
|
|
161
|
+
.select()
|
|
162
|
+
.from(schema_js_1.validationHistory)
|
|
163
|
+
.where((0, drizzle_orm_1.eq)(schema_js_1.validationHistory.domainId, domainId))
|
|
164
|
+
.orderBy((0, drizzle_orm_1.desc)(schema_js_1.validationHistory.validatedAt))
|
|
165
|
+
.limit(limit);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Create API key for user
|
|
169
|
+
*/
|
|
170
|
+
async function createApiKey(userId, name, monthlyLimit) {
|
|
171
|
+
const db = (0, index_js_1.getDb)();
|
|
172
|
+
// Generate API key: ucp_live_<random>
|
|
173
|
+
const key = `ucp_live_${(0, nanoid_1.nanoid)(32)}`;
|
|
174
|
+
const keyHash = await (0, bcryptjs_1.hash)(key, 10);
|
|
175
|
+
const keyPrefix = key.substring(0, 12);
|
|
176
|
+
const [apiKey] = await db
|
|
177
|
+
.insert(schema_js_1.apiKeys)
|
|
178
|
+
.values({
|
|
179
|
+
userId,
|
|
180
|
+
keyHash,
|
|
181
|
+
keyPrefix,
|
|
182
|
+
name,
|
|
183
|
+
monthlyLimit: monthlyLimit || 100,
|
|
184
|
+
})
|
|
185
|
+
.returning();
|
|
186
|
+
return { key, apiKey };
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Get user's API keys
|
|
190
|
+
*/
|
|
191
|
+
async function getUserApiKeys(userId) {
|
|
192
|
+
const db = (0, index_js_1.getDb)();
|
|
193
|
+
return db.select().from(schema_js_1.apiKeys).where((0, drizzle_orm_1.eq)(schema_js_1.apiKeys.userId, userId));
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Increment API key usage
|
|
197
|
+
*/
|
|
198
|
+
async function incrementApiKeyUsage(keyId) {
|
|
199
|
+
const db = (0, index_js_1.getDb)();
|
|
200
|
+
const [updated] = await db
|
|
201
|
+
.update(schema_js_1.apiKeys)
|
|
202
|
+
.set({
|
|
203
|
+
callsThisMonth: (0, drizzle_orm_1.sql) `${schema_js_1.apiKeys.callsThisMonth} + 1`,
|
|
204
|
+
lastUsedAt: new Date(),
|
|
205
|
+
})
|
|
206
|
+
.where((0, drizzle_orm_1.eq)(schema_js_1.apiKeys.id, keyId))
|
|
207
|
+
.returning();
|
|
208
|
+
return updated;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Reset monthly API call counters (for cron job)
|
|
212
|
+
*/
|
|
213
|
+
async function resetMonthlyApiCalls() {
|
|
214
|
+
const db = (0, index_js_1.getDb)();
|
|
215
|
+
await db
|
|
216
|
+
.update(schema_js_1.apiKeys)
|
|
217
|
+
.set({
|
|
218
|
+
callsThisMonth: 0,
|
|
219
|
+
})
|
|
220
|
+
.where((0, drizzle_orm_1.eq)(schema_js_1.apiKeys.isActive, true));
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Check if user can add more domains based on their subscription tier
|
|
224
|
+
*
|
|
225
|
+
* Returns an object with:
|
|
226
|
+
* - allowed: boolean - whether the user can add more domains
|
|
227
|
+
* - currentCount: number - current number of active domains
|
|
228
|
+
* - maxAllowed: number - maximum domains allowed for their tier
|
|
229
|
+
* - tier: string - the user's subscription tier
|
|
230
|
+
*/
|
|
231
|
+
async function canAddDomain(userId) {
|
|
232
|
+
const db = (0, index_js_1.getDb)();
|
|
233
|
+
const subscription = await getUserSubscription(userId);
|
|
234
|
+
const tier = subscription?.tier || 'free';
|
|
235
|
+
// Only count active subscriptions as valid
|
|
236
|
+
const isActiveSubscription = subscription?.status === 'active' || subscription?.status === 'trialing';
|
|
237
|
+
const effectiveTier = isActiveSubscription ? tier : 'free';
|
|
238
|
+
const limits = (0, tiers_js_1.getTierLimits)(effectiveTier);
|
|
239
|
+
// Count only active domains (not soft-deleted)
|
|
240
|
+
const activeDomains = await db
|
|
241
|
+
.select()
|
|
242
|
+
.from(schema_js_1.monitoredDomains)
|
|
243
|
+
.where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema_js_1.monitoredDomains.userId, userId), (0, drizzle_orm_1.eq)(schema_js_1.monitoredDomains.isActive, true)));
|
|
244
|
+
return {
|
|
245
|
+
allowed: activeDomains.length < limits.maxDomains,
|
|
246
|
+
currentCount: activeDomains.length,
|
|
247
|
+
maxAllowed: limits.maxDomains,
|
|
248
|
+
tier: effectiveTier,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Check if user can add more hosted profiles based on their subscription tier
|
|
253
|
+
*/
|
|
254
|
+
async function canAddHostedProfile(userId) {
|
|
255
|
+
const db = (0, index_js_1.getDb)();
|
|
256
|
+
const subscription = await getUserSubscription(userId);
|
|
257
|
+
const tier = subscription?.tier || 'free';
|
|
258
|
+
const isActiveSubscription = subscription?.status === 'active' || subscription?.status === 'trialing';
|
|
259
|
+
const effectiveTier = isActiveSubscription ? tier : 'free';
|
|
260
|
+
const limits = (0, tiers_js_1.getTierLimits)(effectiveTier);
|
|
261
|
+
const activeProfiles = await db
|
|
262
|
+
.select()
|
|
263
|
+
.from(schema_js_1.hostedProfiles)
|
|
264
|
+
.where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema_js_1.hostedProfiles.userId, userId), (0, drizzle_orm_1.sql) `${schema_js_1.hostedProfiles.hostingStatus} != 'suspended'`));
|
|
265
|
+
return {
|
|
266
|
+
allowed: limits.hasHosting && activeProfiles.length < limits.maxHostedProfiles,
|
|
267
|
+
currentCount: activeProfiles.length,
|
|
268
|
+
maxAllowed: limits.maxHostedProfiles,
|
|
269
|
+
tier: effectiveTier,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Check if user can create more API keys
|
|
274
|
+
*/
|
|
275
|
+
async function canCreateApiKey(userId) {
|
|
276
|
+
const db = (0, index_js_1.getDb)();
|
|
277
|
+
const subscription = await getUserSubscription(userId);
|
|
278
|
+
const tier = subscription?.tier || 'free';
|
|
279
|
+
const limits = (0, tiers_js_1.getTierLimits)(tier);
|
|
280
|
+
const keys = await getUserApiKeys(userId);
|
|
281
|
+
return keys.length < limits.maxApiKeys;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Clean up test data (for testing)
|
|
285
|
+
*/
|
|
286
|
+
async function cleanupTestData(email) {
|
|
287
|
+
const db = (0, index_js_1.getDb)();
|
|
288
|
+
// Get user
|
|
289
|
+
const user = await getUserByEmail(email);
|
|
290
|
+
if (!user)
|
|
291
|
+
return;
|
|
292
|
+
// Delete will cascade to all related tables due to foreign key constraints
|
|
293
|
+
await db.delete(schema_js_1.users).where((0, drizzle_orm_1.eq)(schema_js_1.users.id, user.id));
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/db/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed-analyzer.d.ts","sourceRoot":"","sources":["../../src/feed-analyzer/feed-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACR,WAAW,EAEX,eAAe,EAEf,kBAAkB,EAClB,iBAAiB,EAIjB,cAAc,
|
|
1
|
+
{"version":3,"file":"feed-analyzer.d.ts","sourceRoot":"","sources":["../../src/feed-analyzer/feed-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACR,WAAW,EAEX,eAAe,EAEf,kBAAkB,EAClB,iBAAiB,EAIjB,cAAc,EAGjB,MAAM,YAAY,CAAC;AAmBpB;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAwCzD;AAsBD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAiDnE;AAgDD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CA4GpE;AAkkBD;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,QAAQ,EAAE,WAAW,EAAE,EACvB,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,MAA6B,EAC1C,qBAAqB,GAAE,OAAc,GACtC,kBAAkB,CAqDpB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACzC,kBAAkB,CAMpB"}
|