@daski/pay 0.5.1 → 0.5.3
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/README.md +5 -6
- package/dist/bin/daski.js +5 -1
- package/dist/bin/daski.js.map +1 -1
- package/dist/chain/easProfiles.d.ts +1 -1
- package/dist/chain/easProfiles.d.ts.map +1 -1
- package/dist/chain/easProfiles.js +4 -2
- package/dist/chain/easProfiles.js.map +1 -1
- package/dist/chain/reader.d.ts +42 -0
- package/dist/chain/reader.d.ts.map +1 -1
- package/dist/chain/reader.js +107 -13
- package/dist/chain/reader.js.map +1 -1
- package/dist/cli/output.d.ts.map +1 -1
- package/dist/cli/output.js +3 -1
- package/dist/cli/output.js.map +1 -1
- package/dist/cli/redact.d.ts +8 -1
- package/dist/cli/redact.d.ts.map +1 -1
- package/dist/cli/redact.js +19 -1
- package/dist/cli/redact.js.map +1 -1
- package/dist/commands/buy.d.ts.map +1 -1
- package/dist/commands/buy.js +31 -4
- package/dist/commands/buy.js.map +1 -1
- package/dist/commands/confirmation.d.ts.map +1 -1
- package/dist/commands/confirmation.js +279 -70
- package/dist/commands/confirmation.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +2 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/gateway/balance.d.ts.map +1 -1
- package/dist/gateway/balance.js +3 -1
- package/dist/gateway/balance.js.map +1 -1
- package/dist/gateway/catalog.d.ts +8 -2
- package/dist/gateway/catalog.d.ts.map +1 -1
- package/dist/gateway/catalog.js +7 -3
- package/dist/gateway/catalog.js.map +1 -1
- package/dist/gateway/client.d.ts +8 -0
- package/dist/gateway/client.d.ts.map +1 -1
- package/dist/gateway/client.js +20 -0
- package/dist/gateway/client.js.map +1 -1
- package/dist/gateway/lifecycle.d.ts.map +1 -1
- package/dist/gateway/lifecycle.js +2 -2
- package/dist/gateway/lifecycle.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/signers/circleReview.d.ts +43 -15
- package/dist/signers/circleReview.d.ts.map +1 -1
- package/dist/signers/circleReview.js +128 -29
- package/dist/signers/circleReview.js.map +1 -1
- package/dist/signers/circleReviewChild.js +8 -4
- package/dist/signers/circleReviewChild.js.map +1 -1
- package/dist/signers/circleReviewTransport.d.ts +58 -1
- package/dist/signers/circleReviewTransport.d.ts.map +1 -1
- package/dist/signers/circleReviewTransport.js +145 -6
- package/dist/signers/circleReviewTransport.js.map +1 -1
- package/dist/store/orders.d.ts +6 -0
- package/dist/store/orders.d.ts.map +1 -1
- package/dist/store/orders.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@ The Daski buyer CLI obtains a quote, validates and signs an approved payment, an
|
|
|
5
5
|
## Setup and purchase
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install -g @daski/pay@0.5.
|
|
8
|
+
npm install -g @daski/pay@0.5.3
|
|
9
9
|
export DASKI_HOST_CLASS=durable # or ephemeral
|
|
10
10
|
daski doctor --json
|
|
11
11
|
```
|
|
@@ -35,7 +35,9 @@ The command returns the actual quote and an approval identifier. After the user
|
|
|
35
35
|
| `order cancel <handle>` | Request cancellation |
|
|
36
36
|
| `order confirm <handle> --choice <Confirmed\|NotConfirmed> [--submission <sponsored\|direct>]` | Prepare and validate the user's review; sponsored: sign and submit; direct: print the validated call |
|
|
37
37
|
| `order revoke-confirmation <handle>` | Withdraw the active review, in the same mode |
|
|
38
|
-
| `order confirm <handle> --
|
|
38
|
+
| `order confirm <handle> --estimate` | Circle agent wallet: estimate the saved direct review; sends nothing |
|
|
39
|
+
| `order confirm <handle> --submit --approve-call <callHash>` | Circle agent wallet: submit the user-approved direct review through the qualified adapter, once the gateway advertises `confirmation.directReview.circleExecute` |
|
|
40
|
+
| `order confirm <handle> --resume` | Reconcile a stored sponsored submission or a Circle operation through Circle's history and the chain; direct resume never executes again |
|
|
39
41
|
| `order confirm <handle> --tx <hash>` | Direct mode: record the hash the wallet's tool reported (unverified); replaces a final, provably unrelated one |
|
|
40
42
|
| `order confirm <handle> --check [--submission <sponsored\|direct>]` | Verify a pending direct record (the receipt, the EAS event, the attestation, and the gateway's final state at or past the receipt's block); otherwise report the gateway's final state of the review, keeping an observed direct record as history. `--submission direct` returns the recorded evidence of that record, `--submission sponsored` asks the gateway |
|
|
41
43
|
| `order confirm <handle> --abandon` | Direct mode: clear a record whose transaction reverted, was never sent, or is final and provably unrelated |
|
|
@@ -57,11 +59,8 @@ Signed sponsorship keeps the preparation, exact signature, profile and operation
|
|
|
57
59
|
|
|
58
60
|
## Documentation
|
|
59
61
|
|
|
60
|
-
[Policy](../../docs/policy.md) · [Configuration](../../docs/config.md) · [Keys](../../docs/keys.md) · [Signers](../../docs/signers.md) · [Conformance](../../docs/conformance.md)
|
|
62
|
+
[Policy](../../docs/policy.md) · [Configuration](../../docs/config.md) · [Keys](../../docs/keys.md) · [Signers](../../docs/signers.md) · [Direct Circle reviews](../../docs/direct-reviews.md) · [Conformance](../../docs/conformance.md)
|
|
61
63
|
|
|
62
64
|
## License
|
|
63
65
|
|
|
64
66
|
MIT
|
|
65
|
-
|
|
66
|
-
See [direct Circle reviews](../../docs/direct-reviews.md) for explicit estimation,
|
|
67
|
-
submission approval, credential boundary and read-only recovery.
|
package/dist/bin/daski.js
CHANGED
|
@@ -42,7 +42,11 @@ Commands
|
|
|
42
42
|
order confirm <handle> --choice <Confirmed|NotConfirmed> [--submission <sponsored|direct>]
|
|
43
43
|
Record the user's delivery review; the mode follows the signer
|
|
44
44
|
order revoke-confirmation <handle> Withdraw the active review
|
|
45
|
-
order confirm <handle> --
|
|
45
|
+
order confirm <handle> --estimate Circle: estimate the saved direct review; sends nothing
|
|
46
|
+
order confirm <handle> --submit --approve-call <callHash>
|
|
47
|
+
Circle: submit the approved direct review once the
|
|
48
|
+
gateway advertises confirmation.directReview.circleExecute
|
|
49
|
+
order confirm <handle> --resume Reconcile a pending sponsored or Circle submission; never executes again
|
|
46
50
|
order confirm <handle> --tx <hash> Direct mode: record the hash the wallet's tool reported
|
|
47
51
|
order confirm <handle> --check Direct mode: verify the receipt, attestation and final state
|
|
48
52
|
order confirm <handle> --abandon Direct mode: drop a record with no executable transaction
|
package/dist/bin/daski.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daski.js","sourceRoot":"","sources":["../../src/bin/daski.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAChG,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EACL,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAC9E,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,mCAAmC;AACnC,MAAM,YAAY,GAAG;IACnB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe;IAC3D,eAAe,EAAE,aAAa;CACtB,CAAC;AAEX,MAAM,KAAK,GAAG,SAAS,WAAW
|
|
1
|
+
{"version":3,"file":"daski.js","sourceRoot":"","sources":["../../src/bin/daski.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Unknown code, domains or type hashes fail before a payer signs anything.
|
|
5
5
|
*/
|
|
6
6
|
import { type Address, type Hex } from "viem";
|
|
7
|
-
import type
|
|
7
|
+
import { type ChainReader } from "./reader.js";
|
|
8
8
|
import { CliError } from "../cli/errors.js";
|
|
9
9
|
export type EasReviewProfileId = "eas-native-1.0.1" | "eas-native-1.2.0";
|
|
10
10
|
export interface EasReviewProfile {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"easProfiles.d.ts","sourceRoot":"","sources":["../../src/chain/easProfiles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAmC,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAC/E,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"easProfiles.d.ts","sourceRoot":"","sources":["../../src/chain/easProfiles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAmC,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAC/E,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AACzE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,kBAAkB,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,GAAG,CAAC;IACd,cAAc,EAAE,GAAG,CAAC;IACpB,cAAc,EAAE,GAAG,CAAC;CACrB;AACD,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAW1E,CAAC;AACF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG3B,CAAC;AAGH,wBAAgB,eAAe,IAAI,QAAQ,CAI1C;AAED,kFAAkF;AAClF,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgB3H"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Unknown code, domains or type hashes fail before a payer signs anything.
|
|
5
5
|
*/
|
|
6
6
|
import { hashDomain, keccak256, parseAbi } from "viem";
|
|
7
|
+
import { readContracts } from "./reader.js";
|
|
7
8
|
import { CliError } from "../cli/errors.js";
|
|
8
9
|
export const EAS_REVIEW_PROFILES = {
|
|
9
10
|
8453: { id: "eas-native-1.0.1", contractVersion: "1.0.1", domainVersion: "1.0.1", signedDeadline: false,
|
|
@@ -33,10 +34,11 @@ export async function discoverEasReviewProfile(chain, chainId, eas) {
|
|
|
33
34
|
if (!profile || eas.toLowerCase() !== "0x4200000000000000000000000000000000000021" || !chain.getStorageAt)
|
|
34
35
|
throw incompatibleEas();
|
|
35
36
|
const blockNumber = await chain.getFinalBlockNumber();
|
|
36
|
-
const [slot, code, version, domain, attest, revoke] = await Promise.all([
|
|
37
|
+
const [slot, code, [version, domain, attest, revoke]] = await Promise.all([
|
|
37
38
|
chain.getStorageAt(eas, IMPLEMENTATION_SLOT, blockNumber),
|
|
38
39
|
chain.getCode(profile.implementation, blockNumber),
|
|
39
|
-
|
|
40
|
+
// One batched eth_call: a public RPC refuses a burst of separate ones.
|
|
41
|
+
readContracts(chain, ["version", "getDomainSeparator", "getAttestTypeHash", "getRevokeTypeHash"].map(functionName => ({ address: eas, abi: EAS_IDENTITY_ABI, functionName, args: [] })), blockNumber),
|
|
40
42
|
]);
|
|
41
43
|
if (!slot || !code || code === "0x" || slot.slice(-40).toLowerCase() !== profile.implementation.slice(2).toLowerCase() ||
|
|
42
44
|
keccak256(code) !== profile.codeHash || version !== profile.contractVersion ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"easProfiles.js","sourceRoot":"","sources":["../../src/chain/easProfiles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAA0B,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"easProfiles.js","sourceRoot":"","sources":["../../src/chain/easProfiles.ts"],"names":[],"mappings":"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"}
|
package/dist/chain/reader.d.ts
CHANGED
|
@@ -9,17 +9,36 @@
|
|
|
9
9
|
*
|
|
10
10
|
* The reader is an interface so `doctor` and the confirmation flow can be
|
|
11
11
|
* exercised against a scripted chain in tests.
|
|
12
|
+
*
|
|
13
|
+
* Public RPCs admit only a few `eth_call`s per client in a short window and
|
|
14
|
+
* refuse the rest (https://mainnet.base.org among them), so a command that
|
|
15
|
+
* needs several contract values reads them through `readContracts`: one call.
|
|
12
16
|
*/
|
|
13
17
|
import { type Abi, type Address, type Hex } from "viem";
|
|
18
|
+
import { CliError } from "../cli/errors.js";
|
|
14
19
|
/** The bound on one `eth_call` used to verify a contract signature. */
|
|
15
20
|
export declare const ERC1271_CALL_GAS = 1000000n;
|
|
16
21
|
/** One deadline covering the code lookup and the call. */
|
|
17
22
|
export declare const ERC1271_CALL_TIMEOUT_MS = 5000;
|
|
23
|
+
/** Multicall3 at its address on every chain that carries it; Base and Base Sepolia preinstall it. */
|
|
24
|
+
export declare const MULTICALL3_ADDRESS: Address;
|
|
25
|
+
/** One contract read in a batch. */
|
|
26
|
+
export interface ContractRead {
|
|
27
|
+
address: Address;
|
|
28
|
+
abi: Abi;
|
|
29
|
+
functionName: string;
|
|
30
|
+
args: readonly unknown[];
|
|
31
|
+
}
|
|
18
32
|
export interface ReceiptLog {
|
|
19
33
|
address: Address;
|
|
20
34
|
topics: readonly Hex[];
|
|
21
35
|
data: Hex;
|
|
22
36
|
}
|
|
37
|
+
/** A mined log, with the transaction that emitted it. */
|
|
38
|
+
export interface ChainLog extends ReceiptLog {
|
|
39
|
+
transactionHash: Hex;
|
|
40
|
+
blockNumber: bigint;
|
|
41
|
+
}
|
|
23
42
|
export interface TransactionReceiptLike {
|
|
24
43
|
status: "success" | "reverted";
|
|
25
44
|
blockNumber: bigint;
|
|
@@ -66,7 +85,30 @@ export interface ChainReader {
|
|
|
66
85
|
args: readonly unknown[];
|
|
67
86
|
blockNumber?: bigint;
|
|
68
87
|
}): Promise<T>;
|
|
88
|
+
/**
|
|
89
|
+
* Contract reads answered together by one Multicall3 `eth_call`, in order,
|
|
90
|
+
* at the latest state or pinned to a block number. Callers go through
|
|
91
|
+
* `readContracts`, which reads one at a time from a reader without it.
|
|
92
|
+
*/
|
|
93
|
+
readContracts?(args: {
|
|
94
|
+
reads: readonly ContractRead[];
|
|
95
|
+
blockNumber?: bigint;
|
|
96
|
+
}): Promise<readonly unknown[]>;
|
|
97
|
+
/**
|
|
98
|
+
* One emitter's mined logs whose leading topics match, in an inclusive
|
|
99
|
+
* block range. Used to find a direct review on chain without the vendor.
|
|
100
|
+
*/
|
|
101
|
+
getLogs?(args: {
|
|
102
|
+
address: Address;
|
|
103
|
+
topics: readonly Hex[];
|
|
104
|
+
fromBlock: bigint;
|
|
105
|
+
toBlock: bigint;
|
|
106
|
+
}): Promise<readonly ChainLog[]>;
|
|
69
107
|
}
|
|
108
|
+
/** Several contract reads in one call where the reader batches, otherwise one at a time; results keep their order. */
|
|
109
|
+
export declare function readContracts(chain: ChainReader, reads: readonly ContractRead[], blockNumber?: bigint): Promise<readonly unknown[]>;
|
|
110
|
+
/** A failed read, named for what the RPC said; the endpoint is printed without the path or query a key may sit in. */
|
|
111
|
+
export declare function rpcFailure(rpcUrl: string, error: unknown): CliError;
|
|
70
112
|
/** A viem-backed reader for one RPC endpoint, with one deadline per request. */
|
|
71
113
|
export declare function createChainReader(rpcUrl: string, finalityTag: FinalityTag, timeoutMs?: number): ChainReader;
|
|
72
114
|
/** The ERC-1271 magic value: the only return that verifies a contract signature. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/chain/reader.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../src/chain/reader.ts"],"names":[],"mappings":"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"}
|
package/dist/chain/reader.js
CHANGED
|
@@ -9,13 +9,20 @@
|
|
|
9
9
|
*
|
|
10
10
|
* The reader is an interface so `doctor` and the confirmation flow can be
|
|
11
11
|
* exercised against a scripted chain in tests.
|
|
12
|
+
*
|
|
13
|
+
* Public RPCs admit only a few `eth_call`s per client in a short window and
|
|
14
|
+
* refuse the rest (https://mainnet.base.org among them), so a command that
|
|
15
|
+
* needs several contract values reads them through `readContracts`: one call.
|
|
12
16
|
*/
|
|
13
|
-
import { createPublicClient, http, HttpRequestError, TimeoutError, BaseError, } from "viem";
|
|
17
|
+
import { createPublicClient, http, HttpRequestError, RpcError, RpcRequestError, TimeoutError, BaseError, toHex, } from "viem";
|
|
14
18
|
import { CliError } from "../cli/errors.js";
|
|
19
|
+
import { redactRpcUrl } from "../cli/redact.js";
|
|
15
20
|
/** The bound on one `eth_call` used to verify a contract signature. */
|
|
16
21
|
export const ERC1271_CALL_GAS = 1000000n;
|
|
17
22
|
/** One deadline covering the code lookup and the call. */
|
|
18
23
|
export const ERC1271_CALL_TIMEOUT_MS = 5_000;
|
|
24
|
+
/** Multicall3 at its address on every chain that carries it; Base and Base Sepolia preinstall it. */
|
|
25
|
+
export const MULTICALL3_ADDRESS = "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
19
26
|
/**
|
|
20
27
|
* Base mainnet waits for L1 finality; the sandbox (Base Sepolia) treats the
|
|
21
28
|
* `safe` tag (the batch is posted to L1) as final, the same rule the gateway
|
|
@@ -24,13 +31,77 @@ export const ERC1271_CALL_TIMEOUT_MS = 5_000;
|
|
|
24
31
|
export function finalityTagFor(chainId) {
|
|
25
32
|
return chainId === 8453 ? "finalized" : "safe";
|
|
26
33
|
}
|
|
27
|
-
|
|
34
|
+
/** Several contract reads in one call where the reader batches, otherwise one at a time; results keep their order. */
|
|
35
|
+
export function readContracts(chain, reads, blockNumber) {
|
|
36
|
+
const pinned = blockNumber === undefined ? {} : { blockNumber };
|
|
37
|
+
if (chain.readContracts)
|
|
38
|
+
return chain.readContracts({ reads, ...pinned });
|
|
39
|
+
return Promise.all(reads.map((read) => chain.readContract({ ...read, ...pinned })));
|
|
40
|
+
}
|
|
41
|
+
/** JSON-RPC codes that refuse a client over its rate: EIP-1474's limit exceeded, and proxyd's (Base's public RPC). */
|
|
42
|
+
const RATE_LIMIT_CODES = new Set([-32005, -32016]);
|
|
43
|
+
/** What the RPC answered, when it answered: the HTTP status and the JSON-RPC error. */
|
|
44
|
+
function rpcAnswer(error) {
|
|
45
|
+
if (!(error instanceof BaseError))
|
|
46
|
+
return {};
|
|
47
|
+
const answer = {};
|
|
48
|
+
const failed = error.walk((cause) => cause instanceof HttpRequestError);
|
|
49
|
+
if (failed instanceof HttpRequestError) {
|
|
50
|
+
if (failed.status !== undefined)
|
|
51
|
+
answer.status = failed.status;
|
|
52
|
+
// A refused HTTP request carries the body's JSON-RPC error, if any, as its details.
|
|
53
|
+
try {
|
|
54
|
+
const body = JSON.parse(failed.details);
|
|
55
|
+
if (typeof body.code === "number")
|
|
56
|
+
answer.code = body.code;
|
|
57
|
+
if (typeof body.message === "string")
|
|
58
|
+
answer.message = body.message;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
if (failed.details)
|
|
62
|
+
answer.message = failed.details;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const refused = error.walk((cause) => cause instanceof RpcError || cause instanceof RpcRequestError);
|
|
66
|
+
if (refused instanceof RpcError || refused instanceof RpcRequestError) {
|
|
67
|
+
answer.code = refused.code;
|
|
68
|
+
if (refused.details)
|
|
69
|
+
answer.message = refused.details;
|
|
70
|
+
}
|
|
71
|
+
return answer;
|
|
72
|
+
}
|
|
73
|
+
function isRateLimited(answer) {
|
|
74
|
+
return answer.status === 429 || (answer.code !== undefined && RATE_LIMIT_CODES.has(answer.code)) ||
|
|
75
|
+
/rate.?limit|too many requests/i.test(answer.message ?? "");
|
|
76
|
+
}
|
|
77
|
+
function describeAnswer(answer) {
|
|
78
|
+
const head = [answer.status === undefined ? "" : `HTTP ${answer.status}`,
|
|
79
|
+
answer.code === undefined ? "" : `RPC error ${answer.code}`].filter(Boolean).join(", ");
|
|
80
|
+
return head && answer.message ? `${head}: ${answer.message}` : head || answer.message || "";
|
|
81
|
+
}
|
|
82
|
+
/** A failed read, named for what the RPC said; the endpoint is printed without the path or query a key may sit in. */
|
|
83
|
+
export function rpcFailure(rpcUrl, error) {
|
|
84
|
+
const answer = rpcAnswer(error);
|
|
85
|
+
const answered = describeAnswer(answer);
|
|
86
|
+
const details = { retryable: true, ...(answer.status === undefined ? {} : { httpStatus: answer.status }),
|
|
87
|
+
...(answer.code === undefined ? {} : { rpcErrorCode: answer.code }) };
|
|
88
|
+
if (isRateLimited(answer)) {
|
|
89
|
+
return new CliError({
|
|
90
|
+
code: "DASKI_RPC_RATE_LIMITED",
|
|
91
|
+
message: `The RPC at ${redactRpcUrl(rpcUrl)} refused the read over its rate limit (${answered || "rate limited"}).`,
|
|
92
|
+
remediation: "Nothing was decided from this read. Wait several seconds before re-running and do not retry in a " +
|
|
93
|
+
"loop: the endpoint counts refused reads too. Public endpoints such as https://mainnet.base.org admit " +
|
|
94
|
+
"only a few reads per client; set rpcUrl for the profile to a dedicated endpoint.",
|
|
95
|
+
details,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
const first = error instanceof Error ? error.message.split("\n")[0] : String(error);
|
|
28
99
|
return new CliError({
|
|
29
100
|
code: "DASKI_RPC_UNAVAILABLE",
|
|
30
|
-
message: `The RPC at ${rpcUrl} did not answer: ${
|
|
101
|
+
message: `The RPC at ${redactRpcUrl(rpcUrl)} did not answer: ${first}${answered ? ` (${answered})` : ""}`,
|
|
31
102
|
remediation: "Nothing was decided from this read. Check connectivity or set a working rpcUrl for " +
|
|
32
103
|
"the profile, then re-run.",
|
|
33
|
-
details
|
|
104
|
+
details,
|
|
34
105
|
});
|
|
35
106
|
}
|
|
36
107
|
function isTransportFailure(error) {
|
|
@@ -47,7 +118,7 @@ export function createChainReader(rpcUrl, finalityTag, timeoutMs = ERC1271_CALL_
|
|
|
47
118
|
return await client.getCode({ address, ...(blockNumber === undefined ? {} : { blockNumber }) });
|
|
48
119
|
}
|
|
49
120
|
catch (error) {
|
|
50
|
-
throw
|
|
121
|
+
throw rpcFailure(rpcUrl, error);
|
|
51
122
|
}
|
|
52
123
|
},
|
|
53
124
|
async getStorageAt(address, slot, blockNumber) {
|
|
@@ -55,7 +126,7 @@ export function createChainReader(rpcUrl, finalityTag, timeoutMs = ERC1271_CALL_
|
|
|
55
126
|
return await client.getStorageAt({ address, slot, blockNumber });
|
|
56
127
|
}
|
|
57
128
|
catch (error) {
|
|
58
|
-
throw
|
|
129
|
+
throw rpcFailure(rpcUrl, error);
|
|
59
130
|
}
|
|
60
131
|
},
|
|
61
132
|
async call({ to, data, gas }) {
|
|
@@ -64,9 +135,9 @@ export function createChainReader(rpcUrl, finalityTag, timeoutMs = ERC1271_CALL_
|
|
|
64
135
|
return { data: result.data, reverted: false };
|
|
65
136
|
}
|
|
66
137
|
catch (error) {
|
|
67
|
-
// A transport failure is unknown, never invalid; a revert is a final answer.
|
|
68
|
-
if (isTransportFailure(error))
|
|
69
|
-
throw
|
|
138
|
+
// A transport failure or a refusal is unknown, never invalid; a revert is a final answer.
|
|
139
|
+
if (isTransportFailure(error) || isRateLimited(rpcAnswer(error)))
|
|
140
|
+
throw rpcFailure(rpcUrl, error);
|
|
70
141
|
return { data: undefined, reverted: true };
|
|
71
142
|
}
|
|
72
143
|
},
|
|
@@ -87,7 +158,7 @@ export function createChainReader(rpcUrl, finalityTag, timeoutMs = ERC1271_CALL_
|
|
|
87
158
|
if (error instanceof BaseError &&
|
|
88
159
|
error.walk((cause) => cause.name === "TransactionReceiptNotFoundError") !== null)
|
|
89
160
|
return null;
|
|
90
|
-
throw
|
|
161
|
+
throw rpcFailure(rpcUrl, error);
|
|
91
162
|
}
|
|
92
163
|
},
|
|
93
164
|
async getFinalBlockNumber() {
|
|
@@ -95,7 +166,7 @@ export function createChainReader(rpcUrl, finalityTag, timeoutMs = ERC1271_CALL_
|
|
|
95
166
|
return (await client.getBlock({ blockTag: finalityTag })).number;
|
|
96
167
|
}
|
|
97
168
|
catch (error) {
|
|
98
|
-
throw
|
|
169
|
+
throw rpcFailure(rpcUrl, error);
|
|
99
170
|
}
|
|
100
171
|
},
|
|
101
172
|
async getBlockHash(blockNumber) {
|
|
@@ -103,7 +174,7 @@ export function createChainReader(rpcUrl, finalityTag, timeoutMs = ERC1271_CALL_
|
|
|
103
174
|
return (await client.getBlock({ blockNumber })).hash;
|
|
104
175
|
}
|
|
105
176
|
catch (error) {
|
|
106
|
-
throw
|
|
177
|
+
throw rpcFailure(rpcUrl, error);
|
|
107
178
|
}
|
|
108
179
|
},
|
|
109
180
|
async readContract(args) {
|
|
@@ -111,7 +182,30 @@ export function createChainReader(rpcUrl, finalityTag, timeoutMs = ERC1271_CALL_
|
|
|
111
182
|
return await client.readContract(args);
|
|
112
183
|
}
|
|
113
184
|
catch (error) {
|
|
114
|
-
throw
|
|
185
|
+
throw rpcFailure(rpcUrl, error);
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
async getLogs({ address, topics, fromBlock, toBlock }) {
|
|
189
|
+
try {
|
|
190
|
+
const logs = await client.request({ method: "eth_getLogs",
|
|
191
|
+
params: [{ address, topics: [...topics], fromBlock: toHex(fromBlock), toBlock: toHex(toBlock) }] });
|
|
192
|
+
// A pending log has no transaction or block yet; only mined ones count.
|
|
193
|
+
return logs.flatMap((log) => log.transactionHash && log.blockNumber
|
|
194
|
+
? [{ address: log.address, topics: log.topics, data: log.data, transactionHash: log.transactionHash, blockNumber: BigInt(log.blockNumber) }]
|
|
195
|
+
: []);
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
throw rpcFailure(rpcUrl, error);
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
async readContracts({ reads, blockNumber }) {
|
|
202
|
+
try {
|
|
203
|
+
// batchSize 0: never split the batch, so it stays one eth_call.
|
|
204
|
+
return await client.multicall({ contracts: reads, allowFailure: false, batchSize: 0,
|
|
205
|
+
multicallAddress: MULTICALL3_ADDRESS, ...(blockNumber === undefined ? {} : { blockNumber }) });
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
throw rpcFailure(rpcUrl, error);
|
|
115
209
|
}
|
|
116
210
|
},
|
|
117
211
|
};
|
package/dist/chain/reader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/chain/reader.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../../src/chain/reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EACL,kBAAkB,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,GAEtG,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,uEAAuE;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAU,CAAC;AAC3C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAE7C,qGAAqG;AACrG,MAAM,CAAC,MAAM,kBAAkB,GAAY,4CAA4C,CAAC;AAwCxF;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;AACjD,CAAC;AA8BD,sHAAsH;AACtH,MAAM,UAAU,aAAa,CAAC,KAAkB,EAAE,KAA8B,EAAE,WAAoB;IACpG,MAAM,MAAM,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IAChE,IAAI,KAAK,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IAC1E,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,sHAAsH;AACtH,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAIxE,uFAAuF;AACvF,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,CAAC,CAAC,KAAK,YAAY,SAAS,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,YAAY,gBAAgB,CAAC,CAAC;IACxE,IAAI,MAAM,YAAY,gBAAgB,EAAE,CAAC;QACvC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC/D,oFAAoF;QACpF,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAA0C,CAAC;YACjF,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAC3D,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;gBAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,MAAM,CAAC,OAAO;gBAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACtD,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,YAAY,QAAQ,IAAI,KAAK,YAAY,eAAe,CAAC,CAAC;IACrG,IAAI,OAAO,YAAY,QAAQ,IAAI,OAAO,YAAY,eAAe,EAAE,CAAC;QACtE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAC3B,IAAI,OAAO,CAAC,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACxD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,MAAiB;IACtC,OAAO,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9F,gCAAgC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,cAAc,CAAC,MAAiB;IACvC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,MAAM,EAAE;QACtE,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,OAAO,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;AAC9F,CAAC;AAED,sHAAsH;AACtH,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,KAAc;IACvD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;QACtG,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;IACxE,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,QAAQ,CAAC;YAClB,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE,cAAc,YAAY,CAAC,MAAM,CAAC,0CAA0C,QAAQ,IAAI,cAAc,IAAI;YACnH,WAAW,EACT,mGAAmG;gBACnG,uGAAuG;gBACvG,kFAAkF;YACpF,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpF,OAAO,IAAI,QAAQ,CAAC;QAClB,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,cAAc,YAAY,CAAC,MAAM,CAAC,oBAAoB,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACzG,WAAW,EACT,qFAAqF;YACrF,2BAA2B;QAC7B,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,CAAC,KAAK,YAAY,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,YAAY,gBAAgB,IAAI,KAAK,YAAY,YAAY,CAAC,KAAK,IAAI,CAAC;AAC5G,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,WAAwB,EAAE,SAAS,GAAG,uBAAuB;IAC7G,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACtG,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW;YAChC,IAAI,CAAC;gBACH,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;YAClG,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW;YAC3C,IAAI,CAAC;gBAAC,OAAO,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;YAAC,CAAC;YACzE,OAAO,KAAK,EAAE,CAAC;gBAAC,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAAC,CAAC;QACpD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;YAC1B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;gBACpD,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAChD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,0FAA0F;gBAC1F,IAAI,kBAAkB,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBAAE,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAClG,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,KAAK,CAAC,qBAAqB,CAAC,IAAI;YAC9B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7D,OAAO;oBACL,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;iBAChG,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,iCAAiC;oBAAE,OAAO,IAAI,CAAC;gBAChG,IAAI,KAAK,YAAY,SAAS;oBAC1B,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAE,KAAe,CAAC,IAAI,KAAK,iCAAiC,CAAC,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAC;gBAC7G,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,mBAAmB;YACvB,IAAI,CAAC;gBACH,OAAO,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YACnE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,WAAW;YAC5B,IAAI,CAAC;gBACH,OAAO,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACvD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,YAAY,CAAI,IAA0G;YAC9H,IAAI,CAAC;gBACH,OAAO,MAAM,MAAM,CAAC,YAAY,CAAC,IAAa,CAAM,CAAC;YACvD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE;YACnD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa;oBACvD,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtG,wEAAwE;gBACxE,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,WAAW;oBACjE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,CAAC,eAAe,EAAE,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC5I,CAAC,CAAC,EAAE,CAAC,CAAC;YACV,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE;YACxC,IAAI,CAAC;gBACH,gEAAgE;gBAChE,OAAO,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAc,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;oBAC1F,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAuB,CAAC;YACzH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAC;AAE1C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,kBAAkB;QACxB,eAAe,EAAE,MAAM;QACvB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QACjF,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;KAClD;CACqB,CAAC;AAEzB,+EAA+E;AAC/E,MAAM,UAAU,cAAc,CAAC,IAAqB;IAClD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACxG,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,cAAc,CAAC,IAAqB;IAClD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACtF,CAAC"}
|
package/dist/cli/output.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAMjF;AAED,sEAAsE;AACtE,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAaxE"}
|
package/dist/cli/output.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Output. Two modes, one rule: everything is redacted on the way out.
|
|
3
3
|
*/
|
|
4
|
+
import { BaseError } from "viem";
|
|
4
5
|
import { redactValue } from "./redact.js";
|
|
5
6
|
import { CliError } from "./errors.js";
|
|
6
7
|
export function emit(value, options) {
|
|
@@ -38,7 +39,8 @@ function errorPayload(error) {
|
|
|
38
39
|
}
|
|
39
40
|
return {
|
|
40
41
|
error: "DASKI_UNEXPECTED_ERROR",
|
|
41
|
-
|
|
42
|
+
// A viem error's full message carries the request URL, where RPC providers put API keys.
|
|
43
|
+
message: error instanceof BaseError ? error.shortMessage : error instanceof Error ? error.message : String(error),
|
|
42
44
|
remediation: "Re-run with --json for the full payload, and report this if it persists.",
|
|
43
45
|
};
|
|
44
46
|
}
|
package/dist/cli/output.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMvC,MAAM,UAAU,IAAI,CAAC,KAA8B,EAAE,OAAsB;IACzE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAA4B,CAAC,IAAI,CAAC,CAAC;AAC1F,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc,EAAE,OAAsB;IAC9D,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7E,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAA4B,CAAC;QACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,QAAQ,CAAC,KAAK;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxF,IAAI,QAAQ,CAAC,QAAQ;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1F,IAAI,QAAQ,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,IAAI,OAAQ,KAA8B,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1E,OAAQ,KAA+C,CAAC,MAAM,EAAE,CAAC;IACnE,CAAC;IACD,OAAO;QACL,KAAK,EAAE,wBAAwB;QAC/B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/cli/output.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/redact.d.ts
CHANGED
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
* already get a key into a printed field can trivially reshape it.
|
|
14
14
|
*
|
|
15
15
|
* So the signals used here are the ones that actually discriminate: the field
|
|
16
|
-
* name a value arrived under, and the unmistakable shape of a seed phrase.
|
|
16
|
+
* name a value arrived under, and the unmistakable shape of a seed phrase. An
|
|
17
|
+
* `rpcUrl` keeps only its scheme and host, since providers embed API keys in
|
|
18
|
+
* the rest.
|
|
17
19
|
*/
|
|
18
20
|
export interface RedactOptions {
|
|
19
21
|
/** Also blank signatures. Optional for run logs; keys are never optional. */
|
|
@@ -21,6 +23,11 @@ export interface RedactOptions {
|
|
|
21
23
|
/** Internal: the field name the current value was found under. */
|
|
22
24
|
fieldName?: string | undefined;
|
|
23
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* An RPC endpoint as it may be printed: scheme and host. Anything past the
|
|
28
|
+
* host prints as an ellipsis; a bare public endpoint prints unchanged.
|
|
29
|
+
*/
|
|
30
|
+
export declare function redactRpcUrl(rpcUrl: string): string;
|
|
24
31
|
export declare function redactValue(value: unknown, options?: RedactOptions): unknown;
|
|
25
32
|
export declare function redactText(text: string): string;
|
|
26
33
|
//# sourceMappingURL=redact.d.ts.map
|
package/dist/cli/redact.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/cli/redact.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/cli/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAqBH,MAAM,WAAW,aAAa;IAC5B,6EAA6E;IAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAiBhF;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
package/dist/cli/redact.js
CHANGED
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
* already get a key into a printed field can trivially reshape it.
|
|
14
14
|
*
|
|
15
15
|
* So the signals used here are the ones that actually discriminate: the field
|
|
16
|
-
* name a value arrived under, and the unmistakable shape of a seed phrase.
|
|
16
|
+
* name a value arrived under, and the unmistakable shape of a seed phrase. An
|
|
17
|
+
* `rpcUrl` keeps only its scheme and host, since providers embed API keys in
|
|
18
|
+
* the rest.
|
|
17
19
|
*/
|
|
18
20
|
/** BIP-39 style phrases: twelve or more lowercase words in a row. */
|
|
19
21
|
const MNEMONIC_PATTERN = /\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/g;
|
|
@@ -32,12 +34,28 @@ const KEYLIKE_FIELDS = new Set([
|
|
|
32
34
|
"keystore", "keymaterial", "key_material", "daski_payer_private_key",
|
|
33
35
|
"apikey", "api_key",
|
|
34
36
|
]);
|
|
37
|
+
/**
|
|
38
|
+
* An RPC endpoint as it may be printed: scheme and host. Anything past the
|
|
39
|
+
* host prints as an ellipsis; a bare public endpoint prints unchanged.
|
|
40
|
+
*/
|
|
41
|
+
export function redactRpcUrl(rpcUrl) {
|
|
42
|
+
try {
|
|
43
|
+
const url = new URL(rpcUrl);
|
|
44
|
+
const bare = url.pathname === "/" && !url.search && !url.hash && !url.username && !url.password;
|
|
45
|
+
return bare ? url.origin : `${url.origin}/…`;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return "[redacted]";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
35
51
|
export function redactValue(value, options = {}) {
|
|
36
52
|
const { fieldName } = options;
|
|
37
53
|
if (fieldName && KEYLIKE_FIELDS.has(fieldName.toLowerCase()))
|
|
38
54
|
return "[redacted]";
|
|
39
55
|
if (options.signatures && fieldName?.toLowerCase() === "signature")
|
|
40
56
|
return "[redacted]";
|
|
57
|
+
if (fieldName?.toLowerCase() === "rpcurl" && typeof value === "string")
|
|
58
|
+
return redactRpcUrl(value);
|
|
41
59
|
if (typeof value === "string")
|
|
42
60
|
return value.replace(MNEMONIC_PATTERN, "[redacted]");
|
|
43
61
|
if (Array.isArray(value)) {
|
package/dist/cli/redact.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/cli/redact.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/cli/redact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,qEAAqE;AACrE,MAAM,gBAAgB,GAAG,yCAAyC,CAAC;AAEnE;;;;;;;;GAQG;AACH,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY;IAC3E,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU;IACzE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,yBAAyB;IACpE,QAAQ,EAAE,SAAS;CACpB,CAAC,CAAC;AASH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QAChG,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC;IACtB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,UAAyB,EAAE;IACrE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,IAAI,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO,YAAY,CAAC;IAClF,IAAI,OAAO,CAAC,UAAU,IAAI,SAAS,EAAE,WAAW,EAAE,KAAK,WAAW;QAAE,OAAO,YAAY,CAAC;IACxF,IAAI,SAAS,EAAE,WAAW,EAAE,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;IAEnG,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IACpF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;aAC7C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAClF,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buy.d.ts","sourceRoot":"","sources":["../../src/commands/buy.ts"],"names":[],"mappings":"AAQA,OAAO,EAA6B,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG9E,OAAO,EAAiB,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"buy.d.ts","sourceRoot":"","sources":["../../src/commands/buy.ts"],"names":[],"mappings":"AAQA,OAAO,EAA6B,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG9E,OAAO,EAAiB,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAiBxF,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,cAAc,GAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,cAAc,CAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA4KxK;AAsJD,OAAO,EAAE,aAAa,EAAE,CAAC"}
|