@ixo/decision-oracle 0.0.0-stage → 0.2.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 (1118) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +794 -2
  3. package/dist/act.d.ts +87 -0
  4. package/dist/act.d.ts.map +1 -0
  5. package/dist/act.js +20 -0
  6. package/dist/act.js.map +1 -0
  7. package/dist/app.d.ts +22 -0
  8. package/dist/app.d.ts.map +1 -0
  9. package/dist/app.js +128 -0
  10. package/dist/app.js.map +1 -0
  11. package/dist/c2pa.wasm +0 -0
  12. package/dist/cli/commands/api.d.ts +50 -0
  13. package/dist/cli/commands/api.d.ts.map +1 -0
  14. package/dist/cli/commands/api.js +737 -0
  15. package/dist/cli/commands/api.js.map +1 -0
  16. package/dist/cli/commands/create-collection.d.ts +40 -0
  17. package/dist/cli/commands/create-collection.d.ts.map +1 -0
  18. package/dist/cli/commands/create-collection.js +318 -0
  19. package/dist/cli/commands/create-collection.js.map +1 -0
  20. package/dist/cli/commands/create-deed.d.ts +31 -0
  21. package/dist/cli/commands/create-deed.d.ts.map +1 -0
  22. package/dist/cli/commands/create-deed.js +208 -0
  23. package/dist/cli/commands/create-deed.js.map +1 -0
  24. package/dist/cli/commands/delegation.d.ts +26 -0
  25. package/dist/cli/commands/delegation.d.ts.map +1 -0
  26. package/dist/cli/commands/delegation.js +162 -0
  27. package/dist/cli/commands/delegation.js.map +1 -0
  28. package/dist/cli/commands/derive.d.ts +22 -0
  29. package/dist/cli/commands/derive.d.ts.map +1 -0
  30. package/dist/cli/commands/derive.js +53 -0
  31. package/dist/cli/commands/derive.js.map +1 -0
  32. package/dist/cli/commands/engine.d.ts +25 -0
  33. package/dist/cli/commands/engine.d.ts.map +1 -0
  34. package/dist/cli/commands/engine.js +107 -0
  35. package/dist/cli/commands/engine.js.map +1 -0
  36. package/dist/cli/commands/erase.d.ts +17 -0
  37. package/dist/cli/commands/erase.d.ts.map +1 -0
  38. package/dist/cli/commands/erase.js +117 -0
  39. package/dist/cli/commands/erase.js.map +1 -0
  40. package/dist/cli/commands/facts-run.d.ts +30 -0
  41. package/dist/cli/commands/facts-run.d.ts.map +1 -0
  42. package/dist/cli/commands/facts-run.js +409 -0
  43. package/dist/cli/commands/facts-run.js.map +1 -0
  44. package/dist/cli/commands/facts-scaffold.d.ts +22 -0
  45. package/dist/cli/commands/facts-scaffold.d.ts.map +1 -0
  46. package/dist/cli/commands/facts-scaffold.js +208 -0
  47. package/dist/cli/commands/facts-scaffold.js.map +1 -0
  48. package/dist/cli/commands/init.d.ts +18 -0
  49. package/dist/cli/commands/init.d.ts.map +1 -0
  50. package/dist/cli/commands/init.js +34 -0
  51. package/dist/cli/commands/init.js.map +1 -0
  52. package/dist/cli/commands/login.d.ts +9 -0
  53. package/dist/cli/commands/login.d.ts.map +1 -0
  54. package/dist/cli/commands/login.js +16 -0
  55. package/dist/cli/commands/login.js.map +1 -0
  56. package/dist/cli/commands/logout.d.ts +10 -0
  57. package/dist/cli/commands/logout.d.ts.map +1 -0
  58. package/dist/cli/commands/logout.js +28 -0
  59. package/dist/cli/commands/logout.js.map +1 -0
  60. package/dist/cli/commands/manifest.d.ts +12 -0
  61. package/dist/cli/commands/manifest.d.ts.map +1 -0
  62. package/dist/cli/commands/manifest.js +48 -0
  63. package/dist/cli/commands/manifest.js.map +1 -0
  64. package/dist/cli/commands/oracle-init.d.ts +48 -0
  65. package/dist/cli/commands/oracle-init.d.ts.map +1 -0
  66. package/dist/cli/commands/oracle-init.js +1122 -0
  67. package/dist/cli/commands/oracle-init.js.map +1 -0
  68. package/dist/cli/commands/org.d.ts +28 -0
  69. package/dist/cli/commands/org.d.ts.map +1 -0
  70. package/dist/cli/commands/org.js +309 -0
  71. package/dist/cli/commands/org.js.map +1 -0
  72. package/dist/cli/commands/protocol-review.d.ts +20 -0
  73. package/dist/cli/commands/protocol-review.d.ts.map +1 -0
  74. package/dist/cli/commands/protocol-review.js +162 -0
  75. package/dist/cli/commands/protocol-review.js.map +1 -0
  76. package/dist/cli/commands/publish-protocol.d.ts +43 -0
  77. package/dist/cli/commands/publish-protocol.d.ts.map +1 -0
  78. package/dist/cli/commands/publish-protocol.js +345 -0
  79. package/dist/cli/commands/publish-protocol.js.map +1 -0
  80. package/dist/cli/commands/register.d.ts +16 -0
  81. package/dist/cli/commands/register.d.ts.map +1 -0
  82. package/dist/cli/commands/register.js +54 -0
  83. package/dist/cli/commands/register.js.map +1 -0
  84. package/dist/cli/commands/relink.d.ts +11 -0
  85. package/dist/cli/commands/relink.d.ts.map +1 -0
  86. package/dist/cli/commands/relink.js +36 -0
  87. package/dist/cli/commands/relink.js.map +1 -0
  88. package/dist/cli/commands/rubric-fetch-form.d.ts +16 -0
  89. package/dist/cli/commands/rubric-fetch-form.d.ts.map +1 -0
  90. package/dist/cli/commands/rubric-fetch-form.js +83 -0
  91. package/dist/cli/commands/rubric-fetch-form.js.map +1 -0
  92. package/dist/cli/commands/rubric-validate.d.ts +72 -0
  93. package/dist/cli/commands/rubric-validate.d.ts.map +1 -0
  94. package/dist/cli/commands/rubric-validate.js +163 -0
  95. package/dist/cli/commands/rubric-validate.js.map +1 -0
  96. package/dist/cli/commands/scan.d.ts +13 -0
  97. package/dist/cli/commands/scan.d.ts.map +1 -0
  98. package/dist/cli/commands/scan.js +39 -0
  99. package/dist/cli/commands/scan.js.map +1 -0
  100. package/dist/cli/commands/skills.d.ts +11 -0
  101. package/dist/cli/commands/skills.d.ts.map +1 -0
  102. package/dist/cli/commands/skills.js +19 -0
  103. package/dist/cli/commands/skills.js.map +1 -0
  104. package/dist/cli/commands/submit-claim.d.ts +25 -0
  105. package/dist/cli/commands/submit-claim.d.ts.map +1 -0
  106. package/dist/cli/commands/submit-claim.js +155 -0
  107. package/dist/cli/commands/submit-claim.js.map +1 -0
  108. package/dist/cli/index.d.ts +15 -0
  109. package/dist/cli/index.d.ts.map +1 -0
  110. package/dist/cli/index.js +206 -0
  111. package/dist/cli/index.js.map +1 -0
  112. package/dist/cli/lib/agent-card-schema.d.ts +8 -0
  113. package/dist/cli/lib/agent-card-schema.d.ts.map +1 -0
  114. package/dist/cli/lib/agent-card-schema.js +169 -0
  115. package/dist/cli/lib/agent-card-schema.js.map +1 -0
  116. package/dist/cli/lib/ai-rest.d.ts +12 -0
  117. package/dist/cli/lib/ai-rest.d.ts.map +1 -0
  118. package/dist/cli/lib/ai-rest.js +36 -0
  119. package/dist/cli/lib/ai-rest.js.map +1 -0
  120. package/dist/cli/lib/args.d.ts +33 -0
  121. package/dist/cli/lib/args.d.ts.map +1 -0
  122. package/dist/cli/lib/args.js +24 -0
  123. package/dist/cli/lib/args.js.map +1 -0
  124. package/dist/cli/lib/authhub.d.ts +7 -0
  125. package/dist/cli/lib/authhub.d.ts.map +1 -0
  126. package/dist/cli/lib/authhub.js +210 -0
  127. package/dist/cli/lib/authhub.js.map +1 -0
  128. package/dist/cli/lib/chain.d.ts +264 -0
  129. package/dist/cli/lib/chain.d.ts.map +1 -0
  130. package/dist/cli/lib/chain.js +584 -0
  131. package/dist/cli/lib/chain.js.map +1 -0
  132. package/dist/cli/lib/devvars.d.ts +59 -0
  133. package/dist/cli/lib/devvars.d.ts.map +1 -0
  134. package/dist/cli/lib/devvars.js +206 -0
  135. package/dist/cli/lib/devvars.js.map +1 -0
  136. package/dist/cli/lib/engine.d.ts +54 -0
  137. package/dist/cli/lib/engine.d.ts.map +1 -0
  138. package/dist/cli/lib/engine.js +112 -0
  139. package/dist/cli/lib/engine.js.map +1 -0
  140. package/dist/cli/lib/identity-cards.d.ts +188 -0
  141. package/dist/cli/lib/identity-cards.d.ts.map +1 -0
  142. package/dist/cli/lib/identity-cards.js +261 -0
  143. package/dist/cli/lib/identity-cards.js.map +1 -0
  144. package/dist/cli/lib/matrix-account.d.ts +79 -0
  145. package/dist/cli/lib/matrix-account.d.ts.map +1 -0
  146. package/dist/cli/lib/matrix-account.js +228 -0
  147. package/dist/cli/lib/matrix-account.js.map +1 -0
  148. package/dist/cli/lib/oracle-account.d.ts +108 -0
  149. package/dist/cli/lib/oracle-account.d.ts.map +1 -0
  150. package/dist/cli/lib/oracle-account.js +207 -0
  151. package/dist/cli/lib/oracle-account.js.map +1 -0
  152. package/dist/cli/lib/project.d.ts +22 -0
  153. package/dist/cli/lib/project.d.ts.map +1 -0
  154. package/dist/cli/lib/project.js +62 -0
  155. package/dist/cli/lib/project.js.map +1 -0
  156. package/dist/cli/lib/session.d.ts +109 -0
  157. package/dist/cli/lib/session.d.ts.map +1 -0
  158. package/dist/cli/lib/session.js +354 -0
  159. package/dist/cli/lib/session.js.map +1 -0
  160. package/dist/cli/lib/workorder.d.ts +57 -0
  161. package/dist/cli/lib/workorder.d.ts.map +1 -0
  162. package/dist/cli/lib/workorder.js +101 -0
  163. package/dist/cli/lib/workorder.js.map +1 -0
  164. package/dist/config.d.ts +221 -0
  165. package/dist/config.d.ts.map +1 -0
  166. package/dist/config.js +431 -0
  167. package/dist/config.js.map +1 -0
  168. package/dist/context.d.ts +88 -0
  169. package/dist/context.d.ts.map +1 -0
  170. package/dist/context.js +9 -0
  171. package/dist/context.js.map +1 -0
  172. package/dist/contracts/api.d.ts +3367 -0
  173. package/dist/contracts/api.d.ts.map +1 -0
  174. package/dist/contracts/api.js +1303 -0
  175. package/dist/contracts/api.js.map +1 -0
  176. package/dist/contracts/capabilities.d.ts +126 -0
  177. package/dist/contracts/capabilities.d.ts.map +1 -0
  178. package/dist/contracts/capabilities.js +164 -0
  179. package/dist/contracts/capabilities.js.map +1 -0
  180. package/dist/contracts/claim-source.d.ts +98 -0
  181. package/dist/contracts/claim-source.d.ts.map +1 -0
  182. package/dist/contracts/claim-source.js +17 -0
  183. package/dist/contracts/claim-source.js.map +1 -0
  184. package/dist/contracts/errors.d.ts +150 -0
  185. package/dist/contracts/errors.d.ts.map +1 -0
  186. package/dist/contracts/errors.js +121 -0
  187. package/dist/contracts/errors.js.map +1 -0
  188. package/dist/contracts/index.d.ts +15 -0
  189. package/dist/contracts/index.d.ts.map +1 -0
  190. package/dist/contracts/index.js +11 -0
  191. package/dist/contracts/index.js.map +1 -0
  192. package/dist/contracts/payment-gate.d.ts +129 -0
  193. package/dist/contracts/payment-gate.d.ts.map +1 -0
  194. package/dist/contracts/payment-gate.js +24 -0
  195. package/dist/contracts/payment-gate.js.map +1 -0
  196. package/dist/contracts/start-api-claim.d.ts +90 -0
  197. package/dist/contracts/start-api-claim.d.ts.map +1 -0
  198. package/dist/contracts/start-api-claim.js +22 -0
  199. package/dist/contracts/start-api-claim.js.map +1 -0
  200. package/dist/contracts/webhooks.d.ts +1487 -0
  201. package/dist/contracts/webhooks.d.ts.map +1 -0
  202. package/dist/contracts/webhooks.js +71 -0
  203. package/dist/contracts/webhooks.js.map +1 -0
  204. package/dist/contracts/work-order.d.ts +29 -0
  205. package/dist/contracts/work-order.d.ts.map +1 -0
  206. package/dist/contracts/work-order.js +12 -0
  207. package/dist/contracts/work-order.js.map +1 -0
  208. package/dist/cron/ai-cost.d.ts +29 -0
  209. package/dist/cron/ai-cost.d.ts.map +1 -0
  210. package/dist/cron/ai-cost.js +80 -0
  211. package/dist/cron/ai-cost.js.map +1 -0
  212. package/dist/cron/api-lane.d.ts +39 -0
  213. package/dist/cron/api-lane.d.ts.map +1 -0
  214. package/dist/cron/api-lane.js +203 -0
  215. package/dist/cron/api-lane.js.map +1 -0
  216. package/dist/cron/backlog.d.ts +50 -0
  217. package/dist/cron/backlog.d.ts.map +1 -0
  218. package/dist/cron/backlog.js +115 -0
  219. package/dist/cron/backlog.js.map +1 -0
  220. package/dist/cron/billing.d.ts +11 -0
  221. package/dist/cron/billing.d.ts.map +1 -0
  222. package/dist/cron/billing.js +69 -0
  223. package/dist/cron/billing.js.map +1 -0
  224. package/dist/cron/collection.d.ts +50 -0
  225. package/dist/cron/collection.d.ts.map +1 -0
  226. package/dist/cron/collection.js +118 -0
  227. package/dist/cron/collection.js.map +1 -0
  228. package/dist/cron/funding.d.ts +16 -0
  229. package/dist/cron/funding.d.ts.map +1 -0
  230. package/dist/cron/funding.js +262 -0
  231. package/dist/cron/funding.js.map +1 -0
  232. package/dist/cron/payer-billing.d.ts +38 -0
  233. package/dist/cron/payer-billing.d.ts.map +1 -0
  234. package/dist/cron/payer-billing.js +119 -0
  235. package/dist/cron/payer-billing.js.map +1 -0
  236. package/dist/cron/scan.d.ts +43 -0
  237. package/dist/cron/scan.d.ts.map +1 -0
  238. package/dist/cron/scan.js +250 -0
  239. package/dist/cron/scan.js.map +1 -0
  240. package/dist/db/client.d.ts +14 -0
  241. package/dist/db/client.d.ts.map +1 -0
  242. package/dist/db/client.js +14 -0
  243. package/dist/db/client.js.map +1 -0
  244. package/dist/db/index.d.ts +7 -0
  245. package/dist/db/index.d.ts.map +1 -0
  246. package/dist/db/index.js +7 -0
  247. package/dist/db/index.js.map +1 -0
  248. package/dist/db/schema.d.ts +6738 -0
  249. package/dist/db/schema.d.ts.map +1 -0
  250. package/dist/db/schema.js +1433 -0
  251. package/dist/db/schema.js.map +1 -0
  252. package/dist/define-oracle.d.ts +32 -0
  253. package/dist/define-oracle.d.ts.map +1 -0
  254. package/dist/define-oracle.js +80 -0
  255. package/dist/define-oracle.js.map +1 -0
  256. package/dist/dev-oracle.d.ts +9 -0
  257. package/dist/dev-oracle.d.ts.map +1 -0
  258. package/dist/dev-oracle.js +19 -0
  259. package/dist/dev-oracle.js.map +1 -0
  260. package/dist/dev-worker.d.ts +10 -0
  261. package/dist/dev-worker.d.ts.map +1 -0
  262. package/dist/dev-worker.js +12 -0
  263. package/dist/dev-worker.js.map +1 -0
  264. package/dist/env.d.ts +146 -0
  265. package/dist/env.d.ts.map +1 -0
  266. package/dist/env.js +10 -0
  267. package/dist/env.js.map +1 -0
  268. package/dist/facts/exif.d.ts +43 -0
  269. package/dist/facts/exif.d.ts.map +1 -0
  270. package/dist/facts/exif.js +224 -0
  271. package/dist/facts/exif.js.map +1 -0
  272. package/dist/facts/fact.d.ts +62 -0
  273. package/dist/facts/fact.d.ts.map +1 -0
  274. package/dist/facts/fact.js +105 -0
  275. package/dist/facts/fact.js.map +1 -0
  276. package/dist/facts/geo.d.ts +55 -0
  277. package/dist/facts/geo.d.ts.map +1 -0
  278. package/dist/facts/geo.js +267 -0
  279. package/dist/facts/geo.js.map +1 -0
  280. package/dist/facts/index.d.ts +31 -0
  281. package/dist/facts/index.d.ts.map +1 -0
  282. package/dist/facts/index.js +27 -0
  283. package/dist/facts/index.js.map +1 -0
  284. package/dist/facts/linked-doc.d.ts +60 -0
  285. package/dist/facts/linked-doc.d.ts.map +1 -0
  286. package/dist/facts/linked-doc.js +101 -0
  287. package/dist/facts/linked-doc.js.map +1 -0
  288. package/dist/facts/types.d.ts +278 -0
  289. package/dist/facts/types.d.ts.map +1 -0
  290. package/dist/facts/types.js +19 -0
  291. package/dist/facts/types.js.map +1 -0
  292. package/dist/index.d.ts +25 -0
  293. package/dist/index.d.ts.map +1 -0
  294. package/dist/index.js +19 -0
  295. package/dist/index.js.map +1 -0
  296. package/dist/lib/api-lane/accept.d.ts +29 -0
  297. package/dist/lib/api-lane/accept.d.ts.map +1 -0
  298. package/dist/lib/api-lane/accept.js +218 -0
  299. package/dist/lib/api-lane/accept.js.map +1 -0
  300. package/dist/lib/api-lane/claim-list.d.ts +44 -0
  301. package/dist/lib/api-lane/claim-list.d.ts.map +1 -0
  302. package/dist/lib/api-lane/claim-list.js +92 -0
  303. package/dist/lib/api-lane/claim-list.js.map +1 -0
  304. package/dist/lib/api-lane/company.d.ts +56 -0
  305. package/dist/lib/api-lane/company.d.ts.map +1 -0
  306. package/dist/lib/api-lane/company.js +103 -0
  307. package/dist/lib/api-lane/company.js.map +1 -0
  308. package/dist/lib/api-lane/events.d.ts +21 -0
  309. package/dist/lib/api-lane/events.d.ts.map +1 -0
  310. package/dist/lib/api-lane/events.js +111 -0
  311. package/dist/lib/api-lane/events.js.map +1 -0
  312. package/dist/lib/api-lane/ids.d.ts +39 -0
  313. package/dist/lib/api-lane/ids.d.ts.map +1 -0
  314. package/dist/lib/api-lane/ids.js +78 -0
  315. package/dist/lib/api-lane/ids.js.map +1 -0
  316. package/dist/lib/api-lane/index.d.ts +16 -0
  317. package/dist/lib/api-lane/index.d.ts.map +1 -0
  318. package/dist/lib/api-lane/index.js +16 -0
  319. package/dist/lib/api-lane/index.js.map +1 -0
  320. package/dist/lib/api-lane/linked.d.ts +264 -0
  321. package/dist/lib/api-lane/linked.d.ts.map +1 -0
  322. package/dist/lib/api-lane/linked.js +272 -0
  323. package/dist/lib/api-lane/linked.js.map +1 -0
  324. package/dist/lib/api-lane/media-type.d.ts +15 -0
  325. package/dist/lib/api-lane/media-type.d.ts.map +1 -0
  326. package/dist/lib/api-lane/media-type.js +73 -0
  327. package/dist/lib/api-lane/media-type.js.map +1 -0
  328. package/dist/lib/api-lane/member-emails.d.ts +83 -0
  329. package/dist/lib/api-lane/member-emails.d.ts.map +1 -0
  330. package/dist/lib/api-lane/member-emails.js +213 -0
  331. package/dist/lib/api-lane/member-emails.js.map +1 -0
  332. package/dist/lib/api-lane/members.d.ts +42 -0
  333. package/dist/lib/api-lane/members.d.ts.map +1 -0
  334. package/dist/lib/api-lane/members.js +75 -0
  335. package/dist/lib/api-lane/members.js.map +1 -0
  336. package/dist/lib/api-lane/notify.d.ts +47 -0
  337. package/dist/lib/api-lane/notify.d.ts.map +1 -0
  338. package/dist/lib/api-lane/notify.js +240 -0
  339. package/dist/lib/api-lane/notify.js.map +1 -0
  340. package/dist/lib/api-lane/pause.d.ts +41 -0
  341. package/dist/lib/api-lane/pause.d.ts.map +1 -0
  342. package/dist/lib/api-lane/pause.js +155 -0
  343. package/dist/lib/api-lane/pause.js.map +1 -0
  344. package/dist/lib/api-lane/record.d.ts +76 -0
  345. package/dist/lib/api-lane/record.d.ts.map +1 -0
  346. package/dist/lib/api-lane/record.js +337 -0
  347. package/dist/lib/api-lane/record.js.map +1 -0
  348. package/dist/lib/api-lane/retention.d.ts +43 -0
  349. package/dist/lib/api-lane/retention.d.ts.map +1 -0
  350. package/dist/lib/api-lane/retention.js +176 -0
  351. package/dist/lib/api-lane/retention.js.map +1 -0
  352. package/dist/lib/api-lane/review.d.ts +76 -0
  353. package/dist/lib/api-lane/review.d.ts.map +1 -0
  354. package/dist/lib/api-lane/review.js +355 -0
  355. package/dist/lib/api-lane/review.js.map +1 -0
  356. package/dist/lib/api-lane/reviewers.d.ts +109 -0
  357. package/dist/lib/api-lane/reviewers.d.ts.map +1 -0
  358. package/dist/lib/api-lane/reviewers.js +755 -0
  359. package/dist/lib/api-lane/reviewers.js.map +1 -0
  360. package/dist/lib/api-lane/source-delete.d.ts +16 -0
  361. package/dist/lib/api-lane/source-delete.d.ts.map +1 -0
  362. package/dist/lib/api-lane/source-delete.js +50 -0
  363. package/dist/lib/api-lane/source-delete.js.map +1 -0
  364. package/dist/lib/api-lane/source.d.ts +19 -0
  365. package/dist/lib/api-lane/source.d.ts.map +1 -0
  366. package/dist/lib/api-lane/source.js +226 -0
  367. package/dist/lib/api-lane/source.js.map +1 -0
  368. package/dist/lib/api-lane/submitter.d.ts +22 -0
  369. package/dist/lib/api-lane/submitter.d.ts.map +1 -0
  370. package/dist/lib/api-lane/submitter.js +34 -0
  371. package/dist/lib/api-lane/submitter.js.map +1 -0
  372. package/dist/lib/api-lane/timeline.d.ts +20 -0
  373. package/dist/lib/api-lane/timeline.d.ts.map +1 -0
  374. package/dist/lib/api-lane/timeline.js +23 -0
  375. package/dist/lib/api-lane/timeline.js.map +1 -0
  376. package/dist/lib/api-lane/webhook-crypto.d.ts +44 -0
  377. package/dist/lib/api-lane/webhook-crypto.d.ts.map +1 -0
  378. package/dist/lib/api-lane/webhook-crypto.js +103 -0
  379. package/dist/lib/api-lane/webhook-crypto.js.map +1 -0
  380. package/dist/lib/api-lane/webhooks.d.ts +117 -0
  381. package/dist/lib/api-lane/webhooks.d.ts.map +1 -0
  382. package/dist/lib/api-lane/webhooks.js +503 -0
  383. package/dist/lib/api-lane/webhooks.js.map +1 -0
  384. package/dist/lib/archive.d.ts +64 -0
  385. package/dist/lib/archive.d.ts.map +1 -0
  386. package/dist/lib/archive.js +305 -0
  387. package/dist/lib/archive.js.map +1 -0
  388. package/dist/lib/bech32.d.ts +8 -0
  389. package/dist/lib/bech32.d.ts.map +1 -0
  390. package/dist/lib/bech32.js +39 -0
  391. package/dist/lib/bech32.js.map +1 -0
  392. package/dist/lib/claim-erase.d.ts +22 -0
  393. package/dist/lib/claim-erase.d.ts.map +1 -0
  394. package/dist/lib/claim-erase.js +44 -0
  395. package/dist/lib/claim-erase.js.map +1 -0
  396. package/dist/lib/cursor.d.ts +11 -0
  397. package/dist/lib/cursor.d.ts.map +1 -0
  398. package/dist/lib/cursor.js +20 -0
  399. package/dist/lib/cursor.js.map +1 -0
  400. package/dist/lib/email/send.d.ts +43 -0
  401. package/dist/lib/email/send.d.ts.map +1 -0
  402. package/dist/lib/email/send.js +71 -0
  403. package/dist/lib/email/send.js.map +1 -0
  404. package/dist/lib/email/template.d.ts +217 -0
  405. package/dist/lib/email/template.d.ts.map +1 -0
  406. package/dist/lib/email/template.js +713 -0
  407. package/dist/lib/email/template.js.map +1 -0
  408. package/dist/lib/engine/adr36.d.ts +56 -0
  409. package/dist/lib/engine/adr36.d.ts.map +1 -0
  410. package/dist/lib/engine/adr36.js +76 -0
  411. package/dist/lib/engine/adr36.js.map +1 -0
  412. package/dist/lib/engine/client.d.ts +162 -0
  413. package/dist/lib/engine/client.d.ts.map +1 -0
  414. package/dist/lib/engine/client.js +473 -0
  415. package/dist/lib/engine/client.js.map +1 -0
  416. package/dist/lib/engine/types.d.ts +1356 -0
  417. package/dist/lib/engine/types.d.ts.map +1 -0
  418. package/dist/lib/engine/types.js +562 -0
  419. package/dist/lib/engine/types.js.map +1 -0
  420. package/dist/lib/errors.d.ts +73 -0
  421. package/dist/lib/errors.d.ts.map +1 -0
  422. package/dist/lib/errors.js +96 -0
  423. package/dist/lib/errors.js.map +1 -0
  424. package/dist/lib/facts/builder.d.ts +88 -0
  425. package/dist/lib/facts/builder.d.ts.map +1 -0
  426. package/dist/lib/facts/builder.js +239 -0
  427. package/dist/lib/facts/builder.js.map +1 -0
  428. package/dist/lib/facts/ctx.d.ts +34 -0
  429. package/dist/lib/facts/ctx.d.ts.map +1 -0
  430. package/dist/lib/facts/ctx.js +51 -0
  431. package/dist/lib/facts/ctx.js.map +1 -0
  432. package/dist/lib/facts/expected.d.ts +23 -0
  433. package/dist/lib/facts/expected.d.ts.map +1 -0
  434. package/dist/lib/facts/expected.js +16 -0
  435. package/dist/lib/facts/expected.js.map +1 -0
  436. package/dist/lib/facts/fact-cache.d.ts +469 -0
  437. package/dist/lib/facts/fact-cache.d.ts.map +1 -0
  438. package/dist/lib/facts/fact-cache.js +52 -0
  439. package/dist/lib/facts/fact-cache.js.map +1 -0
  440. package/dist/lib/facts/factset.d.ts +608 -0
  441. package/dist/lib/facts/factset.d.ts.map +1 -0
  442. package/dist/lib/facts/factset.js +226 -0
  443. package/dist/lib/facts/factset.js.map +1 -0
  444. package/dist/lib/facts/producer.d.ts +190 -0
  445. package/dist/lib/facts/producer.d.ts.map +1 -0
  446. package/dist/lib/facts/producer.js +15 -0
  447. package/dist/lib/facts/producer.js.map +1 -0
  448. package/dist/lib/facts/runner.d.ts +111 -0
  449. package/dist/lib/facts/runner.d.ts.map +1 -0
  450. package/dist/lib/facts/runner.js +438 -0
  451. package/dist/lib/facts/runner.js.map +1 -0
  452. package/dist/lib/facts/stock/ai-check.d.ts +100 -0
  453. package/dist/lib/facts/stock/ai-check.d.ts.map +1 -0
  454. package/dist/lib/facts/stock/ai-check.js +526 -0
  455. package/dist/lib/facts/stock/ai-check.js.map +1 -0
  456. package/dist/lib/facts/stock/ai-inputs.d.ts +104 -0
  457. package/dist/lib/facts/stock/ai-inputs.d.ts.map +1 -0
  458. package/dist/lib/facts/stock/ai-inputs.js +332 -0
  459. package/dist/lib/facts/stock/ai-inputs.js.map +1 -0
  460. package/dist/lib/facts/stock/ai-provider.d.ts +105 -0
  461. package/dist/lib/facts/stock/ai-provider.d.ts.map +1 -0
  462. package/dist/lib/facts/stock/ai-provider.js +250 -0
  463. package/dist/lib/facts/stock/ai-provider.js.map +1 -0
  464. package/dist/lib/facts/stock/ai-unique.d.ts +85 -0
  465. package/dist/lib/facts/stock/ai-unique.d.ts.map +1 -0
  466. package/dist/lib/facts/stock/ai-unique.js +208 -0
  467. package/dist/lib/facts/stock/ai-unique.js.map +1 -0
  468. package/dist/lib/facts/stock/archive.d.ts +63 -0
  469. package/dist/lib/facts/stock/archive.d.ts.map +1 -0
  470. package/dist/lib/facts/stock/archive.js +349 -0
  471. package/dist/lib/facts/stock/archive.js.map +1 -0
  472. package/dist/lib/facts/stock/c2pa-trust-list.d.ts +16 -0
  473. package/dist/lib/facts/stock/c2pa-trust-list.d.ts.map +1 -0
  474. package/dist/lib/facts/stock/c2pa-trust-list.js +637 -0
  475. package/dist/lib/facts/stock/c2pa-trust-list.js.map +1 -0
  476. package/dist/lib/facts/stock/c2pa.d.ts +56 -0
  477. package/dist/lib/facts/stock/c2pa.d.ts.map +1 -0
  478. package/dist/lib/facts/stock/c2pa.js +234 -0
  479. package/dist/lib/facts/stock/c2pa.js.map +1 -0
  480. package/dist/lib/facts/stock/call.d.ts +91 -0
  481. package/dist/lib/facts/stock/call.d.ts.map +1 -0
  482. package/dist/lib/facts/stock/call.js +281 -0
  483. package/dist/lib/facts/stock/call.js.map +1 -0
  484. package/dist/lib/facts/stock/capability.d.ts +39 -0
  485. package/dist/lib/facts/stock/capability.d.ts.map +1 -0
  486. package/dist/lib/facts/stock/capability.js +59 -0
  487. package/dist/lib/facts/stock/capability.js.map +1 -0
  488. package/dist/lib/facts/stock/ext-source.d.ts +51 -0
  489. package/dist/lib/facts/stock/ext-source.d.ts.map +1 -0
  490. package/dist/lib/facts/stock/ext-source.js +201 -0
  491. package/dist/lib/facts/stock/ext-source.js.map +1 -0
  492. package/dist/lib/facts/stock/frequency-fact.d.ts +59 -0
  493. package/dist/lib/facts/stock/frequency-fact.d.ts.map +1 -0
  494. package/dist/lib/facts/stock/frequency-fact.js +86 -0
  495. package/dist/lib/facts/stock/frequency-fact.js.map +1 -0
  496. package/dist/lib/facts/stock/frequency.d.ts +32 -0
  497. package/dist/lib/facts/stock/frequency.d.ts.map +1 -0
  498. package/dist/lib/facts/stock/frequency.js +48 -0
  499. package/dist/lib/facts/stock/frequency.js.map +1 -0
  500. package/dist/lib/facts/stock/index.d.ts +27 -0
  501. package/dist/lib/facts/stock/index.d.ts.map +1 -0
  502. package/dist/lib/facts/stock/index.js +28 -0
  503. package/dist/lib/facts/stock/index.js.map +1 -0
  504. package/dist/lib/facts/stock/normalize.d.ts +45 -0
  505. package/dist/lib/facts/stock/normalize.d.ts.map +1 -0
  506. package/dist/lib/facts/stock/normalize.js +135 -0
  507. package/dist/lib/facts/stock/normalize.js.map +1 -0
  508. package/dist/lib/facts/stock/phash.d.ts +55 -0
  509. package/dist/lib/facts/stock/phash.d.ts.map +1 -0
  510. package/dist/lib/facts/stock/phash.js +256 -0
  511. package/dist/lib/facts/stock/phash.js.map +1 -0
  512. package/dist/lib/facts/stock/rule-defaults.d.ts +72 -0
  513. package/dist/lib/facts/stock/rule-defaults.d.ts.map +1 -0
  514. package/dist/lib/facts/stock/rule-defaults.js +55 -0
  515. package/dist/lib/facts/stock/rule-defaults.js.map +1 -0
  516. package/dist/lib/facts/stock/send.d.ts +52 -0
  517. package/dist/lib/facts/stock/send.d.ts.map +1 -0
  518. package/dist/lib/facts/stock/send.js +148 -0
  519. package/dist/lib/facts/stock/send.js.map +1 -0
  520. package/dist/lib/facts/stock/unique-score.d.ts +138 -0
  521. package/dist/lib/facts/stock/unique-score.d.ts.map +1 -0
  522. package/dist/lib/facts/stock/unique-score.js +257 -0
  523. package/dist/lib/facts/stock/unique-score.js.map +1 -0
  524. package/dist/lib/facts/stock/unique-store.d.ts +420 -0
  525. package/dist/lib/facts/stock/unique-store.d.ts.map +1 -0
  526. package/dist/lib/facts/stock/unique-store.js +328 -0
  527. package/dist/lib/facts/stock/unique-store.js.map +1 -0
  528. package/dist/lib/facts/stock/unique.d.ts +35 -0
  529. package/dist/lib/facts/stock/unique.d.ts.map +1 -0
  530. package/dist/lib/facts/stock/unique.js +327 -0
  531. package/dist/lib/facts/stock/unique.js.map +1 -0
  532. package/dist/lib/facts/tools.d.ts +57 -0
  533. package/dist/lib/facts/tools.d.ts.map +1 -0
  534. package/dist/lib/facts/tools.js +325 -0
  535. package/dist/lib/facts/tools.js.map +1 -0
  536. package/dist/lib/facts/validate.d.ts +33 -0
  537. package/dist/lib/facts/validate.d.ts.map +1 -0
  538. package/dist/lib/facts/validate.js +137 -0
  539. package/dist/lib/facts/validate.js.map +1 -0
  540. package/dist/lib/hash.d.ts +44 -0
  541. package/dist/lib/hash.d.ts.map +1 -0
  542. package/dist/lib/hash.js +80 -0
  543. package/dist/lib/hash.js.map +1 -0
  544. package/dist/lib/http/client.d.ts +113 -0
  545. package/dist/lib/http/client.d.ts.map +1 -0
  546. package/dist/lib/http/client.js +330 -0
  547. package/dist/lib/http/client.js.map +1 -0
  548. package/dist/lib/ids.d.ts +17 -0
  549. package/dist/lib/ids.d.ts.map +1 -0
  550. package/dist/lib/ids.js +26 -0
  551. package/dist/lib/ids.js.map +1 -0
  552. package/dist/lib/ixo/attachments.d.ts +116 -0
  553. package/dist/lib/ixo/attachments.d.ts.map +1 -0
  554. package/dist/lib/ixo/attachments.js +290 -0
  555. package/dist/lib/ixo/attachments.js.map +1 -0
  556. package/dist/lib/ixo/authz.d.ts +40 -0
  557. package/dist/lib/ixo/authz.d.ts.map +1 -0
  558. package/dist/lib/ixo/authz.js +113 -0
  559. package/dist/lib/ixo/authz.js.map +1 -0
  560. package/dist/lib/ixo/blocksync/index.d.ts +90 -0
  561. package/dist/lib/ixo/blocksync/index.d.ts.map +1 -0
  562. package/dist/lib/ixo/blocksync/index.js +251 -0
  563. package/dist/lib/ixo/blocksync/index.js.map +1 -0
  564. package/dist/lib/ixo/blocksync/queries.d.ts +15 -0
  565. package/dist/lib/ixo/blocksync/queries.d.ts.map +1 -0
  566. package/dist/lib/ixo/blocksync/queries.js +144 -0
  567. package/dist/lib/ixo/blocksync/queries.js.map +1 -0
  568. package/dist/lib/ixo/blocksync/types.d.ts +184 -0
  569. package/dist/lib/ixo/blocksync/types.d.ts.map +1 -0
  570. package/dist/lib/ixo/blocksync/types.js +108 -0
  571. package/dist/lib/ixo/blocksync/types.js.map +1 -0
  572. package/dist/lib/ixo/cellnode.d.ts +35 -0
  573. package/dist/lib/ixo/cellnode.d.ts.map +1 -0
  574. package/dist/lib/ixo/cellnode.js +43 -0
  575. package/dist/lib/ixo/cellnode.js.map +1 -0
  576. package/dist/lib/ixo/chain-write.d.ts +130 -0
  577. package/dist/lib/ixo/chain-write.d.ts.map +1 -0
  578. package/dist/lib/ixo/chain-write.js +460 -0
  579. package/dist/lib/ixo/chain-write.js.map +1 -0
  580. package/dist/lib/ixo/chain.d.ts +1046 -0
  581. package/dist/lib/ixo/chain.d.ts.map +1 -0
  582. package/dist/lib/ixo/chain.js +279 -0
  583. package/dist/lib/ixo/chain.js.map +1 -0
  584. package/dist/lib/ixo/claim-bot.d.ts +49 -0
  585. package/dist/lib/ixo/claim-bot.d.ts.map +1 -0
  586. package/dist/lib/ixo/claim-bot.js +141 -0
  587. package/dist/lib/ixo/claim-bot.js.map +1 -0
  588. package/dist/lib/ixo/delegation-verify.d.ts +44 -0
  589. package/dist/lib/ixo/delegation-verify.d.ts.map +1 -0
  590. package/dist/lib/ixo/delegation-verify.js +101 -0
  591. package/dist/lib/ixo/delegation-verify.js.map +1 -0
  592. package/dist/lib/ixo/did.d.ts +13 -0
  593. package/dist/lib/ixo/did.d.ts.map +1 -0
  594. package/dist/lib/ixo/did.js +85 -0
  595. package/dist/lib/ixo/did.js.map +1 -0
  596. package/dist/lib/ixo/grant-chain.d.ts +55 -0
  597. package/dist/lib/ixo/grant-chain.d.ts.map +1 -0
  598. package/dist/lib/ixo/grant-chain.js +185 -0
  599. package/dist/lib/ixo/grant-chain.js.map +1 -0
  600. package/dist/lib/ixo/identity.d.ts +32 -0
  601. package/dist/lib/ixo/identity.d.ts.map +1 -0
  602. package/dist/lib/ixo/identity.js +104 -0
  603. package/dist/lib/ixo/identity.js.map +1 -0
  604. package/dist/lib/ixo/index.d.ts +118 -0
  605. package/dist/lib/ixo/index.d.ts.map +1 -0
  606. package/dist/lib/ixo/index.js +395 -0
  607. package/dist/lib/ixo/index.js.map +1 -0
  608. package/dist/lib/ixo/payment.d.ts +104 -0
  609. package/dist/lib/ixo/payment.d.ts.map +1 -0
  610. package/dist/lib/ixo/payment.js +136 -0
  611. package/dist/lib/ixo/payment.js.map +1 -0
  612. package/dist/lib/ixo/ucan-store.d.ts +30 -0
  613. package/dist/lib/ixo/ucan-store.d.ts.map +1 -0
  614. package/dist/lib/ixo/ucan-store.js +134 -0
  615. package/dist/lib/ixo/ucan-store.js.map +1 -0
  616. package/dist/lib/ixo/ucan.d.ts +96 -0
  617. package/dist/lib/ixo/ucan.d.ts.map +1 -0
  618. package/dist/lib/ixo/ucan.js +216 -0
  619. package/dist/lib/ixo/ucan.js.map +1 -0
  620. package/dist/lib/ixo/verified-read.d.ts +43 -0
  621. package/dist/lib/ixo/verified-read.d.ts.map +1 -0
  622. package/dist/lib/ixo/verified-read.js +73 -0
  623. package/dist/lib/ixo/verified-read.js.map +1 -0
  624. package/dist/lib/ixo/vfs.d.ts +27 -0
  625. package/dist/lib/ixo/vfs.d.ts.map +1 -0
  626. package/dist/lib/ixo/vfs.js +42 -0
  627. package/dist/lib/ixo/vfs.js.map +1 -0
  628. package/dist/lib/ixo/web-did.d.ts +7 -0
  629. package/dist/lib/ixo/web-did.d.ts.map +1 -0
  630. package/dist/lib/ixo/web-did.js +9 -0
  631. package/dist/lib/ixo/web-did.js.map +1 -0
  632. package/dist/lib/logger.d.ts +34 -0
  633. package/dist/lib/logger.d.ts.map +1 -0
  634. package/dist/lib/logger.js +126 -0
  635. package/dist/lib/logger.js.map +1 -0
  636. package/dist/lib/matrix/api.d.ts +57 -0
  637. package/dist/lib/matrix/api.d.ts.map +1 -0
  638. package/dist/lib/matrix/api.js +58 -0
  639. package/dist/lib/matrix/api.js.map +1 -0
  640. package/dist/lib/matrix/client.d.ts +41 -0
  641. package/dist/lib/matrix/client.d.ts.map +1 -0
  642. package/dist/lib/matrix/client.js +104 -0
  643. package/dist/lib/matrix/client.js.map +1 -0
  644. package/dist/lib/matrix/deliver.d.ts +224 -0
  645. package/dist/lib/matrix/deliver.d.ts.map +1 -0
  646. package/dist/lib/matrix/deliver.js +788 -0
  647. package/dist/lib/matrix/deliver.js.map +1 -0
  648. package/dist/lib/matrix/events.d.ts +114 -0
  649. package/dist/lib/matrix/events.d.ts.map +1 -0
  650. package/dist/lib/matrix/events.js +143 -0
  651. package/dist/lib/matrix/events.js.map +1 -0
  652. package/dist/lib/matrix/mxid.d.ts +24 -0
  653. package/dist/lib/matrix/mxid.d.ts.map +1 -0
  654. package/dist/lib/matrix/mxid.js +47 -0
  655. package/dist/lib/matrix/mxid.js.map +1 -0
  656. package/dist/lib/metrics.d.ts +105 -0
  657. package/dist/lib/metrics.d.ts.map +1 -0
  658. package/dist/lib/metrics.js +204 -0
  659. package/dist/lib/metrics.js.map +1 -0
  660. package/dist/lib/oauth/approvals.d.ts +160 -0
  661. package/dist/lib/oauth/approvals.d.ts.map +1 -0
  662. package/dist/lib/oauth/approvals.js +273 -0
  663. package/dist/lib/oauth/approvals.js.map +1 -0
  664. package/dist/lib/oauth/standing.d.ts +152 -0
  665. package/dist/lib/oauth/standing.d.ts.map +1 -0
  666. package/dist/lib/oauth/standing.js +299 -0
  667. package/dist/lib/oauth/standing.js.map +1 -0
  668. package/dist/lib/oauth/token.d.ts +60 -0
  669. package/dist/lib/oauth/token.d.ts.map +1 -0
  670. package/dist/lib/oauth/token.js +129 -0
  671. package/dist/lib/oauth/token.js.map +1 -0
  672. package/dist/lib/payments/extend.d.ts +42 -0
  673. package/dist/lib/payments/extend.d.ts.map +1 -0
  674. package/dist/lib/payments/extend.js +98 -0
  675. package/dist/lib/payments/extend.js.map +1 -0
  676. package/dist/lib/payments/facilitator.d.ts +220 -0
  677. package/dist/lib/payments/facilitator.d.ts.map +1 -0
  678. package/dist/lib/payments/facilitator.js +451 -0
  679. package/dist/lib/payments/facilitator.js.map +1 -0
  680. package/dist/lib/payments/gate.d.ts +207 -0
  681. package/dist/lib/payments/gate.d.ts.map +1 -0
  682. package/dist/lib/payments/gate.js +481 -0
  683. package/dist/lib/payments/gate.js.map +1 -0
  684. package/dist/lib/payments/header-seal.d.ts +33 -0
  685. package/dist/lib/payments/header-seal.d.ts.map +1 -0
  686. package/dist/lib/payments/header-seal.js +76 -0
  687. package/dist/lib/payments/header-seal.js.map +1 -0
  688. package/dist/lib/payments/index.d.ts +12 -0
  689. package/dist/lib/payments/index.d.ts.map +1 -0
  690. package/dist/lib/payments/index.js +11 -0
  691. package/dist/lib/payments/index.js.map +1 -0
  692. package/dist/lib/payments/price.d.ts +25 -0
  693. package/dist/lib/payments/price.d.ts.map +1 -0
  694. package/dist/lib/payments/price.js +43 -0
  695. package/dist/lib/payments/price.js.map +1 -0
  696. package/dist/lib/payments/reconcile.d.ts +77 -0
  697. package/dist/lib/payments/reconcile.d.ts.map +1 -0
  698. package/dist/lib/payments/reconcile.js +317 -0
  699. package/dist/lib/payments/reconcile.js.map +1 -0
  700. package/dist/lib/payments/refund.d.ts +34 -0
  701. package/dist/lib/payments/refund.d.ts.map +1 -0
  702. package/dist/lib/payments/refund.js +123 -0
  703. package/dist/lib/payments/refund.js.map +1 -0
  704. package/dist/lib/payments/review-billing.d.ts +222 -0
  705. package/dist/lib/payments/review-billing.d.ts.map +1 -0
  706. package/dist/lib/payments/review-billing.js +609 -0
  707. package/dist/lib/payments/review-billing.js.map +1 -0
  708. package/dist/lib/payments/settle.d.ts +44 -0
  709. package/dist/lib/payments/settle.d.ts.map +1 -0
  710. package/dist/lib/payments/settle.js +306 -0
  711. package/dist/lib/payments/settle.js.map +1 -0
  712. package/dist/lib/payments/terms.d.ts +27 -0
  713. package/dist/lib/payments/terms.d.ts.map +1 -0
  714. package/dist/lib/payments/terms.js +21 -0
  715. package/dist/lib/payments/terms.js.map +1 -0
  716. package/dist/lib/payouts.d.ts +20 -0
  717. package/dist/lib/payouts.d.ts.map +1 -0
  718. package/dist/lib/payouts.js +30 -0
  719. package/dist/lib/payouts.js.map +1 -0
  720. package/dist/lib/readiness.d.ts +42 -0
  721. package/dist/lib/readiness.d.ts.map +1 -0
  722. package/dist/lib/readiness.js +130 -0
  723. package/dist/lib/readiness.js.map +1 -0
  724. package/dist/lib/redact.d.ts +23 -0
  725. package/dist/lib/redact.d.ts.map +1 -0
  726. package/dist/lib/redact.js +67 -0
  727. package/dist/lib/redact.js.map +1 -0
  728. package/dist/lib/register.d.ts +85 -0
  729. package/dist/lib/register.d.ts.map +1 -0
  730. package/dist/lib/register.js +390 -0
  731. package/dist/lib/register.js.map +1 -0
  732. package/dist/lib/review/attestation.d.ts +92 -0
  733. package/dist/lib/review/attestation.d.ts.map +1 -0
  734. package/dist/lib/review/attestation.js +264 -0
  735. package/dist/lib/review/attestation.js.map +1 -0
  736. package/dist/lib/review/reviewer-grant.d.ts +146 -0
  737. package/dist/lib/review/reviewer-grant.d.ts.map +1 -0
  738. package/dist/lib/review/reviewer-grant.js +359 -0
  739. package/dist/lib/review/reviewer-grant.js.map +1 -0
  740. package/dist/lib/review/tasks.d.ts +18 -0
  741. package/dist/lib/review/tasks.d.ts.map +1 -0
  742. package/dist/lib/review/tasks.js +36 -0
  743. package/dist/lib/review/tasks.js.map +1 -0
  744. package/dist/lib/sentry.d.ts +89 -0
  745. package/dist/lib/sentry.d.ts.map +1 -0
  746. package/dist/lib/sentry.js +284 -0
  747. package/dist/lib/sentry.js.map +1 -0
  748. package/dist/lib/spans.d.ts +14 -0
  749. package/dist/lib/spans.d.ts.map +1 -0
  750. package/dist/lib/spans.js +28 -0
  751. package/dist/lib/spans.js.map +1 -0
  752. package/dist/lib/tracing.d.ts +31 -0
  753. package/dist/lib/tracing.d.ts.map +1 -0
  754. package/dist/lib/tracing.js +66 -0
  755. package/dist/lib/tracing.js.map +1 -0
  756. package/dist/lib/ttl-cache.d.ts +26 -0
  757. package/dist/lib/ttl-cache.d.ts.map +1 -0
  758. package/dist/lib/ttl-cache.js +61 -0
  759. package/dist/lib/ttl-cache.js.map +1 -0
  760. package/dist/lib/validator.d.ts +19 -0
  761. package/dist/lib/validator.d.ts.map +1 -0
  762. package/dist/lib/validator.js +32 -0
  763. package/dist/lib/validator.js.map +1 -0
  764. package/dist/lib/work-order/form.d.ts +40 -0
  765. package/dist/lib/work-order/form.d.ts.map +1 -0
  766. package/dist/lib/work-order/form.js +316 -0
  767. package/dist/lib/work-order/form.js.map +1 -0
  768. package/dist/lib/work-order/index.d.ts +20 -0
  769. package/dist/lib/work-order/index.d.ts.map +1 -0
  770. package/dist/lib/work-order/index.js +66 -0
  771. package/dist/lib/work-order/index.js.map +1 -0
  772. package/dist/middleware/api/audit.d.ts +9 -0
  773. package/dist/middleware/api/audit.d.ts.map +1 -0
  774. package/dist/middleware/api/audit.js +38 -0
  775. package/dist/middleware/api/audit.js.map +1 -0
  776. package/dist/middleware/api/auth.d.ts +29 -0
  777. package/dist/middleware/api/auth.d.ts.map +1 -0
  778. package/dist/middleware/api/auth.js +105 -0
  779. package/dist/middleware/api/auth.js.map +1 -0
  780. package/dist/middleware/api/console.d.ts +92 -0
  781. package/dist/middleware/api/console.d.ts.map +1 -0
  782. package/dist/middleware/api/console.js +446 -0
  783. package/dist/middleware/api/console.js.map +1 -0
  784. package/dist/middleware/api/errors.d.ts +48 -0
  785. package/dist/middleware/api/errors.d.ts.map +1 -0
  786. package/dist/middleware/api/errors.js +133 -0
  787. package/dist/middleware/api/errors.js.map +1 -0
  788. package/dist/middleware/api/idempotency.d.ts +23 -0
  789. package/dist/middleware/api/idempotency.d.ts.map +1 -0
  790. package/dist/middleware/api/idempotency.js +158 -0
  791. package/dist/middleware/api/idempotency.js.map +1 -0
  792. package/dist/middleware/api/keys.d.ts +14 -0
  793. package/dist/middleware/api/keys.d.ts.map +1 -0
  794. package/dist/middleware/api/keys.js +66 -0
  795. package/dist/middleware/api/keys.js.map +1 -0
  796. package/dist/middleware/api/membership.d.ts +32 -0
  797. package/dist/middleware/api/membership.d.ts.map +1 -0
  798. package/dist/middleware/api/membership.js +48 -0
  799. package/dist/middleware/api/membership.js.map +1 -0
  800. package/dist/middleware/api/oauth.d.ts +28 -0
  801. package/dist/middleware/api/oauth.d.ts.map +1 -0
  802. package/dist/middleware/api/oauth.js +109 -0
  803. package/dist/middleware/api/oauth.js.map +1 -0
  804. package/dist/middleware/api/rate-limit.d.ts +23 -0
  805. package/dist/middleware/api/rate-limit.d.ts.map +1 -0
  806. package/dist/middleware/api/rate-limit.js +70 -0
  807. package/dist/middleware/api/rate-limit.js.map +1 -0
  808. package/dist/middleware/api/types.d.ts +92 -0
  809. package/dist/middleware/api/types.d.ts.map +1 -0
  810. package/dist/middleware/api/types.js +7 -0
  811. package/dist/middleware/api/types.js.map +1 -0
  812. package/dist/middleware/api/wait.d.ts +21 -0
  813. package/dist/middleware/api/wait.d.ts.map +1 -0
  814. package/dist/middleware/api/wait.js +85 -0
  815. package/dist/middleware/api/wait.js.map +1 -0
  816. package/dist/middleware/capability.d.ts +32 -0
  817. package/dist/middleware/capability.d.ts.map +1 -0
  818. package/dist/middleware/capability.js +113 -0
  819. package/dist/middleware/capability.js.map +1 -0
  820. package/dist/middleware/database.d.ts +14 -0
  821. package/dist/middleware/database.d.ts.map +1 -0
  822. package/dist/middleware/database.js +18 -0
  823. package/dist/middleware/database.js.map +1 -0
  824. package/dist/middleware/error-handler.d.ts +13 -0
  825. package/dist/middleware/error-handler.d.ts.map +1 -0
  826. package/dist/middleware/error-handler.js +127 -0
  827. package/dist/middleware/error-handler.js.map +1 -0
  828. package/dist/middleware/observability.d.ts +32 -0
  829. package/dist/middleware/observability.d.ts.map +1 -0
  830. package/dist/middleware/observability.js +134 -0
  831. package/dist/middleware/observability.js.map +1 -0
  832. package/dist/middleware/rate-limit.d.ts +16 -0
  833. package/dist/middleware/rate-limit.d.ts.map +1 -0
  834. package/dist/middleware/rate-limit.js +56 -0
  835. package/dist/middleware/rate-limit.js.map +1 -0
  836. package/dist/middleware/ucan-auth.d.ts +39 -0
  837. package/dist/middleware/ucan-auth.d.ts.map +1 -0
  838. package/dist/middleware/ucan-auth.js +278 -0
  839. package/dist/middleware/ucan-auth.js.map +1 -0
  840. package/dist/networks.d.ts +34 -0
  841. package/dist/networks.d.ts.map +1 -0
  842. package/dist/networks.js +49 -0
  843. package/dist/networks.js.map +1 -0
  844. package/dist/oracle.d.ts +193 -0
  845. package/dist/oracle.d.ts.map +1 -0
  846. package/dist/oracle.js +245 -0
  847. package/dist/oracle.js.map +1 -0
  848. package/dist/routes/health.d.ts +16 -0
  849. package/dist/routes/health.d.ts.map +1 -0
  850. package/dist/routes/health.js +29 -0
  851. package/dist/routes/health.js.map +1 -0
  852. package/dist/routes/v1/admin.d.ts +18 -0
  853. package/dist/routes/v1/admin.d.ts.map +1 -0
  854. package/dist/routes/v1/admin.js +101 -0
  855. package/dist/routes/v1/admin.js.map +1 -0
  856. package/dist/routes/v1/api/admin-claims.d.ts +14 -0
  857. package/dist/routes/v1/api/admin-claims.d.ts.map +1 -0
  858. package/dist/routes/v1/api/admin-claims.js +82 -0
  859. package/dist/routes/v1/api/admin-claims.js.map +1 -0
  860. package/dist/routes/v1/api/admin-facilitator.d.ts +20 -0
  861. package/dist/routes/v1/api/admin-facilitator.d.ts.map +1 -0
  862. package/dist/routes/v1/api/admin-facilitator.js +64 -0
  863. package/dist/routes/v1/api/admin-facilitator.js.map +1 -0
  864. package/dist/routes/v1/api/admin.d.ts +9 -0
  865. package/dist/routes/v1/api/admin.d.ts.map +1 -0
  866. package/dist/routes/v1/api/admin.js +110 -0
  867. package/dist/routes/v1/api/admin.js.map +1 -0
  868. package/dist/routes/v1/api/audit.d.ts +8 -0
  869. package/dist/routes/v1/api/audit.d.ts.map +1 -0
  870. package/dist/routes/v1/api/audit.js +56 -0
  871. package/dist/routes/v1/api/audit.js.map +1 -0
  872. package/dist/routes/v1/api/batch.d.ts +17 -0
  873. package/dist/routes/v1/api/batch.d.ts.map +1 -0
  874. package/dist/routes/v1/api/batch.js +192 -0
  875. package/dist/routes/v1/api/batch.js.map +1 -0
  876. package/dist/routes/v1/api/claims-read.d.ts +43 -0
  877. package/dist/routes/v1/api/claims-read.d.ts.map +1 -0
  878. package/dist/routes/v1/api/claims-read.js +123 -0
  879. package/dist/routes/v1/api/claims-read.js.map +1 -0
  880. package/dist/routes/v1/api/claims.d.ts +131 -0
  881. package/dist/routes/v1/api/claims.d.ts.map +1 -0
  882. package/dist/routes/v1/api/claims.js +407 -0
  883. package/dist/routes/v1/api/claims.js.map +1 -0
  884. package/dist/routes/v1/api/collections-link.d.ts +14 -0
  885. package/dist/routes/v1/api/collections-link.d.ts.map +1 -0
  886. package/dist/routes/v1/api/collections-link.js +97 -0
  887. package/dist/routes/v1/api/collections-link.js.map +1 -0
  888. package/dist/routes/v1/api/export.d.ts +48 -0
  889. package/dist/routes/v1/api/export.d.ts.map +1 -0
  890. package/dist/routes/v1/api/export.js +251 -0
  891. package/dist/routes/v1/api/export.js.map +1 -0
  892. package/dist/routes/v1/api/index.d.ts +16 -0
  893. package/dist/routes/v1/api/index.d.ts.map +1 -0
  894. package/dist/routes/v1/api/index.js +68 -0
  895. package/dist/routes/v1/api/index.js.map +1 -0
  896. package/dist/routes/v1/api/keys.d.ts +9 -0
  897. package/dist/routes/v1/api/keys.d.ts.map +1 -0
  898. package/dist/routes/v1/api/keys.js +95 -0
  899. package/dist/routes/v1/api/keys.js.map +1 -0
  900. package/dist/routes/v1/api/me.d.ts +21 -0
  901. package/dist/routes/v1/api/me.d.ts.map +1 -0
  902. package/dist/routes/v1/api/me.js +122 -0
  903. package/dist/routes/v1/api/me.js.map +1 -0
  904. package/dist/routes/v1/api/members.d.ts +17 -0
  905. package/dist/routes/v1/api/members.d.ts.map +1 -0
  906. package/dist/routes/v1/api/members.js +406 -0
  907. package/dist/routes/v1/api/members.js.map +1 -0
  908. package/dist/routes/v1/api/meta.d.ts +12 -0
  909. package/dist/routes/v1/api/meta.d.ts.map +1 -0
  910. package/dist/routes/v1/api/meta.js +59 -0
  911. package/dist/routes/v1/api/meta.js.map +1 -0
  912. package/dist/routes/v1/api/openapi.gen.d.ts +2 -0
  913. package/dist/routes/v1/api/openapi.gen.d.ts.map +1 -0
  914. package/dist/routes/v1/api/openapi.gen.js +7 -0
  915. package/dist/routes/v1/api/openapi.gen.js.map +1 -0
  916. package/dist/routes/v1/api/protocols.d.ts +22 -0
  917. package/dist/routes/v1/api/protocols.d.ts.map +1 -0
  918. package/dist/routes/v1/api/protocols.js +153 -0
  919. package/dist/routes/v1/api/protocols.js.map +1 -0
  920. package/dist/routes/v1/api/review-billing.d.ts +18 -0
  921. package/dist/routes/v1/api/review-billing.d.ts.map +1 -0
  922. package/dist/routes/v1/api/review-billing.js +196 -0
  923. package/dist/routes/v1/api/review-billing.js.map +1 -0
  924. package/dist/routes/v1/api/review.d.ts +30 -0
  925. package/dist/routes/v1/api/review.d.ts.map +1 -0
  926. package/dist/routes/v1/api/review.js +302 -0
  927. package/dist/routes/v1/api/review.js.map +1 -0
  928. package/dist/routes/v1/api/sources.d.ts +10 -0
  929. package/dist/routes/v1/api/sources.d.ts.map +1 -0
  930. package/dist/routes/v1/api/sources.js +293 -0
  931. package/dist/routes/v1/api/sources.js.map +1 -0
  932. package/dist/routes/v1/api/uploads.d.ts +37 -0
  933. package/dist/routes/v1/api/uploads.d.ts.map +1 -0
  934. package/dist/routes/v1/api/uploads.js +414 -0
  935. package/dist/routes/v1/api/uploads.js.map +1 -0
  936. package/dist/routes/v1/api/views.d.ts +18 -0
  937. package/dist/routes/v1/api/views.d.ts.map +1 -0
  938. package/dist/routes/v1/api/views.js +95 -0
  939. package/dist/routes/v1/api/views.js.map +1 -0
  940. package/dist/routes/v1/api/webhooks.d.ts +14 -0
  941. package/dist/routes/v1/api/webhooks.d.ts.map +1 -0
  942. package/dist/routes/v1/api/webhooks.js +282 -0
  943. package/dist/routes/v1/api/webhooks.js.map +1 -0
  944. package/dist/routes/v1/api/work-orders.d.ts +45 -0
  945. package/dist/routes/v1/api/work-orders.d.ts.map +1 -0
  946. package/dist/routes/v1/api/work-orders.js +171 -0
  947. package/dist/routes/v1/api/work-orders.js.map +1 -0
  948. package/dist/routes/v1/claims.d.ts +21 -0
  949. package/dist/routes/v1/claims.d.ts.map +1 -0
  950. package/dist/routes/v1/claims.js +153 -0
  951. package/dist/routes/v1/claims.js.map +1 -0
  952. package/dist/routes/v1/collections.d.ts +45 -0
  953. package/dist/routes/v1/collections.d.ts.map +1 -0
  954. package/dist/routes/v1/collections.js +201 -0
  955. package/dist/routes/v1/collections.js.map +1 -0
  956. package/dist/routes/v1/index.d.ts +13 -0
  957. package/dist/routes/v1/index.d.ts.map +1 -0
  958. package/dist/routes/v1/index.js +41 -0
  959. package/dist/routes/v1/index.js.map +1 -0
  960. package/dist/routes/v1/info.d.ts +14 -0
  961. package/dist/routes/v1/info.d.ts.map +1 -0
  962. package/dist/routes/v1/info.js +75 -0
  963. package/dist/routes/v1/info.js.map +1 -0
  964. package/dist/routes/v1/mcp/index.d.ts +33 -0
  965. package/dist/routes/v1/mcp/index.d.ts.map +1 -0
  966. package/dist/routes/v1/mcp/index.js +252 -0
  967. package/dist/routes/v1/mcp/index.js.map +1 -0
  968. package/dist/routes/v1/mcp/oauth.d.ts +27 -0
  969. package/dist/routes/v1/mcp/oauth.d.ts.map +1 -0
  970. package/dist/routes/v1/mcp/oauth.js +500 -0
  971. package/dist/routes/v1/mcp/oauth.js.map +1 -0
  972. package/dist/routes/v1/mcp/tools.d.ts +71 -0
  973. package/dist/routes/v1/mcp/tools.d.ts.map +1 -0
  974. package/dist/routes/v1/mcp/tools.js +432 -0
  975. package/dist/routes/v1/mcp/tools.js.map +1 -0
  976. package/dist/routes/v1/mcp/ui.d.ts +45 -0
  977. package/dist/routes/v1/mcp/ui.d.ts.map +1 -0
  978. package/dist/routes/v1/mcp/ui.js +454 -0
  979. package/dist/routes/v1/mcp/ui.js.map +1 -0
  980. package/dist/routes/v1/oauth.d.ts +29 -0
  981. package/dist/routes/v1/oauth.d.ts.map +1 -0
  982. package/dist/routes/v1/oauth.js +256 -0
  983. package/dist/routes/v1/oauth.js.map +1 -0
  984. package/dist/routes/v1/reviewers.d.ts +22 -0
  985. package/dist/routes/v1/reviewers.d.ts.map +1 -0
  986. package/dist/routes/v1/reviewers.js +165 -0
  987. package/dist/routes/v1/reviewers.js.map +1 -0
  988. package/dist/routes/v1/reviews.d.ts +38 -0
  989. package/dist/routes/v1/reviews.d.ts.map +1 -0
  990. package/dist/routes/v1/reviews.js +234 -0
  991. package/dist/routes/v1/reviews.js.map +1 -0
  992. package/dist/routes/v1/shared.d.ts +586 -0
  993. package/dist/routes/v1/shared.d.ts.map +1 -0
  994. package/dist/routes/v1/shared.js +229 -0
  995. package/dist/routes/v1/shared.js.map +1 -0
  996. package/dist/routes/well-known.d.ts +15 -0
  997. package/dist/routes/well-known.d.ts.map +1 -0
  998. package/dist/routes/well-known.js +35 -0
  999. package/dist/routes/well-known.js.map +1 -0
  1000. package/dist/runtime.d.ts +100 -0
  1001. package/dist/runtime.d.ts.map +1 -0
  1002. package/dist/runtime.js +144 -0
  1003. package/dist/runtime.js.map +1 -0
  1004. package/dist/testing/fake-tools.d.ts +104 -0
  1005. package/dist/testing/fake-tools.d.ts.map +1 -0
  1006. package/dist/testing/fake-tools.js +213 -0
  1007. package/dist/testing/fake-tools.js.map +1 -0
  1008. package/dist/testing/index.d.ts +54 -0
  1009. package/dist/testing/index.d.ts.map +1 -0
  1010. package/dist/testing/index.js +104 -0
  1011. package/dist/testing/index.js.map +1 -0
  1012. package/dist/testing/samples.d.ts +70 -0
  1013. package/dist/testing/samples.d.ts.map +1 -0
  1014. package/dist/testing/samples.js +92 -0
  1015. package/dist/testing/samples.js.map +1 -0
  1016. package/dist/workflows/claim-ingest.d.ts +250 -0
  1017. package/dist/workflows/claim-ingest.d.ts.map +1 -0
  1018. package/dist/workflows/claim-ingest.js +1020 -0
  1019. package/dist/workflows/claim-ingest.js.map +1 -0
  1020. package/dist/workflows/claim-source.d.ts +25 -0
  1021. package/dist/workflows/claim-source.d.ts.map +1 -0
  1022. package/dist/workflows/claim-source.js +107 -0
  1023. package/dist/workflows/claim-source.js.map +1 -0
  1024. package/dist/workflows/review-complete.d.ts +82 -0
  1025. package/dist/workflows/review-complete.d.ts.map +1 -0
  1026. package/dist/workflows/review-complete.js +455 -0
  1027. package/dist/workflows/review-complete.js.map +1 -0
  1028. package/dist/workflows/steps.d.ts +125 -0
  1029. package/dist/workflows/steps.d.ts.map +1 -0
  1030. package/dist/workflows/steps.js +325 -0
  1031. package/dist/workflows/steps.js.map +1 -0
  1032. package/docs/api.md +2595 -0
  1033. package/docs/guide.md +1525 -0
  1034. package/migrations/0000_init.sql +108 -0
  1035. package/migrations/0001_review_attestation.sql +1 -0
  1036. package/migrations/0002_decisions_facts.sql +1 -0
  1037. package/migrations/0003_api_lane.sql +171 -0
  1038. package/migrations/0004_api_v1_1.sql +19 -0
  1039. package/migrations/0005_member_notify.sql +3 -0
  1040. package/migrations/0006_source_collections.sql +16 -0
  1041. package/migrations/0007_api_settlement.sql +27 -0
  1042. package/migrations/0008_review_extend.sql +1 -0
  1043. package/migrations/0009_card_refunds.sql +4 -0
  1044. package/migrations/0010_even_scorpion.sql +16 -0
  1045. package/migrations/0011_mcp_oauth.sql +27 -0
  1046. package/migrations/0012_mcp_standing.sql +21 -0
  1047. package/migrations/0013_unknown_krista_starr.sql +2 -0
  1048. package/migrations/0014_last_carnage.sql +14 -0
  1049. package/migrations/0015_company_authority.sql +26 -0
  1050. package/migrations/0016_owner_only_links.sql +6 -0
  1051. package/migrations/0017_organisations.sql +35 -0
  1052. package/migrations/0018_remove_app_signed.sql +4 -0
  1053. package/migrations/0019_submitted_via.sql +2 -0
  1054. package/migrations/0020_drop_decision_to_pay.sql +4 -0
  1055. package/migrations/0021_manual_erase.sql +25 -0
  1056. package/migrations/0022_errored_facts.sql +1 -0
  1057. package/migrations/0023_review_billing.sql +20 -0
  1058. package/migrations/0024_pending_task_details.sql +1 -0
  1059. package/migrations/meta/0000_snapshot.json +707 -0
  1060. package/migrations/meta/0001_snapshot.json +714 -0
  1061. package/migrations/meta/0002_snapshot.json +721 -0
  1062. package/migrations/meta/0003_snapshot.json +1845 -0
  1063. package/migrations/meta/0004_snapshot.json +1969 -0
  1064. package/migrations/meta/0005_snapshot.json +1991 -0
  1065. package/migrations/meta/0006_snapshot.json +2097 -0
  1066. package/migrations/meta/0007_snapshot.json +2128 -0
  1067. package/migrations/meta/0008_snapshot.json +2133 -0
  1068. package/migrations/meta/0009_snapshot.json +2161 -0
  1069. package/migrations/meta/0010_snapshot.json +2265 -0
  1070. package/migrations/meta/0011_snapshot.json +2448 -0
  1071. package/migrations/meta/0012_snapshot.json +2577 -0
  1072. package/migrations/meta/0013_snapshot.json +2594 -0
  1073. package/migrations/meta/0014_snapshot.json +2602 -0
  1074. package/migrations/meta/0015_snapshot.json +2778 -0
  1075. package/migrations/meta/0016_snapshot.json +2778 -0
  1076. package/migrations/meta/0017_snapshot.json +2792 -0
  1077. package/migrations/meta/0018_snapshot.json +2778 -0
  1078. package/migrations/meta/0019_snapshot.json +2792 -0
  1079. package/migrations/meta/0020_snapshot.json +2785 -0
  1080. package/migrations/meta/0021_snapshot.json +2762 -0
  1081. package/migrations/meta/0022_snapshot.json +2769 -0
  1082. package/migrations/meta/0023_snapshot.json +2900 -0
  1083. package/migrations/meta/0024_snapshot.json +2907 -0
  1084. package/migrations/meta/_journal.json +181 -0
  1085. package/openapi/decision-api.yaml +12204 -0
  1086. package/package.json +123 -4
  1087. package/skills/README.md +19 -0
  1088. package/skills/add-openhands-support/SKILL.md +113 -0
  1089. package/skills/create-collection/SKILL.md +199 -0
  1090. package/skills/create-collection/reference/claims-stack.md +106 -0
  1091. package/skills/create-collection/reference/collection.md +111 -0
  1092. package/skills/create-oracle/SKILL.md +400 -0
  1093. package/skills/create-rubric/SKILL.md +130 -0
  1094. package/skills/create-rubric/reference/format-cheatsheet.md +186 -0
  1095. package/skills/create-rubric/templates/claim-form.example.json +60 -0
  1096. package/skills/decision-api-client/SKILL.md +236 -0
  1097. package/skills/decision-api-oracle/SKILL.md +336 -0
  1098. package/skills/publish-protocol/SKILL.md +151 -0
  1099. package/skills/publish-protocol/reference/publishing.md +116 -0
  1100. package/skills/reference/engine-contract.md +222 -0
  1101. package/skills/write-facts/SKILL.md +221 -0
  1102. package/skills/write-facts/reference/examples/http-vendor.ts +88 -0
  1103. package/skills/write-facts/reference/examples/price-matches-agreement.ts +67 -0
  1104. package/skills/write-facts/reference/facts-api.md +232 -0
  1105. package/templates/project/.dev.vars.example +93 -0
  1106. package/templates/project/.editorconfig +9 -0
  1107. package/templates/project/CLAUDE.md +45 -0
  1108. package/templates/project/README.md +199 -0
  1109. package/templates/project/biome.json +37 -0
  1110. package/templates/project/gitignore +29 -0
  1111. package/templates/project/package.json +32 -0
  1112. package/templates/project/src/facts/index.ts +19 -0
  1113. package/templates/project/src/index.ts +25 -0
  1114. package/templates/project/test/api-lane.test.ts +57 -0
  1115. package/templates/project/test/facts.test.ts +14 -0
  1116. package/templates/project/tsconfig.json +25 -0
  1117. package/templates/project/vitest.config.ts +13 -0
  1118. package/templates/project/wrangler.jsonc +446 -0
@@ -0,0 +1,481 @@
1
+ /**
2
+ * The `PaymentGate` (src/contracts/payment-gate.ts; payments spec §4, §13.4; Go Prod §11.3; NOTES
3
+ * D30–D34), standard x402 since contracts v1.3: offer → 402 → payer binding (read locally from the
4
+ * payment delegation) → the key's cap → verify = the facilitator RESERVES the price per claim →
5
+ * (the router records the rows `reserved` and starts the claims) … and after the decision row,
6
+ * settle on the engine's receipt (settle.ts). Nothing is reserved for a payer the source refuses.
7
+ *
8
+ * What the gate keeps, in CACHE_KV:
9
+ * - `x402-offer:<offerId>` — the offer (source, key, items with their amounts) for a day: the paid
10
+ * retry's claimIds come from HERE, never from the retry, and a retry after the offer expired
11
+ * is re-offered for the same claims.
12
+ * - `x402-paid:<offerId>` — the offer plus the VERIFIED `PAYMENT-SIGNATURE`, sealed
13
+ * (header-seal.ts), for a week: every `/settle` of the offer's claims is built from it, so a
14
+ * retry's body is identical (x402's `settlement_pending` resolves only that way).
15
+ *
16
+ * A claimId that has an `api_charges` row is NEVER offered again (`refuse`): it is recorded, and a
17
+ * second payment for it would reserve money for a claim `recordApiClaims` answers `exists` for.
18
+ *
19
+ * Refusals the payer can act on are results with a 402 body; one with nothing payable to offer
20
+ * throws `AppError.paymentRequired` (`nonce_unknown`, a charged claim), a payer who is not the
21
+ * source's throws FORBIDDEN (`payer_not_member`); a facilitator outage or a config the operator must
22
+ * fix throws `AppError.unavailable` (503 `SOURCE_PAUSED { payments-disabled }`).
23
+ */
24
+ import { and, eq, gt, inArray, isNull, ne, notInArray, or, sql } from "drizzle-orm";
25
+ import { z } from "zod";
26
+ import { EvmAddress, MAX_BATCH_CLAIMS, OfferNonce, } from "../../contracts/index.js";
27
+ import { apiCharges, apiKeys } from "../../db/schema.js";
28
+ import { liveGrant } from "../api-lane/members.js";
29
+ import { DAY_MS } from "../api-lane/retention.js";
30
+ import { createEngineClient } from "../engine/client.js";
31
+ import { AppError } from "../errors.js";
32
+ import { readCache } from "../metrics.js";
33
+ import { createFacilitatorClient } from "./facilitator.js";
34
+ import { sealHeader } from "./header-seal.js";
35
+ import { publishedPrice } from "./price.js";
36
+ import { settleClaim } from "./settle.js";
37
+ const OFFER_KEEP_SEC = 86_400;
38
+ /** Well past the 24 h reservation: a `settlement_pending` (a payer short of funds for a few days)
39
+ * can still be re-settled with its identical body. */
40
+ const PAID_KEEP_SEC = 7 * 86_400;
41
+ const offerKey = (offerId) => `x402-offer:${offerId}`;
42
+ const paidKey = (offerId) => `x402-paid:${offerId}`;
43
+ /** claimId → the offer whose payment `/verify` accepted for it: that claim is never offered anew. */
44
+ const verifiedClaimKey = (claimId) => `x402-verified-claim:${claimId}`;
45
+ // --- headers (board ixo-pay README "Header encoding": standard base64 of UTF-8 JSON) --------------
46
+ export function encodeHeader(value) {
47
+ let binary = "";
48
+ for (const byte of new TextEncoder().encode(JSON.stringify(value))) {
49
+ binary += String.fromCharCode(byte);
50
+ }
51
+ return btoa(binary);
52
+ }
53
+ export function decodeHeader(header) {
54
+ try {
55
+ const bytes = Uint8Array.from(atob(header.trim()), (c) => c.charCodeAt(0));
56
+ return JSON.parse(new TextDecoder().decode(bytes));
57
+ }
58
+ catch {
59
+ return undefined;
60
+ }
61
+ }
62
+ /**
63
+ * All the gate reads of a `PAYMENT-SIGNATURE`: the offer it names and, for PAY, the payment
64
+ * delegation (for its payer). Card (`stripe-manual-capture`, contracts v1.4) carries the authorized
65
+ * PaymentIntent instead: no delegation, so its payer is the one `/verify` names. USDC on Base
66
+ * (x402's `exact`) carries a signed EIP-3009 authorization: its payer is an EVM account. The
67
+ * facilitator checks the rest; the header goes to it unchanged.
68
+ */
69
+ const SignedNonce = z.union([
70
+ z.looseObject({
71
+ x402Version: z.literal(2),
72
+ accepted: z.looseObject({
73
+ scheme: z.literal("stripe-manual-capture"),
74
+ extra: z.looseObject({ nonce: OfferNonce }),
75
+ }),
76
+ payload: z.looseObject({ paymentIntentId: z.string().min(1), customerId: z.string().min(1) }),
77
+ }),
78
+ z.looseObject({
79
+ x402Version: z.literal(2),
80
+ accepted: z.looseObject({
81
+ scheme: z.literal("exact"),
82
+ extra: z.looseObject({ nonce: OfferNonce }),
83
+ }),
84
+ payload: z.looseObject({
85
+ signature: z.string().min(1),
86
+ authorization: z.looseObject({ from: EvmAddress }),
87
+ }),
88
+ }),
89
+ z.looseObject({
90
+ x402Version: z.literal(2),
91
+ accepted: z.looseObject({ extra: z.looseObject({ nonce: OfferNonce }) }),
92
+ payload: z.looseObject({ delegation: z.string().min(1) }),
93
+ }),
94
+ ]);
95
+ const INVALID_SIGNATURE = "The PAYMENT-SIGNATURE header is not a valid payment (a base64 x402 v2 PaymentPayload naming an offer, with its payment delegation or, for card, its PaymentIntent, or, for USDC, its signed authorization). Resend the request without the PAYMENT-SIGNATURE header to get a new offer.";
96
+ function readSignature(header) {
97
+ const parsed = SignedNonce.safeParse(decodeHeader(header));
98
+ // No offer to rebuild from: nothing but a 400 can tell the payer what is wrong.
99
+ if (!parsed.success)
100
+ throw AppError.validation(INVALID_SIGNATURE);
101
+ return { payload: parsed.data, nonce: parsed.data.accepted.extra.nonce };
102
+ }
103
+ /**
104
+ * The payer, read locally BEFORE anything is reserved (payments spec §4 step 3): the issuer at the
105
+ * root of the payment delegation (a base64 CAR), the account the facilitator charges. Unverified
106
+ * here — only a pre-check: the facilitator verifies the signature chain, and the gate then holds
107
+ * its `payer` to this one. An undecodable delegation is the invalid-payload 400; a chain whose
108
+ * root is not in the CAR (a proof by link only) is null — no local pre-check then, the
109
+ * post-`/verify` binding decides.
110
+ */
111
+ async function payerOf(delegation) {
112
+ const { UcantoServer } = await import("@ixo/ucan");
113
+ let extracted;
114
+ try {
115
+ extracted = await UcantoServer.Delegation.extract(new Uint8Array(Buffer.from(delegation, "base64")));
116
+ }
117
+ catch {
118
+ throw AppError.validation(INVALID_SIGNATURE);
119
+ }
120
+ if (extracted.error)
121
+ throw AppError.validation(INVALID_SIGNATURE);
122
+ let root = extracted.ok;
123
+ while (root.proofs.length > 0) {
124
+ const [proof] = root.proofs;
125
+ if (!proof || !UcantoServer.isDelegation(proof))
126
+ return null;
127
+ root = proof;
128
+ }
129
+ return root.issuer.did();
130
+ }
131
+ /**
132
+ * The standard x402 `/verify` body, and `/settle`'s before its `receipts` (payments spec §13.0): the
133
+ * offer id top-level AND as `extra.nonce` (§13.1), the payload's echoed terms as the requirements.
134
+ */
135
+ const facilitatorBody = (payload, offerId) => ({
136
+ x402Version: 2,
137
+ offerId,
138
+ paymentRequirements: payload.accepted,
139
+ paymentPayload: payload,
140
+ });
141
+ /** The `/verify` body for a header the oracle itself built (a chain claim's, review-billing.ts). */
142
+ export const verifyBody = (header, offerId) => facilitatorBody(readSignature(header).payload, offerId);
143
+ /** One claim's `/settle` body: the verified payment plus the engine's receipt (§13.0 addition 2).
144
+ * Built from the kept header alone, so every retry for the claim is byte-identical. */
145
+ export function settleBody(header, offerId, claimId, receiptJws) {
146
+ const { payload } = readSignature(header);
147
+ return { ...facilitatorBody(payload, offerId), receipts: [{ claimId, jws: receiptJws }] };
148
+ }
149
+ async function readKv(cache, key) {
150
+ const raw = await cache.get(key);
151
+ return raw ? JSON.parse(raw) : null;
152
+ }
153
+ export const readPaidOffer = (cache, offerId) => readKv(cache, paidKey(offerId));
154
+ const codeFor = (reason) => reason === "spend_cap"
155
+ ? "SPEND_CAP"
156
+ : reason === "insufficient_credits"
157
+ ? "INSUFFICIENT_CREDITS"
158
+ : "PAYMENT_REQUIRED";
159
+ function consoleUrl(config) {
160
+ if (!config.CONSOLE_URL)
161
+ throw AppError.unavailable("CONSOLE_URL is not set: no fundingUrl");
162
+ return config.CONSOLE_URL;
163
+ }
164
+ /** What the 402 quotes: the whole request (one claim ⇒ that decision's price). */
165
+ function totalOf(items) {
166
+ const upay = items.reduce((sum, i) => sum + BigInt(i.amount), 0n);
167
+ return {
168
+ // 1 upay = 1 micro-USD (price.ts), so the base units ARE the micro-USD.
169
+ amountMicroUsd: Number(upay),
170
+ amountCents: items.reduce((sum, i) => sum + i.amountCents, 0),
171
+ currency: "USD",
172
+ amount: String(upay),
173
+ asset: "upay",
174
+ };
175
+ }
176
+ const PLAN_PAY_KEY = "x402-plan-takes-pay";
177
+ /** As review billing's plan read: an IXO admin's change shows within minutes. */
178
+ const PLAN_PAY_TTL_SEC = 300;
179
+ /**
180
+ * Whether IXO's plan for this oracle takes PAY, i.e. whether an offer carries ixo-pay terms. The
181
+ * facilitator holds the offer to the plan both ways: it refuses ixo-pay terms (400) when the plan's
182
+ * `accepts` has no `upay`, which is every third-party oracle (`card` and/or `usdc-base`; PAY is
183
+ * IXO's only), and requires them when it has. Read from the engine's `GET /v1/oracles/me`
184
+ * `accepts`. On an engine that does not send it yet, `ixoManaged: false` also means no PAY (the
185
+ * engine refuses `upay` on a plan IXO does not run), and neither field keeps today's PAY offer.
186
+ * KV-cached 5 minutes. A read that fails is unavailable (payments-disabled), never a guess.
187
+ */
188
+ async function planTakesPay(deps) {
189
+ const cached = await readCache(PLAN_PAY_KEY, () => deps.cache.get(PLAN_PAY_KEY));
190
+ if (cached !== null)
191
+ return cached === "1";
192
+ let me;
193
+ try {
194
+ me = await createEngineClient(deps).me();
195
+ }
196
+ catch (err) {
197
+ deps.logger.error("payments.plan-unreadable", { detail: String(err) });
198
+ throw AppError.unavailable("The oracle's plan could not be read: no way to pay is offered");
199
+ }
200
+ const takesPay = me.accepts ? me.accepts.includes("upay") : me.ixoManaged !== false;
201
+ await deps.cache.put(PLAN_PAY_KEY, takesPay ? "1" : "0", { expirationTtl: PLAN_PAY_TTL_SEC });
202
+ return takesPay;
203
+ }
204
+ // --- the gate ---------------------------------------------------------------------------------------
205
+ export function createPaymentGate(deps) {
206
+ const { config, cache, db, logger } = deps;
207
+ const requestId = deps.requestId ?? "unknown";
208
+ function body(code, message, price, paymentRequired) {
209
+ const base = consoleUrl(config);
210
+ return {
211
+ error: {
212
+ code,
213
+ message,
214
+ requestId,
215
+ docsUrl: `${base}/docs/errors#${code}`,
216
+ details: {
217
+ ...(paymentRequired ? { paymentRequired } : {}),
218
+ price,
219
+ fundingUrl: `${base}/credits`,
220
+ },
221
+ },
222
+ };
223
+ }
224
+ /** A protocol with no published price is never offered: the facilitator would refuse the offer
225
+ * (`price_mismatch` against "not published"), so it is the operator's config to fix. */
226
+ function priceOf(protocolDid) {
227
+ const price = publishedPrice(config, protocolDid);
228
+ if (!price)
229
+ throw AppError.unavailable(`No price is published for ${protocolDid}`);
230
+ return price;
231
+ }
232
+ /** Register one offer for `items` (already priced) and keep it; the 402 body. */
233
+ async function register(req, message) {
234
+ const { items } = req;
235
+ const total = totalOf(items);
236
+ const protocols = [...new Set(items.map((i) => i.protocolDid))];
237
+ const origin = `https://${config.ORACLE_HOSTNAME}`;
238
+ const network = config.X402_NETWORK;
239
+ if (!network)
240
+ throw AppError.unavailable("X402_NETWORK is not set: payments are off");
241
+ // A plan without PAY (card and/or USDC on Base): no ixo-pay terms, and no IXO payee needed.
242
+ // The facilitator adds the plan's card and `exact` entries itself; the 402 is its, verbatim.
243
+ const takesPay = await planTakesPay(deps);
244
+ // The operator names its own payee (payments spec §3.2); a PAY offer cannot be made without one.
245
+ const payTo = config.EARNINGS_ADDRESS;
246
+ if (takesPay && !payTo) {
247
+ throw AppError.unavailable("EARNINGS_ADDRESS is not set: PAY cannot be offered");
248
+ }
249
+ const fundingUrl = `${consoleUrl(config)}/credits`;
250
+ const offered = await createFacilitatorClient(deps).offers({
251
+ resource: {
252
+ // One claim ⇒ the submit URL with its claimId as fragment; a batch ⇒ the batch URL (D1, D32).
253
+ url: items.length === 1
254
+ ? `${origin}/v1/api/claims#${items[0]?.claimId}`
255
+ : `${origin}/v1/api/claims/batch`,
256
+ description: `${items.length === 1 ? "One decision" : `${items.length} decisions`}${protocols.length === 1 ? ` under protocol ${protocols[0]}` : ""}`,
257
+ mimeType: "application/json",
258
+ },
259
+ // `payTo`: the operator's own account (§3.2, §13.1); the facilitator checks it, never picks one.
260
+ ...(takesPay
261
+ ? {
262
+ paymentRequirements: {
263
+ scheme: "ixo-pay",
264
+ network,
265
+ asset: "upay",
266
+ amount: total.amount,
267
+ payTo,
268
+ maxTimeoutSeconds: 120,
269
+ extra: { fundingUrl },
270
+ },
271
+ }
272
+ : {}),
273
+ charges: items.map((i) => ({
274
+ claimId: i.claimId,
275
+ sourceId: req.sourceId,
276
+ protocolDid: i.protocolDid,
277
+ amount: i.amount,
278
+ })),
279
+ });
280
+ const paymentRequired = offered.paymentRequired;
281
+ const stored = {
282
+ offerId: offered.offerId,
283
+ sourceId: req.sourceId,
284
+ keyPrefix: req.keyPrefix,
285
+ items,
286
+ expiresAt: offered.expiresAt,
287
+ paymentRequired,
288
+ };
289
+ await cache.put(offerKey(offered.offerId), JSON.stringify(stored), {
290
+ expirationTtl: OFFER_KEEP_SEC,
291
+ });
292
+ return body("PAYMENT_REQUIRED", message, total, paymentRequired);
293
+ }
294
+ /**
295
+ * A claim whose payment `/verify` already accepted (reserved, or a card authorized) but whose
296
+ * charge row never landed — a 5xx between the two — must not get a second offer: that would be a
297
+ * second reservation, or a second hold on a real card. The same offer's 402 is answered again, so
298
+ * resending the same PAYMENT-SIGNATURE is idempotent at the facilitator. Null: no claim verified.
299
+ */
300
+ async function verifiedOffer(req) {
301
+ const found = await Promise.all(req.items.map((i) => cache.get(verifiedClaimKey(i.claimId))));
302
+ const offerId = found.find((f) => f !== null);
303
+ if (!offerId)
304
+ return null;
305
+ const earlier = (await readKv(cache, paidKey(offerId))) ??
306
+ (await readKv(cache, offerKey(offerId)));
307
+ const sameClaims = !!earlier &&
308
+ found.every((f) => f === offerId) &&
309
+ earlier.items.length === req.items.length &&
310
+ req.items.every((i) => earlier.items.some((e) => e.claimId === i.claimId));
311
+ if (earlier?.paymentRequired &&
312
+ sameClaims &&
313
+ earlier.sourceId === req.sourceId &&
314
+ earlier.keyPrefix === req.keyPrefix) {
315
+ logger.warn("payments.offer.reanswered", { offerId, claims: earlier.items.length });
316
+ return body("PAYMENT_REQUIRED", "This payment was already accepted: resend the same request with the same PAYMENT-SIGNATURE (no new payment is needed).", totalOf(earlier.items), earlier.paymentRequired);
317
+ }
318
+ throw AppError.paymentRequired(`A payment for claim ${req.items[found.indexOf(offerId)]?.claimId} was already accepted under offer ${offerId}: resend that request with its PAYMENT-SIGNATURE, with the same claims.`, { reason: "payment_accepted", offerId });
319
+ }
320
+ async function offer(req, message) {
321
+ if (req.items.length === 0 || req.items.length > MAX_BATCH_CLAIMS) {
322
+ throw AppError.validation(`One payment covers 1 to ${MAX_BATCH_CLAIMS} claims; split the request.`);
323
+ }
324
+ const again = await verifiedOffer(req);
325
+ if (again)
326
+ return again;
327
+ const items = req.items.map(({ claimId, protocolDid }) => {
328
+ const price = priceOf(protocolDid);
329
+ return { claimId, protocolDid, amount: price.amount, amountCents: price.amountCents };
330
+ });
331
+ return register({ sourceId: req.sourceId, keyPrefix: req.keyPrefix, items }, message ??
332
+ "This decision has to be paid for first: pay the offer in the PAYMENT-REQUIRED header, then resend the same request with the payment in a PAYMENT-SIGNATURE header.");
333
+ }
334
+ /** `SPEND_CAP` / `INSUFFICIENT_CREDITS`: nothing an SDK may auto-pay, just the price and where to top up. */
335
+ function capRefusal(code, reason, price) {
336
+ // The facilitator's `spend_cap` covers both a used-up delegation cap and a deed send
337
+ // permission that is missing or too low (for about a minute after a purchase or top-up, the
338
+ // facilitator still caches "no grant"); its detail never reaches us, so its text names both.
339
+ // Only our own key cap is a "for today" cap.
340
+ const message = code === "INSUFFICIENT_CREDITS"
341
+ ? "There aren't enough PAY credits to pay for this decision. Top up in the console (details.fundingUrl) and retry."
342
+ : reason === "key_daily_cap"
343
+ ? "This source has reached its spending cap for today. Wait until tomorrow, or have its owner raise the cap in the console."
344
+ : "The payment couldn't be authorised: the spending permission is used up or not active yet. If you just bought or topped up credits, try again in a minute; otherwise top up or raise the limit in the console.";
345
+ return { ok: false, code, reason, paymentRequired: body(code, message, price) };
346
+ }
347
+ /**
348
+ * The refusal for `reason`: the two caps carry nothing payable; anything else is a fresh offer
349
+ * for the SAME claims at today's price — unless one of them already has a charge row. Such a
350
+ * claim is recorded and `recordApiClaims` would answer `exists` for it forever, so paying a new
351
+ * offer for it would reserve money for a claim that never starts on it: nothing payable then,
352
+ * and the client resubmits for new claimIds.
353
+ */
354
+ async function refuse(from, reason, code = codeFor(reason)) {
355
+ logger.info("payments.refused", { offerId: from.offerId, sourceId: from.sourceId, reason });
356
+ if (code !== "PAYMENT_REQUIRED")
357
+ return capRefusal(code, reason, totalOf(from.items));
358
+ const charged = await db
359
+ .select({ claimId: apiCharges.claimId })
360
+ .from(apiCharges)
361
+ .where(inArray(apiCharges.claimId, from.items.map((i) => i.claimId)))
362
+ .limit(1);
363
+ if (charged.length > 0) {
364
+ throw AppError.paymentRequired(`The payment for this claim was refused (${reason}). Resend the request without the PAYMENT-SIGNATURE header to get a new offer.`, { reason });
365
+ }
366
+ return {
367
+ ok: false,
368
+ code,
369
+ reason,
370
+ paymentRequired: await offer({ sourceId: from.sourceId, keyPrefix: from.keyPrefix, items: from.items }, `The payment was refused (${reason}). A new offer is in the PAYMENT-REQUIRED header: pay it and resend the request.`),
371
+ };
372
+ }
373
+ /** The key's cap over the last 24 h (§4.1 `SPEND_CAP`): every charge that may still move money
374
+ * (`released` / `failed` moved nothing); this offer's own rows are not counted twice. */
375
+ async function overKeyCap(keyPrefix, offered) {
376
+ const key = await db.query.apiKeys.findFirst({
377
+ columns: { maxSpendCentsPerDay: true },
378
+ where: eq(apiKeys.prefix, keyPrefix),
379
+ });
380
+ const cap = key?.maxSpendCentsPerDay;
381
+ if (cap === null || cap === undefined)
382
+ return false;
383
+ const [row] = await db
384
+ .select({ spent: sql `coalesce(sum(${apiCharges.amountCents}), 0)` })
385
+ .from(apiCharges)
386
+ .where(and(eq(apiCharges.keyPrefix, keyPrefix), gt(apiCharges.createdAt, new Date(Date.now() - DAY_MS)), notInArray(apiCharges.status, ["released", "failed"]), or(isNull(apiCharges.offerId), ne(apiCharges.offerId, offered.offerId))));
387
+ return (row?.spent ?? 0) + totalOf(offered.items).amountCents > cap;
388
+ }
389
+ /** Go Prod §3.4, NOTES D34: only the source's owner or a member with a LIVE grant may pay for
390
+ * it — a revoked or expired member's payment delegation stops paying the moment the grant does. */
391
+ async function mayPay(sourceId, payer) {
392
+ return (await liveGrant({ db, chain: deps }, sourceId, payer)) !== null;
393
+ }
394
+ /** Go Prod §3.4 / App. A's 403 `PAYER_NOT_MEMBER` (contracts v1.1): `AppError` has no such code,
395
+ * so FORBIDDEN with the reason, which the `/v1/api` envelope maps to it; never a payable 402
396
+ * (another offer would not change the payer). */
397
+ async function bindPayer(sourceId, payer, offerId) {
398
+ if (await mayPay(sourceId, payer))
399
+ return;
400
+ logger.warn("payments.payer-not-member", { sourceId, payer, offerId });
401
+ throw new AppError("The account paying for this claim is not the source's owner or one of its members. Pay from an account that belongs to this source.", { code: "FORBIDDEN", details: { reason: "payer_not_member" } });
402
+ }
403
+ /**
404
+ * Every check that can refuse a paid retry WITHOUT reserving anything (the seam's `preflight`):
405
+ * the offer the nonce names (this source's, this key's), the payer read locally from the
406
+ * delegation, the key's daily cap. The router runs it, makes its own checks against the offer's
407
+ * items, and only then calls `verify` — nothing may reserve and then refuse.
408
+ */
409
+ async function preflight(header, source) {
410
+ const { payload, nonce } = readSignature(header);
411
+ const offered = await readKv(cache, offerKey(nonce));
412
+ // Never ours, long gone, another source's or another key's (null = the console): there are no
413
+ // claims of THIS request to re-offer, so the router answers a plain 402 and the client asks
414
+ // again without the header.
415
+ if (!offered ||
416
+ offered.sourceId !== source.sourceId ||
417
+ offered.keyPrefix !== source.keyPrefix) {
418
+ throw AppError.paymentRequired("The PAYMENT-SIGNATURE header doesn't match any payment offer for this source (it may have expired). Resend the request without the PAYMENT-SIGNATURE header to get a new offer.", { reason: "nonce_unknown" });
419
+ }
420
+ // A leaked delegation must not even lock its owner's funds. Card has none: its payer is bound
421
+ // to verify's answer (the post-verify path below), as a delegation rooted only by link is.
422
+ const { delegation } = payload.payload;
423
+ const payer = typeof delegation === "string" ? await payerOf(delegation) : null;
424
+ if (payer !== null)
425
+ await bindPayer(source.sourceId, payer, nonce);
426
+ if (source.keyPrefix && (await overKeyCap(source.keyPrefix, offered))) {
427
+ return refuse(offered, "key_daily_cap", "SPEND_CAP");
428
+ }
429
+ return { ok: true, offerId: nonce, items: offered.items, payer, offer: offered };
430
+ }
431
+ return {
432
+ quote: async (_sourceId, protocolDid) => priceOf(protocolDid),
433
+ offer: (req) => offer(req),
434
+ preflight,
435
+ async verify(header, source) {
436
+ const checked = await preflight(header, source);
437
+ if (!checked.ok)
438
+ return checked;
439
+ const { payload, nonce } = readSignature(header);
440
+ const offered = checked.offer;
441
+ // Reserves the price of every claim, all or none; idempotent per offer, so the header re-sent
442
+ // (a keyless repeat, a crash before the rows landed) answers the stored `isValid: true`. A
443
+ // refusal reserved nothing, so a fresh offer is safe.
444
+ const verdict = await createFacilitatorClient(deps).verify(facilitatorBody(payload, nonce));
445
+ if (verdict.isValid !== true)
446
+ return refuse(offered, verdict.invalidReason);
447
+ // The facilitator verified the chain the binding read. A different payer means one of the two
448
+ // readings is wrong: terminal, never a payable re-offer (its reservation is never settled and
449
+ // lapses at 24 h). Without a local reading (a root only by link), bind the facilitator's.
450
+ // USDC (`exact`) is not bound to the source's members: its payer is an EVM account, not an
451
+ // IXO one a source can list, and its authorization is single-use, for this offer's amount to
452
+ // the oracle owner's payTo — no standing credential to leak. The source itself was
453
+ // authenticated (its key or console); verify must name the authorization's own signer.
454
+ const local = payload.accepted.scheme === "exact"
455
+ ? payload.payload.authorization.from.toLowerCase()
456
+ : checked.payer;
457
+ const named = payload.accepted.scheme === "exact" ? verdict.payer.toLowerCase() : verdict.payer;
458
+ if (local === null) {
459
+ await bindPayer(source.sourceId, verdict.payer, nonce);
460
+ }
461
+ else if (named !== local) {
462
+ logger.error("payments.payer-mismatch", {
463
+ offerId: nonce,
464
+ local,
465
+ facilitator: verdict.payer,
466
+ });
467
+ throw new AppError("The account the payment names is not the account that signed it. Pay again with a payment delegation of your own.", { code: "FORBIDDEN", details: { reason: "payer_mismatch" } });
468
+ }
469
+ // Every `/settle` of these claims is built from this exact header (settle.ts): the router
470
+ // stores it on each claim's charge row; KV is the second copy. Sealed in both: it carries the
471
+ // payer's reusable payment delegation.
472
+ const paid = { ...offered, header: await sealHeader(config, header) };
473
+ await cache.put(paidKey(nonce), JSON.stringify(paid), { expirationTtl: PAID_KEEP_SEC });
474
+ await Promise.all(offered.items.map((i) => cache.put(verifiedClaimKey(i.claimId), nonce, { expirationTtl: PAID_KEEP_SEC })));
475
+ logger.info("payments.reserved", { offerId: nonce, claims: offered.items.length });
476
+ return { ok: true, payer: verdict.payer, offerId: nonce, items: offered.items };
477
+ },
478
+ settle: (claimId, receiptJws) => settleClaim(deps, claimId, receiptJws),
479
+ };
480
+ }
481
+ //# sourceMappingURL=gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../../src/lib/payments/gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * A verified `PAYMENT-SIGNATURE` at rest (owner, 2026-10-14). The header embeds the payer's payment
3
+ * delegation — a REUSABLE bearer credential up to its `maxAmount` — and every `/settle` of the claim
4
+ * is rebuilt from it byte for byte (settle.ts), so it must be recoverable: sealed with
5
+ * `WEBHOOK_ENCRYPTION_KEY` (`v1:` AES-256-GCM, api-lane/webhook-crypto.ts), on `api_charges` and in
6
+ * the KV `x402-paid:` copy alike, never in the clear.
7
+ *
8
+ * Rows written before this rule hold the base64 header itself: `openHeader` reads either (a base64
9
+ * header never contains `:`), and `sealLegacyHeaders` — the housekeeping hour's — seals them in
10
+ * place, a page at a time, until none is left. The KV copies expire within a week on their own.
11
+ *
12
+ * What a charge was paid in (`chargeTerms`) is read off the header's `accepted.scheme`, so the
13
+ * scheme is kept beside it in the clear (`api_charges.scheme`) — nothing secret, and no decrypt on
14
+ * a claim read.
15
+ */
16
+ import type { Config } from "../../config.js";
17
+ import type { Database } from "../../db/client.js";
18
+ export type ChargeScheme = "ixo-pay" | "stripe-manual-capture" | "exact";
19
+ type KeyConfig = Pick<Config, "WEBHOOK_ENCRYPTION_KEY">;
20
+ export declare const sealHeader: (config: KeyConfig, header: string) => Promise<string>;
21
+ /** The header as the payer sent it, from a sealed value or a row written before sealing. */
22
+ export declare const openHeader: (config: KeyConfig, stored: string) => Promise<string>;
23
+ /** The scheme a header pays with; PAY when it names none or one we do not know (the only way to
24
+ * pay before card). */
25
+ export declare function schemeOf(header: string): ChargeScheme;
26
+ /**
27
+ * Seal the charge rows still holding a header in the clear (written before 2026-10-14), and fill
28
+ * their `scheme`. Guarded on the very value read, so a row a settle rewrote meanwhile is left to
29
+ * the next run. Returns how many it sealed.
30
+ */
31
+ export declare function sealLegacyHeaders(db: Database, config: KeyConfig): Promise<number>;
32
+ export {};
33
+ //# sourceMappingURL=header-seal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-seal.d.ts","sourceRoot":"","sources":["../../../src/lib/payments/header-seal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAKhD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,uBAAuB,GAAG,OAAO,CAAC;AAEzE,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;AASxD,eAAO,MAAM,UAAU,WAAY,SAAS,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,CAC5C,CAAC;AAElC,4FAA4F;AAC5F,eAAO,MAAM,UAAU,WAAY,SAAS,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,CACC,CAAC;AAE/E;wBACwB;AACxB,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAYrD;AAKD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BxF"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * A verified `PAYMENT-SIGNATURE` at rest (owner, 2026-10-14). The header embeds the payer's payment
3
+ * delegation — a REUSABLE bearer credential up to its `maxAmount` — and every `/settle` of the claim
4
+ * is rebuilt from it byte for byte (settle.ts), so it must be recoverable: sealed with
5
+ * `WEBHOOK_ENCRYPTION_KEY` (`v1:` AES-256-GCM, api-lane/webhook-crypto.ts), on `api_charges` and in
6
+ * the KV `x402-paid:` copy alike, never in the clear.
7
+ *
8
+ * Rows written before this rule hold the base64 header itself: `openHeader` reads either (a base64
9
+ * header never contains `:`), and `sealLegacyHeaders` — the housekeeping hour's — seals them in
10
+ * place, a page at a time, until none is left. The KV copies expire within a week on their own.
11
+ *
12
+ * What a charge was paid in (`chargeTerms`) is read off the header's `accepted.scheme`, so the
13
+ * scheme is kept beside it in the clear (`api_charges.scheme`) — nothing secret, and no decrypt on
14
+ * a claim read.
15
+ */
16
+ import { and, eq, isNotNull, isNull, notLike, or } from "drizzle-orm";
17
+ import { apiCharges } from "../../db/schema.js";
18
+ import { isSealed, openText, sealText } from "../api-lane/webhook-crypto.js";
19
+ import { AppError } from "../errors.js";
20
+ function keyOf(config) {
21
+ // Required whenever API_LANE is on (config.ts), and nothing stores a header without the lane.
22
+ const key = config.WEBHOOK_ENCRYPTION_KEY;
23
+ if (!key)
24
+ throw AppError.internal("WEBHOOK_ENCRYPTION_KEY is not set: a payment is never kept");
25
+ return key;
26
+ }
27
+ export const sealHeader = (config, header) => sealText(header, keyOf(config));
28
+ /** The header as the payer sent it, from a sealed value or a row written before sealing. */
29
+ export const openHeader = (config, stored) => isSealed(stored) ? openText(stored, keyOf(config)) : Promise.resolve(stored);
30
+ /** The scheme a header pays with; PAY when it names none or one we do not know (the only way to
31
+ * pay before card). */
32
+ export function schemeOf(header) {
33
+ let signed;
34
+ try {
35
+ // gate.ts `decodeHeader`, inlined: the gate seals with this module, so it cannot import back.
36
+ signed = JSON.parse(new TextDecoder().decode(Uint8Array.from(atob(header.trim()), (c) => c.charCodeAt(0))));
37
+ }
38
+ catch {
39
+ signed = undefined;
40
+ }
41
+ const scheme = signed?.accepted?.scheme;
42
+ return scheme === "stripe-manual-capture" || scheme === "exact" ? scheme : "ixo-pay";
43
+ }
44
+ /** Legacy rows sealed per housekeeping run — the hour's sweep stays short whatever is left. */
45
+ const SEAL_BATCH = 200;
46
+ /**
47
+ * Seal the charge rows still holding a header in the clear (written before 2026-10-14), and fill
48
+ * their `scheme`. Guarded on the very value read, so a row a settle rewrote meanwhile is left to
49
+ * the next run. Returns how many it sealed.
50
+ */
51
+ export async function sealLegacyHeaders(db, config) {
52
+ if (!config.WEBHOOK_ENCRYPTION_KEY)
53
+ return 0;
54
+ const rows = await db
55
+ .select({ claimId: apiCharges.claimId, paymentHeader: apiCharges.paymentHeader })
56
+ .from(apiCharges)
57
+ .where(and(isNotNull(apiCharges.paymentHeader), or(notLike(apiCharges.paymentHeader, "v1:%"), isNull(apiCharges.scheme))))
58
+ .limit(SEAL_BATCH);
59
+ let sealed = 0;
60
+ for (const row of rows) {
61
+ const stored = row.paymentHeader;
62
+ const header = await openHeader(config, stored);
63
+ const [done] = await db
64
+ .update(apiCharges)
65
+ .set({
66
+ paymentHeader: isSealed(stored) ? stored : await sealHeader(config, header),
67
+ scheme: schemeOf(header),
68
+ })
69
+ .where(and(eq(apiCharges.claimId, row.claimId), eq(apiCharges.paymentHeader, stored)))
70
+ .returning({ claimId: apiCharges.claimId });
71
+ if (done)
72
+ sealed += 1;
73
+ }
74
+ return sealed;
75
+ }
76
+ //# sourceMappingURL=header-seal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-seal.js","sourceRoot":"","sources":["../../../src/lib/payments/header-seal.ts"],"names":[],"mappings":"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"}