@ixo/decision-oracle 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1117) hide show
  1. package/README.md +794 -2
  2. package/dist/act.d.ts +87 -0
  3. package/dist/act.d.ts.map +1 -0
  4. package/dist/act.js +20 -0
  5. package/dist/act.js.map +1 -0
  6. package/dist/app.d.ts +22 -0
  7. package/dist/app.d.ts.map +1 -0
  8. package/dist/app.js +128 -0
  9. package/dist/app.js.map +1 -0
  10. package/dist/c2pa.wasm +0 -0
  11. package/dist/cli/commands/api.d.ts +50 -0
  12. package/dist/cli/commands/api.d.ts.map +1 -0
  13. package/dist/cli/commands/api.js +737 -0
  14. package/dist/cli/commands/api.js.map +1 -0
  15. package/dist/cli/commands/create-collection.d.ts +40 -0
  16. package/dist/cli/commands/create-collection.d.ts.map +1 -0
  17. package/dist/cli/commands/create-collection.js +318 -0
  18. package/dist/cli/commands/create-collection.js.map +1 -0
  19. package/dist/cli/commands/create-deed.d.ts +31 -0
  20. package/dist/cli/commands/create-deed.d.ts.map +1 -0
  21. package/dist/cli/commands/create-deed.js +208 -0
  22. package/dist/cli/commands/create-deed.js.map +1 -0
  23. package/dist/cli/commands/delegation.d.ts +26 -0
  24. package/dist/cli/commands/delegation.d.ts.map +1 -0
  25. package/dist/cli/commands/delegation.js +162 -0
  26. package/dist/cli/commands/delegation.js.map +1 -0
  27. package/dist/cli/commands/derive.d.ts +22 -0
  28. package/dist/cli/commands/derive.d.ts.map +1 -0
  29. package/dist/cli/commands/derive.js +53 -0
  30. package/dist/cli/commands/derive.js.map +1 -0
  31. package/dist/cli/commands/engine.d.ts +25 -0
  32. package/dist/cli/commands/engine.d.ts.map +1 -0
  33. package/dist/cli/commands/engine.js +107 -0
  34. package/dist/cli/commands/engine.js.map +1 -0
  35. package/dist/cli/commands/erase.d.ts +17 -0
  36. package/dist/cli/commands/erase.d.ts.map +1 -0
  37. package/dist/cli/commands/erase.js +117 -0
  38. package/dist/cli/commands/erase.js.map +1 -0
  39. package/dist/cli/commands/facts-run.d.ts +30 -0
  40. package/dist/cli/commands/facts-run.d.ts.map +1 -0
  41. package/dist/cli/commands/facts-run.js +409 -0
  42. package/dist/cli/commands/facts-run.js.map +1 -0
  43. package/dist/cli/commands/facts-scaffold.d.ts +22 -0
  44. package/dist/cli/commands/facts-scaffold.d.ts.map +1 -0
  45. package/dist/cli/commands/facts-scaffold.js +208 -0
  46. package/dist/cli/commands/facts-scaffold.js.map +1 -0
  47. package/dist/cli/commands/init.d.ts +18 -0
  48. package/dist/cli/commands/init.d.ts.map +1 -0
  49. package/dist/cli/commands/init.js +34 -0
  50. package/dist/cli/commands/init.js.map +1 -0
  51. package/dist/cli/commands/login.d.ts +9 -0
  52. package/dist/cli/commands/login.d.ts.map +1 -0
  53. package/dist/cli/commands/login.js +16 -0
  54. package/dist/cli/commands/login.js.map +1 -0
  55. package/dist/cli/commands/logout.d.ts +10 -0
  56. package/dist/cli/commands/logout.d.ts.map +1 -0
  57. package/dist/cli/commands/logout.js +28 -0
  58. package/dist/cli/commands/logout.js.map +1 -0
  59. package/dist/cli/commands/manifest.d.ts +12 -0
  60. package/dist/cli/commands/manifest.d.ts.map +1 -0
  61. package/dist/cli/commands/manifest.js +48 -0
  62. package/dist/cli/commands/manifest.js.map +1 -0
  63. package/dist/cli/commands/oracle-init.d.ts +48 -0
  64. package/dist/cli/commands/oracle-init.d.ts.map +1 -0
  65. package/dist/cli/commands/oracle-init.js +1122 -0
  66. package/dist/cli/commands/oracle-init.js.map +1 -0
  67. package/dist/cli/commands/org.d.ts +28 -0
  68. package/dist/cli/commands/org.d.ts.map +1 -0
  69. package/dist/cli/commands/org.js +309 -0
  70. package/dist/cli/commands/org.js.map +1 -0
  71. package/dist/cli/commands/protocol-review.d.ts +20 -0
  72. package/dist/cli/commands/protocol-review.d.ts.map +1 -0
  73. package/dist/cli/commands/protocol-review.js +162 -0
  74. package/dist/cli/commands/protocol-review.js.map +1 -0
  75. package/dist/cli/commands/publish-protocol.d.ts +43 -0
  76. package/dist/cli/commands/publish-protocol.d.ts.map +1 -0
  77. package/dist/cli/commands/publish-protocol.js +345 -0
  78. package/dist/cli/commands/publish-protocol.js.map +1 -0
  79. package/dist/cli/commands/register.d.ts +16 -0
  80. package/dist/cli/commands/register.d.ts.map +1 -0
  81. package/dist/cli/commands/register.js +54 -0
  82. package/dist/cli/commands/register.js.map +1 -0
  83. package/dist/cli/commands/relink.d.ts +11 -0
  84. package/dist/cli/commands/relink.d.ts.map +1 -0
  85. package/dist/cli/commands/relink.js +36 -0
  86. package/dist/cli/commands/relink.js.map +1 -0
  87. package/dist/cli/commands/rubric-fetch-form.d.ts +16 -0
  88. package/dist/cli/commands/rubric-fetch-form.d.ts.map +1 -0
  89. package/dist/cli/commands/rubric-fetch-form.js +83 -0
  90. package/dist/cli/commands/rubric-fetch-form.js.map +1 -0
  91. package/dist/cli/commands/rubric-validate.d.ts +72 -0
  92. package/dist/cli/commands/rubric-validate.d.ts.map +1 -0
  93. package/dist/cli/commands/rubric-validate.js +163 -0
  94. package/dist/cli/commands/rubric-validate.js.map +1 -0
  95. package/dist/cli/commands/scan.d.ts +13 -0
  96. package/dist/cli/commands/scan.d.ts.map +1 -0
  97. package/dist/cli/commands/scan.js +39 -0
  98. package/dist/cli/commands/scan.js.map +1 -0
  99. package/dist/cli/commands/skills.d.ts +11 -0
  100. package/dist/cli/commands/skills.d.ts.map +1 -0
  101. package/dist/cli/commands/skills.js +19 -0
  102. package/dist/cli/commands/skills.js.map +1 -0
  103. package/dist/cli/commands/submit-claim.d.ts +25 -0
  104. package/dist/cli/commands/submit-claim.d.ts.map +1 -0
  105. package/dist/cli/commands/submit-claim.js +155 -0
  106. package/dist/cli/commands/submit-claim.js.map +1 -0
  107. package/dist/cli/index.d.ts +15 -0
  108. package/dist/cli/index.d.ts.map +1 -0
  109. package/dist/cli/index.js +206 -0
  110. package/dist/cli/index.js.map +1 -0
  111. package/dist/cli/lib/agent-card-schema.d.ts +8 -0
  112. package/dist/cli/lib/agent-card-schema.d.ts.map +1 -0
  113. package/dist/cli/lib/agent-card-schema.js +169 -0
  114. package/dist/cli/lib/agent-card-schema.js.map +1 -0
  115. package/dist/cli/lib/ai-rest.d.ts +12 -0
  116. package/dist/cli/lib/ai-rest.d.ts.map +1 -0
  117. package/dist/cli/lib/ai-rest.js +36 -0
  118. package/dist/cli/lib/ai-rest.js.map +1 -0
  119. package/dist/cli/lib/args.d.ts +33 -0
  120. package/dist/cli/lib/args.d.ts.map +1 -0
  121. package/dist/cli/lib/args.js +24 -0
  122. package/dist/cli/lib/args.js.map +1 -0
  123. package/dist/cli/lib/authhub.d.ts +7 -0
  124. package/dist/cli/lib/authhub.d.ts.map +1 -0
  125. package/dist/cli/lib/authhub.js +210 -0
  126. package/dist/cli/lib/authhub.js.map +1 -0
  127. package/dist/cli/lib/chain.d.ts +264 -0
  128. package/dist/cli/lib/chain.d.ts.map +1 -0
  129. package/dist/cli/lib/chain.js +584 -0
  130. package/dist/cli/lib/chain.js.map +1 -0
  131. package/dist/cli/lib/devvars.d.ts +59 -0
  132. package/dist/cli/lib/devvars.d.ts.map +1 -0
  133. package/dist/cli/lib/devvars.js +206 -0
  134. package/dist/cli/lib/devvars.js.map +1 -0
  135. package/dist/cli/lib/engine.d.ts +54 -0
  136. package/dist/cli/lib/engine.d.ts.map +1 -0
  137. package/dist/cli/lib/engine.js +112 -0
  138. package/dist/cli/lib/engine.js.map +1 -0
  139. package/dist/cli/lib/identity-cards.d.ts +188 -0
  140. package/dist/cli/lib/identity-cards.d.ts.map +1 -0
  141. package/dist/cli/lib/identity-cards.js +261 -0
  142. package/dist/cli/lib/identity-cards.js.map +1 -0
  143. package/dist/cli/lib/matrix-account.d.ts +79 -0
  144. package/dist/cli/lib/matrix-account.d.ts.map +1 -0
  145. package/dist/cli/lib/matrix-account.js +228 -0
  146. package/dist/cli/lib/matrix-account.js.map +1 -0
  147. package/dist/cli/lib/oracle-account.d.ts +108 -0
  148. package/dist/cli/lib/oracle-account.d.ts.map +1 -0
  149. package/dist/cli/lib/oracle-account.js +207 -0
  150. package/dist/cli/lib/oracle-account.js.map +1 -0
  151. package/dist/cli/lib/project.d.ts +22 -0
  152. package/dist/cli/lib/project.d.ts.map +1 -0
  153. package/dist/cli/lib/project.js +62 -0
  154. package/dist/cli/lib/project.js.map +1 -0
  155. package/dist/cli/lib/session.d.ts +109 -0
  156. package/dist/cli/lib/session.d.ts.map +1 -0
  157. package/dist/cli/lib/session.js +354 -0
  158. package/dist/cli/lib/session.js.map +1 -0
  159. package/dist/cli/lib/workorder.d.ts +57 -0
  160. package/dist/cli/lib/workorder.d.ts.map +1 -0
  161. package/dist/cli/lib/workorder.js +101 -0
  162. package/dist/cli/lib/workorder.js.map +1 -0
  163. package/dist/config.d.ts +221 -0
  164. package/dist/config.d.ts.map +1 -0
  165. package/dist/config.js +431 -0
  166. package/dist/config.js.map +1 -0
  167. package/dist/context.d.ts +88 -0
  168. package/dist/context.d.ts.map +1 -0
  169. package/dist/context.js +9 -0
  170. package/dist/context.js.map +1 -0
  171. package/dist/contracts/api.d.ts +3367 -0
  172. package/dist/contracts/api.d.ts.map +1 -0
  173. package/dist/contracts/api.js +1303 -0
  174. package/dist/contracts/api.js.map +1 -0
  175. package/dist/contracts/capabilities.d.ts +126 -0
  176. package/dist/contracts/capabilities.d.ts.map +1 -0
  177. package/dist/contracts/capabilities.js +164 -0
  178. package/dist/contracts/capabilities.js.map +1 -0
  179. package/dist/contracts/claim-source.d.ts +98 -0
  180. package/dist/contracts/claim-source.d.ts.map +1 -0
  181. package/dist/contracts/claim-source.js +17 -0
  182. package/dist/contracts/claim-source.js.map +1 -0
  183. package/dist/contracts/errors.d.ts +150 -0
  184. package/dist/contracts/errors.d.ts.map +1 -0
  185. package/dist/contracts/errors.js +121 -0
  186. package/dist/contracts/errors.js.map +1 -0
  187. package/dist/contracts/index.d.ts +15 -0
  188. package/dist/contracts/index.d.ts.map +1 -0
  189. package/dist/contracts/index.js +11 -0
  190. package/dist/contracts/index.js.map +1 -0
  191. package/dist/contracts/payment-gate.d.ts +129 -0
  192. package/dist/contracts/payment-gate.d.ts.map +1 -0
  193. package/dist/contracts/payment-gate.js +24 -0
  194. package/dist/contracts/payment-gate.js.map +1 -0
  195. package/dist/contracts/start-api-claim.d.ts +90 -0
  196. package/dist/contracts/start-api-claim.d.ts.map +1 -0
  197. package/dist/contracts/start-api-claim.js +22 -0
  198. package/dist/contracts/start-api-claim.js.map +1 -0
  199. package/dist/contracts/webhooks.d.ts +1487 -0
  200. package/dist/contracts/webhooks.d.ts.map +1 -0
  201. package/dist/contracts/webhooks.js +71 -0
  202. package/dist/contracts/webhooks.js.map +1 -0
  203. package/dist/contracts/work-order.d.ts +29 -0
  204. package/dist/contracts/work-order.d.ts.map +1 -0
  205. package/dist/contracts/work-order.js +12 -0
  206. package/dist/contracts/work-order.js.map +1 -0
  207. package/dist/cron/ai-cost.d.ts +29 -0
  208. package/dist/cron/ai-cost.d.ts.map +1 -0
  209. package/dist/cron/ai-cost.js +80 -0
  210. package/dist/cron/ai-cost.js.map +1 -0
  211. package/dist/cron/api-lane.d.ts +39 -0
  212. package/dist/cron/api-lane.d.ts.map +1 -0
  213. package/dist/cron/api-lane.js +203 -0
  214. package/dist/cron/api-lane.js.map +1 -0
  215. package/dist/cron/backlog.d.ts +50 -0
  216. package/dist/cron/backlog.d.ts.map +1 -0
  217. package/dist/cron/backlog.js +115 -0
  218. package/dist/cron/backlog.js.map +1 -0
  219. package/dist/cron/billing.d.ts +11 -0
  220. package/dist/cron/billing.d.ts.map +1 -0
  221. package/dist/cron/billing.js +69 -0
  222. package/dist/cron/billing.js.map +1 -0
  223. package/dist/cron/collection.d.ts +50 -0
  224. package/dist/cron/collection.d.ts.map +1 -0
  225. package/dist/cron/collection.js +118 -0
  226. package/dist/cron/collection.js.map +1 -0
  227. package/dist/cron/funding.d.ts +16 -0
  228. package/dist/cron/funding.d.ts.map +1 -0
  229. package/dist/cron/funding.js +262 -0
  230. package/dist/cron/funding.js.map +1 -0
  231. package/dist/cron/payer-billing.d.ts +38 -0
  232. package/dist/cron/payer-billing.d.ts.map +1 -0
  233. package/dist/cron/payer-billing.js +119 -0
  234. package/dist/cron/payer-billing.js.map +1 -0
  235. package/dist/cron/scan.d.ts +43 -0
  236. package/dist/cron/scan.d.ts.map +1 -0
  237. package/dist/cron/scan.js +250 -0
  238. package/dist/cron/scan.js.map +1 -0
  239. package/dist/db/client.d.ts +14 -0
  240. package/dist/db/client.d.ts.map +1 -0
  241. package/dist/db/client.js +14 -0
  242. package/dist/db/client.js.map +1 -0
  243. package/dist/db/index.d.ts +7 -0
  244. package/dist/db/index.d.ts.map +1 -0
  245. package/dist/db/index.js +7 -0
  246. package/dist/db/index.js.map +1 -0
  247. package/dist/db/schema.d.ts +6738 -0
  248. package/dist/db/schema.d.ts.map +1 -0
  249. package/dist/db/schema.js +1433 -0
  250. package/dist/db/schema.js.map +1 -0
  251. package/dist/define-oracle.d.ts +32 -0
  252. package/dist/define-oracle.d.ts.map +1 -0
  253. package/dist/define-oracle.js +80 -0
  254. package/dist/define-oracle.js.map +1 -0
  255. package/dist/dev-oracle.d.ts +9 -0
  256. package/dist/dev-oracle.d.ts.map +1 -0
  257. package/dist/dev-oracle.js +19 -0
  258. package/dist/dev-oracle.js.map +1 -0
  259. package/dist/dev-worker.d.ts +10 -0
  260. package/dist/dev-worker.d.ts.map +1 -0
  261. package/dist/dev-worker.js +12 -0
  262. package/dist/dev-worker.js.map +1 -0
  263. package/dist/env.d.ts +146 -0
  264. package/dist/env.d.ts.map +1 -0
  265. package/dist/env.js +10 -0
  266. package/dist/env.js.map +1 -0
  267. package/dist/facts/exif.d.ts +43 -0
  268. package/dist/facts/exif.d.ts.map +1 -0
  269. package/dist/facts/exif.js +224 -0
  270. package/dist/facts/exif.js.map +1 -0
  271. package/dist/facts/fact.d.ts +62 -0
  272. package/dist/facts/fact.d.ts.map +1 -0
  273. package/dist/facts/fact.js +105 -0
  274. package/dist/facts/fact.js.map +1 -0
  275. package/dist/facts/geo.d.ts +55 -0
  276. package/dist/facts/geo.d.ts.map +1 -0
  277. package/dist/facts/geo.js +267 -0
  278. package/dist/facts/geo.js.map +1 -0
  279. package/dist/facts/index.d.ts +31 -0
  280. package/dist/facts/index.d.ts.map +1 -0
  281. package/dist/facts/index.js +27 -0
  282. package/dist/facts/index.js.map +1 -0
  283. package/dist/facts/linked-doc.d.ts +60 -0
  284. package/dist/facts/linked-doc.d.ts.map +1 -0
  285. package/dist/facts/linked-doc.js +101 -0
  286. package/dist/facts/linked-doc.js.map +1 -0
  287. package/dist/facts/types.d.ts +278 -0
  288. package/dist/facts/types.d.ts.map +1 -0
  289. package/dist/facts/types.js +19 -0
  290. package/dist/facts/types.js.map +1 -0
  291. package/dist/index.d.ts +25 -0
  292. package/dist/index.d.ts.map +1 -0
  293. package/dist/index.js +19 -0
  294. package/dist/index.js.map +1 -0
  295. package/dist/lib/api-lane/accept.d.ts +29 -0
  296. package/dist/lib/api-lane/accept.d.ts.map +1 -0
  297. package/dist/lib/api-lane/accept.js +218 -0
  298. package/dist/lib/api-lane/accept.js.map +1 -0
  299. package/dist/lib/api-lane/claim-list.d.ts +44 -0
  300. package/dist/lib/api-lane/claim-list.d.ts.map +1 -0
  301. package/dist/lib/api-lane/claim-list.js +92 -0
  302. package/dist/lib/api-lane/claim-list.js.map +1 -0
  303. package/dist/lib/api-lane/company.d.ts +56 -0
  304. package/dist/lib/api-lane/company.d.ts.map +1 -0
  305. package/dist/lib/api-lane/company.js +103 -0
  306. package/dist/lib/api-lane/company.js.map +1 -0
  307. package/dist/lib/api-lane/events.d.ts +21 -0
  308. package/dist/lib/api-lane/events.d.ts.map +1 -0
  309. package/dist/lib/api-lane/events.js +111 -0
  310. package/dist/lib/api-lane/events.js.map +1 -0
  311. package/dist/lib/api-lane/ids.d.ts +39 -0
  312. package/dist/lib/api-lane/ids.d.ts.map +1 -0
  313. package/dist/lib/api-lane/ids.js +78 -0
  314. package/dist/lib/api-lane/ids.js.map +1 -0
  315. package/dist/lib/api-lane/index.d.ts +16 -0
  316. package/dist/lib/api-lane/index.d.ts.map +1 -0
  317. package/dist/lib/api-lane/index.js +16 -0
  318. package/dist/lib/api-lane/index.js.map +1 -0
  319. package/dist/lib/api-lane/linked.d.ts +264 -0
  320. package/dist/lib/api-lane/linked.d.ts.map +1 -0
  321. package/dist/lib/api-lane/linked.js +272 -0
  322. package/dist/lib/api-lane/linked.js.map +1 -0
  323. package/dist/lib/api-lane/media-type.d.ts +15 -0
  324. package/dist/lib/api-lane/media-type.d.ts.map +1 -0
  325. package/dist/lib/api-lane/media-type.js +73 -0
  326. package/dist/lib/api-lane/media-type.js.map +1 -0
  327. package/dist/lib/api-lane/member-emails.d.ts +83 -0
  328. package/dist/lib/api-lane/member-emails.d.ts.map +1 -0
  329. package/dist/lib/api-lane/member-emails.js +213 -0
  330. package/dist/lib/api-lane/member-emails.js.map +1 -0
  331. package/dist/lib/api-lane/members.d.ts +42 -0
  332. package/dist/lib/api-lane/members.d.ts.map +1 -0
  333. package/dist/lib/api-lane/members.js +75 -0
  334. package/dist/lib/api-lane/members.js.map +1 -0
  335. package/dist/lib/api-lane/notify.d.ts +47 -0
  336. package/dist/lib/api-lane/notify.d.ts.map +1 -0
  337. package/dist/lib/api-lane/notify.js +240 -0
  338. package/dist/lib/api-lane/notify.js.map +1 -0
  339. package/dist/lib/api-lane/pause.d.ts +41 -0
  340. package/dist/lib/api-lane/pause.d.ts.map +1 -0
  341. package/dist/lib/api-lane/pause.js +155 -0
  342. package/dist/lib/api-lane/pause.js.map +1 -0
  343. package/dist/lib/api-lane/record.d.ts +76 -0
  344. package/dist/lib/api-lane/record.d.ts.map +1 -0
  345. package/dist/lib/api-lane/record.js +337 -0
  346. package/dist/lib/api-lane/record.js.map +1 -0
  347. package/dist/lib/api-lane/retention.d.ts +43 -0
  348. package/dist/lib/api-lane/retention.d.ts.map +1 -0
  349. package/dist/lib/api-lane/retention.js +176 -0
  350. package/dist/lib/api-lane/retention.js.map +1 -0
  351. package/dist/lib/api-lane/review.d.ts +76 -0
  352. package/dist/lib/api-lane/review.d.ts.map +1 -0
  353. package/dist/lib/api-lane/review.js +355 -0
  354. package/dist/lib/api-lane/review.js.map +1 -0
  355. package/dist/lib/api-lane/reviewers.d.ts +109 -0
  356. package/dist/lib/api-lane/reviewers.d.ts.map +1 -0
  357. package/dist/lib/api-lane/reviewers.js +755 -0
  358. package/dist/lib/api-lane/reviewers.js.map +1 -0
  359. package/dist/lib/api-lane/source-delete.d.ts +16 -0
  360. package/dist/lib/api-lane/source-delete.d.ts.map +1 -0
  361. package/dist/lib/api-lane/source-delete.js +50 -0
  362. package/dist/lib/api-lane/source-delete.js.map +1 -0
  363. package/dist/lib/api-lane/source.d.ts +19 -0
  364. package/dist/lib/api-lane/source.d.ts.map +1 -0
  365. package/dist/lib/api-lane/source.js +226 -0
  366. package/dist/lib/api-lane/source.js.map +1 -0
  367. package/dist/lib/api-lane/submitter.d.ts +22 -0
  368. package/dist/lib/api-lane/submitter.d.ts.map +1 -0
  369. package/dist/lib/api-lane/submitter.js +34 -0
  370. package/dist/lib/api-lane/submitter.js.map +1 -0
  371. package/dist/lib/api-lane/timeline.d.ts +20 -0
  372. package/dist/lib/api-lane/timeline.d.ts.map +1 -0
  373. package/dist/lib/api-lane/timeline.js +23 -0
  374. package/dist/lib/api-lane/timeline.js.map +1 -0
  375. package/dist/lib/api-lane/webhook-crypto.d.ts +44 -0
  376. package/dist/lib/api-lane/webhook-crypto.d.ts.map +1 -0
  377. package/dist/lib/api-lane/webhook-crypto.js +103 -0
  378. package/dist/lib/api-lane/webhook-crypto.js.map +1 -0
  379. package/dist/lib/api-lane/webhooks.d.ts +117 -0
  380. package/dist/lib/api-lane/webhooks.d.ts.map +1 -0
  381. package/dist/lib/api-lane/webhooks.js +503 -0
  382. package/dist/lib/api-lane/webhooks.js.map +1 -0
  383. package/dist/lib/archive.d.ts +64 -0
  384. package/dist/lib/archive.d.ts.map +1 -0
  385. package/dist/lib/archive.js +305 -0
  386. package/dist/lib/archive.js.map +1 -0
  387. package/dist/lib/bech32.d.ts +8 -0
  388. package/dist/lib/bech32.d.ts.map +1 -0
  389. package/dist/lib/bech32.js +39 -0
  390. package/dist/lib/bech32.js.map +1 -0
  391. package/dist/lib/claim-erase.d.ts +22 -0
  392. package/dist/lib/claim-erase.d.ts.map +1 -0
  393. package/dist/lib/claim-erase.js +44 -0
  394. package/dist/lib/claim-erase.js.map +1 -0
  395. package/dist/lib/cursor.d.ts +11 -0
  396. package/dist/lib/cursor.d.ts.map +1 -0
  397. package/dist/lib/cursor.js +20 -0
  398. package/dist/lib/cursor.js.map +1 -0
  399. package/dist/lib/email/send.d.ts +43 -0
  400. package/dist/lib/email/send.d.ts.map +1 -0
  401. package/dist/lib/email/send.js +71 -0
  402. package/dist/lib/email/send.js.map +1 -0
  403. package/dist/lib/email/template.d.ts +217 -0
  404. package/dist/lib/email/template.d.ts.map +1 -0
  405. package/dist/lib/email/template.js +713 -0
  406. package/dist/lib/email/template.js.map +1 -0
  407. package/dist/lib/engine/adr36.d.ts +56 -0
  408. package/dist/lib/engine/adr36.d.ts.map +1 -0
  409. package/dist/lib/engine/adr36.js +76 -0
  410. package/dist/lib/engine/adr36.js.map +1 -0
  411. package/dist/lib/engine/client.d.ts +162 -0
  412. package/dist/lib/engine/client.d.ts.map +1 -0
  413. package/dist/lib/engine/client.js +473 -0
  414. package/dist/lib/engine/client.js.map +1 -0
  415. package/dist/lib/engine/types.d.ts +1356 -0
  416. package/dist/lib/engine/types.d.ts.map +1 -0
  417. package/dist/lib/engine/types.js +562 -0
  418. package/dist/lib/engine/types.js.map +1 -0
  419. package/dist/lib/errors.d.ts +73 -0
  420. package/dist/lib/errors.d.ts.map +1 -0
  421. package/dist/lib/errors.js +96 -0
  422. package/dist/lib/errors.js.map +1 -0
  423. package/dist/lib/facts/builder.d.ts +88 -0
  424. package/dist/lib/facts/builder.d.ts.map +1 -0
  425. package/dist/lib/facts/builder.js +239 -0
  426. package/dist/lib/facts/builder.js.map +1 -0
  427. package/dist/lib/facts/ctx.d.ts +34 -0
  428. package/dist/lib/facts/ctx.d.ts.map +1 -0
  429. package/dist/lib/facts/ctx.js +51 -0
  430. package/dist/lib/facts/ctx.js.map +1 -0
  431. package/dist/lib/facts/expected.d.ts +23 -0
  432. package/dist/lib/facts/expected.d.ts.map +1 -0
  433. package/dist/lib/facts/expected.js +16 -0
  434. package/dist/lib/facts/expected.js.map +1 -0
  435. package/dist/lib/facts/fact-cache.d.ts +469 -0
  436. package/dist/lib/facts/fact-cache.d.ts.map +1 -0
  437. package/dist/lib/facts/fact-cache.js +52 -0
  438. package/dist/lib/facts/fact-cache.js.map +1 -0
  439. package/dist/lib/facts/factset.d.ts +608 -0
  440. package/dist/lib/facts/factset.d.ts.map +1 -0
  441. package/dist/lib/facts/factset.js +226 -0
  442. package/dist/lib/facts/factset.js.map +1 -0
  443. package/dist/lib/facts/producer.d.ts +190 -0
  444. package/dist/lib/facts/producer.d.ts.map +1 -0
  445. package/dist/lib/facts/producer.js +15 -0
  446. package/dist/lib/facts/producer.js.map +1 -0
  447. package/dist/lib/facts/runner.d.ts +111 -0
  448. package/dist/lib/facts/runner.d.ts.map +1 -0
  449. package/dist/lib/facts/runner.js +438 -0
  450. package/dist/lib/facts/runner.js.map +1 -0
  451. package/dist/lib/facts/stock/ai-check.d.ts +100 -0
  452. package/dist/lib/facts/stock/ai-check.d.ts.map +1 -0
  453. package/dist/lib/facts/stock/ai-check.js +526 -0
  454. package/dist/lib/facts/stock/ai-check.js.map +1 -0
  455. package/dist/lib/facts/stock/ai-inputs.d.ts +104 -0
  456. package/dist/lib/facts/stock/ai-inputs.d.ts.map +1 -0
  457. package/dist/lib/facts/stock/ai-inputs.js +332 -0
  458. package/dist/lib/facts/stock/ai-inputs.js.map +1 -0
  459. package/dist/lib/facts/stock/ai-provider.d.ts +105 -0
  460. package/dist/lib/facts/stock/ai-provider.d.ts.map +1 -0
  461. package/dist/lib/facts/stock/ai-provider.js +250 -0
  462. package/dist/lib/facts/stock/ai-provider.js.map +1 -0
  463. package/dist/lib/facts/stock/ai-unique.d.ts +85 -0
  464. package/dist/lib/facts/stock/ai-unique.d.ts.map +1 -0
  465. package/dist/lib/facts/stock/ai-unique.js +208 -0
  466. package/dist/lib/facts/stock/ai-unique.js.map +1 -0
  467. package/dist/lib/facts/stock/archive.d.ts +63 -0
  468. package/dist/lib/facts/stock/archive.d.ts.map +1 -0
  469. package/dist/lib/facts/stock/archive.js +349 -0
  470. package/dist/lib/facts/stock/archive.js.map +1 -0
  471. package/dist/lib/facts/stock/c2pa-trust-list.d.ts +16 -0
  472. package/dist/lib/facts/stock/c2pa-trust-list.d.ts.map +1 -0
  473. package/dist/lib/facts/stock/c2pa-trust-list.js +637 -0
  474. package/dist/lib/facts/stock/c2pa-trust-list.js.map +1 -0
  475. package/dist/lib/facts/stock/c2pa.d.ts +56 -0
  476. package/dist/lib/facts/stock/c2pa.d.ts.map +1 -0
  477. package/dist/lib/facts/stock/c2pa.js +234 -0
  478. package/dist/lib/facts/stock/c2pa.js.map +1 -0
  479. package/dist/lib/facts/stock/call.d.ts +91 -0
  480. package/dist/lib/facts/stock/call.d.ts.map +1 -0
  481. package/dist/lib/facts/stock/call.js +281 -0
  482. package/dist/lib/facts/stock/call.js.map +1 -0
  483. package/dist/lib/facts/stock/capability.d.ts +39 -0
  484. package/dist/lib/facts/stock/capability.d.ts.map +1 -0
  485. package/dist/lib/facts/stock/capability.js +59 -0
  486. package/dist/lib/facts/stock/capability.js.map +1 -0
  487. package/dist/lib/facts/stock/ext-source.d.ts +51 -0
  488. package/dist/lib/facts/stock/ext-source.d.ts.map +1 -0
  489. package/dist/lib/facts/stock/ext-source.js +201 -0
  490. package/dist/lib/facts/stock/ext-source.js.map +1 -0
  491. package/dist/lib/facts/stock/frequency-fact.d.ts +59 -0
  492. package/dist/lib/facts/stock/frequency-fact.d.ts.map +1 -0
  493. package/dist/lib/facts/stock/frequency-fact.js +86 -0
  494. package/dist/lib/facts/stock/frequency-fact.js.map +1 -0
  495. package/dist/lib/facts/stock/frequency.d.ts +32 -0
  496. package/dist/lib/facts/stock/frequency.d.ts.map +1 -0
  497. package/dist/lib/facts/stock/frequency.js +48 -0
  498. package/dist/lib/facts/stock/frequency.js.map +1 -0
  499. package/dist/lib/facts/stock/index.d.ts +27 -0
  500. package/dist/lib/facts/stock/index.d.ts.map +1 -0
  501. package/dist/lib/facts/stock/index.js +28 -0
  502. package/dist/lib/facts/stock/index.js.map +1 -0
  503. package/dist/lib/facts/stock/normalize.d.ts +45 -0
  504. package/dist/lib/facts/stock/normalize.d.ts.map +1 -0
  505. package/dist/lib/facts/stock/normalize.js +135 -0
  506. package/dist/lib/facts/stock/normalize.js.map +1 -0
  507. package/dist/lib/facts/stock/phash.d.ts +55 -0
  508. package/dist/lib/facts/stock/phash.d.ts.map +1 -0
  509. package/dist/lib/facts/stock/phash.js +256 -0
  510. package/dist/lib/facts/stock/phash.js.map +1 -0
  511. package/dist/lib/facts/stock/rule-defaults.d.ts +72 -0
  512. package/dist/lib/facts/stock/rule-defaults.d.ts.map +1 -0
  513. package/dist/lib/facts/stock/rule-defaults.js +55 -0
  514. package/dist/lib/facts/stock/rule-defaults.js.map +1 -0
  515. package/dist/lib/facts/stock/send.d.ts +52 -0
  516. package/dist/lib/facts/stock/send.d.ts.map +1 -0
  517. package/dist/lib/facts/stock/send.js +148 -0
  518. package/dist/lib/facts/stock/send.js.map +1 -0
  519. package/dist/lib/facts/stock/unique-score.d.ts +138 -0
  520. package/dist/lib/facts/stock/unique-score.d.ts.map +1 -0
  521. package/dist/lib/facts/stock/unique-score.js +257 -0
  522. package/dist/lib/facts/stock/unique-score.js.map +1 -0
  523. package/dist/lib/facts/stock/unique-store.d.ts +420 -0
  524. package/dist/lib/facts/stock/unique-store.d.ts.map +1 -0
  525. package/dist/lib/facts/stock/unique-store.js +328 -0
  526. package/dist/lib/facts/stock/unique-store.js.map +1 -0
  527. package/dist/lib/facts/stock/unique.d.ts +35 -0
  528. package/dist/lib/facts/stock/unique.d.ts.map +1 -0
  529. package/dist/lib/facts/stock/unique.js +327 -0
  530. package/dist/lib/facts/stock/unique.js.map +1 -0
  531. package/dist/lib/facts/tools.d.ts +57 -0
  532. package/dist/lib/facts/tools.d.ts.map +1 -0
  533. package/dist/lib/facts/tools.js +325 -0
  534. package/dist/lib/facts/tools.js.map +1 -0
  535. package/dist/lib/facts/validate.d.ts +33 -0
  536. package/dist/lib/facts/validate.d.ts.map +1 -0
  537. package/dist/lib/facts/validate.js +137 -0
  538. package/dist/lib/facts/validate.js.map +1 -0
  539. package/dist/lib/hash.d.ts +44 -0
  540. package/dist/lib/hash.d.ts.map +1 -0
  541. package/dist/lib/hash.js +80 -0
  542. package/dist/lib/hash.js.map +1 -0
  543. package/dist/lib/http/client.d.ts +113 -0
  544. package/dist/lib/http/client.d.ts.map +1 -0
  545. package/dist/lib/http/client.js +330 -0
  546. package/dist/lib/http/client.js.map +1 -0
  547. package/dist/lib/ids.d.ts +17 -0
  548. package/dist/lib/ids.d.ts.map +1 -0
  549. package/dist/lib/ids.js +26 -0
  550. package/dist/lib/ids.js.map +1 -0
  551. package/dist/lib/ixo/attachments.d.ts +116 -0
  552. package/dist/lib/ixo/attachments.d.ts.map +1 -0
  553. package/dist/lib/ixo/attachments.js +290 -0
  554. package/dist/lib/ixo/attachments.js.map +1 -0
  555. package/dist/lib/ixo/authz.d.ts +40 -0
  556. package/dist/lib/ixo/authz.d.ts.map +1 -0
  557. package/dist/lib/ixo/authz.js +113 -0
  558. package/dist/lib/ixo/authz.js.map +1 -0
  559. package/dist/lib/ixo/blocksync/index.d.ts +90 -0
  560. package/dist/lib/ixo/blocksync/index.d.ts.map +1 -0
  561. package/dist/lib/ixo/blocksync/index.js +251 -0
  562. package/dist/lib/ixo/blocksync/index.js.map +1 -0
  563. package/dist/lib/ixo/blocksync/queries.d.ts +15 -0
  564. package/dist/lib/ixo/blocksync/queries.d.ts.map +1 -0
  565. package/dist/lib/ixo/blocksync/queries.js +144 -0
  566. package/dist/lib/ixo/blocksync/queries.js.map +1 -0
  567. package/dist/lib/ixo/blocksync/types.d.ts +184 -0
  568. package/dist/lib/ixo/blocksync/types.d.ts.map +1 -0
  569. package/dist/lib/ixo/blocksync/types.js +108 -0
  570. package/dist/lib/ixo/blocksync/types.js.map +1 -0
  571. package/dist/lib/ixo/cellnode.d.ts +35 -0
  572. package/dist/lib/ixo/cellnode.d.ts.map +1 -0
  573. package/dist/lib/ixo/cellnode.js +43 -0
  574. package/dist/lib/ixo/cellnode.js.map +1 -0
  575. package/dist/lib/ixo/chain-write.d.ts +130 -0
  576. package/dist/lib/ixo/chain-write.d.ts.map +1 -0
  577. package/dist/lib/ixo/chain-write.js +460 -0
  578. package/dist/lib/ixo/chain-write.js.map +1 -0
  579. package/dist/lib/ixo/chain.d.ts +1046 -0
  580. package/dist/lib/ixo/chain.d.ts.map +1 -0
  581. package/dist/lib/ixo/chain.js +279 -0
  582. package/dist/lib/ixo/chain.js.map +1 -0
  583. package/dist/lib/ixo/claim-bot.d.ts +49 -0
  584. package/dist/lib/ixo/claim-bot.d.ts.map +1 -0
  585. package/dist/lib/ixo/claim-bot.js +141 -0
  586. package/dist/lib/ixo/claim-bot.js.map +1 -0
  587. package/dist/lib/ixo/delegation-verify.d.ts +44 -0
  588. package/dist/lib/ixo/delegation-verify.d.ts.map +1 -0
  589. package/dist/lib/ixo/delegation-verify.js +101 -0
  590. package/dist/lib/ixo/delegation-verify.js.map +1 -0
  591. package/dist/lib/ixo/did.d.ts +13 -0
  592. package/dist/lib/ixo/did.d.ts.map +1 -0
  593. package/dist/lib/ixo/did.js +85 -0
  594. package/dist/lib/ixo/did.js.map +1 -0
  595. package/dist/lib/ixo/grant-chain.d.ts +55 -0
  596. package/dist/lib/ixo/grant-chain.d.ts.map +1 -0
  597. package/dist/lib/ixo/grant-chain.js +185 -0
  598. package/dist/lib/ixo/grant-chain.js.map +1 -0
  599. package/dist/lib/ixo/identity.d.ts +32 -0
  600. package/dist/lib/ixo/identity.d.ts.map +1 -0
  601. package/dist/lib/ixo/identity.js +104 -0
  602. package/dist/lib/ixo/identity.js.map +1 -0
  603. package/dist/lib/ixo/index.d.ts +118 -0
  604. package/dist/lib/ixo/index.d.ts.map +1 -0
  605. package/dist/lib/ixo/index.js +395 -0
  606. package/dist/lib/ixo/index.js.map +1 -0
  607. package/dist/lib/ixo/payment.d.ts +104 -0
  608. package/dist/lib/ixo/payment.d.ts.map +1 -0
  609. package/dist/lib/ixo/payment.js +136 -0
  610. package/dist/lib/ixo/payment.js.map +1 -0
  611. package/dist/lib/ixo/ucan-store.d.ts +30 -0
  612. package/dist/lib/ixo/ucan-store.d.ts.map +1 -0
  613. package/dist/lib/ixo/ucan-store.js +134 -0
  614. package/dist/lib/ixo/ucan-store.js.map +1 -0
  615. package/dist/lib/ixo/ucan.d.ts +96 -0
  616. package/dist/lib/ixo/ucan.d.ts.map +1 -0
  617. package/dist/lib/ixo/ucan.js +216 -0
  618. package/dist/lib/ixo/ucan.js.map +1 -0
  619. package/dist/lib/ixo/verified-read.d.ts +43 -0
  620. package/dist/lib/ixo/verified-read.d.ts.map +1 -0
  621. package/dist/lib/ixo/verified-read.js +73 -0
  622. package/dist/lib/ixo/verified-read.js.map +1 -0
  623. package/dist/lib/ixo/vfs.d.ts +27 -0
  624. package/dist/lib/ixo/vfs.d.ts.map +1 -0
  625. package/dist/lib/ixo/vfs.js +42 -0
  626. package/dist/lib/ixo/vfs.js.map +1 -0
  627. package/dist/lib/ixo/web-did.d.ts +7 -0
  628. package/dist/lib/ixo/web-did.d.ts.map +1 -0
  629. package/dist/lib/ixo/web-did.js +9 -0
  630. package/dist/lib/ixo/web-did.js.map +1 -0
  631. package/dist/lib/logger.d.ts +34 -0
  632. package/dist/lib/logger.d.ts.map +1 -0
  633. package/dist/lib/logger.js +126 -0
  634. package/dist/lib/logger.js.map +1 -0
  635. package/dist/lib/matrix/api.d.ts +57 -0
  636. package/dist/lib/matrix/api.d.ts.map +1 -0
  637. package/dist/lib/matrix/api.js +58 -0
  638. package/dist/lib/matrix/api.js.map +1 -0
  639. package/dist/lib/matrix/client.d.ts +41 -0
  640. package/dist/lib/matrix/client.d.ts.map +1 -0
  641. package/dist/lib/matrix/client.js +104 -0
  642. package/dist/lib/matrix/client.js.map +1 -0
  643. package/dist/lib/matrix/deliver.d.ts +224 -0
  644. package/dist/lib/matrix/deliver.d.ts.map +1 -0
  645. package/dist/lib/matrix/deliver.js +788 -0
  646. package/dist/lib/matrix/deliver.js.map +1 -0
  647. package/dist/lib/matrix/events.d.ts +114 -0
  648. package/dist/lib/matrix/events.d.ts.map +1 -0
  649. package/dist/lib/matrix/events.js +143 -0
  650. package/dist/lib/matrix/events.js.map +1 -0
  651. package/dist/lib/matrix/mxid.d.ts +24 -0
  652. package/dist/lib/matrix/mxid.d.ts.map +1 -0
  653. package/dist/lib/matrix/mxid.js +47 -0
  654. package/dist/lib/matrix/mxid.js.map +1 -0
  655. package/dist/lib/metrics.d.ts +105 -0
  656. package/dist/lib/metrics.d.ts.map +1 -0
  657. package/dist/lib/metrics.js +204 -0
  658. package/dist/lib/metrics.js.map +1 -0
  659. package/dist/lib/oauth/approvals.d.ts +160 -0
  660. package/dist/lib/oauth/approvals.d.ts.map +1 -0
  661. package/dist/lib/oauth/approvals.js +273 -0
  662. package/dist/lib/oauth/approvals.js.map +1 -0
  663. package/dist/lib/oauth/standing.d.ts +152 -0
  664. package/dist/lib/oauth/standing.d.ts.map +1 -0
  665. package/dist/lib/oauth/standing.js +299 -0
  666. package/dist/lib/oauth/standing.js.map +1 -0
  667. package/dist/lib/oauth/token.d.ts +60 -0
  668. package/dist/lib/oauth/token.d.ts.map +1 -0
  669. package/dist/lib/oauth/token.js +129 -0
  670. package/dist/lib/oauth/token.js.map +1 -0
  671. package/dist/lib/payments/extend.d.ts +42 -0
  672. package/dist/lib/payments/extend.d.ts.map +1 -0
  673. package/dist/lib/payments/extend.js +98 -0
  674. package/dist/lib/payments/extend.js.map +1 -0
  675. package/dist/lib/payments/facilitator.d.ts +220 -0
  676. package/dist/lib/payments/facilitator.d.ts.map +1 -0
  677. package/dist/lib/payments/facilitator.js +451 -0
  678. package/dist/lib/payments/facilitator.js.map +1 -0
  679. package/dist/lib/payments/gate.d.ts +207 -0
  680. package/dist/lib/payments/gate.d.ts.map +1 -0
  681. package/dist/lib/payments/gate.js +481 -0
  682. package/dist/lib/payments/gate.js.map +1 -0
  683. package/dist/lib/payments/header-seal.d.ts +33 -0
  684. package/dist/lib/payments/header-seal.d.ts.map +1 -0
  685. package/dist/lib/payments/header-seal.js +76 -0
  686. package/dist/lib/payments/header-seal.js.map +1 -0
  687. package/dist/lib/payments/index.d.ts +12 -0
  688. package/dist/lib/payments/index.d.ts.map +1 -0
  689. package/dist/lib/payments/index.js +11 -0
  690. package/dist/lib/payments/index.js.map +1 -0
  691. package/dist/lib/payments/price.d.ts +25 -0
  692. package/dist/lib/payments/price.d.ts.map +1 -0
  693. package/dist/lib/payments/price.js +43 -0
  694. package/dist/lib/payments/price.js.map +1 -0
  695. package/dist/lib/payments/reconcile.d.ts +77 -0
  696. package/dist/lib/payments/reconcile.d.ts.map +1 -0
  697. package/dist/lib/payments/reconcile.js +317 -0
  698. package/dist/lib/payments/reconcile.js.map +1 -0
  699. package/dist/lib/payments/refund.d.ts +34 -0
  700. package/dist/lib/payments/refund.d.ts.map +1 -0
  701. package/dist/lib/payments/refund.js +123 -0
  702. package/dist/lib/payments/refund.js.map +1 -0
  703. package/dist/lib/payments/review-billing.d.ts +222 -0
  704. package/dist/lib/payments/review-billing.d.ts.map +1 -0
  705. package/dist/lib/payments/review-billing.js +609 -0
  706. package/dist/lib/payments/review-billing.js.map +1 -0
  707. package/dist/lib/payments/settle.d.ts +44 -0
  708. package/dist/lib/payments/settle.d.ts.map +1 -0
  709. package/dist/lib/payments/settle.js +306 -0
  710. package/dist/lib/payments/settle.js.map +1 -0
  711. package/dist/lib/payments/terms.d.ts +27 -0
  712. package/dist/lib/payments/terms.d.ts.map +1 -0
  713. package/dist/lib/payments/terms.js +21 -0
  714. package/dist/lib/payments/terms.js.map +1 -0
  715. package/dist/lib/payouts.d.ts +20 -0
  716. package/dist/lib/payouts.d.ts.map +1 -0
  717. package/dist/lib/payouts.js +30 -0
  718. package/dist/lib/payouts.js.map +1 -0
  719. package/dist/lib/readiness.d.ts +42 -0
  720. package/dist/lib/readiness.d.ts.map +1 -0
  721. package/dist/lib/readiness.js +130 -0
  722. package/dist/lib/readiness.js.map +1 -0
  723. package/dist/lib/redact.d.ts +23 -0
  724. package/dist/lib/redact.d.ts.map +1 -0
  725. package/dist/lib/redact.js +67 -0
  726. package/dist/lib/redact.js.map +1 -0
  727. package/dist/lib/register.d.ts +85 -0
  728. package/dist/lib/register.d.ts.map +1 -0
  729. package/dist/lib/register.js +390 -0
  730. package/dist/lib/register.js.map +1 -0
  731. package/dist/lib/review/attestation.d.ts +92 -0
  732. package/dist/lib/review/attestation.d.ts.map +1 -0
  733. package/dist/lib/review/attestation.js +264 -0
  734. package/dist/lib/review/attestation.js.map +1 -0
  735. package/dist/lib/review/reviewer-grant.d.ts +146 -0
  736. package/dist/lib/review/reviewer-grant.d.ts.map +1 -0
  737. package/dist/lib/review/reviewer-grant.js +359 -0
  738. package/dist/lib/review/reviewer-grant.js.map +1 -0
  739. package/dist/lib/review/tasks.d.ts +18 -0
  740. package/dist/lib/review/tasks.d.ts.map +1 -0
  741. package/dist/lib/review/tasks.js +36 -0
  742. package/dist/lib/review/tasks.js.map +1 -0
  743. package/dist/lib/sentry.d.ts +89 -0
  744. package/dist/lib/sentry.d.ts.map +1 -0
  745. package/dist/lib/sentry.js +284 -0
  746. package/dist/lib/sentry.js.map +1 -0
  747. package/dist/lib/spans.d.ts +14 -0
  748. package/dist/lib/spans.d.ts.map +1 -0
  749. package/dist/lib/spans.js +28 -0
  750. package/dist/lib/spans.js.map +1 -0
  751. package/dist/lib/tracing.d.ts +31 -0
  752. package/dist/lib/tracing.d.ts.map +1 -0
  753. package/dist/lib/tracing.js +66 -0
  754. package/dist/lib/tracing.js.map +1 -0
  755. package/dist/lib/ttl-cache.d.ts +26 -0
  756. package/dist/lib/ttl-cache.d.ts.map +1 -0
  757. package/dist/lib/ttl-cache.js +61 -0
  758. package/dist/lib/ttl-cache.js.map +1 -0
  759. package/dist/lib/validator.d.ts +19 -0
  760. package/dist/lib/validator.d.ts.map +1 -0
  761. package/dist/lib/validator.js +32 -0
  762. package/dist/lib/validator.js.map +1 -0
  763. package/dist/lib/work-order/form.d.ts +40 -0
  764. package/dist/lib/work-order/form.d.ts.map +1 -0
  765. package/dist/lib/work-order/form.js +316 -0
  766. package/dist/lib/work-order/form.js.map +1 -0
  767. package/dist/lib/work-order/index.d.ts +20 -0
  768. package/dist/lib/work-order/index.d.ts.map +1 -0
  769. package/dist/lib/work-order/index.js +66 -0
  770. package/dist/lib/work-order/index.js.map +1 -0
  771. package/dist/middleware/api/audit.d.ts +9 -0
  772. package/dist/middleware/api/audit.d.ts.map +1 -0
  773. package/dist/middleware/api/audit.js +38 -0
  774. package/dist/middleware/api/audit.js.map +1 -0
  775. package/dist/middleware/api/auth.d.ts +29 -0
  776. package/dist/middleware/api/auth.d.ts.map +1 -0
  777. package/dist/middleware/api/auth.js +105 -0
  778. package/dist/middleware/api/auth.js.map +1 -0
  779. package/dist/middleware/api/console.d.ts +92 -0
  780. package/dist/middleware/api/console.d.ts.map +1 -0
  781. package/dist/middleware/api/console.js +446 -0
  782. package/dist/middleware/api/console.js.map +1 -0
  783. package/dist/middleware/api/errors.d.ts +48 -0
  784. package/dist/middleware/api/errors.d.ts.map +1 -0
  785. package/dist/middleware/api/errors.js +133 -0
  786. package/dist/middleware/api/errors.js.map +1 -0
  787. package/dist/middleware/api/idempotency.d.ts +23 -0
  788. package/dist/middleware/api/idempotency.d.ts.map +1 -0
  789. package/dist/middleware/api/idempotency.js +158 -0
  790. package/dist/middleware/api/idempotency.js.map +1 -0
  791. package/dist/middleware/api/keys.d.ts +14 -0
  792. package/dist/middleware/api/keys.d.ts.map +1 -0
  793. package/dist/middleware/api/keys.js +66 -0
  794. package/dist/middleware/api/keys.js.map +1 -0
  795. package/dist/middleware/api/membership.d.ts +32 -0
  796. package/dist/middleware/api/membership.d.ts.map +1 -0
  797. package/dist/middleware/api/membership.js +48 -0
  798. package/dist/middleware/api/membership.js.map +1 -0
  799. package/dist/middleware/api/oauth.d.ts +28 -0
  800. package/dist/middleware/api/oauth.d.ts.map +1 -0
  801. package/dist/middleware/api/oauth.js +109 -0
  802. package/dist/middleware/api/oauth.js.map +1 -0
  803. package/dist/middleware/api/rate-limit.d.ts +23 -0
  804. package/dist/middleware/api/rate-limit.d.ts.map +1 -0
  805. package/dist/middleware/api/rate-limit.js +70 -0
  806. package/dist/middleware/api/rate-limit.js.map +1 -0
  807. package/dist/middleware/api/types.d.ts +92 -0
  808. package/dist/middleware/api/types.d.ts.map +1 -0
  809. package/dist/middleware/api/types.js +7 -0
  810. package/dist/middleware/api/types.js.map +1 -0
  811. package/dist/middleware/api/wait.d.ts +21 -0
  812. package/dist/middleware/api/wait.d.ts.map +1 -0
  813. package/dist/middleware/api/wait.js +85 -0
  814. package/dist/middleware/api/wait.js.map +1 -0
  815. package/dist/middleware/capability.d.ts +32 -0
  816. package/dist/middleware/capability.d.ts.map +1 -0
  817. package/dist/middleware/capability.js +113 -0
  818. package/dist/middleware/capability.js.map +1 -0
  819. package/dist/middleware/database.d.ts +14 -0
  820. package/dist/middleware/database.d.ts.map +1 -0
  821. package/dist/middleware/database.js +18 -0
  822. package/dist/middleware/database.js.map +1 -0
  823. package/dist/middleware/error-handler.d.ts +13 -0
  824. package/dist/middleware/error-handler.d.ts.map +1 -0
  825. package/dist/middleware/error-handler.js +127 -0
  826. package/dist/middleware/error-handler.js.map +1 -0
  827. package/dist/middleware/observability.d.ts +32 -0
  828. package/dist/middleware/observability.d.ts.map +1 -0
  829. package/dist/middleware/observability.js +134 -0
  830. package/dist/middleware/observability.js.map +1 -0
  831. package/dist/middleware/rate-limit.d.ts +16 -0
  832. package/dist/middleware/rate-limit.d.ts.map +1 -0
  833. package/dist/middleware/rate-limit.js +56 -0
  834. package/dist/middleware/rate-limit.js.map +1 -0
  835. package/dist/middleware/ucan-auth.d.ts +39 -0
  836. package/dist/middleware/ucan-auth.d.ts.map +1 -0
  837. package/dist/middleware/ucan-auth.js +278 -0
  838. package/dist/middleware/ucan-auth.js.map +1 -0
  839. package/dist/networks.d.ts +34 -0
  840. package/dist/networks.d.ts.map +1 -0
  841. package/dist/networks.js +49 -0
  842. package/dist/networks.js.map +1 -0
  843. package/dist/oracle.d.ts +193 -0
  844. package/dist/oracle.d.ts.map +1 -0
  845. package/dist/oracle.js +245 -0
  846. package/dist/oracle.js.map +1 -0
  847. package/dist/routes/health.d.ts +16 -0
  848. package/dist/routes/health.d.ts.map +1 -0
  849. package/dist/routes/health.js +29 -0
  850. package/dist/routes/health.js.map +1 -0
  851. package/dist/routes/v1/admin.d.ts +18 -0
  852. package/dist/routes/v1/admin.d.ts.map +1 -0
  853. package/dist/routes/v1/admin.js +101 -0
  854. package/dist/routes/v1/admin.js.map +1 -0
  855. package/dist/routes/v1/api/admin-claims.d.ts +14 -0
  856. package/dist/routes/v1/api/admin-claims.d.ts.map +1 -0
  857. package/dist/routes/v1/api/admin-claims.js +82 -0
  858. package/dist/routes/v1/api/admin-claims.js.map +1 -0
  859. package/dist/routes/v1/api/admin-facilitator.d.ts +20 -0
  860. package/dist/routes/v1/api/admin-facilitator.d.ts.map +1 -0
  861. package/dist/routes/v1/api/admin-facilitator.js +64 -0
  862. package/dist/routes/v1/api/admin-facilitator.js.map +1 -0
  863. package/dist/routes/v1/api/admin.d.ts +9 -0
  864. package/dist/routes/v1/api/admin.d.ts.map +1 -0
  865. package/dist/routes/v1/api/admin.js +110 -0
  866. package/dist/routes/v1/api/admin.js.map +1 -0
  867. package/dist/routes/v1/api/audit.d.ts +8 -0
  868. package/dist/routes/v1/api/audit.d.ts.map +1 -0
  869. package/dist/routes/v1/api/audit.js +56 -0
  870. package/dist/routes/v1/api/audit.js.map +1 -0
  871. package/dist/routes/v1/api/batch.d.ts +17 -0
  872. package/dist/routes/v1/api/batch.d.ts.map +1 -0
  873. package/dist/routes/v1/api/batch.js +192 -0
  874. package/dist/routes/v1/api/batch.js.map +1 -0
  875. package/dist/routes/v1/api/claims-read.d.ts +43 -0
  876. package/dist/routes/v1/api/claims-read.d.ts.map +1 -0
  877. package/dist/routes/v1/api/claims-read.js +123 -0
  878. package/dist/routes/v1/api/claims-read.js.map +1 -0
  879. package/dist/routes/v1/api/claims.d.ts +131 -0
  880. package/dist/routes/v1/api/claims.d.ts.map +1 -0
  881. package/dist/routes/v1/api/claims.js +407 -0
  882. package/dist/routes/v1/api/claims.js.map +1 -0
  883. package/dist/routes/v1/api/collections-link.d.ts +14 -0
  884. package/dist/routes/v1/api/collections-link.d.ts.map +1 -0
  885. package/dist/routes/v1/api/collections-link.js +97 -0
  886. package/dist/routes/v1/api/collections-link.js.map +1 -0
  887. package/dist/routes/v1/api/export.d.ts +48 -0
  888. package/dist/routes/v1/api/export.d.ts.map +1 -0
  889. package/dist/routes/v1/api/export.js +251 -0
  890. package/dist/routes/v1/api/export.js.map +1 -0
  891. package/dist/routes/v1/api/index.d.ts +16 -0
  892. package/dist/routes/v1/api/index.d.ts.map +1 -0
  893. package/dist/routes/v1/api/index.js +68 -0
  894. package/dist/routes/v1/api/index.js.map +1 -0
  895. package/dist/routes/v1/api/keys.d.ts +9 -0
  896. package/dist/routes/v1/api/keys.d.ts.map +1 -0
  897. package/dist/routes/v1/api/keys.js +95 -0
  898. package/dist/routes/v1/api/keys.js.map +1 -0
  899. package/dist/routes/v1/api/me.d.ts +21 -0
  900. package/dist/routes/v1/api/me.d.ts.map +1 -0
  901. package/dist/routes/v1/api/me.js +122 -0
  902. package/dist/routes/v1/api/me.js.map +1 -0
  903. package/dist/routes/v1/api/members.d.ts +17 -0
  904. package/dist/routes/v1/api/members.d.ts.map +1 -0
  905. package/dist/routes/v1/api/members.js +406 -0
  906. package/dist/routes/v1/api/members.js.map +1 -0
  907. package/dist/routes/v1/api/meta.d.ts +12 -0
  908. package/dist/routes/v1/api/meta.d.ts.map +1 -0
  909. package/dist/routes/v1/api/meta.js +59 -0
  910. package/dist/routes/v1/api/meta.js.map +1 -0
  911. package/dist/routes/v1/api/openapi.gen.d.ts +2 -0
  912. package/dist/routes/v1/api/openapi.gen.d.ts.map +1 -0
  913. package/dist/routes/v1/api/openapi.gen.js +7 -0
  914. package/dist/routes/v1/api/openapi.gen.js.map +1 -0
  915. package/dist/routes/v1/api/protocols.d.ts +22 -0
  916. package/dist/routes/v1/api/protocols.d.ts.map +1 -0
  917. package/dist/routes/v1/api/protocols.js +153 -0
  918. package/dist/routes/v1/api/protocols.js.map +1 -0
  919. package/dist/routes/v1/api/review-billing.d.ts +18 -0
  920. package/dist/routes/v1/api/review-billing.d.ts.map +1 -0
  921. package/dist/routes/v1/api/review-billing.js +196 -0
  922. package/dist/routes/v1/api/review-billing.js.map +1 -0
  923. package/dist/routes/v1/api/review.d.ts +30 -0
  924. package/dist/routes/v1/api/review.d.ts.map +1 -0
  925. package/dist/routes/v1/api/review.js +302 -0
  926. package/dist/routes/v1/api/review.js.map +1 -0
  927. package/dist/routes/v1/api/sources.d.ts +10 -0
  928. package/dist/routes/v1/api/sources.d.ts.map +1 -0
  929. package/dist/routes/v1/api/sources.js +293 -0
  930. package/dist/routes/v1/api/sources.js.map +1 -0
  931. package/dist/routes/v1/api/uploads.d.ts +37 -0
  932. package/dist/routes/v1/api/uploads.d.ts.map +1 -0
  933. package/dist/routes/v1/api/uploads.js +414 -0
  934. package/dist/routes/v1/api/uploads.js.map +1 -0
  935. package/dist/routes/v1/api/views.d.ts +18 -0
  936. package/dist/routes/v1/api/views.d.ts.map +1 -0
  937. package/dist/routes/v1/api/views.js +95 -0
  938. package/dist/routes/v1/api/views.js.map +1 -0
  939. package/dist/routes/v1/api/webhooks.d.ts +14 -0
  940. package/dist/routes/v1/api/webhooks.d.ts.map +1 -0
  941. package/dist/routes/v1/api/webhooks.js +282 -0
  942. package/dist/routes/v1/api/webhooks.js.map +1 -0
  943. package/dist/routes/v1/api/work-orders.d.ts +45 -0
  944. package/dist/routes/v1/api/work-orders.d.ts.map +1 -0
  945. package/dist/routes/v1/api/work-orders.js +171 -0
  946. package/dist/routes/v1/api/work-orders.js.map +1 -0
  947. package/dist/routes/v1/claims.d.ts +21 -0
  948. package/dist/routes/v1/claims.d.ts.map +1 -0
  949. package/dist/routes/v1/claims.js +153 -0
  950. package/dist/routes/v1/claims.js.map +1 -0
  951. package/dist/routes/v1/collections.d.ts +45 -0
  952. package/dist/routes/v1/collections.d.ts.map +1 -0
  953. package/dist/routes/v1/collections.js +201 -0
  954. package/dist/routes/v1/collections.js.map +1 -0
  955. package/dist/routes/v1/index.d.ts +13 -0
  956. package/dist/routes/v1/index.d.ts.map +1 -0
  957. package/dist/routes/v1/index.js +41 -0
  958. package/dist/routes/v1/index.js.map +1 -0
  959. package/dist/routes/v1/info.d.ts +14 -0
  960. package/dist/routes/v1/info.d.ts.map +1 -0
  961. package/dist/routes/v1/info.js +75 -0
  962. package/dist/routes/v1/info.js.map +1 -0
  963. package/dist/routes/v1/mcp/index.d.ts +33 -0
  964. package/dist/routes/v1/mcp/index.d.ts.map +1 -0
  965. package/dist/routes/v1/mcp/index.js +252 -0
  966. package/dist/routes/v1/mcp/index.js.map +1 -0
  967. package/dist/routes/v1/mcp/oauth.d.ts +27 -0
  968. package/dist/routes/v1/mcp/oauth.d.ts.map +1 -0
  969. package/dist/routes/v1/mcp/oauth.js +500 -0
  970. package/dist/routes/v1/mcp/oauth.js.map +1 -0
  971. package/dist/routes/v1/mcp/tools.d.ts +71 -0
  972. package/dist/routes/v1/mcp/tools.d.ts.map +1 -0
  973. package/dist/routes/v1/mcp/tools.js +432 -0
  974. package/dist/routes/v1/mcp/tools.js.map +1 -0
  975. package/dist/routes/v1/mcp/ui.d.ts +45 -0
  976. package/dist/routes/v1/mcp/ui.d.ts.map +1 -0
  977. package/dist/routes/v1/mcp/ui.js +454 -0
  978. package/dist/routes/v1/mcp/ui.js.map +1 -0
  979. package/dist/routes/v1/oauth.d.ts +29 -0
  980. package/dist/routes/v1/oauth.d.ts.map +1 -0
  981. package/dist/routes/v1/oauth.js +256 -0
  982. package/dist/routes/v1/oauth.js.map +1 -0
  983. package/dist/routes/v1/reviewers.d.ts +22 -0
  984. package/dist/routes/v1/reviewers.d.ts.map +1 -0
  985. package/dist/routes/v1/reviewers.js +165 -0
  986. package/dist/routes/v1/reviewers.js.map +1 -0
  987. package/dist/routes/v1/reviews.d.ts +38 -0
  988. package/dist/routes/v1/reviews.d.ts.map +1 -0
  989. package/dist/routes/v1/reviews.js +234 -0
  990. package/dist/routes/v1/reviews.js.map +1 -0
  991. package/dist/routes/v1/shared.d.ts +586 -0
  992. package/dist/routes/v1/shared.d.ts.map +1 -0
  993. package/dist/routes/v1/shared.js +229 -0
  994. package/dist/routes/v1/shared.js.map +1 -0
  995. package/dist/routes/well-known.d.ts +15 -0
  996. package/dist/routes/well-known.d.ts.map +1 -0
  997. package/dist/routes/well-known.js +35 -0
  998. package/dist/routes/well-known.js.map +1 -0
  999. package/dist/runtime.d.ts +100 -0
  1000. package/dist/runtime.d.ts.map +1 -0
  1001. package/dist/runtime.js +144 -0
  1002. package/dist/runtime.js.map +1 -0
  1003. package/dist/testing/fake-tools.d.ts +104 -0
  1004. package/dist/testing/fake-tools.d.ts.map +1 -0
  1005. package/dist/testing/fake-tools.js +213 -0
  1006. package/dist/testing/fake-tools.js.map +1 -0
  1007. package/dist/testing/index.d.ts +54 -0
  1008. package/dist/testing/index.d.ts.map +1 -0
  1009. package/dist/testing/index.js +104 -0
  1010. package/dist/testing/index.js.map +1 -0
  1011. package/dist/testing/samples.d.ts +70 -0
  1012. package/dist/testing/samples.d.ts.map +1 -0
  1013. package/dist/testing/samples.js +92 -0
  1014. package/dist/testing/samples.js.map +1 -0
  1015. package/dist/workflows/claim-ingest.d.ts +250 -0
  1016. package/dist/workflows/claim-ingest.d.ts.map +1 -0
  1017. package/dist/workflows/claim-ingest.js +1020 -0
  1018. package/dist/workflows/claim-ingest.js.map +1 -0
  1019. package/dist/workflows/claim-source.d.ts +25 -0
  1020. package/dist/workflows/claim-source.d.ts.map +1 -0
  1021. package/dist/workflows/claim-source.js +107 -0
  1022. package/dist/workflows/claim-source.js.map +1 -0
  1023. package/dist/workflows/review-complete.d.ts +82 -0
  1024. package/dist/workflows/review-complete.d.ts.map +1 -0
  1025. package/dist/workflows/review-complete.js +455 -0
  1026. package/dist/workflows/review-complete.js.map +1 -0
  1027. package/dist/workflows/steps.d.ts +125 -0
  1028. package/dist/workflows/steps.d.ts.map +1 -0
  1029. package/dist/workflows/steps.js +325 -0
  1030. package/dist/workflows/steps.js.map +1 -0
  1031. package/docs/api.md +2595 -0
  1032. package/docs/guide.md +1525 -0
  1033. package/migrations/0000_init.sql +108 -0
  1034. package/migrations/0001_review_attestation.sql +1 -0
  1035. package/migrations/0002_decisions_facts.sql +1 -0
  1036. package/migrations/0003_api_lane.sql +171 -0
  1037. package/migrations/0004_api_v1_1.sql +19 -0
  1038. package/migrations/0005_member_notify.sql +3 -0
  1039. package/migrations/0006_source_collections.sql +16 -0
  1040. package/migrations/0007_api_settlement.sql +27 -0
  1041. package/migrations/0008_review_extend.sql +1 -0
  1042. package/migrations/0009_card_refunds.sql +4 -0
  1043. package/migrations/0010_even_scorpion.sql +16 -0
  1044. package/migrations/0011_mcp_oauth.sql +27 -0
  1045. package/migrations/0012_mcp_standing.sql +21 -0
  1046. package/migrations/0013_unknown_krista_starr.sql +2 -0
  1047. package/migrations/0014_last_carnage.sql +14 -0
  1048. package/migrations/0015_company_authority.sql +26 -0
  1049. package/migrations/0016_owner_only_links.sql +6 -0
  1050. package/migrations/0017_organisations.sql +35 -0
  1051. package/migrations/0018_remove_app_signed.sql +4 -0
  1052. package/migrations/0019_submitted_via.sql +2 -0
  1053. package/migrations/0020_drop_decision_to_pay.sql +4 -0
  1054. package/migrations/0021_manual_erase.sql +25 -0
  1055. package/migrations/0022_errored_facts.sql +1 -0
  1056. package/migrations/0023_review_billing.sql +20 -0
  1057. package/migrations/0024_pending_task_details.sql +1 -0
  1058. package/migrations/meta/0000_snapshot.json +707 -0
  1059. package/migrations/meta/0001_snapshot.json +714 -0
  1060. package/migrations/meta/0002_snapshot.json +721 -0
  1061. package/migrations/meta/0003_snapshot.json +1845 -0
  1062. package/migrations/meta/0004_snapshot.json +1969 -0
  1063. package/migrations/meta/0005_snapshot.json +1991 -0
  1064. package/migrations/meta/0006_snapshot.json +2097 -0
  1065. package/migrations/meta/0007_snapshot.json +2128 -0
  1066. package/migrations/meta/0008_snapshot.json +2133 -0
  1067. package/migrations/meta/0009_snapshot.json +2161 -0
  1068. package/migrations/meta/0010_snapshot.json +2265 -0
  1069. package/migrations/meta/0011_snapshot.json +2448 -0
  1070. package/migrations/meta/0012_snapshot.json +2577 -0
  1071. package/migrations/meta/0013_snapshot.json +2594 -0
  1072. package/migrations/meta/0014_snapshot.json +2602 -0
  1073. package/migrations/meta/0015_snapshot.json +2778 -0
  1074. package/migrations/meta/0016_snapshot.json +2778 -0
  1075. package/migrations/meta/0017_snapshot.json +2792 -0
  1076. package/migrations/meta/0018_snapshot.json +2778 -0
  1077. package/migrations/meta/0019_snapshot.json +2792 -0
  1078. package/migrations/meta/0020_snapshot.json +2785 -0
  1079. package/migrations/meta/0021_snapshot.json +2762 -0
  1080. package/migrations/meta/0022_snapshot.json +2769 -0
  1081. package/migrations/meta/0023_snapshot.json +2900 -0
  1082. package/migrations/meta/0024_snapshot.json +2907 -0
  1083. package/migrations/meta/_journal.json +181 -0
  1084. package/openapi/decision-api.yaml +12204 -0
  1085. package/package.json +121 -4
  1086. package/skills/README.md +19 -0
  1087. package/skills/add-openhands-support/SKILL.md +113 -0
  1088. package/skills/create-collection/SKILL.md +199 -0
  1089. package/skills/create-collection/reference/claims-stack.md +106 -0
  1090. package/skills/create-collection/reference/collection.md +111 -0
  1091. package/skills/create-oracle/SKILL.md +400 -0
  1092. package/skills/create-rubric/SKILL.md +130 -0
  1093. package/skills/create-rubric/reference/format-cheatsheet.md +186 -0
  1094. package/skills/create-rubric/templates/claim-form.example.json +60 -0
  1095. package/skills/decision-api-client/SKILL.md +236 -0
  1096. package/skills/decision-api-oracle/SKILL.md +336 -0
  1097. package/skills/publish-protocol/SKILL.md +151 -0
  1098. package/skills/publish-protocol/reference/publishing.md +116 -0
  1099. package/skills/reference/engine-contract.md +222 -0
  1100. package/skills/write-facts/SKILL.md +221 -0
  1101. package/skills/write-facts/reference/examples/http-vendor.ts +88 -0
  1102. package/skills/write-facts/reference/examples/price-matches-agreement.ts +67 -0
  1103. package/skills/write-facts/reference/facts-api.md +232 -0
  1104. package/templates/project/.dev.vars.example +93 -0
  1105. package/templates/project/.editorconfig +9 -0
  1106. package/templates/project/CLAUDE.md +45 -0
  1107. package/templates/project/README.md +199 -0
  1108. package/templates/project/biome.json +37 -0
  1109. package/templates/project/gitignore +29 -0
  1110. package/templates/project/package.json +32 -0
  1111. package/templates/project/src/facts/index.ts +19 -0
  1112. package/templates/project/src/index.ts +25 -0
  1113. package/templates/project/test/api-lane.test.ts +57 -0
  1114. package/templates/project/test/facts.test.ts +14 -0
  1115. package/templates/project/tsconfig.json +25 -0
  1116. package/templates/project/vitest.config.ts +13 -0
  1117. package/templates/project/wrangler.jsonc +446 -0
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Metrics — named counters, timings and gauges, with two sinks:
3
+ *
4
+ * - the log line (`msg = "metric"`, `metric`/`value`|`ms` plus every tag as its own field), which
5
+ * rides the request logger and so inherits its correlation fields — queryable in Workers Logs
6
+ * (Observability -> Logs). At `debug` while the dataset is bound (Analytics Engine carries the
7
+ * number; this halves Workers Logs volume), at `info` when it isn't, so an operator who never
8
+ * binds `METRICS` keeps the whole signal in their logs;
9
+ * - Workers Analytics Engine, when the operator binds `METRICS` (optional — docs/guide.md
10
+ * "Operating"). That write does not go through the logger, so a `LOG_LEVEL` of `warn` never
11
+ * silences a metric.
12
+ *
13
+ * The data point has ONE fixed schema, so any dashboard can chart every oracle the same way:
14
+ *
15
+ * index1/blob1 name · blob2 op · blob3 route · blob4 status · blob5 outcome · blob6 network ·
16
+ * blob7 id (a low-volume id: a DID or a source id — never a claim id) · double1 value · double2 ms
17
+ *
18
+ * so call sites tag with those five canonical keys (`op`/`route`/`status`/`outcome`/`id`); any
19
+ * other tag reaches the log line only.
20
+ *
21
+ * `withMetrics` makes an invocation's `Metrics` ambient (AsyncLocalStorage) for code that has no
22
+ * `c.var` to read it from — the shared fetch client and the cache reads — without threading it
23
+ * through every deps object. `node:async_hooks` exists in plain node too, so this module stays
24
+ * safe for the node lane.
25
+ */
26
+ import { AsyncLocalStorage } from "node:async_hooks";
27
+ /** Per `Metrics` instance, i.e. per invocation: a loop writing one point per row is a bug to
28
+ * aggregate, not a budget to spend. The last `RESERVED` points are kept for the invocation's own
29
+ * summary metrics, so a chatty invocation still reports that it ran and how it ended. */
30
+ export const MAX_POINTS = 250;
31
+ const RESERVED = 10;
32
+ // Plus the two a claim's run writes at most once each — its SLO point and its terminal failure.
33
+ const ESSENTIAL = new Set([
34
+ "http.request",
35
+ "cron.tick",
36
+ "errors",
37
+ "api.decision.latency",
38
+ "ingest.terminal",
39
+ ]);
40
+ const MAX_BLOB = 256;
41
+ const blob = (v) => v === undefined || v === null || v === "" ? "-" : String(v).slice(0, MAX_BLOB);
42
+ /**
43
+ * `logger` already carries the base fields (service, env, and on a request path the
44
+ * requestId/traceId), so a metric's log line inherits its correlation for free. No `sink.dataset`
45
+ * ⇒ log line only.
46
+ */
47
+ export function createMetrics(logger, sink) {
48
+ let points = 0;
49
+ let capped = false;
50
+ let failed = false;
51
+ const line = (fields) => sink?.dataset ? logger.debug("metric", fields) : logger.info("metric", fields);
52
+ const write = (name, value, ms, tags = {}) => {
53
+ if (!sink?.dataset)
54
+ return;
55
+ if (points >= (ESSENTIAL.has(name) ? MAX_POINTS : MAX_POINTS - RESERVED)) {
56
+ if (!capped)
57
+ logger.warn("metrics.capped", { max: MAX_POINTS, metric: name });
58
+ capped = true;
59
+ return;
60
+ }
61
+ points++;
62
+ try {
63
+ sink.dataset.writeDataPoint({
64
+ indexes: [blob(name)],
65
+ blobs: [
66
+ blob(name),
67
+ blob(tags.op),
68
+ blob(tags.route),
69
+ blob(tags.status),
70
+ blob(tags.outcome),
71
+ blob(sink.network),
72
+ blob(tags.id),
73
+ ],
74
+ doubles: [value, ms],
75
+ });
76
+ }
77
+ catch (err) {
78
+ // A metric must never fail the work it measures — and one broken binding must not turn every
79
+ // point into a warn line.
80
+ if (!failed)
81
+ logger.warn("metrics.write-failed", { metric: name, detail: String(err) });
82
+ failed = true;
83
+ }
84
+ };
85
+ return {
86
+ count(name, value = 1, tags) {
87
+ line({ metric: name, value, ...tags });
88
+ write(name, value, 0, tags);
89
+ },
90
+ timing(name, ms, tags) {
91
+ line({ metric: name, ms, ...tags });
92
+ write(name, 1, ms, tags);
93
+ },
94
+ gauge(name, value, tags) {
95
+ line({ metric: name, value, ...tags });
96
+ write(name, value, 0, tags);
97
+ },
98
+ };
99
+ }
100
+ const current = new AsyncLocalStorage();
101
+ /** Run `fn` with `scope` as the invocation's ambient metrics (a request, a cron tick, a workflow). */
102
+ export function withMetrics(scope, fn) {
103
+ return current.run(scope, fn);
104
+ }
105
+ /**
106
+ * A workflow step whose callbacks run inside `scope`, each timed as `workflow.step` (op the
107
+ * workflow, route the step name, status the attempt the step context reports). Timed INSIDE the
108
+ * callback: a completed step replayed from its checkpoint never calls it, so it records nothing. The Workflows engine calls a `step.do`
109
+ * callback back from its own context, not run()'s, so the AsyncLocalStorage scope set around
110
+ * run() is gone by then — the same reason Sentry's wrapped step captures its scope at `do()` time.
111
+ * Wraps the step it is given (Sentry's, in production) rather than replacing it; every other
112
+ * member passes through untouched.
113
+ */
114
+ export function scopedStep(step, scope, workflow) {
115
+ const inScope = (name, arg) => typeof arg === "function"
116
+ ? (...args) => withMetrics(scope, async () => {
117
+ const started = Date.now();
118
+ let outcome = "error";
119
+ try {
120
+ const out = await arg(...args);
121
+ outcome = "ok";
122
+ return out;
123
+ }
124
+ finally {
125
+ scope.metrics.timing("workflow.step", Date.now() - started, {
126
+ op: workflow,
127
+ route: name,
128
+ status: args[0]?.attempt,
129
+ outcome,
130
+ });
131
+ }
132
+ })
133
+ : arg;
134
+ const scopedDo = (name, ...rest) => step.do.call(step, name, ...rest.map((arg) => inScope(name, arg)));
135
+ return new Proxy(step, {
136
+ get(target, prop) {
137
+ if (prop === "do")
138
+ return scopedDo;
139
+ const value = Reflect.get(target, prop, target);
140
+ return typeof value === "function" ? value.bind(target) : value;
141
+ },
142
+ });
143
+ }
144
+ const PEER_CODE = /^[A-Za-z0-9_.-]{1,64}$/;
145
+ /**
146
+ * A code another service answered with, fit to be a label: a peer's error body is not ours to
147
+ * trust, so anything outside a short code alphabet is `unknown` rather than free text in a blob.
148
+ */
149
+ export function peerCode(code) {
150
+ return typeof code === "string" && PEER_CODE.test(code) ? code : "unknown";
151
+ }
152
+ /** The ambient `Metrics`; undefined outside any `withMetrics`, where nothing is recorded. */
153
+ export function currentMetrics() {
154
+ return current.getStore()?.metrics;
155
+ }
156
+ /** The ambient request's `traceparent`/`requestId` — only the keys it has (none off a request). */
157
+ export function currentCorrelation() {
158
+ const scope = current.getStore();
159
+ return {
160
+ ...(scope?.traceparent ? { traceparent: scope.traceparent } : {}),
161
+ ...(scope?.requestId ? { requestId: scope.requestId } : {}),
162
+ };
163
+ }
164
+ /**
165
+ * `cron.tick` for one scheduled job: how long it ran and whether it threw (rethrown untouched — the
166
+ * caller's own containment still decides what a failure does).
167
+ */
168
+ export async function timeCronJob(metrics, job, run) {
169
+ const started = Date.now();
170
+ let outcome = "error";
171
+ try {
172
+ const out = await run();
173
+ outcome = "ok";
174
+ return out;
175
+ }
176
+ finally {
177
+ metrics.timing("cron.tick", Date.now() - started, { op: job, outcome });
178
+ }
179
+ }
180
+ /** Count an in-isolate (L1) cache lookup. */
181
+ export function countCache(name, hit) {
182
+ currentMetrics()?.count("cache", 1, { op: name, outcome: hit ? "hit" : "miss" });
183
+ }
184
+ /**
185
+ * A KV cache read, counted hit/miss/error. A cache is never the source of truth, so a failed read
186
+ * is a miss to the caller exactly as the old `.catch(() => null)` made it — only now a logged,
187
+ * counted one instead of a silent one.
188
+ * A synchronous throw from `read` is caught the same way (logged `cache.error`, returns null).
189
+ */
190
+ export async function readCache(name, read) {
191
+ const scope = current.getStore();
192
+ let value;
193
+ try {
194
+ value = await read();
195
+ }
196
+ catch (err) {
197
+ scope?.logger.warn("cache.error", { cache: name, op: "get", detail: String(err) });
198
+ scope?.metrics.count("cache", 1, { op: name, outcome: "error" });
199
+ return null;
200
+ }
201
+ scope?.metrics.count("cache", 1, { op: name, outcome: value === null ? "miss" : "hit" });
202
+ return value;
203
+ }
204
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/lib/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Per-submit approvals for AI apps over OAuth (spec 2026-10-06 "Approvals"; S3 review §2, §6, §8).
3
+ * The rows are `mcp_approvals` (schema.ts says what each column holds); this file is every read
4
+ * and write of them, and the per-grant daily cap.
5
+ *
6
+ * The one invariant that moves money: an approval is spent by ONE conditional statement —
7
+ * `approved` (or `awaiting_3ds`) → `used` — BEFORE anything is paid, so two retries racing on one
8
+ * approval pay once. How a payment ends decides what becomes of it (S3 review F3):
9
+ * - PROVEN to have reserved nothing, and the user can fix it without re-signing (no credits, a
10
+ * cap, a declined card, a 503 before `/verify`): put back (`restoreApproval`), and the retry
11
+ * pays with the same approval;
12
+ * - the card wants 3-D Secure: parked `awaiting_3ds`, bound to that offer and PaymentIntent
13
+ * (`awaitCardConfirmation`), and only the resume of exactly those may spend it;
14
+ * - anything else — paid, a refused delegation, or ambiguous (a 5xx or a timeout once a payment
15
+ * was sent: `/verify` may have reserved and the record failed) — retires the delegation
16
+ * (`retireDelegation`), and the same request asks the user again.
17
+ * A price that moved since the approval is `APPROVAL_STALE`, never a payment at the new price.
18
+ */
19
+ import { type SQL } from "drizzle-orm";
20
+ import type { Config } from "../../config.js";
21
+ import type { Attachment } from "../../contracts/index.js";
22
+ import type { Database } from "../../db/client.js";
23
+ import { type McpApproval } from "../../db/schema.js";
24
+ /** How long the user has to approve, and then how long the app has to use the approval. */
25
+ export declare const APPROVAL_TTL_MS: number;
26
+ /** What one OAuth grant may spend a day, in cents, whatever its approvals say (S3 review §8). */
27
+ export declare const GRANT_CAP_CENTS_PER_DAY = 2000;
28
+ /** …in upay (1 cent = 10 000 upay): what the atomic counter (`mcp_standing_spends`) compares. */
29
+ export declare const GRANT_CAP_UPAY: number;
30
+ /**
31
+ * The grant's spend over the last 24 h as the atomic counter has it: every `mcp_standing_spends`
32
+ * row — the auto-approve path's per-request locks and the one-claim approvals' spends alike (S3
33
+ * follow-up 4), so racing both paths can never pass the day's cap together.
34
+ */
35
+ export declare const spentToday: (grantId: string, now: Date) => SQL<unknown>;
36
+ /** ≥ 128 random bits, base64url: an approval id is a capability-shaped link, never guessable. */
37
+ export declare function newApprovalId(): string;
38
+ /**
39
+ * What an approval is bound to (S3 review "Smaller points"): the protocol, the source, the
40
+ * canonical body, its attachments and the idempotency key. A different body is a different digest,
41
+ * so an approval never moves to another claim.
42
+ */
43
+ export declare function approvalDigest(r: {
44
+ protocolDid: string;
45
+ sourceId: string;
46
+ answers: Record<string, unknown>;
47
+ attachments: readonly Attachment[];
48
+ submitter?: string;
49
+ metadata?: Record<string, unknown>;
50
+ webhookUrl?: string;
51
+ idempotencyKey: string;
52
+ }): Promise<string>;
53
+ /** AuthHub's approve page for `id`: it reads the approval from THIS oracle, never from the link. */
54
+ export declare const approveUrl: (config: Pick<Config, "AUTH_HUB_URL" | "ORACLE_HOSTNAME">, id: string) => string;
55
+ /** `$1.20`: what the approve page shows. */
56
+ export declare const priceDisplay: (cents: number) => string;
57
+ /** This app's live (pending or approved) approval of this exact request, if any. */
58
+ export declare function liveApproval(db: Database, grantId: string, requestDigest: string, now?: Date): Promise<{
59
+ billingMode: "none" | "x402";
60
+ clientId: string;
61
+ clientName: string;
62
+ createdAt: Date;
63
+ delegation: string | null;
64
+ did: string;
65
+ expiresAt: Date;
66
+ grantId: string;
67
+ id: string;
68
+ maxAmountUpay: string;
69
+ offerId: string | null;
70
+ paymentIntentId: string | null;
71
+ price: string;
72
+ protocolDid: string;
73
+ requestDigest: string;
74
+ sourceId: string;
75
+ status: "approved" | "awaiting_3ds" | "declined" | "expired" | "pending" | "used";
76
+ } | undefined>;
77
+ /**
78
+ * File a pending approval, or find the one a racing call filed first (the partial unique index
79
+ * allows one live row per app and request).
80
+ */
81
+ export declare function fileApproval(db: Database, row: Omit<McpApproval, "id" | "status" | "delegation" | "offerId" | "paymentIntentId" | "expiresAt" | "createdAt">, now?: Date): Promise<McpApproval>;
82
+ /** Retire a live approval (ran out, or the price moved): its delegation goes with it. */
83
+ export declare function expireApproval(db: Database, id: string): Promise<void>;
84
+ /**
85
+ * Spend an approval: the ONE batch that lets a payment happen — "spent" for exactly one caller per
86
+ * approval, since the flip needs that caller's own counter row. The delegation stays on the row until the payment ends (`retireDelegation`), so a
87
+ * payment that never settled can be put back (`restoreApproval`).
88
+ */
89
+ export declare function spendApproval(db: Database, row: Pick<McpApproval, "id" | "grantId" | "maxAmountUpay">, from?: "approved" | "awaiting_3ds", now?: Date): Promise<"spent" | "lost" | "capped">;
90
+ /** Definitely nothing reserved: the approval is the user's again, delegation and expiry unchanged. */
91
+ export declare function restoreApproval(db: Database, id: string, now?: Date): Promise<boolean>;
92
+ /**
93
+ * The card wants 3-D Secure: the spent row waits for the person, bound to the offer and the
94
+ * PaymentIntent the bank challenged. Its delegation stays (the resume's card authorize needs it).
95
+ */
96
+ export declare function awaitCardConfirmation(db: Database, id: string, bound: {
97
+ offerId: string;
98
+ paymentIntentId: string;
99
+ }, now?: Date): Promise<boolean>;
100
+ /**
101
+ * A payment from the grant's auto-approve met 3-D Secure: the fresh approval of this request is
102
+ * parked `awaiting_3ds` with the standing delegation, so the resume pays exactly that card offer.
103
+ */
104
+ export declare function parkStandingPayment(db: Database, id: string, delegation: string, bound: {
105
+ offerId: string;
106
+ paymentIntentId: string;
107
+ }): Promise<boolean>;
108
+ /** The payment ended (paid, or ambiguous): the spent row keeps no payment authority. */
109
+ export declare function retireDelegation(db: Database, id: string): Promise<void>;
110
+ /** The back-channel's view: an approval that exists AND is pending AND has not run out. */
111
+ export declare function pendingApproval(db: Database, id: string, now?: Date): Promise<{
112
+ billingMode: "none" | "x402";
113
+ clientId: string;
114
+ clientName: string;
115
+ createdAt: Date;
116
+ delegation: string | null;
117
+ did: string;
118
+ expiresAt: Date;
119
+ grantId: string;
120
+ id: string;
121
+ maxAmountUpay: string;
122
+ offerId: string | null;
123
+ paymentIntentId: string | null;
124
+ price: string;
125
+ protocolDid: string;
126
+ requestDigest: string;
127
+ sourceId: string;
128
+ status: "approved" | "awaiting_3ds" | "declined" | "expired" | "pending" | "used";
129
+ } | undefined>;
130
+ /** AuthHub's answer: approved (with its delegation, null for billing `none`), or declined. */
131
+ export declare function answerApproval(db: Database, id: string, answer: {
132
+ status: "approved";
133
+ delegation: string | null;
134
+ } | {
135
+ status: "declined";
136
+ }, now?: Date): Promise<boolean>;
137
+ /** Why a delegation can't pay for an approval: a stable `reason` code and words for a person. */
138
+ export interface DelegationRefusal {
139
+ reason: "invalid_delegation" | "issuer_mismatch" | "oracle_mismatch" | "facilitator_mismatch" | "amount_mismatch" | "expired" | "expires_too_soon" | "limits_invalid";
140
+ message: string;
141
+ /** The delegation's audience — what a `facilitator_mismatch` is logged with. */
142
+ audience?: string;
143
+ }
144
+ /**
145
+ * Why `delegation` cannot pay for `row`, or null when it can: a well-formed payment delegation
146
+ * whose root issuer is the approval's user, bound to this oracle, to OUR facilitator, for exactly
147
+ * the approved price, and not expired. Its signature is the facilitator's to verify at payment.
148
+ */
149
+ export declare function delegationRefusal(delegation: string, row: Pick<McpApproval, "did" | "maxAmountUpay">, expect: {
150
+ oracleDid: string;
151
+ facilitatorDid: string;
152
+ /** A standing authority's `until` (standing.ts): the delegation must last at least that long. */
153
+ validUntil?: number;
154
+ }, now?: number): Promise<DelegationRefusal | null>;
155
+ /**
156
+ * Has this grant's spend over the last 24 h plus `cents` passed the cap? Every charge that may
157
+ * still move money counts (`released` / `failed` moved nothing), as the per-key cap counts.
158
+ */
159
+ export declare function overGrantCap(db: Database, grantId: string, cents: number, now?: number): Promise<boolean>;
160
+ //# sourceMappingURL=approvals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../../src/lib/oauth/approvals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Per-submit approvals for AI apps over OAuth (spec 2026-10-06 "Approvals"; S3 review §2, §6, §8).
3
+ * The rows are `mcp_approvals` (schema.ts says what each column holds); this file is every read
4
+ * and write of them, and the per-grant daily cap.
5
+ *
6
+ * The one invariant that moves money: an approval is spent by ONE conditional statement —
7
+ * `approved` (or `awaiting_3ds`) → `used` — BEFORE anything is paid, so two retries racing on one
8
+ * approval pay once. How a payment ends decides what becomes of it (S3 review F3):
9
+ * - PROVEN to have reserved nothing, and the user can fix it without re-signing (no credits, a
10
+ * cap, a declined card, a 503 before `/verify`): put back (`restoreApproval`), and the retry
11
+ * pays with the same approval;
12
+ * - the card wants 3-D Secure: parked `awaiting_3ds`, bound to that offer and PaymentIntent
13
+ * (`awaitCardConfirmation`), and only the resume of exactly those may spend it;
14
+ * - anything else — paid, a refused delegation, or ambiguous (a 5xx or a timeout once a payment
15
+ * was sent: `/verify` may have reserved and the record failed) — retires the delegation
16
+ * (`retireDelegation`), and the same request asks the user again.
17
+ * A price that moved since the approval is `APPROVAL_STALE`, never a payment at the new price.
18
+ */
19
+ import { parsePaymentDelegation } from "@ixo/x402-ixo-pay";
20
+ import { and, eq, gt, inArray, lte, notInArray, sql } from "drizzle-orm";
21
+ import { apiCharges, mcpApprovals, mcpStandingSpends } from "../../db/schema.js";
22
+ import { DAY_MS } from "../api-lane/retention.js";
23
+ import { canonicalJson, sha256Hex } from "../hash.js";
24
+ /** How long the user has to approve, and then how long the app has to use the approval. */
25
+ export const APPROVAL_TTL_MS = 15 * 60_000;
26
+ /** What one OAuth grant may spend a day, in cents, whatever its approvals say (S3 review §8). */
27
+ export const GRANT_CAP_CENTS_PER_DAY = 2000;
28
+ /** …in upay (1 cent = 10 000 upay): what the atomic counter (`mcp_standing_spends`) compares. */
29
+ export const GRANT_CAP_UPAY = GRANT_CAP_CENTS_PER_DAY * 10_000;
30
+ /**
31
+ * The grant's spend over the last 24 h as the atomic counter has it: every `mcp_standing_spends`
32
+ * row — the auto-approve path's per-request locks and the one-claim approvals' spends alike (S3
33
+ * follow-up 4), so racing both paths can never pass the day's cap together.
34
+ */
35
+ export const spentToday = (grantId, now) => sql `(select coalesce(sum(${mcpStandingSpends.upay}), 0) from ${mcpStandingSpends} where ${mcpStandingSpends.grantId} = ${grantId} and ${mcpStandingSpends.createdAt} > ${now.getTime() - DAY_MS})`;
36
+ /** The counter row a one-claim approval's spend writes (the auto-approve path keys by request). */
37
+ const approvalSpendKey = (id) => `approval:${id}`;
38
+ /** ≥ 128 random bits, base64url: an approval id is a capability-shaped link, never guessable. */
39
+ export function newApprovalId() {
40
+ const bytes = crypto.getRandomValues(new Uint8Array(16));
41
+ return btoa(String.fromCharCode(...bytes))
42
+ .replace(/\+/g, "-")
43
+ .replace(/\//g, "_")
44
+ .replace(/=+$/, "");
45
+ }
46
+ /**
47
+ * What an approval is bound to (S3 review "Smaller points"): the protocol, the source, the
48
+ * canonical body, its attachments and the idempotency key. A different body is a different digest,
49
+ * so an approval never moves to another claim.
50
+ */
51
+ export function approvalDigest(r) {
52
+ return sha256Hex(canonicalJson({
53
+ protocolDid: r.protocolDid,
54
+ sourceId: r.sourceId,
55
+ answers: r.answers,
56
+ attachments: r.attachments,
57
+ submitter: r.submitter ?? null,
58
+ metadata: r.metadata ?? null,
59
+ webhookUrl: r.webhookUrl ?? null,
60
+ idempotencyKey: r.idempotencyKey,
61
+ }));
62
+ }
63
+ /** AuthHub's approve page for `id`: it reads the approval from THIS oracle, never from the link. */
64
+ export const approveUrl = (config, id) => `${config.AUTH_HUB_URL}/connect/approve?oracle=${encodeURIComponent(config.ORACLE_HOSTNAME)}&id=${id}`;
65
+ /** `$1.20`: what the approve page shows. */
66
+ export const priceDisplay = (cents) => `$${(cents / 100).toFixed(2)}`;
67
+ /** This app's live (pending or approved) approval of this exact request, if any. */
68
+ export async function liveApproval(db, grantId, requestDigest, now = new Date()) {
69
+ const scope = and(eq(mcpApprovals.grantId, grantId), eq(mcpApprovals.requestDigest, requestDigest));
70
+ await expireStale(db, scope, now);
71
+ return db.query.mcpApprovals.findFirst({
72
+ where: and(scope, inArray(mcpApprovals.status, LIVE)),
73
+ });
74
+ }
75
+ /** The statuses that still hold (or may yet hold) payment authority. */
76
+ const LIVE = ["pending", "approved", "awaiting_3ds"];
77
+ /**
78
+ * Rows of `scope` past their window turn `expired`, the delegation nulled in the SAME statement
79
+ * (S3 review L3): every read and spend runs it first, so no live-looking row outlives its window
80
+ * by so much as a request. The hourly sweep then deletes them.
81
+ */
82
+ async function expireStale(db, scope, now) {
83
+ await db
84
+ .update(mcpApprovals)
85
+ .set({ status: "expired", delegation: null })
86
+ .where(and(scope, inArray(mcpApprovals.status, LIVE), lte(mcpApprovals.expiresAt, now)));
87
+ }
88
+ /**
89
+ * File a pending approval, or find the one a racing call filed first (the partial unique index
90
+ * allows one live row per app and request).
91
+ */
92
+ export async function fileApproval(db, row, now = new Date()) {
93
+ await db
94
+ .insert(mcpApprovals)
95
+ .values({
96
+ ...row,
97
+ id: newApprovalId(),
98
+ expiresAt: new Date(now.getTime() + APPROVAL_TTL_MS),
99
+ createdAt: now,
100
+ })
101
+ .onConflictDoNothing();
102
+ const filed = await liveApproval(db, row.grantId, row.requestDigest);
103
+ if (!filed)
104
+ throw new Error("mcp_approvals: filed but not found");
105
+ return filed;
106
+ }
107
+ /** Retire a live approval (ran out, or the price moved): its delegation goes with it. */
108
+ export async function expireApproval(db, id) {
109
+ await db
110
+ .update(mcpApprovals)
111
+ .set({ status: "expired", delegation: null })
112
+ .where(and(eq(mcpApprovals.id, id), inArray(mcpApprovals.status, LIVE)));
113
+ }
114
+ /**
115
+ * Spend an approval: the ONE batch that lets a payment happen — "spent" for exactly one caller per
116
+ * approval, since the flip needs that caller's own counter row. The delegation stays on the row until the payment ends (`retireDelegation`), so a
117
+ * payment that never settled can be put back (`restoreApproval`).
118
+ */
119
+ export async function spendApproval(db, row, from = "approved", now = new Date()) {
120
+ const { id, grantId } = row;
121
+ const upay = Number(row.maxAmountUpay);
122
+ const spendKey = approvalSpendKey(id);
123
+ const live = and(eq(mcpApprovals.id, id), eq(mcpApprovals.status, from), gt(mcpApprovals.expiresAt, now));
124
+ // The resume of a confirmed 3-D Secure payment was counted when it was first spent (N5) —
125
+ // here, or on the auto-approve path that parked it: it adds nothing to the day's count.
126
+ const fits = from === "awaiting_3ds"
127
+ ? sql `1`
128
+ : sql `${spentToday(grantId, now)} + ${upay} <= ${GRANT_CAP_UPAY}`;
129
+ const spendId = crypto.randomUUID();
130
+ // The flip needs THIS attempt's counter row (by the PK and its spendId), so the cap holds by
131
+ // construction (S3 review of #90). The 3-D Secure resume is the one exception: its row was
132
+ // written when it was first spent and stays (N5) — it counts nothing new and needs only the row.
133
+ const counted = from === "awaiting_3ds"
134
+ ? sql `exists (select 1 from ${mcpStandingSpends} where ${mcpStandingSpends.grantId} = ${grantId} and ${mcpStandingSpends.requestDigest} = ${spendKey})`
135
+ : sql `exists (select 1 from ${mcpStandingSpends} where ${mcpStandingSpends.grantId} = ${grantId} and ${mcpStandingSpends.requestDigest} = ${spendKey} and ${mcpStandingSpends.spendId} = ${spendId})`;
136
+ const [, spent] = await db.batch([
137
+ // The day's counter, written only if this approval is still to spend AND it fits the cap.
138
+ db
139
+ .insert(mcpStandingSpends)
140
+ .select(sql `select ${grantId}, ${spendKey}, ${spendId}, ${from === "awaiting_3ds" ? 0 : upay}, ${now.getTime()} where exists (select 1 from ${mcpApprovals} where ${live}) and ${fits}`)
141
+ .onConflictDoNothing(),
142
+ db
143
+ .update(mcpApprovals)
144
+ .set({ status: "used" })
145
+ .where(and(live, counted))
146
+ .returning({ id: mcpApprovals.id }),
147
+ ]);
148
+ if (spent.length === 1)
149
+ return "spent";
150
+ const still = await db.query.mcpApprovals.findFirst({ columns: { id: true }, where: live });
151
+ if (still)
152
+ return "capped";
153
+ // Lost to the clock or to another call: expire it if it is the clock, delegation and all.
154
+ await expireStale(db, eq(mcpApprovals.id, id), now);
155
+ return "lost";
156
+ }
157
+ /** Definitely nothing reserved: the approval is the user's again, delegation and expiry unchanged. */
158
+ export async function restoreApproval(db, id, now = new Date()) {
159
+ const [restored] = await db.batch([
160
+ db
161
+ .update(mcpApprovals)
162
+ .set({ status: "approved", offerId: null, paymentIntentId: null })
163
+ .where(and(eq(mcpApprovals.id, id), eq(mcpApprovals.status, "used"), gt(mcpApprovals.expiresAt, now)))
164
+ .returning({ id: mcpApprovals.id }),
165
+ // Nothing was paid: its share of the day's cap goes back with it.
166
+ db.delete(mcpStandingSpends).where(and(
167
+ // By the PK's grant prefix, never a scan.
168
+ sql `${mcpStandingSpends.grantId} = (select ${mcpApprovals.grantId} from ${mcpApprovals} where ${mcpApprovals.id} = ${id})`, eq(mcpStandingSpends.requestDigest, approvalSpendKey(id)), sql `exists (select 1 from ${mcpApprovals} where ${mcpApprovals.id} = ${id} and ${mcpApprovals.status} = 'approved')`)),
169
+ ]);
170
+ // Nothing matched (the row expired, or moved on): the caller retires the delegation instead.
171
+ return restored.length === 1;
172
+ }
173
+ /**
174
+ * The card wants 3-D Secure: the spent row waits for the person, bound to the offer and the
175
+ * PaymentIntent the bank challenged. Its delegation stays (the resume's card authorize needs it).
176
+ */
177
+ export async function awaitCardConfirmation(db, id, bound, now = new Date()) {
178
+ const parked = await db
179
+ .update(mcpApprovals)
180
+ .set({ status: "awaiting_3ds", ...bound })
181
+ .where(and(eq(mcpApprovals.id, id), eq(mcpApprovals.status, "used"), gt(mcpApprovals.expiresAt, now)))
182
+ .returning({ id: mcpApprovals.id });
183
+ return parked.length === 1;
184
+ }
185
+ /**
186
+ * A payment from the grant's auto-approve met 3-D Secure: the fresh approval of this request is
187
+ * parked `awaiting_3ds` with the standing delegation, so the resume pays exactly that card offer.
188
+ */
189
+ export async function parkStandingPayment(db, id, delegation, bound) {
190
+ const parked = await db
191
+ .update(mcpApprovals)
192
+ .set({ status: "awaiting_3ds", delegation, ...bound })
193
+ .where(and(eq(mcpApprovals.id, id), eq(mcpApprovals.status, "pending")))
194
+ .returning({ id: mcpApprovals.id });
195
+ return parked.length === 1;
196
+ }
197
+ /** The payment ended (paid, or ambiguous): the spent row keeps no payment authority. */
198
+ export async function retireDelegation(db, id) {
199
+ await db
200
+ .update(mcpApprovals)
201
+ .set({ delegation: null })
202
+ .where(and(eq(mcpApprovals.id, id), eq(mcpApprovals.status, "used")));
203
+ }
204
+ /** The back-channel's view: an approval that exists AND is pending AND has not run out. */
205
+ export async function pendingApproval(db, id, now = new Date()) {
206
+ await expireStale(db, eq(mcpApprovals.id, id), now);
207
+ return db.query.mcpApprovals.findFirst({
208
+ where: and(eq(mcpApprovals.id, id), eq(mcpApprovals.status, "pending")),
209
+ });
210
+ }
211
+ /** AuthHub's answer: approved (with its delegation, null for billing `none`), or declined. */
212
+ export async function answerApproval(db, id, answer, now = new Date()) {
213
+ const set = answer.status === "approved"
214
+ ? {
215
+ status: "approved",
216
+ delegation: answer.delegation,
217
+ expiresAt: new Date(now.getTime() + APPROVAL_TTL_MS),
218
+ }
219
+ : { status: "declined", delegation: null };
220
+ const done = await db
221
+ .update(mcpApprovals)
222
+ .set(set)
223
+ .where(and(eq(mcpApprovals.id, id), eq(mcpApprovals.status, "pending"), gt(mcpApprovals.expiresAt, now)))
224
+ .returning({ id: mcpApprovals.id });
225
+ return done.length === 1;
226
+ }
227
+ /**
228
+ * Why `delegation` cannot pay for `row`, or null when it can: a well-formed payment delegation
229
+ * whose root issuer is the approval's user, bound to this oracle, to OUR facilitator, for exactly
230
+ * the approved price, and not expired. Its signature is the facilitator's to verify at payment.
231
+ */
232
+ export async function delegationRefusal(delegation, row, expect, now = Math.floor(Date.now() / 1000)) {
233
+ const parsed = await parsePaymentDelegation(delegation);
234
+ if (!parsed.ok)
235
+ return { reason: "invalid_delegation", message: parsed.reason };
236
+ const d = parsed.delegation;
237
+ if (d.issuer !== row.did) {
238
+ return { reason: "issuer_mismatch", message: "it is not signed by the approval's user" };
239
+ }
240
+ if (!d.oracles?.includes(expect.oracleDid)) {
241
+ return { reason: "oracle_mismatch", message: "it is not bound to this oracle" };
242
+ }
243
+ if (d.audience !== expect.facilitatorDid) {
244
+ return {
245
+ reason: "facilitator_mismatch",
246
+ message: "it is for a different payment facilitator than this oracle's",
247
+ audience: d.audience,
248
+ };
249
+ }
250
+ // EXACTLY the price: `maxAmount` is a total across rails, so more than one claim's price would be
251
+ // standing authority this approval never showed the user. (`≥` belongs to a standing grant only.)
252
+ if (BigInt(d.maxAmount) !== BigInt(row.maxAmountUpay)) {
253
+ return { reason: "amount_mismatch", message: "its amount is not exactly the approved price" };
254
+ }
255
+ if (d.expiration <= now)
256
+ return { reason: "expired", message: "it has expired" };
257
+ if (expect.validUntil !== undefined && d.expiration < expect.validUntil) {
258
+ return { reason: "expires_too_soon", message: "it expires before the auto-approve ends" };
259
+ }
260
+ return null;
261
+ }
262
+ /**
263
+ * Has this grant's spend over the last 24 h plus `cents` passed the cap? Every charge that may
264
+ * still move money counts (`released` / `failed` moved nothing), as the per-key cap counts.
265
+ */
266
+ export async function overGrantCap(db, grantId, cents, now = Date.now()) {
267
+ const [row] = await db
268
+ .select({ spent: sql `coalesce(sum(${apiCharges.amountCents}), 0)` })
269
+ .from(apiCharges)
270
+ .where(and(eq(apiCharges.via, `oauth:${grantId}`), gt(apiCharges.createdAt, new Date(now - DAY_MS)), notInArray(apiCharges.status, ["released", "failed"])));
271
+ return (row?.spent ?? 0) + cents > GRANT_CAP_CENTS_PER_DAY;
272
+ }
273
+ //# sourceMappingURL=approvals.js.map