@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.
- package/bin/wallet-check.mjs +495 -0
- package/dist/cjs/actions/suckerPairs.d.ts +5 -3
- package/dist/cjs/actions/suckerPairs.d.ts.map +1 -1
- package/dist/cjs/actions/suckerPairs.js +6 -26
- package/dist/cjs/actions/suckerPairs.js.map +1 -1
- package/dist/cjs/pause.d.ts +2 -0
- package/dist/cjs/pause.d.ts.map +1 -1
- package/dist/cjs/pause.js +17 -0
- package/dist/cjs/pause.js.map +1 -1
- package/dist/cjs/review/confirm.d.ts +56 -0
- package/dist/cjs/review/confirm.d.ts.map +1 -0
- package/dist/cjs/review/confirm.js +99 -0
- package/dist/cjs/review/confirm.js.map +1 -0
- package/dist/cjs/review/contractWrite.d.ts +5 -3
- package/dist/cjs/review/contractWrite.d.ts.map +1 -1
- package/dist/cjs/review/contractWrite.js +10 -8
- package/dist/cjs/review/contractWrite.js.map +1 -1
- package/dist/cjs/review/decode.d.ts +19 -1
- package/dist/cjs/review/decode.d.ts.map +1 -1
- package/dist/cjs/review/decode.js +30 -11
- package/dist/cjs/review/decode.js.map +1 -1
- package/dist/cjs/review/decodeCall.d.ts +21 -0
- package/dist/cjs/review/decodeCall.d.ts.map +1 -0
- package/dist/cjs/review/decodeCall.js +183 -0
- package/dist/cjs/review/decodeCall.js.map +1 -0
- package/dist/cjs/review/heldWrite.d.ts +4 -0
- package/dist/cjs/review/heldWrite.d.ts.map +1 -1
- package/dist/cjs/review/heldWrite.js +35 -31
- package/dist/cjs/review/heldWrite.js.map +1 -1
- package/dist/cjs/review/index.d.ts +12 -1
- package/dist/cjs/review/index.d.ts.map +1 -1
- package/dist/cjs/review/index.js +29 -1
- package/dist/cjs/review/index.js.map +1 -1
- package/dist/cjs/review/intents.d.ts +10 -0
- package/dist/cjs/review/intents.d.ts.map +1 -1
- package/dist/cjs/review/intents.js +13 -0
- package/dist/cjs/review/intents.js.map +1 -1
- package/dist/cjs/review/lineError.d.ts +72 -0
- package/dist/cjs/review/lineError.d.ts.map +1 -0
- package/dist/cjs/review/lineError.js +76 -0
- package/dist/cjs/review/lineError.js.map +1 -0
- package/dist/cjs/review/messages.d.ts +15 -3
- package/dist/cjs/review/messages.d.ts.map +1 -1
- package/dist/cjs/review/messages.js +16 -4
- package/dist/cjs/review/messages.js.map +1 -1
- package/dist/cjs/review/model.d.ts +149 -0
- package/dist/cjs/review/model.d.ts.map +1 -0
- package/dist/cjs/review/model.js +750 -0
- package/dist/cjs/review/model.js.map +1 -0
- package/dist/cjs/review/plan.d.ts +61 -0
- package/dist/cjs/review/plan.d.ts.map +1 -0
- package/dist/cjs/review/plan.js +143 -0
- package/dist/cjs/review/plan.js.map +1 -0
- package/dist/cjs/review/react/index.d.ts +1 -0
- package/dist/cjs/review/react/index.d.ts.map +1 -1
- package/dist/cjs/review/react/index.js +1 -0
- package/dist/cjs/review/react/index.js.map +1 -1
- package/dist/cjs/review/react/useHeldSend.js +3 -4
- package/dist/cjs/review/react/useHeldSend.js.map +1 -1
- package/dist/cjs/review/react/useHeldWrite.d.ts.map +1 -1
- package/dist/cjs/review/react/useHeldWrite.js +2 -1
- package/dist/cjs/review/react/useHeldWrite.js.map +1 -1
- package/dist/cjs/review/react/useReviewedRun.d.ts +122 -0
- package/dist/cjs/review/react/useReviewedRun.d.ts.map +1 -0
- package/dist/cjs/review/react/useReviewedRun.js +443 -0
- package/dist/cjs/review/react/useReviewedRun.js.map +1 -0
- package/dist/cjs/review/receipt.d.ts +37 -1
- package/dist/cjs/review/receipt.d.ts.map +1 -1
- package/dist/cjs/review/receipt.js +76 -3
- package/dist/cjs/review/receipt.js.map +1 -1
- package/dist/cjs/review/relayr.d.ts +13 -4
- package/dist/cjs/review/relayr.d.ts.map +1 -1
- package/dist/cjs/review/relayr.js +52 -8
- package/dist/cjs/review/relayr.js.map +1 -1
- package/dist/cjs/review/relayrSend.d.ts +106 -0
- package/dist/cjs/review/relayrSend.d.ts.map +1 -0
- package/dist/cjs/review/relayrSend.js +795 -0
- package/dist/cjs/review/relayrSend.js.map +1 -0
- package/dist/cjs/review/reviewQueue.d.ts +10 -9
- package/dist/cjs/review/reviewQueue.d.ts.map +1 -1
- package/dist/cjs/review/reviewQueue.js +19 -29
- package/dist/cjs/review/reviewQueue.js.map +1 -1
- package/dist/cjs/review/reviewRequests.d.ts +86 -0
- package/dist/cjs/review/reviewRequests.d.ts.map +1 -0
- package/dist/cjs/review/reviewRequests.js +266 -0
- package/dist/cjs/review/reviewRequests.js.map +1 -0
- package/dist/cjs/review/safeRelayr.d.ts +3 -1
- package/dist/cjs/review/safeRelayr.d.ts.map +1 -1
- package/dist/cjs/review/safeRelayr.js +9 -9
- package/dist/cjs/review/safeRelayr.js.map +1 -1
- package/dist/cjs/review/safeSend.d.ts +69 -0
- package/dist/cjs/review/safeSend.d.ts.map +1 -0
- package/dist/cjs/review/safeSend.js +306 -0
- package/dist/cjs/review/safeSend.js.map +1 -0
- package/dist/cjs/review/send.d.ts +272 -0
- package/dist/cjs/review/send.d.ts.map +1 -0
- package/dist/cjs/review/send.js +1163 -0
- package/dist/cjs/review/send.js.map +1 -0
- package/dist/cjs/review/sequence.d.ts +77 -0
- package/dist/cjs/review/sequence.d.ts.map +1 -0
- package/dist/cjs/review/sequence.js +232 -0
- package/dist/cjs/review/sequence.js.map +1 -0
- package/dist/cjs/review/sign.d.ts +111 -0
- package/dist/cjs/review/sign.d.ts.map +1 -0
- package/dist/cjs/review/sign.js +378 -0
- package/dist/cjs/review/sign.js.map +1 -0
- package/dist/cjs/review/simulation.d.ts +41 -2
- package/dist/cjs/review/simulation.d.ts.map +1 -1
- package/dist/cjs/review/simulation.js +99 -29
- package/dist/cjs/review/simulation.js.map +1 -1
- package/dist/cjs/review/transaction-message.d.ts +13 -0
- package/dist/cjs/review/transaction-message.d.ts.map +1 -1
- package/dist/cjs/review/transaction-message.js +25 -0
- package/dist/cjs/review/transaction-message.js.map +1 -1
- package/dist/cjs/review/transactionReview.d.ts +27 -19
- package/dist/cjs/review/transactionReview.d.ts.map +1 -1
- package/dist/cjs/review/transactionReview.js +22 -63
- package/dist/cjs/review/transactionReview.js.map +1 -1
- package/dist/cjs/review/wallet.d.ts +98 -0
- package/dist/cjs/review/wallet.d.ts.map +1 -0
- package/dist/cjs/review/wallet.js +234 -0
- package/dist/cjs/review/wallet.js.map +1 -0
- package/dist/cjs/review/writeHold.d.ts +138 -13
- package/dist/cjs/review/writeHold.d.ts.map +1 -1
- package/dist/cjs/review/writeHold.js +98 -18
- package/dist/cjs/review/writeHold.js.map +1 -1
- package/dist/cjs/review/writeRecovery.d.ts +17 -1
- package/dist/cjs/review/writeRecovery.d.ts.map +1 -1
- package/dist/cjs/review/writeRecovery.js +146 -45
- package/dist/cjs/review/writeRecovery.js.map +1 -1
- package/dist/cjs/safeService.d.ts +27 -4
- package/dist/cjs/safeService.d.ts.map +1 -1
- package/dist/cjs/safeService.js +120 -3
- package/dist/cjs/safeService.js.map +1 -1
- package/dist/cjs/testing.d.ts +24 -0
- package/dist/cjs/testing.d.ts.map +1 -1
- package/dist/cjs/testing.js +26 -1
- package/dist/cjs/testing.js.map +1 -1
- package/dist/cjs/v6/defifa.d.ts.map +1 -1
- package/dist/cjs/v6/defifa.js +24 -23
- package/dist/cjs/v6/defifa.js.map +1 -1
- package/dist/cjs/v6/executionErrors.d.ts.map +1 -1
- package/dist/cjs/v6/executionErrors.js +3 -2
- package/dist/cjs/v6/executionErrors.js.map +1 -1
- package/dist/cjs/v6/pay.d.ts +25 -8
- package/dist/cjs/v6/pay.d.ts.map +1 -1
- package/dist/cjs/v6/pay.js +117 -23
- package/dist/cjs/v6/pay.js.map +1 -1
- package/dist/cjs/v6/suckers.d.ts +30 -0
- package/dist/cjs/v6/suckers.d.ts.map +1 -1
- package/dist/cjs/v6/suckers.js +69 -5
- package/dist/cjs/v6/suckers.js.map +1 -1
- package/dist/esm/actions/suckerPairs.d.ts +5 -3
- package/dist/esm/actions/suckerPairs.d.ts.map +1 -1
- package/dist/esm/actions/suckerPairs.js +7 -27
- package/dist/esm/actions/suckerPairs.js.map +1 -1
- package/dist/esm/pause.d.ts +2 -0
- package/dist/esm/pause.d.ts.map +1 -1
- package/dist/esm/pause.js +16 -0
- package/dist/esm/pause.js.map +1 -1
- package/dist/esm/review/confirm.d.ts +56 -0
- package/dist/esm/review/confirm.d.ts.map +1 -0
- package/dist/esm/review/confirm.js +93 -0
- package/dist/esm/review/confirm.js.map +1 -0
- package/dist/esm/review/contractWrite.d.ts +5 -3
- package/dist/esm/review/contractWrite.d.ts.map +1 -1
- package/dist/esm/review/contractWrite.js +10 -8
- package/dist/esm/review/contractWrite.js.map +1 -1
- package/dist/esm/review/decode.d.ts +19 -1
- package/dist/esm/review/decode.d.ts.map +1 -1
- package/dist/esm/review/decode.js +29 -14
- package/dist/esm/review/decode.js.map +1 -1
- package/dist/esm/review/decodeCall.d.ts +21 -0
- package/dist/esm/review/decodeCall.d.ts.map +1 -0
- package/dist/esm/review/decodeCall.js +180 -0
- package/dist/esm/review/decodeCall.js.map +1 -0
- package/dist/esm/review/heldWrite.d.ts +4 -0
- package/dist/esm/review/heldWrite.d.ts.map +1 -1
- package/dist/esm/review/heldWrite.js +34 -30
- package/dist/esm/review/heldWrite.js.map +1 -1
- package/dist/esm/review/index.d.ts +12 -1
- package/dist/esm/review/index.d.ts.map +1 -1
- package/dist/esm/review/index.js +12 -1
- package/dist/esm/review/index.js.map +1 -1
- package/dist/esm/review/intents.d.ts +10 -0
- package/dist/esm/review/intents.d.ts.map +1 -1
- package/dist/esm/review/intents.js +12 -0
- package/dist/esm/review/intents.js.map +1 -1
- package/dist/esm/review/lineError.d.ts +72 -0
- package/dist/esm/review/lineError.d.ts.map +1 -0
- package/dist/esm/review/lineError.js +68 -0
- package/dist/esm/review/lineError.js.map +1 -0
- package/dist/esm/review/messages.d.ts +15 -3
- package/dist/esm/review/messages.d.ts.map +1 -1
- package/dist/esm/review/messages.js +15 -3
- package/dist/esm/review/messages.js.map +1 -1
- package/dist/esm/review/model.d.ts +149 -0
- package/dist/esm/review/model.d.ts.map +1 -0
- package/dist/esm/review/model.js +746 -0
- package/dist/esm/review/model.js.map +1 -0
- package/dist/esm/review/plan.d.ts +61 -0
- package/dist/esm/review/plan.d.ts.map +1 -0
- package/dist/esm/review/plan.js +136 -0
- package/dist/esm/review/plan.js.map +1 -0
- package/dist/esm/review/react/index.d.ts +1 -0
- package/dist/esm/review/react/index.d.ts.map +1 -1
- package/dist/esm/review/react/index.js +1 -0
- package/dist/esm/review/react/index.js.map +1 -1
- package/dist/esm/review/react/useHeldSend.js +3 -4
- package/dist/esm/review/react/useHeldSend.js.map +1 -1
- package/dist/esm/review/react/useHeldWrite.d.ts.map +1 -1
- package/dist/esm/review/react/useHeldWrite.js +2 -1
- package/dist/esm/review/react/useHeldWrite.js.map +1 -1
- package/dist/esm/review/react/useReviewedRun.d.ts +122 -0
- package/dist/esm/review/react/useReviewedRun.d.ts.map +1 -0
- package/dist/esm/review/react/useReviewedRun.js +439 -0
- package/dist/esm/review/react/useReviewedRun.js.map +1 -0
- package/dist/esm/review/receipt.d.ts +37 -1
- package/dist/esm/review/receipt.d.ts.map +1 -1
- package/dist/esm/review/receipt.js +72 -2
- package/dist/esm/review/receipt.js.map +1 -1
- package/dist/esm/review/relayr.d.ts +13 -4
- package/dist/esm/review/relayr.d.ts.map +1 -1
- package/dist/esm/review/relayr.js +51 -8
- package/dist/esm/review/relayr.js.map +1 -1
- package/dist/esm/review/relayrSend.d.ts +106 -0
- package/dist/esm/review/relayrSend.d.ts.map +1 -0
- package/dist/esm/review/relayrSend.js +787 -0
- package/dist/esm/review/relayrSend.js.map +1 -0
- package/dist/esm/review/reviewQueue.d.ts +10 -9
- package/dist/esm/review/reviewQueue.d.ts.map +1 -1
- package/dist/esm/review/reviewQueue.js +17 -26
- package/dist/esm/review/reviewQueue.js.map +1 -1
- package/dist/esm/review/reviewRequests.d.ts +86 -0
- package/dist/esm/review/reviewRequests.d.ts.map +1 -0
- package/dist/esm/review/reviewRequests.js +263 -0
- package/dist/esm/review/reviewRequests.js.map +1 -0
- package/dist/esm/review/safeRelayr.d.ts +3 -1
- package/dist/esm/review/safeRelayr.d.ts.map +1 -1
- package/dist/esm/review/safeRelayr.js +9 -9
- package/dist/esm/review/safeRelayr.js.map +1 -1
- package/dist/esm/review/safeSend.d.ts +69 -0
- package/dist/esm/review/safeSend.d.ts.map +1 -0
- package/dist/esm/review/safeSend.js +301 -0
- package/dist/esm/review/safeSend.js.map +1 -0
- package/dist/esm/review/send.d.ts +272 -0
- package/dist/esm/review/send.d.ts.map +1 -0
- package/dist/esm/review/send.js +1156 -0
- package/dist/esm/review/send.js.map +1 -0
- package/dist/esm/review/sequence.d.ts +77 -0
- package/dist/esm/review/sequence.d.ts.map +1 -0
- package/dist/esm/review/sequence.js +223 -0
- package/dist/esm/review/sequence.js.map +1 -0
- package/dist/esm/review/sign.d.ts +111 -0
- package/dist/esm/review/sign.d.ts.map +1 -0
- package/dist/esm/review/sign.js +372 -0
- package/dist/esm/review/sign.js.map +1 -0
- package/dist/esm/review/simulation.d.ts +41 -2
- package/dist/esm/review/simulation.d.ts.map +1 -1
- package/dist/esm/review/simulation.js +95 -29
- package/dist/esm/review/simulation.js.map +1 -1
- package/dist/esm/review/transaction-message.d.ts +13 -0
- package/dist/esm/review/transaction-message.d.ts.map +1 -1
- package/dist/esm/review/transaction-message.js +23 -0
- package/dist/esm/review/transaction-message.js.map +1 -1
- package/dist/esm/review/transactionReview.d.ts +27 -19
- package/dist/esm/review/transactionReview.d.ts.map +1 -1
- package/dist/esm/review/transactionReview.js +19 -56
- package/dist/esm/review/transactionReview.js.map +1 -1
- package/dist/esm/review/wallet.d.ts +98 -0
- package/dist/esm/review/wallet.d.ts.map +1 -0
- package/dist/esm/review/wallet.js +227 -0
- package/dist/esm/review/wallet.js.map +1 -0
- package/dist/esm/review/writeHold.d.ts +138 -13
- package/dist/esm/review/writeHold.d.ts.map +1 -1
- package/dist/esm/review/writeHold.js +96 -19
- package/dist/esm/review/writeHold.js.map +1 -1
- package/dist/esm/review/writeRecovery.d.ts +17 -1
- package/dist/esm/review/writeRecovery.d.ts.map +1 -1
- package/dist/esm/review/writeRecovery.js +149 -48
- package/dist/esm/review/writeRecovery.js.map +1 -1
- package/dist/esm/safeService.d.ts +27 -4
- package/dist/esm/safeService.d.ts.map +1 -1
- package/dist/esm/safeService.js +119 -4
- package/dist/esm/safeService.js.map +1 -1
- package/dist/esm/testing.d.ts +24 -0
- package/dist/esm/testing.d.ts.map +1 -1
- package/dist/esm/testing.js +23 -1
- package/dist/esm/testing.js.map +1 -1
- package/dist/esm/v6/defifa.d.ts.map +1 -1
- package/dist/esm/v6/defifa.js +24 -23
- package/dist/esm/v6/defifa.js.map +1 -1
- package/dist/esm/v6/executionErrors.d.ts.map +1 -1
- package/dist/esm/v6/executionErrors.js +3 -2
- package/dist/esm/v6/executionErrors.js.map +1 -1
- package/dist/esm/v6/pay.d.ts +25 -8
- package/dist/esm/v6/pay.d.ts.map +1 -1
- package/dist/esm/v6/pay.js +115 -22
- package/dist/esm/v6/pay.js.map +1 -1
- package/dist/esm/v6/suckers.d.ts +30 -0
- package/dist/esm/v6/suckers.d.ts.map +1 -1
- package/dist/esm/v6/suckers.js +67 -5
- package/dist/esm/v6/suckers.js.map +1 -1
- package/package.json +11 -2
|
@@ -0,0 +1,378 @@
|
|
|
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, nor is a self-reviewing wallet. A definite wallet
|
|
255
|
+
* rejection (EIP-1193 4001) returns no
|
|
256
|
+
* signature and throws {@link TransactionReviewCancelledError}.
|
|
257
|
+
*/
|
|
258
|
+
async function signPrepared(prepared, account, adapter,
|
|
259
|
+
/** The caller's final gate before each signature; it throws to stop. */
|
|
260
|
+
beforeSign,
|
|
261
|
+
/** The caller's async recheck before each signature, ahead of `beforeSign`. */
|
|
262
|
+
reverify) {
|
|
263
|
+
const signatures = [];
|
|
264
|
+
const chained = adapter.kind !== "self-reviewing";
|
|
265
|
+
for (const { chainId, typedData, message } of prepared) {
|
|
266
|
+
signatures.push(await (0, contractWrite_js_1.submitReviewedContractWrite)({
|
|
267
|
+
request: { chainId },
|
|
268
|
+
expectedAccount: account,
|
|
269
|
+
review: () => Promise.resolve(),
|
|
270
|
+
switchChain: async (id) => {
|
|
271
|
+
if (chained && typedData && adapter.chainId() !== id) {
|
|
272
|
+
await adapter.switchChain(id);
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
currentAccount: () => adapter.account(),
|
|
276
|
+
...(reverify ? { reverify } : {}),
|
|
277
|
+
simulate: async () => undefined,
|
|
278
|
+
beforeSend: () => {
|
|
279
|
+
beforeSign?.();
|
|
280
|
+
if (chained && typedData && adapter.chainId() !== chainId) {
|
|
281
|
+
throw new lineError_js_1.ReviewLineError("Your wallet changed networks. Review the signature again.");
|
|
282
|
+
}
|
|
283
|
+
// Last, after every callback above could have run.
|
|
284
|
+
if (adapter.account()?.toLowerCase() !== account.toLowerCase()) {
|
|
285
|
+
throw new lineError_js_1.ReviewLineError("The connected account changed. Review again.");
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
// Only the wallet's own answer can read as a rejection.
|
|
289
|
+
write: async () => {
|
|
290
|
+
try {
|
|
291
|
+
return await (typedData
|
|
292
|
+
? adapter.signTypedData(typedData)
|
|
293
|
+
: adapter.signMessage(message));
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
if ((0, contractWrite_js_1.isDefiniteWalletRejection)(error)) {
|
|
297
|
+
throw new reviewQueue_js_1.TransactionReviewCancelledError(REJECTED);
|
|
298
|
+
}
|
|
299
|
+
throw error;
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
}));
|
|
303
|
+
}
|
|
304
|
+
return signatures;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* The calls a prepared signature lets someone run, as a plan matches them,
|
|
308
|
+
* read from the exact payload signed: a Safe transaction's CALL or
|
|
309
|
+
* MultiSendCallOnly calls, from the Safe, when it pays no refund and its
|
|
310
|
+
* safeTxGas is 0 (so a failed call reverts, not spends the nonce), or a
|
|
311
|
+
* forward request's call, from its signer. Any other signature is refused
|
|
312
|
+
* under a plan.
|
|
313
|
+
*/
|
|
314
|
+
function plannedCallsOf({ chainId, typedData, }) {
|
|
315
|
+
const message = typedData?.message;
|
|
316
|
+
if (typedData?.primaryType === "SafeTx" && message) {
|
|
317
|
+
const { to, data, value, operation, safeTxGas, gasPrice } = message;
|
|
318
|
+
const safe = typedData.domain?.verifyingContract;
|
|
319
|
+
const inner = operation === 1
|
|
320
|
+
? (0, safe_js_1.multiSendCallsOf)({ to, data, operation })
|
|
321
|
+
: [{ to, data, value }];
|
|
322
|
+
if (safe && inner && safeTxGas === 0n && gasPrice === 0n)
|
|
323
|
+
return inner.map((call) => ({
|
|
324
|
+
chainId,
|
|
325
|
+
from: safe,
|
|
326
|
+
to: call.to,
|
|
327
|
+
data: call.data,
|
|
328
|
+
value: call.value,
|
|
329
|
+
}));
|
|
330
|
+
}
|
|
331
|
+
else if (typedData?.primaryType === "ForwardRequest" && message) {
|
|
332
|
+
const { from, to, data, value, gas } = message;
|
|
333
|
+
return [{ chainId, from, to, data, value, gas }];
|
|
334
|
+
}
|
|
335
|
+
throw new lineError_js_1.ReviewLineError(plan_js_1.REVIEWED_PLAN_REFUSED_LINE);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Signs only what the person reviewed: one prompt for every signature, with
|
|
339
|
+
* the exact typed data or text and the calls each lets someone run, decoded.
|
|
340
|
+
* Nothing is signed unless the review handler returns core's confirmation
|
|
341
|
+
* ({@link registerReviewHandler}). The signatures come back in order.
|
|
342
|
+
*
|
|
343
|
+
* A self-reviewing adapter (Signa) is never prompted: `onPreview` gets the
|
|
344
|
+
* model, and the adapter the raw typed data or text to review on its own page.
|
|
345
|
+
*/
|
|
346
|
+
async function signReviewed(signatures, action, deps) {
|
|
347
|
+
const { adapter } = deps;
|
|
348
|
+
const { account } = action;
|
|
349
|
+
await (0, wallet_js_1.walletReady)(adapter);
|
|
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
|
+
const own = adapter.kind === "self-reviewing";
|
|
360
|
+
if (action.plan)
|
|
361
|
+
(0, plan_js_1.spendPlan)(action.plan, account, prepared.flatMap(plannedCallsOf));
|
|
362
|
+
if (own || !action.plan) {
|
|
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
|
+
if (own)
|
|
371
|
+
deps.onPreview?.(model);
|
|
372
|
+
// Nothing is sent, so there is nothing to simulate.
|
|
373
|
+
else
|
|
374
|
+
await (0, confirm_js_1.promptReview)(model, Promise.resolve({ status: "passed" }), Promise.resolve(model), action.signal);
|
|
375
|
+
}
|
|
376
|
+
return signPrepared(prepared, account, adapter, undefined, action.reverify);
|
|
377
|
+
}
|
|
378
|
+
//# sourceMappingURL=sign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../../../src/review/sign.ts"],"names":[],"mappings":";;AAoKA,4CA6NC;AAWD,oCAwDC;AAUD,wCAsCC;AAWD,oCAyDC;AAxjBD,iDAAiD;AACjD,+BAQc;AACd,wCAA8C;AAC9C,kDAAsD;AACtD,sDAK2B;AAC3B,iDAG0B;AAC1B,6CAA4C;AAC5C,yDAG4B;AAC5B,2CAA0C;AAC1C,mDAAmD;AACnD,yCAIoB;AACpB,uCAKmB;AACnB,2CAKqB;AACrB,qDAAmE;AAEnE,2CAA8D;AAiD9D,MAAM,QAAQ,GAAG,+CAA+C,CAAC;AAEjE,SAAS,cAAc,CAAC,OAAgB;IACtC,IACE,OAAO,OAAO,KAAK,QAAQ;QAC3B,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;QAC9B,OAAO,IAAI,CAAC,EACZ,CAAC;QACD,MAAM,IAAI,8BAAe,CAAC,mBAAmB,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,KAAc;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAA,gBAAS,EAAC,KAAK,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,8BAAe,CAAC,WAAW,IAAI,WAAW,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,IAAA,iBAAU,EAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,iFAAiF;AACjF,SAAS,WAAW,CAAC,IAAY,EAAE,KAAc;IAC/C,MAAM,MAAM,GAAG,IAAA,sBAAO,EAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,MAAM,KAAK,IAAI;QAAE,MAAM,IAAI,8BAAe,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;IACnE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,2CAA2C;AAC3C,SAAS,MAAM,CAAI,KAAQ;IACzB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,QAAQ,CACf,IAA+B,EAC/B,OAAe,EACf,OAAiE,EACjE,QAA6D,EAAE;IAE/D,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9D,IAAI,SAAS;QAAE,IAAA,oBAAa,EAAC,SAAS,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO;QACP,SAAS;QACT,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QAChD,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE;KAC7C,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAC9B,SAA4B,EAC5B,OAAgB;IAEhB,MAAM,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC;IAC7B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;YACxC,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACvD,MAAM,KAAK,GAAY,EAAE,EAAE,UAAU,CAAC;YACtC,MAAM,OAAO,GAAG,IAAA,uCAAsB,EAAC,EAAE,CAAC,CAAC;YAC3C,yDAAyD;YACzD,IACE,KAAK,IAAI,IAAI;gBACb,CAAC,OAAO,KAAK,KAAK,QAAQ;oBACxB,KAAK,CAAC,WAAW,EAAE;wBACjB,IAAA,oBAAa,EAAC;4BACZ,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE;4BAC1C,KAAK,EAAE,8BAAa;4BACpB,WAAW,EAAE,QAAQ;4BACrB,OAAO;yBACR,CAAC,CAAC;gBAEP,MAAM,IAAI,8BAAe,CACvB,oEAAoE,CACrE,CAAC;YACJ,MAAM,KAAK,GAAG,IAAA,0BAAgB,EAAC,OAAO,CAAC,CAAC;YACxC,IAAI,OAAO,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtC,MAAM,IAAI,8BAAe,CACvB,kGAAkG,CACnG,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG;gBACX,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK;gBACb,OAAO,CAAC,IAAI;gBACZ,OAAO,CAAC,SAAS;gBACjB,OAAO,CAAC,SAAS;gBACjB,OAAO,CAAC,OAAO;gBACf,OAAO,CAAC,QAAQ;gBAChB,OAAO,CAAC,QAAQ;gBAChB,OAAO,CAAC,cAAc;gBACtB,IAAI;aACI,CAAC;YACX,OAAO,QAAQ,CACb,IAAI,EACJ,EAAE,EACF;gBACE,SAAS,EAAE;oBACT,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE;oBAC1C,KAAK,EAAE,8BAAa;oBACpB,WAAW,EAAE,QAAQ;oBACrB,OAAO;iBACR;aACF,EACD;gBACE,qEAAqE;gBACrE,KAAK,EAAE;oBACL;wBACE,OAAO,EAAE,EAAE;wBACX,EAAE,EAAE,iBAAiB;wBACrB,IAAI,EAAE,IAAA,yBAAkB,EAAC;4BACvB,GAAG,EAAE,8BAAa;4BAClB,YAAY,EAAE,iBAAiB;4BAC/B,IAAI;yBACL,CAAC;wBACF,GAAG,EAAE,8BAAa;wBAClB,YAAY,EAAE,iBAAiB;wBAC/B,IAAI;wBACJ,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,YAAY,EAAE,MAAM;wBACpB,GAAG,CAAC,KAAK;4BACP,CAAC,CAAC;gCACE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,IAAA,gCAAgB,EAAC;oCACf,OAAO,EAAE,EAAE;oCACX,IAAI,EAAE,iBAAiB;oCACvB,GAAG,IAAI;iCACR,CAAC,CACH;6BACF;4BACH,CAAC,CAAC,EAAE,CAAC;qBACR;iBACF;aACF,CACF,CAAC;QACJ,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;YACvC,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,iBAAiB,GAAG,IAAA,2BAAe,EAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACvB,MAAM,IAAI,8BAAe,CACvB,2CAA2C,EAAE,uBAAuB,CACrE,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;YAChE,IACE,OAAO,IAAI,KAAK,QAAQ;gBACxB,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,EAC5C,CAAC;gBACD,MAAM,IAAI,8BAAe,CACvB,qEAAqE,CACtE,CAAC;YACJ,CAAC;YACD,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC;gBAC/B,QAAQ,GAAG,IAAA,mCAAuB,GAAE,EACpC,CAAC;gBACD,MAAM,IAAI,8BAAe,CACvB,wEAAwE,CACzE,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,IAAA,yBAAU,EAAC,IAAI,CAAC;gBACnB,MAAM,IAAI,8BAAe,CAAC,6BAA6B,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG;gBACd,IAAI,EAAE,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC;gBACpC,EAAE,EAAE,cAAc,CAAC,aAAa,EAAE,EAAE,CAAC;gBACrC,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;gBAClC,GAAG,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC5B,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC;gBAClC,QAAQ;gBACR,IAAI;aACL,CAAC;YACF,OAAO,QAAQ,CACb,IAAI,EACJ,EAAE,EACF;gBACE,SAAS,EAAE;oBACT,MAAM,EAAE;wBACN,IAAI,EAAE,UAAU;wBAChB,OAAO,EAAE,GAAG;wBACZ,OAAO,EAAE,EAAE;wBACX,iBAAiB;qBAClB;oBACD,KAAK,EAAE,iCAAqB;oBAC5B,WAAW,EAAE,gBAAgB;oBAC7B,OAAO;iBACR;aACF,EACD;gBACE,KAAK,EAAE;oBACL,IAAA,gCAAgB,EAAC;wBACf,OAAO,EAAE,EAAE;wBACX,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,EAAE,EAAE,OAAO,CAAC,EAAE;wBACd,IAAI;wBACJ,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,GAAG,EAAE,OAAO,CAAC,GAAG;qBACjB,CAAC;iBACH;aACF,CACF,CAAC;QACJ,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EACJ,OAAO,EACP,KAAK,EACL,OAAO,EACP,MAAM,EACN,UAAU,EACV,KAAK,EACL,WAAW,GACZ,GAAG,SAAS,CAAC,aAAa,CAAC;YAC5B,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,aAAa,GAAG;gBACpB,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC;gBACrC,OAAO,EAAE,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC;gBAC3C,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACrC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;gBACzD,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC1C,WAAW,EAAE,WAAW,CAAC,oBAAoB,EAAE,WAAW,CAAC;aAC3B,CAAC;YACnC,OAAO,QAAQ,CACb,IAAI,EACJ,EAAE,EACF,EAAE,SAAS,EAAE,IAAA,6BAAgB,EAAC,aAAa,CAAC,EAAE,EAC9C;gBACE,KAAK,EAAE;oBACL;wBACE,KAAK,EAAE,mBAAmB;wBAC1B,IAAI,EAAE,IAAA,uBAAW,EAAC,EAAE,EAAE,aAAa,CAAC;qBACrC;iBACF;aACF,CACF,CAAC;QACJ,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;YAC9C,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,MAAM,IAAI,8BAAe,CACvB,qDAAqD,CACtD,CAAC;YACJ,CAAC;YACD,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAChE,OAAO,QAAQ,CACb,IAAI,EACJ,EAAE,EACF,EAAE,OAAO,EAAE,EACX;gBACE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC7B,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;oBAC1C,IAAI,CAAC,IAAA,yBAAU,EAAC,IAAI,CAAC;wBACnB,MAAM,IAAI,8BAAe,CAAC,oBAAoB,CAAC,CAAC;oBAClD,OAAO,IAAA,gCAAgB,EAAC;wBACtB,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC;wBAChC,EAAE,EAAE,cAAc,CAAC,aAAa,EAAE,EAAE,CAAC;wBACrC,IAAI;wBACJ,KAAK,EAAE,WAAW,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;qBAC9C,CAAC,CAAC;gBACL,CAAC,CAAC;aACH,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,IAAI,8BAAe,CACvB,mEAAmE,CACpE,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,YAAY,CAChC,QAAsC,EACtC,OAAgB,EAChB,OAAsB;AACtB,wEAAwE;AACxE,UAAuB;AACvB,+EAA+E;AAC/E,QAA8B;IAE9B,MAAM,UAAU,GAAU,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,gBAAgB,CAAC;IAClD,KAAK,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,QAAQ,EAAE,CAAC;QACvD,UAAU,CAAC,IAAI,CACb,MAAM,IAAA,8CAA2B,EAAC;YAChC,OAAO,EAAE,EAAE,OAAO,EAAE;YACpB,eAAe,EAAE,OAAO;YACxB,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;YAC/B,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;gBACxB,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;oBACrD,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;YACD,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;YACvC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS;YAC/B,UAAU,EAAE,GAAG,EAAE;gBACf,UAAU,EAAE,EAAE,CAAC;gBACf,IAAI,OAAO,IAAI,SAAS,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,OAAO,EAAE,CAAC;oBAC1D,MAAM,IAAI,8BAAe,CACvB,2DAA2D,CAC5D,CAAC;gBACJ,CAAC;gBACD,mDAAmD;gBACnD,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;oBAC/D,MAAM,IAAI,8BAAe,CACvB,8CAA8C,CAC/C,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,wDAAwD;YACxD,KAAK,EAAE,KAAK,IAAI,EAAE;gBAChB,IAAI,CAAC;oBACH,OAAO,MAAM,CAAC,SAAS;wBACrB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC;wBAClC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,OAAQ,CAAC,CAAC,CAAC;gBACrC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,IAAA,4CAAyB,EAAC,KAAK,CAAC,EAAE,CAAC;wBACrC,MAAM,IAAI,gDAA+B,CAAC,QAAQ,CAAC,CAAC;oBACtD,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,SAAS,GACS;IAClB,MAAM,OAAO,GAAG,SAAS,EAAE,OAA8C,CAAC;IAC1E,IAAI,SAAS,EAAE,WAAW,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC;QACnD,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAO3D,CAAC;QACF,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;QACjD,MAAM,KAAK,GACT,SAAS,KAAK,CAAC;YACb,CAAC,CAAC,IAAA,0BAAgB,EAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAC3C,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5B,IAAI,IAAI,IAAI,KAAK,IAAI,SAAS,KAAK,EAAE,IAAI,QAAQ,KAAK,EAAE;YACtD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC1B,OAAO;gBACP,IAAI,EAAE,IAAI;gBACV,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC,CAAC;IACR,CAAC;SAAM,IAAI,SAAS,EAAE,WAAW,KAAK,gBAAgB,IAAI,OAAO,EAAE,CAAC;QAClE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,OAMtC,CAAC;QACF,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,IAAI,8BAAe,CAAC,oCAA0B,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,YAAY,CAChC,UAAwC,EACxC,MAeC,EACD,IAGC;IAED,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAC3B,MAAM,IAAA,uBAAW,EAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IACpC,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,8BAAe,CAAC,yBAAyB,CAAC,CAAC;IACrE,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,8BAAe,CAAC,8CAA8C,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CACjD,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CACrC,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,MAAM;QAAE,MAAM,IAAI,8BAAe,CAAC,2BAA2B,CAAC,CAAC;IAC7E,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,KAAK,gBAAgB,CAAC;IAC9C,IAAI,MAAM,CAAC,IAAI;QACb,IAAA,mBAAS,EAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IACpE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,IAAA,2BAAgB,EAAC;YAC7B,KAAK,EAAE,EAAE;YACT,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC;YAChD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvD,CAAC,CAAC;QACH,IAAI,GAAG;YAAE,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;QACjC,oDAAoD;;YAElD,MAAM,IAAA,yBAAY,EAChB,KAAK,EACL,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EACrC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EACtB,MAAM,CAAC,MAAM,CACd,CAAC;IACN,CAAC;IACD,OAAO,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -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;
|
|
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"}
|