@ucptools/validator 1.0.0 → 1.1.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 (330) 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.d.ts +6 -0
  18. package/dist/cli/index.d.ts.map +1 -0
  19. package/dist/cli/index.js +375 -0
  20. package/dist/cli/index.js.map +1 -0
  21. package/dist/cli/mock-server.d.ts +20 -0
  22. package/dist/cli/mock-server.d.ts.map +1 -0
  23. package/dist/cli/mock-server.js +261 -0
  24. package/dist/cli/mock-server.js.map +1 -0
  25. package/dist/compliance/compliance-generator.d.ts +34 -0
  26. package/dist/compliance/compliance-generator.d.ts.map +1 -0
  27. package/dist/compliance/compliance-generator.js +320 -0
  28. package/dist/compliance/compliance-generator.js.map +1 -0
  29. package/dist/compliance/index.d.ts +8 -0
  30. package/dist/compliance/index.d.ts.map +1 -0
  31. package/dist/compliance/index.js +17 -0
  32. package/dist/compliance/index.js.map +1 -0
  33. package/dist/compliance/templates.d.ts +34 -0
  34. package/dist/compliance/templates.d.ts.map +1 -0
  35. package/{src/compliance/templates.ts → dist/compliance/templates.js} +117 -155
  36. package/dist/compliance/templates.js.map +1 -0
  37. package/dist/compliance/types.d.ts +64 -0
  38. package/dist/compliance/types.d.ts.map +1 -0
  39. package/dist/compliance/types.js +64 -0
  40. package/dist/compliance/types.js.map +1 -0
  41. package/dist/db/index.d.ts +17 -0
  42. package/dist/db/index.d.ts.map +1 -0
  43. package/dist/db/index.js +80 -0
  44. package/dist/db/index.js.map +1 -0
  45. package/dist/db/schema.d.ts +3886 -0
  46. package/dist/db/schema.d.ts.map +1 -0
  47. package/dist/db/schema.js +425 -0
  48. package/dist/db/schema.js.map +1 -0
  49. package/dist/db/utils.d.ts +252 -0
  50. package/dist/db/utils.d.ts.map +1 -0
  51. package/dist/db/utils.js +295 -0
  52. package/dist/db/utils.js.map +1 -0
  53. package/dist/feed-analyzer/feed-analyzer.d.ts +26 -0
  54. package/dist/feed-analyzer/feed-analyzer.d.ts.map +1 -0
  55. package/{src/feed-analyzer/feed-analyzer.ts → dist/feed-analyzer/feed-analyzer.js} +856 -726
  56. package/dist/feed-analyzer/feed-analyzer.js.map +1 -0
  57. package/dist/feed-analyzer/index.d.ts +8 -0
  58. package/dist/feed-analyzer/index.d.ts.map +1 -0
  59. package/dist/feed-analyzer/index.js +19 -0
  60. package/dist/feed-analyzer/index.js.map +1 -0
  61. package/dist/feed-analyzer/types.d.ts +285 -0
  62. package/dist/feed-analyzer/types.d.ts.map +1 -0
  63. package/dist/feed-analyzer/types.js +175 -0
  64. package/dist/feed-analyzer/types.js.map +1 -0
  65. package/{src/generator/index.ts → dist/generator/index.d.ts} +1 -1
  66. package/dist/generator/index.d.ts.map +1 -0
  67. package/dist/generator/index.js +13 -0
  68. package/dist/generator/index.js.map +1 -0
  69. package/dist/generator/key-generator.d.ts +24 -0
  70. package/dist/generator/key-generator.d.ts.map +1 -0
  71. package/dist/generator/key-generator.js +144 -0
  72. package/dist/generator/key-generator.js.map +1 -0
  73. package/dist/generator/profile-builder.d.ts +15 -0
  74. package/dist/generator/profile-builder.d.ts.map +1 -0
  75. package/dist/generator/profile-builder.js +338 -0
  76. package/dist/generator/profile-builder.js.map +1 -0
  77. package/dist/hosting/artifacts-generator.d.ts +10 -0
  78. package/dist/hosting/artifacts-generator.d.ts.map +1 -0
  79. package/{src/hosting/artifacts-generator.ts → dist/hosting/artifacts-generator.js} +191 -241
  80. package/dist/hosting/artifacts-generator.js.map +1 -0
  81. package/{src/hosting/index.ts → dist/hosting/index.d.ts} +1 -1
  82. package/dist/hosting/index.d.ts.map +1 -0
  83. package/dist/hosting/index.js +10 -0
  84. package/dist/hosting/index.js.map +1 -0
  85. package/dist/index.d.ts +18 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +78 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/lib/analytics.d.ts +337 -0
  90. package/dist/lib/analytics.d.ts.map +1 -0
  91. package/dist/lib/analytics.js +188 -0
  92. package/dist/lib/analytics.js.map +1 -0
  93. package/{src/security/index.ts → dist/security/index.d.ts} +8 -15
  94. package/dist/security/index.d.ts.map +1 -0
  95. package/dist/security/index.js +12 -0
  96. package/dist/security/index.js.map +1 -0
  97. package/dist/security/security-scanner.d.ts +10 -0
  98. package/dist/security/security-scanner.d.ts.map +1 -0
  99. package/dist/security/security-scanner.js +669 -0
  100. package/dist/security/security-scanner.js.map +1 -0
  101. package/dist/security/types.d.ts +80 -0
  102. package/dist/security/types.d.ts.map +1 -0
  103. package/dist/security/types.js +21 -0
  104. package/dist/security/types.js.map +1 -0
  105. package/dist/services/analytics.d.ts +114 -0
  106. package/dist/services/analytics.d.ts.map +1 -0
  107. package/dist/services/analytics.js +862 -0
  108. package/dist/services/analytics.js.map +1 -0
  109. package/dist/services/badge.d.ts +31 -0
  110. package/dist/services/badge.d.ts.map +1 -0
  111. package/dist/services/badge.js +152 -0
  112. package/dist/services/badge.js.map +1 -0
  113. package/dist/services/cron.d.ts +125 -0
  114. package/dist/services/cron.d.ts.map +1 -0
  115. package/dist/services/cron.js +613 -0
  116. package/dist/services/cron.js.map +1 -0
  117. package/dist/services/directory.d.ts +106 -0
  118. package/dist/services/directory.d.ts.map +1 -0
  119. package/dist/services/directory.js +351 -0
  120. package/dist/services/directory.js.map +1 -0
  121. package/dist/services/email.d.ts +112 -0
  122. package/dist/services/email.d.ts.map +1 -0
  123. package/dist/services/email.js +772 -0
  124. package/dist/services/email.js.map +1 -0
  125. package/dist/services/hosted-profiles.d.ts +77 -0
  126. package/dist/services/hosted-profiles.d.ts.map +1 -0
  127. package/dist/services/hosted-profiles.js +433 -0
  128. package/dist/services/hosted-profiles.js.map +1 -0
  129. package/dist/services/latency.d.ts +67 -0
  130. package/dist/services/latency.d.ts.map +1 -0
  131. package/dist/services/latency.js +274 -0
  132. package/dist/services/latency.js.map +1 -0
  133. package/dist/services/manifest-compliance.d.ts +64 -0
  134. package/dist/services/manifest-compliance.d.ts.map +1 -0
  135. package/dist/services/manifest-compliance.js +271 -0
  136. package/dist/services/manifest-compliance.js.map +1 -0
  137. package/dist/services/monitoring-diff.d.ts +31 -0
  138. package/dist/services/monitoring-diff.d.ts.map +1 -0
  139. package/dist/services/monitoring-diff.js +189 -0
  140. package/dist/services/monitoring-diff.js.map +1 -0
  141. package/dist/services/notifications.d.ts +46 -0
  142. package/dist/services/notifications.d.ts.map +1 -0
  143. package/dist/services/notifications.js +88 -0
  144. package/dist/services/notifications.js.map +1 -0
  145. package/dist/services/stripe.d.ts +93 -0
  146. package/dist/services/stripe.d.ts.map +1 -0
  147. package/dist/services/stripe.js +490 -0
  148. package/dist/services/stripe.js.map +1 -0
  149. package/dist/services/validation-history.d.ts +99 -0
  150. package/dist/services/validation-history.d.ts.map +1 -0
  151. package/dist/services/validation-history.js +344 -0
  152. package/dist/services/validation-history.js.map +1 -0
  153. package/dist/services/validation-logging.d.ts +103 -0
  154. package/dist/services/validation-logging.d.ts.map +1 -0
  155. package/dist/services/validation-logging.js +210 -0
  156. package/dist/services/validation-logging.js.map +1 -0
  157. package/dist/services/validation.d.ts +119 -0
  158. package/dist/services/validation.d.ts.map +1 -0
  159. package/dist/services/validation.js +1185 -0
  160. package/dist/services/validation.js.map +1 -0
  161. package/dist/simulator/agent-simulator.d.ts +69 -0
  162. package/dist/simulator/agent-simulator.d.ts.map +1 -0
  163. package/dist/simulator/agent-simulator.js +870 -0
  164. package/dist/simulator/agent-simulator.js.map +1 -0
  165. package/{src/simulator/index.ts → dist/simulator/index.d.ts} +7 -7
  166. package/dist/simulator/index.d.ts.map +1 -0
  167. package/dist/simulator/index.js +23 -0
  168. package/dist/simulator/index.js.map +1 -0
  169. package/{src/simulator/types.ts → dist/simulator/types.d.ts} +171 -170
  170. package/dist/simulator/types.d.ts.map +1 -0
  171. package/dist/simulator/types.js +18 -0
  172. package/dist/simulator/types.js.map +1 -0
  173. package/dist/types/acp-validation.d.ts +87 -0
  174. package/dist/types/acp-validation.d.ts.map +1 -0
  175. package/dist/types/acp-validation.js +40 -0
  176. package/dist/types/acp-validation.js.map +1 -0
  177. package/dist/types/analytics.d.ts +182 -0
  178. package/dist/types/analytics.d.ts.map +1 -0
  179. package/dist/types/analytics.js +7 -0
  180. package/dist/types/analytics.js.map +1 -0
  181. package/dist/types/generator.d.ts +106 -0
  182. package/dist/types/generator.d.ts.map +1 -0
  183. package/dist/types/generator.js +6 -0
  184. package/dist/types/generator.js.map +1 -0
  185. package/{src/types/index.ts → dist/types/index.d.ts} +1 -1
  186. package/dist/types/index.d.ts.map +1 -0
  187. package/dist/types/index.js +23 -0
  188. package/dist/types/index.js.map +1 -0
  189. package/dist/types/ucp-profile.d.ts +111 -0
  190. package/dist/types/ucp-profile.d.ts.map +1 -0
  191. package/dist/types/ucp-profile.js +45 -0
  192. package/dist/types/ucp-profile.js.map +1 -0
  193. package/dist/types/validation.d.ts +76 -0
  194. package/dist/types/validation.d.ts.map +1 -0
  195. package/dist/types/validation.js +42 -0
  196. package/dist/types/validation.js.map +1 -0
  197. package/dist/validator/acp/index.d.ts +31 -0
  198. package/dist/validator/acp/index.d.ts.map +1 -0
  199. package/dist/validator/acp/index.js +574 -0
  200. package/dist/validator/acp/index.js.map +1 -0
  201. package/dist/validator/index.d.ts +26 -0
  202. package/dist/validator/index.d.ts.map +1 -0
  203. package/dist/validator/index.js +161 -0
  204. package/dist/validator/index.js.map +1 -0
  205. package/dist/validator/network-validator.d.ts +28 -0
  206. package/dist/validator/network-validator.d.ts.map +1 -0
  207. package/dist/validator/network-validator.js +319 -0
  208. package/dist/validator/network-validator.js.map +1 -0
  209. package/dist/validator/rules-validator.d.ts +19 -0
  210. package/dist/validator/rules-validator.d.ts.map +1 -0
  211. package/dist/validator/rules-validator.js +306 -0
  212. package/dist/validator/rules-validator.js.map +1 -0
  213. package/dist/validator/sdk-validator.d.ts +58 -0
  214. package/dist/validator/sdk-validator.d.ts.map +1 -0
  215. package/{src/validator/sdk-validator.ts → dist/validator/sdk-validator.js} +273 -330
  216. package/dist/validator/sdk-validator.js.map +1 -0
  217. package/dist/validator/structural-validator.d.ts +11 -0
  218. package/dist/validator/structural-validator.d.ts.map +1 -0
  219. package/dist/validator/structural-validator.js +549 -0
  220. package/dist/validator/structural-validator.js.map +1 -0
  221. package/dist/validator/utils.d.ts +51 -0
  222. package/dist/validator/utils.d.ts.map +1 -0
  223. package/dist/validator/utils.js +132 -0
  224. package/dist/validator/utils.js.map +1 -0
  225. package/package.json +44 -12
  226. package/CLAUDE.md +0 -109
  227. package/api/analyze-feed.js +0 -140
  228. package/api/badge.js +0 -185
  229. package/api/benchmark.js +0 -177
  230. package/api/directory-stats.ts +0 -29
  231. package/api/directory.ts +0 -73
  232. package/api/generate-compliance.js +0 -143
  233. package/api/generate-schema.js +0 -457
  234. package/api/generate.js +0 -132
  235. package/api/security-scan.js +0 -133
  236. package/api/simulate.js +0 -187
  237. package/api/tsconfig.json +0 -10
  238. package/api/validate.js +0 -1351
  239. package/apify-actor/.actor/actor.json +0 -68
  240. package/apify-actor/.actor/input_schema.json +0 -32
  241. package/apify-actor/APIFY-STORE-LISTING.md +0 -412
  242. package/apify-actor/Dockerfile +0 -8
  243. package/apify-actor/README.md +0 -166
  244. package/apify-actor/main.ts +0 -111
  245. package/apify-actor/package.json +0 -17
  246. package/apify-actor/src/main.js +0 -199
  247. package/docs/BRAND-IDENTITY.md +0 -238
  248. package/docs/BRAND-STYLE-GUIDE.md +0 -356
  249. package/drizzle/0000_black_king_cobra.sql +0 -39
  250. package/drizzle/meta/0000_snapshot.json +0 -309
  251. package/drizzle/meta/_journal.json +0 -13
  252. package/drizzle.config.ts +0 -10
  253. package/public/.well-known/ucp +0 -25
  254. package/public/android-chrome-192x192.png +0 -0
  255. package/public/android-chrome-512x512.png +0 -0
  256. package/public/apple-touch-icon.png +0 -0
  257. package/public/brand.css +0 -321
  258. package/public/directory.html +0 -701
  259. package/public/favicon-16x16.png +0 -0
  260. package/public/favicon-32x32.png +0 -0
  261. package/public/favicon.ico +0 -0
  262. package/public/guides/bigcommerce.html +0 -743
  263. package/public/guides/fastucp.html +0 -838
  264. package/public/guides/magento.html +0 -779
  265. package/public/guides/shopify.html +0 -726
  266. package/public/guides/squarespace.html +0 -749
  267. package/public/guides/wix.html +0 -747
  268. package/public/guides/woocommerce.html +0 -733
  269. package/public/index.html +0 -3835
  270. package/public/learn.html +0 -396
  271. package/public/logo.jpeg +0 -0
  272. package/public/og-image-icon.png +0 -0
  273. package/public/og-image.png +0 -0
  274. package/public/robots.txt +0 -6
  275. package/public/site.webmanifest +0 -31
  276. package/public/sitemap.xml +0 -69
  277. package/public/social/linkedin-banner-1128x191.png +0 -0
  278. package/public/social/temp.PNG +0 -0
  279. package/public/social/x-header-1500x500.png +0 -0
  280. package/public/verify.html +0 -410
  281. package/scripts/generate-favicons.js +0 -44
  282. package/scripts/generate-ico.js +0 -23
  283. package/scripts/generate-og-image.js +0 -45
  284. package/scripts/reset-db.ts +0 -77
  285. package/scripts/seed-db.ts +0 -71
  286. package/scripts/setup-benchmark-db.js +0 -70
  287. package/src/api/server.ts +0 -266
  288. package/src/cli/index.ts +0 -302
  289. package/src/compliance/compliance-generator.ts +0 -452
  290. package/src/compliance/index.ts +0 -28
  291. package/src/compliance/types.ts +0 -170
  292. package/src/db/index.ts +0 -28
  293. package/src/db/schema.ts +0 -84
  294. package/src/feed-analyzer/index.ts +0 -34
  295. package/src/feed-analyzer/types.ts +0 -354
  296. package/src/generator/key-generator.ts +0 -124
  297. package/src/generator/profile-builder.ts +0 -402
  298. package/src/index.ts +0 -105
  299. package/src/security/security-scanner.ts +0 -604
  300. package/src/security/types.ts +0 -55
  301. package/src/services/directory.ts +0 -434
  302. package/src/simulator/agent-simulator.ts +0 -941
  303. package/src/types/generator.ts +0 -140
  304. package/src/types/ucp-profile.ts +0 -140
  305. package/src/types/validation.ts +0 -89
  306. package/src/validator/index.ts +0 -194
  307. package/src/validator/network-validator.ts +0 -417
  308. package/src/validator/rules-validator.ts +0 -297
  309. package/src/validator/structural-validator.ts +0 -476
  310. package/tests/fixtures/non-compliant-profile.json +0 -25
  311. package/tests/fixtures/official-sample-profile.json +0 -75
  312. package/tests/integration/benchmark.test.ts +0 -207
  313. package/tests/integration/database.test.ts +0 -163
  314. package/tests/integration/directory-api.test.ts +0 -268
  315. package/tests/integration/simulate-api.test.ts +0 -230
  316. package/tests/integration/validate-api.test.ts +0 -269
  317. package/tests/setup.ts +0 -15
  318. package/tests/unit/agent-simulator.test.ts +0 -575
  319. package/tests/unit/compliance-generator.test.ts +0 -374
  320. package/tests/unit/directory-service.test.ts +0 -272
  321. package/tests/unit/feed-analyzer.test.ts +0 -517
  322. package/tests/unit/lint-suggestions.test.ts +0 -423
  323. package/tests/unit/official-samples.test.ts +0 -211
  324. package/tests/unit/pdf-report.test.ts +0 -390
  325. package/tests/unit/sdk-validator.test.ts +0 -531
  326. package/tests/unit/security-scanner.test.ts +0 -410
  327. package/tests/unit/validation.test.ts +0 -390
  328. package/tsconfig.json +0 -20
  329. package/vercel.json +0 -34
  330. package/vitest.config.ts +0 -22
@@ -1,133 +0,0 @@
1
- /**
2
- * Vercel Serverless Function: Security Posture Scanner
3
- * POST /api/security-scan
4
- *
5
- * Scans UCP endpoints for common security misconfigurations.
6
- * Helps merchants understand their security posture before exposing
7
- * endpoints to AI agents.
8
- *
9
- * Request body:
10
- * { "domain": "example.com", "options"?: { timeoutMs?: number } }
11
- *
12
- * Response:
13
- * Security scan result including checks, score, grade, and recommendations.
14
- */
15
-
16
- export default async function handler(req, res) {
17
- // Handle CORS
18
- res.setHeader('Access-Control-Allow-Origin', '*');
19
- res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
20
- res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
21
-
22
- if (req.method === 'OPTIONS') {
23
- return res.status(200).end();
24
- }
25
-
26
- if (req.method !== 'POST') {
27
- return res.status(405).json({
28
- error: 'Method not allowed',
29
- message: 'Use POST to run a security scan',
30
- });
31
- }
32
-
33
- try {
34
- const { domain, options = {} } = req.body || {};
35
-
36
- if (!domain) {
37
- return res.status(400).json({
38
- error: 'Missing domain',
39
- message: 'Please provide a domain to scan',
40
- });
41
- }
42
-
43
- // Clean domain
44
- const cleanDomain = domain
45
- .replace(/^https?:\/\//, '')
46
- .replace(/\/.*$/, '')
47
- .toLowerCase()
48
- .trim();
49
-
50
- if (!cleanDomain) {
51
- return res.status(400).json({
52
- error: 'Invalid domain',
53
- message: 'Please provide a valid domain',
54
- });
55
- }
56
-
57
- // Dynamic import of the security scanner
58
- const { scanEndpointSecurity } = await import('../src/security/index.js');
59
-
60
- // Run security scan
61
- const scanOptions = {
62
- timeoutMs: options.timeoutMs || 15000,
63
- };
64
-
65
- const result = await scanEndpointSecurity(cleanDomain, scanOptions);
66
-
67
- // Build response
68
- const response = {
69
- ok: result.score >= 60,
70
- domain: result.domain,
71
- endpoint: result.endpoint,
72
- scanned_at: result.scanned_at,
73
-
74
- // Score and grade
75
- score: result.score,
76
- grade: result.grade,
77
-
78
- // Summary
79
- summary: result.summary,
80
-
81
- // All checks with details
82
- checks: result.checks.map(check => ({
83
- id: check.id,
84
- name: check.name,
85
- description: check.description,
86
- status: check.status,
87
- severity: check.severity,
88
- details: check.details,
89
- recommendation: check.recommendation,
90
- })),
91
-
92
- // Group by status for easier UI rendering
93
- by_status: {
94
- passed: result.checks.filter(c => c.status === 'pass'),
95
- failed: result.checks.filter(c => c.status === 'fail'),
96
- warnings: result.checks.filter(c => c.status === 'warn'),
97
- skipped: result.checks.filter(c => c.status === 'skip'),
98
- },
99
-
100
- // Critical issues that need immediate attention
101
- critical_issues: result.checks.filter(
102
- c => c.status === 'fail' && (c.severity === 'critical' || c.severity === 'high')
103
- ),
104
-
105
- // Badge
106
- badge: {
107
- text: `Security: ${result.grade} (${result.score}/100)`,
108
- color: getBadgeColor(result.score),
109
- },
110
- };
111
-
112
- return res.status(200).json(response);
113
-
114
- } catch (error) {
115
- console.error('Security scan error:', error);
116
- return res.status(500).json({
117
- error: 'Security scan failed',
118
- message: error.message || 'An unexpected error occurred',
119
- });
120
- }
121
- }
122
-
123
- /**
124
- * Get badge color from score
125
- */
126
- function getBadgeColor(score) {
127
- if (score >= 90) return 'brightgreen';
128
- if (score >= 80) return 'green';
129
- if (score >= 70) return 'yellowgreen';
130
- if (score >= 60) return 'yellow';
131
- if (score >= 40) return 'orange';
132
- return 'red';
133
- }
package/api/simulate.js DELETED
@@ -1,187 +0,0 @@
1
- /**
2
- * Vercel Serverless Function: AI Agent Simulation
3
- * POST /api/simulate
4
- *
5
- * Simulates how an AI agent would interact with a UCP-enabled merchant.
6
- * Tests real-world functionality, not just spec compliance.
7
- *
8
- * Request body:
9
- * { "domain": "example.com", "options"?: { ... } }
10
- *
11
- * Response:
12
- * Complete simulation result including discovery, capabilities,
13
- * services, checkout flow, and payment readiness.
14
- */
15
-
16
- export default async function handler(req, res) {
17
- // Handle CORS
18
- res.setHeader('Access-Control-Allow-Origin', '*');
19
- res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
20
- res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
21
-
22
- if (req.method === 'OPTIONS') {
23
- return res.status(200).end();
24
- }
25
-
26
- if (req.method !== 'POST') {
27
- return res.status(405).json({
28
- error: 'Method not allowed',
29
- message: 'Use POST to simulate AI agent interaction',
30
- });
31
- }
32
-
33
- try {
34
- const { domain, options = {} } = req.body || {};
35
-
36
- if (!domain) {
37
- return res.status(400).json({
38
- error: 'Missing domain',
39
- message: 'Please provide a domain to simulate',
40
- });
41
- }
42
-
43
- // Clean domain
44
- const cleanDomain = domain
45
- .replace(/^https?:\/\//, '')
46
- .replace(/\/.*$/, '')
47
- .toLowerCase()
48
- .trim();
49
-
50
- if (!cleanDomain) {
51
- return res.status(400).json({
52
- error: 'Invalid domain',
53
- message: 'Please provide a valid domain',
54
- });
55
- }
56
-
57
- // Dynamic import of the simulator
58
- const { simulateAgentInteraction } = await import('../src/simulator/index.js');
59
-
60
- // Run simulation with timeout
61
- const simulationOptions = {
62
- timeoutMs: options.timeoutMs || 30000,
63
- skipRestApiTest: options.skipRestApiTest || false,
64
- skipSchemaValidation: options.skipSchemaValidation || false,
65
- testCheckoutFlow: options.testCheckoutFlow !== false,
66
- verbose: options.verbose || false,
67
- };
68
-
69
- const result = await simulateAgentInteraction(cleanDomain, simulationOptions);
70
-
71
- // Build response
72
- const response = {
73
- ok: result.ok,
74
- domain: result.domain,
75
- simulated_at: result.simulatedAt,
76
- duration_ms: result.durationMs,
77
-
78
- // Score and grade
79
- score: result.overallScore,
80
- grade: getGrade(result.overallScore),
81
-
82
- // Summary
83
- summary: {
84
- total_steps: result.summary.totalSteps,
85
- passed: result.summary.passedSteps,
86
- failed: result.summary.failedSteps,
87
- warnings: result.summary.warningSteps,
88
- skipped: result.summary.skippedSteps,
89
- },
90
-
91
- // Discovery
92
- discovery: {
93
- success: result.discovery.success,
94
- profile_url: result.discovery.profileUrl,
95
- services: result.discovery.services,
96
- capabilities: result.discovery.capabilities,
97
- transports: result.discovery.transports,
98
- steps: result.discovery.steps,
99
- },
100
-
101
- // Capabilities
102
- capabilities: result.capabilities.map(cap => ({
103
- name: cap.name,
104
- version: cap.version,
105
- schema_accessible: cap.schemaAccessible,
106
- spec_accessible: cap.specAccessible,
107
- is_extension: cap.isExtension,
108
- parent: cap.parentCapability,
109
- })),
110
-
111
- // Services
112
- services: result.services.map(svc => ({
113
- name: svc.name,
114
- version: svc.version,
115
- transports: svc.transports,
116
- })),
117
-
118
- // REST API (if tested)
119
- rest_api: result.restApi ? {
120
- success: result.restApi.success,
121
- schema_loaded: result.restApi.schemaLoaded,
122
- endpoint_accessible: result.restApi.endpointAccessible,
123
- steps: result.restApi.steps,
124
- } : null,
125
-
126
- // Checkout flow (if tested)
127
- checkout: result.checkout ? {
128
- success: result.checkout.success,
129
- can_create_checkout: result.checkout.canCreateCheckout,
130
- checkout_schema_valid: result.checkout.checkoutSchemaValid,
131
- order_flow_supported: result.checkout.orderFlowSupported,
132
- fulfillment_supported: result.checkout.fulfillmentSupported,
133
- steps: result.checkout.steps,
134
- } : null,
135
-
136
- // Payment readiness
137
- payment: result.payment ? {
138
- success: result.payment.success,
139
- handlers_found: result.payment.handlersFound,
140
- webhook_verifiable: result.payment.webhookVerifiable,
141
- signing_key_valid: result.payment.signingKeyValid,
142
- steps: result.payment.steps,
143
- } : null,
144
-
145
- // Recommendations
146
- recommendations: result.recommendations,
147
-
148
- // Badge
149
- badge: {
150
- text: `AI Agent Ready: ${getGrade(result.overallScore)} (${result.overallScore}/100)`,
151
- color: getBadgeColor(result.overallScore),
152
- },
153
- };
154
-
155
- return res.status(200).json(response);
156
-
157
- } catch (error) {
158
- console.error('Simulation error:', error);
159
- return res.status(500).json({
160
- error: 'Simulation failed',
161
- message: error.message || 'An unexpected error occurred',
162
- });
163
- }
164
- }
165
-
166
- /**
167
- * Get letter grade from score
168
- */
169
- function getGrade(score) {
170
- if (score >= 90) return 'A';
171
- if (score >= 80) return 'B';
172
- if (score >= 70) return 'C';
173
- if (score >= 60) return 'D';
174
- return 'F';
175
- }
176
-
177
- /**
178
- * Get badge color from score
179
- */
180
- function getBadgeColor(score) {
181
- if (score >= 90) return 'brightgreen';
182
- if (score >= 80) return 'green';
183
- if (score >= 70) return 'yellowgreen';
184
- if (score >= 60) return 'yellow';
185
- if (score >= 40) return 'orange';
186
- return 'red';
187
- }
package/api/tsconfig.json DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "../tsconfig.json",
3
- "compilerOptions": {
4
- "rootDir": "..",
5
- "outDir": "../.vercel/output/functions",
6
- "noEmit": true
7
- },
8
- "include": ["./**/*.ts", "../src/**/*.ts"],
9
- "exclude": ["../node_modules", "../dist"]
10
- }