@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.
Files changed (162) hide show
  1. package/dist/auth/config.d.ts +20 -0
  2. package/dist/auth/config.d.ts.map +1 -0
  3. package/dist/auth/config.js +114 -0
  4. package/dist/auth/config.js.map +1 -0
  5. package/dist/auth/index.d.ts +5 -0
  6. package/dist/auth/index.d.ts.map +1 -0
  7. package/dist/auth/index.js +17 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/auth/middleware.d.ts +45 -0
  10. package/dist/auth/middleware.d.ts.map +1 -0
  11. package/dist/auth/middleware.js +170 -0
  12. package/dist/auth/middleware.js.map +1 -0
  13. package/dist/auth/service.d.ts +80 -0
  14. package/dist/auth/service.d.ts.map +1 -0
  15. package/dist/auth/service.js +298 -0
  16. package/dist/auth/service.js.map +1 -0
  17. package/dist/cli/index.js +96 -0
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/cli/mock-server.d.ts +20 -0
  20. package/dist/cli/mock-server.d.ts.map +1 -0
  21. package/dist/cli/mock-server.js +261 -0
  22. package/dist/cli/mock-server.js.map +1 -0
  23. package/dist/db/index.d.ts +8 -2
  24. package/dist/db/index.d.ts.map +1 -1
  25. package/dist/db/index.js +22 -5
  26. package/dist/db/index.js.map +1 -1
  27. package/dist/db/schema.d.ts +3570 -128
  28. package/dist/db/schema.d.ts.map +1 -1
  29. package/dist/db/schema.js +377 -17
  30. package/dist/db/schema.js.map +1 -1
  31. package/dist/db/utils.d.ts +252 -0
  32. package/dist/db/utils.d.ts.map +1 -0
  33. package/dist/db/utils.js +295 -0
  34. package/dist/db/utils.js.map +1 -0
  35. package/dist/feed-analyzer/feed-analyzer.d.ts.map +1 -1
  36. package/dist/feed-analyzer/feed-analyzer.js +218 -4
  37. package/dist/feed-analyzer/feed-analyzer.js.map +1 -1
  38. package/dist/feed-analyzer/types.d.ts +82 -1
  39. package/dist/feed-analyzer/types.d.ts.map +1 -1
  40. package/dist/feed-analyzer/types.js +13 -0
  41. package/dist/feed-analyzer/types.js.map +1 -1
  42. package/dist/generator/profile-builder.d.ts.map +1 -1
  43. package/dist/generator/profile-builder.js +158 -115
  44. package/dist/generator/profile-builder.js.map +1 -1
  45. package/dist/lib/analytics.d.ts +349 -0
  46. package/dist/lib/analytics.d.ts.map +1 -0
  47. package/dist/lib/analytics.js +198 -0
  48. package/dist/lib/analytics.js.map +1 -0
  49. package/dist/security/security-scanner.d.ts.map +1 -1
  50. package/dist/security/security-scanner.js +130 -2
  51. package/dist/security/security-scanner.js.map +1 -1
  52. package/dist/security/types.d.ts +32 -0
  53. package/dist/security/types.d.ts.map +1 -1
  54. package/dist/security/types.js.map +1 -1
  55. package/dist/services/analytics.d.ts +114 -0
  56. package/dist/services/analytics.d.ts.map +1 -0
  57. package/dist/services/analytics.js +862 -0
  58. package/dist/services/analytics.js.map +1 -0
  59. package/dist/services/badge.d.ts +31 -0
  60. package/dist/services/badge.d.ts.map +1 -0
  61. package/dist/services/badge.js +152 -0
  62. package/dist/services/badge.js.map +1 -0
  63. package/dist/services/cron.d.ts +127 -0
  64. package/dist/services/cron.d.ts.map +1 -0
  65. package/dist/services/cron.js +693 -0
  66. package/dist/services/cron.js.map +1 -0
  67. package/dist/services/directory.d.ts +2 -0
  68. package/dist/services/directory.d.ts.map +1 -1
  69. package/dist/services/directory.js +45 -27
  70. package/dist/services/directory.js.map +1 -1
  71. package/dist/services/email.d.ts +127 -0
  72. package/dist/services/email.d.ts.map +1 -0
  73. package/dist/services/email.js +876 -0
  74. package/dist/services/email.js.map +1 -0
  75. package/dist/services/hosted-profiles.d.ts +77 -0
  76. package/dist/services/hosted-profiles.d.ts.map +1 -0
  77. package/dist/services/hosted-profiles.js +433 -0
  78. package/dist/services/hosted-profiles.js.map +1 -0
  79. package/dist/services/latency.d.ts +67 -0
  80. package/dist/services/latency.d.ts.map +1 -0
  81. package/dist/services/latency.js +274 -0
  82. package/dist/services/latency.js.map +1 -0
  83. package/dist/services/manifest-compliance.d.ts +64 -0
  84. package/dist/services/manifest-compliance.d.ts.map +1 -0
  85. package/dist/services/manifest-compliance.js +271 -0
  86. package/dist/services/manifest-compliance.js.map +1 -0
  87. package/dist/services/monitoring-diff.d.ts +31 -0
  88. package/dist/services/monitoring-diff.d.ts.map +1 -0
  89. package/dist/services/monitoring-diff.js +189 -0
  90. package/dist/services/monitoring-diff.js.map +1 -0
  91. package/dist/services/notifications.d.ts +46 -0
  92. package/dist/services/notifications.d.ts.map +1 -0
  93. package/dist/services/notifications.js +88 -0
  94. package/dist/services/notifications.js.map +1 -0
  95. package/dist/services/posthog.d.ts +43 -0
  96. package/dist/services/posthog.d.ts.map +1 -0
  97. package/dist/services/posthog.js +110 -0
  98. package/dist/services/posthog.js.map +1 -0
  99. package/dist/services/stripe.d.ts +93 -0
  100. package/dist/services/stripe.d.ts.map +1 -0
  101. package/dist/services/stripe.js +490 -0
  102. package/dist/services/stripe.js.map +1 -0
  103. package/dist/services/validation-history.d.ts +99 -0
  104. package/dist/services/validation-history.d.ts.map +1 -0
  105. package/dist/services/validation-history.js +344 -0
  106. package/dist/services/validation-history.js.map +1 -0
  107. package/dist/services/validation-logging.d.ts +103 -0
  108. package/dist/services/validation-logging.d.ts.map +1 -0
  109. package/dist/services/validation-logging.js +210 -0
  110. package/dist/services/validation-logging.js.map +1 -0
  111. package/dist/services/validation.d.ts +119 -0
  112. package/dist/services/validation.d.ts.map +1 -0
  113. package/dist/services/validation.js +1185 -0
  114. package/dist/services/validation.js.map +1 -0
  115. package/dist/simulator/agent-simulator.d.ts.map +1 -1
  116. package/dist/simulator/agent-simulator.js +229 -9
  117. package/dist/simulator/agent-simulator.js.map +1 -1
  118. package/dist/simulator/types.d.ts +26 -0
  119. package/dist/simulator/types.d.ts.map +1 -1
  120. package/dist/simulator/types.js.map +1 -1
  121. package/dist/types/acp-validation.d.ts +87 -0
  122. package/dist/types/acp-validation.d.ts.map +1 -0
  123. package/dist/types/acp-validation.js +40 -0
  124. package/dist/types/acp-validation.js.map +1 -0
  125. package/dist/types/analytics.d.ts +182 -0
  126. package/dist/types/analytics.d.ts.map +1 -0
  127. package/dist/types/analytics.js +7 -0
  128. package/dist/types/analytics.js.map +1 -0
  129. package/dist/types/generator.d.ts +4 -0
  130. package/dist/types/generator.d.ts.map +1 -1
  131. package/dist/types/ucp-profile.d.ts +32 -2
  132. package/dist/types/ucp-profile.d.ts.map +1 -1
  133. package/dist/types/ucp-profile.js +31 -1
  134. package/dist/types/ucp-profile.js.map +1 -1
  135. package/dist/types/validation.d.ts +14 -0
  136. package/dist/types/validation.d.ts.map +1 -1
  137. package/dist/types/validation.js +19 -0
  138. package/dist/types/validation.js.map +1 -1
  139. package/dist/validator/acp/index.d.ts +31 -0
  140. package/dist/validator/acp/index.d.ts.map +1 -0
  141. package/dist/validator/acp/index.js +574 -0
  142. package/dist/validator/acp/index.js.map +1 -0
  143. package/dist/validator/network-validator.d.ts.map +1 -1
  144. package/dist/validator/network-validator.js +23 -13
  145. package/dist/validator/network-validator.js.map +1 -1
  146. package/dist/validator/rules-validator.d.ts +8 -0
  147. package/dist/validator/rules-validator.d.ts.map +1 -1
  148. package/dist/validator/rules-validator.js +159 -43
  149. package/dist/validator/rules-validator.js.map +1 -1
  150. package/dist/validator/structural-validator.d.ts.map +1 -1
  151. package/dist/validator/structural-validator.js +283 -53
  152. package/dist/validator/structural-validator.js.map +1 -1
  153. package/dist/validator/utils.d.ts +62 -0
  154. package/dist/validator/utils.d.ts.map +1 -0
  155. package/dist/validator/utils.js +151 -0
  156. package/dist/validator/utils.js.map +1 -0
  157. package/package.json +45 -12
  158. package/.claude/settings.local.json +0 -60
  159. package/.vercel/README.txt +0 -11
  160. package/.vercel/project.json +0 -1
  161. package/publish-output.txt +0 -0
  162. 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"}
@@ -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,EAEjB,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,CAoGpE;AA2WD;;GAEG;AACH,wBAAgB,kBAAkB,CAC9B,QAAQ,EAAE,WAAW,EAAE,EACvB,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,MAA6B,EAC1C,qBAAqB,GAAE,OAAc,GACtC,kBAAkB,CAmCpB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM,GACzC,kBAAkB,CAMpB"}
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"}