@ucptools/validator 1.0.0 → 1.0.1

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 (236) hide show
  1. package/.claude/settings.local.json +60 -0
  2. package/.vercel/README.txt +11 -0
  3. package/.vercel/project.json +1 -0
  4. package/dist/cli/index.d.ts +6 -0
  5. package/dist/cli/index.d.ts.map +1 -0
  6. package/dist/cli/index.js +279 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/compliance/compliance-generator.d.ts +34 -0
  9. package/dist/compliance/compliance-generator.d.ts.map +1 -0
  10. package/dist/compliance/compliance-generator.js +320 -0
  11. package/dist/compliance/compliance-generator.js.map +1 -0
  12. package/dist/compliance/index.d.ts +8 -0
  13. package/dist/compliance/index.d.ts.map +1 -0
  14. package/dist/compliance/index.js +17 -0
  15. package/dist/compliance/index.js.map +1 -0
  16. package/dist/compliance/templates.d.ts +34 -0
  17. package/dist/compliance/templates.d.ts.map +1 -0
  18. package/{src/compliance/templates.ts → dist/compliance/templates.js} +117 -155
  19. package/dist/compliance/templates.js.map +1 -0
  20. package/dist/compliance/types.d.ts +64 -0
  21. package/dist/compliance/types.d.ts.map +1 -0
  22. package/dist/compliance/types.js +64 -0
  23. package/dist/compliance/types.js.map +1 -0
  24. package/dist/db/index.d.ts +11 -0
  25. package/dist/db/index.d.ts.map +1 -0
  26. package/dist/db/index.js +63 -0
  27. package/dist/db/index.js.map +1 -0
  28. package/dist/db/schema.d.ts +444 -0
  29. package/dist/db/schema.d.ts.map +1 -0
  30. package/dist/db/schema.js +65 -0
  31. package/dist/db/schema.js.map +1 -0
  32. package/dist/feed-analyzer/feed-analyzer.d.ts +26 -0
  33. package/dist/feed-analyzer/feed-analyzer.d.ts.map +1 -0
  34. package/{src/feed-analyzer/feed-analyzer.ts → dist/feed-analyzer/feed-analyzer.js} +642 -726
  35. package/dist/feed-analyzer/feed-analyzer.js.map +1 -0
  36. package/dist/feed-analyzer/index.d.ts +8 -0
  37. package/dist/feed-analyzer/index.d.ts.map +1 -0
  38. package/dist/feed-analyzer/index.js +19 -0
  39. package/dist/feed-analyzer/index.js.map +1 -0
  40. package/dist/feed-analyzer/types.d.ts +204 -0
  41. package/dist/feed-analyzer/types.d.ts.map +1 -0
  42. package/dist/feed-analyzer/types.js +162 -0
  43. package/dist/feed-analyzer/types.js.map +1 -0
  44. package/{src/generator/index.ts → dist/generator/index.d.ts} +1 -1
  45. package/dist/generator/index.d.ts.map +1 -0
  46. package/dist/generator/index.js +13 -0
  47. package/dist/generator/index.js.map +1 -0
  48. package/dist/generator/key-generator.d.ts +24 -0
  49. package/dist/generator/key-generator.d.ts.map +1 -0
  50. package/dist/generator/key-generator.js +144 -0
  51. package/dist/generator/key-generator.js.map +1 -0
  52. package/dist/generator/profile-builder.d.ts +15 -0
  53. package/dist/generator/profile-builder.d.ts.map +1 -0
  54. package/dist/generator/profile-builder.js +338 -0
  55. package/dist/generator/profile-builder.js.map +1 -0
  56. package/dist/hosting/artifacts-generator.d.ts +10 -0
  57. package/dist/hosting/artifacts-generator.d.ts.map +1 -0
  58. package/{src/hosting/artifacts-generator.ts → dist/hosting/artifacts-generator.js} +191 -241
  59. package/dist/hosting/artifacts-generator.js.map +1 -0
  60. package/{src/hosting/index.ts → dist/hosting/index.d.ts} +1 -1
  61. package/dist/hosting/index.d.ts.map +1 -0
  62. package/dist/hosting/index.js +10 -0
  63. package/dist/hosting/index.js.map +1 -0
  64. package/dist/index.d.ts +18 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +78 -0
  67. package/dist/index.js.map +1 -0
  68. package/{src/security/index.ts → dist/security/index.d.ts} +8 -15
  69. package/dist/security/index.d.ts.map +1 -0
  70. package/dist/security/index.js +12 -0
  71. package/dist/security/index.js.map +1 -0
  72. package/dist/security/security-scanner.d.ts +10 -0
  73. package/dist/security/security-scanner.d.ts.map +1 -0
  74. package/dist/security/security-scanner.js +541 -0
  75. package/dist/security/security-scanner.js.map +1 -0
  76. package/dist/security/types.d.ts +48 -0
  77. package/dist/security/types.d.ts.map +1 -0
  78. package/dist/security/types.js +21 -0
  79. package/dist/security/types.js.map +1 -0
  80. package/dist/services/directory.d.ts +104 -0
  81. package/dist/services/directory.d.ts.map +1 -0
  82. package/dist/services/directory.js +333 -0
  83. package/dist/services/directory.js.map +1 -0
  84. package/dist/simulator/agent-simulator.d.ts +69 -0
  85. package/dist/simulator/agent-simulator.d.ts.map +1 -0
  86. package/{src/simulator/agent-simulator.ts → dist/simulator/agent-simulator.js} +650 -941
  87. package/dist/simulator/agent-simulator.js.map +1 -0
  88. package/{src/simulator/index.ts → dist/simulator/index.d.ts} +7 -7
  89. package/dist/simulator/index.d.ts.map +1 -0
  90. package/dist/simulator/index.js +23 -0
  91. package/dist/simulator/index.js.map +1 -0
  92. package/{src/simulator/types.ts → dist/simulator/types.d.ts} +145 -170
  93. package/dist/simulator/types.d.ts.map +1 -0
  94. package/dist/simulator/types.js +18 -0
  95. package/dist/simulator/types.js.map +1 -0
  96. package/dist/types/generator.d.ts +106 -0
  97. package/dist/types/generator.d.ts.map +1 -0
  98. package/dist/types/generator.js +6 -0
  99. package/dist/types/generator.js.map +1 -0
  100. package/{src/types/index.ts → dist/types/index.d.ts} +1 -1
  101. package/dist/types/index.d.ts.map +1 -0
  102. package/dist/types/index.js +23 -0
  103. package/dist/types/index.js.map +1 -0
  104. package/dist/types/ucp-profile.d.ts +103 -0
  105. package/dist/types/ucp-profile.d.ts.map +1 -0
  106. package/dist/types/ucp-profile.js +45 -0
  107. package/dist/types/ucp-profile.js.map +1 -0
  108. package/dist/types/validation.d.ts +68 -0
  109. package/dist/types/validation.d.ts.map +1 -0
  110. package/dist/types/validation.js +32 -0
  111. package/dist/types/validation.js.map +1 -0
  112. package/dist/validator/index.d.ts +26 -0
  113. package/dist/validator/index.d.ts.map +1 -0
  114. package/dist/validator/index.js +161 -0
  115. package/dist/validator/index.js.map +1 -0
  116. package/dist/validator/network-validator.d.ts +28 -0
  117. package/dist/validator/network-validator.d.ts.map +1 -0
  118. package/dist/validator/network-validator.js +319 -0
  119. package/dist/validator/network-validator.js.map +1 -0
  120. package/dist/validator/rules-validator.d.ts +11 -0
  121. package/dist/validator/rules-validator.d.ts.map +1 -0
  122. package/dist/validator/rules-validator.js +257 -0
  123. package/dist/validator/rules-validator.js.map +1 -0
  124. package/dist/validator/sdk-validator.d.ts +58 -0
  125. package/dist/validator/sdk-validator.d.ts.map +1 -0
  126. package/{src/validator/sdk-validator.ts → dist/validator/sdk-validator.js} +273 -330
  127. package/dist/validator/sdk-validator.js.map +1 -0
  128. package/dist/validator/structural-validator.d.ts +11 -0
  129. package/dist/validator/structural-validator.d.ts.map +1 -0
  130. package/dist/validator/structural-validator.js +415 -0
  131. package/dist/validator/structural-validator.js.map +1 -0
  132. package/package.json +1 -1
  133. package/publish-output.txt +0 -0
  134. package/CLAUDE.md +0 -109
  135. package/api/analyze-feed.js +0 -140
  136. package/api/badge.js +0 -185
  137. package/api/benchmark.js +0 -177
  138. package/api/directory-stats.ts +0 -29
  139. package/api/directory.ts +0 -73
  140. package/api/generate-compliance.js +0 -143
  141. package/api/generate-schema.js +0 -457
  142. package/api/generate.js +0 -132
  143. package/api/security-scan.js +0 -133
  144. package/api/simulate.js +0 -187
  145. package/api/tsconfig.json +0 -10
  146. package/api/validate.js +0 -1351
  147. package/apify-actor/.actor/actor.json +0 -68
  148. package/apify-actor/.actor/input_schema.json +0 -32
  149. package/apify-actor/APIFY-STORE-LISTING.md +0 -412
  150. package/apify-actor/Dockerfile +0 -8
  151. package/apify-actor/README.md +0 -166
  152. package/apify-actor/main.ts +0 -111
  153. package/apify-actor/package.json +0 -17
  154. package/apify-actor/src/main.js +0 -199
  155. package/docs/BRAND-IDENTITY.md +0 -238
  156. package/docs/BRAND-STYLE-GUIDE.md +0 -356
  157. package/drizzle/0000_black_king_cobra.sql +0 -39
  158. package/drizzle/meta/0000_snapshot.json +0 -309
  159. package/drizzle/meta/_journal.json +0 -13
  160. package/drizzle.config.ts +0 -10
  161. package/public/.well-known/ucp +0 -25
  162. package/public/android-chrome-192x192.png +0 -0
  163. package/public/android-chrome-512x512.png +0 -0
  164. package/public/apple-touch-icon.png +0 -0
  165. package/public/brand.css +0 -321
  166. package/public/directory.html +0 -701
  167. package/public/favicon-16x16.png +0 -0
  168. package/public/favicon-32x32.png +0 -0
  169. package/public/favicon.ico +0 -0
  170. package/public/guides/bigcommerce.html +0 -743
  171. package/public/guides/fastucp.html +0 -838
  172. package/public/guides/magento.html +0 -779
  173. package/public/guides/shopify.html +0 -726
  174. package/public/guides/squarespace.html +0 -749
  175. package/public/guides/wix.html +0 -747
  176. package/public/guides/woocommerce.html +0 -733
  177. package/public/index.html +0 -3835
  178. package/public/learn.html +0 -396
  179. package/public/logo.jpeg +0 -0
  180. package/public/og-image-icon.png +0 -0
  181. package/public/og-image.png +0 -0
  182. package/public/robots.txt +0 -6
  183. package/public/site.webmanifest +0 -31
  184. package/public/sitemap.xml +0 -69
  185. package/public/social/linkedin-banner-1128x191.png +0 -0
  186. package/public/social/temp.PNG +0 -0
  187. package/public/social/x-header-1500x500.png +0 -0
  188. package/public/verify.html +0 -410
  189. package/scripts/generate-favicons.js +0 -44
  190. package/scripts/generate-ico.js +0 -23
  191. package/scripts/generate-og-image.js +0 -45
  192. package/scripts/reset-db.ts +0 -77
  193. package/scripts/seed-db.ts +0 -71
  194. package/scripts/setup-benchmark-db.js +0 -70
  195. package/src/api/server.ts +0 -266
  196. package/src/cli/index.ts +0 -302
  197. package/src/compliance/compliance-generator.ts +0 -452
  198. package/src/compliance/index.ts +0 -28
  199. package/src/compliance/types.ts +0 -170
  200. package/src/db/index.ts +0 -28
  201. package/src/db/schema.ts +0 -84
  202. package/src/feed-analyzer/index.ts +0 -34
  203. package/src/feed-analyzer/types.ts +0 -354
  204. package/src/generator/key-generator.ts +0 -124
  205. package/src/generator/profile-builder.ts +0 -402
  206. package/src/index.ts +0 -105
  207. package/src/security/security-scanner.ts +0 -604
  208. package/src/security/types.ts +0 -55
  209. package/src/services/directory.ts +0 -434
  210. package/src/types/generator.ts +0 -140
  211. package/src/types/ucp-profile.ts +0 -140
  212. package/src/types/validation.ts +0 -89
  213. package/src/validator/index.ts +0 -194
  214. package/src/validator/network-validator.ts +0 -417
  215. package/src/validator/rules-validator.ts +0 -297
  216. package/src/validator/structural-validator.ts +0 -476
  217. package/tests/fixtures/non-compliant-profile.json +0 -25
  218. package/tests/fixtures/official-sample-profile.json +0 -75
  219. package/tests/integration/benchmark.test.ts +0 -207
  220. package/tests/integration/database.test.ts +0 -163
  221. package/tests/integration/directory-api.test.ts +0 -268
  222. package/tests/integration/simulate-api.test.ts +0 -230
  223. package/tests/integration/validate-api.test.ts +0 -269
  224. package/tests/setup.ts +0 -15
  225. package/tests/unit/agent-simulator.test.ts +0 -575
  226. package/tests/unit/compliance-generator.test.ts +0 -374
  227. package/tests/unit/directory-service.test.ts +0 -272
  228. package/tests/unit/feed-analyzer.test.ts +0 -517
  229. package/tests/unit/lint-suggestions.test.ts +0 -423
  230. package/tests/unit/official-samples.test.ts +0 -211
  231. package/tests/unit/pdf-report.test.ts +0 -390
  232. package/tests/unit/sdk-validator.test.ts +0 -531
  233. package/tests/unit/security-scanner.test.ts +0 -410
  234. package/tests/unit/validation.test.ts +0 -390
  235. package/vercel.json +0 -34
  236. package/vitest.config.ts +0 -22
@@ -0,0 +1,444 @@
1
+ /**
2
+ * Merchants table - stores UCP-enabled merchant directory entries
3
+ */
4
+ export declare const merchants: import("drizzle-orm/pg-core").PgTableWithColumns<{
5
+ name: "merchants";
6
+ schema: undefined;
7
+ columns: {
8
+ id: import("drizzle-orm/pg-core").PgColumn<{
9
+ name: "id";
10
+ tableName: "merchants";
11
+ dataType: "string";
12
+ columnType: "PgUUID";
13
+ data: string;
14
+ driverParam: string;
15
+ notNull: true;
16
+ hasDefault: true;
17
+ isPrimaryKey: true;
18
+ isAutoincrement: false;
19
+ hasRuntimeDefault: false;
20
+ enumValues: undefined;
21
+ baseColumn: never;
22
+ identity: undefined;
23
+ generated: undefined;
24
+ }, {}, {}>;
25
+ domain: import("drizzle-orm/pg-core").PgColumn<{
26
+ name: "domain";
27
+ tableName: "merchants";
28
+ dataType: "string";
29
+ columnType: "PgVarchar";
30
+ data: string;
31
+ driverParam: string;
32
+ notNull: true;
33
+ hasDefault: false;
34
+ isPrimaryKey: false;
35
+ isAutoincrement: false;
36
+ hasRuntimeDefault: false;
37
+ enumValues: [string, ...string[]];
38
+ baseColumn: never;
39
+ identity: undefined;
40
+ generated: undefined;
41
+ }, {}, {
42
+ length: 255;
43
+ }>;
44
+ displayName: import("drizzle-orm/pg-core").PgColumn<{
45
+ name: "display_name";
46
+ tableName: "merchants";
47
+ dataType: "string";
48
+ columnType: "PgVarchar";
49
+ data: string;
50
+ driverParam: string;
51
+ notNull: true;
52
+ hasDefault: false;
53
+ isPrimaryKey: false;
54
+ isAutoincrement: false;
55
+ hasRuntimeDefault: false;
56
+ enumValues: [string, ...string[]];
57
+ baseColumn: never;
58
+ identity: undefined;
59
+ generated: undefined;
60
+ }, {}, {
61
+ length: 255;
62
+ }>;
63
+ description: import("drizzle-orm/pg-core").PgColumn<{
64
+ name: "description";
65
+ tableName: "merchants";
66
+ dataType: "string";
67
+ columnType: "PgText";
68
+ data: string;
69
+ driverParam: string;
70
+ notNull: false;
71
+ hasDefault: false;
72
+ isPrimaryKey: false;
73
+ isAutoincrement: false;
74
+ hasRuntimeDefault: false;
75
+ enumValues: [string, ...string[]];
76
+ baseColumn: never;
77
+ identity: undefined;
78
+ generated: undefined;
79
+ }, {}, {}>;
80
+ logoUrl: import("drizzle-orm/pg-core").PgColumn<{
81
+ name: "logo_url";
82
+ tableName: "merchants";
83
+ dataType: "string";
84
+ columnType: "PgVarchar";
85
+ data: string;
86
+ driverParam: string;
87
+ notNull: false;
88
+ hasDefault: false;
89
+ isPrimaryKey: false;
90
+ isAutoincrement: false;
91
+ hasRuntimeDefault: false;
92
+ enumValues: [string, ...string[]];
93
+ baseColumn: never;
94
+ identity: undefined;
95
+ generated: undefined;
96
+ }, {}, {
97
+ length: 512;
98
+ }>;
99
+ websiteUrl: import("drizzle-orm/pg-core").PgColumn<{
100
+ name: "website_url";
101
+ tableName: "merchants";
102
+ dataType: "string";
103
+ columnType: "PgVarchar";
104
+ data: string;
105
+ driverParam: string;
106
+ notNull: false;
107
+ hasDefault: false;
108
+ isPrimaryKey: false;
109
+ isAutoincrement: false;
110
+ hasRuntimeDefault: false;
111
+ enumValues: [string, ...string[]];
112
+ baseColumn: never;
113
+ identity: undefined;
114
+ generated: undefined;
115
+ }, {}, {
116
+ length: 512;
117
+ }>;
118
+ category: import("drizzle-orm/pg-core").PgColumn<{
119
+ name: "category";
120
+ tableName: "merchants";
121
+ dataType: "string";
122
+ columnType: "PgVarchar";
123
+ data: string;
124
+ driverParam: string;
125
+ notNull: false;
126
+ hasDefault: false;
127
+ isPrimaryKey: false;
128
+ isAutoincrement: false;
129
+ hasRuntimeDefault: false;
130
+ enumValues: [string, ...string[]];
131
+ baseColumn: never;
132
+ identity: undefined;
133
+ generated: undefined;
134
+ }, {}, {
135
+ length: 100;
136
+ }>;
137
+ countryCode: import("drizzle-orm/pg-core").PgColumn<{
138
+ name: "country_code";
139
+ tableName: "merchants";
140
+ dataType: "string";
141
+ columnType: "PgVarchar";
142
+ data: string;
143
+ driverParam: string;
144
+ notNull: false;
145
+ hasDefault: false;
146
+ isPrimaryKey: false;
147
+ isAutoincrement: false;
148
+ hasRuntimeDefault: false;
149
+ enumValues: [string, ...string[]];
150
+ baseColumn: never;
151
+ identity: undefined;
152
+ generated: undefined;
153
+ }, {}, {
154
+ length: 2;
155
+ }>;
156
+ ucpScore: import("drizzle-orm/pg-core").PgColumn<{
157
+ name: "ucp_score";
158
+ tableName: "merchants";
159
+ dataType: "number";
160
+ columnType: "PgInteger";
161
+ data: number;
162
+ driverParam: string | number;
163
+ notNull: false;
164
+ hasDefault: false;
165
+ isPrimaryKey: false;
166
+ isAutoincrement: false;
167
+ hasRuntimeDefault: false;
168
+ enumValues: undefined;
169
+ baseColumn: never;
170
+ identity: undefined;
171
+ generated: undefined;
172
+ }, {}, {}>;
173
+ ucpGrade: import("drizzle-orm/pg-core").PgColumn<{
174
+ name: "ucp_grade";
175
+ tableName: "merchants";
176
+ dataType: "string";
177
+ columnType: "PgVarchar";
178
+ data: string;
179
+ driverParam: string;
180
+ notNull: false;
181
+ hasDefault: false;
182
+ isPrimaryKey: false;
183
+ isAutoincrement: false;
184
+ hasRuntimeDefault: false;
185
+ enumValues: [string, ...string[]];
186
+ baseColumn: never;
187
+ identity: undefined;
188
+ generated: undefined;
189
+ }, {}, {
190
+ length: 2;
191
+ }>;
192
+ transports: import("drizzle-orm/pg-core").PgColumn<{
193
+ name: "transports";
194
+ tableName: "merchants";
195
+ dataType: "string";
196
+ columnType: "PgVarchar";
197
+ data: string;
198
+ driverParam: string;
199
+ notNull: false;
200
+ hasDefault: false;
201
+ isPrimaryKey: false;
202
+ isAutoincrement: false;
203
+ hasRuntimeDefault: false;
204
+ enumValues: [string, ...string[]];
205
+ baseColumn: never;
206
+ identity: undefined;
207
+ generated: undefined;
208
+ }, {}, {
209
+ length: 255;
210
+ }>;
211
+ isPublic: import("drizzle-orm/pg-core").PgColumn<{
212
+ name: "is_public";
213
+ tableName: "merchants";
214
+ dataType: "boolean";
215
+ columnType: "PgBoolean";
216
+ data: boolean;
217
+ driverParam: boolean;
218
+ notNull: true;
219
+ hasDefault: true;
220
+ isPrimaryKey: false;
221
+ isAutoincrement: false;
222
+ hasRuntimeDefault: false;
223
+ enumValues: undefined;
224
+ baseColumn: never;
225
+ identity: undefined;
226
+ generated: undefined;
227
+ }, {}, {}>;
228
+ isVerified: import("drizzle-orm/pg-core").PgColumn<{
229
+ name: "is_verified";
230
+ tableName: "merchants";
231
+ dataType: "boolean";
232
+ columnType: "PgBoolean";
233
+ data: boolean;
234
+ driverParam: boolean;
235
+ notNull: true;
236
+ hasDefault: true;
237
+ isPrimaryKey: false;
238
+ isAutoincrement: false;
239
+ hasRuntimeDefault: false;
240
+ enumValues: undefined;
241
+ baseColumn: never;
242
+ identity: undefined;
243
+ generated: undefined;
244
+ }, {}, {}>;
245
+ lastValidatedAt: import("drizzle-orm/pg-core").PgColumn<{
246
+ name: "last_validated_at";
247
+ tableName: "merchants";
248
+ dataType: "date";
249
+ columnType: "PgTimestamp";
250
+ data: Date;
251
+ driverParam: string;
252
+ notNull: false;
253
+ hasDefault: false;
254
+ isPrimaryKey: false;
255
+ isAutoincrement: false;
256
+ hasRuntimeDefault: false;
257
+ enumValues: undefined;
258
+ baseColumn: never;
259
+ identity: undefined;
260
+ generated: undefined;
261
+ }, {}, {}>;
262
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
263
+ name: "created_at";
264
+ tableName: "merchants";
265
+ dataType: "date";
266
+ columnType: "PgTimestamp";
267
+ data: Date;
268
+ driverParam: string;
269
+ notNull: true;
270
+ hasDefault: true;
271
+ isPrimaryKey: false;
272
+ isAutoincrement: false;
273
+ hasRuntimeDefault: false;
274
+ enumValues: undefined;
275
+ baseColumn: never;
276
+ identity: undefined;
277
+ generated: undefined;
278
+ }, {}, {}>;
279
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
280
+ name: "updated_at";
281
+ tableName: "merchants";
282
+ dataType: "date";
283
+ columnType: "PgTimestamp";
284
+ data: Date;
285
+ driverParam: string;
286
+ notNull: true;
287
+ hasDefault: true;
288
+ isPrimaryKey: false;
289
+ isAutoincrement: false;
290
+ hasRuntimeDefault: false;
291
+ enumValues: undefined;
292
+ baseColumn: never;
293
+ identity: undefined;
294
+ generated: undefined;
295
+ }, {}, {}>;
296
+ };
297
+ dialect: "pg";
298
+ }>;
299
+ /**
300
+ * Benchmark stats table - stores aggregate validation statistics
301
+ * (migrated from setup script)
302
+ */
303
+ export declare const benchmarkStats: import("drizzle-orm/pg-core").PgTableWithColumns<{
304
+ name: "benchmark_stats";
305
+ schema: undefined;
306
+ columns: {
307
+ id: import("drizzle-orm/pg-core").PgColumn<{
308
+ name: "id";
309
+ tableName: "benchmark_stats";
310
+ dataType: "number";
311
+ columnType: "PgInteger";
312
+ data: number;
313
+ driverParam: string | number;
314
+ notNull: true;
315
+ hasDefault: true;
316
+ isPrimaryKey: true;
317
+ isAutoincrement: false;
318
+ hasRuntimeDefault: false;
319
+ enumValues: undefined;
320
+ baseColumn: never;
321
+ identity: "always";
322
+ generated: undefined;
323
+ }, {}, {}>;
324
+ scoreBucket: import("drizzle-orm/pg-core").PgColumn<{
325
+ name: "score_bucket";
326
+ tableName: "benchmark_stats";
327
+ dataType: "number";
328
+ columnType: "PgInteger";
329
+ data: number;
330
+ driverParam: string | number;
331
+ notNull: true;
332
+ hasDefault: false;
333
+ isPrimaryKey: false;
334
+ isAutoincrement: false;
335
+ hasRuntimeDefault: false;
336
+ enumValues: undefined;
337
+ baseColumn: never;
338
+ identity: undefined;
339
+ generated: undefined;
340
+ }, {}, {}>;
341
+ count: import("drizzle-orm/pg-core").PgColumn<{
342
+ name: "count";
343
+ tableName: "benchmark_stats";
344
+ dataType: "number";
345
+ columnType: "PgInteger";
346
+ data: number;
347
+ driverParam: string | number;
348
+ notNull: true;
349
+ hasDefault: true;
350
+ isPrimaryKey: false;
351
+ isAutoincrement: false;
352
+ hasRuntimeDefault: false;
353
+ enumValues: undefined;
354
+ baseColumn: never;
355
+ identity: undefined;
356
+ generated: undefined;
357
+ }, {}, {}>;
358
+ };
359
+ dialect: "pg";
360
+ }>;
361
+ /**
362
+ * Benchmark summary table - quick aggregate stats
363
+ * (migrated from setup script)
364
+ */
365
+ export declare const benchmarkSummary: import("drizzle-orm/pg-core").PgTableWithColumns<{
366
+ name: "benchmark_summary";
367
+ schema: undefined;
368
+ columns: {
369
+ id: import("drizzle-orm/pg-core").PgColumn<{
370
+ name: "id";
371
+ tableName: "benchmark_summary";
372
+ dataType: "number";
373
+ columnType: "PgInteger";
374
+ data: number;
375
+ driverParam: string | number;
376
+ notNull: true;
377
+ hasDefault: true;
378
+ isPrimaryKey: true;
379
+ isAutoincrement: false;
380
+ hasRuntimeDefault: false;
381
+ enumValues: undefined;
382
+ baseColumn: never;
383
+ identity: undefined;
384
+ generated: undefined;
385
+ }, {}, {}>;
386
+ totalValidations: import("drizzle-orm/pg-core").PgColumn<{
387
+ name: "total_validations";
388
+ tableName: "benchmark_summary";
389
+ dataType: "number";
390
+ columnType: "PgInteger";
391
+ data: number;
392
+ driverParam: string | number;
393
+ notNull: true;
394
+ hasDefault: true;
395
+ isPrimaryKey: false;
396
+ isAutoincrement: false;
397
+ hasRuntimeDefault: false;
398
+ enumValues: undefined;
399
+ baseColumn: never;
400
+ identity: undefined;
401
+ generated: undefined;
402
+ }, {}, {}>;
403
+ avgScore: import("drizzle-orm/pg-core").PgColumn<{
404
+ name: "avg_score";
405
+ tableName: "benchmark_summary";
406
+ dataType: "string";
407
+ columnType: "PgNumeric";
408
+ data: string;
409
+ driverParam: string;
410
+ notNull: false;
411
+ hasDefault: true;
412
+ isPrimaryKey: false;
413
+ isAutoincrement: false;
414
+ hasRuntimeDefault: false;
415
+ enumValues: undefined;
416
+ baseColumn: never;
417
+ identity: undefined;
418
+ generated: undefined;
419
+ }, {}, {}>;
420
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
421
+ name: "updated_at";
422
+ tableName: "benchmark_summary";
423
+ dataType: "date";
424
+ columnType: "PgTimestamp";
425
+ data: Date;
426
+ driverParam: string;
427
+ notNull: true;
428
+ hasDefault: true;
429
+ isPrimaryKey: false;
430
+ isAutoincrement: false;
431
+ hasRuntimeDefault: false;
432
+ enumValues: undefined;
433
+ baseColumn: never;
434
+ identity: undefined;
435
+ generated: undefined;
436
+ }, {}, {}>;
437
+ };
438
+ dialect: "pg";
439
+ }>;
440
+ export type Merchant = typeof merchants.$inferSelect;
441
+ export type NewMerchant = typeof merchants.$inferInsert;
442
+ export type BenchmarkStat = typeof benchmarkStats.$inferSelect;
443
+ export type BenchmarkSummary = typeof benchmarkSummary.$inferSelect;
444
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAYA;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyCrB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIzB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK3B,CAAC;AAGH,MAAM,MAAM,QAAQ,GAAG,OAAO,SAAS,CAAC,YAAY,CAAC;AACrD,MAAM,MAAM,WAAW,GAAG,OAAO,SAAS,CAAC,YAAY,CAAC;AACxD,MAAM,MAAM,aAAa,GAAG,OAAO,cAAc,CAAC,YAAY,CAAC;AAC/D,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,YAAY,CAAC"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.benchmarkSummary = exports.benchmarkStats = exports.merchants = void 0;
4
+ const pg_core_1 = require("drizzle-orm/pg-core");
5
+ /**
6
+ * Merchants table - stores UCP-enabled merchant directory entries
7
+ */
8
+ exports.merchants = (0, pg_core_1.pgTable)('merchants', {
9
+ id: (0, pg_core_1.uuid)('id').primaryKey().defaultRandom(),
10
+ // The merchant's primary domain (e.g., "example.com")
11
+ domain: (0, pg_core_1.varchar)('domain', { length: 255 }).notNull().unique(),
12
+ // Display name for the merchant
13
+ displayName: (0, pg_core_1.varchar)('display_name', { length: 255 }).notNull(),
14
+ // Optional description
15
+ description: (0, pg_core_1.text)('description'),
16
+ // Logo URL
17
+ logoUrl: (0, pg_core_1.varchar)('logo_url', { length: 512 }),
18
+ // Website URL (full URL including protocol)
19
+ websiteUrl: (0, pg_core_1.varchar)('website_url', { length: 512 }),
20
+ // Category (e-commerce, saas, marketplace, etc.)
21
+ category: (0, pg_core_1.varchar)('category', { length: 100 }),
22
+ // Country code (ISO 3166-1 alpha-2)
23
+ countryCode: (0, pg_core_1.varchar)('country_code', { length: 2 }),
24
+ // UCP readiness score (0-100)
25
+ ucpScore: (0, pg_core_1.integer)('ucp_score'),
26
+ // UCP grade (A, B, C, D, F)
27
+ ucpGrade: (0, pg_core_1.varchar)('ucp_grade', { length: 2 }),
28
+ // Supported transports (comma-separated: REST, MCP, A2A, Embedded)
29
+ transports: (0, pg_core_1.varchar)('transports', { length: 255 }),
30
+ // Whether the merchant has opted into the directory
31
+ isPublic: (0, pg_core_1.boolean)('is_public').default(true).notNull(),
32
+ // Whether the merchant has been verified
33
+ isVerified: (0, pg_core_1.boolean)('is_verified').default(false).notNull(),
34
+ // Last validation timestamp
35
+ lastValidatedAt: (0, pg_core_1.timestamp)('last_validated_at'),
36
+ // Record timestamps
37
+ createdAt: (0, pg_core_1.timestamp)('created_at').defaultNow().notNull(),
38
+ updatedAt: (0, pg_core_1.timestamp)('updated_at').defaultNow().notNull(),
39
+ }, (table) => [
40
+ (0, pg_core_1.index)('idx_merchants_domain').on(table.domain),
41
+ (0, pg_core_1.index)('idx_merchants_category').on(table.category),
42
+ (0, pg_core_1.index)('idx_merchants_country').on(table.countryCode),
43
+ (0, pg_core_1.index)('idx_merchants_score').on(table.ucpScore),
44
+ (0, pg_core_1.index)('idx_merchants_public').on(table.isPublic),
45
+ ]);
46
+ /**
47
+ * Benchmark stats table - stores aggregate validation statistics
48
+ * (migrated from setup script)
49
+ */
50
+ exports.benchmarkStats = (0, pg_core_1.pgTable)('benchmark_stats', {
51
+ id: (0, pg_core_1.integer)('id').primaryKey().generatedAlwaysAsIdentity(),
52
+ scoreBucket: (0, pg_core_1.integer)('score_bucket').notNull().unique(),
53
+ count: (0, pg_core_1.integer)('count').default(0).notNull(),
54
+ });
55
+ /**
56
+ * Benchmark summary table - quick aggregate stats
57
+ * (migrated from setup script)
58
+ */
59
+ exports.benchmarkSummary = (0, pg_core_1.pgTable)('benchmark_summary', {
60
+ id: (0, pg_core_1.integer)('id').primaryKey().default(1),
61
+ totalValidations: (0, pg_core_1.integer)('total_validations').default(0).notNull(),
62
+ avgScore: (0, pg_core_1.decimal)('avg_score', { precision: 5, scale: 2 }).default('0'),
63
+ updatedAt: (0, pg_core_1.timestamp)('updated_at').defaultNow().notNull(),
64
+ });
65
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Product Feed Quality Analyzer
3
+ * Deep analysis of product data quality for AI agent visibility
4
+ */
5
+ import type { ProductData, ProductAnalysis, FeedAnalysisResult, FeedAnalysisInput, GtinValidation } from './types.js';
6
+ /**
7
+ * Validate a GTIN/UPC/EAN identifier
8
+ */
9
+ export declare function validateGtin(gtin: string): GtinValidation;
10
+ /**
11
+ * Extract products from HTML content
12
+ */
13
+ export declare function extractProductsFromHtml(html: string): ProductData[];
14
+ /**
15
+ * Analyze a single product
16
+ */
17
+ export declare function analyzeProduct(product: ProductData): ProductAnalysis;
18
+ /**
19
+ * Analyze product feed from raw product data
20
+ */
21
+ export declare function analyzeProductFeed(products: ProductData[], url: string, maxProducts?: number, includeProductDetails?: boolean): FeedAnalysisResult;
22
+ /**
23
+ * Analyze a product feed from HTML content
24
+ */
25
+ export declare function analyzeProductFeedFromHtml(html: string, url: string, options?: Partial<FeedAnalysisInput>): FeedAnalysisResult;
26
+ //# sourceMappingURL=feed-analyzer.d.ts.map
@@ -0,0 +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"}