@bananapus/nana-sdk-core 3.5.2 → 5.0.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 (304) hide show
  1. package/bin/wallet-check.mjs +495 -0
  2. package/dist/cjs/actions/suckerPairs.d.ts +5 -3
  3. package/dist/cjs/actions/suckerPairs.d.ts.map +1 -1
  4. package/dist/cjs/actions/suckerPairs.js +6 -26
  5. package/dist/cjs/actions/suckerPairs.js.map +1 -1
  6. package/dist/cjs/pause.d.ts +2 -0
  7. package/dist/cjs/pause.d.ts.map +1 -1
  8. package/dist/cjs/pause.js +17 -0
  9. package/dist/cjs/pause.js.map +1 -1
  10. package/dist/cjs/review/confirm.d.ts +56 -0
  11. package/dist/cjs/review/confirm.d.ts.map +1 -0
  12. package/dist/cjs/review/confirm.js +99 -0
  13. package/dist/cjs/review/confirm.js.map +1 -0
  14. package/dist/cjs/review/contractWrite.d.ts +5 -3
  15. package/dist/cjs/review/contractWrite.d.ts.map +1 -1
  16. package/dist/cjs/review/contractWrite.js +10 -8
  17. package/dist/cjs/review/contractWrite.js.map +1 -1
  18. package/dist/cjs/review/decode.d.ts +19 -1
  19. package/dist/cjs/review/decode.d.ts.map +1 -1
  20. package/dist/cjs/review/decode.js +30 -11
  21. package/dist/cjs/review/decode.js.map +1 -1
  22. package/dist/cjs/review/decodeCall.d.ts +21 -0
  23. package/dist/cjs/review/decodeCall.d.ts.map +1 -0
  24. package/dist/cjs/review/decodeCall.js +183 -0
  25. package/dist/cjs/review/decodeCall.js.map +1 -0
  26. package/dist/cjs/review/heldWrite.d.ts +4 -0
  27. package/dist/cjs/review/heldWrite.d.ts.map +1 -1
  28. package/dist/cjs/review/heldWrite.js +35 -31
  29. package/dist/cjs/review/heldWrite.js.map +1 -1
  30. package/dist/cjs/review/index.d.ts +12 -1
  31. package/dist/cjs/review/index.d.ts.map +1 -1
  32. package/dist/cjs/review/index.js +29 -1
  33. package/dist/cjs/review/index.js.map +1 -1
  34. package/dist/cjs/review/intents.d.ts +10 -0
  35. package/dist/cjs/review/intents.d.ts.map +1 -1
  36. package/dist/cjs/review/intents.js +13 -0
  37. package/dist/cjs/review/intents.js.map +1 -1
  38. package/dist/cjs/review/lineError.d.ts +72 -0
  39. package/dist/cjs/review/lineError.d.ts.map +1 -0
  40. package/dist/cjs/review/lineError.js +76 -0
  41. package/dist/cjs/review/lineError.js.map +1 -0
  42. package/dist/cjs/review/messages.d.ts +15 -3
  43. package/dist/cjs/review/messages.d.ts.map +1 -1
  44. package/dist/cjs/review/messages.js +16 -4
  45. package/dist/cjs/review/messages.js.map +1 -1
  46. package/dist/cjs/review/model.d.ts +149 -0
  47. package/dist/cjs/review/model.d.ts.map +1 -0
  48. package/dist/cjs/review/model.js +750 -0
  49. package/dist/cjs/review/model.js.map +1 -0
  50. package/dist/cjs/review/plan.d.ts +61 -0
  51. package/dist/cjs/review/plan.d.ts.map +1 -0
  52. package/dist/cjs/review/plan.js +143 -0
  53. package/dist/cjs/review/plan.js.map +1 -0
  54. package/dist/cjs/review/react/index.d.ts +1 -0
  55. package/dist/cjs/review/react/index.d.ts.map +1 -1
  56. package/dist/cjs/review/react/index.js +1 -0
  57. package/dist/cjs/review/react/index.js.map +1 -1
  58. package/dist/cjs/review/react/useHeldSend.js +3 -4
  59. package/dist/cjs/review/react/useHeldSend.js.map +1 -1
  60. package/dist/cjs/review/react/useHeldWrite.d.ts.map +1 -1
  61. package/dist/cjs/review/react/useHeldWrite.js +2 -1
  62. package/dist/cjs/review/react/useHeldWrite.js.map +1 -1
  63. package/dist/cjs/review/react/useReviewedRun.d.ts +122 -0
  64. package/dist/cjs/review/react/useReviewedRun.d.ts.map +1 -0
  65. package/dist/cjs/review/react/useReviewedRun.js +443 -0
  66. package/dist/cjs/review/react/useReviewedRun.js.map +1 -0
  67. package/dist/cjs/review/receipt.d.ts +37 -1
  68. package/dist/cjs/review/receipt.d.ts.map +1 -1
  69. package/dist/cjs/review/receipt.js +76 -3
  70. package/dist/cjs/review/receipt.js.map +1 -1
  71. package/dist/cjs/review/relayr.d.ts +13 -4
  72. package/dist/cjs/review/relayr.d.ts.map +1 -1
  73. package/dist/cjs/review/relayr.js +52 -8
  74. package/dist/cjs/review/relayr.js.map +1 -1
  75. package/dist/cjs/review/relayrSend.d.ts +106 -0
  76. package/dist/cjs/review/relayrSend.d.ts.map +1 -0
  77. package/dist/cjs/review/relayrSend.js +795 -0
  78. package/dist/cjs/review/relayrSend.js.map +1 -0
  79. package/dist/cjs/review/reviewQueue.d.ts +10 -9
  80. package/dist/cjs/review/reviewQueue.d.ts.map +1 -1
  81. package/dist/cjs/review/reviewQueue.js +19 -29
  82. package/dist/cjs/review/reviewQueue.js.map +1 -1
  83. package/dist/cjs/review/reviewRequests.d.ts +86 -0
  84. package/dist/cjs/review/reviewRequests.d.ts.map +1 -0
  85. package/dist/cjs/review/reviewRequests.js +266 -0
  86. package/dist/cjs/review/reviewRequests.js.map +1 -0
  87. package/dist/cjs/review/safeRelayr.d.ts +3 -1
  88. package/dist/cjs/review/safeRelayr.d.ts.map +1 -1
  89. package/dist/cjs/review/safeRelayr.js +9 -9
  90. package/dist/cjs/review/safeRelayr.js.map +1 -1
  91. package/dist/cjs/review/safeSend.d.ts +69 -0
  92. package/dist/cjs/review/safeSend.d.ts.map +1 -0
  93. package/dist/cjs/review/safeSend.js +306 -0
  94. package/dist/cjs/review/safeSend.js.map +1 -0
  95. package/dist/cjs/review/send.d.ts +272 -0
  96. package/dist/cjs/review/send.d.ts.map +1 -0
  97. package/dist/cjs/review/send.js +1163 -0
  98. package/dist/cjs/review/send.js.map +1 -0
  99. package/dist/cjs/review/sequence.d.ts +77 -0
  100. package/dist/cjs/review/sequence.d.ts.map +1 -0
  101. package/dist/cjs/review/sequence.js +232 -0
  102. package/dist/cjs/review/sequence.js.map +1 -0
  103. package/dist/cjs/review/sign.d.ts +111 -0
  104. package/dist/cjs/review/sign.d.ts.map +1 -0
  105. package/dist/cjs/review/sign.js +378 -0
  106. package/dist/cjs/review/sign.js.map +1 -0
  107. package/dist/cjs/review/simulation.d.ts +41 -2
  108. package/dist/cjs/review/simulation.d.ts.map +1 -1
  109. package/dist/cjs/review/simulation.js +99 -29
  110. package/dist/cjs/review/simulation.js.map +1 -1
  111. package/dist/cjs/review/transaction-message.d.ts +13 -0
  112. package/dist/cjs/review/transaction-message.d.ts.map +1 -1
  113. package/dist/cjs/review/transaction-message.js +25 -0
  114. package/dist/cjs/review/transaction-message.js.map +1 -1
  115. package/dist/cjs/review/transactionReview.d.ts +27 -19
  116. package/dist/cjs/review/transactionReview.d.ts.map +1 -1
  117. package/dist/cjs/review/transactionReview.js +22 -63
  118. package/dist/cjs/review/transactionReview.js.map +1 -1
  119. package/dist/cjs/review/wallet.d.ts +98 -0
  120. package/dist/cjs/review/wallet.d.ts.map +1 -0
  121. package/dist/cjs/review/wallet.js +234 -0
  122. package/dist/cjs/review/wallet.js.map +1 -0
  123. package/dist/cjs/review/writeHold.d.ts +138 -13
  124. package/dist/cjs/review/writeHold.d.ts.map +1 -1
  125. package/dist/cjs/review/writeHold.js +98 -18
  126. package/dist/cjs/review/writeHold.js.map +1 -1
  127. package/dist/cjs/review/writeRecovery.d.ts +17 -1
  128. package/dist/cjs/review/writeRecovery.d.ts.map +1 -1
  129. package/dist/cjs/review/writeRecovery.js +146 -45
  130. package/dist/cjs/review/writeRecovery.js.map +1 -1
  131. package/dist/cjs/safeService.d.ts +27 -4
  132. package/dist/cjs/safeService.d.ts.map +1 -1
  133. package/dist/cjs/safeService.js +120 -3
  134. package/dist/cjs/safeService.js.map +1 -1
  135. package/dist/cjs/testing.d.ts +24 -0
  136. package/dist/cjs/testing.d.ts.map +1 -1
  137. package/dist/cjs/testing.js +26 -1
  138. package/dist/cjs/testing.js.map +1 -1
  139. package/dist/cjs/v6/defifa.d.ts.map +1 -1
  140. package/dist/cjs/v6/defifa.js +24 -23
  141. package/dist/cjs/v6/defifa.js.map +1 -1
  142. package/dist/cjs/v6/executionErrors.d.ts.map +1 -1
  143. package/dist/cjs/v6/executionErrors.js +3 -2
  144. package/dist/cjs/v6/executionErrors.js.map +1 -1
  145. package/dist/cjs/v6/pay.d.ts +25 -8
  146. package/dist/cjs/v6/pay.d.ts.map +1 -1
  147. package/dist/cjs/v6/pay.js +117 -23
  148. package/dist/cjs/v6/pay.js.map +1 -1
  149. package/dist/cjs/v6/suckers.d.ts +30 -0
  150. package/dist/cjs/v6/suckers.d.ts.map +1 -1
  151. package/dist/cjs/v6/suckers.js +69 -5
  152. package/dist/cjs/v6/suckers.js.map +1 -1
  153. package/dist/esm/actions/suckerPairs.d.ts +5 -3
  154. package/dist/esm/actions/suckerPairs.d.ts.map +1 -1
  155. package/dist/esm/actions/suckerPairs.js +7 -27
  156. package/dist/esm/actions/suckerPairs.js.map +1 -1
  157. package/dist/esm/pause.d.ts +2 -0
  158. package/dist/esm/pause.d.ts.map +1 -1
  159. package/dist/esm/pause.js +16 -0
  160. package/dist/esm/pause.js.map +1 -1
  161. package/dist/esm/review/confirm.d.ts +56 -0
  162. package/dist/esm/review/confirm.d.ts.map +1 -0
  163. package/dist/esm/review/confirm.js +93 -0
  164. package/dist/esm/review/confirm.js.map +1 -0
  165. package/dist/esm/review/contractWrite.d.ts +5 -3
  166. package/dist/esm/review/contractWrite.d.ts.map +1 -1
  167. package/dist/esm/review/contractWrite.js +10 -8
  168. package/dist/esm/review/contractWrite.js.map +1 -1
  169. package/dist/esm/review/decode.d.ts +19 -1
  170. package/dist/esm/review/decode.d.ts.map +1 -1
  171. package/dist/esm/review/decode.js +29 -14
  172. package/dist/esm/review/decode.js.map +1 -1
  173. package/dist/esm/review/decodeCall.d.ts +21 -0
  174. package/dist/esm/review/decodeCall.d.ts.map +1 -0
  175. package/dist/esm/review/decodeCall.js +180 -0
  176. package/dist/esm/review/decodeCall.js.map +1 -0
  177. package/dist/esm/review/heldWrite.d.ts +4 -0
  178. package/dist/esm/review/heldWrite.d.ts.map +1 -1
  179. package/dist/esm/review/heldWrite.js +34 -30
  180. package/dist/esm/review/heldWrite.js.map +1 -1
  181. package/dist/esm/review/index.d.ts +12 -1
  182. package/dist/esm/review/index.d.ts.map +1 -1
  183. package/dist/esm/review/index.js +12 -1
  184. package/dist/esm/review/index.js.map +1 -1
  185. package/dist/esm/review/intents.d.ts +10 -0
  186. package/dist/esm/review/intents.d.ts.map +1 -1
  187. package/dist/esm/review/intents.js +12 -0
  188. package/dist/esm/review/intents.js.map +1 -1
  189. package/dist/esm/review/lineError.d.ts +72 -0
  190. package/dist/esm/review/lineError.d.ts.map +1 -0
  191. package/dist/esm/review/lineError.js +68 -0
  192. package/dist/esm/review/lineError.js.map +1 -0
  193. package/dist/esm/review/messages.d.ts +15 -3
  194. package/dist/esm/review/messages.d.ts.map +1 -1
  195. package/dist/esm/review/messages.js +15 -3
  196. package/dist/esm/review/messages.js.map +1 -1
  197. package/dist/esm/review/model.d.ts +149 -0
  198. package/dist/esm/review/model.d.ts.map +1 -0
  199. package/dist/esm/review/model.js +746 -0
  200. package/dist/esm/review/model.js.map +1 -0
  201. package/dist/esm/review/plan.d.ts +61 -0
  202. package/dist/esm/review/plan.d.ts.map +1 -0
  203. package/dist/esm/review/plan.js +136 -0
  204. package/dist/esm/review/plan.js.map +1 -0
  205. package/dist/esm/review/react/index.d.ts +1 -0
  206. package/dist/esm/review/react/index.d.ts.map +1 -1
  207. package/dist/esm/review/react/index.js +1 -0
  208. package/dist/esm/review/react/index.js.map +1 -1
  209. package/dist/esm/review/react/useHeldSend.js +3 -4
  210. package/dist/esm/review/react/useHeldSend.js.map +1 -1
  211. package/dist/esm/review/react/useHeldWrite.d.ts.map +1 -1
  212. package/dist/esm/review/react/useHeldWrite.js +2 -1
  213. package/dist/esm/review/react/useHeldWrite.js.map +1 -1
  214. package/dist/esm/review/react/useReviewedRun.d.ts +122 -0
  215. package/dist/esm/review/react/useReviewedRun.d.ts.map +1 -0
  216. package/dist/esm/review/react/useReviewedRun.js +439 -0
  217. package/dist/esm/review/react/useReviewedRun.js.map +1 -0
  218. package/dist/esm/review/receipt.d.ts +37 -1
  219. package/dist/esm/review/receipt.d.ts.map +1 -1
  220. package/dist/esm/review/receipt.js +72 -2
  221. package/dist/esm/review/receipt.js.map +1 -1
  222. package/dist/esm/review/relayr.d.ts +13 -4
  223. package/dist/esm/review/relayr.d.ts.map +1 -1
  224. package/dist/esm/review/relayr.js +51 -8
  225. package/dist/esm/review/relayr.js.map +1 -1
  226. package/dist/esm/review/relayrSend.d.ts +106 -0
  227. package/dist/esm/review/relayrSend.d.ts.map +1 -0
  228. package/dist/esm/review/relayrSend.js +787 -0
  229. package/dist/esm/review/relayrSend.js.map +1 -0
  230. package/dist/esm/review/reviewQueue.d.ts +10 -9
  231. package/dist/esm/review/reviewQueue.d.ts.map +1 -1
  232. package/dist/esm/review/reviewQueue.js +17 -26
  233. package/dist/esm/review/reviewQueue.js.map +1 -1
  234. package/dist/esm/review/reviewRequests.d.ts +86 -0
  235. package/dist/esm/review/reviewRequests.d.ts.map +1 -0
  236. package/dist/esm/review/reviewRequests.js +263 -0
  237. package/dist/esm/review/reviewRequests.js.map +1 -0
  238. package/dist/esm/review/safeRelayr.d.ts +3 -1
  239. package/dist/esm/review/safeRelayr.d.ts.map +1 -1
  240. package/dist/esm/review/safeRelayr.js +9 -9
  241. package/dist/esm/review/safeRelayr.js.map +1 -1
  242. package/dist/esm/review/safeSend.d.ts +69 -0
  243. package/dist/esm/review/safeSend.d.ts.map +1 -0
  244. package/dist/esm/review/safeSend.js +301 -0
  245. package/dist/esm/review/safeSend.js.map +1 -0
  246. package/dist/esm/review/send.d.ts +272 -0
  247. package/dist/esm/review/send.d.ts.map +1 -0
  248. package/dist/esm/review/send.js +1156 -0
  249. package/dist/esm/review/send.js.map +1 -0
  250. package/dist/esm/review/sequence.d.ts +77 -0
  251. package/dist/esm/review/sequence.d.ts.map +1 -0
  252. package/dist/esm/review/sequence.js +223 -0
  253. package/dist/esm/review/sequence.js.map +1 -0
  254. package/dist/esm/review/sign.d.ts +111 -0
  255. package/dist/esm/review/sign.d.ts.map +1 -0
  256. package/dist/esm/review/sign.js +372 -0
  257. package/dist/esm/review/sign.js.map +1 -0
  258. package/dist/esm/review/simulation.d.ts +41 -2
  259. package/dist/esm/review/simulation.d.ts.map +1 -1
  260. package/dist/esm/review/simulation.js +95 -29
  261. package/dist/esm/review/simulation.js.map +1 -1
  262. package/dist/esm/review/transaction-message.d.ts +13 -0
  263. package/dist/esm/review/transaction-message.d.ts.map +1 -1
  264. package/dist/esm/review/transaction-message.js +23 -0
  265. package/dist/esm/review/transaction-message.js.map +1 -1
  266. package/dist/esm/review/transactionReview.d.ts +27 -19
  267. package/dist/esm/review/transactionReview.d.ts.map +1 -1
  268. package/dist/esm/review/transactionReview.js +19 -56
  269. package/dist/esm/review/transactionReview.js.map +1 -1
  270. package/dist/esm/review/wallet.d.ts +98 -0
  271. package/dist/esm/review/wallet.d.ts.map +1 -0
  272. package/dist/esm/review/wallet.js +227 -0
  273. package/dist/esm/review/wallet.js.map +1 -0
  274. package/dist/esm/review/writeHold.d.ts +138 -13
  275. package/dist/esm/review/writeHold.d.ts.map +1 -1
  276. package/dist/esm/review/writeHold.js +96 -19
  277. package/dist/esm/review/writeHold.js.map +1 -1
  278. package/dist/esm/review/writeRecovery.d.ts +17 -1
  279. package/dist/esm/review/writeRecovery.d.ts.map +1 -1
  280. package/dist/esm/review/writeRecovery.js +149 -48
  281. package/dist/esm/review/writeRecovery.js.map +1 -1
  282. package/dist/esm/safeService.d.ts +27 -4
  283. package/dist/esm/safeService.d.ts.map +1 -1
  284. package/dist/esm/safeService.js +119 -4
  285. package/dist/esm/safeService.js.map +1 -1
  286. package/dist/esm/testing.d.ts +24 -0
  287. package/dist/esm/testing.d.ts.map +1 -1
  288. package/dist/esm/testing.js +23 -1
  289. package/dist/esm/testing.js.map +1 -1
  290. package/dist/esm/v6/defifa.d.ts.map +1 -1
  291. package/dist/esm/v6/defifa.js +24 -23
  292. package/dist/esm/v6/defifa.js.map +1 -1
  293. package/dist/esm/v6/executionErrors.d.ts.map +1 -1
  294. package/dist/esm/v6/executionErrors.js +3 -2
  295. package/dist/esm/v6/executionErrors.js.map +1 -1
  296. package/dist/esm/v6/pay.d.ts +25 -8
  297. package/dist/esm/v6/pay.d.ts.map +1 -1
  298. package/dist/esm/v6/pay.js +115 -22
  299. package/dist/esm/v6/pay.js.map +1 -1
  300. package/dist/esm/v6/suckers.d.ts +30 -0
  301. package/dist/esm/v6/suckers.d.ts.map +1 -1
  302. package/dist/esm/v6/suckers.js +67 -5
  303. package/dist/esm/v6/suckers.js.map +1 -1
  304. package/package.json +11 -2
@@ -0,0 +1,443 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.REVIEWED_RUN_BUSY_LINE = exports.REVIEWED_RUN_SCOPE_LINE = void 0;
4
+ exports.useReviewedRun = useReviewedRun;
5
+ const lineError_js_1 = require("../lineError.js");
6
+ const receipt_js_1 = require("../receipt.js");
7
+ const index_js_1 = require("../index.js");
8
+ const react_1 = require("react");
9
+ const heldView_js_1 = require("./heldView.js");
10
+ const IDLE = {
11
+ phase: "idle",
12
+ step: 0,
13
+ total: 0,
14
+ error: null,
15
+ failure: null,
16
+ hash: null,
17
+ safeTxHash: null,
18
+ receipt: null,
19
+ settled: null,
20
+ };
21
+ /** The bytes a call sends, for comparing two actions. */
22
+ const sent = ({ chainId, to, data, value, gas }) => [
23
+ chainId,
24
+ to.toLowerCase(),
25
+ data.toLowerCase(),
26
+ value ?? 0n,
27
+ gas ?? null,
28
+ ];
29
+ exports.REVIEWED_RUN_SCOPE_LINE = "This action has more than one step and no scope to resume it by. Nothing was sent.";
30
+ exports.REVIEWED_RUN_BUSY_LINE = "This action is still running. Wait for it to finish, then try again.";
31
+ /**
32
+ * The one reviewed-send hook every site shares: its state, progress and
33
+ * error lines. A site's own hook only builds `deps` from its wallet library;
34
+ * null `deps` (no wallet yet) refuses every run.
35
+ */
36
+ function useReviewedRun(deps) {
37
+ const [state, setState] = (0, react_1.useState)(IDLE);
38
+ /** The hold followed after a run, and its chain's client: its view is `held`. */
39
+ const [watched, setWatched] = (0, react_1.useState)(null);
40
+ /** The latest run: an earlier one's late answers change nothing. */
41
+ const latest = (0, react_1.useRef)(0);
42
+ /** How many runs are open: a discard waits for none. */
43
+ const open = (0, react_1.useRef)(0);
44
+ const mounted = (0, react_1.useRef)(false);
45
+ /** This render's `run`: a run's end that continues the action runs it. */
46
+ const runLatest = (0, react_1.useRef)(async () => null);
47
+ /**
48
+ * Ends the latest run's in-place follow, and resolves an `ended()` it left
49
+ * pending with null (released): a reset or a later run replaced it. Its
50
+ * hold keeps the sent step.
51
+ */
52
+ const leave = (0, react_1.useRef)(() => { });
53
+ const replaced = () => {
54
+ latest.current += 1;
55
+ const left = leave.current;
56
+ leave.current = () => { };
57
+ left();
58
+ };
59
+ (0, react_1.useEffect)(() => {
60
+ mounted.current = true;
61
+ return () => {
62
+ mounted.current = false;
63
+ // Unmounted: the run ends as on a reset.
64
+ replaced();
65
+ };
66
+ }, []);
67
+ /** How a followed step ended, as the run that followed it shows it. */
68
+ const showSettled = (run, step, total, settled, receipt) => {
69
+ if (latest.current !== run)
70
+ return;
71
+ const finished = step === total - 1;
72
+ setState((now) => settled.result !== "success"
73
+ ? { ...IDLE, error: (0, index_js_1.settledLine)(settled), receipt }
74
+ : finished
75
+ ? {
76
+ ...now,
77
+ phase: "done",
78
+ hash: settled.hash,
79
+ receipt,
80
+ error: null,
81
+ failure: null,
82
+ settled: { step, finished },
83
+ }
84
+ : {
85
+ ...IDLE,
86
+ step,
87
+ total,
88
+ hash: settled.hash,
89
+ receipt,
90
+ settled: { step, finished },
91
+ });
92
+ };
93
+ /** The engine's load, shared by every preload and run until one fails. */
94
+ const loading = (0, react_1.useRef)(null);
95
+ const view = (0, react_1.useMemo)(() => watched
96
+ ? (0, index_js_1.createHeldWriteView)(watched.handle, {
97
+ client: watched.client,
98
+ // The followed step's end ends the run once checked: a proposal
99
+ // never stays proposed, and never shows done unverified.
100
+ onSettled: (settled, receipt) => watched.finish(settled, receipt),
101
+ onReleased: () => {
102
+ watched.released?.();
103
+ if (latest.current === watched.run)
104
+ setState(IDLE);
105
+ },
106
+ })
107
+ : undefined, [watched]);
108
+ (0, react_1.useEffect)(() => view?.start(), [view]);
109
+ const engine = deps?.engine;
110
+ const load = (from) => {
111
+ const pending = (loading.current ??= from());
112
+ pending.catch(() => {
113
+ // A failed load is tried again by the next preload or run.
114
+ if (loading.current === pending)
115
+ loading.current = null;
116
+ });
117
+ return pending;
118
+ };
119
+ const preload = () => {
120
+ if (engine)
121
+ load(engine).catch(() => {
122
+ /* A run loads it again, and reports its failure. */
123
+ });
124
+ };
125
+ (0, react_1.useEffect)(preload, [engine]);
126
+ const shown = (0, react_1.useSyncExternalStore)(view?.subscribe ?? heldView_js_1.none, view?.get ?? heldView_js_1.idle, view?.get ?? heldView_js_1.idle);
127
+ const held = shown.phase === "clear" ||
128
+ shown.phase === "released" ||
129
+ shown.phase === "settled"
130
+ ? null
131
+ : shown;
132
+ const api = {
133
+ ...state,
134
+ held,
135
+ ...(0, heldView_js_1.actionsOf)(shown, held ? view : undefined),
136
+ reset: () => {
137
+ replaced();
138
+ setState(IDLE);
139
+ setWatched(null);
140
+ },
141
+ preload,
142
+ discard: async (scope, account = deps?.account) => {
143
+ if (open.current)
144
+ throw new lineError_js_1.ReviewLineError(exports.REVIEWED_RUN_BUSY_LINE);
145
+ if (!deps || !account)
146
+ throw new lineError_js_1.ReviewLineError("Connect a wallet first.");
147
+ const { storage } = deps;
148
+ const saved = (0, index_js_1.findReviewedSequence)(scope, account, { storage });
149
+ if (saved)
150
+ await (0, index_js_1.discardReviewedSequence)(saved, { storage });
151
+ if (open.current)
152
+ return;
153
+ replaced();
154
+ setState(IDLE);
155
+ setWatched(null);
156
+ },
157
+ run: async (action) => {
158
+ replaced();
159
+ const id = latest.current;
160
+ // A step still confirming is followed in place, in the same review,
161
+ // until a reset or a later run ends it.
162
+ const following = new AbortController();
163
+ leave.current = () => following.abort();
164
+ open.current += 1;
165
+ const update = (next) => {
166
+ if (latest.current === id)
167
+ setState((now) => ({ ...now, ...next }));
168
+ };
169
+ setState({ ...IDLE, phase: "review", total: action.calls.length });
170
+ let loaded;
171
+ setWatched(null);
172
+ /**
173
+ * Completes a sent step once its hold settled it, as the run would
174
+ * have (`completeReviewedStep`: the journal, `onConfirmed` once with
175
+ * the receipt its hold verified, the acknowledgement), then shows how
176
+ * it ended, once. Until it can (the receipt unread, or the hold not yet
177
+ * settled for this send), it is tried again, never shown.
178
+ */
179
+ const completing = (target, total, end) => {
180
+ let completed = Promise.resolve(null);
181
+ let shown = false;
182
+ const action$ = {
183
+ account: deps.account,
184
+ scope: action.scope,
185
+ onConfirmed: action.onConfirmed,
186
+ };
187
+ const finish = (seen, receipt = null) => {
188
+ let unread = false;
189
+ completed = completed.then((prior) => prior ??
190
+ (loaded ? Promise.resolve(loaded) : load(deps.engine))
191
+ .then((engine) => engine.completeReviewedStep(target, action$, deps, receipt))
192
+ .catch(() => {
193
+ unread = true;
194
+ return null;
195
+ }));
196
+ void completed.then((ended) => {
197
+ if (shown || latest.current !== id)
198
+ return;
199
+ // Nothing advanced (its receipt unread, or its hold not settled
200
+ // for this send yet): it is tried again.
201
+ if (unread || (!ended && seen)) {
202
+ if (mounted.current)
203
+ setTimeout(() => finish(seen, receipt), index_js_1.RECEIPT_RETRY_MS);
204
+ return;
205
+ }
206
+ if (!ended)
207
+ return;
208
+ shown = true;
209
+ // Shown with the receipt completion checked, a failure's too.
210
+ showSettled(id, target.step, total, ended.settled, ended.receipt);
211
+ setWatched(null);
212
+ end?.(ended);
213
+ });
214
+ };
215
+ return finish;
216
+ };
217
+ /** The step a run that did not finish leaves held, if any. */
218
+ const follow = async (finish, released) => {
219
+ if (latest.current !== id || !deps?.account)
220
+ return;
221
+ try {
222
+ const { account, adapter, hold, storage } = deps;
223
+ // Its Safe mode is read only once the wallet says it is known.
224
+ await (0, index_js_1.walletReady)(adapter);
225
+ if (latest.current !== id)
226
+ return;
227
+ const safe = adapter.isSafe();
228
+ const saved = !action.scope
229
+ ? null
230
+ : (0, index_js_1.findReviewedSequence)(action.scope, account, { storage });
231
+ const total = saved?.calls.length ?? action.calls.length;
232
+ // A Safe app's batch is held as its one MultiSend proposal, its last step.
233
+ const steps = saved?.sending
234
+ ? [
235
+ {
236
+ call: saved.calls[saved.sending.step],
237
+ step: saved.sending.step,
238
+ },
239
+ ]
240
+ : !saved && action.batch && safe && action.calls.length > 1
241
+ ? [
242
+ {
243
+ call: (0, index_js_1.safeBatchCall)(account, action.calls),
244
+ step: total - 1,
245
+ },
246
+ ]
247
+ : action.calls.map((call, step) => ({ call, step }));
248
+ // A held step, or the last step's success nothing showed.
249
+ const found = steps
250
+ .map(({ call, step }) => ({
251
+ call,
252
+ step,
253
+ handle: (0, index_js_1.openStepHold)(hold, account, safe, call),
254
+ }))
255
+ .find(({ handle, step }) => handle.peek().status !== "clear" ||
256
+ (step === total - 1 && handle.unacknowledgedSuccess()));
257
+ // Its settlement completes it as a send's would: a proposal too.
258
+ const reservation = found?.handle.peek().reservation ??
259
+ found?.handle.unacknowledgedSuccess()?.reservation;
260
+ setWatched(found
261
+ ? {
262
+ handle: found.handle,
263
+ client: deps.clientFor(found.call.chainId),
264
+ run: id,
265
+ step: found.step,
266
+ total,
267
+ finish: finish ??
268
+ completing({
269
+ step: found.step,
270
+ held: { call: found.call, reservation },
271
+ }, total),
272
+ ...(released ? { released } : {}),
273
+ }
274
+ : null);
275
+ }
276
+ catch {
277
+ /* A call the hold can't open holds nothing to show. */
278
+ }
279
+ };
280
+ try {
281
+ if (!deps?.account)
282
+ throw new lineError_js_1.ReviewLineError("Connect a wallet first.");
283
+ if (action.account &&
284
+ action.account.toLowerCase() !== deps.account.toLowerCase())
285
+ throw new lineError_js_1.ReviewLineError(index_js_1.REVIEWED_ACCOUNT_CHANGED_LINE);
286
+ if (action.calls.length > 1 && action.scope === undefined)
287
+ throw new lineError_js_1.ReviewLineError(exports.REVIEWED_RUN_SCOPE_LINE);
288
+ const { signal } = action;
289
+ if (signal?.aborted)
290
+ throw new index_js_1.TransactionReviewCancelledError();
291
+ let withdraw = () => { };
292
+ loaded = await Promise.race([
293
+ load(deps.engine).catch((cause) => {
294
+ throw Object.assign(new lineError_js_1.ReviewLineError(index_js_1.REVIEWED_ENGINE_LOAD_LINE), { cause });
295
+ }),
296
+ // A review withdrawn while the engine loads ends here, cancelled.
297
+ new Promise((_, reject) => {
298
+ withdraw = () => reject(new index_js_1.TransactionReviewCancelledError());
299
+ signal?.addEventListener("abort", withdraw, { once: true });
300
+ }),
301
+ ]).finally(() => signal?.removeEventListener("abort", withdraw));
302
+ const { resumeReviewed, sendReviewed } = loaded;
303
+ const { account, guard } = deps;
304
+ const tracked = {
305
+ ...deps,
306
+ onProgress: (progress) => {
307
+ (0, receipt_js_1.tell)(deps.onProgress, progress);
308
+ update({
309
+ phase: progress.phase,
310
+ step: progress.step,
311
+ total: progress.total,
312
+ ...(progress.hash
313
+ ? progress.phase === "proposed"
314
+ ? { safeTxHash: progress.hash }
315
+ : { hash: progress.hash }
316
+ : {}),
317
+ });
318
+ },
319
+ };
320
+ const unfinished = action.scope === undefined
321
+ ? null
322
+ : (0, index_js_1.findReviewedSequence)(action.scope, account, {
323
+ storage: deps.storage,
324
+ });
325
+ // Resumed only when the user asked for the same calls again;
326
+ // otherwise sendReviewed refuses while it is unfinished.
327
+ const saved = unfinished &&
328
+ (0, heldView_js_1.keyOf)(unfinished.calls.map(sent)) === (0, heldView_js_1.keyOf)(action.calls.map(sent))
329
+ ? unfinished
330
+ : null;
331
+ const given = action.follow?.signal;
332
+ const inPlace = {
333
+ ...action.follow,
334
+ signal: given
335
+ ? AbortSignal.any([following.signal, given])
336
+ : following.signal,
337
+ onConfirming: (step) => {
338
+ update({ phase: "receipt", step });
339
+ (0, receipt_js_1.tell)(action.follow?.onConfirming, step);
340
+ },
341
+ };
342
+ const result = saved
343
+ ? await resumeReviewed(saved, { ...action, guard, follow: inPlace }, tracked)
344
+ : await sendReviewed({ ...action, account, guard, follow: inPlace }, tracked);
345
+ if (result.status === "proposed")
346
+ void follow();
347
+ else if (mounted.current && latest.current === id) {
348
+ // Shown: its success blocks no later run.
349
+ const calls = saved?.calls ?? action.calls;
350
+ const handle = (0, index_js_1.openStepHold)(deps.hold, account, false, calls[calls.length - 1]);
351
+ const success = handle.unacknowledgedSuccess();
352
+ if (success &&
353
+ result.hashes.some((h) => h.toLowerCase() === success.hash))
354
+ await handle.acknowledge(success).catch(() => undefined);
355
+ }
356
+ return result;
357
+ }
358
+ catch (error) {
359
+ if (error instanceof index_js_1.ReviewedReceiptUnverifiedError) {
360
+ // Still confirming: followed until its hold settles it.
361
+ update({
362
+ phase: "receipt",
363
+ step: error.step,
364
+ hash: error.hash,
365
+ error: null,
366
+ failure: null,
367
+ });
368
+ let end;
369
+ const outcome = new Promise((resolve) => (end = resolve));
370
+ // Replaced, or the caller's follow ended (a cancel, unlike its
371
+ // timeout), already or later: its end is null, the step still held,
372
+ // and nothing continues the action.
373
+ const cancelled = action.follow?.signal;
374
+ if (latest.current !== id || cancelled?.aborted)
375
+ end(null);
376
+ else {
377
+ leave.current = () => end(null);
378
+ cancelled?.addEventListener("abort", () => end(null), {
379
+ once: true,
380
+ });
381
+ }
382
+ const finish = completing(error, action.calls.length, end);
383
+ // Followed for a later settlement; one already there is read once it attaches.
384
+ void follow(finish, () => end(null)).then(() => finish());
385
+ const before = error.held?.hashes ?? [];
386
+ return {
387
+ status: "receipt",
388
+ step: error.step,
389
+ hash: error.hash,
390
+ ...(error.held?.signatures
391
+ ? { signatures: error.held.signatures }
392
+ : {}),
393
+ ended: () => outcome.then(async (ran) => {
394
+ if (!ran)
395
+ return null;
396
+ const { settled, receipt } = ran;
397
+ if (settled.result !== "success") {
398
+ const line = (0, index_js_1.settledLine)(settled);
399
+ return {
400
+ status: "failed",
401
+ error: line,
402
+ failure: new lineError_js_1.ReviewLineError(line),
403
+ };
404
+ }
405
+ const signatures = error.held?.signatures;
406
+ if (error.step < action.calls.length - 1) {
407
+ const started = await runLatest.current(action);
408
+ const next = started?.status === "receipt"
409
+ ? await started.ended()
410
+ : started;
411
+ return next?.status === "done" &&
412
+ signatures &&
413
+ !next.signatures
414
+ ? { ...next, signatures }
415
+ : next;
416
+ }
417
+ return {
418
+ status: "done",
419
+ hashes: [...before, settled.hash],
420
+ receipts: receipt ? [receipt] : [],
421
+ ...(signatures ? { signatures } : {}),
422
+ };
423
+ }),
424
+ };
425
+ }
426
+ const cancelled = error instanceof index_js_1.TransactionReviewCancelledError ||
427
+ (0, index_js_1.isDefiniteWalletRejection)(error);
428
+ const line = cancelled ? null : (0, index_js_1.errorLine)(error);
429
+ update({ ...IDLE, error: line, failure: cancelled ? null : error });
430
+ void follow();
431
+ return line === null
432
+ ? null
433
+ : { status: "failed", error: line, failure: error };
434
+ }
435
+ finally {
436
+ open.current -= 1;
437
+ }
438
+ },
439
+ };
440
+ runLatest.current = api.run;
441
+ return api;
442
+ }
443
+ //# sourceMappingURL=useReviewedRun.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useReviewedRun.js","sourceRoot":"","sources":["../../../../src/review/react/useReviewedRun.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,13 @@
1
+ import { ReviewLineError } from "./lineError.js";
1
2
  import type { Hex, PublicClient, TransactionReceipt } from "viem";
3
+ /** The line when a broadcast transaction's receipt can't be tracked. */
4
+ export declare const TRANSACTION_TRACKING_UNAVAILABLE_LINE = "This transaction was submitted, but its confirmation can't be tracked right now. Check it in your wallet and do not submit it again yet.";
2
5
  /**
3
6
  * A transaction was broadcast, but neither the receipt watcher nor direct
4
7
  * receipt reads could confirm it. Its outcome is unknown, so the app must keep
5
8
  * treating it as submitted and must not offer to send it again.
6
9
  */
7
- export declare class TransactionReceiptUnavailableError extends Error {
10
+ export declare class TransactionReceiptUnavailableError extends ReviewLineError {
8
11
  readonly hash: Hex;
9
12
  readonly chainId?: number | undefined;
10
13
  readonly name = "TransactionReceiptUnavailableError";
@@ -29,4 +32,37 @@ export declare function waitForTrackedReceipt(client: Pick<PublicClient, "chain"
29
32
  attempts?: number;
30
33
  intervalMs?: number;
31
34
  }): Promise<TransactionReceipt>;
35
+ /** How a held write settled, as {@link heldReceipt} checks a receipt against it. */
36
+ type Settled = {
37
+ result: "success" | "failed";
38
+ hash: Hex;
39
+ blockHash?: Hex;
40
+ safe?: true;
41
+ };
42
+ type HeldClient = Pick<PublicClient, "getTransactionReceipt" | "getBlock">;
43
+ /**
44
+ * The receipt a hold verified for `settled`, the only one a sent step's
45
+ * outcome is told by: `seen` (a watcher's, say) when it is that transaction,
46
+ * else read. It must be in the block the hold verified; with none kept (a
47
+ * Safe log proved it, or it was saved by 4.x), in a block still canonical
48
+ * and final. A success must read a success, and a failure a revert unless
49
+ * it is a Safe's (`safe`: its own failure). Anything else throws: the step
50
+ * stays unverified until the chain agrees with its hold.
51
+ */
52
+ export declare function heldReceipt(settled: Settled, client: HeldClient, seen?: TransactionReceipt | null): Promise<TransactionReceipt>;
53
+ /**
54
+ * Where `settled` confirmed: the block its hold verified, while still
55
+ * canonical, or with none kept, its {@link heldReceipt}'s. Throws otherwise.
56
+ */
57
+ export declare function heldBlock(settled: Settled, client: HeldClient): Promise<{
58
+ blockNumber: bigint;
59
+ blockHash: Hex;
60
+ }>;
61
+ /**
62
+ * Calls a site's callback (`onProgress`, `onConfirming`, `onSubmitted`,
63
+ * `onConfirmed`, `onSettled`). One that throws or rejects is logged, and
64
+ * never changes what was sent or how it settled.
65
+ */
66
+ export declare function tell<Args extends unknown[]>(callback: ((...args: Args) => unknown) | undefined, ...args: Args): void | Promise<void>;
67
+ export {};
32
68
  //# sourceMappingURL=receipt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../../src/review/receipt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAElE;;;;GAIG;AACH,qBAAa,kCAAmC,SAAQ,KAAK;IAUzD,QAAQ,CAAC,IAAI,EAAE,GAAG;IAClB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM;IAV3B,QAAQ,CAAC,IAAI,wCAAwC;IACrD;;;;OAIG;IACH,SAAiB,KAAK,EAAE,OAAO,CAAC;gBAGrB,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE,MAAM,YAAA,EACzB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO;CAYpC;AAED,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,kCAAkC,CAE7C;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,IAAI,CACV,YAAY,EACZ,OAAO,GAAG,uBAAuB,GAAG,2BAA2B,CAChE,EACD,IAAI,EAAE,GAAG,EACT,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,kBAAkB,CAAC,CAmB7B"}
1
+ {"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../../src/review/receipt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAElE,wEAAwE;AACxE,eAAO,MAAM,qCAAqC,6IAC0F,CAAC;AAE7I;;;;GAIG;AACH,qBAAa,kCAAmC,SAAQ,eAAe;IAUnE,QAAQ,CAAC,IAAI,EAAE,GAAG;IAClB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM;IAV3B,QAAQ,CAAC,IAAI,wCAAwC;IACrD;;;;OAIG;IACH,SAAiB,KAAK,EAAE,OAAO,CAAC;gBAGrB,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE,MAAM,YAAA,EACzB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO;CAWpC;AAED,wBAAgB,oCAAoC,CAClD,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,kCAAkC,CAE7C;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,IAAI,CACV,YAAY,EACZ,OAAO,GAAG,uBAAuB,GAAG,2BAA2B,CAChE,EACD,IAAI,EAAE,GAAG,EACT,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACvD,OAAO,CAAC,kBAAkB,CAAC,CAmB7B;AAED,oFAAoF;AACpF,KAAK,OAAO,GAAG;IACb,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,IAAI,EAAE,GAAG,CAAC;IACV,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,CAAC;CACb,CAAC;AACF,KAAK,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,uBAAuB,GAAG,UAAU,CAAC,CAAC;AAK3E;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,UAAU,EAClB,IAAI,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CA8B7B;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,GAAG,CAAA;CAAE,CAAC,CAUlD;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,IAAI,SAAS,OAAO,EAAE,EACzC,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,GAAG,SAAS,EAClD,GAAG,IAAI,EAAE,IAAI,GACZ,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtB"}
@@ -1,16 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TransactionReceiptUnavailableError = void 0;
3
+ exports.TransactionReceiptUnavailableError = exports.TRANSACTION_TRACKING_UNAVAILABLE_LINE = void 0;
4
4
  exports.isTransactionReceiptUnavailableError = isTransactionReceiptUnavailableError;
5
5
  exports.waitForTrackedReceipt = waitForTrackedReceipt;
6
+ exports.heldReceipt = heldReceipt;
7
+ exports.heldBlock = heldBlock;
8
+ exports.tell = tell;
9
+ const lineError_js_1 = require("./lineError.js");
10
+ /** The line when a broadcast transaction's receipt can't be tracked. */
11
+ exports.TRANSACTION_TRACKING_UNAVAILABLE_LINE = "This transaction was submitted, but its confirmation can't be tracked right now. Check it in your wallet and do not submit it again yet.";
6
12
  /**
7
13
  * A transaction was broadcast, but neither the receipt watcher nor direct
8
14
  * receipt reads could confirm it. Its outcome is unknown, so the app must keep
9
15
  * treating it as submitted and must not offer to send it again.
10
16
  */
11
- class TransactionReceiptUnavailableError extends Error {
17
+ class TransactionReceiptUnavailableError extends lineError_js_1.ReviewLineError {
12
18
  constructor(hash, chainId, options = {}) {
13
- super(`Transaction ${hash} was submitted${chainId ? ` on chain ${chainId}` : ""}, but confirmation tracking is temporarily unavailable. Check this transaction and do not submit it again yet.`);
19
+ // The hash and chain stay fields: a caller's hash is not validated here.
20
+ super(exports.TRANSACTION_TRACKING_UNAVAILABLE_LINE);
14
21
  this.hash = hash;
15
22
  this.chainId = chainId;
16
23
  this.name = "TransactionReceiptUnavailableError";
@@ -54,4 +61,70 @@ async function waitForTrackedReceipt(client, hash, options = {}) {
54
61
  });
55
62
  }
56
63
  }
64
+ const unverified = (hash) => new Error(`Transaction ${hash}'s receipt is not the one its hold verified.`);
65
+ /**
66
+ * The receipt a hold verified for `settled`, the only one a sent step's
67
+ * outcome is told by: `seen` (a watcher's, say) when it is that transaction,
68
+ * else read. It must be in the block the hold verified; with none kept (a
69
+ * Safe log proved it, or it was saved by 4.x), in a block still canonical
70
+ * and final. A success must read a success, and a failure a revert unless
71
+ * it is a Safe's (`safe`: its own failure). Anything else throws: the step
72
+ * stays unverified until the chain agrees with its hold.
73
+ */
74
+ async function heldReceipt(settled, client, seen) {
75
+ const hash = settled.hash.toLowerCase();
76
+ const inBlock = (receipt) => receipt.transactionHash.toLowerCase() === hash &&
77
+ (!settled.blockHash ||
78
+ receipt.blockHash?.toLowerCase() === settled.blockHash.toLowerCase());
79
+ const receipt = seen && inBlock(seen)
80
+ ? seen
81
+ : await client.getTransactionReceipt({ hash: settled.hash });
82
+ if (!inBlock(receipt) ||
83
+ (settled.result === "success"
84
+ ? receipt.status !== "success"
85
+ : // Only a Safe's own failure runs under an outer success.
86
+ !settled.safe && receipt.status !== "reverted"))
87
+ throw unverified(settled.hash);
88
+ if (!settled.blockHash) {
89
+ const [block, final] = await Promise.all([
90
+ client.getBlock({ blockNumber: receipt.blockNumber }),
91
+ client.getBlock({ blockTag: "finalized" }),
92
+ ]);
93
+ if (block.hash?.toLowerCase() !== receipt.blockHash?.toLowerCase() ||
94
+ final.number < receipt.blockNumber)
95
+ throw unverified(settled.hash);
96
+ }
97
+ return receipt;
98
+ }
99
+ /**
100
+ * Where `settled` confirmed: the block its hold verified, while still
101
+ * canonical, or with none kept, its {@link heldReceipt}'s. Throws otherwise.
102
+ */
103
+ async function heldBlock(settled, client) {
104
+ if (!settled.blockHash) {
105
+ const { blockNumber, blockHash } = await heldReceipt(settled, client);
106
+ return { blockNumber, blockHash };
107
+ }
108
+ const { number } = await client.getBlock({ blockHash: settled.blockHash });
109
+ const canonical = await client.getBlock({ blockNumber: number });
110
+ if (canonical.hash?.toLowerCase() !== settled.blockHash.toLowerCase())
111
+ throw unverified(settled.hash);
112
+ return { blockNumber: number, blockHash: canonical.hash };
113
+ }
114
+ /**
115
+ * Calls a site's callback (`onProgress`, `onConfirming`, `onSubmitted`,
116
+ * `onConfirmed`, `onSettled`). One that throws or rejects is logged, and
117
+ * never changes what was sent or how it settled.
118
+ */
119
+ function tell(callback, ...args) {
120
+ try {
121
+ const told = callback?.(...args);
122
+ if (told instanceof Promise)
123
+ return told.then(() => undefined, logged);
124
+ }
125
+ catch (error) {
126
+ logged(error);
127
+ }
128
+ }
129
+ const logged = (error) => console.error("A site callback failed; the write stands.", error);
57
130
  //# sourceMappingURL=receipt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../../src/review/receipt.ts"],"names":[],"mappings":";;;AAiCA,oFAIC;AAQD,sDA0BC;AArED;;;;GAIG;AACH,MAAa,kCAAmC,SAAQ,KAAK;IAS3D,YACW,IAAS,EACT,OAAgB,EACzB,UAA+B,EAAE;QAEjC,KAAK,CACH,eAAe,IAAI,iBAAiB,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,gHAAgH,CAC1L,CAAC;QANO,SAAI,GAAJ,IAAI,CAAK;QACT,YAAO,GAAP,OAAO,CAAS;QAVlB,SAAI,GAAG,oCAAoC,CAAC;QAgBnD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE;YACnC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;CACF;AAxBD,gFAwBC;AAED,SAAgB,oCAAoC,CAClD,KAAc;IAEd,OAAO,KAAK,YAAY,kCAAkC,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,qBAAqB,CACzC,MAGC,EACD,IAAS,EACT,UAAsD,EAAE;IAExD,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC;QAC5D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC;gBACH,OAAO,MAAM,MAAM,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,OAAO,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC;oBAC3B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,IAAI,kCAAkC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE;YACnE,KAAK;SACN,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../../src/review/receipt.ts"],"names":[],"mappings":";;;AAqCA,oFAIC;AAQD,sDA0BC;AAuBD,kCAkCC;AAMD,8BAaC;AAOD,oBAUC;AAxKD,iDAAiD;AAGjD,wEAAwE;AAC3D,QAAA,qCAAqC,GAChD,0IAA0I,CAAC;AAE7I;;;;GAIG;AACH,MAAa,kCAAmC,SAAQ,8BAAe;IASrE,YACW,IAAS,EACT,OAAgB,EACzB,UAA+B,EAAE;QAEjC,yEAAyE;QACzE,KAAK,CAAC,6CAAqC,CAAC,CAAC;QALpC,SAAI,GAAJ,IAAI,CAAK;QACT,YAAO,GAAP,OAAO,CAAS;QAVlB,SAAI,GAAG,oCAAoC,CAAC;QAenD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE;YACnC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;CACF;AAvBD,gFAuBC;AAED,SAAgB,oCAAoC,CAClD,KAAc;IAEd,OAAO,KAAK,YAAY,kCAAkC,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,qBAAqB,CACzC,MAGC,EACD,IAAS,EACT,UAAsD,EAAE;IAExD,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC;QAC5D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC;gBACH,OAAO,MAAM,MAAM,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,OAAO,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC;oBAC3B,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;gBAClE,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,IAAI,kCAAkC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE;YACnE,KAAK;SACN,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAWD,MAAM,UAAU,GAAG,CAAC,IAAS,EAAE,EAAE,CAC/B,IAAI,KAAK,CAAC,eAAe,IAAI,8CAA8C,CAAC,CAAC;AAE/E;;;;;;;;GAQG;AACI,KAAK,UAAU,WAAW,CAC/B,OAAgB,EAChB,MAAkB,EAClB,IAAgC;IAEhC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,CAAC,OAA2B,EAAE,EAAE,CAC9C,OAAO,CAAC,eAAe,CAAC,WAAW,EAAE,KAAK,IAAI;QAC9C,CAAC,CAAC,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1E,MAAM,OAAO,GACX,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;QACnB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,IACE,CAAC,OAAO,CAAC,OAAO,CAAC;QACjB,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;YAC3B,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;YAC9B,CAAC,CAAC,yDAAyD;gBACzD,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC;QAEnD,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACvC,MAAM,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;YACrD,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;SAC3C,CAAC,CAAC;QACH,IACE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE;YAC9D,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW;YAElC,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,SAAS,CAC7B,OAAgB,EAChB,MAAkB;IAElB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACtE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IACpC,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,IAAI,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE;QACnE,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,SAAgB,IAAI,CAClB,QAAkD,EAClD,GAAG,IAAU;IAEb,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACjC,IAAI,IAAI,YAAY,OAAO;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,EAAE,CAChC,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC"}