@ixo/openhands-sdk 0.4.0 → 0.5.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 (510) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/campaign/cleanup.js +1 -1
  3. package/dist/cjs/campaign/cleanup.js.map +1 -1
  4. package/dist/cjs/campaign/funding.d.ts.map +1 -1
  5. package/dist/cjs/campaign/funding.js +1 -1
  6. package/dist/cjs/campaign/funding.js.map +1 -1
  7. package/dist/cjs/campaign/pool.js +3 -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/spot.d.ts.map +1 -1
  13. package/dist/cjs/campaign/spot.js +2 -1
  14. package/dist/cjs/campaign/spot.js.map +1 -1
  15. package/dist/cjs/campaign/spots.js +4 -4
  16. package/dist/cjs/campaign/spots.js.map +1 -1
  17. package/dist/cjs/campaign/treasurySends.d.ts.map +1 -1
  18. package/dist/cjs/campaign/treasurySends.js +3 -3
  19. package/dist/cjs/campaign/treasurySends.js.map +1 -1
  20. package/dist/cjs/chain/ask.d.ts +17 -0
  21. package/dist/cjs/chain/ask.d.ts.map +1 -1
  22. package/dist/cjs/chain/ask.js +27 -10
  23. package/dist/cjs/chain/ask.js.map +1 -1
  24. package/dist/cjs/chain/broadcast.d.ts.map +1 -1
  25. package/dist/cjs/chain/broadcast.js +6 -4
  26. package/dist/cjs/chain/broadcast.js.map +1 -1
  27. package/dist/cjs/chain/claimVerdict.d.ts +26 -0
  28. package/dist/cjs/chain/claimVerdict.d.ts.map +1 -0
  29. package/dist/cjs/chain/claimVerdict.js +33 -0
  30. package/dist/cjs/chain/claimVerdict.js.map +1 -0
  31. package/dist/cjs/chain/delegate.d.ts +46 -3
  32. package/dist/cjs/chain/delegate.d.ts.map +1 -1
  33. package/dist/cjs/chain/delegate.js +68 -6
  34. package/dist/cjs/chain/delegate.js.map +1 -1
  35. package/dist/cjs/chain/entityShape.d.ts +6 -0
  36. package/dist/cjs/chain/entityShape.d.ts.map +1 -1
  37. package/dist/cjs/chain/entityShape.js +24 -4
  38. package/dist/cjs/chain/entityShape.js.map +1 -1
  39. package/dist/cjs/chain/env.d.ts +1 -0
  40. package/dist/cjs/chain/env.d.ts.map +1 -1
  41. package/dist/cjs/chain/env.js +9 -1
  42. package/dist/cjs/chain/env.js.map +1 -1
  43. package/dist/cjs/chain/inviteMessages.d.ts +183 -0
  44. package/dist/cjs/chain/inviteMessages.d.ts.map +1 -0
  45. package/dist/cjs/chain/inviteMessages.js +289 -0
  46. package/dist/cjs/chain/inviteMessages.js.map +1 -0
  47. package/dist/cjs/chain/inviteProof.d.ts +121 -0
  48. package/dist/cjs/chain/inviteProof.d.ts.map +1 -0
  49. package/dist/cjs/chain/inviteProof.js +297 -0
  50. package/dist/cjs/chain/inviteProof.js.map +1 -0
  51. package/dist/cjs/chain/lane.d.ts +148 -0
  52. package/dist/cjs/chain/lane.d.ts.map +1 -0
  53. package/dist/cjs/chain/lane.js +220 -0
  54. package/dist/cjs/chain/lane.js.map +1 -0
  55. package/dist/cjs/chain/money.d.ts +12 -4
  56. package/dist/cjs/chain/money.d.ts.map +1 -1
  57. package/dist/cjs/chain/money.js +20 -7
  58. package/dist/cjs/chain/money.js.map +1 -1
  59. package/dist/cjs/chain/oracle.d.ts +2 -0
  60. package/dist/cjs/chain/oracle.d.ts.map +1 -1
  61. package/dist/cjs/chain/oracle.js +1 -1
  62. package/dist/cjs/chain/oracle.js.map +1 -1
  63. package/dist/cjs/chain/orgReviewBilling.js +1 -1
  64. package/dist/cjs/chain/orgReviewBilling.js.map +1 -1
  65. package/dist/cjs/chain/payoutTerms.d.ts.map +1 -1
  66. package/dist/cjs/chain/payoutTerms.js +1 -1
  67. package/dist/cjs/chain/payoutTerms.js.map +1 -1
  68. package/dist/cjs/chain/personReview.d.ts +218 -0
  69. package/dist/cjs/chain/personReview.d.ts.map +1 -0
  70. package/dist/cjs/chain/personReview.js +379 -0
  71. package/dist/cjs/chain/personReview.js.map +1 -0
  72. package/dist/cjs/chain/postFee.d.ts +11 -0
  73. package/dist/cjs/chain/postFee.d.ts.map +1 -0
  74. package/dist/cjs/chain/postFee.js +14 -0
  75. package/dist/cjs/chain/postFee.js.map +1 -0
  76. package/dist/cjs/chain/query.d.ts +55 -2
  77. package/dist/cjs/chain/query.d.ts.map +1 -1
  78. package/dist/cjs/chain/query.js +144 -8
  79. package/dist/cjs/chain/query.js.map +1 -1
  80. package/dist/cjs/chain/reviewBilling.d.ts +3 -27
  81. package/dist/cjs/chain/reviewBilling.d.ts.map +1 -1
  82. package/dist/cjs/chain/reviewBilling.js +5 -112
  83. package/dist/cjs/chain/reviewBilling.js.map +1 -1
  84. package/dist/cjs/chain.d.ts +2 -2
  85. package/dist/cjs/chain.d.ts.map +1 -1
  86. package/dist/cjs/chain.js +7 -2
  87. package/dist/cjs/chain.js.map +1 -1
  88. package/dist/cjs/config.d.ts +11 -2
  89. package/dist/cjs/config.d.ts.map +1 -1
  90. package/dist/cjs/config.js +5 -1
  91. package/dist/cjs/config.js.map +1 -1
  92. package/dist/cjs/data/agent.d.ts +2 -0
  93. package/dist/cjs/data/agent.d.ts.map +1 -1
  94. package/dist/cjs/data/agent.js +1 -0
  95. package/dist/cjs/data/agent.js.map +1 -1
  96. package/dist/cjs/data/board/assemble.d.ts +7 -2
  97. package/dist/cjs/data/board/assemble.d.ts.map +1 -1
  98. package/dist/cjs/data/board/assemble.js +76 -10
  99. package/dist/cjs/data/board/assemble.js.map +1 -1
  100. package/dist/cjs/data/board/facts.d.ts +2 -0
  101. package/dist/cjs/data/board/facts.d.ts.map +1 -1
  102. package/dist/cjs/data/board/facts.js +2 -1
  103. package/dist/cjs/data/board/facts.js.map +1 -1
  104. package/dist/cjs/data/board/read.d.ts +27 -3
  105. package/dist/cjs/data/board/read.d.ts.map +1 -1
  106. package/dist/cjs/data/board/read.js +122 -8
  107. package/dist/cjs/data/board/read.js.map +1 -1
  108. package/dist/cjs/data/board/types.d.ts +77 -5
  109. package/dist/cjs/data/board/types.d.ts.map +1 -1
  110. package/dist/cjs/data/board/types.js +5 -3
  111. package/dist/cjs/data/board/types.js.map +1 -1
  112. package/dist/cjs/data/checkers.d.ts +169 -0
  113. package/dist/cjs/data/checkers.d.ts.map +1 -0
  114. package/dist/cjs/data/checkers.js +354 -0
  115. package/dist/cjs/data/checkers.js.map +1 -0
  116. package/dist/cjs/data/checkersRead.d.ts +58 -0
  117. package/dist/cjs/data/checkersRead.d.ts.map +1 -0
  118. package/dist/cjs/data/checkersRead.js +263 -0
  119. package/dist/cjs/data/checkersRead.js.map +1 -0
  120. package/dist/cjs/data/denoms.d.ts.map +1 -1
  121. package/dist/cjs/data/denoms.js +1 -0
  122. package/dist/cjs/data/denoms.js.map +1 -1
  123. package/dist/cjs/data/docUrls.d.ts +2 -0
  124. package/dist/cjs/data/docUrls.d.ts.map +1 -1
  125. package/dist/cjs/data/docUrls.js +4 -1
  126. package/dist/cjs/data/docUrls.js.map +1 -1
  127. package/dist/cjs/data/docs.d.ts +3 -1
  128. package/dist/cjs/data/docs.d.ts.map +1 -1
  129. package/dist/cjs/data/docs.js +15 -2
  130. package/dist/cjs/data/docs.js.map +1 -1
  131. package/dist/cjs/data/engine.d.ts.map +1 -1
  132. package/dist/cjs/data/engine.js +12 -5
  133. package/dist/cjs/data/engine.js.map +1 -1
  134. package/dist/cjs/data/engineUrl.js +1 -1
  135. package/dist/cjs/data/engineUrl.js.map +1 -1
  136. package/dist/cjs/data/envelope.d.ts +18 -0
  137. package/dist/cjs/data/envelope.d.ts.map +1 -1
  138. package/dist/cjs/data/envelope.js +16 -1
  139. package/dist/cjs/data/envelope.js.map +1 -1
  140. package/dist/cjs/data/format.d.ts +18 -0
  141. package/dist/cjs/data/format.d.ts.map +1 -1
  142. package/dist/cjs/data/format.js +32 -2
  143. package/dist/cjs/data/format.js.map +1 -1
  144. package/dist/cjs/data/index.d.ts +2 -2
  145. package/dist/cjs/data/index.d.ts.map +1 -1
  146. package/dist/cjs/data/index.js +2 -1
  147. package/dist/cjs/data/index.js.map +1 -1
  148. package/dist/cjs/data/install.d.ts +63 -33
  149. package/dist/cjs/data/install.d.ts.map +1 -1
  150. package/dist/cjs/data/install.js +88 -45
  151. package/dist/cjs/data/install.js.map +1 -1
  152. package/dist/cjs/data/openness.d.ts +14 -1
  153. package/dist/cjs/data/openness.d.ts.map +1 -1
  154. package/dist/cjs/data/openness.js +14 -26
  155. package/dist/cjs/data/openness.js.map +1 -1
  156. package/dist/cjs/data/queue.d.ts +26 -0
  157. package/dist/cjs/data/queue.d.ts.map +1 -1
  158. package/dist/cjs/data/queue.js +57 -12
  159. package/dist/cjs/data/queue.js.map +1 -1
  160. package/dist/cjs/data/receipt.d.ts +19 -0
  161. package/dist/cjs/data/receipt.d.ts.map +1 -1
  162. package/dist/cjs/data/receipt.js +22 -5
  163. package/dist/cjs/data/receipt.js.map +1 -1
  164. package/dist/cjs/data/threads.d.ts +2 -0
  165. package/dist/cjs/data/threads.d.ts.map +1 -1
  166. package/dist/cjs/data/threads.js +3 -1
  167. package/dist/cjs/data/threads.js.map +1 -1
  168. package/dist/cjs/data/traceWords.js +1 -1
  169. package/dist/cjs/data/traceWords.js.map +1 -1
  170. package/dist/cjs/data/types.d.ts +6 -1
  171. package/dist/cjs/data/types.d.ts.map +1 -1
  172. package/dist/cjs/data/types.js.map +1 -1
  173. package/dist/cjs/data/whyReceipt.d.ts.map +1 -1
  174. package/dist/cjs/data/whyReceipt.js +10 -1
  175. package/dist/cjs/data/whyReceipt.js.map +1 -1
  176. package/dist/cjs/data/work.d.ts +5 -0
  177. package/dist/cjs/data/work.d.ts.map +1 -1
  178. package/dist/cjs/data/work.js +11 -5
  179. package/dist/cjs/data/work.js.map +1 -1
  180. package/dist/cjs/discovery.d.ts +64 -0
  181. package/dist/cjs/discovery.d.ts.map +1 -0
  182. package/dist/cjs/discovery.js +85 -0
  183. package/dist/cjs/discovery.js.map +1 -0
  184. package/dist/cjs/envRead.d.ts +1 -1
  185. package/dist/cjs/envRead.d.ts.map +1 -1
  186. package/dist/cjs/envRead.js +2 -1
  187. package/dist/cjs/envRead.js.map +1 -1
  188. package/dist/cjs/given.d.ts +14 -0
  189. package/dist/cjs/given.d.ts.map +1 -1
  190. package/dist/cjs/given.js +14 -2
  191. package/dist/cjs/given.js.map +1 -1
  192. package/dist/cjs/network.d.ts +3 -1
  193. package/dist/cjs/network.d.ts.map +1 -1
  194. package/dist/cjs/network.js +11 -3
  195. package/dist/cjs/network.js.map +1 -1
  196. package/dist/cjs/rubric/bridge.d.ts +8 -0
  197. package/dist/cjs/rubric/bridge.d.ts.map +1 -1
  198. package/dist/cjs/rubric/bridge.js +107 -8
  199. package/dist/cjs/rubric/bridge.js.map +1 -1
  200. package/dist/cjs/rubric/call.d.ts +35 -8
  201. package/dist/cjs/rubric/call.d.ts.map +1 -1
  202. package/dist/cjs/rubric/call.js +62 -20
  203. package/dist/cjs/rubric/call.js.map +1 -1
  204. package/dist/cjs/rubric/callTag.d.ts +5 -0
  205. package/dist/cjs/rubric/callTag.d.ts.map +1 -0
  206. package/dist/cjs/rubric/callTag.js +17 -0
  207. package/dist/cjs/rubric/callTag.js.map +1 -0
  208. package/dist/cjs/rubric/compose.d.ts.map +1 -1
  209. package/dist/cjs/rubric/compose.js +5 -3
  210. package/dist/cjs/rubric/compose.js.map +1 -1
  211. package/dist/cjs/rubric/draft.d.ts +9 -1
  212. package/dist/cjs/rubric/draft.d.ts.map +1 -1
  213. package/dist/cjs/rubric/draft.js +24 -2
  214. package/dist/cjs/rubric/draft.js.map +1 -1
  215. package/dist/cjs/rubric/gateMet.d.ts +17 -0
  216. package/dist/cjs/rubric/gateMet.d.ts.map +1 -1
  217. package/dist/cjs/rubric/gateMet.js +36 -3
  218. package/dist/cjs/rubric/gateMet.js.map +1 -1
  219. package/dist/cjs/rubric/leg.js +3 -3
  220. package/dist/cjs/rubric/leg.js.map +1 -1
  221. package/dist/cjs/rubric/marketPlan.d.ts +2 -0
  222. package/dist/cjs/rubric/marketPlan.d.ts.map +1 -1
  223. package/dist/cjs/rubric/marketPlan.js.map +1 -1
  224. package/dist/cjs/rubric/planAsk.d.ts +23 -0
  225. package/dist/cjs/rubric/planAsk.d.ts.map +1 -0
  226. package/dist/cjs/rubric/planAsk.js +24 -0
  227. package/dist/cjs/rubric/planAsk.js.map +1 -0
  228. package/dist/cjs/rubric/report.d.ts +208 -0
  229. package/dist/cjs/rubric/report.d.ts.map +1 -0
  230. package/dist/cjs/rubric/report.js +384 -0
  231. package/dist/cjs/rubric/report.js.map +1 -0
  232. package/dist/cjs/rubric/reportLine.d.ts +31 -0
  233. package/dist/cjs/rubric/reportLine.d.ts.map +1 -0
  234. package/dist/cjs/rubric/reportLine.js +45 -0
  235. package/dist/cjs/rubric/reportLine.js.map +1 -0
  236. package/dist/cjs/rubric/reportTemplate.d.ts +30 -0
  237. package/dist/cjs/rubric/reportTemplate.d.ts.map +1 -0
  238. package/dist/cjs/rubric/reportTemplate.js +78 -0
  239. package/dist/cjs/rubric/reportTemplate.js.map +1 -0
  240. package/dist/cjs/rubric/share.d.ts +46 -0
  241. package/dist/cjs/rubric/share.d.ts.map +1 -0
  242. package/dist/cjs/rubric/share.js +65 -0
  243. package/dist/cjs/rubric/share.js.map +1 -0
  244. package/dist/cjs/rubric/terms.d.ts +76 -2
  245. package/dist/cjs/rubric/terms.d.ts.map +1 -1
  246. package/dist/cjs/rubric/terms.js +84 -4
  247. package/dist/cjs/rubric/terms.js.map +1 -1
  248. package/dist/cjs/verification/profile.d.ts +28 -0
  249. package/dist/cjs/verification/profile.d.ts.map +1 -0
  250. package/dist/cjs/verification/profile.js +126 -0
  251. package/dist/cjs/verification/profile.js.map +1 -0
  252. package/dist/cjs/verification/schema.d.ts +54 -0
  253. package/dist/cjs/verification/schema.d.ts.map +1 -0
  254. package/dist/cjs/verification/schema.js +49 -0
  255. package/dist/cjs/verification/schema.js.map +1 -0
  256. package/dist/esm/campaign/cleanup.js +1 -1
  257. package/dist/esm/campaign/cleanup.js.map +1 -1
  258. package/dist/esm/campaign/funding.d.ts.map +1 -1
  259. package/dist/esm/campaign/funding.js +2 -2
  260. package/dist/esm/campaign/funding.js.map +1 -1
  261. package/dist/esm/campaign/pool.js +3 -3
  262. package/dist/esm/campaign/pool.js.map +1 -1
  263. package/dist/esm/campaign/record.d.ts.map +1 -1
  264. package/dist/esm/campaign/record.js +2 -2
  265. package/dist/esm/campaign/record.js.map +1 -1
  266. package/dist/esm/campaign/spot.d.ts.map +1 -1
  267. package/dist/esm/campaign/spot.js +2 -1
  268. package/dist/esm/campaign/spot.js.map +1 -1
  269. package/dist/esm/campaign/spots.js +4 -4
  270. package/dist/esm/campaign/spots.js.map +1 -1
  271. package/dist/esm/campaign/treasurySends.d.ts.map +1 -1
  272. package/dist/esm/campaign/treasurySends.js +4 -4
  273. package/dist/esm/campaign/treasurySends.js.map +1 -1
  274. package/dist/esm/chain/ask.d.ts +17 -0
  275. package/dist/esm/chain/ask.d.ts.map +1 -1
  276. package/dist/esm/chain/ask.js +29 -12
  277. package/dist/esm/chain/ask.js.map +1 -1
  278. package/dist/esm/chain/broadcast.d.ts.map +1 -1
  279. package/dist/esm/chain/broadcast.js +7 -5
  280. package/dist/esm/chain/broadcast.js.map +1 -1
  281. package/dist/esm/chain/claimVerdict.d.ts +26 -0
  282. package/dist/esm/chain/claimVerdict.d.ts.map +1 -0
  283. package/dist/esm/chain/claimVerdict.js +30 -0
  284. package/dist/esm/chain/claimVerdict.js.map +1 -0
  285. package/dist/esm/chain/delegate.d.ts +46 -3
  286. package/dist/esm/chain/delegate.d.ts.map +1 -1
  287. package/dist/esm/chain/delegate.js +60 -5
  288. package/dist/esm/chain/delegate.js.map +1 -1
  289. package/dist/esm/chain/entityShape.d.ts +6 -0
  290. package/dist/esm/chain/entityShape.d.ts.map +1 -1
  291. package/dist/esm/chain/entityShape.js +20 -3
  292. package/dist/esm/chain/entityShape.js.map +1 -1
  293. package/dist/esm/chain/env.d.ts +1 -0
  294. package/dist/esm/chain/env.d.ts.map +1 -1
  295. package/dist/esm/chain/env.js +7 -0
  296. package/dist/esm/chain/env.js.map +1 -1
  297. package/dist/esm/chain/inviteMessages.d.ts +183 -0
  298. package/dist/esm/chain/inviteMessages.d.ts.map +1 -0
  299. package/dist/esm/chain/inviteMessages.js +246 -0
  300. package/dist/esm/chain/inviteMessages.js.map +1 -0
  301. package/dist/esm/chain/inviteProof.d.ts +121 -0
  302. package/dist/esm/chain/inviteProof.d.ts.map +1 -0
  303. package/dist/esm/chain/inviteProof.js +278 -0
  304. package/dist/esm/chain/inviteProof.js.map +1 -0
  305. package/dist/esm/chain/lane.d.ts +148 -0
  306. package/dist/esm/chain/lane.d.ts.map +1 -0
  307. package/dist/esm/chain/lane.js +170 -0
  308. package/dist/esm/chain/lane.js.map +1 -0
  309. package/dist/esm/chain/money.d.ts +12 -4
  310. package/dist/esm/chain/money.d.ts.map +1 -1
  311. package/dist/esm/chain/money.js +19 -7
  312. package/dist/esm/chain/money.js.map +1 -1
  313. package/dist/esm/chain/oracle.d.ts +2 -0
  314. package/dist/esm/chain/oracle.d.ts.map +1 -1
  315. package/dist/esm/chain/oracle.js +1 -1
  316. package/dist/esm/chain/oracle.js.map +1 -1
  317. package/dist/esm/chain/orgReviewBilling.js +1 -1
  318. package/dist/esm/chain/orgReviewBilling.js.map +1 -1
  319. package/dist/esm/chain/payoutTerms.d.ts.map +1 -1
  320. package/dist/esm/chain/payoutTerms.js +1 -1
  321. package/dist/esm/chain/payoutTerms.js.map +1 -1
  322. package/dist/esm/chain/personReview.d.ts +218 -0
  323. package/dist/esm/chain/personReview.d.ts.map +1 -0
  324. package/dist/esm/chain/personReview.js +322 -0
  325. package/dist/esm/chain/personReview.js.map +1 -0
  326. package/dist/esm/chain/postFee.d.ts +11 -0
  327. package/dist/esm/chain/postFee.d.ts.map +1 -0
  328. package/dist/esm/chain/postFee.js +11 -0
  329. package/dist/esm/chain/postFee.js.map +1 -0
  330. package/dist/esm/chain/query.d.ts +55 -2
  331. package/dist/esm/chain/query.d.ts.map +1 -1
  332. package/dist/esm/chain/query.js +136 -8
  333. package/dist/esm/chain/query.js.map +1 -1
  334. package/dist/esm/chain/reviewBilling.d.ts +3 -27
  335. package/dist/esm/chain/reviewBilling.d.ts.map +1 -1
  336. package/dist/esm/chain/reviewBilling.js +5 -108
  337. package/dist/esm/chain/reviewBilling.js.map +1 -1
  338. package/dist/esm/chain.d.ts +2 -2
  339. package/dist/esm/chain.d.ts.map +1 -1
  340. package/dist/esm/chain.js +2 -2
  341. package/dist/esm/chain.js.map +1 -1
  342. package/dist/esm/config.d.ts +11 -2
  343. package/dist/esm/config.d.ts.map +1 -1
  344. package/dist/esm/config.js +6 -2
  345. package/dist/esm/config.js.map +1 -1
  346. package/dist/esm/data/agent.d.ts +2 -0
  347. package/dist/esm/data/agent.d.ts.map +1 -1
  348. package/dist/esm/data/agent.js +1 -0
  349. package/dist/esm/data/agent.js.map +1 -1
  350. package/dist/esm/data/board/assemble.d.ts +7 -2
  351. package/dist/esm/data/board/assemble.d.ts.map +1 -1
  352. package/dist/esm/data/board/assemble.js +73 -9
  353. package/dist/esm/data/board/assemble.js.map +1 -1
  354. package/dist/esm/data/board/facts.d.ts +2 -0
  355. package/dist/esm/data/board/facts.d.ts.map +1 -1
  356. package/dist/esm/data/board/facts.js +2 -1
  357. package/dist/esm/data/board/facts.js.map +1 -1
  358. package/dist/esm/data/board/read.d.ts +27 -3
  359. package/dist/esm/data/board/read.d.ts.map +1 -1
  360. package/dist/esm/data/board/read.js +123 -10
  361. package/dist/esm/data/board/read.js.map +1 -1
  362. package/dist/esm/data/board/types.d.ts +77 -5
  363. package/dist/esm/data/board/types.d.ts.map +1 -1
  364. package/dist/esm/data/board/types.js +5 -3
  365. package/dist/esm/data/board/types.js.map +1 -1
  366. package/dist/esm/data/checkers.d.ts +169 -0
  367. package/dist/esm/data/checkers.d.ts.map +1 -0
  368. package/dist/esm/data/checkers.js +304 -0
  369. package/dist/esm/data/checkers.js.map +1 -0
  370. package/dist/esm/data/checkersRead.d.ts +58 -0
  371. package/dist/esm/data/checkersRead.d.ts.map +1 -0
  372. package/dist/esm/data/checkersRead.js +252 -0
  373. package/dist/esm/data/checkersRead.js.map +1 -0
  374. package/dist/esm/data/denoms.d.ts.map +1 -1
  375. package/dist/esm/data/denoms.js +1 -0
  376. package/dist/esm/data/denoms.js.map +1 -1
  377. package/dist/esm/data/docUrls.d.ts +2 -0
  378. package/dist/esm/data/docUrls.d.ts.map +1 -1
  379. package/dist/esm/data/docUrls.js +2 -0
  380. package/dist/esm/data/docUrls.js.map +1 -1
  381. package/dist/esm/data/docs.d.ts +3 -1
  382. package/dist/esm/data/docs.d.ts.map +1 -1
  383. package/dist/esm/data/docs.js +15 -2
  384. package/dist/esm/data/docs.js.map +1 -1
  385. package/dist/esm/data/engine.d.ts.map +1 -1
  386. package/dist/esm/data/engine.js +12 -5
  387. package/dist/esm/data/engine.js.map +1 -1
  388. package/dist/esm/data/engineUrl.js +2 -2
  389. package/dist/esm/data/engineUrl.js.map +1 -1
  390. package/dist/esm/data/envelope.d.ts +18 -0
  391. package/dist/esm/data/envelope.d.ts.map +1 -1
  392. package/dist/esm/data/envelope.js +14 -0
  393. package/dist/esm/data/envelope.js.map +1 -1
  394. package/dist/esm/data/format.d.ts +18 -0
  395. package/dist/esm/data/format.d.ts.map +1 -1
  396. package/dist/esm/data/format.js +28 -1
  397. package/dist/esm/data/format.js.map +1 -1
  398. package/dist/esm/data/index.d.ts +2 -2
  399. package/dist/esm/data/index.d.ts.map +1 -1
  400. package/dist/esm/data/index.js +1 -1
  401. package/dist/esm/data/index.js.map +1 -1
  402. package/dist/esm/data/install.d.ts +63 -33
  403. package/dist/esm/data/install.d.ts.map +1 -1
  404. package/dist/esm/data/install.js +81 -44
  405. package/dist/esm/data/install.js.map +1 -1
  406. package/dist/esm/data/openness.d.ts +14 -1
  407. package/dist/esm/data/openness.d.ts.map +1 -1
  408. package/dist/esm/data/openness.js +14 -26
  409. package/dist/esm/data/openness.js.map +1 -1
  410. package/dist/esm/data/queue.d.ts +26 -0
  411. package/dist/esm/data/queue.d.ts.map +1 -1
  412. package/dist/esm/data/queue.js +50 -9
  413. package/dist/esm/data/queue.js.map +1 -1
  414. package/dist/esm/data/receipt.d.ts +19 -0
  415. package/dist/esm/data/receipt.d.ts.map +1 -1
  416. package/dist/esm/data/receipt.js +20 -4
  417. package/dist/esm/data/receipt.js.map +1 -1
  418. package/dist/esm/data/threads.d.ts +2 -0
  419. package/dist/esm/data/threads.d.ts.map +1 -1
  420. package/dist/esm/data/threads.js +3 -1
  421. package/dist/esm/data/threads.js.map +1 -1
  422. package/dist/esm/data/traceWords.js +1 -1
  423. package/dist/esm/data/traceWords.js.map +1 -1
  424. package/dist/esm/data/types.d.ts +6 -1
  425. package/dist/esm/data/types.d.ts.map +1 -1
  426. package/dist/esm/data/types.js.map +1 -1
  427. package/dist/esm/data/whyReceipt.d.ts.map +1 -1
  428. package/dist/esm/data/whyReceipt.js +10 -1
  429. package/dist/esm/data/whyReceipt.js.map +1 -1
  430. package/dist/esm/data/work.d.ts +5 -0
  431. package/dist/esm/data/work.d.ts.map +1 -1
  432. package/dist/esm/data/work.js +11 -5
  433. package/dist/esm/data/work.js.map +1 -1
  434. package/dist/esm/discovery.d.ts +64 -0
  435. package/dist/esm/discovery.d.ts.map +1 -0
  436. package/dist/esm/discovery.js +74 -0
  437. package/dist/esm/discovery.js.map +1 -0
  438. package/dist/esm/envRead.d.ts +1 -1
  439. package/dist/esm/envRead.d.ts.map +1 -1
  440. package/dist/esm/envRead.js +1 -1
  441. package/dist/esm/envRead.js.map +1 -1
  442. package/dist/esm/given.d.ts +14 -0
  443. package/dist/esm/given.d.ts.map +1 -1
  444. package/dist/esm/given.js +11 -1
  445. package/dist/esm/given.js.map +1 -1
  446. package/dist/esm/network.d.ts +3 -1
  447. package/dist/esm/network.d.ts.map +1 -1
  448. package/dist/esm/network.js +10 -3
  449. package/dist/esm/network.js.map +1 -1
  450. package/dist/esm/rubric/bridge.d.ts +8 -0
  451. package/dist/esm/rubric/bridge.d.ts.map +1 -1
  452. package/dist/esm/rubric/bridge.js +105 -7
  453. package/dist/esm/rubric/bridge.js.map +1 -1
  454. package/dist/esm/rubric/call.d.ts +35 -8
  455. package/dist/esm/rubric/call.d.ts.map +1 -1
  456. package/dist/esm/rubric/call.js +57 -16
  457. package/dist/esm/rubric/call.js.map +1 -1
  458. package/dist/esm/rubric/callTag.d.ts +5 -0
  459. package/dist/esm/rubric/callTag.d.ts.map +1 -0
  460. package/dist/esm/rubric/callTag.js +12 -0
  461. package/dist/esm/rubric/callTag.js.map +1 -0
  462. package/dist/esm/rubric/compose.d.ts.map +1 -1
  463. package/dist/esm/rubric/compose.js +5 -3
  464. package/dist/esm/rubric/compose.js.map +1 -1
  465. package/dist/esm/rubric/draft.d.ts +9 -1
  466. package/dist/esm/rubric/draft.d.ts.map +1 -1
  467. package/dist/esm/rubric/draft.js +23 -2
  468. package/dist/esm/rubric/draft.js.map +1 -1
  469. package/dist/esm/rubric/gateMet.d.ts +17 -0
  470. package/dist/esm/rubric/gateMet.d.ts.map +1 -1
  471. package/dist/esm/rubric/gateMet.js +34 -2
  472. package/dist/esm/rubric/gateMet.js.map +1 -1
  473. package/dist/esm/rubric/leg.js +4 -4
  474. package/dist/esm/rubric/leg.js.map +1 -1
  475. package/dist/esm/rubric/marketPlan.d.ts +2 -0
  476. package/dist/esm/rubric/marketPlan.d.ts.map +1 -1
  477. package/dist/esm/rubric/marketPlan.js.map +1 -1
  478. package/dist/esm/rubric/planAsk.d.ts +23 -0
  479. package/dist/esm/rubric/planAsk.d.ts.map +1 -0
  480. package/dist/esm/rubric/planAsk.js +20 -0
  481. package/dist/esm/rubric/planAsk.js.map +1 -0
  482. package/dist/esm/rubric/report.d.ts +208 -0
  483. package/dist/esm/rubric/report.d.ts.map +1 -0
  484. package/dist/esm/rubric/report.js +371 -0
  485. package/dist/esm/rubric/report.js.map +1 -0
  486. package/dist/esm/rubric/reportLine.d.ts +31 -0
  487. package/dist/esm/rubric/reportLine.d.ts.map +1 -0
  488. package/dist/esm/rubric/reportLine.js +40 -0
  489. package/dist/esm/rubric/reportLine.js.map +1 -0
  490. package/dist/esm/rubric/reportTemplate.d.ts +30 -0
  491. package/dist/esm/rubric/reportTemplate.d.ts.map +1 -0
  492. package/dist/esm/rubric/reportTemplate.js +74 -0
  493. package/dist/esm/rubric/reportTemplate.js.map +1 -0
  494. package/dist/esm/rubric/share.d.ts +46 -0
  495. package/dist/esm/rubric/share.d.ts.map +1 -0
  496. package/dist/esm/rubric/share.js +58 -0
  497. package/dist/esm/rubric/share.js.map +1 -0
  498. package/dist/esm/rubric/terms.d.ts +76 -2
  499. package/dist/esm/rubric/terms.d.ts.map +1 -1
  500. package/dist/esm/rubric/terms.js +78 -3
  501. package/dist/esm/rubric/terms.js.map +1 -1
  502. package/dist/esm/verification/profile.d.ts +28 -0
  503. package/dist/esm/verification/profile.d.ts.map +1 -0
  504. package/dist/esm/verification/profile.js +122 -0
  505. package/dist/esm/verification/profile.js.map +1 -0
  506. package/dist/esm/verification/schema.d.ts +54 -0
  507. package/dist/esm/verification/schema.d.ts.map +1 -0
  508. package/dist/esm/verification/schema.js +46 -0
  509. package/dist/esm/verification/schema.js.map +1 -0
  510. package/package.json +22 -2
@@ -0,0 +1,218 @@
1
+ /**
2
+ * "A person gives the final OK" (IXO-5698): the poster lets a person review an ask's held answers at its oracle, and
3
+ * that person answers them. Every call here is the decision oracle's chain lane (`@ixo/decision-oracle` 0.2.4): a
4
+ * self-issued UCAN invocation `{ with: "ixo:eval-oracle", can: <route action> }`, five minutes, from the caller's
5
+ * AuthHub Ed25519 key on their did:ixo — the same key that signs the grant and the review attestation. A SignX
6
+ * wallet has no such key and cannot do any of it.
7
+ *
8
+ * - The grant: ONE `claims/review` delegation on `ixo:oracle/<oracle did:web>/collection/<id>`, poster → reviewer
9
+ * (self allowed), at most 30 days, filed with `POST /v1/collections/<id>/reviewers`.
10
+ * - The answer: `POST /v1/reviews/<claimId>` with `{ answers, attestation, reviewerGrant }`; the attestation is an
11
+ * EdDSA JWS over canonical JSON (`kid` the key's did:key, `issuer` the reviewer's did:ixo), bound to the decision's
12
+ * `resultDigest`. The oracle folds it through the engine and signs the verdict on chain; nobody here signs on chain.
13
+ */
14
+ import { oracleAudience, type CallOptions, type SourceMint } from "./orgReviewBilling.ts";
15
+ export { oracleAudience };
16
+ export interface Signer {
17
+ address: string;
18
+ /** The AuthHub session's Ed25519 signing mnemonic (`session.signingKey.mnemonic`). */
19
+ mnemonic: string;
20
+ }
21
+ /** `detail` is the oracle's own code, for a details line; `why` is what a person reads. */
22
+ export type Outcome<T> = {
23
+ ok: true;
24
+ value: T;
25
+ } | {
26
+ ok: false;
27
+ why: string;
28
+ detail?: string;
29
+ };
30
+ /** Why a named approver cannot be used yet (no Ed25519 key on their IID: never signed in with Google). */
31
+ export declare const APPROVER_NOT_READY = "That person can't approve yet: they need to sign in to Openhands with Google once.";
32
+ /**
33
+ * Can this address give the final OK? A real ixo account (bech32 checksum, 20 bytes) whose IID publishes an Ed25519
34
+ * key, read the way the oracle reads it (`@ixo/ucan` `createIxoDIDResolver`): without one they could never sign a
35
+ * review, and every answer the AI passed would wait for ever.
36
+ */
37
+ export declare function approverReady(address: string, options?: {
38
+ indexerUrl?: string;
39
+ fetch?: typeof fetch;
40
+ self?: boolean;
41
+ }): Promise<{
42
+ ok: true;
43
+ } | {
44
+ ok: false;
45
+ why: string;
46
+ }>;
47
+ /** The oracle refuses a grant whose `exp − nbf` is over 30 days. */
48
+ export declare const GRANT_MAX_SECONDS: number;
49
+ /** The reviewer card offers Renew inside this. */
50
+ export declare const RENEW_WITHIN_SECONDS: number;
51
+ /** `nbf` five minutes back; `exp` two days past the ask's end, never past 30 days and never under a day from now. */
52
+ export declare function grantWindow(now: number, endsAt: number | null): {
53
+ nbf: number;
54
+ exp: number;
55
+ };
56
+ export declare const reviewResource: (oracleDid: string, collectionId: string) => string;
57
+ /** The route's own action, self-issued (no proofs: the oracle refuses a chain), five minutes, a nonce. */
58
+ export declare function oracleMint(who: Signer): SourceMint;
59
+ /** The poster's `claims/review` grant to `reviewer` (an ixo1 address; the poster's own is allowed), base64 CAR. */
60
+ export declare function buildReviewerGrant(owner: Signer, input: {
61
+ oracleDid: string;
62
+ collectionId: string;
63
+ reviewer: string;
64
+ endsAt?: number | null;
65
+ now?: number;
66
+ }): Promise<string>;
67
+ /** A filed grant, as `GET`/`POST …/reviewers` answers it. */
68
+ export interface ReviewerRow {
69
+ collectionId: string;
70
+ memberDid: string;
71
+ rootDid: string;
72
+ delegationCid: string;
73
+ delegation: string;
74
+ expiresAt: string;
75
+ revokedAt: string | null;
76
+ }
77
+ /** A live grant for `reviewer`: filed, not revoked, not expired. */
78
+ export declare const liveGrant: (rows: ReviewerRow[], reviewer: string, now?: number) => ReviewerRow | null;
79
+ /**
80
+ * An oracle refusal (a response's code and `details.reason`, or a `foldError`'s `CODE (reason)`) in one plain line.
81
+ * Contract: eval-oracle `reviewer-grant.ts`, `routes/v1/reviews.ts`, `workflows/review-complete.ts`.
82
+ */
83
+ export declare function plainRefusal(code: string, reason?: string, status?: number): string;
84
+ /** A `foldError` (`CODE (reason): message`) in plain words, and the code for a details line. */
85
+ export declare function foldWords(foldError: string): {
86
+ why: string;
87
+ detail: string;
88
+ };
89
+ /** "Allow reviewing": sign the grant and file it. The poster must control the ask's entity on chain. */
90
+ export declare function allowReviewing(input: {
91
+ owner: Signer;
92
+ oracleUrl: string;
93
+ collectionId: string;
94
+ reviewer: string;
95
+ endsAt?: number | null;
96
+ }, options?: CallOptions): Promise<Outcome<ReviewerRow>>;
97
+ /**
98
+ * Checking kept on, silently: the poster's grant to `reviewer` is signed only when none is live, or when it ends within
99
+ * three days and a fresh one would add at least a day (never past the ask's end + 2 days, never over 30 days).
100
+ * `signed` says whether a grant was filed now.
101
+ */
102
+ export declare function ensureReviewing(input: {
103
+ owner: Signer;
104
+ oracleUrl: string;
105
+ collectionId: string;
106
+ reviewer: string;
107
+ endsAt?: number | null;
108
+ now?: number;
109
+ }, options?: CallOptions): Promise<Outcome<{
110
+ expiresAt: string;
111
+ signed: boolean;
112
+ }>>;
113
+ /** The grants this signer may see on the ask: every one for its controller, only their own for a reviewer. Null when unread. */
114
+ export declare function readReviewers(oracleUrl: string, who: Signer, collectionId: string, options?: CallOptions): Promise<ReviewerRow[] | null>;
115
+ export interface HeldDecision {
116
+ status: string | null;
117
+ verdict: string | null;
118
+ resultDigest: string | null;
119
+ explanation: string | null;
120
+ gates: {
121
+ code: string;
122
+ outcome: string;
123
+ }[];
124
+ reasons: {
125
+ code: string;
126
+ reason: string;
127
+ class?: string;
128
+ }[];
129
+ pendingTasks: string[];
130
+ }
131
+ /** What the oracle holds about a claim (`GET /v1/claims/:id`): the decision and the review; redacted for its submitter. */
132
+ export interface HeldClaim {
133
+ decision: HeldDecision | null;
134
+ review: {
135
+ answers: Record<string, boolean | string> | null;
136
+ reviewerDid: string | null;
137
+ answeredAt: string | null;
138
+ foldedAt: string | null;
139
+ foldError: string | null;
140
+ } | null;
141
+ /** The decision's checks, when this oracle sends them here too (eval-oracle #222); null from an older one, which `readReviewChecks` serves. */
142
+ checks: ReviewCheck[] | null;
143
+ /** The plain-language note for the person deciding (held claims only); null from an older oracle, which `readReview` may serve. */
144
+ reviewerNote: ReviewerNote | null;
145
+ /** Where the oracle got to with the claim (`ingest.status`: queued, processing, done, failed…) and its error, which the oracle nulls for the claim's own submitter. */
146
+ ingest: {
147
+ status: string | null;
148
+ error: string | null;
149
+ } | null;
150
+ }
151
+ /** The check could not run (`ingest.status` "failed"): said plainly to anyone, the oracle's own error only to the people who run the ask. */
152
+ export declare const CHECK_FAILED_WORDS = "The checker couldn't check this report yet (its setup has a problem); IXO has been told. Nothing is lost; it will be checked once that's fixed.";
153
+ /** True when the oracle took the claim in but its check failed to run (not a verdict: no decision was made). */
154
+ export declare const checkFailed: (held: Pick<HeldClaim, "ingest"> | null | undefined) => boolean;
155
+ /** `GET /v1/claims/:claimId` as this signer (owner, live reviewer or the claim's own submitter). Null: not seen or not readable. */
156
+ export declare function readHeldClaim(oracleUrl: string, who: Signer, claimId: string, options?: CallOptions): Promise<HeldClaim | null>;
157
+ /** One of the decision's frozen facts (`GET /v1/reviews/:claimId` `checks`, eval-oracle #222): `reason` is the checker's own words. */
158
+ export interface ReviewCheck {
159
+ name: string;
160
+ status: "ok" | "error";
161
+ value: unknown;
162
+ reason: string | null;
163
+ }
164
+ /** `checks` as the oracle sent it, defensively: anything not a list (an older oracle) is null; a malformed entry is dropped. */
165
+ export declare function parseChecks(raw: unknown): ReviewCheck[] | null;
166
+ /** The oracle's note for the person deciding (`reviewerNote`, decision-oracle): what the AI thinks and what to check. */
167
+ export interface ReviewerNote {
168
+ says: string;
169
+ checkThese: string[];
170
+ model: string;
171
+ createdAt: string;
172
+ }
173
+ /** `reviewerNote` defensively: absent, not an object, no words or no list is null; blank items are dropped, everything capped. */
174
+ export declare function parseReviewerNote(raw: unknown): ReviewerNote | null;
175
+ /** `GET /v1/reviews/:claimId` as the reviewer (`reviews/read`, the read Send decision makes): its checks and note. Null: unread. */
176
+ export declare function readReview(oracleUrl: string, who: Signer, claimId: string, options?: CallOptions): Promise<{
177
+ checks: ReviewCheck[] | null;
178
+ reviewerNote: ReviewerNote | null;
179
+ } | null>;
180
+ /** The decision's checks alone, from `readReview`. Null: none, unread or an older oracle. */
181
+ export declare const readReviewChecks: (oracleUrl: string, who: Signer, claimId: string, options?: CallOptions) => Promise<ReviewCheck[] | null>;
182
+ /** One question for the reviewer: the engine manifest's `review.taskDetails`, else the oracle's own fallback. */
183
+ export interface ReviewQuestion {
184
+ id: string;
185
+ prompt: string;
186
+ answer: {
187
+ type: "boolean";
188
+ } | {
189
+ type: "enum";
190
+ options: string[];
191
+ };
192
+ }
193
+ /** The prompts for `ids`, from `GET <engine>/v1/rubrics/manifest?protocol=` (public). No detail: the id, Yes/No. */
194
+ export declare function reviewQuestions(engineUrl: string, protocolDid: string, ids: string[], options?: CallOptions): Promise<ReviewQuestion[]>;
195
+ /** The oracle refuses any serialisation but this one: sorted keys, no spaces. */
196
+ export declare const canonicalJson: (value: unknown) => string;
197
+ /** The `ClaimReviewAttestation` (compact EdDSA JWS) the oracle and the engine both verify against the reviewer's did:ixo. */
198
+ export declare function signAttestation(reviewer: Signer, input: {
199
+ claimId: string;
200
+ oracleDid: string;
201
+ answeredAgainst: string;
202
+ answers: Record<string, boolean | string>;
203
+ now?: Date;
204
+ }): Promise<string>;
205
+ /**
206
+ * "Send decision": the answers for every pending task, against the decision as it stands now (its `resultDigest`),
207
+ * with the reviewer's live grant. A re-send before the fold replaces the answers; the oracle folds and signs.
208
+ */
209
+ export declare function sendReview(input: {
210
+ reviewer: Signer;
211
+ oracleUrl: string;
212
+ collectionId: string;
213
+ claimId: string;
214
+ answers: Record<string, boolean | string>;
215
+ }, options?: CallOptions): Promise<Outcome<{
216
+ status: number;
217
+ }>>;
218
+ //# sourceMappingURL=personReview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personReview.d.ts","sourceRoot":"","sources":["../../../src/chain/personReview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,379 @@
1
+ "use strict";
2
+ /**
3
+ * "A person gives the final OK" (IXO-5698): the poster lets a person review an ask's held answers at its oracle, and
4
+ * that person answers them. Every call here is the decision oracle's chain lane (`@ixo/decision-oracle` 0.2.4): a
5
+ * self-issued UCAN invocation `{ with: "ixo:eval-oracle", can: <route action> }`, five minutes, from the caller's
6
+ * AuthHub Ed25519 key on their did:ixo — the same key that signs the grant and the review attestation. A SignX
7
+ * wallet has no such key and cannot do any of it.
8
+ *
9
+ * - The grant: ONE `claims/review` delegation on `ixo:oracle/<oracle did:web>/collection/<id>`, poster → reviewer
10
+ * (self allowed), at most 30 days, filed with `POST /v1/collections/<id>/reviewers`.
11
+ * - The answer: `POST /v1/reviews/<claimId>` with `{ answers, attestation, reviewerGrant }`; the attestation is an
12
+ * EdDSA JWS over canonical JSON (`kid` the key's did:key, `issuer` the reviewer's did:ixo), bound to the decision's
13
+ * `resultDigest`. The oracle folds it through the engine and signs the verdict on chain; nobody here signs on chain.
14
+ */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
28
+ }) : function(o, v) {
29
+ o["default"] = v;
30
+ });
31
+ var __importStar = (this && this.__importStar) || (function () {
32
+ var ownKeys = function(o) {
33
+ ownKeys = Object.getOwnPropertyNames || function (o) {
34
+ var ar = [];
35
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
36
+ return ar;
37
+ };
38
+ return ownKeys(o);
39
+ };
40
+ return function (mod) {
41
+ if (mod && mod.__esModule) return mod;
42
+ var result = {};
43
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
44
+ __setModuleDefault(result, mod);
45
+ return result;
46
+ };
47
+ })();
48
+ Object.defineProperty(exports, "__esModule", { value: true });
49
+ exports.canonicalJson = exports.readReviewChecks = exports.checkFailed = exports.CHECK_FAILED_WORDS = exports.liveGrant = exports.reviewResource = exports.RENEW_WITHIN_SECONDS = exports.GRANT_MAX_SECONDS = exports.APPROVER_NOT_READY = exports.oracleAudience = void 0;
50
+ exports.approverReady = approverReady;
51
+ exports.grantWindow = grantWindow;
52
+ exports.oracleMint = oracleMint;
53
+ exports.buildReviewerGrant = buildReviewerGrant;
54
+ exports.plainRefusal = plainRefusal;
55
+ exports.foldWords = foldWords;
56
+ exports.allowReviewing = allowReviewing;
57
+ exports.ensureReviewing = ensureReviewing;
58
+ exports.readReviewers = readReviewers;
59
+ exports.readHeldClaim = readHeldClaim;
60
+ exports.parseChecks = parseChecks;
61
+ exports.parseReviewerNote = parseReviewerNote;
62
+ exports.readReview = readReview;
63
+ exports.reviewQuestions = reviewQuestions;
64
+ exports.signAttestation = signAttestation;
65
+ exports.sendReview = sendReview;
66
+ const encoding_1 = require("@cosmjs/encoding");
67
+ const env_ts_1 = require("./env.js");
68
+ const orgReviewBilling_ts_1 = require("./orgReviewBilling.js");
69
+ Object.defineProperty(exports, "oracleAudience", { enumerable: true, get: function () { return orgReviewBilling_ts_1.oracleAudience; } });
70
+ /** Why a named approver cannot be used yet (no Ed25519 key on their IID: never signed in with Google). */
71
+ exports.APPROVER_NOT_READY = "That person can't approve yet: they need to sign in to Openhands with Google once.";
72
+ /**
73
+ * Can this address give the final OK? A real ixo account (bech32 checksum, 20 bytes) whose IID publishes an Ed25519
74
+ * key, read the way the oracle reads it (`@ixo/ucan` `createIxoDIDResolver`): without one they could never sign a
75
+ * review, and every answer the AI passed would wait for ever.
76
+ */
77
+ async function approverReady(address, options = {}) {
78
+ try {
79
+ const decoded = (0, encoding_1.fromBech32)(address, 90);
80
+ if (decoded.prefix !== "ixo" || decoded.data.length !== 20)
81
+ throw new Error("not an account");
82
+ }
83
+ catch {
84
+ return { ok: false, why: "That isn't an Openhands address. Check it and try again." };
85
+ }
86
+ try {
87
+ const { createIxoDIDResolver } = await Promise.resolve().then(() => __importStar(require("@ixo/ucan")));
88
+ const resolved = await createIxoDIDResolver({ indexerUrl: options.indexerUrl ?? (0, env_ts_1.graphqlUrl)(), ...(options.fetch ? { fetch: options.fetch } : {}) })(`did:ixo:${address}`);
89
+ if ("ok" in resolved)
90
+ return { ok: true };
91
+ /* The resolver's own two deterministic answers (no document, no Ed25519 key); anything else is the index. */
92
+ if (!/^(DID document not found for|No valid Ed25519)/.test(resolved.error.message))
93
+ return { ok: false, why: "We couldn't check that person's account just now. Try again in a minute." };
94
+ /* The poster naming themselves holds the key already: the index has not caught up with their sign-in yet. */
95
+ return { ok: false, why: options.self ? "Your account is still being set up. Try again in a minute." : exports.APPROVER_NOT_READY };
96
+ }
97
+ catch {
98
+ return { ok: false, why: "We couldn't check that person's account just now. Try again in a minute." };
99
+ }
100
+ }
101
+ const DAY = 86_400;
102
+ /** The oracle refuses a grant whose `exp − nbf` is over 30 days. */
103
+ exports.GRANT_MAX_SECONDS = 30 * DAY;
104
+ /** The reviewer card offers Renew inside this. */
105
+ exports.RENEW_WITHIN_SECONDS = 3 * DAY;
106
+ /** `nbf` five minutes back; `exp` two days past the ask's end, never past 30 days and never under a day from now. */
107
+ function grantWindow(now, endsAt) {
108
+ const nbf = now - 300;
109
+ const wanted = endsAt ? Math.max(endsAt + 2 * DAY, now + DAY) : nbf + exports.GRANT_MAX_SECONDS;
110
+ return { nbf, exp: Math.min(wanted, nbf + exports.GRANT_MAX_SECONDS) };
111
+ }
112
+ const reviewResource = (oracleDid, collectionId) => `ixo:oracle/${oracleDid}/collection/${collectionId}`;
113
+ exports.reviewResource = reviewResource;
114
+ const signerOf = async (who) => {
115
+ const { signerFromMnemonic } = await Promise.resolve().then(() => __importStar(require("@ixo/ucan")));
116
+ return (await signerFromMnemonic(who.mnemonic, `did:ixo:${who.address}`)).signer;
117
+ };
118
+ /** The route's own action, self-issued (no proofs: the oracle refuses a chain), five minutes, a nonce. */
119
+ function oracleMint(who) {
120
+ return async (audience, can) => {
121
+ const { createInvocation, serializeInvocation } = await Promise.resolve().then(() => __importStar(require("@ixo/ucan")));
122
+ const invocation = await createInvocation({
123
+ issuer: await signerOf(who),
124
+ audience,
125
+ capability: { can, with: "ixo:eval-oracle" },
126
+ expiration: Math.floor(Date.now() / 1000) + 300,
127
+ facts: [{ nonce: crypto.randomUUID() }]
128
+ });
129
+ return serializeInvocation(invocation);
130
+ };
131
+ }
132
+ /** The poster's `claims/review` grant to `reviewer` (an ixo1 address; the poster's own is allowed), base64 CAR. */
133
+ async function buildReviewerGrant(owner, input) {
134
+ const { createDelegation, serializeDelegation } = await Promise.resolve().then(() => __importStar(require("@ixo/ucan")));
135
+ const { nbf, exp } = grantWindow(input.now ?? Math.floor(Date.now() / 1000), input.endsAt ?? null);
136
+ const delegation = await createDelegation({
137
+ issuer: await signerOf(owner),
138
+ audience: `did:ixo:${input.reviewer}`,
139
+ capabilities: [{ with: (0, exports.reviewResource)(input.oracleDid, input.collectionId), can: "claims/review" }],
140
+ notBefore: nbf,
141
+ expiration: exp,
142
+ /* Two grants with the same window would share a CID, and a revoke names one. */
143
+ facts: [{ nonce: crypto.randomUUID() }]
144
+ });
145
+ return serializeDelegation(delegation);
146
+ }
147
+ const rowOf = (raw) => {
148
+ const r = raw;
149
+ return r && typeof r.memberDid === "string" && typeof r.delegation === "string" && typeof r.expiresAt === "string" ? r : null;
150
+ };
151
+ /** A live grant for `reviewer`: filed, not revoked, not expired. */
152
+ const liveGrant = (rows, reviewer, now = Date.now()) => rows.filter((row) => row.memberDid === `did:ixo:${reviewer}` && !row.revokedAt && Date.parse(row.expiresAt) > now).sort((a, b) => Date.parse(b.expiresAt) - Date.parse(a.expiresAt))[0] ?? null;
153
+ exports.liveGrant = liveGrant;
154
+ /**
155
+ * An oracle refusal (a response's code and `details.reason`, or a `foldError`'s `CODE (reason)`) in one plain line.
156
+ * Contract: eval-oracle `reviewer-grant.ts`, `routes/v1/reviews.ts`, `workflows/review-complete.ts`.
157
+ */
158
+ function plainRefusal(code, reason = "", status = 0) {
159
+ if (reason === "evaluator")
160
+ return "Checking can't be turned on here: you can already pay out this ask directly.";
161
+ if (reason === "oracle" || reason === "oracle-owner")
162
+ return "This account can't check answers on this ask.";
163
+ if (reason === "root-not-controller" || reason === "identity")
164
+ return "Only the person who posted this ask can turn on checking.";
165
+ if (reason === "expired" || reason === "lifetime" || reason === "not-yet-valid")
166
+ return "Checking has ended. The poster can turn it on again on the ask's page.";
167
+ if (reason === "revoked")
168
+ return "Checking was turned off. The poster can turn it on again on the ask's page.";
169
+ if (reason === "absent")
170
+ return "Checking isn't turned on yet. The poster can turn it on from the ask's page.";
171
+ if (code === "ATTESTATION_ISSUER_MISMATCH")
172
+ return "This was signed by another account than the one sending it. Sign in as the person who checks this ask, then send again.";
173
+ if (code === "ATTESTATION_KEY_UNKNOWN" || reason === "signature")
174
+ return "Your account isn't ready yet. Sign in with Google once, then try again.";
175
+ if (code === "STALE_REVIEW" || code === "ATTESTATION_MISMATCH" || code === "FACTS_MISMATCH" || code === "CONTENT_MISMATCH")
176
+ return "The answer changed while you were deciding. Answer again.";
177
+ if (code === "REVIEW_INCOMPLETE")
178
+ return "Some questions were left unanswered. Answer them all and send again.";
179
+ if (code === "CONFLICT" || status === 409)
180
+ return "This answer isn't waiting for a decision any more.";
181
+ if (code === "ATTESTATION_UNRESOLVABLE" || code === "UNAVAILABLE" || status >= 500)
182
+ return "The network didn't answer. Try again in a minute.";
183
+ if (status === 404)
184
+ return "This ask isn't ready yet. Try again in a minute.";
185
+ if (status === 401 || status === 403)
186
+ return "You can't check answers on this ask with this account.";
187
+ return "That didn't work. Try again, or ask the poster.";
188
+ }
189
+ /** A `foldError` (`CODE (reason): message`) in plain words, and the code for a details line. */
190
+ function foldWords(foldError) {
191
+ const [, code = "", reason = ""] = /^([A-Z_]+)(?: \(([^)]+)\))?/.exec(foldError) ?? [];
192
+ return { why: plainRefusal(code, reason), detail: foldError };
193
+ }
194
+ const refused = (answer) => !answer ? { ok: false, why: "The reviewer could not be reached. Nothing changed; try again." } : { ok: false, why: plainRefusal(answer.code, answer.reason, answer.status), detail: [answer.code || String(answer.status), answer.reason, answer.message].filter(Boolean).join(": ") };
195
+ const base = (url) => url.replace(/\/$/, "");
196
+ /** "Allow reviewing": sign the grant and file it. The poster must control the ask's entity on chain. */
197
+ async function allowReviewing(input, options = {}) {
198
+ const audience = await (0, orgReviewBilling_ts_1.oracleAudience)(input.oracleUrl, options);
199
+ if (!audience)
200
+ return { ok: false, why: "The reviewer could not be reached. Nothing was signed." };
201
+ const delegation = await buildReviewerGrant(input.owner, { oracleDid: audience, collectionId: input.collectionId, reviewer: input.reviewer, endsAt: input.endsAt ?? null });
202
+ const answer = await (0, orgReviewBilling_ts_1.sourceCall)(base(input.oracleUrl), audience, oracleMint(input.owner), { method: "POST", path: `/v1/collections/${encodeURIComponent(input.collectionId)}/reviewers`, can: "collections/reviewers-grant", sourceId: null, body: { delegation } }, options);
203
+ const row = answer?.status === 201 || answer?.status === 200 ? rowOf(answer.body) : null;
204
+ return row ? { ok: true, value: row } : refused(answer);
205
+ }
206
+ /**
207
+ * Checking kept on, silently: the poster's grant to `reviewer` is signed only when none is live, or when it ends within
208
+ * three days and a fresh one would add at least a day (never past the ask's end + 2 days, never over 30 days).
209
+ * `signed` says whether a grant was filed now.
210
+ */
211
+ async function ensureReviewing(input, options = {}) {
212
+ const now = input.now ?? Date.now();
213
+ const rows = await readReviewers(input.oracleUrl, input.owner, input.collectionId, options);
214
+ const live = rows ? (0, exports.liveGrant)(rows, input.reviewer, now) : null;
215
+ if (live) {
216
+ const until = Date.parse(live.expiresAt);
217
+ const latest = grantWindow(Math.floor(now / 1000), input.endsAt ?? null).exp * 1000;
218
+ if (until - now >= exports.RENEW_WITHIN_SECONDS * 1000 || latest - until <= 86_400_000)
219
+ return { ok: true, value: { expiresAt: live.expiresAt, signed: false } };
220
+ }
221
+ const done = await allowReviewing({ owner: input.owner, oracleUrl: input.oracleUrl, collectionId: input.collectionId, reviewer: input.reviewer, endsAt: input.endsAt ?? null }, options);
222
+ return done.ok ? { ok: true, value: { expiresAt: done.value.expiresAt, signed: true } } : done;
223
+ }
224
+ /** The grants this signer may see on the ask: every one for its controller, only their own for a reviewer. Null when unread. */
225
+ async function readReviewers(oracleUrl, who, collectionId, options = {}) {
226
+ const audience = await (0, orgReviewBilling_ts_1.oracleAudience)(oracleUrl, options);
227
+ if (!audience)
228
+ return null;
229
+ const answer = await (0, orgReviewBilling_ts_1.sourceCall)(base(oracleUrl), audience, oracleMint(who), { path: `/v1/collections/${encodeURIComponent(collectionId)}/reviewers`, can: "collections/reviewers-read", sourceId: null }, options);
230
+ const rows = answer?.status === 200 ? answer.body?.reviewers : null;
231
+ return Array.isArray(rows) ? rows.map(rowOf).filter((row) => row !== null) : null;
232
+ }
233
+ /** The check could not run (`ingest.status` "failed"): said plainly to anyone, the oracle's own error only to the people who run the ask. */
234
+ exports.CHECK_FAILED_WORDS = "The checker couldn't check this report yet (its setup has a problem); IXO has been told. Nothing is lost; it will be checked once that's fixed.";
235
+ /** True when the oracle took the claim in but its check failed to run (not a verdict: no decision was made). */
236
+ const checkFailed = (held) => held?.ingest?.status === "failed";
237
+ exports.checkFailed = checkFailed;
238
+ const strOr = (value) => (typeof value === "string" ? value : null);
239
+ /** `GET /v1/claims/:claimId` as this signer (owner, live reviewer or the claim's own submitter). Null: not seen or not readable. */
240
+ async function readHeldClaim(oracleUrl, who, claimId, options = {}) {
241
+ const audience = await (0, orgReviewBilling_ts_1.oracleAudience)(oracleUrl, options);
242
+ if (!audience)
243
+ return null;
244
+ const answer = await (0, orgReviewBilling_ts_1.sourceCall)(base(oracleUrl), audience, oracleMint(who), { path: `/v1/claims/${encodeURIComponent(claimId)}`, can: "claims/read", sourceId: null }, options);
245
+ if (answer?.status !== 200)
246
+ return null;
247
+ const body = answer.body;
248
+ const d = body?.decision ?? null;
249
+ const engine = (d?.decision ?? {});
250
+ const r = body?.review ?? null;
251
+ return {
252
+ decision: d
253
+ ? {
254
+ status: strOr(d.status),
255
+ verdict: strOr(d.verdict),
256
+ resultDigest: strOr(d.resultDigest),
257
+ explanation: strOr(d.explanation),
258
+ gates: Array.isArray(engine.gates) ? engine.gates : [],
259
+ reasons: Array.isArray(engine.reasons) ? engine.reasons : [],
260
+ pendingTasks: Array.isArray(engine.pendingTasks) ? engine.pendingTasks.filter((one) => typeof one === "string") : []
261
+ }
262
+ : null,
263
+ review: r
264
+ ? {
265
+ answers: r.answers ?? null,
266
+ reviewerDid: strOr(r.reviewerDid),
267
+ answeredAt: strOr(r.answeredAt),
268
+ foldedAt: strOr(r.foldedAt),
269
+ foldError: strOr(r.foldError)
270
+ }
271
+ : null,
272
+ checks: parseChecks(body?.checks),
273
+ reviewerNote: parseReviewerNote(body?.reviewerNote),
274
+ ingest: body?.ingest ? { status: strOr(body.ingest.status), error: strOr(body.ingest.error) && capped(strOr(body.ingest.error), REASON_MAX) } : null
275
+ };
276
+ }
277
+ const REASON_MAX = 600;
278
+ /** `checks` as the oracle sent it, defensively: anything not a list (an older oracle) is null; a malformed entry is dropped. */
279
+ function parseChecks(raw) {
280
+ if (!Array.isArray(raw))
281
+ return null;
282
+ return raw.flatMap((one) => {
283
+ const c = one;
284
+ if (!c || typeof c.name !== "string" || (c.status !== "ok" && c.status !== "error"))
285
+ return [];
286
+ const said = typeof c.reason === "string" ? c.reason.trim() : "";
287
+ return [{ name: c.name, status: c.status, value: c.value ?? null, reason: said ? (said.length > REASON_MAX ? `${said.slice(0, REASON_MAX).trimEnd()}…` : said) : null }];
288
+ });
289
+ }
290
+ const SAYS_MAX = 500;
291
+ const CHECK_MAX = 200;
292
+ const CHECKS_MAX = 6;
293
+ const capped = (text, max) => (text.length > max ? `${text.slice(0, max).trimEnd()}…` : text);
294
+ /** `reviewerNote` defensively: absent, not an object, no words or no list is null; blank items are dropped, everything capped. */
295
+ function parseReviewerNote(raw) {
296
+ const n = raw;
297
+ if (!n || typeof n !== "object" || typeof n.says !== "string" || !n.says.trim() || !Array.isArray(n.checkThese))
298
+ return null;
299
+ const checkThese = n.checkThese
300
+ .filter((one) => typeof one === "string" && one.trim() !== "")
301
+ .slice(0, CHECKS_MAX)
302
+ .map((one) => capped(one.trim(), CHECK_MAX));
303
+ return { says: capped(n.says.trim(), SAYS_MAX), checkThese, model: strOr(n.model) ?? "", createdAt: strOr(n.createdAt) ?? "" };
304
+ }
305
+ /** `GET /v1/reviews/:claimId` as the reviewer (`reviews/read`, the read Send decision makes): its checks and note. Null: unread. */
306
+ async function readReview(oracleUrl, who, claimId, options = {}) {
307
+ const audience = await (0, orgReviewBilling_ts_1.oracleAudience)(oracleUrl, options);
308
+ if (!audience)
309
+ return null;
310
+ const answer = await (0, orgReviewBilling_ts_1.sourceCall)(base(oracleUrl), audience, oracleMint(who), { path: `/v1/reviews/${encodeURIComponent(claimId)}`, can: "reviews/read", sourceId: null }, options);
311
+ if (answer?.status !== 200)
312
+ return null;
313
+ const body = answer.body;
314
+ return { checks: parseChecks(body?.checks), reviewerNote: parseReviewerNote(body?.reviewerNote) };
315
+ }
316
+ /** The decision's checks alone, from `readReview`. Null: none, unread or an older oracle. */
317
+ const readReviewChecks = async (oracleUrl, who, claimId, options = {}) => (await readReview(oracleUrl, who, claimId, options))?.checks ?? null;
318
+ exports.readReviewChecks = readReviewChecks;
319
+ /** The prompts for `ids`, from `GET <engine>/v1/rubrics/manifest?protocol=` (public). No detail: the id, Yes/No. */
320
+ async function reviewQuestions(engineUrl, protocolDid, ids, options = {}) {
321
+ const details = await (options.fetch ?? fetch)(`${base(engineUrl)}/v1/rubrics/manifest?protocol=${encodeURIComponent(protocolDid)}`, { signal: AbortSignal.timeout(10_000) })
322
+ .then((response) => (response.ok ? response.json() : null))
323
+ .then((manifest) => manifest?.review?.taskDetails ?? [])
324
+ .catch(() => []);
325
+ return ids.map((id) => {
326
+ const found = details.find((one) => one.id === id);
327
+ const options = found?.answer?.type === "enum" && Array.isArray(found.answer.options) ? found.answer.options.filter((one) => typeof one === "string") : null;
328
+ /* The engine refuses a boolean for its own synthetic tasks (`unique:…`, `checks:held`): approve or reject. */
329
+ const synthetic = id.startsWith("unique:") || id === "checks:held";
330
+ return { id, prompt: typeof found?.prompt === "string" ? found.prompt : id, answer: options?.length ? { type: "enum", options } : synthetic ? { type: "enum", options: ["approve", "reject"] } : { type: "boolean" } };
331
+ });
332
+ }
333
+ const sortKeys = (value) => Array.isArray(value) ? value.map(sortKeys) : value !== null && typeof value === "object" ? Object.fromEntries(Object.keys(value).sort().map((key) => [key, sortKeys(value[key])])) : value;
334
+ /** The oracle refuses any serialisation but this one: sorted keys, no spaces. */
335
+ const canonicalJson = (value) => JSON.stringify(sortKeys(value));
336
+ exports.canonicalJson = canonicalJson;
337
+ const b64url = (bytes) => btoa(String.fromCharCode(...bytes)).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
338
+ const utf8 = (text) => new TextEncoder().encode(text);
339
+ /** The `ClaimReviewAttestation` (compact EdDSA JWS) the oracle and the engine both verify against the reviewer's did:ixo. */
340
+ async function signAttestation(reviewer, input) {
341
+ const signer = await signerOf(reviewer);
342
+ const header = { alg: "EdDSA", typ: "vc+jwt", cty: "vc", kid: signer.toDIDKey() };
343
+ const payload = {
344
+ "@context": ["https://www.w3.org/ns/credentials/v2", "https://w3id.org/ixo/credentials/review-attestation/v1"],
345
+ id: `urn:uuid:${crypto.randomUUID()}`,
346
+ type: ["VerifiableCredential", "ClaimReviewAttestation"],
347
+ issuer: `did:ixo:${reviewer.address}`,
348
+ validFrom: (input.now ?? new Date()).toISOString(),
349
+ credentialSubject: { id: `urn:ixo:claim:${input.claimId}`, claimId: input.claimId, oracleDid: input.oracleDid, answeredAgainst: input.answeredAgainst, answers: input.answers }
350
+ };
351
+ const signing = `${b64url(utf8((0, exports.canonicalJson)(header)))}.${b64url(utf8((0, exports.canonicalJson)(payload)))}`;
352
+ const signature = await signer.sign(utf8(signing));
353
+ return `${signing}.${b64url(signature.raw)}`;
354
+ }
355
+ /**
356
+ * "Send decision": the answers for every pending task, against the decision as it stands now (its `resultDigest`),
357
+ * with the reviewer's live grant. A re-send before the fold replaces the answers; the oracle folds and signs.
358
+ */
359
+ async function sendReview(input, options = {}) {
360
+ const audience = await (0, orgReviewBilling_ts_1.oracleAudience)(input.oracleUrl, options);
361
+ if (!audience)
362
+ return { ok: false, why: "The reviewer could not be reached. Nothing was sent." };
363
+ const url = base(input.oracleUrl);
364
+ const mint = oracleMint(input.reviewer);
365
+ const [view, rows] = await Promise.all([
366
+ (0, orgReviewBilling_ts_1.sourceCall)(url, audience, mint, { path: `/v1/reviews/${encodeURIComponent(input.claimId)}`, can: "reviews/read", sourceId: null }, options),
367
+ readReviewers(url, input.reviewer, input.collectionId, options)
368
+ ]);
369
+ const resultDigest = view?.status === 200 ? strOr(view.body?.resultDigest) : null;
370
+ if (!resultDigest)
371
+ return view && view.status !== 200 ? refused(view) : { ok: false, why: "This answer isn't waiting for a decision any more." };
372
+ const grant = (0, exports.liveGrant)(rows ?? [], input.reviewer.address);
373
+ if (!grant)
374
+ return { ok: false, why: "Checking isn't on for this ask, or it ran out. The poster can turn it on from the ask's page." };
375
+ const attestation = await signAttestation(input.reviewer, { claimId: input.claimId, oracleDid: audience, answeredAgainst: resultDigest, answers: input.answers });
376
+ const answer = await (0, orgReviewBilling_ts_1.sourceCall)(url, audience, mint, { method: "POST", path: `/v1/reviews/${encodeURIComponent(input.claimId)}`, can: "reviews/submit", sourceId: null, body: { answers: input.answers, attestation, reviewerGrant: grant.delegation } }, options);
377
+ return answer?.status === 202 ? { ok: true, value: { status: 202 } } : refused(answer);
378
+ }
379
+ //# sourceMappingURL=personReview.js.map