@ixo/openhands-sdk 0.3.0 → 0.4.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 (487) hide show
  1. package/dist/cjs/campaign/campaign.js +3 -2
  2. package/dist/cjs/campaign/campaign.js.map +1 -1
  3. package/dist/cjs/campaign/funding.d.ts.map +1 -1
  4. package/dist/cjs/campaign/funding.js +4 -1
  5. package/dist/cjs/campaign/funding.js.map +1 -1
  6. package/dist/cjs/campaign/pool.d.ts.map +1 -1
  7. package/dist/cjs/campaign/pool.js +4 -3
  8. package/dist/cjs/campaign/pool.js.map +1 -1
  9. package/dist/cjs/campaign/record.d.ts.map +1 -1
  10. package/dist/cjs/campaign/record.js +1 -1
  11. package/dist/cjs/campaign/record.js.map +1 -1
  12. package/dist/cjs/campaign/spots.d.ts.map +1 -1
  13. package/dist/cjs/campaign/spots.js +10 -8
  14. package/dist/cjs/campaign/spots.js.map +1 -1
  15. package/dist/cjs/campaign/treasurySends.d.ts.map +1 -1
  16. package/dist/cjs/campaign/treasurySends.js +3 -3
  17. package/dist/cjs/campaign/treasurySends.js.map +1 -1
  18. package/dist/cjs/chain/ask.d.ts +104 -14
  19. package/dist/cjs/chain/ask.d.ts.map +1 -1
  20. package/dist/cjs/chain/ask.js +151 -78
  21. package/dist/cjs/chain/ask.js.map +1 -1
  22. package/dist/cjs/chain/askImage.d.ts +19 -0
  23. package/dist/cjs/chain/askImage.d.ts.map +1 -0
  24. package/dist/cjs/chain/askImage.js +56 -0
  25. package/dist/cjs/chain/askImage.js.map +1 -0
  26. package/dist/cjs/chain/bridge.d.ts +7 -33
  27. package/dist/cjs/chain/bridge.d.ts.map +1 -1
  28. package/dist/cjs/chain/bridge.js +10 -25
  29. package/dist/cjs/chain/bridge.js.map +1 -1
  30. package/dist/cjs/chain/claimSubmit.d.ts +15 -0
  31. package/dist/cjs/chain/claimSubmit.d.ts.map +1 -0
  32. package/dist/cjs/chain/claimSubmit.js +14 -0
  33. package/dist/cjs/chain/claimSubmit.js.map +1 -0
  34. package/dist/cjs/chain/delegate.d.ts +52 -7
  35. package/dist/cjs/chain/delegate.d.ts.map +1 -1
  36. package/dist/cjs/chain/delegate.js +66 -14
  37. package/dist/cjs/chain/delegate.js.map +1 -1
  38. package/dist/cjs/chain/domainIndexer.d.ts +26 -0
  39. package/dist/cjs/chain/domainIndexer.d.ts.map +1 -0
  40. package/dist/cjs/chain/domainIndexer.js +51 -0
  41. package/dist/cjs/chain/domainIndexer.js.map +1 -0
  42. package/dist/cjs/chain/entityShape.d.ts +31 -2
  43. package/dist/cjs/chain/entityShape.d.ts.map +1 -1
  44. package/dist/cjs/chain/entityShape.js +71 -8
  45. package/dist/cjs/chain/entityShape.js.map +1 -1
  46. package/dist/cjs/chain/env.d.ts +33 -3
  47. package/dist/cjs/chain/env.d.ts.map +1 -1
  48. package/dist/cjs/chain/env.js +38 -6
  49. package/dist/cjs/chain/env.js.map +1 -1
  50. package/dist/cjs/chain/guest.d.ts +14 -0
  51. package/dist/cjs/chain/guest.d.ts.map +1 -1
  52. package/dist/cjs/chain/guest.js +9 -9
  53. package/dist/cjs/chain/guest.js.map +1 -1
  54. package/dist/cjs/chain/money.d.ts +53 -2
  55. package/dist/cjs/chain/money.d.ts.map +1 -1
  56. package/dist/cjs/chain/money.js +73 -6
  57. package/dist/cjs/chain/money.js.map +1 -1
  58. package/dist/cjs/chain/orgReviewBilling.d.ts +124 -0
  59. package/dist/cjs/chain/orgReviewBilling.d.ts.map +1 -0
  60. package/dist/cjs/chain/orgReviewBilling.js +290 -0
  61. package/dist/cjs/chain/orgReviewBilling.js.map +1 -0
  62. package/dist/cjs/chain/orgReviewBillingSign.d.ts +63 -0
  63. package/dist/cjs/chain/orgReviewBillingSign.d.ts.map +1 -0
  64. package/dist/cjs/chain/orgReviewBillingSign.js +166 -0
  65. package/dist/cjs/chain/orgReviewBillingSign.js.map +1 -0
  66. package/dist/cjs/chain/payoutSettings.d.ts +97 -0
  67. package/dist/cjs/chain/payoutSettings.d.ts.map +1 -0
  68. package/dist/cjs/chain/payoutSettings.js +123 -0
  69. package/dist/cjs/chain/payoutSettings.js.map +1 -0
  70. package/dist/cjs/chain/payoutTerms.d.ts +72 -0
  71. package/dist/cjs/chain/payoutTerms.d.ts.map +1 -0
  72. package/dist/cjs/chain/payoutTerms.js +141 -0
  73. package/dist/cjs/chain/payoutTerms.js.map +1 -0
  74. package/dist/cjs/chain/query.d.ts +14 -0
  75. package/dist/cjs/chain/query.d.ts.map +1 -1
  76. package/dist/cjs/chain/query.js +27 -0
  77. package/dist/cjs/chain/query.js.map +1 -1
  78. package/dist/cjs/chain/reviewBilling.d.ts +86 -0
  79. package/dist/cjs/chain/reviewBilling.d.ts.map +1 -0
  80. package/dist/cjs/chain/reviewBilling.js +265 -0
  81. package/dist/cjs/chain/reviewBilling.js.map +1 -0
  82. package/dist/cjs/chain/store.d.ts +7 -6
  83. package/dist/cjs/chain/store.d.ts.map +1 -1
  84. package/dist/cjs/chain/store.js +7 -6
  85. package/dist/cjs/chain/store.js.map +1 -1
  86. package/dist/cjs/chain/subscription.d.ts +0 -7
  87. package/dist/cjs/chain/subscription.d.ts.map +1 -1
  88. package/dist/cjs/chain/subscription.js +4 -47
  89. package/dist/cjs/chain/subscription.js.map +1 -1
  90. package/dist/cjs/chain/takeBack.d.ts +12 -0
  91. package/dist/cjs/chain/takeBack.d.ts.map +1 -1
  92. package/dist/cjs/chain/takeBack.js +24 -10
  93. package/dist/cjs/chain/takeBack.js.map +1 -1
  94. package/dist/cjs/chain/why.d.ts +44 -0
  95. package/dist/cjs/chain/why.d.ts.map +1 -0
  96. package/dist/cjs/chain/why.js +153 -0
  97. package/dist/cjs/chain/why.js.map +1 -0
  98. package/dist/cjs/chain/whyMint.d.ts +8 -0
  99. package/dist/cjs/chain/whyMint.d.ts.map +1 -0
  100. package/dist/cjs/chain/whyMint.js +53 -0
  101. package/dist/cjs/chain/whyMint.js.map +1 -0
  102. package/dist/cjs/chain.d.ts +8 -4
  103. package/dist/cjs/chain.d.ts.map +1 -1
  104. package/dist/cjs/chain.js +21 -9
  105. package/dist/cjs/chain.js.map +1 -1
  106. package/dist/cjs/config.d.ts +11 -5
  107. package/dist/cjs/config.d.ts.map +1 -1
  108. package/dist/cjs/config.js +2 -0
  109. package/dist/cjs/config.js.map +1 -1
  110. package/dist/cjs/data/askEntity.d.ts +40 -0
  111. package/dist/cjs/data/askEntity.d.ts.map +1 -0
  112. package/dist/cjs/data/askEntity.js +48 -0
  113. package/dist/cjs/data/askEntity.js.map +1 -0
  114. package/dist/cjs/data/askLinks.d.ts +6 -0
  115. package/dist/cjs/data/askLinks.d.ts.map +1 -0
  116. package/dist/cjs/data/askLinks.js +21 -0
  117. package/dist/cjs/data/askLinks.js.map +1 -0
  118. package/dist/cjs/data/board/assemble.d.ts.map +1 -1
  119. package/dist/cjs/data/board/assemble.js +15 -2
  120. package/dist/cjs/data/board/assemble.js.map +1 -1
  121. package/dist/cjs/data/board/facts.d.ts +11 -0
  122. package/dist/cjs/data/board/facts.d.ts.map +1 -1
  123. package/dist/cjs/data/board/facts.js +16 -0
  124. package/dist/cjs/data/board/facts.js.map +1 -1
  125. package/dist/cjs/data/board/read.d.ts.map +1 -1
  126. package/dist/cjs/data/board/read.js +2 -1
  127. package/dist/cjs/data/board/read.js.map +1 -1
  128. package/dist/cjs/data/board/types.d.ts +9 -0
  129. package/dist/cjs/data/board/types.d.ts.map +1 -1
  130. package/dist/cjs/data/board/types.js.map +1 -1
  131. package/dist/cjs/data/docs.d.ts +10 -2
  132. package/dist/cjs/data/docs.d.ts.map +1 -1
  133. package/dist/cjs/data/docs.js +43 -3
  134. package/dist/cjs/data/docs.js.map +1 -1
  135. package/dist/cjs/data/format.js +1 -1
  136. package/dist/cjs/data/format.js.map +1 -1
  137. package/dist/cjs/data/install.d.ts +43 -2
  138. package/dist/cjs/data/install.d.ts.map +1 -1
  139. package/dist/cjs/data/install.js +60 -10
  140. package/dist/cjs/data/install.js.map +1 -1
  141. package/dist/cjs/data/oracleInfo.d.ts +6 -1
  142. package/dist/cjs/data/oracleInfo.d.ts.map +1 -1
  143. package/dist/cjs/data/oracleInfo.js +22 -3
  144. package/dist/cjs/data/oracleInfo.js.map +1 -1
  145. package/dist/cjs/data/oracles.d.ts +62 -5
  146. package/dist/cjs/data/oracles.d.ts.map +1 -1
  147. package/dist/cjs/data/oracles.js +90 -11
  148. package/dist/cjs/data/oracles.js.map +1 -1
  149. package/dist/cjs/data/orgPayouts.d.ts +87 -0
  150. package/dist/cjs/data/orgPayouts.d.ts.map +1 -0
  151. package/dist/cjs/data/orgPayouts.js +183 -0
  152. package/dist/cjs/data/orgPayouts.js.map +1 -0
  153. package/dist/cjs/data/plans.d.ts +8 -0
  154. package/dist/cjs/data/plans.d.ts.map +1 -0
  155. package/dist/cjs/data/plans.js +12 -0
  156. package/dist/cjs/data/plans.js.map +1 -0
  157. package/dist/cjs/data/profiles.d.ts +20 -0
  158. package/dist/cjs/data/profiles.d.ts.map +1 -1
  159. package/dist/cjs/data/profiles.js +63 -4
  160. package/dist/cjs/data/profiles.js.map +1 -1
  161. package/dist/cjs/data/receipt.d.ts +7 -0
  162. package/dist/cjs/data/receipt.d.ts.map +1 -1
  163. package/dist/cjs/data/receipt.js +19 -4
  164. package/dist/cjs/data/receipt.js.map +1 -1
  165. package/dist/cjs/data/resources.d.ts +3 -0
  166. package/dist/cjs/data/resources.d.ts.map +1 -1
  167. package/dist/cjs/data/resources.js +4 -1
  168. package/dist/cjs/data/resources.js.map +1 -1
  169. package/dist/cjs/data/threads.d.ts +14 -0
  170. package/dist/cjs/data/threads.d.ts.map +1 -1
  171. package/dist/cjs/data/threads.js +32 -20
  172. package/dist/cjs/data/threads.js.map +1 -1
  173. package/dist/cjs/data/trace.d.ts +8 -0
  174. package/dist/cjs/data/trace.d.ts.map +1 -1
  175. package/dist/cjs/data/trace.js +1 -1
  176. package/dist/cjs/data/trace.js.map +1 -1
  177. package/dist/cjs/data/traceWords.d.ts +4 -1
  178. package/dist/cjs/data/traceWords.d.ts.map +1 -1
  179. package/dist/cjs/data/traceWords.js +8 -2
  180. package/dist/cjs/data/traceWords.js.map +1 -1
  181. package/dist/cjs/data/why.d.ts +38 -0
  182. package/dist/cjs/data/why.d.ts.map +1 -0
  183. package/dist/cjs/data/why.js +86 -0
  184. package/dist/cjs/data/why.js.map +1 -0
  185. package/dist/cjs/data/whyReceipt.d.ts +33 -0
  186. package/dist/cjs/data/whyReceipt.d.ts.map +1 -0
  187. package/dist/cjs/data/whyReceipt.js +291 -0
  188. package/dist/cjs/data/whyReceipt.js.map +1 -0
  189. package/dist/cjs/geo/exifcarry.d.ts +9 -0
  190. package/dist/cjs/geo/exifcarry.d.ts.map +1 -1
  191. package/dist/cjs/geo/exifcarry.js +35 -0
  192. package/dist/cjs/geo/exifcarry.js.map +1 -1
  193. package/dist/cjs/geo/geohash.d.ts +11 -0
  194. package/dist/cjs/geo/geohash.d.ts.map +1 -1
  195. package/dist/cjs/geo/geohash.js +53 -3
  196. package/dist/cjs/geo/geohash.js.map +1 -1
  197. package/dist/cjs/geo/provenance.d.ts +41 -0
  198. package/dist/cjs/geo/provenance.d.ts.map +1 -0
  199. package/dist/cjs/geo/provenance.js +134 -0
  200. package/dist/cjs/geo/provenance.js.map +1 -0
  201. package/dist/cjs/rubric/bridge.d.ts +98 -2
  202. package/dist/cjs/rubric/bridge.d.ts.map +1 -1
  203. package/dist/cjs/rubric/bridge.js +132 -15
  204. package/dist/cjs/rubric/bridge.js.map +1 -1
  205. package/dist/cjs/rubric/card.d.ts +28 -14
  206. package/dist/cjs/rubric/card.d.ts.map +1 -1
  207. package/dist/cjs/rubric/card.js +28 -7
  208. package/dist/cjs/rubric/card.js.map +1 -1
  209. package/dist/cjs/rubric/claimForm.d.ts +116 -0
  210. package/dist/cjs/rubric/claimForm.d.ts.map +1 -1
  211. package/dist/cjs/rubric/claimForm.js +12 -1
  212. package/dist/cjs/rubric/claimForm.js.map +1 -1
  213. package/dist/cjs/rubric/compose.d.ts +5 -0
  214. package/dist/cjs/rubric/compose.d.ts.map +1 -1
  215. package/dist/cjs/rubric/compose.js +9 -3
  216. package/dist/cjs/rubric/compose.js.map +1 -1
  217. package/dist/cjs/rubric/gateMet.d.ts.map +1 -1
  218. package/dist/cjs/rubric/gateMet.js +4 -2
  219. package/dist/cjs/rubric/gateMet.js.map +1 -1
  220. package/dist/cjs/rubric/leg.d.ts +2 -2
  221. package/dist/cjs/rubric/leg.d.ts.map +1 -1
  222. package/dist/cjs/rubric/leg.js +7 -5
  223. package/dist/cjs/rubric/leg.js.map +1 -1
  224. package/dist/cjs/rubric/marketPlan.d.ts +41 -3
  225. package/dist/cjs/rubric/marketPlan.d.ts.map +1 -1
  226. package/dist/cjs/rubric/marketPlan.js +110 -10
  227. package/dist/cjs/rubric/marketPlan.js.map +1 -1
  228. package/dist/cjs/rubric/observation.d.ts +56 -14
  229. package/dist/cjs/rubric/observation.d.ts.map +1 -1
  230. package/dist/cjs/rubric/observation.js +61 -11
  231. package/dist/cjs/rubric/observation.js.map +1 -1
  232. package/dist/cjs/rubric/survey.d.ts +65 -0
  233. package/dist/cjs/rubric/survey.d.ts.map +1 -0
  234. package/dist/cjs/rubric/survey.js +101 -0
  235. package/dist/cjs/rubric/survey.js.map +1 -0
  236. package/dist/cjs/rubric/terms.d.ts +7 -0
  237. package/dist/cjs/rubric/terms.d.ts.map +1 -1
  238. package/dist/cjs/rubric/terms.js +12 -1
  239. package/dist/cjs/rubric/terms.js.map +1 -1
  240. package/dist/cjs/rubric.d.ts +1 -1
  241. package/dist/cjs/rubric.d.ts.map +1 -1
  242. package/dist/cjs/rubric.js +4 -2
  243. package/dist/cjs/rubric.js.map +1 -1
  244. package/dist/esm/campaign/campaign.js +4 -3
  245. package/dist/esm/campaign/campaign.js.map +1 -1
  246. package/dist/esm/campaign/funding.d.ts.map +1 -1
  247. package/dist/esm/campaign/funding.js +5 -2
  248. package/dist/esm/campaign/funding.js.map +1 -1
  249. package/dist/esm/campaign/pool.d.ts.map +1 -1
  250. package/dist/esm/campaign/pool.js +4 -3
  251. package/dist/esm/campaign/pool.js.map +1 -1
  252. package/dist/esm/campaign/record.d.ts.map +1 -1
  253. package/dist/esm/campaign/record.js +2 -2
  254. package/dist/esm/campaign/record.js.map +1 -1
  255. package/dist/esm/campaign/spots.d.ts.map +1 -1
  256. package/dist/esm/campaign/spots.js +10 -8
  257. package/dist/esm/campaign/spots.js.map +1 -1
  258. package/dist/esm/campaign/treasurySends.d.ts.map +1 -1
  259. package/dist/esm/campaign/treasurySends.js +4 -4
  260. package/dist/esm/campaign/treasurySends.js.map +1 -1
  261. package/dist/esm/chain/ask.d.ts +104 -14
  262. package/dist/esm/chain/ask.d.ts.map +1 -1
  263. package/dist/esm/chain/ask.js +152 -80
  264. package/dist/esm/chain/ask.js.map +1 -1
  265. package/dist/esm/chain/askImage.d.ts +19 -0
  266. package/dist/esm/chain/askImage.d.ts.map +1 -0
  267. package/dist/esm/chain/askImage.js +50 -0
  268. package/dist/esm/chain/askImage.js.map +1 -0
  269. package/dist/esm/chain/bridge.d.ts +7 -33
  270. package/dist/esm/chain/bridge.d.ts.map +1 -1
  271. package/dist/esm/chain/bridge.js +10 -24
  272. package/dist/esm/chain/bridge.js.map +1 -1
  273. package/dist/esm/chain/claimSubmit.d.ts +15 -0
  274. package/dist/esm/chain/claimSubmit.d.ts.map +1 -0
  275. package/dist/esm/chain/claimSubmit.js +10 -0
  276. package/dist/esm/chain/claimSubmit.js.map +1 -0
  277. package/dist/esm/chain/delegate.d.ts +52 -7
  278. package/dist/esm/chain/delegate.d.ts.map +1 -1
  279. package/dist/esm/chain/delegate.js +64 -13
  280. package/dist/esm/chain/delegate.js.map +1 -1
  281. package/dist/esm/chain/domainIndexer.d.ts +26 -0
  282. package/dist/esm/chain/domainIndexer.d.ts.map +1 -0
  283. package/dist/esm/chain/domainIndexer.js +48 -0
  284. package/dist/esm/chain/domainIndexer.js.map +1 -0
  285. package/dist/esm/chain/entityShape.d.ts +31 -2
  286. package/dist/esm/chain/entityShape.d.ts.map +1 -1
  287. package/dist/esm/chain/entityShape.js +65 -7
  288. package/dist/esm/chain/entityShape.js.map +1 -1
  289. package/dist/esm/chain/env.d.ts +33 -3
  290. package/dist/esm/chain/env.d.ts.map +1 -1
  291. package/dist/esm/chain/env.js +33 -5
  292. package/dist/esm/chain/env.js.map +1 -1
  293. package/dist/esm/chain/guest.d.ts +14 -0
  294. package/dist/esm/chain/guest.d.ts.map +1 -1
  295. package/dist/esm/chain/guest.js +7 -8
  296. package/dist/esm/chain/guest.js.map +1 -1
  297. package/dist/esm/chain/money.d.ts +53 -2
  298. package/dist/esm/chain/money.d.ts.map +1 -1
  299. package/dist/esm/chain/money.js +63 -4
  300. package/dist/esm/chain/money.js.map +1 -1
  301. package/dist/esm/chain/orgReviewBilling.d.ts +124 -0
  302. package/dist/esm/chain/orgReviewBilling.d.ts.map +1 -0
  303. package/dist/esm/chain/orgReviewBilling.js +241 -0
  304. package/dist/esm/chain/orgReviewBilling.js.map +1 -0
  305. package/dist/esm/chain/orgReviewBillingSign.d.ts +63 -0
  306. package/dist/esm/chain/orgReviewBillingSign.d.ts.map +1 -0
  307. package/dist/esm/chain/orgReviewBillingSign.js +124 -0
  308. package/dist/esm/chain/orgReviewBillingSign.js.map +1 -0
  309. package/dist/esm/chain/payoutSettings.d.ts +97 -0
  310. package/dist/esm/chain/payoutSettings.d.ts.map +1 -0
  311. package/dist/esm/chain/payoutSettings.js +111 -0
  312. package/dist/esm/chain/payoutSettings.js.map +1 -0
  313. package/dist/esm/chain/payoutTerms.d.ts +72 -0
  314. package/dist/esm/chain/payoutTerms.d.ts.map +1 -0
  315. package/dist/esm/chain/payoutTerms.js +127 -0
  316. package/dist/esm/chain/payoutTerms.js.map +1 -0
  317. package/dist/esm/chain/query.d.ts +14 -0
  318. package/dist/esm/chain/query.d.ts.map +1 -1
  319. package/dist/esm/chain/query.js +25 -0
  320. package/dist/esm/chain/query.js.map +1 -1
  321. package/dist/esm/chain/reviewBilling.d.ts +86 -0
  322. package/dist/esm/chain/reviewBilling.d.ts.map +1 -0
  323. package/dist/esm/chain/reviewBilling.js +215 -0
  324. package/dist/esm/chain/reviewBilling.js.map +1 -0
  325. package/dist/esm/chain/store.d.ts +7 -6
  326. package/dist/esm/chain/store.d.ts.map +1 -1
  327. package/dist/esm/chain/store.js +7 -6
  328. package/dist/esm/chain/store.js.map +1 -1
  329. package/dist/esm/chain/subscription.d.ts +0 -7
  330. package/dist/esm/chain/subscription.d.ts.map +1 -1
  331. package/dist/esm/chain/subscription.js +4 -13
  332. package/dist/esm/chain/subscription.js.map +1 -1
  333. package/dist/esm/chain/takeBack.d.ts +12 -0
  334. package/dist/esm/chain/takeBack.d.ts.map +1 -1
  335. package/dist/esm/chain/takeBack.js +22 -9
  336. package/dist/esm/chain/takeBack.js.map +1 -1
  337. package/dist/esm/chain/why.d.ts +44 -0
  338. package/dist/esm/chain/why.d.ts.map +1 -0
  339. package/dist/esm/chain/why.js +111 -0
  340. package/dist/esm/chain/why.js.map +1 -0
  341. package/dist/esm/chain/whyMint.d.ts +8 -0
  342. package/dist/esm/chain/whyMint.d.ts.map +1 -0
  343. package/dist/esm/chain/whyMint.js +17 -0
  344. package/dist/esm/chain/whyMint.js.map +1 -0
  345. package/dist/esm/chain.d.ts +8 -4
  346. package/dist/esm/chain.d.ts.map +1 -1
  347. package/dist/esm/chain.js +9 -4
  348. package/dist/esm/chain.js.map +1 -1
  349. package/dist/esm/config.d.ts +11 -5
  350. package/dist/esm/config.d.ts.map +1 -1
  351. package/dist/esm/config.js +3 -1
  352. package/dist/esm/config.js.map +1 -1
  353. package/dist/esm/data/askEntity.d.ts +40 -0
  354. package/dist/esm/data/askEntity.d.ts.map +1 -0
  355. package/dist/esm/data/askEntity.js +41 -0
  356. package/dist/esm/data/askEntity.js.map +1 -0
  357. package/dist/esm/data/askLinks.d.ts +6 -0
  358. package/dist/esm/data/askLinks.d.ts.map +1 -0
  359. package/dist/esm/data/askLinks.js +16 -0
  360. package/dist/esm/data/askLinks.js.map +1 -0
  361. package/dist/esm/data/board/assemble.d.ts.map +1 -1
  362. package/dist/esm/data/board/assemble.js +15 -2
  363. package/dist/esm/data/board/assemble.js.map +1 -1
  364. package/dist/esm/data/board/facts.d.ts +11 -0
  365. package/dist/esm/data/board/facts.d.ts.map +1 -1
  366. package/dist/esm/data/board/facts.js +15 -0
  367. package/dist/esm/data/board/facts.js.map +1 -1
  368. package/dist/esm/data/board/read.d.ts.map +1 -1
  369. package/dist/esm/data/board/read.js +2 -1
  370. package/dist/esm/data/board/read.js.map +1 -1
  371. package/dist/esm/data/board/types.d.ts +9 -0
  372. package/dist/esm/data/board/types.d.ts.map +1 -1
  373. package/dist/esm/data/board/types.js.map +1 -1
  374. package/dist/esm/data/docs.d.ts +10 -2
  375. package/dist/esm/data/docs.d.ts.map +1 -1
  376. package/dist/esm/data/docs.js +43 -4
  377. package/dist/esm/data/docs.js.map +1 -1
  378. package/dist/esm/data/format.js +1 -1
  379. package/dist/esm/data/format.js.map +1 -1
  380. package/dist/esm/data/install.d.ts +43 -2
  381. package/dist/esm/data/install.d.ts.map +1 -1
  382. package/dist/esm/data/install.js +56 -9
  383. package/dist/esm/data/install.js.map +1 -1
  384. package/dist/esm/data/oracleInfo.d.ts +6 -1
  385. package/dist/esm/data/oracleInfo.d.ts.map +1 -1
  386. package/dist/esm/data/oracleInfo.js +22 -3
  387. package/dist/esm/data/oracleInfo.js.map +1 -1
  388. package/dist/esm/data/oracles.d.ts +62 -5
  389. package/dist/esm/data/oracles.d.ts.map +1 -1
  390. package/dist/esm/data/oracles.js +87 -12
  391. package/dist/esm/data/oracles.js.map +1 -1
  392. package/dist/esm/data/orgPayouts.d.ts +87 -0
  393. package/dist/esm/data/orgPayouts.d.ts.map +1 -0
  394. package/dist/esm/data/orgPayouts.js +170 -0
  395. package/dist/esm/data/orgPayouts.js.map +1 -0
  396. package/dist/esm/data/plans.d.ts +8 -0
  397. package/dist/esm/data/plans.d.ts.map +1 -0
  398. package/dist/esm/data/plans.js +8 -0
  399. package/dist/esm/data/plans.js.map +1 -0
  400. package/dist/esm/data/profiles.d.ts +20 -0
  401. package/dist/esm/data/profiles.d.ts.map +1 -1
  402. package/dist/esm/data/profiles.js +60 -4
  403. package/dist/esm/data/profiles.js.map +1 -1
  404. package/dist/esm/data/receipt.d.ts +7 -0
  405. package/dist/esm/data/receipt.d.ts.map +1 -1
  406. package/dist/esm/data/receipt.js +20 -5
  407. package/dist/esm/data/receipt.js.map +1 -1
  408. package/dist/esm/data/resources.d.ts +3 -0
  409. package/dist/esm/data/resources.d.ts.map +1 -1
  410. package/dist/esm/data/resources.js +2 -0
  411. package/dist/esm/data/resources.js.map +1 -1
  412. package/dist/esm/data/threads.d.ts +14 -0
  413. package/dist/esm/data/threads.d.ts.map +1 -1
  414. package/dist/esm/data/threads.js +32 -21
  415. package/dist/esm/data/threads.js.map +1 -1
  416. package/dist/esm/data/trace.d.ts +8 -0
  417. package/dist/esm/data/trace.d.ts.map +1 -1
  418. package/dist/esm/data/trace.js +1 -1
  419. package/dist/esm/data/trace.js.map +1 -1
  420. package/dist/esm/data/traceWords.d.ts +4 -1
  421. package/dist/esm/data/traceWords.d.ts.map +1 -1
  422. package/dist/esm/data/traceWords.js +8 -2
  423. package/dist/esm/data/traceWords.js.map +1 -1
  424. package/dist/esm/data/why.d.ts +38 -0
  425. package/dist/esm/data/why.d.ts.map +1 -0
  426. package/dist/esm/data/why.js +78 -0
  427. package/dist/esm/data/why.js.map +1 -0
  428. package/dist/esm/data/whyReceipt.d.ts +33 -0
  429. package/dist/esm/data/whyReceipt.d.ts.map +1 -0
  430. package/dist/esm/data/whyReceipt.js +284 -0
  431. package/dist/esm/data/whyReceipt.js.map +1 -0
  432. package/dist/esm/geo/exifcarry.d.ts +9 -0
  433. package/dist/esm/geo/exifcarry.d.ts.map +1 -1
  434. package/dist/esm/geo/exifcarry.js +34 -0
  435. package/dist/esm/geo/exifcarry.js.map +1 -1
  436. package/dist/esm/geo/geohash.d.ts +11 -0
  437. package/dist/esm/geo/geohash.d.ts.map +1 -1
  438. package/dist/esm/geo/geohash.js +52 -3
  439. package/dist/esm/geo/geohash.js.map +1 -1
  440. package/dist/esm/geo/provenance.d.ts +41 -0
  441. package/dist/esm/geo/provenance.d.ts.map +1 -0
  442. package/dist/esm/geo/provenance.js +129 -0
  443. package/dist/esm/geo/provenance.js.map +1 -0
  444. package/dist/esm/rubric/bridge.d.ts +98 -2
  445. package/dist/esm/rubric/bridge.d.ts.map +1 -1
  446. package/dist/esm/rubric/bridge.js +130 -14
  447. package/dist/esm/rubric/bridge.js.map +1 -1
  448. package/dist/esm/rubric/card.d.ts +28 -14
  449. package/dist/esm/rubric/card.d.ts.map +1 -1
  450. package/dist/esm/rubric/card.js +24 -5
  451. package/dist/esm/rubric/card.js.map +1 -1
  452. package/dist/esm/rubric/claimForm.d.ts +116 -0
  453. package/dist/esm/rubric/claimForm.d.ts.map +1 -1
  454. package/dist/esm/rubric/claimForm.js +11 -0
  455. package/dist/esm/rubric/claimForm.js.map +1 -1
  456. package/dist/esm/rubric/compose.d.ts +5 -0
  457. package/dist/esm/rubric/compose.d.ts.map +1 -1
  458. package/dist/esm/rubric/compose.js +7 -2
  459. package/dist/esm/rubric/compose.js.map +1 -1
  460. package/dist/esm/rubric/gateMet.d.ts.map +1 -1
  461. package/dist/esm/rubric/gateMet.js +4 -2
  462. package/dist/esm/rubric/gateMet.js.map +1 -1
  463. package/dist/esm/rubric/leg.d.ts +2 -2
  464. package/dist/esm/rubric/leg.d.ts.map +1 -1
  465. package/dist/esm/rubric/leg.js +7 -5
  466. package/dist/esm/rubric/leg.js.map +1 -1
  467. package/dist/esm/rubric/marketPlan.d.ts +41 -3
  468. package/dist/esm/rubric/marketPlan.d.ts.map +1 -1
  469. package/dist/esm/rubric/marketPlan.js +107 -9
  470. package/dist/esm/rubric/marketPlan.js.map +1 -1
  471. package/dist/esm/rubric/observation.d.ts +56 -14
  472. package/dist/esm/rubric/observation.d.ts.map +1 -1
  473. package/dist/esm/rubric/observation.js +61 -12
  474. package/dist/esm/rubric/observation.js.map +1 -1
  475. package/dist/esm/rubric/survey.d.ts +65 -0
  476. package/dist/esm/rubric/survey.d.ts.map +1 -0
  477. package/dist/esm/rubric/survey.js +94 -0
  478. package/dist/esm/rubric/survey.js.map +1 -0
  479. package/dist/esm/rubric/terms.d.ts +7 -0
  480. package/dist/esm/rubric/terms.d.ts.map +1 -1
  481. package/dist/esm/rubric/terms.js +12 -2
  482. package/dist/esm/rubric/terms.js.map +1 -1
  483. package/dist/esm/rubric.d.ts +1 -1
  484. package/dist/esm/rubric.d.ts.map +1 -1
  485. package/dist/esm/rubric.js +1 -1
  486. package/dist/esm/rubric.js.map +1 -1
  487. package/package.json +8 -2
@@ -0,0 +1,124 @@
1
+ /**
2
+ * "Pay for reviews" on an org's settings page (owner request 2026-10-14): where an org's per-review checker
3
+ * billing stands on one oracle, read from the oracle's Decision API (eval-oracle contract 1.22.0):
4
+ * `GET /v1/api/source/review-billing` with `X-Source-Id`, action `review-billing/read`, never the token.
5
+ *
6
+ * Read side only: the words, the status parse and the reads. Signing (the payment delegation, the PUT, the
7
+ * DELETE and the revoke) is in `orgReviewBillingSign.ts`, so the MCP and the page's first paint never carry
8
+ * the x402 package. Every call is best effort and never throws.
9
+ */
10
+ /** The owner's default budget: 1,000 PAY (owner ruling); each signature is a new budget. */
11
+ export declare const DEFAULT_CAP_PAY = 1000;
12
+ /** 1 PAY = 1,000,000 upay. */
13
+ export declare const UPAY_PER_PAY = 1000000;
14
+ export type ReviewBillingState = "active" | "expired" | "exhausted" | "payer_not_owner";
15
+ export interface ReviewBillingStatus {
16
+ sourceId: string;
17
+ state: ReviewBillingState | string;
18
+ payer: string;
19
+ delegationCid: string;
20
+ /** upay, as decimal strings. */
21
+ maxAmount: string;
22
+ spent: string;
23
+ remaining: string;
24
+ expiresAt: string | null;
25
+ /** The payer's credits at the facilitator (upay); null until it answers the oracle. */
26
+ creditsAvailable: string | null;
27
+ pricePerReview: {
28
+ protocolDid: string;
29
+ amount: string;
30
+ }[];
31
+ pausedCollections: {
32
+ collectionId: string;
33
+ reason: string;
34
+ }[];
35
+ }
36
+ /** The oracle's `ReviewBilling` body, strictly: null when a field it must carry is missing or not upay. */
37
+ export declare function parseReviewBilling(body: unknown): ReviewBillingStatus | null;
38
+ /** upay → "1,000 PAY" / "0.5 PAY". */
39
+ export declare const payFace: (upay: string | number) => string;
40
+ /** A cap the person typed, in PAY → upay; null unless a positive whole number of upay. */
41
+ export declare function capUpay(pay: string | number): string | null;
42
+ /** The status, in words: one line. */
43
+ export declare function statusLine(status: ReviewBillingStatus): string;
44
+ /** A pause the payer can clear, in words (S3 contract 1.22.0, collection pause reasons). */
45
+ export declare function pauseWords(reason: string): string | null;
46
+ /** The oracle's refusal of a PUT or DELETE (contract 1.22.0), in words. */
47
+ export declare function refusalWords(status: number, code: string, reason: string, message?: string): string;
48
+ /** The three ways in, for anyone who cannot (or need not) do it here. */
49
+ export declare function waysIn(org: {
50
+ name: string;
51
+ settingsUrl: string;
52
+ }, oracle: {
53
+ url: string;
54
+ }, sourceId: string | null): string[];
55
+ /** Signs one Decision API invocation as a member or controller: over the source when given, else the account. */
56
+ export type SourceMint = (audience: string, can: string, sourceId: string | null) => Promise<string>;
57
+ /** The signer's own invocation from their ed25519 key (as `ownerMint`): no proof (a controller is a root), five minutes, a nonce. */
58
+ export declare function sourceMint(member: {
59
+ address: string;
60
+ mnemonic: string;
61
+ }): SourceMint;
62
+ export interface CallOptions {
63
+ fetch?: typeof fetch;
64
+ }
65
+ /** One Decision API call, signed; the parsed body and the error's `code` / `details.reason` / message. */
66
+ export declare function sourceCall(oracleUrl: string, audience: string, mint: SourceMint, call: {
67
+ method?: string;
68
+ path: string;
69
+ can: string;
70
+ sourceId: string | null;
71
+ body?: unknown;
72
+ }, options?: CallOptions): Promise<{
73
+ status: number;
74
+ body: unknown;
75
+ code: string;
76
+ reason: string;
77
+ message: string;
78
+ } | null>;
79
+ export interface OracleSource {
80
+ sourceId: string;
81
+ name: string;
82
+ status: string;
83
+ billingMode: string;
84
+ }
85
+ /**
86
+ * The org's Decision API sources on this oracle: as a controller (`GET /v1/api/organisations/{org}/sources`, every
87
+ * state), else the signer's own memberships of the org (`GET /v1/api/sources`). Null when neither answers, or when the org route refuses (403) and the viewer has no match of their own.
88
+ * shortcut: the first page only (an org has a handful of sources per oracle); page on `cursor` if that changes.
89
+ */
90
+ export declare function orgSources(oracleUrl: string, audience: string, org: string, mint: SourceMint, options?: CallOptions): Promise<OracleSource[] | null>;
91
+ export type BillingRead =
92
+ /** The org has no Decision API source on this oracle (or none linked yet: `pending`). */
93
+ {
94
+ kind: "no-source";
95
+ pending: boolean;
96
+ }
97
+ /** A linked source, and no review billing stored on it. */
98
+ | {
99
+ kind: "off";
100
+ source: OracleSource;
101
+ } | {
102
+ kind: "on";
103
+ source: OracleSource;
104
+ status: ReviewBillingStatus;
105
+ }
106
+ /** Nothing readable as this signer. */
107
+ | {
108
+ kind: "unread";
109
+ };
110
+ /** The oracle's did:web as it publishes it (the UCAN audience); null when unread. */
111
+ export declare function oracleAudience(oracleUrl: string, options?: CallOptions): Promise<string | null>;
112
+ /**
113
+ * Where the org's review billing stands on one oracle, read as the signer: the org's linked sources, then each one's
114
+ * stored delegation (the oracle allows one per org, so the first found is the one). Off: the source to turn it on for,
115
+ * an x402 one first.
116
+ */
117
+ export declare function readOrgReviewBilling(oracleUrl: string, org: string, mint: SourceMint, options?: CallOptions): Promise<BillingRead>;
118
+ /** What the settings page offers this viewer: the owner with a signing key acts; everyone else reads the ways in. */
119
+ export type Controls = "allow" | "raise-or-off" | "link-first" | "ways" | "wait";
120
+ export declare function controlsFor(read: BillingRead | "loading" | null, viewer: {
121
+ isOwner: boolean;
122
+ hasKey: boolean;
123
+ }): Controls;
124
+ //# sourceMappingURL=orgReviewBilling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orgReviewBilling.d.ts","sourceRoot":"","sources":["../../../src/chain/orgReviewBilling.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,241 @@
1
+ /**
2
+ * "Pay for reviews" on an org's settings page (owner request 2026-10-14): where an org's per-review checker
3
+ * billing stands on one oracle, read from the oracle's Decision API (eval-oracle contract 1.22.0):
4
+ * `GET /v1/api/source/review-billing` with `X-Source-Id`, action `review-billing/read`, never the token.
5
+ *
6
+ * Read side only: the words, the status parse and the reads. Signing (the payment delegation, the PUT, the
7
+ * DELETE and the revoke) is in `orgReviewBillingSign.ts`, so the MCP and the page's first paint never carry
8
+ * the x402 package. Every call is best effort and never throws.
9
+ */
10
+ /** The owner's default budget: 1,000 PAY (owner ruling); each signature is a new budget. */
11
+ export const DEFAULT_CAP_PAY = 1000;
12
+ /** 1 PAY = 1,000,000 upay. */
13
+ export const UPAY_PER_PAY = 1_000_000;
14
+ const UPAY = /^(0|[1-9]\d{0,77})$/;
15
+ const str = (value) => (typeof value === "string" && value ? value : null);
16
+ /** The oracle's `ReviewBilling` body, strictly: null when a field it must carry is missing or not upay. */
17
+ export function parseReviewBilling(body) {
18
+ if (!body || typeof body !== "object" || Array.isArray(body))
19
+ return null;
20
+ const b = body;
21
+ const sourceId = str(b.sourceId);
22
+ const state = str(b.state);
23
+ const payer = str(b.payer);
24
+ const delegationCid = str(b.delegationCid);
25
+ const [maxAmount, spent, remaining] = [b.maxAmount, b.spent, b.remaining].map((one) => (typeof one === "string" && UPAY.test(one) ? one : null));
26
+ if (!sourceId || !state || !payer || !delegationCid || !maxAmount || !spent || !remaining)
27
+ return null;
28
+ const credits = b.credits;
29
+ const prices = Array.isArray(b.pricePerReview) ? b.pricePerReview : [];
30
+ const paused = Array.isArray(b.pausedCollections) ? b.pausedCollections : [];
31
+ return {
32
+ sourceId,
33
+ state,
34
+ payer,
35
+ delegationCid,
36
+ maxAmount,
37
+ spent,
38
+ remaining,
39
+ expiresAt: str(b.expiresAt),
40
+ creditsAvailable: typeof credits?.available === "string" && UPAY.test(credits.available) ? credits.available : null,
41
+ pricePerReview: prices.filter((one) => typeof one?.amount === "string" && UPAY.test(one.amount)).map((one) => ({ protocolDid: String(one.protocolDid ?? ""), amount: one.amount })),
42
+ pausedCollections: paused.filter((one) => typeof one?.collectionId === "string" && typeof one.reason === "string").map((one) => ({ collectionId: one.collectionId, reason: one.reason }))
43
+ };
44
+ }
45
+ /** upay → "1,000 PAY" / "0.5 PAY". */
46
+ export const payFace = (upay) => `${(Number(upay) / UPAY_PER_PAY).toLocaleString("en-US", { maximumFractionDigits: 6 })} PAY`;
47
+ /** A cap the person typed, in PAY → upay; null unless a positive whole number of upay. */
48
+ export function capUpay(pay) {
49
+ const n = Number(String(pay).trim().replace(/,/g, ""));
50
+ if (String(pay).trim() === "" || !Number.isFinite(n) || n <= 0)
51
+ return null;
52
+ const upay = Math.round(n * UPAY_PER_PAY);
53
+ return Number.isSafeInteger(upay) && upay > 0 ? String(upay) : null;
54
+ }
55
+ /** The status, in words: one line. */
56
+ export function statusLine(status) {
57
+ const head = {
58
+ active: "On",
59
+ expired: "Off: the permission expired",
60
+ exhausted: "Off: the budget is used up",
61
+ payer_not_owner: "Off: it was signed by someone who no longer owns the organisation"
62
+ };
63
+ return `${head[status.state] ?? `State: ${status.state}`}. Budget ${payFace(status.maxAmount)}, ${payFace(status.spent)} spent under this budget, ${payFace(status.remaining)} left in this budget.`;
64
+ }
65
+ /** A pause the payer can clear, in words (S3 contract 1.22.0, collection pause reasons). */
66
+ export function pauseWords(reason) {
67
+ if (reason === "payer-credits")
68
+ return "Reviews paused: top up the owner's credits";
69
+ if (reason === "payer-delegation")
70
+ return "Reviews paused: Pay for reviews needs turning on again (or a higher cap)";
71
+ if (reason === "oracle-plan")
72
+ return "Reviews paused: the oracle's plan is inactive";
73
+ return null;
74
+ }
75
+ /** The oracle's refusal of a PUT or DELETE (contract 1.22.0), in words. */
76
+ export function refusalWords(status, code, reason, message = "") {
77
+ switch (reason) {
78
+ case "not_org_owner":
79
+ return "Only the organisation's owner on chain can turn this on: their credits pay for the reviews.";
80
+ case "review_billing_elsewhere":
81
+ return "Another of the organisation's Decision API connections on this oracle already pays for reviews. Turn it off there first (in the Decision Console).";
82
+ case "billing_mode_none":
83
+ return "The organisation's connection to this oracle is not set up for billing, so it cannot pay for reviews. Ask IXO to switch it on.";
84
+ case "cap_below_price":
85
+ return "The cap is below the price of one review. Raise it.";
86
+ case "expires_too_soon":
87
+ return "The permission must last at least a day.";
88
+ case "wrong_audience":
89
+ case "not_oracle_bound":
90
+ case "not_a_payment_delegation":
91
+ case "bad_signature":
92
+ case "not_yet_valid":
93
+ return `The oracle refused the signed permission (${reason}). Nothing was stored.`;
94
+ }
95
+ if (code === "SOURCE_PENDING_LINK")
96
+ return "The organisation's connection to this oracle is not linked yet. Link it (the OpenHands HQ plugin, step 8, or the Decision Console), then try again.";
97
+ if (code === "SOURCE_DISPUTED")
98
+ return "The organisation's link to this oracle is disputed. Sort it out in the Decision Console, then try again.";
99
+ if (code === "SOURCE_PAUSED" || status === 503)
100
+ return "The oracle cannot take payments just now. Try again in a few minutes.";
101
+ if (status === 401 || status === 403)
102
+ return "The oracle did not accept your signature for this organisation.";
103
+ if (status === 404)
104
+ return "This oracle does not bill reviews per check.";
105
+ return `The oracle said no${message ? `: ${message}` : ` (${status})`}.`;
106
+ }
107
+ /** The three ways in, for anyone who cannot (or need not) do it here. */
108
+ export function waysIn(org, oracle, sourceId) {
109
+ return [
110
+ `In OpenHands: ${org.name}'s owner opens ${org.settingsUrl}#pay-for-reviews signed in with their IXO account and clicks "Allow reviews to be paid from my credits".`,
111
+ "In the Decision Console: Billing › Pay for reviews.",
112
+ `In Claude Code: eval-oracle api review-billing enable --source ${sourceId ?? "<source id>"} --kit ${oracle.url.replace(/\/$/, "")} --cap <PAY> (it previews first; add --yes to sign).`
113
+ ];
114
+ }
115
+ /** The signer's own invocation from their ed25519 key (as `ownerMint`): no proof (a controller is a root), five minutes, a nonce. */
116
+ export function sourceMint(member) {
117
+ return async (audience, can, sourceId) => {
118
+ const { signerFromMnemonic, createInvocation, serializeInvocation } = await import("@ixo/ucan");
119
+ const { signer } = await signerFromMnemonic(member.mnemonic, `did:ixo:${member.address}`);
120
+ const invocation = await createInvocation({
121
+ issuer: signer,
122
+ audience,
123
+ capability: { can, with: sourceId ? `ixo:oracle/${audience}/source/${sourceId}` : `ixo:oracle/${audience}` },
124
+ expiration: Math.floor(Date.now() / 1000) + 300,
125
+ facts: [{ nonce: crypto.randomUUID() }]
126
+ });
127
+ return serializeInvocation(invocation);
128
+ };
129
+ }
130
+ const TIMEOUT = 10_000;
131
+ const base = (url) => url.replace(/\/$/, "");
132
+ /** One Decision API call, signed; the parsed body and the error's `code` / `details.reason` / message. */
133
+ export async function sourceCall(oracleUrl, audience, mint, call, options = {}) {
134
+ try {
135
+ const response = await (options.fetch ?? fetch)(`${base(oracleUrl)}${call.path}`, {
136
+ method: call.method ?? "GET",
137
+ headers: {
138
+ accept: "application/json",
139
+ authorization: `Bearer ${await mint(audience, call.can, call.sourceId)}`,
140
+ "x-auth-type": "ucan",
141
+ ...(call.sourceId ? { "x-source-id": call.sourceId } : {}),
142
+ ...(call.body !== undefined ? { "content-type": "application/json" } : {})
143
+ },
144
+ ...(call.body !== undefined ? { body: JSON.stringify(call.body) } : {}),
145
+ signal: AbortSignal.timeout(TIMEOUT)
146
+ });
147
+ const body = (await response.json().catch(() => null));
148
+ const error = response.ok ? null : body?.error;
149
+ return {
150
+ status: response.status,
151
+ body,
152
+ code: typeof error?.code === "string" ? error.code : "",
153
+ reason: typeof error?.details?.reason === "string" ? error.details.reason : "",
154
+ message: typeof error?.message === "string" ? error.message.slice(0, 400) : ""
155
+ };
156
+ }
157
+ catch {
158
+ return null;
159
+ }
160
+ }
161
+ const sourceOf = (raw) => {
162
+ const s = raw;
163
+ return typeof s?.sourceId === "string"
164
+ ? { sourceId: s.sourceId, name: String(s.name ?? ""), status: String(s.status ?? ""), billingMode: String(s.billingMode ?? ""), companyEntityDid: typeof s.companyEntityDid === "string" ? s.companyEntityDid : null }
165
+ : null;
166
+ };
167
+ /**
168
+ * The org's Decision API sources on this oracle: as a controller (`GET /v1/api/organisations/{org}/sources`, every
169
+ * state), else the signer's own memberships of the org (`GET /v1/api/sources`). Null when neither answers, or when the org route refuses (403) and the viewer has no match of their own.
170
+ * shortcut: the first page only (an org has a handful of sources per oracle); page on `cursor` if that changes.
171
+ */
172
+ export async function orgSources(oracleUrl, audience, org, mint, options = {}) {
173
+ const asController = await sourceCall(oracleUrl, audience, mint, { path: `/v1/api/organisations/${encodeURIComponent(org)}/sources`, can: "sources/list-organisation", sourceId: null }, options);
174
+ const items = (answer) => (answer && answer.status === 200 && Array.isArray(answer.body?.items) ? answer.body.items : null);
175
+ const owned = items(asController);
176
+ if (owned)
177
+ return owned.map(sourceOf).filter((one) => one !== null);
178
+ const mine = items(await sourceCall(oracleUrl, audience, mint, { path: "/v1/api/sources", can: "sources/list", sourceId: null }, options));
179
+ if (!mine)
180
+ return null;
181
+ const matching = mine
182
+ .map((one) => sourceOf(one?.source))
183
+ .filter((one) => one !== null && one.companyEntityDid === org);
184
+ // A 403 with no match of our own: this viewer cannot see the org's sources, so "none" would be a claim we cannot make.
185
+ return matching.length === 0 && asController?.status === 403 ? null : matching;
186
+ }
187
+ /** The oracle's did:web as it publishes it (the UCAN audience); null when unread. */
188
+ export async function oracleAudience(oracleUrl, options = {}) {
189
+ try {
190
+ const response = await (options.fetch ?? fetch)(`${base(oracleUrl)}/.well-known/did.json`, { headers: { accept: "application/json" }, signal: AbortSignal.timeout(TIMEOUT) });
191
+ const id = response.ok ? (await response.json().catch(() => null))?.id : null;
192
+ return typeof id === "string" && id.startsWith("did:web:") ? id : null;
193
+ }
194
+ catch {
195
+ return null;
196
+ }
197
+ }
198
+ /**
199
+ * Where the org's review billing stands on one oracle, read as the signer: the org's linked sources, then each one's
200
+ * stored delegation (the oracle allows one per org, so the first found is the one). Off: the source to turn it on for,
201
+ * an x402 one first.
202
+ */
203
+ export async function readOrgReviewBilling(oracleUrl, org, mint, options = {}) {
204
+ const audience = await oracleAudience(oracleUrl, options);
205
+ if (!audience)
206
+ return { kind: "unread" };
207
+ const sources = await orgSources(oracleUrl, audience, org, mint, options);
208
+ if (!sources)
209
+ return { kind: "unread" };
210
+ const linked = sources.filter((one) => one.status === "active" || one.status === "paused");
211
+ if (linked.length === 0)
212
+ return { kind: "no-source", pending: sources.length > 0 };
213
+ let read = 0;
214
+ for (const source of linked) {
215
+ const answer = await sourceCall(oracleUrl, audience, mint, { path: "/v1/api/source/review-billing", can: "review-billing/read", sourceId: source.sourceId }, options);
216
+ if (answer?.status === 200) {
217
+ const status = parseReviewBilling(answer.body);
218
+ if (status)
219
+ return { kind: "on", source, status };
220
+ }
221
+ if (answer?.status === 404)
222
+ read += 1;
223
+ }
224
+ if (read === 0)
225
+ return { kind: "unread" };
226
+ return { kind: "off", source: linked.find((one) => one.billingMode === "x402") ?? linked[0] };
227
+ }
228
+ export function controlsFor(read, viewer) {
229
+ if (!viewer.isOwner || !viewer.hasKey)
230
+ return "ways";
231
+ if (!read || read === "loading")
232
+ return "wait";
233
+ if (read.kind === "no-source")
234
+ return "link-first";
235
+ if (read.kind === "on")
236
+ return "raise-or-off";
237
+ if (read.kind === "off")
238
+ return "allow";
239
+ return "ways";
240
+ }
241
+ //# sourceMappingURL=orgReviewBilling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orgReviewBilling.js","sourceRoot":"","sources":["../../../src/chain/orgReviewBilling.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * "Pay for reviews", the signing side (owner request 2026-10-14; eval-oracle contract 1.22.0). Only the org's
3
+ * chain OWNER signs, in the browser, with their AuthHub session's ed25519 key:
4
+ *
5
+ * - On / raise: one x402-ixo-pay payment delegation, built by S4's own `@ixo/x402-ixo-pay` (never by hand):
6
+ * issuer the owner's did:ixo, audience the network's x402 facilitator, `billing/pay` on `billing:decision-api`
7
+ * with `{maxAmount, denom: "upay", oracles: [<this oracle's did:web>]}`, ~100 years. PUT to the oracle for the
8
+ * org's source (a re-PUT replaces: that is "raise"), then deposited in the UCAN store so it can be revoked later
9
+ * by its CID (the oracle never gives the token back). A replaced one is revoked.
10
+ * - Off: DELETE at the oracle, then REVOKE the delegation in the UCAN store (the oracle's DELETE alone leaves it
11
+ * valid until it expires).
12
+ */
13
+ import { type CallOptions, type ReviewBillingStatus } from "./orgReviewBilling.ts";
14
+ /** now + 100 calendar years (owner ruling; same as the CLI): the cap, not the clock, is what limits it. */
15
+ export declare const expiryFrom: (nowSeconds: number) => number;
16
+ /** The x402 facilitator (the delegation's audience) and the UCAN store on this deployment's network. */
17
+ export declare const billingHosts: () => {
18
+ facilitator: string;
19
+ store: string;
20
+ };
21
+ export interface Owner {
22
+ address: string;
23
+ mnemonic: string;
24
+ }
25
+ export interface SignOptions extends CallOptions {
26
+ facilitatorDid?: string;
27
+ storeUrl?: string;
28
+ /** Seconds since the epoch; tests pin it. */
29
+ now?: number;
30
+ }
31
+ export type Outcome<T> = {
32
+ ok: true;
33
+ value: T;
34
+ note?: string;
35
+ } | {
36
+ ok: false;
37
+ why: string;
38
+ };
39
+ /** The owner's payment delegation for this oracle alone: base64 CAR, as the facilitator verifies it. */
40
+ export declare function buildReviewBillingDelegation(owner: Owner, oracleDid: string, maxAmount: string, options?: SignOptions): Promise<string>;
41
+ /** Revokes a delegation the store holds, by its CID: true when it is revoked now (or was already). */
42
+ export declare function revokeDelegation(owner: Owner, cid: string, options?: SignOptions): Promise<boolean>;
43
+ /**
44
+ * Turn on, or raise the cap (a re-PUT replaces the stored one): sign, PUT for the org's source, keep it in the UCAN
45
+ * store for a later revoke, and revoke the one it replaced. Only the PUT decides success.
46
+ */
47
+ export declare function enableReviewBilling(input: {
48
+ owner: Owner;
49
+ oracleUrl: string;
50
+ sourceId: string;
51
+ maxAmount: string;
52
+ replacing?: string | null;
53
+ }, options?: SignOptions): Promise<Outcome<ReviewBillingStatus>>;
54
+ /** Turn off: DELETE at the oracle, then revoke the delegation in the UCAN store. */
55
+ export declare function turnOffReviewBilling(input: {
56
+ owner: Owner;
57
+ oracleUrl: string;
58
+ sourceId: string;
59
+ delegationCid: string;
60
+ }, options?: SignOptions): Promise<Outcome<{
61
+ revoked: boolean;
62
+ }>>;
63
+ //# sourceMappingURL=orgReviewBillingSign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orgReviewBillingSign.d.ts","sourceRoot":"","sources":["../../../src/chain/orgReviewBillingSign.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAA4E,KAAK,WAAW,EAAE,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE7J,2GAA2G;AAC3G,eAAO,MAAM,UAAU,GAAI,YAAY,MAAM,KAAG,MAI/C,CAAC;AAQF,wGAAwG;AACxG,eAAO,MAAM,YAAY,QAAO;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAsB,CAAC;AAE3F,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAO5F,wGAAwG;AACxG,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAUjJ;AA6BD,sGAAsG;AACtG,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAG7G;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC1G,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAoBvC;AAED,oFAAoF;AACpF,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAYjM"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * "Pay for reviews", the signing side (owner request 2026-10-14; eval-oracle contract 1.22.0). Only the org's
3
+ * chain OWNER signs, in the browser, with their AuthHub session's ed25519 key:
4
+ *
5
+ * - On / raise: one x402-ixo-pay payment delegation, built by S4's own `@ixo/x402-ixo-pay` (never by hand):
6
+ * issuer the owner's did:ixo, audience the network's x402 facilitator, `billing/pay` on `billing:decision-api`
7
+ * with `{maxAmount, denom: "upay", oracles: [<this oracle's did:web>]}`, ~100 years. PUT to the oracle for the
8
+ * org's source (a re-PUT replaces: that is "raise"), then deposited in the UCAN store so it can be revoked later
9
+ * by its CID (the oracle never gives the token back). A replaced one is revoked.
10
+ * - Off: DELETE at the oracle, then REVOKE the delegation in the UCAN store (the oracle's DELETE alone leaves it
11
+ * valid until it expires).
12
+ */
13
+ import { network } from "../network.js";
14
+ import { oracleAudience, refusalWords, sourceCall, sourceMint, parseReviewBilling } from "./orgReviewBilling.js";
15
+ /** now + 100 calendar years (owner ruling; same as the CLI): the cap, not the clock, is what limits it. */
16
+ export const expiryFrom = (nowSeconds) => {
17
+ const d = new Date(nowSeconds * 1000);
18
+ d.setUTCFullYear(d.getUTCFullYear() + 100);
19
+ return Math.floor(d.getTime() / 1000);
20
+ };
21
+ const HOSTS = {
22
+ devnet: { facilitator: "did:web:facilitator.devnet.ixo.earth", store: "https://devnet.store.ucan.ixo.earth" },
23
+ testnet: { facilitator: "did:web:facilitator.testnet.ixo.earth", store: "https://testnet.store.ucan.ixo.earth" },
24
+ mainnet: { facilitator: "did:web:facilitator.ixo.earth", store: "https://store.ucan.ixo.earth" }
25
+ };
26
+ /** The x402 facilitator (the delegation's audience) and the UCAN store on this deployment's network. */
27
+ export const billingHosts = () => HOSTS[network()];
28
+ const signerOf = async (owner) => {
29
+ const { signerFromMnemonic } = await import("@ixo/ucan");
30
+ return (await signerFromMnemonic(owner.mnemonic, `did:ixo:${owner.address}`)).signer;
31
+ };
32
+ /** The owner's payment delegation for this oracle alone: base64 CAR, as the facilitator verifies it. */
33
+ export async function buildReviewBillingDelegation(owner, oracleDid, maxAmount, options = {}) {
34
+ const { buildPaymentDelegation } = await import("@ixo/x402-ixo-pay");
35
+ return buildPaymentDelegation({
36
+ /* @ixo/ucan 2.1's signer; the package's 2.2 takes the same ucanto Signer. */
37
+ issuer: (await signerOf(owner)),
38
+ facilitatorDid: options.facilitatorDid ?? billingHosts().facilitator,
39
+ maxAmount,
40
+ expiration: expiryFrom(options.now ?? Math.floor(Date.now() / 1000)),
41
+ oracles: [oracleDid]
42
+ });
43
+ }
44
+ /** One self-signed call to the UCAN store as the owner (`with: ixo:ucan-store`). False on any failure. */
45
+ async function storeCall(owner, can, path, body, options) {
46
+ const store = (options.storeUrl ?? billingHosts().store).replace(/\/$/, "");
47
+ try {
48
+ const doc = await (options.fetch ?? fetch)(`${store}/.well-known/did.json`, { headers: { accept: "application/json" }, signal: AbortSignal.timeout(10_000) });
49
+ const audience = doc.ok ? (await doc.json().catch(() => null))?.id : null;
50
+ if (typeof audience !== "string")
51
+ return null;
52
+ const { createInvocation, serializeInvocation } = await import("@ixo/ucan");
53
+ const invocation = await createInvocation({
54
+ issuer: await signerOf(owner),
55
+ audience,
56
+ capability: { can, with: "ixo:ucan-store" },
57
+ expiration: Math.floor(Date.now() / 1000) + 300,
58
+ facts: [{ nonce: crypto.randomUUID() }]
59
+ });
60
+ const response = await (options.fetch ?? fetch)(`${store}${path}`, {
61
+ method: "POST",
62
+ headers: { "content-type": "application/json", authorization: `Bearer ${await serializeInvocation(invocation)}`, "x-auth-type": "ucan" },
63
+ body: JSON.stringify(body),
64
+ signal: AbortSignal.timeout(10_000)
65
+ });
66
+ return response.status;
67
+ }
68
+ catch {
69
+ return null;
70
+ }
71
+ }
72
+ /** Revokes a delegation the store holds, by its CID: true when it is revoked now (or was already). */
73
+ export async function revokeDelegation(owner, cid, options = {}) {
74
+ const status = await storeCall(owner, "store/revoke", "/api/revocations", { cid, reason: "OpenHands: Pay for reviews turned off or replaced" }, options);
75
+ return status === 200 || status === 201;
76
+ }
77
+ /**
78
+ * Turn on, or raise the cap (a re-PUT replaces the stored one): sign, PUT for the org's source, keep it in the UCAN
79
+ * store for a later revoke, and revoke the one it replaced. Only the PUT decides success.
80
+ */
81
+ export async function enableReviewBilling(input, options = {}) {
82
+ const audience = await oracleAudience(input.oracleUrl, options);
83
+ if (!audience)
84
+ return { ok: false, why: "The oracle did not answer. Nothing was signed." };
85
+ let delegation;
86
+ try {
87
+ delegation = await buildReviewBillingDelegation(input.owner, audience, input.maxAmount, options);
88
+ }
89
+ catch (error) {
90
+ return { ok: false, why: `The permission could not be signed: ${error instanceof Error ? error.message : "unknown error"}.` };
91
+ }
92
+ const mint = sourceMint(input.owner);
93
+ const answer = await sourceCall(input.oracleUrl, audience, mint, { method: "PUT", path: "/v1/api/source/review-billing", can: "review-billing/set", sourceId: input.sourceId, body: { delegation } }, options);
94
+ if (!answer)
95
+ return { ok: false, why: "The oracle did not answer. Nothing was stored; try again." };
96
+ if (answer.status !== 200)
97
+ return { ok: false, why: refusalWords(answer.status, answer.code, answer.reason, answer.message) };
98
+ const status = parseReviewBilling(answer.body);
99
+ if (!status)
100
+ return { ok: false, why: "The oracle stored it but answered in a form this page does not read. Reload to see it." };
101
+ /* Kept so Turn off can revoke it; a failure here only means a later revoke must be done where it was signed. */
102
+ await storeCall(input.owner, "store/add", "/api/delegations", { token: delegation, note: `openhands review billing ${input.sourceId}` }, options);
103
+ const old = input.replacing && input.replacing !== status.delegationCid ? input.replacing : null;
104
+ const revoked = old ? await revokeDelegation(input.owner, old, options) : true;
105
+ return { ok: true, value: status, ...(revoked ? {} : { note: "A new budget is signed. The permission it replaced could not be revoked from here; the oracle no longer holds it." }) };
106
+ }
107
+ /** Turn off: DELETE at the oracle, then revoke the delegation in the UCAN store. */
108
+ export async function turnOffReviewBilling(input, options = {}) {
109
+ const audience = await oracleAudience(input.oracleUrl, options);
110
+ if (!audience)
111
+ return { ok: false, why: "The oracle did not answer. Nothing was changed." };
112
+ const answer = await sourceCall(input.oracleUrl, audience, sourceMint(input.owner), { method: "DELETE", path: "/v1/api/source/review-billing", can: "review-billing/delete", sourceId: input.sourceId }, options);
113
+ if (!answer)
114
+ return { ok: false, why: "The oracle did not answer. Nothing was changed; try again." };
115
+ if (answer.status !== 200 && answer.status !== 204)
116
+ return { ok: false, why: refusalWords(answer.status, answer.code, answer.reason, answer.message) };
117
+ const revoked = await revokeDelegation(input.owner, input.delegationCid, options);
118
+ return {
119
+ ok: true,
120
+ value: { revoked },
121
+ ...(revoked ? {} : { note: "The oracle no longer charges it, but the signed permission could not be revoked from here (it was signed elsewhere). Revoke it where it was signed (the Decision Console) to stop it everywhere." })
122
+ };
123
+ }
124
+ //# sourceMappingURL=orgReviewBillingSign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orgReviewBillingSign.js","sourceRoot":"","sources":["../../../src/chain/orgReviewBillingSign.ts"],"names":[],"mappings":"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"}