@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validator/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAGhB,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAsC3B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAqB3B;AA4CD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAehE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAmB3B"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ /**
3
+ * UCP Profile Validator
4
+ * Main entry point combining structural, rules, and network validation
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.validateSigningKeysWithSdk = exports.validateCapabilityWithSdk = exports.validateServiceWithSdk = exports.isSdkCompliant = exports.getSdkVersion = exports.validateWithSdk = exports.safeValidateWithSdk = exports.clearSchemaCache = exports.validateRemoteProfile = exports.validateNetwork = exports.validateRules = exports.validateStructure = void 0;
8
+ exports.validateProfile = validateProfile;
9
+ exports.validateRemote = validateRemote;
10
+ exports.validateQuick = validateQuick;
11
+ exports.validateJsonString = validateJsonString;
12
+ const structural_validator_js_1 = require("./structural-validator.js");
13
+ const rules_validator_js_1 = require("./rules-validator.js");
14
+ const network_validator_js_1 = require("./network-validator.js");
15
+ const sdk_validator_js_1 = require("./sdk-validator.js");
16
+ var structural_validator_js_2 = require("./structural-validator.js");
17
+ Object.defineProperty(exports, "validateStructure", { enumerable: true, get: function () { return structural_validator_js_2.validateStructure; } });
18
+ var rules_validator_js_2 = require("./rules-validator.js");
19
+ Object.defineProperty(exports, "validateRules", { enumerable: true, get: function () { return rules_validator_js_2.validateRules; } });
20
+ var network_validator_js_2 = require("./network-validator.js");
21
+ Object.defineProperty(exports, "validateNetwork", { enumerable: true, get: function () { return network_validator_js_2.validateNetwork; } });
22
+ Object.defineProperty(exports, "validateRemoteProfile", { enumerable: true, get: function () { return network_validator_js_2.validateRemoteProfile; } });
23
+ Object.defineProperty(exports, "clearSchemaCache", { enumerable: true, get: function () { return network_validator_js_2.clearSchemaCache; } });
24
+ var sdk_validator_js_2 = require("./sdk-validator.js");
25
+ Object.defineProperty(exports, "safeValidateWithSdk", { enumerable: true, get: function () { return sdk_validator_js_2.safeValidateWithSdk; } });
26
+ Object.defineProperty(exports, "validateWithSdk", { enumerable: true, get: function () { return sdk_validator_js_2.validateWithSdk; } });
27
+ Object.defineProperty(exports, "getSdkVersion", { enumerable: true, get: function () { return sdk_validator_js_2.getSdkVersion; } });
28
+ Object.defineProperty(exports, "isSdkCompliant", { enumerable: true, get: function () { return sdk_validator_js_2.isSdkCompliant; } });
29
+ Object.defineProperty(exports, "validateServiceWithSdk", { enumerable: true, get: function () { return sdk_validator_js_2.validateServiceWithSdk; } });
30
+ Object.defineProperty(exports, "validateCapabilityWithSdk", { enumerable: true, get: function () { return sdk_validator_js_2.validateCapabilityWithSdk; } });
31
+ Object.defineProperty(exports, "validateSigningKeysWithSdk", { enumerable: true, get: function () { return sdk_validator_js_2.validateSigningKeysWithSdk; } });
32
+ /**
33
+ * Validate a UCP profile (local JSON)
34
+ */
35
+ async function validateProfile(profile, options = {}) {
36
+ const mode = options.mode || 'full';
37
+ const issues = [];
38
+ // Phase 1: Structural validation (always run)
39
+ if (mode === 'structural' || mode === 'rules' || mode === 'full') {
40
+ const structuralIssues = (0, structural_validator_js_1.validateStructure)(profile);
41
+ issues.push(...structuralIssues);
42
+ // If structural validation has errors, don't proceed with rules/network
43
+ const hasStructuralErrors = structuralIssues.some(i => i.severity === 'error');
44
+ if (hasStructuralErrors && mode !== 'structural') {
45
+ return buildReport(issues, mode, undefined, profile);
46
+ }
47
+ }
48
+ // At this point, profile structure is valid
49
+ const ucpProfile = profile;
50
+ // Phase 2: UCP rules validation
51
+ if (mode === 'rules' || mode === 'full') {
52
+ const rulesIssues = (0, rules_validator_js_1.validateRules)(ucpProfile);
53
+ issues.push(...rulesIssues);
54
+ }
55
+ // Phase 3: Network validation (optional)
56
+ if (mode === 'network' || mode === 'full') {
57
+ if (!options.skipNetworkChecks) {
58
+ const networkOptions = {
59
+ timeoutMs: options.timeoutMs,
60
+ cacheTtlMs: options.cacheTtlMs,
61
+ };
62
+ const networkIssues = await (0, network_validator_js_1.validateNetwork)(ucpProfile, networkOptions);
63
+ issues.push(...networkIssues);
64
+ }
65
+ }
66
+ return buildReport(issues, mode, undefined, ucpProfile);
67
+ }
68
+ /**
69
+ * Validate a remote UCP profile (fetches from domain)
70
+ */
71
+ async function validateRemote(domain, options = {}) {
72
+ const issues = [];
73
+ // Fetch remote profile
74
+ const { profile, profileUrl: foundProfileUrl, issues: fetchIssues } = await (0, network_validator_js_1.validateRemoteProfile)(domain, {
75
+ timeoutMs: options.timeoutMs,
76
+ cacheTtlMs: options.cacheTtlMs,
77
+ });
78
+ issues.push(...fetchIssues);
79
+ const profileUrl = foundProfileUrl || `https://${domain}/.well-known/ucp`;
80
+ if (!profile) {
81
+ return buildReport(issues, 'network', profileUrl, undefined);
82
+ }
83
+ // Run full validation on fetched profile
84
+ const validationResult = await validateProfile(profile, options);
85
+ issues.push(...validationResult.issues);
86
+ return buildReport(issues, options.mode || 'full', profileUrl, profile);
87
+ }
88
+ /**
89
+ * Build validation report
90
+ */
91
+ function buildReport(issues, mode, profileUrl, profile) {
92
+ // Determine if validation passed (no errors)
93
+ const hasErrors = issues.some(i => i.severity === 'error');
94
+ // Extract UCP version if available
95
+ let ucpVersion;
96
+ if (profile && typeof profile === 'object') {
97
+ const p = profile;
98
+ if (p.ucp && typeof p.ucp === 'object') {
99
+ const ucp = p.ucp;
100
+ if (typeof ucp.version === 'string') {
101
+ ucpVersion = ucp.version;
102
+ }
103
+ }
104
+ }
105
+ // Run SDK validation for compliance check
106
+ const sdkCompliant = profile ? (0, sdk_validator_js_1.isSdkCompliant)(profile) : false;
107
+ return {
108
+ ok: !hasErrors,
109
+ profile_url: profileUrl,
110
+ ucp_version: ucpVersion,
111
+ issues,
112
+ validated_at: new Date().toISOString(),
113
+ validation_mode: mode,
114
+ sdk_validation: {
115
+ validated: true,
116
+ sdk_version: (0, sdk_validator_js_1.getSdkVersion)(),
117
+ compliant: sdkCompliant,
118
+ },
119
+ };
120
+ }
121
+ /**
122
+ * Quick validation (structural + rules only, no network)
123
+ */
124
+ function validateQuick(profile) {
125
+ const issues = [];
126
+ // Structural validation
127
+ const structuralIssues = (0, structural_validator_js_1.validateStructure)(profile);
128
+ issues.push(...structuralIssues);
129
+ // If structural is OK, run rules validation
130
+ const hasStructuralErrors = structuralIssues.some(i => i.severity === 'error');
131
+ if (!hasStructuralErrors) {
132
+ const rulesIssues = (0, rules_validator_js_1.validateRules)(profile);
133
+ issues.push(...rulesIssues);
134
+ }
135
+ return buildReport(issues, 'rules', undefined, profile);
136
+ }
137
+ /**
138
+ * Parse and validate JSON string
139
+ */
140
+ async function validateJsonString(json, options = {}) {
141
+ try {
142
+ const profile = JSON.parse(json);
143
+ return validateProfile(profile, options);
144
+ }
145
+ catch (error) {
146
+ const message = error instanceof Error ? error.message : 'Invalid JSON';
147
+ return {
148
+ ok: false,
149
+ issues: [{
150
+ severity: 'error',
151
+ code: 'UCP_MISSING_ROOT',
152
+ path: '$',
153
+ message: `Failed to parse JSON: ${message}`,
154
+ hint: 'Ensure the input is valid JSON',
155
+ }],
156
+ validated_at: new Date().toISOString(),
157
+ validation_mode: options.mode || 'full',
158
+ };
159
+ }
160
+ }
161
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validator/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Network Validator
3
+ * Validates UCP profile with network checks (fetches remote schemas)
4
+ */
5
+ import type { UcpProfile } from '../types/ucp-profile.js';
6
+ import type { ValidationIssue } from '../types/validation.js';
7
+ export interface NetworkValidationOptions {
8
+ timeoutMs?: number;
9
+ cacheTtlMs?: number;
10
+ skipSchemaFetch?: boolean;
11
+ }
12
+ /**
13
+ * Validate UCP profile with network checks
14
+ */
15
+ export declare function validateNetwork(profile: UcpProfile, options?: NetworkValidationOptions): Promise<ValidationIssue[]>;
16
+ /**
17
+ * Validate remote profile fetch
18
+ */
19
+ export declare function validateRemoteProfile(domain: string, options?: NetworkValidationOptions): Promise<{
20
+ profile: UcpProfile | null;
21
+ profileUrl?: string;
22
+ issues: ValidationIssue[];
23
+ }>;
24
+ /**
25
+ * Clear the schema cache
26
+ */
27
+ export declare function clearSchemaCache(): void;
28
+ //# sourceMappingURL=network-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-validator.d.ts","sourceRoot":"","sources":["../../src/validator/network-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAiC,MAAM,wBAAwB,CAAC;AAS7F,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,UAAU,EACnB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,eAAe,EAAE,CAAC,CA6B5B;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC;IAAE,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CAwCzF;AAmTD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -0,0 +1,319 @@
1
+ "use strict";
2
+ /**
3
+ * Network Validator
4
+ * Validates UCP profile with network checks (fetches remote schemas)
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.validateNetwork = validateNetwork;
8
+ exports.validateRemoteProfile = validateRemoteProfile;
9
+ exports.clearSchemaCache = clearSchemaCache;
10
+ const validation_js_1 = require("../types/validation.js");
11
+ const utils_js_1 = require("./utils.js");
12
+ // Simple in-memory cache for schema fetches
13
+ const schemaCache = new Map();
14
+ const DEFAULT_CACHE_TTL_MS = 15 * 60 * 1000; // 15 minutes
15
+ const DEFAULT_TIMEOUT_MS = 10000; // 10 seconds
16
+ /**
17
+ * Validate UCP profile with network checks
18
+ */
19
+ async function validateNetwork(profile, options = {}) {
20
+ const issues = [];
21
+ const timeoutMs = options.timeoutMs || DEFAULT_TIMEOUT_MS;
22
+ const cacheTtlMs = options.cacheTtlMs || DEFAULT_CACHE_TTL_MS;
23
+ if (options.skipSchemaFetch) {
24
+ return issues;
25
+ }
26
+ const capabilities = (0, utils_js_1.normalizeCapabilities)(profile.ucp.capabilities);
27
+ // Validate each capability's schema
28
+ for (const cap of capabilities) {
29
+ const path = `$.ucp.capabilities["${cap.name}"]`;
30
+ if (cap.schema) {
31
+ const schemaIssues = await validateCapabilitySchema(cap.schema, cap.name, cap.version, path, timeoutMs, cacheTtlMs);
32
+ issues.push(...schemaIssues);
33
+ }
34
+ }
35
+ return issues;
36
+ }
37
+ /**
38
+ * Validate remote profile fetch
39
+ */
40
+ async function validateRemoteProfile(domain, options = {}) {
41
+ const issues = [];
42
+ const timeoutMs = options.timeoutMs || DEFAULT_TIMEOUT_MS;
43
+ // Try both /.well-known/ucp and /.well-known/ucp.json
44
+ const urls = [
45
+ `https://${domain}/.well-known/ucp`,
46
+ `https://${domain}/.well-known/ucp.json`,
47
+ ];
48
+ for (const profileUrl of urls) {
49
+ const result = await fetchProfileWithTimeout(profileUrl, timeoutMs);
50
+ if (!result.success) {
51
+ // Try next URL
52
+ continue;
53
+ }
54
+ // Verify it's an object with ucp field
55
+ if (!result.data || typeof result.data !== 'object') {
56
+ continue;
57
+ }
58
+ const profileData = result.data;
59
+ if (!profileData.ucp) {
60
+ continue;
61
+ }
62
+ return { profile: result.data, profileUrl, issues };
63
+ }
64
+ // All URLs failed
65
+ issues.push({
66
+ severity: 'error',
67
+ code: validation_js_1.ValidationErrorCodes.PROFILE_FETCH_FAILED,
68
+ path: '$.well-known/ucp',
69
+ message: 'No UCP profile found at /.well-known/ucp or /.well-known/ucp.json',
70
+ hint: 'Check that the profile is accessible and returns valid JSON',
71
+ });
72
+ return { profile: null, issues };
73
+ }
74
+ /**
75
+ * Validate a capability's schema (fetch and check self-describing)
76
+ */
77
+ async function validateCapabilitySchema(schemaUrl, expectedName, expectedVersion, basePath, timeoutMs, cacheTtlMs) {
78
+ const issues = [];
79
+ // Check cache first
80
+ const cached = getCachedSchema(schemaUrl, cacheTtlMs);
81
+ let schemaData;
82
+ if (cached) {
83
+ schemaData = cached;
84
+ }
85
+ else {
86
+ // Fetch schema
87
+ const result = await fetchWithTimeout(schemaUrl, timeoutMs);
88
+ if (!result.success) {
89
+ issues.push({
90
+ severity: 'warn',
91
+ code: validation_js_1.ValidationErrorCodes.SCHEMA_FETCH_FAILED,
92
+ path: `${basePath}.schema`,
93
+ message: `Failed to fetch schema from ${schemaUrl}`,
94
+ hint: result.error || 'Schema URL may be incorrect or temporarily unavailable',
95
+ });
96
+ return issues;
97
+ }
98
+ if (!result.data) {
99
+ issues.push({
100
+ severity: 'warn',
101
+ code: validation_js_1.ValidationErrorCodes.SCHEMA_FETCH_FAILED,
102
+ path: `${basePath}.schema`,
103
+ message: `Schema response is empty`,
104
+ });
105
+ return issues;
106
+ }
107
+ schemaData = result.data;
108
+ // Cache the schema
109
+ cacheSchema(schemaUrl, schemaData, result.etag, cacheTtlMs);
110
+ }
111
+ // Check if schema is self-describing
112
+ const selfDescribingIssues = validateSelfDescribingSchema(schemaData, expectedName, expectedVersion, basePath);
113
+ issues.push(...selfDescribingIssues);
114
+ return issues;
115
+ }
116
+ /**
117
+ * Validate schema is self-describing (contains name and version matching capability)
118
+ */
119
+ function validateSelfDescribingSchema(schema, expectedName, expectedVersion, basePath) {
120
+ const issues = [];
121
+ // Check for $id or name field
122
+ const schemaName = schema.$id || schema.name;
123
+ const schemaVersion = schema.version;
124
+ if (!schemaName && !schema.$id) {
125
+ issues.push({
126
+ severity: 'info',
127
+ code: validation_js_1.ValidationErrorCodes.SCHEMA_NOT_SELF_DESCRIBING,
128
+ path: `${basePath}.schema`,
129
+ message: 'Schema does not contain self-describing $id or name field',
130
+ hint: 'Consider adding $id field to schema for better discoverability',
131
+ });
132
+ }
133
+ // If schema has a name, check it contains the capability name
134
+ if (schemaName) {
135
+ // Extract capability name from schema $id if it's a URL
136
+ const nameFromId = extractNameFromSchemaId(schemaName);
137
+ if (nameFromId && !expectedName.includes(nameFromId) && !nameFromId.includes(expectedName.split('.').pop() || '')) {
138
+ issues.push({
139
+ severity: 'warn',
140
+ code: validation_js_1.ValidationErrorCodes.SCHEMA_NAME_MISMATCH,
141
+ path: `${basePath}.schema`,
142
+ message: `Schema name "${nameFromId}" may not match capability "${expectedName}"`,
143
+ });
144
+ }
145
+ }
146
+ // Check version if present
147
+ if (schemaVersion && schemaVersion !== expectedVersion) {
148
+ issues.push({
149
+ severity: 'info',
150
+ code: validation_js_1.ValidationErrorCodes.SCHEMA_VERSION_MISMATCH,
151
+ path: `${basePath}.schema`,
152
+ message: `Schema version "${schemaVersion}" differs from capability version "${expectedVersion}"`,
153
+ hint: 'Ensure schema and capability versions are aligned',
154
+ });
155
+ }
156
+ return issues;
157
+ }
158
+ /**
159
+ * Extract capability name from schema $id URL
160
+ */
161
+ function extractNameFromSchemaId(schemaId) {
162
+ try {
163
+ const url = new URL(schemaId);
164
+ // Extract last path segment without .json extension
165
+ const pathParts = url.pathname.split('/').filter(Boolean);
166
+ const lastPart = pathParts[pathParts.length - 1] || '';
167
+ return lastPart.replace('.json', '');
168
+ }
169
+ catch {
170
+ // Not a URL, return as-is
171
+ return schemaId;
172
+ }
173
+ }
174
+ /**
175
+ * Fetch profile URL with timeout, checking for HTML responses
176
+ */
177
+ async function fetchProfileWithTimeout(url, timeoutMs) {
178
+ const controller = new AbortController();
179
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
180
+ try {
181
+ const response = await fetch(url, {
182
+ signal: controller.signal,
183
+ headers: {
184
+ 'Accept': 'application/json',
185
+ 'User-Agent': 'UCP-Profile-Validator/1.0',
186
+ },
187
+ });
188
+ clearTimeout(timeoutId);
189
+ if (!response.ok) {
190
+ return {
191
+ success: false,
192
+ error: `HTTP ${response.status}: ${response.statusText}`,
193
+ statusCode: response.status,
194
+ };
195
+ }
196
+ const text = await response.text();
197
+ // Check if response looks like JSON (not HTML)
198
+ if (text.trim().startsWith('<')) {
199
+ return {
200
+ success: false,
201
+ error: 'Response is HTML, not JSON',
202
+ };
203
+ }
204
+ const data = JSON.parse(text);
205
+ const etag = response.headers.get('etag') || undefined;
206
+ return {
207
+ success: true,
208
+ data,
209
+ statusCode: response.status,
210
+ etag,
211
+ };
212
+ }
213
+ catch (error) {
214
+ clearTimeout(timeoutId);
215
+ if (error instanceof Error) {
216
+ if (error.name === 'AbortError') {
217
+ return {
218
+ success: false,
219
+ error: `Request timed out after ${timeoutMs}ms`,
220
+ };
221
+ }
222
+ return {
223
+ success: false,
224
+ error: error.message,
225
+ };
226
+ }
227
+ return {
228
+ success: false,
229
+ error: 'Unknown error occurred',
230
+ };
231
+ }
232
+ }
233
+ /**
234
+ * Fetch URL with timeout
235
+ */
236
+ async function fetchWithTimeout(url, timeoutMs) {
237
+ const controller = new AbortController();
238
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
239
+ try {
240
+ const response = await fetch(url, {
241
+ signal: controller.signal,
242
+ headers: {
243
+ 'Accept': 'application/json',
244
+ 'User-Agent': 'UCP-Profile-Validator/1.0',
245
+ },
246
+ });
247
+ clearTimeout(timeoutId);
248
+ if (!response.ok) {
249
+ return {
250
+ success: false,
251
+ error: `HTTP ${response.status}: ${response.statusText}`,
252
+ statusCode: response.status,
253
+ };
254
+ }
255
+ const data = await response.json();
256
+ const etag = response.headers.get('etag') || undefined;
257
+ return {
258
+ success: true,
259
+ data,
260
+ statusCode: response.status,
261
+ etag,
262
+ };
263
+ }
264
+ catch (error) {
265
+ clearTimeout(timeoutId);
266
+ if (error instanceof Error) {
267
+ if (error.name === 'AbortError') {
268
+ return {
269
+ success: false,
270
+ error: `Request timed out after ${timeoutMs}ms`,
271
+ };
272
+ }
273
+ return {
274
+ success: false,
275
+ error: error.message,
276
+ };
277
+ }
278
+ return {
279
+ success: false,
280
+ error: 'Unknown error occurred',
281
+ };
282
+ }
283
+ }
284
+ /**
285
+ * Get cached schema if valid
286
+ */
287
+ function getCachedSchema(url, cacheTtlMs) {
288
+ const cached = schemaCache.get(url);
289
+ if (!cached) {
290
+ return null;
291
+ }
292
+ const now = new Date().toISOString();
293
+ if (cached.expiresAt < now) {
294
+ schemaCache.delete(url);
295
+ return null;
296
+ }
297
+ return cached.body;
298
+ }
299
+ /**
300
+ * Cache a schema
301
+ */
302
+ function cacheSchema(url, body, etag, cacheTtlMs) {
303
+ const now = new Date();
304
+ const expiresAt = new Date(now.getTime() + cacheTtlMs);
305
+ schemaCache.set(url, {
306
+ url,
307
+ etag,
308
+ fetchedAt: now.toISOString(),
309
+ body,
310
+ expiresAt: expiresAt.toISOString(),
311
+ });
312
+ }
313
+ /**
314
+ * Clear the schema cache
315
+ */
316
+ function clearSchemaCache() {
317
+ schemaCache.clear();
318
+ }
319
+ //# sourceMappingURL=network-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-validator.js","sourceRoot":"","sources":["../../src/validator/network-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * UCP Rules Validator
3
+ * Validates UCP-specific business rules (no network calls)
4
+ *
5
+ * Updated per UCP Specification 2026-01-11:
6
+ * - Namespace-to-origin binding validation (security requirement)
7
+ * - Extension chain validation
8
+ * - Transport-specific field validation (schema, endpoint requirements)
9
+ * - HTTPS endpoint validation
10
+ *
11
+ * Note: signing_keys and payment.handlers are now validated in structural-validator.ts
12
+ */
13
+ import type { UcpProfile } from '../types/ucp-profile.js';
14
+ import type { ValidationIssue } from '../types/validation.js';
15
+ /**
16
+ * Validate UCP business rules
17
+ */
18
+ export declare function validateRules(profile: UcpProfile): ValidationIssue[];
19
+ //# sourceMappingURL=rules-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules-validator.d.ts","sourceRoot":"","sources":["../../src/validator/rules-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,yBAAyB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAK9D;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,eAAe,EAAE,CAgBpE"}