@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,136 @@
1
+ /**
2
+ * A claim's PAYMENT plane — the one place that reads the chain's intent/escrow semantics, verified
3
+ * against `ixo-blockchain/x/claims/keeper/msg_server.go`.
4
+ *
5
+ * Two lanes, and the oracle must act differently in each:
6
+ *
7
+ * useIntent = false — an ORDINARY claim. The agent's requested `amount` is a request; the
8
+ * evaluator's `MsgEvaluateClaim.amount` is what actually pays (falling back to the collection's
9
+ * default approval payment when empty), authz-capped by `EvaluateClaimConstraints.MaxCustomAmount`.
10
+ * ⇒ we ECHO the claim's own amount so the agent is paid what they asked for.
11
+ *
12
+ * useIntent = true — an ESCROWED claim. `MsgClaimIntent` moved the payout into the collection's
13
+ * escrow account BEFORE the claim existed; `MsgSubmitClaim{useIntent:true}` copied the intent's
14
+ * terms onto the claim, set `paymentsStatus.approval = GUARANTEED`, and DELETED the intent
15
+ * record (so there is nothing left to query at evaluation time — the claim IS the record).
16
+ * `EvaluateClaim` then OVERWRITES `msg.Amount` with `claim.Amount` (msg_server.go:409-413) and
17
+ * pays the full escrowed sum on approve / refunds it on any other terminal status.
18
+ * ⇒ we send NO amount: the chain ignores it, and a non-empty amount is still checked against
19
+ * `MaxCustomAmount` (authz.go:231), so echoing it can fail the whole MsgExec for zero benefit.
20
+ *
21
+ * The denom is always the CLAIM's — the oracle never picks one.
22
+ */
23
+ import { AppError } from "../errors.js";
24
+ /** The claim's payment plane, normalized. Missing/legacy fields read as an ordinary unpaid claim. */
25
+ export function claimPayment(claim) {
26
+ return {
27
+ useIntent: claim.useIntent === true,
28
+ guaranteed: claim.paymentsStatus?.approval === "GUARANTEED",
29
+ amount: claim.amount ?? [],
30
+ };
31
+ }
32
+ /**
33
+ * The coins to put on `MsgEvaluateClaim`, or `undefined` to let the chain decide (§payment above).
34
+ * Intent claims ALWAYS get `undefined`.
35
+ */
36
+ export function evaluationAmount(payment) {
37
+ if (!payment || payment.useIntent)
38
+ return undefined;
39
+ return payment.amount[0];
40
+ }
41
+ /** Any strictly positive coin? Amounts are integer strings; float loss can't flip a > 0 test. */
42
+ function hasCoins(coins) {
43
+ return (coins ?? []).some((coin) => Number(coin.amount) > 0);
44
+ }
45
+ /**
46
+ * Would an on-chain APPROVE actually pay something without the evaluator inventing an amount?
47
+ * True on the escrow lane (the intent priced it), on a claim carrying its own coins, or when the
48
+ * collection's approval lane has a default. False means approval needs a CUSTOM amount — a money
49
+ * judgement that belongs to the owner, not this oracle (the act lane leaves such a claim for the
50
+ * portal rather than signing a zero payout).
51
+ *
52
+ * Deliberately a question about the CHAIN, not about settings: it reports whether money would move,
53
+ * and the caller decides what that means.
54
+ */
55
+ export function hasApprovalPayout(payment, collectionPayments) {
56
+ if (payment.useIntent)
57
+ return true;
58
+ return hasCoins(payment.amount) || hasCoins(collectionPayments?.approval?.amount);
59
+ }
60
+ /**
61
+ * What ONE `MsgEvaluateClaim` draws from the collection's admin account, summed per denom — the
62
+ * act lane's `admin-unfunded` notice and the funding cron's resume threshold read the same rule.
63
+ * Proven on chain v8 (S4): the message fails WHOLE ("insufficient funds") unless the admin covers
64
+ * every leg it pays, and a failed one records nothing, so a retry after a top-up succeeds.
65
+ *
66
+ * evaluation — every evaluation, approve or reject: the collection's `payments.evaluation`
67
+ * (all its coins); the watched row's accepted `fee` only when Blocksync has no payments.
68
+ * approval — an ORDINARY claim's payout: `claimAmount` (what step 9 puts on the message), else
69
+ * the collection's approval default. An INTENT claim adds nothing: the escrow pays it.
70
+ * rejection — the collection's rejection payment, whatever the lane.
71
+ *
72
+ * Omit `verdict` for the evaluation leg alone. An empty or absent leg adds nothing, and so does
73
+ * a coin whose amount is not an integer (the chain's coins always are; a ragged jsonb row must
74
+ * not throw a notice or a probe). Zero sums are dropped.
75
+ */
76
+ export function adminDraw(input) {
77
+ const { payments, fee, verdict } = input;
78
+ const evaluation = payments?.evaluation?.amount ?? [];
79
+ const legs = evaluation.length > 0 ? [...evaluation] : fee ? [fee] : [];
80
+ if (verdict?.approve && !verdict.payment.useIntent) {
81
+ legs.push(...(verdict.claimAmount ? [verdict.claimAmount] : (payments?.approval?.amount ?? [])));
82
+ }
83
+ if (verdict && !verdict.approve)
84
+ legs.push(...(payments?.rejection?.amount ?? []));
85
+ const sums = new Map();
86
+ for (const { denom, amount } of legs) {
87
+ if (!/^\d+$/.test(amount))
88
+ continue;
89
+ sums.set(denom, (sums.get(denom) ?? 0n) + BigInt(amount));
90
+ }
91
+ return [...sums]
92
+ .filter(([, amount]) => amount > 0n)
93
+ .map(([denom, amount]) => ({ denom, amount: amount.toString() }));
94
+ }
95
+ /** The watched row's accepted evaluation fee as a coin, when it carries one. */
96
+ export function rowFee(row) {
97
+ return row?.evaluationDenom && row.evaluationAmount
98
+ ? { denom: row.evaluationDenom, amount: row.evaluationAmount }
99
+ : null;
100
+ }
101
+ /**
102
+ * The register-time money gate: the collection's `Payments.evaluation` is the
103
+ * ONLY way this oracle gets paid — the chain splits that coin 80/10/10 on every `MsgEvaluateClaim`
104
+ * — so a collection paying nothing, in another denom, or below the fee is refused (402) rather than
105
+ * evaluated for free. Returns the accepted coin (what the watched row records). The whole coin list
106
+ * is scanned because an evaluation payment may carry several denoms; the message states required
107
+ * vs offered so the commissioner can fix the collection's payments, not guess.
108
+ */
109
+ export function requireEvaluationPayment(required, payments) {
110
+ const coins = payments?.evaluation?.amount ?? [];
111
+ const offered = coins.find((coin) => coin.denom === required.denom);
112
+ // A zero-price fee (`minAmount: "0"`, e.g. a `pricing.byProtocol` entry — oracle.ts) earns
113
+ // nothing from the chain's evaluation split by design, so an absent/empty/wrong-denom leg is
114
+ // legal, not a refusal — record what was actually offered in the required denom, or "0" when
115
+ // there was none. NEVER echoed onto `MsgEvaluateClaim`: that message's only `amount` field is
116
+ // the claim's own ordinary-lane payout (`evaluationAmount()` in this file, read from
117
+ // `claimPayment()`), which chain-write.ts builds independently of this fee entirely.
118
+ // `offered.amount` is the chain's jsonb as Blocksync relays it — typed a string, never proven an
119
+ // integer. `BigInt("1.5")` throws (an anonymous 500, and once recorded on the watched row, again in
120
+ // the funding cron every tick) and `BigInt("")` is silently 0n. So a malformed amount is refused
121
+ // by name here, before anything compares or records it.
122
+ if (offered && !/^\d+$/.test(offered.amount)) {
123
+ throw AppError.paymentRequired(`The collection's evaluation payment amount "${offered.amount}" is not an integer base-unit amount of ${required.denom}`, { reason: "evaluation_underpaid", required, offered: coins });
124
+ }
125
+ if (BigInt(required.minAmount) === 0n) {
126
+ return { denom: required.denom, amount: offered?.amount ?? "0" };
127
+ }
128
+ if (!offered || BigInt(offered.amount) < BigInt(required.minAmount)) {
129
+ const offers = coins.length > 0
130
+ ? coins.map((coin) => `${coin.amount}${coin.denom}`).join(", ")
131
+ : "no evaluation payment";
132
+ throw AppError.paymentRequired(`This oracle requires an evaluation payment of at least ${required.minAmount}${required.denom}; the collection offers ${offers}`, { reason: "evaluation_underpaid", required, offered: coins });
133
+ }
134
+ return { denom: offered.denom, amount: offered.amount };
135
+ }
136
+ //# sourceMappingURL=payment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment.js","sourceRoot":"","sources":["../../../src/lib/ixo/payment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The UCAN Store inbox — where the collection owner deposits the owner→oracle delegation (§3.5).
3
+ *
4
+ * We self-sign a `store/get` invocation (acting as ourselves → our inbox) and read the delegations
5
+ * addressed to `ORACLE_DID`. The store has replay ON (single-use), so we MINT A FRESH invocation on
6
+ * every request and NEVER cache it — a retry re-mints. The returned `.token` is the raw base64-CAR
7
+ * delegation, ready to use as the proof for the bot invocation.
8
+ */
9
+ import type { Config } from "../../config.js";
10
+ import type { Logger } from "../logger.js";
11
+ import type { TraceContext } from "../tracing.js";
12
+ export interface StoreDeps {
13
+ config: Config;
14
+ trace: TraceContext;
15
+ cache: KVNamespace;
16
+ logger: Logger;
17
+ }
18
+ export interface OwnerDelegation {
19
+ /** The raw base64-CAR delegation, ready to use as a proof. */
20
+ car: string;
21
+ /** Unix seconds the delegation expires at, or null if it never expires. */
22
+ expiresAt: number | null;
23
+ }
24
+ /**
25
+ * Fetch the newest non-expired claim-bot delegation from our store inbox that VERIFIES as
26
+ * `rootIssuerDid`'s (the chain owner's). Returns the delegation + its own expiry, or null if none on
27
+ * deposit does (the caller maps that to a fail-closed `forbidden`).
28
+ */
29
+ export declare function fetchOwnerDelegation(deps: StoreDeps, rootIssuerDid: string): Promise<OwnerDelegation | null>;
30
+ //# sourceMappingURL=ucan-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ucan-store.d.ts","sourceRoot":"","sources":["../../../src/lib/ixo/ucan-store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAU/C,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAaD,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,SAAS,EACf,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAmHjC"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * The UCAN Store inbox — where the collection owner deposits the owner→oracle delegation (§3.5).
3
+ *
4
+ * We self-sign a `store/get` invocation (acting as ourselves → our inbox) and read the delegations
5
+ * addressed to `ORACLE_DID`. The store has replay ON (single-use), so we MINT A FRESH invocation on
6
+ * every request and NEVER cache it — a retry re-mints. The returned `.token` is the raw base64-CAR
7
+ * delegation, ready to use as the proof for the bot invocation.
8
+ */
9
+ import { AppError } from "../errors.js";
10
+ import { fetchClient, readCappedBytes } from "../http/client.js";
11
+ import { resolveIssuerKeys } from "./delegation-verify.js";
12
+ import { resolveServiceDid } from "./did.js";
13
+ import { mintInvocation, verifyOwnerDelegation } from "./ucan.js";
14
+ const STORE_RESOURCE = "ixo:ucan-store";
15
+ const CLAIM_BOT_RESOURCE = "ixo:matrix-claims-bot";
16
+ /** The newest deposits tried per lookup — anyone may deposit a CAR naming the owner. */
17
+ const MAX_CANDIDATES = 10;
18
+ /** One inbox page: 50 deposits × a CAR of tens of KiB is a few MiB at the very most. */
19
+ const MAX_INBOX_BYTES = 8 * 1024 * 1024;
20
+ /**
21
+ * Fetch the newest non-expired claim-bot delegation from our store inbox that VERIFIES as
22
+ * `rootIssuerDid`'s (the chain owner's). Returns the delegation + its own expiry, or null if none on
23
+ * deposit does (the caller maps that to a fail-closed `forbidden`).
24
+ */
25
+ export async function fetchOwnerDelegation(deps, rootIssuerDid) {
26
+ const { config } = deps;
27
+ if (!config.ORACLE_DID) {
28
+ throw AppError.internal("ORACLE_DID not configured");
29
+ }
30
+ const storeDid = await resolveServiceDid(deps.trace, deps.cache, config.UCAN_STORE_URL);
31
+ const url = `${config.UCAN_STORE_URL}/api/delegations?rootIssuer=${encodeURIComponent(rootIssuerDid)}&resource=${CLAIM_BOT_RESOURCE}&order=desc`;
32
+ // Single-use tokens: re-mint per attempt, never retry the same bearer (replay ON). `unique`
33
+ // guards against concurrent pulls minting byte-identical tokens in the same second — the store's
34
+ // replay protection would reject the twin as a replay.
35
+ let lastError;
36
+ for (let attempt = 0; attempt < 2; attempt++) {
37
+ const { token } = await mintInvocation(config, {
38
+ // The store indexes our inbox by our chain DID (lib/ixo/ucan.ts header).
39
+ issuer: config.ORACLE_DID,
40
+ audience: storeDid,
41
+ capability: { can: "store/get", with: STORE_RESOURCE },
42
+ ttlSec: 120,
43
+ unique: true,
44
+ });
45
+ let res;
46
+ try {
47
+ // Single attempt on purpose (default): the token is single-use (replay ON) — the outer loop
48
+ // re-mints a fresh one rather than ever re-sending this request.
49
+ res = await fetchClient(url, {
50
+ trace: deps.trace,
51
+ headers: {
52
+ accept: "application/json",
53
+ authorization: `Bearer ${token}`,
54
+ "x-auth-type": "ucan",
55
+ },
56
+ });
57
+ }
58
+ catch (err) {
59
+ lastError = err;
60
+ continue;
61
+ }
62
+ if (!res.ok) {
63
+ // Includes 401/403: a rejection of OUR invocation (replay collision, clock skew) is store
64
+ // contention, NOT "this claim is forbidden" — retry with a FRESH token, and surface as
65
+ // `unavailable` (retryable) if it persists. Deterministic authz denials belong to the claim
66
+ // bot, not here.
67
+ lastError = new Error(`store returned ${res.status}`);
68
+ // Discarded bodies pin one of the isolate's 6 open connections until GC.
69
+ await res.body?.cancel().catch(() => { });
70
+ continue;
71
+ }
72
+ // Under a cap: one page is at most 50 deposits of a CAR each (tens of KiB), and anyone can
73
+ // deposit to our inbox — an unbounded read would let a flood of them take the isolate down.
74
+ const bytes = await readCappedBytes(res, MAX_INBOX_BYTES).catch(() => new Uint8Array(0));
75
+ if (!bytes) {
76
+ lastError = new Error(`store answer over ${MAX_INBOX_BYTES} bytes`);
77
+ continue;
78
+ }
79
+ let body = null;
80
+ try {
81
+ body = JSON.parse(new TextDecoder().decode(bytes));
82
+ }
83
+ catch {
84
+ /* not JSON — no deposits we can read, as before */
85
+ }
86
+ const now = Math.floor(Date.now() / 1000);
87
+ const matches = (body?.delegations ?? []).filter((d) => d.audienceDid === config.ORACLE_DID &&
88
+ (d.expiresAt == null || d.expiresAt > now) &&
89
+ d.capabilities?.some((c) => c.with === CLAIM_BOT_RESOURCE));
90
+ // The `rootIssuer=` filter above is the STORE's own claim about what it's returning, and anyone
91
+ // can deposit a CAR naming the owner. So each match is verified exactly as the caller-supplied
92
+ // path is at register time (`verifyOwnerDelegation`: issuer, audience, resource, expiry AND
93
+ // signature), newest first (`order=desc`), and the first that passes is the one — a bad newest
94
+ // deposit must not hide an older good one. A refusal (400) is logged and skipped; anything else
95
+ // (Blocksync down, 503) is thrown, never read as "no delegation". The expiry returned is the
96
+ // verified CAR's own, not the store's metadata.
97
+ // The owner's keys are resolved ONCE for every candidate, and only when one passes the free
98
+ // field checks; the candidates are capped, so a flood of deposits costs at most MAX_CANDIDATES
99
+ // signature checks.
100
+ let keys;
101
+ const issuerKeys = () => {
102
+ keys ??= resolveIssuerKeys(config, rootIssuerDid, deps.trace);
103
+ return keys;
104
+ };
105
+ for (const match of matches.slice(0, MAX_CANDIDATES)) {
106
+ let verified;
107
+ try {
108
+ verified = await verifyOwnerDelegation(config, match.token, rootIssuerDid, issuerKeys);
109
+ }
110
+ catch (err) {
111
+ if (err instanceof AppError && err.status === 400) {
112
+ deps.logger.warn("ucan-store.delegation-refused", {
113
+ rootIssuerDid,
114
+ reason: err.message,
115
+ code: err.details?.code,
116
+ });
117
+ continue;
118
+ }
119
+ throw err;
120
+ }
121
+ deps.logger.debug("ucan-store.delegation-found", {
122
+ rootIssuerDid,
123
+ expiresAt: verified.expiresAt?.toISOString() ?? null,
124
+ });
125
+ return {
126
+ car: verified.car,
127
+ expiresAt: verified.expiresAt ? Math.floor(verified.expiresAt.getTime() / 1000) : null,
128
+ };
129
+ }
130
+ return null;
131
+ }
132
+ throw AppError.unavailable("UCAN Store inbox unreachable", lastError);
133
+ }
134
+ //# sourceMappingURL=ucan-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ucan-store.js","sourceRoot":"","sources":["../../../src/lib/ixo/ucan-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Minting UCAN invocations as the Evaluation Oracle.
3
+ *
4
+ * ONE key, two DIDs. `signerFromMnemonic(SERVICE_ED25519_MNEMONIC)` derives the same Ed25519 key
5
+ * as identity.ts (SHA256(mnemonic) → seed), so whichever DID is stamped on the signer, the key is
6
+ * the one `/.well-known/did.json` publishes. The DEFAULT issuer is our did:web
7
+ * (`did:web:<ORACLE_HOSTNAME>`, docs/ENGINE-CONTRACT.md): the engine's validator resolves it from
8
+ * that document, so a cloned kit needs no on-chain IID key. `ORACLE_DID` (did:ixo) is the issuer
9
+ * ONLY where the counterparty knows us by our chain identity: the owner→oracle delegation names it
10
+ * as its audience (so the bot invocation that carries it as proof must be issued by that same
11
+ * principal), the UCAN Store indexes our inbox by it, and the VFS matches our evaluate grant by
12
+ * its address. Four invocation shapes are minted (see pull-claim-spec §13, replay differs), plus
13
+ * one delegation:
14
+ *
15
+ * - engine invocations (lib/engine): SELF-SIGNED as did:web, resource `ixo:eval-engine`. Replay
16
+ * is OFF; the client reuses a token until it nears expiry.
17
+ * - store invocations (§3.5): SELF-SIGNED as ORACLE_DID, resource `ixo:ucan-store`. Replay is ON
18
+ * (single-use), so `mintInvocation` is called fresh every store request and NEVER cached.
19
+ * - bot invocations (§3.6): DELEGATION-BACKED (proofs:[owner→oracle]) as ORACLE_DID, resource
20
+ * `ixo:matrix-claims-bot`. Replay is OFF, so `mintBotInvocation` caches the token per
21
+ * (botDid, delegation) until it expires.
22
+ * - VFS claims-lane invocations (vfs.ts): SELF-SIGNED as ORACLE_DID, `fs/read` on
23
+ * `ixo:filesystem/<entity>/.claims/<collection>`. Replay is ON (single-use), so one is minted
24
+ * per request and NEVER cached.
25
+ * - the facilitator delegation (`mintDelegation`, routes/v1/api/admin-facilitator.ts): a
26
+ * DELEGATION, as did:web, to an operator's did:ixo — one `operators/<action>` per requested
27
+ * action on the card facilitator, never `*`. A nonce on every mint, NEVER cached: each one is a fresh short-lived credential.
28
+ */
29
+ import type { Capability, Delegation } from "@ixo/ucan";
30
+ import type { Config } from "../../config.js";
31
+ import { type IssuerKeys } from "./delegation-verify.js";
32
+ /** `did:web:<ORACLE_HOSTNAME>` — encoded exactly as identity.ts publishes it. */
33
+ export declare function oracleWebDid(config: Pick<Config, "ORACLE_HOSTNAME">): string;
34
+ export interface MintOptions {
35
+ audience: string;
36
+ capability: Capability;
37
+ /** Which of our DIDs signs — default our did:web; `ORACLE_DID` where the counterparty knows us by chain identity (header). */
38
+ issuer?: string;
39
+ /** Empty/omitted => self-signed (act as the oracle). Present => act as the delegation root. */
40
+ proofs?: Delegation[];
41
+ ttlSec?: number;
42
+ /**
43
+ * Make the token unique. Ed25519 signing is deterministic, so two mints in the same second with
44
+ * identical fields produce BYTE-IDENTICAL tokens — a replay-protected service (the UCAN Store)
45
+ * rejects the second as a replay. Set for single-use invocations minted concurrently.
46
+ */
47
+ unique?: boolean;
48
+ }
49
+ export interface MintedInvocation {
50
+ token: string;
51
+ /** Unix seconds the invocation expires at. */
52
+ exp: number;
53
+ }
54
+ /** Mint + serialize a single invocation. Callers that are single-use (store) MUST NOT cache this. */
55
+ export declare function mintInvocation(config: Config, opts: MintOptions): Promise<MintedInvocation>;
56
+ export interface MintDelegationOptions {
57
+ audience: string;
58
+ capabilities: Capability[];
59
+ ttlSec: number;
60
+ /** The cap on `exp − nbf` — the lifetime a verifier measures, backdate included. */
61
+ maxLifetimeSec: number;
62
+ }
63
+ export interface MintedDelegation {
64
+ /** The base64 CAR — the same encoding as a console role grant. */
65
+ car: string;
66
+ cid: string;
67
+ /** Unix seconds the delegation expires at. */
68
+ exp: number;
69
+ }
70
+ /** Mint + serialize a delegation from our did:web. Always a nonce (see MintOptions.unique): two
71
+ * mints in one second are two credentials, never one CID. Always an `nbf` — the issue time less
72
+ * NBF_BACKDATE_SEC, from the same clock read as `exp` — and `exp = min(issue + ttl, nbf +
73
+ * maxLifetime)`: the facilitator (S10) refuses a grant without `nbf` or whose `exp − nbf` is
74
+ * longer than an hour. Never cache it. */
75
+ export declare function mintDelegation(config: Config, opts: MintDelegationOptions): Promise<MintedDelegation>;
76
+ /**
77
+ * Verify a caller-supplied owner→oracle delegation CAR before persisting it (§6): parseable, issued
78
+ * by `expectedIssuer` (the chain owner), addressed to OUR oracle, scoped to the claim bot, not
79
+ * expired — and SIGNED by that issuer (delegation-verify.ts: `parseDelegation` checks no signature,
80
+ * so without it any evaluate-grant holder could store a forgery naming the owner). Anything off →
81
+ * 400 — we never store a delegation we couldn't use or didn't get from its rightful owner; only an
82
+ * unreachable Blocksync is a 503. The field checks run first: they are free, and a CAR that fails
83
+ * them never costs a DID resolution. The returned expiry is the verified CAR's own.
84
+ */
85
+ export declare function verifyOwnerDelegation(config: Config, car: string, expectedIssuer: string,
86
+ /** The issuer's keys, resolved once by a caller verifying several CARs (ucan-store.ts). */
87
+ issuerKeys?: () => Promise<IssuerKeys>): Promise<{
88
+ car: string;
89
+ expiresAt: Date | null;
90
+ }>;
91
+ /**
92
+ * Mint (and cache per (botDid, delegation)) a delegation-backed invocation for the claim bot.
93
+ * The `delegationCar` is the owner→oracle delegation retrieved from the UCAN Store (§3.5).
94
+ */
95
+ export declare function mintBotInvocation(config: Config, cache: KVNamespace, botDid: string, delegationCar: string): Promise<string>;
96
+ //# sourceMappingURL=ucan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ucan.d.ts","sourceRoot":"","sources":["../../../src/lib/ixo/ucan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAU,MAAM,WAAW,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,OAAO,EAAE,KAAK,UAAU,EAA6B,MAAM,qBAAqB,CAAC;AAGjF,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAAG,MAAM,CAE5E;AAmCD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,8HAA8H;IAC9H,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+FAA+F;IAC/F,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qGAAqG;AACrG,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkBjG;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,oFAAoF;IACpF,cAAc,EAAE,MAAM,CAAC;CACxB;AAMD,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;2CAI2C;AAC3C,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAmB3B;AAID;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM;AACtB,2FAA2F;AAC3F,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,GACrC,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,CAAC,CA0ClD;AASD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAgDjB"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Minting UCAN invocations as the Evaluation Oracle.
3
+ *
4
+ * ONE key, two DIDs. `signerFromMnemonic(SERVICE_ED25519_MNEMONIC)` derives the same Ed25519 key
5
+ * as identity.ts (SHA256(mnemonic) → seed), so whichever DID is stamped on the signer, the key is
6
+ * the one `/.well-known/did.json` publishes. The DEFAULT issuer is our did:web
7
+ * (`did:web:<ORACLE_HOSTNAME>`, docs/ENGINE-CONTRACT.md): the engine's validator resolves it from
8
+ * that document, so a cloned kit needs no on-chain IID key. `ORACLE_DID` (did:ixo) is the issuer
9
+ * ONLY where the counterparty knows us by our chain identity: the owner→oracle delegation names it
10
+ * as its audience (so the bot invocation that carries it as proof must be issued by that same
11
+ * principal), the UCAN Store indexes our inbox by it, and the VFS matches our evaluate grant by
12
+ * its address. Four invocation shapes are minted (see pull-claim-spec §13, replay differs), plus
13
+ * one delegation:
14
+ *
15
+ * - engine invocations (lib/engine): SELF-SIGNED as did:web, resource `ixo:eval-engine`. Replay
16
+ * is OFF; the client reuses a token until it nears expiry.
17
+ * - store invocations (§3.5): SELF-SIGNED as ORACLE_DID, resource `ixo:ucan-store`. Replay is ON
18
+ * (single-use), so `mintInvocation` is called fresh every store request and NEVER cached.
19
+ * - bot invocations (§3.6): DELEGATION-BACKED (proofs:[owner→oracle]) as ORACLE_DID, resource
20
+ * `ixo:matrix-claims-bot`. Replay is OFF, so `mintBotInvocation` caches the token per
21
+ * (botDid, delegation) until it expires.
22
+ * - VFS claims-lane invocations (vfs.ts): SELF-SIGNED as ORACLE_DID, `fs/read` on
23
+ * `ixo:filesystem/<entity>/.claims/<collection>`. Replay is ON (single-use), so one is minted
24
+ * per request and NEVER cached.
25
+ * - the facilitator delegation (`mintDelegation`, routes/v1/api/admin-facilitator.ts): a
26
+ * DELEGATION, as did:web, to an operator's did:ixo — one `operators/<action>` per requested
27
+ * action on the card facilitator, never `*`. A nonce on every mint, NEVER cached: each one is a fresh short-lived credential.
28
+ */
29
+ import { AppError } from "../errors.js";
30
+ import { sha256Hex } from "../hash.js";
31
+ import { countCache, readCache } from "../metrics.js";
32
+ import { verifyDelegationSignature } from "./delegation-verify.js";
33
+ import { webDidOf } from "./web-did.js";
34
+ /** `did:web:<ORACLE_HOSTNAME>` — encoded exactly as identity.ts publishes it. */
35
+ export function oracleWebDid(config) {
36
+ return webDidOf(config.ORACLE_HOSTNAME);
37
+ }
38
+ // Memoize the signer per (mnemonic, did) so we derive the Ed25519 key once per isolate per DID.
39
+ const signerCache = new Map();
40
+ function getSigner(config, did) {
41
+ const mnemonic = config.SERVICE_ED25519_MNEMONIC;
42
+ if (!mnemonic) {
43
+ // Loud 500 — an expected failure of config, not of the request (spec §11 row 8).
44
+ throw AppError.internal("Oracle signing identity not configured (SERVICE_ED25519_MNEMONIC)");
45
+ }
46
+ const key = `${did}::${mnemonic}`;
47
+ let signer = signerCache.get(key);
48
+ if (!signer) {
49
+ signer = (async () => {
50
+ const { signerFromMnemonic } = await import("@ixo/ucan");
51
+ // `withDID` stamps any DID on the key at runtime; only the parameter TYPE is narrower.
52
+ const { signer } = await signerFromMnemonic(mnemonic, did);
53
+ return signer;
54
+ })();
55
+ signerCache.set(key, signer);
56
+ // A failed derivation is not memoized: the next mint tries again instead of replaying it.
57
+ const pending = signer;
58
+ pending.catch(() => {
59
+ if (signerCache.get(key) === pending)
60
+ signerCache.delete(key);
61
+ });
62
+ }
63
+ return signer;
64
+ }
65
+ const DEFAULT_TTL_SEC = 300;
66
+ /** Mint + serialize a single invocation. Callers that are single-use (store) MUST NOT cache this. */
67
+ export async function mintInvocation(config, opts) {
68
+ const { createInvocation, serializeInvocation } = await import("@ixo/ucan");
69
+ const signer = await getSigner(config, opts.issuer ?? oracleWebDid(config));
70
+ const exp = Math.floor(Date.now() / 1000) + (opts.ttlSec ?? DEFAULT_TTL_SEC);
71
+ try {
72
+ const inv = await createInvocation({
73
+ issuer: signer,
74
+ audience: opts.audience,
75
+ capability: opts.capability,
76
+ proofs: opts.proofs,
77
+ expiration: exp,
78
+ // A random fact (UCAN §3.2.4) guarantees a distinct CID per mint — see MintOptions.unique.
79
+ ...(opts.unique ? { facts: [{ nonce: crypto.randomUUID() }] } : {}),
80
+ });
81
+ return { token: await serializeInvocation(inv), exp };
82
+ }
83
+ catch (err) {
84
+ throw AppError.internal("Failed to mint UCAN invocation", err);
85
+ }
86
+ }
87
+ /** How far `nbf` is backdated: ucanto accepts only `now > nbf` (strict), so an `nbf` of the issue
88
+ * time is refused for the rest of that second and under any clock skew. */
89
+ const NBF_BACKDATE_SEC = 60;
90
+ /** Mint + serialize a delegation from our did:web. Always a nonce (see MintOptions.unique): two
91
+ * mints in one second are two credentials, never one CID. Always an `nbf` — the issue time less
92
+ * NBF_BACKDATE_SEC, from the same clock read as `exp` — and `exp = min(issue + ttl, nbf +
93
+ * maxLifetime)`: the facilitator (S10) refuses a grant without `nbf` or whose `exp − nbf` is
94
+ * longer than an hour. Never cache it. */
95
+ export async function mintDelegation(config, opts) {
96
+ const { createDelegation, serializeDelegation } = await import("@ixo/ucan");
97
+ const signer = await getSigner(config, oracleWebDid(config));
98
+ const issued = Math.floor(Date.now() / 1000);
99
+ const nbf = issued - NBF_BACKDATE_SEC;
100
+ const exp = Math.min(issued + opts.ttlSec, nbf + opts.maxLifetimeSec);
101
+ try {
102
+ const d = await createDelegation({
103
+ issuer: signer,
104
+ audience: opts.audience,
105
+ capabilities: opts.capabilities,
106
+ notBefore: nbf,
107
+ expiration: exp,
108
+ facts: [{ nonce: crypto.randomUUID() }],
109
+ });
110
+ return { car: await serializeDelegation(d), cid: d.cid.toString(), exp };
111
+ }
112
+ catch (err) {
113
+ throw AppError.internal("Failed to mint UCAN delegation", err);
114
+ }
115
+ }
116
+ // --- Owner delegation verification (register-time) ----------------------------------------------
117
+ /**
118
+ * Verify a caller-supplied owner→oracle delegation CAR before persisting it (§6): parseable, issued
119
+ * by `expectedIssuer` (the chain owner), addressed to OUR oracle, scoped to the claim bot, not
120
+ * expired — and SIGNED by that issuer (delegation-verify.ts: `parseDelegation` checks no signature,
121
+ * so without it any evaluate-grant holder could store a forgery naming the owner). Anything off →
122
+ * 400 — we never store a delegation we couldn't use or didn't get from its rightful owner; only an
123
+ * unreachable Blocksync is a 503. The field checks run first: they are free, and a CAR that fails
124
+ * them never costs a DID resolution. The returned expiry is the verified CAR's own.
125
+ */
126
+ export async function verifyOwnerDelegation(config, car, expectedIssuer,
127
+ /** The issuer's keys, resolved once by a caller verifying several CARs (ucan-store.ts). */
128
+ issuerKeys) {
129
+ const { ORACLE_DID } = config;
130
+ if (!ORACLE_DID)
131
+ throw AppError.internal("ORACLE_DID not configured");
132
+ const { parseDelegation } = await import("@ixo/ucan");
133
+ let d;
134
+ try {
135
+ d = (await parseDelegation(car));
136
+ }
137
+ catch (err) {
138
+ throw AppError.badRequest("delegation is not a valid UCAN CAR", { cause: String(err) });
139
+ }
140
+ if (d.issuer?.did() !== expectedIssuer) {
141
+ throw AppError.badRequest("delegation must be issued by the registering wallet");
142
+ }
143
+ // A ROOT: the claim bot reads authority off the chain's root, so a proof inside would make
144
+ // someone other than the owner the root — whoever signed it. The portal and the CLI mint roots.
145
+ if (d.proofs?.length) {
146
+ throw AppError.badRequest("delegation must be the owner's own root delegation (no proofs)");
147
+ }
148
+ if (d.audience?.did() !== ORACLE_DID) {
149
+ throw AppError.badRequest("delegation must be addressed to the evaluation oracle");
150
+ }
151
+ if (!d.capabilities?.some((cap) => cap.with === CLAIM_BOT_RESOURCE)) {
152
+ throw AppError.badRequest(`delegation must grant the ${CLAIM_BOT_RESOURCE} resource`);
153
+ }
154
+ // No `exp` is accepted: the owner chose a delegation that never expires, and it is signed (below).
155
+ // It is never refreshed from the store, but it IS re-verified on use (lib/ixo/index.ts).
156
+ const exp = typeof d.expiration === "number" && Number.isFinite(d.expiration) ? d.expiration : null;
157
+ if (exp !== null && exp <= Math.floor(Date.now() / 1000)) {
158
+ throw AppError.badRequest("delegation is already expired");
159
+ }
160
+ await verifyDelegationSignature(config, car, expectedIssuer, issuerKeys);
161
+ return { car, expiresAt: exp ? new Date(exp * 1000) : null };
162
+ }
163
+ // --- Bot invocation (delegation-backed, reusable → cached) --------------------------------------
164
+ const CLAIM_BOT_RESOURCE = "ixo:matrix-claims-bot";
165
+ // Bot tokens are reusable until expiry; 1h keeps them fresh while surviving a burst of pulls.
166
+ const BOT_TTL_SEC = 3600;
167
+ const l1BotTokens = new Map();
168
+ /**
169
+ * Mint (and cache per (botDid, delegation)) a delegation-backed invocation for the claim bot.
170
+ * The `delegationCar` is the owner→oracle delegation retrieved from the UCAN Store (§3.5).
171
+ */
172
+ export async function mintBotInvocation(config, cache, botDid, delegationCar) {
173
+ const now = Math.floor(Date.now() / 1000);
174
+ const cacheKey = `bot-inv:${botDid}:${await sha256Hex(delegationCar)}`;
175
+ const l1 = l1BotTokens.get(cacheKey);
176
+ countCache("bot-inv-l1", !!l1 && l1.exp - 30 > now);
177
+ if (l1 && l1.exp - 30 > now)
178
+ return l1.token;
179
+ const l2 = await readCache("bot-inv", () => cache.get(cacheKey, "json"));
180
+ if (l2 && l2.exp - 30 > now) {
181
+ l1BotTokens.set(cacheKey, l2);
182
+ return l2.token;
183
+ }
184
+ const { parseDelegation } = await import("@ixo/ucan");
185
+ let proof;
186
+ try {
187
+ proof = await parseDelegation(delegationCar);
188
+ }
189
+ catch (err) {
190
+ throw AppError.internal("Owner delegation is not a valid UCAN CAR", err);
191
+ }
192
+ // An invocation must never outlive its proof: cap the token (and thus the cache) at the
193
+ // delegation's own expiry, so a delegation nearing its end can't leave behind a cached token the
194
+ // bot would reject mid-pull.
195
+ const proofExp = proof.expiration;
196
+ const ttlCap = typeof proofExp === "number" && Number.isFinite(proofExp)
197
+ ? Math.min(BOT_TTL_SEC, proofExp - now)
198
+ : BOT_TTL_SEC;
199
+ if (ttlCap <= 30) {
200
+ throw AppError.forbidden("Owner delegation is expired — the owner must re-register");
201
+ }
202
+ const minted = await mintInvocation(config, {
203
+ // The proof's audience is ORACLE_DID — the invocation carrying it must be issued by that principal.
204
+ issuer: config.ORACLE_DID,
205
+ audience: botDid,
206
+ capability: { can: "*", with: CLAIM_BOT_RESOURCE },
207
+ proofs: [proof],
208
+ ttlSec: ttlCap,
209
+ });
210
+ l1BotTokens.set(cacheKey, minted);
211
+ await cache
212
+ .put(cacheKey, JSON.stringify(minted), { expirationTtl: Math.max(minted.exp - now, 60) })
213
+ .catch(() => { });
214
+ return minted.token;
215
+ }
216
+ //# sourceMappingURL=ucan.js.map