@bananapus/nana-sdk-core 3.5.2 → 4.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 (292) hide show
  1. package/bin/wallet-check.mjs +489 -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 +52 -0
  11. package/dist/cjs/review/confirm.d.ts.map +1 -0
  12. package/dist/cjs/review/confirm.js +88 -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 +8 -7
  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.map +1 -1
  27. package/dist/cjs/review/heldWrite.js +5 -4
  28. package/dist/cjs/review/heldWrite.js.map +1 -1
  29. package/dist/cjs/review/index.d.ts +11 -0
  30. package/dist/cjs/review/index.d.ts.map +1 -1
  31. package/dist/cjs/review/index.js +24 -0
  32. package/dist/cjs/review/index.js.map +1 -1
  33. package/dist/cjs/review/intents.d.ts +10 -0
  34. package/dist/cjs/review/intents.d.ts.map +1 -1
  35. package/dist/cjs/review/intents.js +13 -0
  36. package/dist/cjs/review/intents.js.map +1 -1
  37. package/dist/cjs/review/lineError.d.ts +34 -0
  38. package/dist/cjs/review/lineError.d.ts.map +1 -0
  39. package/dist/cjs/review/lineError.js +42 -0
  40. package/dist/cjs/review/lineError.js.map +1 -0
  41. package/dist/cjs/review/messages.d.ts +15 -3
  42. package/dist/cjs/review/messages.d.ts.map +1 -1
  43. package/dist/cjs/review/messages.js +16 -4
  44. package/dist/cjs/review/messages.js.map +1 -1
  45. package/dist/cjs/review/model.d.ts +149 -0
  46. package/dist/cjs/review/model.d.ts.map +1 -0
  47. package/dist/cjs/review/model.js +750 -0
  48. package/dist/cjs/review/model.js.map +1 -0
  49. package/dist/cjs/review/plan.d.ts +63 -0
  50. package/dist/cjs/review/plan.d.ts.map +1 -0
  51. package/dist/cjs/review/plan.js +149 -0
  52. package/dist/cjs/review/plan.js.map +1 -0
  53. package/dist/cjs/review/react/index.d.ts +1 -0
  54. package/dist/cjs/review/react/index.d.ts.map +1 -1
  55. package/dist/cjs/review/react/index.js +1 -0
  56. package/dist/cjs/review/react/index.js.map +1 -1
  57. package/dist/cjs/review/react/useReviewedRun.d.ts +96 -0
  58. package/dist/cjs/review/react/useReviewedRun.d.ts.map +1 -0
  59. package/dist/cjs/review/react/useReviewedRun.js +261 -0
  60. package/dist/cjs/review/react/useReviewedRun.js.map +1 -0
  61. package/dist/cjs/review/receipt.d.ts +4 -1
  62. package/dist/cjs/review/receipt.d.ts.map +1 -1
  63. package/dist/cjs/review/receipt.js +7 -3
  64. package/dist/cjs/review/receipt.js.map +1 -1
  65. package/dist/cjs/review/relayr.d.ts +13 -4
  66. package/dist/cjs/review/relayr.d.ts.map +1 -1
  67. package/dist/cjs/review/relayr.js +51 -8
  68. package/dist/cjs/review/relayr.js.map +1 -1
  69. package/dist/cjs/review/relayrSend.d.ts +135 -0
  70. package/dist/cjs/review/relayrSend.d.ts.map +1 -0
  71. package/dist/cjs/review/relayrSend.js +943 -0
  72. package/dist/cjs/review/relayrSend.js.map +1 -0
  73. package/dist/cjs/review/reviewQueue.d.ts +10 -9
  74. package/dist/cjs/review/reviewQueue.d.ts.map +1 -1
  75. package/dist/cjs/review/reviewQueue.js +19 -29
  76. package/dist/cjs/review/reviewQueue.js.map +1 -1
  77. package/dist/cjs/review/reviewRequests.d.ts +86 -0
  78. package/dist/cjs/review/reviewRequests.d.ts.map +1 -0
  79. package/dist/cjs/review/reviewRequests.js +266 -0
  80. package/dist/cjs/review/reviewRequests.js.map +1 -0
  81. package/dist/cjs/review/safeRelayr.d.ts +3 -1
  82. package/dist/cjs/review/safeRelayr.d.ts.map +1 -1
  83. package/dist/cjs/review/safeRelayr.js +5 -1
  84. package/dist/cjs/review/safeRelayr.js.map +1 -1
  85. package/dist/cjs/review/safeSend.d.ts +69 -0
  86. package/dist/cjs/review/safeSend.d.ts.map +1 -0
  87. package/dist/cjs/review/safeSend.js +308 -0
  88. package/dist/cjs/review/safeSend.js.map +1 -0
  89. package/dist/cjs/review/send.d.ts +241 -0
  90. package/dist/cjs/review/send.d.ts.map +1 -0
  91. package/dist/cjs/review/send.js +1017 -0
  92. package/dist/cjs/review/send.js.map +1 -0
  93. package/dist/cjs/review/sequence.d.ts +77 -0
  94. package/dist/cjs/review/sequence.d.ts.map +1 -0
  95. package/dist/cjs/review/sequence.js +232 -0
  96. package/dist/cjs/review/sequence.js.map +1 -0
  97. package/dist/cjs/review/sign.d.ts +109 -0
  98. package/dist/cjs/review/sign.d.ts.map +1 -0
  99. package/dist/cjs/review/sign.js +374 -0
  100. package/dist/cjs/review/sign.js.map +1 -0
  101. package/dist/cjs/review/simulation.d.ts +41 -2
  102. package/dist/cjs/review/simulation.d.ts.map +1 -1
  103. package/dist/cjs/review/simulation.js +99 -29
  104. package/dist/cjs/review/simulation.js.map +1 -1
  105. package/dist/cjs/review/transaction-message.d.ts +13 -0
  106. package/dist/cjs/review/transaction-message.d.ts.map +1 -1
  107. package/dist/cjs/review/transaction-message.js +25 -0
  108. package/dist/cjs/review/transaction-message.js.map +1 -1
  109. package/dist/cjs/review/transactionReview.d.ts +27 -19
  110. package/dist/cjs/review/transactionReview.d.ts.map +1 -1
  111. package/dist/cjs/review/transactionReview.js +22 -63
  112. package/dist/cjs/review/transactionReview.js.map +1 -1
  113. package/dist/cjs/review/wallet.d.ts +82 -0
  114. package/dist/cjs/review/wallet.d.ts.map +1 -0
  115. package/dist/cjs/review/wallet.js +157 -0
  116. package/dist/cjs/review/wallet.js.map +1 -0
  117. package/dist/cjs/review/writeHold.d.ts +100 -12
  118. package/dist/cjs/review/writeHold.d.ts.map +1 -1
  119. package/dist/cjs/review/writeHold.js +61 -13
  120. package/dist/cjs/review/writeHold.js.map +1 -1
  121. package/dist/cjs/review/writeRecovery.d.ts +6 -1
  122. package/dist/cjs/review/writeRecovery.d.ts.map +1 -1
  123. package/dist/cjs/review/writeRecovery.js +108 -40
  124. package/dist/cjs/review/writeRecovery.js.map +1 -1
  125. package/dist/cjs/safeService.d.ts +27 -4
  126. package/dist/cjs/safeService.d.ts.map +1 -1
  127. package/dist/cjs/safeService.js +120 -3
  128. package/dist/cjs/safeService.js.map +1 -1
  129. package/dist/cjs/testing.d.ts +24 -0
  130. package/dist/cjs/testing.d.ts.map +1 -1
  131. package/dist/cjs/testing.js +26 -1
  132. package/dist/cjs/testing.js.map +1 -1
  133. package/dist/cjs/v6/defifa.d.ts.map +1 -1
  134. package/dist/cjs/v6/defifa.js +24 -23
  135. package/dist/cjs/v6/defifa.js.map +1 -1
  136. package/dist/cjs/v6/executionErrors.d.ts.map +1 -1
  137. package/dist/cjs/v6/executionErrors.js +3 -2
  138. package/dist/cjs/v6/executionErrors.js.map +1 -1
  139. package/dist/cjs/v6/pay.d.ts +25 -8
  140. package/dist/cjs/v6/pay.d.ts.map +1 -1
  141. package/dist/cjs/v6/pay.js +117 -23
  142. package/dist/cjs/v6/pay.js.map +1 -1
  143. package/dist/cjs/v6/suckers.d.ts +30 -0
  144. package/dist/cjs/v6/suckers.d.ts.map +1 -1
  145. package/dist/cjs/v6/suckers.js +69 -5
  146. package/dist/cjs/v6/suckers.js.map +1 -1
  147. package/dist/esm/actions/suckerPairs.d.ts +5 -3
  148. package/dist/esm/actions/suckerPairs.d.ts.map +1 -1
  149. package/dist/esm/actions/suckerPairs.js +7 -27
  150. package/dist/esm/actions/suckerPairs.js.map +1 -1
  151. package/dist/esm/pause.d.ts +2 -0
  152. package/dist/esm/pause.d.ts.map +1 -1
  153. package/dist/esm/pause.js +16 -0
  154. package/dist/esm/pause.js.map +1 -1
  155. package/dist/esm/review/confirm.d.ts +52 -0
  156. package/dist/esm/review/confirm.d.ts.map +1 -0
  157. package/dist/esm/review/confirm.js +83 -0
  158. package/dist/esm/review/confirm.js.map +1 -0
  159. package/dist/esm/review/contractWrite.d.ts +5 -3
  160. package/dist/esm/review/contractWrite.d.ts.map +1 -1
  161. package/dist/esm/review/contractWrite.js +8 -7
  162. package/dist/esm/review/contractWrite.js.map +1 -1
  163. package/dist/esm/review/decode.d.ts +19 -1
  164. package/dist/esm/review/decode.d.ts.map +1 -1
  165. package/dist/esm/review/decode.js +29 -14
  166. package/dist/esm/review/decode.js.map +1 -1
  167. package/dist/esm/review/decodeCall.d.ts +21 -0
  168. package/dist/esm/review/decodeCall.d.ts.map +1 -0
  169. package/dist/esm/review/decodeCall.js +180 -0
  170. package/dist/esm/review/decodeCall.js.map +1 -0
  171. package/dist/esm/review/heldWrite.d.ts.map +1 -1
  172. package/dist/esm/review/heldWrite.js +5 -4
  173. package/dist/esm/review/heldWrite.js.map +1 -1
  174. package/dist/esm/review/index.d.ts +11 -0
  175. package/dist/esm/review/index.d.ts.map +1 -1
  176. package/dist/esm/review/index.js +11 -0
  177. package/dist/esm/review/index.js.map +1 -1
  178. package/dist/esm/review/intents.d.ts +10 -0
  179. package/dist/esm/review/intents.d.ts.map +1 -1
  180. package/dist/esm/review/intents.js +12 -0
  181. package/dist/esm/review/intents.js.map +1 -1
  182. package/dist/esm/review/lineError.d.ts +34 -0
  183. package/dist/esm/review/lineError.d.ts.map +1 -0
  184. package/dist/esm/review/lineError.js +36 -0
  185. package/dist/esm/review/lineError.js.map +1 -0
  186. package/dist/esm/review/messages.d.ts +15 -3
  187. package/dist/esm/review/messages.d.ts.map +1 -1
  188. package/dist/esm/review/messages.js +15 -3
  189. package/dist/esm/review/messages.js.map +1 -1
  190. package/dist/esm/review/model.d.ts +149 -0
  191. package/dist/esm/review/model.d.ts.map +1 -0
  192. package/dist/esm/review/model.js +746 -0
  193. package/dist/esm/review/model.js.map +1 -0
  194. package/dist/esm/review/plan.d.ts +63 -0
  195. package/dist/esm/review/plan.d.ts.map +1 -0
  196. package/dist/esm/review/plan.js +141 -0
  197. package/dist/esm/review/plan.js.map +1 -0
  198. package/dist/esm/review/react/index.d.ts +1 -0
  199. package/dist/esm/review/react/index.d.ts.map +1 -1
  200. package/dist/esm/review/react/index.js +1 -0
  201. package/dist/esm/review/react/index.js.map +1 -1
  202. package/dist/esm/review/react/useReviewedRun.d.ts +96 -0
  203. package/dist/esm/review/react/useReviewedRun.d.ts.map +1 -0
  204. package/dist/esm/review/react/useReviewedRun.js +257 -0
  205. package/dist/esm/review/react/useReviewedRun.js.map +1 -0
  206. package/dist/esm/review/receipt.d.ts +4 -1
  207. package/dist/esm/review/receipt.d.ts.map +1 -1
  208. package/dist/esm/review/receipt.js +6 -2
  209. package/dist/esm/review/receipt.js.map +1 -1
  210. package/dist/esm/review/relayr.d.ts +13 -4
  211. package/dist/esm/review/relayr.d.ts.map +1 -1
  212. package/dist/esm/review/relayr.js +50 -8
  213. package/dist/esm/review/relayr.js.map +1 -1
  214. package/dist/esm/review/relayrSend.d.ts +135 -0
  215. package/dist/esm/review/relayrSend.d.ts.map +1 -0
  216. package/dist/esm/review/relayrSend.js +934 -0
  217. package/dist/esm/review/relayrSend.js.map +1 -0
  218. package/dist/esm/review/reviewQueue.d.ts +10 -9
  219. package/dist/esm/review/reviewQueue.d.ts.map +1 -1
  220. package/dist/esm/review/reviewQueue.js +17 -26
  221. package/dist/esm/review/reviewQueue.js.map +1 -1
  222. package/dist/esm/review/reviewRequests.d.ts +86 -0
  223. package/dist/esm/review/reviewRequests.d.ts.map +1 -0
  224. package/dist/esm/review/reviewRequests.js +263 -0
  225. package/dist/esm/review/reviewRequests.js.map +1 -0
  226. package/dist/esm/review/safeRelayr.d.ts +3 -1
  227. package/dist/esm/review/safeRelayr.d.ts.map +1 -1
  228. package/dist/esm/review/safeRelayr.js +5 -1
  229. package/dist/esm/review/safeRelayr.js.map +1 -1
  230. package/dist/esm/review/safeSend.d.ts +69 -0
  231. package/dist/esm/review/safeSend.d.ts.map +1 -0
  232. package/dist/esm/review/safeSend.js +303 -0
  233. package/dist/esm/review/safeSend.js.map +1 -0
  234. package/dist/esm/review/send.d.ts +241 -0
  235. package/dist/esm/review/send.d.ts.map +1 -0
  236. package/dist/esm/review/send.js +1011 -0
  237. package/dist/esm/review/send.js.map +1 -0
  238. package/dist/esm/review/sequence.d.ts +77 -0
  239. package/dist/esm/review/sequence.d.ts.map +1 -0
  240. package/dist/esm/review/sequence.js +223 -0
  241. package/dist/esm/review/sequence.js.map +1 -0
  242. package/dist/esm/review/sign.d.ts +109 -0
  243. package/dist/esm/review/sign.d.ts.map +1 -0
  244. package/dist/esm/review/sign.js +368 -0
  245. package/dist/esm/review/sign.js.map +1 -0
  246. package/dist/esm/review/simulation.d.ts +41 -2
  247. package/dist/esm/review/simulation.d.ts.map +1 -1
  248. package/dist/esm/review/simulation.js +95 -29
  249. package/dist/esm/review/simulation.js.map +1 -1
  250. package/dist/esm/review/transaction-message.d.ts +13 -0
  251. package/dist/esm/review/transaction-message.d.ts.map +1 -1
  252. package/dist/esm/review/transaction-message.js +23 -0
  253. package/dist/esm/review/transaction-message.js.map +1 -1
  254. package/dist/esm/review/transactionReview.d.ts +27 -19
  255. package/dist/esm/review/transactionReview.d.ts.map +1 -1
  256. package/dist/esm/review/transactionReview.js +19 -56
  257. package/dist/esm/review/transactionReview.js.map +1 -1
  258. package/dist/esm/review/wallet.d.ts +82 -0
  259. package/dist/esm/review/wallet.d.ts.map +1 -0
  260. package/dist/esm/review/wallet.js +150 -0
  261. package/dist/esm/review/wallet.js.map +1 -0
  262. package/dist/esm/review/writeHold.d.ts +100 -12
  263. package/dist/esm/review/writeHold.d.ts.map +1 -1
  264. package/dist/esm/review/writeHold.js +59 -13
  265. package/dist/esm/review/writeHold.js.map +1 -1
  266. package/dist/esm/review/writeRecovery.d.ts +6 -1
  267. package/dist/esm/review/writeRecovery.d.ts.map +1 -1
  268. package/dist/esm/review/writeRecovery.js +111 -43
  269. package/dist/esm/review/writeRecovery.js.map +1 -1
  270. package/dist/esm/safeService.d.ts +27 -4
  271. package/dist/esm/safeService.d.ts.map +1 -1
  272. package/dist/esm/safeService.js +119 -4
  273. package/dist/esm/safeService.js.map +1 -1
  274. package/dist/esm/testing.d.ts +24 -0
  275. package/dist/esm/testing.d.ts.map +1 -1
  276. package/dist/esm/testing.js +23 -1
  277. package/dist/esm/testing.js.map +1 -1
  278. package/dist/esm/v6/defifa.d.ts.map +1 -1
  279. package/dist/esm/v6/defifa.js +24 -23
  280. package/dist/esm/v6/defifa.js.map +1 -1
  281. package/dist/esm/v6/executionErrors.d.ts.map +1 -1
  282. package/dist/esm/v6/executionErrors.js +3 -2
  283. package/dist/esm/v6/executionErrors.js.map +1 -1
  284. package/dist/esm/v6/pay.d.ts +25 -8
  285. package/dist/esm/v6/pay.d.ts.map +1 -1
  286. package/dist/esm/v6/pay.js +115 -22
  287. package/dist/esm/v6/pay.js.map +1 -1
  288. package/dist/esm/v6/suckers.d.ts +30 -0
  289. package/dist/esm/v6/suckers.d.ts.map +1 -1
  290. package/dist/esm/v6/suckers.js +67 -5
  291. package/dist/esm/v6/suckers.js.map +1 -1
  292. package/package.json +11 -2
@@ -0,0 +1,374 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.prepareSignature = prepareSignature;
4
+ exports.signPrepared = signPrepared;
5
+ exports.plannedCallsOf = plannedCallsOf;
6
+ exports.signReviewed = signReviewed;
7
+ const lineError_js_1 = require("./lineError.js");
8
+ const viem_1 = require("viem");
9
+ const safe_js_1 = require("../safe.js");
10
+ const untrusted_js_1 = require("../untrusted.js");
11
+ const safeService_js_1 = require("../safeService.js");
12
+ const permit2_js_1 = require("../v6/permit2.js");
13
+ const confirm_js_1 = require("./confirm.js");
14
+ const contractWrite_js_1 = require("./contractWrite.js");
15
+ const decode_js_1 = require("./decode.js");
16
+ const decodeCall_js_1 = require("./decodeCall.js");
17
+ const model_js_1 = require("./model.js");
18
+ const plan_js_1 = require("./plan.js");
19
+ const relayr_js_1 = require("./relayr.js");
20
+ const reviewQueue_js_1 = require("./reviewQueue.js");
21
+ const wallet_js_1 = require("./wallet.js");
22
+ const REJECTED = "You rejected the signature. Nothing was sent.";
23
+ function requireChainId(chainId) {
24
+ if (typeof chainId !== "number" ||
25
+ !Number.isSafeInteger(chainId) ||
26
+ chainId <= 0) {
27
+ throw new lineError_js_1.ReviewLineError("Invalid chain ID.");
28
+ }
29
+ return chainId;
30
+ }
31
+ function requireAddress(name, value) {
32
+ if (typeof value !== "string" || !(0, viem_1.isAddress)(value)) {
33
+ throw new lineError_js_1.ReviewLineError(`Invalid ${name} address.`);
34
+ }
35
+ return (0, viem_1.getAddress)(value);
36
+ }
37
+ /** An unsigned integer as a primitive, so nothing can change it after review. */
38
+ function requireUint(name, value) {
39
+ const parsed = (0, untrusted_js_1.uint256)(value);
40
+ if (parsed === null)
41
+ throw new lineError_js_1.ReviewLineError(`Invalid ${name}.`);
42
+ return parsed;
43
+ }
44
+ /** `value` and everything in it frozen. */
45
+ function frozen(value) {
46
+ if (value && typeof value === "object" && !Object.isFrozen(value)) {
47
+ Object.freeze(value);
48
+ for (const inner of Object.values(value))
49
+ frozen(inner);
50
+ }
51
+ return value;
52
+ }
53
+ /**
54
+ * The prepared signature: `payload` is what the wallet signs and what the
55
+ * review shows, one frozen copy, so neither the inputs nor the shared type
56
+ * constants changing after review changes what is signed. Typed data must
57
+ * encode first, so viem checks every address and integer before the review
58
+ * opens.
59
+ */
60
+ function prepared(kind, chainId, payload, shown = {}) {
61
+ const copy = frozen(structuredClone(payload));
62
+ const typedData = "typedData" in copy ? copy.typedData : null;
63
+ if (typedData)
64
+ (0, viem_1.hashTypedData)(typedData);
65
+ return Object.freeze({
66
+ chainId,
67
+ typedData,
68
+ message: "message" in copy ? copy.message : null,
69
+ review: { kind, chainId, ...copy, ...shown },
70
+ });
71
+ }
72
+ /**
73
+ * `signature` as core signs and shows it, each field read once. Refuses any
74
+ * kind core does not know, a Safe transaction that DELEGATECALLs anything
75
+ * but a recognized MultiSendCallOnly, a forward request not from `account`,
76
+ * on a chain with no forwarder, or executable past
77
+ * {@link relayrForwarderDeadline}, and a message that is not text.
78
+ */
79
+ function prepareSignature(signature, account) {
80
+ const kind = signature?.kind;
81
+ switch (kind) {
82
+ case "safe-tx": {
83
+ const { chainId, safe, tx } = signature;
84
+ const id = requireChainId(chainId);
85
+ const verifyingContract = requireAddress("Safe", safe);
86
+ const given = tx?.safeTxHash;
87
+ const message = (0, safeService_js_1.safeTransactionMessage)(tx);
88
+ // A hash the caller holds for it must be the one signed.
89
+ if (given != null &&
90
+ (typeof given !== "string" ||
91
+ given.toLowerCase() !==
92
+ (0, viem_1.hashTypedData)({
93
+ domain: { chainId: id, verifyingContract },
94
+ types: safeService_js_1.SAFE_TX_TYPES,
95
+ primaryType: "SafeTx",
96
+ message,
97
+ })))
98
+ throw new lineError_js_1.ReviewLineError("This Safe transaction does not match its hash. Nothing was signed.");
99
+ const inner = (0, safe_js_1.multiSendCallsOf)(message);
100
+ if (message.operation === 1 && !inner) {
101
+ throw new lineError_js_1.ReviewLineError("This Safe transaction DELEGATECALLs a contract other than MultiSendCallOnly. Nothing was signed.");
102
+ }
103
+ const args = [
104
+ message.to,
105
+ message.value,
106
+ message.data,
107
+ message.operation,
108
+ message.safeTxGas,
109
+ message.baseGas,
110
+ message.gasPrice,
111
+ message.gasToken,
112
+ message.refundReceiver,
113
+ "0x",
114
+ ];
115
+ return prepared(kind, id, {
116
+ typedData: {
117
+ domain: { chainId: id, verifyingContract },
118
+ types: safeService_js_1.SAFE_TX_TYPES,
119
+ primaryType: "SafeTx",
120
+ message,
121
+ },
122
+ }, {
123
+ // The Safe's own execution of it, with the MultiSend's calls inside.
124
+ calls: [
125
+ {
126
+ chainId: id,
127
+ to: verifyingContract,
128
+ data: (0, viem_1.encodeFunctionData)({
129
+ abi: safeService_js_1.SAFE_EXEC_ABI,
130
+ functionName: "execTransaction",
131
+ args,
132
+ }),
133
+ abi: safeService_js_1.SAFE_EXEC_ABI,
134
+ functionName: "execTransaction",
135
+ args,
136
+ safeTxGas: message.safeTxGas,
137
+ contractName: "Safe",
138
+ ...(inner
139
+ ? {
140
+ calls: inner.map((call) => (0, decodeCall_js_1.decodeReviewCall)({
141
+ chainId: id,
142
+ from: verifyingContract,
143
+ ...call,
144
+ })),
145
+ }
146
+ : {}),
147
+ },
148
+ ],
149
+ });
150
+ }
151
+ case "forward-request": {
152
+ const { chainId, request } = signature;
153
+ const id = requireChainId(chainId);
154
+ const verifyingContract = (0, relayr_js_1.relayrForwarder)(id);
155
+ if (!verifyingContract) {
156
+ throw new lineError_js_1.ReviewLineError(`There is no Juicebox forwarder on chain ${id}. Nothing was signed.`);
157
+ }
158
+ const { from, to, value, gas, nonce, deadline, data } = request;
159
+ if (typeof from !== "string" ||
160
+ from.toLowerCase() !== account.toLowerCase()) {
161
+ throw new lineError_js_1.ReviewLineError("This request is not from the connected account. Nothing was signed.");
162
+ }
163
+ if (!Number.isSafeInteger(deadline) ||
164
+ deadline > (0, relayr_js_1.relayrForwarderDeadline)()) {
165
+ throw new lineError_js_1.ReviewLineError("This request stays executable longer than allowed. Nothing was signed.");
166
+ }
167
+ if (!(0, untrusted_js_1.isHexBytes)(data))
168
+ throw new lineError_js_1.ReviewLineError("Invalid forwarded calldata.");
169
+ const message = {
170
+ from: requireAddress("sender", from),
171
+ to: requireAddress("destination", to),
172
+ value: requireUint("value", value),
173
+ gas: requireUint("gas", gas),
174
+ nonce: requireUint("nonce", nonce),
175
+ deadline,
176
+ data,
177
+ };
178
+ return prepared(kind, id, {
179
+ typedData: {
180
+ domain: {
181
+ name: "Juicebox",
182
+ version: "1",
183
+ chainId: id,
184
+ verifyingContract,
185
+ },
186
+ types: relayr_js_1.FORWARD_REQUEST_TYPES,
187
+ primaryType: "ForwardRequest",
188
+ message,
189
+ },
190
+ }, {
191
+ calls: [
192
+ (0, decodeCall_js_1.decodeReviewCall)({
193
+ chainId: id,
194
+ from: message.from,
195
+ to: message.to,
196
+ data,
197
+ value: message.value,
198
+ gas: message.gas,
199
+ }),
200
+ ],
201
+ });
202
+ }
203
+ case "permit2": {
204
+ const { chainId, token, spender, amount, expiration, nonce, sigDeadline, } = signature.authorization;
205
+ const id = requireChainId(chainId);
206
+ const authorization = {
207
+ chainId: id,
208
+ token: requireAddress("token", token),
209
+ spender: requireAddress("spender", spender),
210
+ amount: requireUint("amount", amount),
211
+ expiration: Number(requireUint("expiration", expiration)),
212
+ nonce: Number(requireUint("nonce", nonce)),
213
+ sigDeadline: requireUint("signature deadline", sigDeadline),
214
+ };
215
+ return prepared(kind, id, { typedData: (0, permit2_js_1.permit2TypedData)(authorization) }, {
216
+ steps: [
217
+ {
218
+ title: "Permit2 allowance",
219
+ rows: (0, decode_js_1.permit2Rows)(id, authorization),
220
+ },
221
+ ],
222
+ });
223
+ }
224
+ case "message": {
225
+ const { chainId, message, calls } = signature;
226
+ const id = requireChainId(chainId);
227
+ if (typeof message !== "string") {
228
+ throw new lineError_js_1.ReviewLineError("A message to sign must be text. Nothing was signed.");
229
+ }
230
+ if (calls === undefined)
231
+ return prepared(kind, id, { message });
232
+ return prepared(kind, id, { message }, {
233
+ calls: [...calls].map((call) => {
234
+ const { chainId, to, data, value } = call;
235
+ if (!(0, untrusted_js_1.isHexBytes)(data))
236
+ throw new lineError_js_1.ReviewLineError("Invalid call data.");
237
+ return (0, decodeCall_js_1.decodeReviewCall)({
238
+ chainId: requireChainId(chainId),
239
+ to: requireAddress("call target", to),
240
+ data,
241
+ value: requireUint("call value", value ?? 0n),
242
+ });
243
+ }),
244
+ });
245
+ }
246
+ }
247
+ throw new lineError_js_1.ReviewLineError("This signature is not one the app can review. Nothing was signed.");
248
+ }
249
+ /**
250
+ * Signs each prepared signature in order through the adapter, after the same
251
+ * account and chain checks as {@link submitReviewedContractWrite}: the
252
+ * connected account must stay `account`, and typed data is signed on its
253
+ * domain's chain. A message is chain-free, so the wallet is not asked to
254
+ * switch for one. A definite wallet rejection (EIP-1193 4001) returns no
255
+ * signature and throws {@link TransactionReviewCancelledError}.
256
+ */
257
+ async function signPrepared(prepared, account, adapter,
258
+ /** The caller's final gate before each signature; it throws to stop. */
259
+ beforeSign,
260
+ /** The caller's async recheck before each signature, ahead of `beforeSign`. */
261
+ reverify) {
262
+ const signatures = [];
263
+ for (const { chainId, typedData, message } of prepared) {
264
+ signatures.push(await (0, contractWrite_js_1.submitReviewedContractWrite)({
265
+ request: { chainId },
266
+ expectedAccount: account,
267
+ review: () => Promise.resolve(),
268
+ switchChain: async (id) => {
269
+ if (typedData && adapter.chainId() !== id) {
270
+ await adapter.switchChain(id);
271
+ }
272
+ },
273
+ currentAccount: () => adapter.account(),
274
+ ...(reverify ? { reverify } : {}),
275
+ simulate: async () => undefined,
276
+ beforeSend: () => {
277
+ beforeSign?.();
278
+ if (typedData && adapter.chainId() !== chainId) {
279
+ throw new lineError_js_1.ReviewLineError("Your wallet changed networks. Review the signature again.");
280
+ }
281
+ // Last, after every callback above could have run.
282
+ if (adapter.account()?.toLowerCase() !== account.toLowerCase()) {
283
+ throw new lineError_js_1.ReviewLineError("The connected account changed. Review again.");
284
+ }
285
+ },
286
+ // Only the wallet's own answer can read as a rejection.
287
+ write: async () => {
288
+ try {
289
+ return await (typedData
290
+ ? adapter.signTypedData(typedData)
291
+ : adapter.signMessage(message));
292
+ }
293
+ catch (error) {
294
+ if ((0, contractWrite_js_1.isDefiniteWalletRejection)(error)) {
295
+ throw new reviewQueue_js_1.TransactionReviewCancelledError(REJECTED);
296
+ }
297
+ throw error;
298
+ }
299
+ },
300
+ }));
301
+ }
302
+ return signatures;
303
+ }
304
+ /**
305
+ * The calls a prepared signature lets someone run, as a plan matches them,
306
+ * read from the exact payload signed: a Safe transaction's CALL or
307
+ * MultiSendCallOnly calls, from the Safe, when it pays no refund and its
308
+ * safeTxGas is 0 (so a failed call reverts, not spends the nonce), or a
309
+ * forward request's call, from its signer. Any other signature is refused
310
+ * under a plan.
311
+ */
312
+ function plannedCallsOf({ chainId, typedData, }) {
313
+ const message = typedData?.message;
314
+ if (typedData?.primaryType === "SafeTx" && message) {
315
+ const { to, data, value, operation, safeTxGas, gasPrice } = message;
316
+ const safe = typedData.domain?.verifyingContract;
317
+ const inner = operation === 1
318
+ ? (0, safe_js_1.multiSendCallsOf)({ to, data, operation })
319
+ : [{ to, data, value }];
320
+ if (safe && inner && safeTxGas === 0n && gasPrice === 0n)
321
+ return inner.map((call) => ({
322
+ chainId,
323
+ from: safe,
324
+ to: call.to,
325
+ data: call.data,
326
+ value: call.value,
327
+ }));
328
+ }
329
+ else if (typedData?.primaryType === "ForwardRequest" && message) {
330
+ const { from, to, data, value, gas } = message;
331
+ return [{ chainId, from, to, data, value, gas }];
332
+ }
333
+ throw new lineError_js_1.ReviewLineError(plan_js_1.REVIEWED_PLAN_REFUSED_LINE);
334
+ }
335
+ /**
336
+ * Signs only what the person reviewed: one prompt for every signature, with
337
+ * the exact typed data or text and the calls each lets someone run, decoded.
338
+ * Nothing is signed unless the review handler returns core's confirmation
339
+ * ({@link registerReviewHandler}). The signatures come back in order.
340
+ *
341
+ * A self-reviewing adapter (Signa) is refused with EIP-1193 4200: it has no
342
+ * reviewed-signature path yet.
343
+ */
344
+ async function signReviewed(signatures, action, deps) {
345
+ const { adapter } = deps;
346
+ const { account } = action;
347
+ await (0, wallet_js_1.walletReady)(adapter);
348
+ if (adapter.kind === "self-reviewing")
349
+ throw (0, wallet_js_1.unsupportedWalletRequest)();
350
+ const connected = adapter.account();
351
+ if (!connected)
352
+ throw new lineError_js_1.ReviewLineError("Connect a wallet first.");
353
+ if (connected.toLowerCase() !== account.toLowerCase()) {
354
+ throw new lineError_js_1.ReviewLineError("The connected account changed. Review again.");
355
+ }
356
+ const prepared = [...signatures].map((signature) => prepareSignature(signature, account));
357
+ if (!prepared.length)
358
+ throw new lineError_js_1.ReviewLineError("There is nothing to sign.");
359
+ if (action.plan) {
360
+ (0, plan_js_1.spendPlan)(action.plan, account, prepared.flatMap(plannedCallsOf));
361
+ return signPrepared(prepared, account, adapter, undefined, action.reverify);
362
+ }
363
+ const model = (0, model_js_1.buildReviewModel)({
364
+ calls: [],
365
+ signatures: prepared.map(({ review }) => review),
366
+ ...(action.title ? { title: action.title } : {}),
367
+ ...(action.description ? { description: action.description } : {}),
368
+ ...(action.context ? { context: action.context } : {}),
369
+ });
370
+ // Nothing is sent, so there is nothing to simulate.
371
+ await (0, confirm_js_1.promptReview)(model, Promise.resolve({ status: "passed" }), Promise.resolve(model), action.signal);
372
+ return signPrepared(prepared, account, adapter, undefined, action.reverify);
373
+ }
374
+ //# sourceMappingURL=sign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sign.js","sourceRoot":"","sources":["../../../src/review/sign.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ export declare const TRANSACTION_SIMULATION_MAX_RETURN_BYTES = 4096;
13
13
  * `blockNumber` to simulate on the block a prerequisite (an approval, say) was
14
14
  * mined in, instead of `latest` on a node that may lag behind it.
15
15
  */
16
- export declare function simulateStateChangingTransaction(client: Pick<PublicClient, "request">, { from, to, data, value, gas, blockNumber, maxReturnBytes, }: {
16
+ export declare function simulateStateChangingTransaction(client: Pick<PublicClient, "request">, { from, to, data, value, gas, blockNumber, maxReturnBytes, balance, }: {
17
17
  from: Address;
18
18
  to: Address;
19
19
  data: Hex;
@@ -21,17 +21,54 @@ export declare function simulateStateChangingTransaction(client: Pick<PublicClie
21
21
  gas?: bigint;
22
22
  blockNumber?: bigint;
23
23
  maxReturnBytes?: number;
24
+ /** `from`'s balance for the simulation, in place of its own. */
25
+ balance?: bigint;
24
26
  }): Promise<Hex>;
25
27
  /** One call of an ordered sequence, such as a Safe MultiSend batch. */
26
28
  export type SimulatedSequenceCall = {
27
29
  to: Address;
28
30
  data: Hex;
29
31
  value?: bigint;
32
+ /** The exact gas limit the call is sent with, when the app fixed it. */
33
+ gas?: bigint;
30
34
  /** Names the call in a failure message. */
31
35
  label: string;
32
36
  /** Needs an earlier call's effect (an allowance, a hook), so it cannot run alone. */
33
37
  dependsOnPrior?: boolean;
38
+ /** Its value is paid for the sender (by Relayr): run alone, it gets the sequence's `balance`. */
39
+ funded?: boolean;
34
40
  };
41
+ /** The line for a revert whose reason the SDK does not know. */
42
+ export declare const REVERT_UNKNOWN_LINE = "This transaction would fail. Check the amounts and try again.";
43
+ /** The line for a simulation the node did not answer. */
44
+ export declare const SIMULATION_NO_ANSWER_LINE = "The node did not answer the simulation.";
45
+ /**
46
+ * Why a call reverted, when the SDK knows the revert: a payment revert's
47
+ * plain line ({@link decodePayFailure}). Null otherwise. Error text (viem's
48
+ * `shortMessage`, a node's message) is never read: it can quote a request or
49
+ * its URL.
50
+ */
51
+ export declare function revertReason(error: unknown): string | null;
52
+ /**
53
+ * A failed simulation's one-line reason: {@link revertReason}, or a fixed
54
+ * line, {@link REVERT_UNKNOWN_LINE} for a revert and
55
+ * {@link SIMULATION_NO_ANSWER_LINE} otherwise. Never the error's own text.
56
+ */
57
+ export declare function revertDetail(error: unknown): string;
58
+ /**
59
+ * Whether a failed simulation is the call reverting, not the node failing:
60
+ * EIP-1474 code 3, viem's contract-revert errors, or the node's own text
61
+ * saying it reverted, in the error's first eight causes. A viem error is read
62
+ * by its `details`, since its `message` quotes the request.
63
+ */
64
+ export declare function isRevert(error: unknown): boolean;
65
+ /**
66
+ * The error a failed simulation throws, with the answer as its cause: the
67
+ * SDK's own line (a {@link ReviewLineError}) for a revert, decoded or not; a
68
+ * plain error, which `errorLine` shows as the network line, for a node that
69
+ * did not answer.
70
+ */
71
+ export declare function simulationFailure(text: string, cause: unknown): Error;
35
72
  /**
36
73
  * Prove a whole sequence from `from` before anything is signed. `eth_simulateV1`
37
74
  * runs the calls in order against one state. Where a node lacks it, each call
@@ -39,9 +76,11 @@ export type SimulatedSequenceCall = {
39
76
  * {@link simulateStateChangingTransaction}; the dependent ones are left to the
40
77
  * executing wallet's own simulation. `chainName` names the chain in errors.
41
78
  */
42
- export declare function simulateCallSequence(client: Pick<PublicClient, "request" | "simulateCalls">, { from, calls, chainName, }: {
79
+ export declare function simulateCallSequence(client: Pick<PublicClient, "request" | "simulateCalls">, { from, calls, chainName, balance, }: {
43
80
  from: Address;
44
81
  calls: readonly SimulatedSequenceCall[];
45
82
  chainName: string;
83
+ /** `from`'s balance for the sequence, in place of its own; a call run alone gets it only when `funded`. */
84
+ balance?: bigint;
46
85
  }): Promise<void>;
47
86
  //# sourceMappingURL=simulation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"simulation.d.ts","sourceRoot":"","sources":["../../../src/review/simulation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,YAAY,EAAE,MAAM,MAAM,CAAC;AAE9E,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,YAAc,CAAC;AAEtD,+EAA+E;AAC/E,eAAO,MAAM,uCAAuC,OAAQ,CAAC;AAE7D;;;;;;;;;GASG;AACH,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,EACrC,EACE,IAAI,EACJ,EAAE,EACF,IAAI,EACJ,KAAU,EACV,GAAgC,EAChC,WAAW,EACX,cAAwD,GACzD,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GACA,OAAO,CAAC,GAAG,CAAC,CA6Bd;AAED,uEAAuE;AACvE,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AA+DF;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,eAAe,CAAC,EACvD,EACE,IAAI,EACJ,KAAK,EACL,SAAS,GACV,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
1
+ {"version":3,"file":"simulation.d.ts","sourceRoot":"","sources":["../../../src/review/simulation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,YAAY,EAAE,MAAM,MAAM,CAAC;AAI9E,+EAA+E;AAC/E,eAAO,MAAM,0BAA0B,YAAc,CAAC;AAEtD,+EAA+E;AAC/E,eAAO,MAAM,uCAAuC,OAAQ,CAAC;AAE7D;;;;;;;;;GASG;AACH,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,EACrC,EACE,IAAI,EACJ,EAAE,EACF,IAAI,EACJ,KAAU,EACV,GAAgC,EAChC,WAAW,EACX,cAAwD,EACxD,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,GAAG,CAAC,CAmCd;AAED,uEAAuE;AACvE,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iGAAiG;IACjG,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,kEACiC,CAAC;AAElE,yDAAyD;AACzD,eAAO,MAAM,yBAAyB,4CACK,CAAC;AAE5C;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKnD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAsChD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAMrE;AAkDD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,eAAe,CAAC,EACvD,EACE,IAAI,EACJ,KAAK,EACL,SAAS,EACT,OAAO,GACR,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,2GAA2G;IAC3G,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,OAAO,CAAC,IAAI,CAAC,CA2Df"}