@secondlayer/stacks 5.1.0 → 5.1.2
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 +21 -2
- package/dist/shared/{stacks-6gavarmy.js → stacks-1m3m1agc.js} +2 -2
- package/dist/shared/{stacks-db3kwavg.cjs → stacks-37kz5t9f.cjs} +4 -6
- package/dist/shared/{stacks-db3kwavg.cjs.map → stacks-37kz5t9f.cjs.map} +3 -3
- package/dist/shared/{stacks-w9t61fra.cjs → stacks-f35mnrmg.cjs} +6 -6
- package/dist/shared/stacks-f35mnrmg.cjs.map +10 -0
- package/dist/shared/{stacks-e3nwm1dz.js → stacks-fd4rx56e.js} +8 -8
- package/dist/shared/stacks-fd4rx56e.js.map +10 -0
- package/dist/shared/{stacks-7bqkf3b0.js → stacks-mbt36bzt.js} +3 -3
- package/dist/shared/{stacks-ga026yxz.js → stacks-qex691bh.js} +11 -4
- package/dist/shared/stacks-qex691bh.js.map +11 -0
- package/dist/shared/{stacks-n4d8j8q3.js → stacks-v03zef3g.js} +5 -7
- package/dist/shared/{stacks-n4d8j8q3.js.map → stacks-v03zef3g.js.map} +3 -3
- package/dist/shared/{stacks-ggdz96r1.cjs → stacks-wk8yp13j.cjs} +10 -3
- package/dist/shared/stacks-wk8yp13j.cjs.map +11 -0
- package/dist/src/actions/index.d.cts +19 -7
- package/dist/src/actions/index.d.ts +19 -7
- package/dist/src/actions/index.js +5 -5
- package/dist/src/bitcoin/index.js +1 -1
- package/dist/src/bns/index.js +3 -3
- package/dist/src/index.cjs +2 -1
- package/dist/src/index.cjs.map +2 -2
- package/dist/src/index.d.cts +5 -1
- package/dist/src/index.d.ts +5 -1
- package/dist/src/index.js +7 -5
- package/dist/src/index.js.map +2 -2
- package/dist/src/pox/index.js +3 -3
- package/dist/src/pox5/index.js +4 -4
- package/dist/src/sbtc/index.js +3 -3
- package/dist/src/stackingdao/index.js +3 -3
- package/dist/src/tools/index.cjs +15 -10
- package/dist/src/tools/index.cjs.map +6 -6
- package/dist/src/tools/index.js +15 -10
- package/dist/src/tools/index.js.map +6 -6
- package/package.json +1 -1
- package/dist/shared/stacks-e3nwm1dz.js.map +0 -10
- package/dist/shared/stacks-ga026yxz.js.map +0 -11
- package/dist/shared/stacks-ggdz96r1.cjs.map +0 -11
- package/dist/shared/stacks-w9t61fra.cjs.map +0 -10
- /package/dist/shared/{stacks-6gavarmy.js.map → stacks-1m3m1agc.js.map} +0 -0
- /package/dist/shared/{stacks-7bqkf3b0.js.map → stacks-mbt36bzt.js.map} +0 -0
package/README.md
CHANGED
|
@@ -24,6 +24,24 @@ const balance = await client.getBalance({
|
|
|
24
24
|
});
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
+
## Clarinet simnet
|
|
28
|
+
|
|
29
|
+
Same client as HTTP, against an in-process VM (`@stacks/clarinet-sdk` is an optional peer of this entry).
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import { initSimnet } from "@stacks/clarinet-sdk";
|
|
33
|
+
import { createPublicClient } from "@secondlayer/stacks";
|
|
34
|
+
import { simnet, simnetChain } from "@secondlayer/stacks/simnet";
|
|
35
|
+
|
|
36
|
+
const session = await initSimnet("./Clarinet.toml");
|
|
37
|
+
const client = createPublicClient({
|
|
38
|
+
chain: simnetChain,
|
|
39
|
+
transport: simnet(session),
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Then `getContract` as on mainnet. No `/extended`; watches throw; fees use `'min'`.
|
|
44
|
+
|
|
27
45
|
## Exports
|
|
28
46
|
|
|
29
47
|
| Module | Description |
|
|
@@ -97,10 +115,10 @@ Status reads are pluggable, like nonce sources: the default reads `/extended/v1/
|
|
|
97
115
|
|
|
98
116
|
## Errors
|
|
99
117
|
|
|
100
|
-
The HTTP transport throws a typed `HttpRequestError` (`.status`, `.url`, `.method` attached) on any non-2xx response instead of handing back the error body as if it were a successful result, and it retries `429`s, not just `5xx`/network errors. One `timeout` covers each attempt end to end, headers and body, so a stalled response rejects with `TimeoutError` (`.url`, `.method`, `.timeout`, `.attempt`) instead of hanging. Pass `signal` on any request to cancel from your side; a caller abort is never retried. Broadcasts are sent once (`retryCount: 0`): re-posting a transaction the node may already hold would surface as a nonce conflict, so a timed-out broadcast checks whether the node knows the tx before failing. `MalformedResponseError` throws from `getBalance`, `getAccountInfo`, `getMapEntry`, `getBlockHeight`, and `
|
|
118
|
+
The HTTP transport throws a typed `HttpRequestError` (`.status`, `.url`, `.method` attached) on any non-2xx response instead of handing back the error body as if it were a successful result, and it retries `429`s, not just `5xx`/network errors. One `timeout` covers each attempt end to end, headers and body, so a stalled response rejects with `TimeoutError` (`.url`, `.method`, `.timeout`, `.attempt`) instead of hanging. Pass `signal` on any request to cancel from your side; a caller abort is never retried. Broadcasts are sent once (`retryCount: 0`): re-posting a transaction the node may already hold would surface as a nonce conflict, so a timed-out broadcast checks whether the node knows the tx before failing. `MalformedResponseError` throws from `getBalance`, `getAccountInfo`, `getNonce`, `getMapEntry`, `getBlockHeight`, `getBurnBlockHeight`, and `readContract` when the node's response is missing an expected field, instead of failing with an opaque native error (`BigInt(undefined)` and friends). `readContract` (and `getContract().read`) throws `ReadContractError` when the node answers `okay: false`; the message is the node's cause. Both are exported from `@secondlayer/stacks`. Every error carries a stable `code` (`HTTP_REQUEST_ERROR`, `TIMEOUT_ERROR`, `MALFORMED_RESPONSE_ERROR`, `READ_CONTRACT_ERROR`, ...) that also appears in `toJSON()`, so a handler can branch on it without an `instanceof` chain and without parsing a message that may be reworded.
|
|
101
119
|
|
|
102
120
|
```ts
|
|
103
|
-
import { BaseError, HttpRequestError, MalformedResponseError, TimeoutError } from "@secondlayer/stacks";
|
|
121
|
+
import { BaseError, HttpRequestError, MalformedResponseError, ReadContractError, TimeoutError } from "@secondlayer/stacks";
|
|
104
122
|
|
|
105
123
|
try {
|
|
106
124
|
await client.getBalance({ address });
|
|
@@ -108,6 +126,7 @@ try {
|
|
|
108
126
|
if (e instanceof HttpRequestError) e.status; // non-2xx from the node/API
|
|
109
127
|
if (e instanceof TimeoutError) e.url; // headers or body did not arrive in time
|
|
110
128
|
if (e instanceof MalformedResponseError) { /* response shape didn't match */ }
|
|
129
|
+
if (e instanceof ReadContractError) e.shortMessage; // call-read okay: false, node cause
|
|
111
130
|
if (e instanceof BaseError) e.code; // "TIMEOUT_ERROR", stable across releases and minification (derived from `name`, not the class)
|
|
112
131
|
}
|
|
113
132
|
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MalformedResponseError,
|
|
3
3
|
readContract
|
|
4
|
-
} from "./stacks-
|
|
4
|
+
} from "./stacks-qex691bh.js";
|
|
5
5
|
import {
|
|
6
6
|
deserializeCVBytes
|
|
7
7
|
} from "./stacks-69nq48jp.js";
|
|
@@ -77,4 +77,4 @@ async function multicall(client, params) {
|
|
|
77
77
|
export { getBalance, getDataVar, multicall };
|
|
78
78
|
|
|
79
79
|
//# debugId=55F75D35D3BBC27164756E2164756E21
|
|
80
|
-
//# sourceMappingURL=stacks-
|
|
80
|
+
//# sourceMappingURL=stacks-1m3m1agc.js.map
|
|
@@ -64,12 +64,10 @@ async function getMapEntry(client, params) {
|
|
|
64
64
|
|
|
65
65
|
// src/actions/public/getNonce.ts
|
|
66
66
|
async function getNonce(client, params) {
|
|
67
|
-
const data = await client.request(`/v2/accounts/${params.address}`, {
|
|
68
|
-
method: "GET"
|
|
69
|
-
});
|
|
67
|
+
const data = await client.request(`/v2/accounts/${encodeURIComponent(params.address)}`, { method: "GET" });
|
|
70
68
|
const nonce = data?.nonce;
|
|
71
69
|
if (typeof nonce !== "number" && typeof nonce !== "string") {
|
|
72
|
-
throw new
|
|
70
|
+
throw new MalformedResponseError(`getNonce: /v2/accounts/${params.address} response is missing "nonce"`);
|
|
73
71
|
}
|
|
74
72
|
return BigInt(nonce);
|
|
75
73
|
}
|
|
@@ -762,5 +760,5 @@ async function callContract(client, params) {
|
|
|
762
760
|
}
|
|
763
761
|
}
|
|
764
762
|
|
|
765
|
-
//# debugId=
|
|
766
|
-
//# sourceMappingURL=stacks-
|
|
763
|
+
//# debugId=C746B6AF7E1C8C7C64756E2164756E21
|
|
764
|
+
//# sourceMappingURL=stacks-37kz5t9f.cjs.map
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"import type { Client } from \"../../clients/types.ts\";\nimport { MalformedResponseError } from \"../../errors/response.ts\";\n\nexport async function getBlockHeight(client: Client): Promise<number> {\n\tconst data = await client.request(\"/v2/info\", { method: \"GET\" });\n\tif (typeof data?.stacks_tip_height !== \"number\") {\n\t\tthrow new MalformedResponseError(\n\t\t\t'getBlockHeight: /v2/info response is missing \"stacks_tip_height\"',\n\t\t);\n\t}\n\treturn data.stacks_tip_height;\n}\n",
|
|
7
7
|
"import { BaseError } from \"./base.ts\";\n\n/** Thrown by the HTTP transport when a response's status isn't 2xx. */\nexport class HttpRequestError extends BaseError {\n\toverride name = \"HttpRequestError\";\n\tstatus: number;\n\t/** Request URL, when the transport knows it. */\n\turl?: string;\n\t/** Request method, when the transport knows it. */\n\tmethod?: string;\n\n\tconstructor(\n\t\tstatus: number,\n\t\toptions?: {\n\t\t\tcause?: Error;\n\t\t\tdetails?: string;\n\t\t\turl?: string;\n\t\t\tmethod?: string;\n\t\t},\n\t) {\n\t\tconst where =\n\t\t\toptions?.url !== undefined\n\t\t\t\t? ` (${options.method ?? \"GET\"} ${options.url})`\n\t\t\t\t: \"\";\n\t\tsuper(`HTTP request failed with status ${status}${where}`, options);\n\t\tthis.status = status;\n\t\tthis.url = options?.url;\n\t\tthis.method = options?.method;\n\t}\n}\n",
|
|
8
8
|
"import { deserializeCVBytes } from \"../../clarity/deserialize.ts\";\nimport { serializeCVBytes } from \"../../clarity/serialize.ts\";\nimport type { ClarityValue } from \"../../clarity/types.ts\";\nimport type { Client } from \"../../clients/types.ts\";\nimport { MalformedResponseError } from \"../../errors/response.ts\";\nimport { parseContractId } from \"../../utils/address.ts\";\nimport { bytesToHex, with0x } from \"../../utils/encoding.ts\";\n\nexport type GetMapEntryParams = {\n\tcontract: string; // \"address.name\"\n\tmapName: string;\n\tkey: ClarityValue;\n};\n\nexport async function getMapEntry<T extends ClarityValue = ClarityValue>(\n\tclient: Client,\n\tparams: GetMapEntryParams,\n): Promise<T> {\n\tconst [address, name] = parseContractId(params.contract);\n\tconst serializedKey = with0x(bytesToHex(serializeCVBytes(params.key)));\n\n\tconst data = await client.request(\n\t\t`/v2/map_entry/${address}/${name}/${params.mapName}`,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tbody: serializedKey,\n\t\t},\n\t);\n\n\tif (typeof data?.data !== \"string\") {\n\t\tthrow new MalformedResponseError(\n\t\t\t`getMapEntry: /v2/map_entry/${address}/${name}/${params.mapName} response is missing \"data\"`,\n\t\t);\n\t}\n\treturn deserializeCVBytes<T>(data.data);\n}\n",
|
|
9
|
-
"import type { Client } from \"../../clients/types.ts\";\n\nexport type GetNonceParams = {\n\taddress: string;\n};\n\nexport type GetNonceResult = {\n\tnonce: bigint;\n\tpossibleNextNonce: bigint;\n};\n\nexport async function getNonce(\n\tclient: Client,\n\tparams: GetNonceParams,\n): Promise<bigint> {\n\tconst data = await client.request(`/v2/accounts/${params.address}
|
|
9
|
+
"import type { Client } from \"../../clients/types.ts\";\nimport { MalformedResponseError } from \"../../errors/response.ts\";\n\nexport type GetNonceParams = {\n\taddress: string;\n};\n\nexport type GetNonceResult = {\n\tnonce: bigint;\n\tpossibleNextNonce: bigint;\n};\n\nexport async function getNonce(\n\tclient: Client,\n\tparams: GetNonceParams,\n): Promise<bigint> {\n\tconst data = await client.request(\n\t\t`/v2/accounts/${encodeURIComponent(params.address)}`,\n\t\t{ method: \"GET\" },\n\t);\n\tconst nonce = (data as { nonce?: unknown })?.nonce;\n\tif (typeof nonce !== \"number\" && typeof nonce !== \"string\") {\n\t\tthrow new MalformedResponseError(\n\t\t\t`getNonce: /v2/accounts/${params.address} response is missing \"nonce\"`,\n\t\t);\n\t}\n\treturn BigInt(nonce);\n}\n",
|
|
10
10
|
"import { BaseError } from \"./base.ts\";\n\n/**\n * Thrown by the HTTP transport when a request, headers and body included,\n * does not finish inside `timeout`. Carries enough to tell which endpoint\n * stalled and on which retry attempt. A caller-supplied `signal` abort is\n * NOT a timeout: that rejects with the signal's own reason and never retries.\n */\nexport class TimeoutError extends BaseError {\n\toverride name = \"TimeoutError\";\n\tmethod: string;\n\turl: string;\n\ttimeout: number;\n\t/** Zero-based attempt index at which the timeout fired. */\n\tattempt: number;\n\n\tconstructor(params: {\n\t\tmethod: string;\n\t\turl: string;\n\t\ttimeout: number;\n\t\tattempt: number;\n\t}) {\n\t\tsuper(\n\t\t\t`${params.method} ${params.url} did not complete within ${params.timeout}ms (attempt ${params.attempt + 1})`,\n\t\t);\n\t\tthis.method = params.method;\n\t\tthis.url = params.url;\n\t\tthis.timeout = params.timeout;\n\t\tthis.attempt = params.attempt;\n\t}\n}\n",
|
|
11
11
|
"import { HttpRequestError } from \"../errors/http.ts\";\nimport { TimeoutError } from \"../errors/transport.ts\";\nimport type {\n\tRequestFn,\n\tRequestOptions,\n\tTransport,\n\tTransportConfig,\n} from \"./types.ts\";\n\n/** Bind a request function into a transport. The exposed `config` never\n * carries `apiKey`: the key lives in the request closure, so logging a\n * client or inspecting `client.transport.config` does not print it. */\nexport function createTransport(\n\ttype: string,\n\tconfig: TransportConfig & { request: RequestFn },\n): Transport {\n\tconst { request, apiKey: _apiKey, ...exposed } = config;\n\treturn {\n\t\ttype,\n\t\trequest,\n\t\tconfig: exposed,\n\t};\n}\n\n/** Longest response body kept on `HttpRequestError.details`. The body is\n * untrusted and lands in `error.message`, so a runaway HTML page or a\n * hostile reply must not become a multi-megabyte log line. */\nexport const MAX_ERROR_DETAILS_BYTES = 4096;\n\nfunction capDetails(body: string | undefined): string | undefined {\n\tif (body === undefined) return undefined;\n\tconst bytes = new TextEncoder().encode(body);\n\tif (bytes.length <= MAX_ERROR_DETAILS_BYTES) return body;\n\tconst head = new TextDecoder().decode(\n\t\tbytes.subarray(0, MAX_ERROR_DETAILS_BYTES),\n\t);\n\treturn `${head}... [truncated ${bytes.length - MAX_ERROR_DETAILS_BYTES} bytes]`;\n}\n\n/** 5xx and 429 are transient and worth a retry. Every other status is not. */\nfunction isRetryableStatus(status: number): boolean {\n\treturn status === 429 || status >= 500;\n}\n\n/** Retry-After above this cap falls back to the normal backoff: a node\n * asking for minutes should not stall a transport-level retry. */\nconst MAX_RETRY_AFTER_MS = 60_000;\n\n/** Parse a `Retry-After` header (delta-seconds or HTTP-date) into a delay,\n * or undefined when absent/unparseable/over the cap. */\nfunction retryAfterMs(response: Response): number | undefined {\n\tconst value = response.headers.get(\"Retry-After\");\n\tif (!value) return undefined;\n\tconst seconds = Number(value);\n\tconst ms = Number.isFinite(seconds)\n\t\t? seconds * 1000\n\t\t: Date.parse(value) - Date.now();\n\tif (!Number.isFinite(ms) || ms < 0 || ms > MAX_RETRY_AFTER_MS)\n\t\treturn undefined;\n\treturn ms;\n}\n\nfunction abortReason(signal: AbortSignal): Error {\n\tconst reason = signal.reason;\n\tif (reason instanceof Error) return reason;\n\treturn new DOMException(\n\t\ttypeof reason === \"string\" ? reason : \"The operation was aborted\",\n\t\t\"AbortError\",\n\t);\n}\n\n/** Sleep that wakes early (rejecting with the abort reason) when `signal` fires. */\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal?.aborted) return reject(abortReason(signal));\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(id);\n\t\t\treject(abortReason(signal as AbortSignal));\n\t\t};\n\t\tconst id = setTimeout(() => {\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n\nexport type FetchWithRetryOptions<T> = {\n\t/** Caller-side cancellation. Combined with the timeout; never retried. */\n\tsignal?: AbortSignal;\n\t/**\n\t * Consume the response body inside the timeout window. Defaults to\n\t * returning the `Response` untouched, in which case the caller reads the\n\t * body outside the deadline.\n\t */\n\tread?: (response: Response) => Promise<T>;\n};\n\n/**\n * Fetch with linear backoff on network errors, timeouts, 429 and 5xx.\n *\n * One timeout covers each attempt end to end, headers and body: the timer is\n * armed before `fetch` and cleared once the attempt settles (before any\n * retry sleep, and in `finally`), so a body that never arrives rejects with\n * {@link TimeoutError} rather than hanging the caller, and a rejected fetch\n * never leaves a live timer behind.\n * A caller abort (`signal`) rejects at once with the signal's reason and is\n * not retried.\n */\nexport async function fetchWithRetry<T = Response>(\n\turl: string,\n\toptions: RequestInit,\n\tretryCount: number,\n\tretryDelay: number,\n\ttimeout: number,\n\textra: FetchWithRetryOptions<T> = {},\n): Promise<T> {\n\tconst { signal } = extra;\n\tconst read =\n\t\textra.read ?? (async (response: Response) => response as unknown as T);\n\tconst method = options.method ?? \"GET\";\n\tlet lastError: Error | undefined;\n\n\tfor (let attempt = 0; attempt <= retryCount; attempt++) {\n\t\tif (signal?.aborted) throw abortReason(signal);\n\n\t\tconst controller = new AbortController();\n\t\tlet timedOut = false;\n\t\tconst timeoutId = setTimeout(() => {\n\t\t\ttimedOut = true;\n\t\t\tcontroller.abort(new TimeoutError({ method, url, timeout, attempt }));\n\t\t}, timeout);\n\t\tconst onCallerAbort = () =>\n\t\t\tcontroller.abort(abortReason(signal as AbortSignal));\n\t\tsignal?.addEventListener(\"abort\", onCallerAbort, { once: true });\n\n\t\t// Rejects the moment the attempt is aborted, whether by the timer or by\n\t\t// the caller, so a body read on a stalled stream cannot outlive the\n\t\t// deadline even when the runtime does not tie the body to the signal.\n\t\tconst aborted = new Promise<never>((_, reject) => {\n\t\t\tif (controller.signal.aborted) return reject(controller.signal.reason);\n\t\t\tcontroller.signal.addEventListener(\n\t\t\t\t\"abort\",\n\t\t\t\t() => reject(controller.signal.reason),\n\t\t\t\t{ once: true },\n\t\t\t);\n\t\t});\n\n\t\tlet response: Response;\n\t\ttry {\n\t\t\ttry {\n\t\t\t\tresponse = await Promise.race([\n\t\t\t\t\tfetch(url, { ...options, signal: controller.signal }),\n\t\t\t\t\taborted,\n\t\t\t\t]);\n\t\t\t} catch (error) {\n\t\t\t\tif (signal?.aborted) throw abortReason(signal);\n\t\t\t\tlastError = timedOut\n\t\t\t\t\t? new TimeoutError({ method, url, timeout, attempt })\n\t\t\t\t\t: error instanceof Error\n\t\t\t\t\t\t? error\n\t\t\t\t\t\t: new Error(String(error));\n\t\t\t\tif (attempt < retryCount) {\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\tawait sleep(retryDelay * (attempt + 1), signal);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow lastError;\n\t\t\t}\n\n\t\t\tif (response.ok) {\n\t\t\t\ttry {\n\t\t\t\t\treturn await Promise.race([read(response), aborted]);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tresponse.body?.cancel().catch(() => {});\n\t\t\t\t\tif (signal?.aborted) throw abortReason(signal);\n\t\t\t\t\tif (!timedOut) throw error;\n\t\t\t\t\tlastError = new TimeoutError({ method, url, timeout, attempt });\n\t\t\t\t\tif (attempt < retryCount) {\n\t\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\t\tawait sleep(retryDelay * (attempt + 1), signal);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tthrow lastError;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst retryable = isRetryableStatus(response.status);\n\t\t\tif (!retryable || attempt === retryCount) {\n\t\t\t\tconst body = await Promise.race([\n\t\t\t\t\tresponse.text().catch(() => undefined),\n\t\t\t\t\taborted.catch(() => undefined),\n\t\t\t\t]);\n\t\t\t\tthrow new HttpRequestError(response.status, {\n\t\t\t\t\tdetails: capDetails(body),\n\t\t\t\t\turl,\n\t\t\t\t\tmethod,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlastError = new HttpRequestError(response.status, { url, method });\n\t\t\t// A server-sent Retry-After (429/503) overrides the linear backoff.\n\t\t\tconst delay = retryAfterMs(response) ?? retryDelay * (attempt + 1);\n\t\t\tresponse.body?.cancel().catch(() => {});\n\t\t\t// The attempt is over: a Retry-After longer than `timeout` must not\n\t\t\t// let the attempt timer fire mid-sleep and flag a timeout that never\n\t\t\t// happened.\n\t\t\tclearTimeout(timeoutId);\n\t\t\tawait sleep(delay, signal);\n\t\t} finally {\n\t\t\tclearTimeout(timeoutId);\n\t\t\tsignal?.removeEventListener(\"abort\", onCallerAbort);\n\t\t}\n\t}\n\n\tthrow lastError ?? new Error(\"Request failed\");\n}\n\n/** Decode a 2xx body: JSON when the content type says so, text otherwise. */\nexport async function readBody(response: Response): Promise<unknown> {\n\tconst contentType = response.headers.get(\"content-type\") ?? \"\";\n\tif (contentType.includes(\"application/json\")) {\n\t\treturn response.json();\n\t}\n\treturn response.text();\n}\n\nexport function buildRequestFn(\n\tbaseUrl: string,\n\tconfig: TransportConfig,\n): RequestFn {\n\tconst {\n\t\ttimeout = 30_000,\n\t\tretryCount = 3,\n\t\tretryDelay = 150,\n\t\tfetchOptions = {},\n\t\tapiKey,\n\t} = config;\n\n\treturn async (path: string, options?: RequestOptions) => {\n\t\tconst url = `${baseUrl.replace(/\\/$/, \"\")}${path}`;\n\t\tconst headers: Record<string, string> = {\n\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t...(fetchOptions.headers as Record<string, string>),\n\t\t\t...options?.headers,\n\t\t};\n\n\t\tif (apiKey) {\n\t\t\theaders[\"x-api-key\"] = apiKey;\n\t\t}\n\n\t\tconst init: RequestInit = {\n\t\t\t...fetchOptions,\n\t\t\tmethod: options?.method ?? \"GET\",\n\t\t\theaders,\n\t\t};\n\n\t\tif (options?.body !== undefined) {\n\t\t\tinit.body = JSON.stringify(options.body);\n\t\t}\n\n\t\treturn fetchWithRetry(\n\t\t\turl,\n\t\t\tinit,\n\t\t\toptions?.retryCount ?? retryCount,\n\t\t\tretryDelay,\n\t\t\ttimeout,\n\t\t\t{ signal: options?.signal, read: readBody },\n\t\t);\n\t};\n}\n",
|
|
12
12
|
"import { deserializeCVBytes } from \"../../clarity/deserialize.ts\";\nimport type { ClarityValue } from \"../../clarity/types.ts\";\nimport type { Client } from \"../../clients/types.ts\";\nimport { HttpRequestError } from \"../../errors/http.ts\";\nimport { buildRequestFn } from \"../../transports/createTransport.ts\";\nimport type { RequestFn } from \"../../transports/types.ts\";\n\n/**\n * Pluggable transaction-status sources for {@link getTransaction} /\n * `waitForTransactionReceipt`.\n *\n * A bare stacks-node has no confirmed-transaction endpoint, so status reads\n * need a host that indexes transactions. Where that data comes from is\n * pluggable, mirroring the nonce sources:\n *\n * - {@link extendedApiSource} — default; `/extended/v1/tx/{txid}` on the\n * client's transport host (Hiro API or any extended-API-compatible host).\n * - {@link indexTxSource}: a Secondlayer instance's\n * `/v1/index/transactions/{txid}`; returns the chain tip in the same\n * response, so N-confirmation waits need no second request.\n */\n\nexport type TransactionStatus =\n\t| \"pending\"\n\t| \"success\"\n\t| \"abort_by_response\"\n\t| \"abort_by_post_condition\"\n\t| \"dropped\";\n\nexport type TransactionReceipt = {\n\ttxid: string;\n\tstatus: TransactionStatus;\n\t/** Anchor block height; absent while pending. */\n\tblockHeight?: number;\n\tblockHash?: string;\n\t/** Decoded Clarity result; absent while pending or when the source omits it. */\n\tresult?: ClarityValue;\n\tresultHex?: string;\n\tevents: unknown[];\n\t/** The source's unnormalized response, for fields the receipt doesn't model. */\n\traw: unknown;\n};\n\nexport type TransactionSnapshot = {\n\t/** `null` when the source has no record of the tx (mempool + chain). */\n\treceipt: TransactionReceipt | null;\n\t/** Chain tip height, when the source knows it (saves a round-trip). */\n\ttip?: number;\n};\n\nexport type TransactionStatusSource = {\n\tget(args: { client: Client; txid: string }): Promise<TransactionSnapshot>;\n\t/**\n\t * True when the source only knows mined transactions and reports\n\t * `receipt: null` for the whole mempool life of a tx. The wait action\n\t * then stretches its dropped-grace window to the full timeout, since\n\t * \"unknown\" cannot mean \"dropped\" until the deadline.\n\t */\n\tcanonicalOnly?: boolean;\n};\n\n/**\n * Thrown when an index-backed source cannot reach a Secondlayer instance\n * because of how it was configured (no URL, a Hiro host, a bare node).\n * Sources that degrade on transient failures let this one through: a\n * misconfiguration would otherwise degrade silently on every read.\n */\nexport class IndexSourceConfigError extends Error {\n\toverride name = \"IndexSourceConfigError\";\n}\n\n/** Hosts that serve Hiro's API, never a Secondlayer instance. */\nfunction isHiroHost(url: string, client: Client): boolean {\n\tlet hostname: string;\n\ttry {\n\t\thostname = new URL(url).hostname;\n\t} catch {\n\t\treturn false;\n\t}\n\tif (hostname === \"hiro.so\" || hostname.endsWith(\".hiro.so\")) return true;\n\tconst defaults = client.chain?.rpcUrls?.default?.http ?? [];\n\treturn defaults.some((d) => {\n\t\ttry {\n\t\t\treturn new URL(d).hostname === hostname && hostname !== \"localhost\";\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t});\n}\n\n/**\n * Pick the request function for a Secondlayer index route. With no\n * `baseUrl` the client's transport URL is taken to be the instance and\n * `client.request` carries its retries, timeout and auth; a transport\n * pointed at a Hiro host throws instead of polling routes it cannot serve.\n * A different `baseUrl` gets the transport's retry and timeout policy\n * bound to that host. Only policy crosses over: the transport's `apiKey`\n * and `fetchOptions` were issued for the transport host and never travel\n * to another one.\n */\nexport function indexRequestFn(\n\tclient: Client,\n\tbaseUrl: string | undefined,\n\tsourceName: string,\n): RequestFn {\n\tconst transportUrl = client.transport.config.url?.replace(/\\/$/, \"\");\n\tif (baseUrl === undefined) {\n\t\tif (!transportUrl) {\n\t\t\tthrow new IndexSourceConfigError(\n\t\t\t\t`${sourceName} needs the URL of your Secondlayer instance: pass baseUrl, or use an http() transport pointed at the instance`,\n\t\t\t);\n\t\t}\n\t\tif (isHiroHost(transportUrl, client)) {\n\t\t\tthrow new IndexSourceConfigError(\n\t\t\t\t`${sourceName} reads /v1/index on a Secondlayer instance, and ${transportUrl} is a Hiro host: pass baseUrl with the URL of your instance`,\n\t\t\t);\n\t\t}\n\t\treturn client.request;\n\t}\n\tconst target = baseUrl.replace(/\\/$/, \"\");\n\tif (target === transportUrl) return client.request;\n\tconst { timeout, retryCount, retryDelay } = client.transport.config;\n\treturn buildRequestFn(target, { timeout, retryCount, retryDelay });\n}\n\n/**\n * An instance answers an unknown tx with a JSON 404.\n * A 404 with a non-JSON body comes from a host that does not serve\n * `/v1/index` at all (a bare stacks-node, an unmatched route), so it is a\n * configuration error rather than \"not mined yet\".\n */\nexport function indexNotFound(\n\terror: unknown,\n\tsourceName: string,\n): error is HttpRequestError {\n\tif (!(error instanceof HttpRequestError) || error.status !== 404) {\n\t\treturn false;\n\t}\n\tconst body = error.details;\n\tif (body !== undefined) {\n\t\ttry {\n\t\t\tJSON.parse(body);\n\t\t} catch {\n\t\t\tthrow new IndexSourceConfigError(\n\t\t\t\t`${sourceName} got a non-JSON 404 from ${error.url ?? \"the transport host\"}: it does not serve /v1/index, pass baseUrl with the URL of your Secondlayer instance`,\n\t\t\t\t{ cause: error },\n\t\t\t);\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction normalizeTxid(txid: string): string {\n\treturn txid.startsWith(\"0x\") ? txid : `0x${txid}`;\n}\n\nfunction decodeResultHex(hex: string | null | undefined): {\n\tresult?: ClarityValue;\n\tresultHex?: string;\n} {\n\tif (!hex) return {};\n\ttry {\n\t\treturn { result: deserializeCVBytes(hex), resultHex: hex };\n\t} catch {\n\t\treturn { resultHex: hex };\n\t}\n}\n\n/** Map a Hiro `tx_status` string onto the receipt vocabulary. */\nfunction normalizeStatus(txStatus: string): TransactionStatus | undefined {\n\tswitch (txStatus) {\n\t\tcase \"pending\":\n\t\tcase \"success\":\n\t\tcase \"abort_by_response\":\n\t\tcase \"abort_by_post_condition\":\n\t\t\treturn txStatus;\n\t\tdefault:\n\t\t\treturn txStatus.startsWith(\"dropped\") ? \"dropped\" : undefined;\n\t}\n}\n\n/**\n * Default source: `GET /extended/v1/tx/{txid}` via the client's transport.\n * Requires a host that serves Hiro's extended API (a bare stacks-node does\n * not). Does not report the chain tip — the wait action fetches it separately\n * when `confirmations > 1`.\n */\nexport function extendedApiSource(): TransactionStatusSource {\n\treturn {\n\t\tasync get({ client, txid }) {\n\t\t\tlet data: Awaited<ReturnType<Client[\"request\"]>>;\n\t\t\ttry {\n\t\t\t\tdata = await client.request(\n\t\t\t\t\t`/extended/v1/tx/${encodeURIComponent(normalizeTxid(txid))}`,\n\t\t\t\t\t{ method: \"GET\" },\n\t\t\t\t);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof HttpRequestError && error.status === 404) {\n\t\t\t\t\treturn { receipt: null };\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tconst txStatus =\n\t\t\t\ttypeof data?.tx_status === \"string\" ? data.tx_status : undefined;\n\t\t\tif (!txStatus) return { receipt: null }; // unexpected shape\n\n\t\t\tconst status = normalizeStatus(txStatus);\n\t\t\tif (!status) return { receipt: null };\n\n\t\t\treturn {\n\t\t\t\treceipt: {\n\t\t\t\t\ttxid: normalizeTxid(txid),\n\t\t\t\t\tstatus,\n\t\t\t\t\tblockHeight:\n\t\t\t\t\t\ttypeof data.block_height === \"number\" && data.block_height > 0\n\t\t\t\t\t\t\t? data.block_height\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\tblockHash: data.block_hash ?? undefined,\n\t\t\t\t\t...decodeResultHex(data.tx_result?.hex),\n\t\t\t\t\tevents: Array.isArray(data.events) ? data.events : [],\n\t\t\t\t\traw: data,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\nexport type IndexTxSourceParams = {\n\t/**\n\t * URL of your Secondlayer instance. Without it the client's transport\n\t * URL is assumed to be the instance: a transport on a Hiro host throws\n\t * up front, and a host that answers `/v1/index` with a non-JSON 404\n\t * (a bare stacks-node) throws on the first read. Pass it whenever the\n\t * transport is not the instance.\n\t */\n\tbaseUrl?: string;\n\t/** Instance token, sent as `Authorization: Bearer`. */\n\tapiKey?: string;\n};\n\n/**\n * Source backed by a Secondlayer instance's `/v1/index/transactions/{txid}`.\n * The response embeds the chain tip, so N-confirmation math needs no extra\n * request. Requests go through the transport layer: same retries, timeout\n * and typed errors as every other read. The index only returns canonical\n * (mined) transactions; while a tx is in the mempool this source reports\n * `receipt: null`, and the wait action's grace window carries it until\n * inclusion.\n */\nexport function indexTxSource(\n\tparams: IndexTxSourceParams = {},\n): TransactionStatusSource {\n\tconst headers = params.apiKey\n\t\t? { authorization: `Bearer ${params.apiKey}` }\n\t\t: undefined;\n\n\treturn {\n\t\tcanonicalOnly: true,\n\t\tasync get({ client, txid }) {\n\t\t\tconst request = indexRequestFn(client, params.baseUrl, \"indexTxSource\");\n\t\t\tlet data: {\n\t\t\t\ttransaction?: {\n\t\t\t\t\ttx_id: string;\n\t\t\t\t\tblock_height: number;\n\t\t\t\t\tstatus: string;\n\t\t\t\t\tcontract_call?: { result_hex: string | null };\n\t\t\t\t};\n\t\t\t\ttip?: { block_height: number };\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tdata = await request(`/v1/index/transactions/${normalizeTxid(txid)}`, {\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\theaders,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (indexNotFound(error, \"indexTxSource\")) return { receipt: null };\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst tx = data.transaction;\n\t\t\tconst tip = data.tip?.block_height;\n\t\t\tif (!tx) return { receipt: null, tip };\n\n\t\t\tconst status = normalizeStatus(tx.status) ?? \"success\";\n\t\t\treturn {\n\t\t\t\treceipt: {\n\t\t\t\t\ttxid: normalizeTxid(tx.tx_id),\n\t\t\t\t\tstatus,\n\t\t\t\t\tblockHeight: tx.block_height,\n\t\t\t\t\t...decodeResultHex(tx.contract_call?.result_hex),\n\t\t\t\t\tevents: [],\n\t\t\t\t\traw: data,\n\t\t\t\t},\n\t\t\t\ttip,\n\t\t\t};\n\t\t},\n\t};\n}\n",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"import type { ProviderAccount } from \"../../accounts/types.ts\";\nimport type { Account, Client } from \"../../clients/types.ts\";\nimport { HttpRequestError } from \"../../errors/http.ts\";\nimport type { StacksTransaction } from \"../../transactions/types.ts\";\nimport {\n\tclearTxCache,\n\tserializeTransaction,\n} from \"../../transactions/wire/serialize.ts\";\nimport type { IntegerType } from \"../../utils/encoding.ts\";\nimport { intToBigInt } from \"../../utils/encoding.ts\";\nimport { estimateFee } from \"../public/estimateFee.ts\";\n\nexport function isProviderAccount(\n\taccount: Account,\n): account is ProviderAccount {\n\treturn account.type === \"provider\";\n}\n\n/**\n * Named fee tiers. `'low' | 'mid' | 'high'` map to the node's three fee\n * estimations; `'min'` is the node's minimum relay fee — 1 uSTX per byte of\n * the serialized transaction, computable offline.\n */\nexport type FeeTier = \"min\" | \"low\" | \"mid\" | \"high\";\n\n/** Fee input accepted by wallet actions: an explicit amount or a named tier. */\nexport type FeeParam = IntegerType | FeeTier;\n\nconst FEE_TIERS: readonly FeeTier[] = [\"min\", \"low\", \"mid\", \"high\"];\nconst TIER_INDEX = { low: 0, mid: 1, high: 2 } as const;\n\nexport function isFeeTier(fee: FeeParam | undefined): fee is FeeTier {\n\treturn typeof fee === \"string\" && FEE_TIERS.includes(fee as FeeTier);\n}\n\n/**\n * Minimum relay fee: 1 uSTX per byte of the serialized transaction. The fee\n * field is fixed-width (8 bytes), so the size — and therefore this floor — is\n * stable regardless of the fee value later set on the spending condition.\n */\nexport function minimumFee(transaction: StacksTransaction): bigint {\n\treturn BigInt(serializeTransaction(transaction).length);\n}\n\n/** Outcome of {@link resolveFee}: the amount and which tier produced it. */\nexport type ResolvedFee = {\n\tfee: bigint;\n\t/**\n\t * Tier the amount came from. `'min'` when the estimator had no estimate\n\t * and the relay floor was used instead. Absent when the caller passed an\n\t * exact amount.\n\t */\n\ttier?: FeeTier;\n};\n\n/**\n * True when the node answered `POST /v2/fees/transaction` with 400\n * `NoEstimateAvailable`: it is healthy but has no fee history for this\n * payload (fresh devnet, quiet chain). Every other failure means the\n * estimate was never obtained and must surface to the caller.\n */\nexport function isNoEstimateAvailable(error: unknown): boolean {\n\treturn (\n\t\terror instanceof HttpRequestError &&\n\t\terror.status === 400 &&\n\t\t(error.details?.includes(\"NoEstimateAvailable\") ?? false)\n\t);\n}\n\n/**\n * Resolve a fee param to a concrete amount. Numeric input passes through.\n * Tiers `'low' | 'mid' | 'high'` index the node's estimations (nearest\n * available when fewer than three are returned); `'min'` resolves to\n * {@link minimumFee}, which needs no network round-trip.\n *\n * The relay floor is the fallback ONLY when the node reports\n * `NoEstimateAvailable` or returns no estimations. A transport timeout, 5xx,\n * or auth failure rethrows: silently under-paying because the node was\n * unreachable would strand the transaction in the mempool.\n */\nexport async function resolveFee(\n\tclient: Client,\n\ttransaction: StacksTransaction,\n\tfee: FeeParam | undefined,\n): Promise<ResolvedFee> {\n\tif (fee !== undefined && !isFeeTier(fee)) return { fee: intToBigInt(fee) };\n\n\tconst tier = fee ?? \"mid\";\n\tif (tier === \"min\") return { fee: minimumFee(transaction), tier };\n\n\tlet estimates: Awaited<ReturnType<typeof estimateFee>>;\n\ttry {\n\t\testimates = await estimateFee(client, { transaction });\n\t} catch (error) {\n\t\tif (!isNoEstimateAvailable(error)) throw error;\n\t\treturn { fee: minimumFee(transaction), tier: \"min\" };\n\t}\n\tconst pick = estimates[TIER_INDEX[tier]] ?? estimates[estimates.length - 1];\n\tif (pick) return { fee: BigInt(pick.fee), tier };\n\treturn { fee: minimumFee(transaction), tier: \"min\" };\n}\n\n/** Set the resolved fee on an unsigned transaction's origin spending condition. */\nexport function setUnsignedFee(\n\ttransaction: StacksTransaction,\n\tfee: bigint,\n): void {\n\t// biome-ignore lint/suspicious/noExplicitAny: interop boundary or dynamic-shape value where typing adds friction without runtime safety\n\t(transaction.auth.spendingCondition as any).fee = fee;\n\t// In-place mutation: invalidate the memoized serialization (resolveFee may\n\t// have already serialized this object via minimumFee/estimateFee).\n\tclearTxCache(transaction);\n}\n\n/** Throw when a named fee tier is used with a provider (wallet) account. */\nexport function assertNoFeeTierForProvider(fee: FeeParam | undefined): void {\n\tif (isFeeTier(fee)) {\n\t\tthrow new Error(\n\t\t\t`Fee tier '${fee}' requires local signing; provider (wallet) accounts set their own fee`,\n\t\t);\n\t}\n}\n",
|
|
18
18
|
"import type { ClarityValue } from \"../../clarity/types.ts\";\nimport type { Client } from \"../../clients/types.ts\";\nimport type {\n\tPostConditionInput,\n\tPostConditionMode,\n} from \"../../postconditions/types.ts\";\nimport { buildContractCall } from \"../../transactions/build.ts\";\nimport { signTransactionWithAccount } from \"../../transactions/signer.ts\";\nimport { parseContractId } from \"../../utils/address.ts\";\nimport type { IntegerType } from \"../../utils/encoding.ts\";\nimport {\n\tbroadcastWithNonceReset,\n\treleaseNonce,\n\tresolveNonce,\n} from \"./nonceManager.ts\";\nimport {\n\ttype FeeParam,\n\tassertNoFeeTierForProvider,\n\tisFeeTier,\n\tisProviderAccount,\n\tresolveFee,\n\tsetUnsignedFee,\n} from \"./utils.ts\";\n\nexport type CallContractParams = {\n\tcontract: string; // \"address.name\"\n\tfunctionName: string;\n\tfunctionArgs?: ClarityValue[];\n\tfee?: FeeParam;\n\tnonce?: IntegerType;\n\tpostConditionMode?: PostConditionMode;\n\tpostConditions?: PostConditionInput[];\n};\n\n/** Build, sign, and broadcast a contract call */\nexport async function callContract(\n\tclient: Client,\n\tparams: CallContractParams,\n): Promise<string> {\n\tconst account = client.account;\n\tif (!account) throw new Error(\"Account required\");\n\n\t// Validate the contract id up front so both the provider and local paths\n\t// reject malformed input instead of forwarding it to the wallet.\n\tconst [contractAddress, contractName] = parseContractId(params.contract);\n\n\t// Provider: delegate to wallet\n\tif (isProviderAccount(account)) {\n\t\tassertNoFeeTierForProvider(params.fee);\n\t\tconst result = await account.provider.request(\"stx_callContract\", {\n\t\t\tcontract: params.contract,\n\t\t\tfunctionName: params.functionName,\n\t\t\tfunctionArgs: params.functionArgs ?? [],\n\t\t});\n\t\treturn result.txid;\n\t}\n\n\t// Local/Custom: build → sign → broadcast\n\tconst managed =\n\t\tparams.nonce === undefined && client.nonceManager !== undefined;\n\tconst nonce = params.nonce ?? (await resolveNonce(client, account.address));\n\n\ttry {\n\t\tconst needsFeeResolution =\n\t\t\tparams.fee === undefined || isFeeTier(params.fee);\n\n\t\tconst unsigned = buildContractCall({\n\t\t\tcontractAddress,\n\t\t\tcontractName,\n\t\t\tfunctionName: params.functionName,\n\t\t\tfunctionArgs: params.functionArgs ?? [],\n\t\t\tfee: needsFeeResolution ? 0n : (params.fee as IntegerType),\n\t\t\tnonce,\n\t\t\tpublicKey: account.publicKey,\n\t\t\tchain: client.chain,\n\t\t\tpostConditionMode: params.postConditionMode,\n\t\t\tpostConditions: params.postConditions,\n\t\t});\n\n\t\tif (needsFeeResolution) {\n\t\t\tconst { fee } = await resolveFee(client, unsigned, params.fee);\n\t\t\tsetUnsignedFee(unsigned, fee);\n\t\t}\n\n\t\tconst signed = await signTransactionWithAccount(unsigned, account);\n\t\treturn await broadcastWithNonceReset(client, {\n\t\t\ttransaction: signed,\n\t\t\taddress: account.address,\n\t\t});\n\t} catch (error) {\n\t\t// Anything that fails between reserving the nonce and a 2xx broadcast\n\t\t// (fee estimate, signing, FeeTooLow, transport) never reached the\n\t\t// mempool: hand the nonce back so the next send does not skip it.\n\t\tif (managed) await releaseNonce(client, account.address, nonce as bigint);\n\t\tthrow error;\n\t}\n}\n"
|
|
19
19
|
],
|
|
20
|
-
"mappings": "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",
|
|
21
|
-
"debugId": "
|
|
20
|
+
"mappings": "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",
|
|
21
|
+
"debugId": "C746B6AF7E1C8C7C64756E2164756E21",
|
|
22
22
|
"names": []
|
|
23
23
|
}
|
|
@@ -27,7 +27,7 @@ function getContract(params) {
|
|
|
27
27
|
const fn = fnByName.get(fnName);
|
|
28
28
|
if (!fn || fn.access !== "read-only")
|
|
29
29
|
return;
|
|
30
|
-
return async (args) => {
|
|
30
|
+
return async (args = {}) => {
|
|
31
31
|
const clarityArgs = buildFunctionArgs(fn, args);
|
|
32
32
|
const result = await readContract(client, {
|
|
33
33
|
contract: contractId,
|
|
@@ -51,7 +51,7 @@ function getContract(params) {
|
|
|
51
51
|
const fn = fnByName.get(fnName);
|
|
52
52
|
if (!fn || fn.access !== "public")
|
|
53
53
|
return;
|
|
54
|
-
return async (args, options) => {
|
|
54
|
+
return async (args = {}, options) => {
|
|
55
55
|
const clarityArgs = buildFunctionArgs(fn, args);
|
|
56
56
|
return callContract(client, {
|
|
57
57
|
contract: contractId,
|
|
@@ -68,7 +68,7 @@ function getContract(params) {
|
|
|
68
68
|
const fn = fnByName.get(fnName);
|
|
69
69
|
if (!fn || fn.access !== "public")
|
|
70
70
|
return;
|
|
71
|
-
return async (args, options) => {
|
|
71
|
+
return async (args = {}, options) => {
|
|
72
72
|
const publicKey = options?.publicKey ?? client.account?.publicKey;
|
|
73
73
|
if (!publicKey) {
|
|
74
74
|
throw new Error("buildCall requires a publicKey (pass options.publicKey or configure a client account)");
|
|
@@ -129,7 +129,7 @@ function resolveNetworkContract(client, contracts) {
|
|
|
129
129
|
}
|
|
130
130
|
return contracts[client.chain.network];
|
|
131
131
|
}
|
|
132
|
-
function buildFunctionArgs(fn, args) {
|
|
132
|
+
function buildFunctionArgs(fn, args = {}) {
|
|
133
133
|
return fn.args.map((arg) => {
|
|
134
134
|
const camelKey = toCamelCase(arg.name);
|
|
135
135
|
const hasOriginal = arg.name in args;
|
|
@@ -160,5 +160,5 @@ class ContractResponseError extends Error {
|
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
|
|
163
|
-
//# debugId=
|
|
164
|
-
//# sourceMappingURL=stacks-
|
|
163
|
+
//# debugId=81FCE32BF632C55964756E2164756E21
|
|
164
|
+
//# sourceMappingURL=stacks-f35mnrmg.cjs.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/actions/getContract.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type {\n\tAbiContract,\n\tAbiFunction,\n\tAbiMap,\n\tAbiType,\n\tAbiTypesOf,\n\tContractTypes,\n\tExtractFunctionArgs,\n\tExtractFunctionOutput,\n\tExtractMapKey,\n\tExtractMapNames,\n\tExtractMapValue,\n\tExtractPublicFunctions,\n\tExtractReadOnlyFunctions,\n} from \"../clarity/abi/index.ts\";\nimport { type ToCamelCase, toCamelCase } from \"../clarity/abi/utils.ts\";\nimport {\n\tclarityValueToJSUntyped,\n\tjsToClarityValue,\n} from \"../clarity/bridge.ts\";\nimport type { ClarityValue } from \"../clarity/types.ts\";\nimport type { Client } from \"../clients/types.ts\";\nimport type {\n\tPostConditionInput,\n\tPostConditionMode,\n} from \"../postconditions/types.ts\";\nimport { buildContractCall } from \"../transactions/build.ts\";\nimport type { StacksTransaction } from \"../transactions/types.ts\";\nimport { publicKeyToAddress } from \"../utils/address.ts\";\nimport type { IntegerType } from \"../utils/encoding.ts\";\nimport { getMapEntry } from \"./public/getMapEntry.ts\";\nimport { getNonce } from \"./public/getNonce.ts\";\nimport { readContract } from \"./public/readContract.ts\";\nimport { callContract } from \"./wallet/callContract.ts\";\nimport { resolveFee, setUnsignedFee } from \"./wallet/utils.ts\";\n\n// --- Type helpers for unwrapping response types ---\n\n/**\n * Unwrap `(response ok err)` → just the `ok` branch type. Distributes over the\n * `{ ok } | { err }` union: the `err` branch maps to `never` (it throws\n * `ContractResponseError` at runtime, so it never reaches the caller).\n */\nexport type UnwrapResponse<T> = T extends { ok: infer O }\n\t? O\n\t: T extends { err: unknown }\n\t\t? never\n\t\t: T;\n\n/**\n * True for a structural empty mapped type (`{}`) and for codegen's\n * `Record<string, never>`. `keyof Record<string, never>` is `string`, so the\n * first check alone is not enough.\n */\ntype IsEmptyArgs<A> = [keyof A & string] extends [never]\n\t? true\n\t: Record<string, never> extends A\n\t\t? true\n\t\t: false;\n\n/** No-arg ABI functions may omit the dummy `{}`. Functions with args stay required. */\ntype ContractMethod<\n\tA,\n\tR,\n\tExtra extends unknown[] = [],\n> = IsEmptyArgs<A> extends true\n\t? (args?: A, ...extra: Extra) => R\n\t: (args: A, ...extra: Extra) => R;\n\ntype ReadMethodReturn<\n\tC extends AbiContract,\n\tN extends ExtractReadOnlyFunctions<C>,\n> = UnwrapResponse<ExtractFunctionOutput<C, N>>;\n\n// --- Public type for the contract instance ---\n\n/**\n * When the ABI carries a codegen brand (`TypedAbi`), method types resolve to\n * the generated named aliases — cleaner hovers and error messages. Un-branded\n * ABIs fall back to structural inference over the as-const literal.\n */\ntype TypedReadMethods<T extends ContractTypes> = {\n\t[K in keyof T[\"functions\"] as T[\"functions\"][K][\"access\"] extends \"read-only\"\n\t\t? K\n\t\t: never]: ContractMethod<\n\t\tT[\"functions\"][K][\"args\"],\n\t\tPromise<UnwrapResponse<T[\"functions\"][K][\"ret\"]>>\n\t>;\n};\n\ntype TypedCallMethods<T extends ContractTypes> = {\n\t[K in keyof T[\"functions\"] as T[\"functions\"][K][\"access\"] extends \"public\"\n\t\t? K\n\t\t: never]: ContractMethod<\n\t\tT[\"functions\"][K][\"args\"],\n\t\tPromise<string>,\n\t\t[options?: ContractCallOptions]\n\t>;\n};\n\ntype TypedMapMethods<T extends ContractTypes> = {\n\t[K in keyof NonNullable<T[\"maps\"]>]: (\n\t\tkey: NonNullable<T[\"maps\"]>[K][\"key\"],\n\t) => Promise<NonNullable<T[\"maps\"]>[K][\"value\"] | null>;\n};\n\ntype ReadMethods<C extends AbiContract> = [AbiTypesOf<C>] extends [never]\n\t? {\n\t\t\t[N in ExtractReadOnlyFunctions<C> as ToCamelCase<N>]: ContractMethod<\n\t\t\t\tExtractFunctionArgs<C, N>,\n\t\t\t\tPromise<ReadMethodReturn<C, N>>\n\t\t\t>;\n\t\t}\n\t: TypedReadMethods<AbiTypesOf<C>>;\n\ntype CallMethods<C extends AbiContract> = [AbiTypesOf<C>] extends [never]\n\t? {\n\t\t\t[N in ExtractPublicFunctions<C> as ToCamelCase<N>]: ContractMethod<\n\t\t\t\tExtractFunctionArgs<C, N>,\n\t\t\t\tPromise<string>,\n\t\t\t\t[options?: ContractCallOptions]\n\t\t\t>;\n\t\t}\n\t: TypedCallMethods<AbiTypesOf<C>>;\n\ntype MapMethods<C extends AbiContract> = [AbiTypesOf<C>] extends [never]\n\t? {\n\t\t\t[N in ExtractMapNames<C> as ToCamelCase<N>]: (\n\t\t\t\tkey: ExtractMapKey<C, N>,\n\t\t\t) => Promise<ExtractMapValue<C, N> | null>;\n\t\t}\n\t: TypedMapMethods<AbiTypesOf<C>>;\n\nexport type ContractCallOptions = {\n\tfee?: IntegerType;\n\tnonce?: IntegerType;\n\tpostConditionMode?: PostConditionMode;\n\tpostConditions?: PostConditionInput[];\n};\n\n/**\n * Options for `buildCall.*`, building an unsigned transaction for\n * wallet-signs-later flows. `publicKey` defaults to the client account's\n * public key. When omitted, `nonce` is the confirmed on-chain nonce read\n * straight from the node (the client's nonce manager is never consumed for\n * a transaction that may never be sent) and `fee` is the mid estimate,\n * falling back to the relay floor only on `NoEstimateAvailable`.\n */\nexport type ContractBuildCallOptions = ContractCallOptions & {\n\tpublicKey?: string;\n\tsponsored?: boolean;\n};\n\ntype TypedBuildCallMethods<T extends ContractTypes> = {\n\t[K in keyof T[\"functions\"] as T[\"functions\"][K][\"access\"] extends \"public\"\n\t\t? K\n\t\t: never]: ContractMethod<\n\t\tT[\"functions\"][K][\"args\"],\n\t\tPromise<StacksTransaction>,\n\t\t[options?: ContractBuildCallOptions]\n\t>;\n};\n\ntype BuildCallMethods<C extends AbiContract> = [AbiTypesOf<C>] extends [never]\n\t? {\n\t\t\t[N in ExtractPublicFunctions<C> as ToCamelCase<N>]: ContractMethod<\n\t\t\t\tExtractFunctionArgs<C, N>,\n\t\t\t\tPromise<StacksTransaction>,\n\t\t\t\t[options?: ContractBuildCallOptions]\n\t\t\t>;\n\t\t}\n\t: TypedBuildCallMethods<AbiTypesOf<C>>;\n\nexport type ContractInstance<C extends AbiContract> = {\n\tread: ReadMethods<C>;\n\tcall: CallMethods<C>;\n\t/** Build unsigned transactions (wallet-signs-later) — never broadcasts. */\n\tbuildCall: BuildCallMethods<C>;\n\tmaps: MapMethods<C>;\n};\n\nexport type GetContractParams<C extends AbiContract> = {\n\tclient: Client;\n\taddress: string;\n\tname: string;\n\tabi: C;\n};\n\nexport function getContract<const TAbi extends AbiContract>(\n\tparams: GetContractParams<TAbi>,\n): ContractInstance<TAbi> {\n\tconst { client, address, name: contractName, abi } = params;\n\tconst contractId = `${address}.${contractName}`;\n\n\t// Index functions/maps by name for fast lookup\n\tconst fnByName = new Map<string, AbiFunction>();\n\tfor (const fn of abi.functions) {\n\t\tfnByName.set(fn.name, fn as AbiFunction);\n\t}\n\n\tconst mapByName = new Map<string, AbiMap>();\n\tif (abi.maps) {\n\t\tfor (const m of abi.maps) {\n\t\t\tmapByName.set(m.name, m as AbiMap);\n\t\t}\n\t}\n\n\t// Build kebab→camel reverse map for function/map names\n\tconst camelToKebab = new Map<string, string>();\n\tfor (const fn of abi.functions) {\n\t\tcamelToKebab.set(toCamelCase(fn.name), fn.name);\n\t}\n\tif (abi.maps) {\n\t\tfor (const m of abi.maps) {\n\t\t\tcamelToKebab.set(toCamelCase(m.name), m.name);\n\t\t}\n\t}\n\n\tconst read = new Proxy({} as ReadMethods<TAbi>, {\n\t\tget(_target, prop: string) {\n\t\t\tconst fnName = camelToKebab.get(prop) ?? prop;\n\t\t\tconst fn = fnByName.get(fnName);\n\t\t\tif (!fn || fn.access !== \"read-only\") return undefined;\n\n\t\t\treturn async (args: Record<string, unknown> = {}) => {\n\t\t\t\tconst clarityArgs = buildFunctionArgs(fn, args);\n\t\t\t\tconst result = await readContract(client, {\n\t\t\t\t\tcontract: contractId,\n\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\targs: clarityArgs,\n\t\t\t\t});\n\n\t\t\t\tconst jsValue = clarityValueToJSUntyped(fn.outputs as AbiType, result);\n\n\t\t\t\t// Auto-unwrap: if output is response type, unwrap ok / throw on err\n\t\t\t\tif (isResponseOutput(fn.outputs as AbiType)) {\n\t\t\t\t\tconst resp = jsValue as { ok?: unknown; err?: unknown };\n\t\t\t\t\tif (\"ok\" in resp) return resp.ok;\n\t\t\t\t\tthrow new ContractResponseError(\n\t\t\t\t\t\t`${contractId}::${fn.name} returned (err ${formatErrValue(resp.err)})`,\n\t\t\t\t\t\tresp.err,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn jsValue;\n\t\t\t};\n\t\t},\n\t});\n\n\tconst call = new Proxy({} as CallMethods<TAbi>, {\n\t\tget(_target, prop: string) {\n\t\t\tconst fnName = camelToKebab.get(prop) ?? prop;\n\t\t\tconst fn = fnByName.get(fnName);\n\t\t\tif (!fn || fn.access !== \"public\") return undefined;\n\n\t\t\treturn async (\n\t\t\t\targs: Record<string, unknown> = {},\n\t\t\t\toptions?: ContractCallOptions,\n\t\t\t) => {\n\t\t\t\tconst clarityArgs = buildFunctionArgs(fn, args);\n\t\t\t\treturn callContract(client, {\n\t\t\t\t\tcontract: contractId,\n\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\tfunctionArgs: clarityArgs,\n\t\t\t\t\t...options,\n\t\t\t\t});\n\t\t\t};\n\t\t},\n\t});\n\n\tconst buildCall = new Proxy({} as BuildCallMethods<TAbi>, {\n\t\tget(_target, prop: string) {\n\t\t\tconst fnName = camelToKebab.get(prop) ?? prop;\n\t\t\tconst fn = fnByName.get(fnName);\n\t\t\tif (!fn || fn.access !== \"public\") return undefined;\n\n\t\t\treturn async (\n\t\t\t\targs: Record<string, unknown> = {},\n\t\t\t\toptions?: ContractBuildCallOptions,\n\t\t\t) => {\n\t\t\t\tconst publicKey = options?.publicKey ?? client.account?.publicKey;\n\t\t\t\tif (!publicKey) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"buildCall requires a publicKey (pass options.publicKey or configure a client account)\",\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst functionArgs = buildFunctionArgs(fn, args);\n\t\t\t\tconst network = client.chain?.network ?? \"mainnet\";\n\t\t\t\tconst nonce =\n\t\t\t\t\toptions?.nonce ??\n\t\t\t\t\t(await getNonce(client, {\n\t\t\t\t\t\taddress: publicKeyToAddress(publicKey, network),\n\t\t\t\t\t}));\n\n\t\t\t\tconst unsigned = buildContractCall({\n\t\t\t\t\tcontractAddress: address,\n\t\t\t\t\tcontractName,\n\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\tfunctionArgs,\n\t\t\t\t\tfee: options?.fee ?? 0n,\n\t\t\t\t\tnonce,\n\t\t\t\t\tpublicKey,\n\t\t\t\t\tchain: client.chain,\n\t\t\t\t\tpostConditionMode: options?.postConditionMode,\n\t\t\t\t\tpostConditions: options?.postConditions,\n\t\t\t\t\tsponsored: options?.sponsored,\n\t\t\t\t});\n\n\t\t\t\tif (options?.fee === undefined) {\n\t\t\t\t\tconst { fee } = await resolveFee(client, unsigned, undefined);\n\t\t\t\t\tsetUnsignedFee(unsigned, fee);\n\t\t\t\t}\n\n\t\t\t\treturn unsigned;\n\t\t\t};\n\t\t},\n\t});\n\n\tconst maps = new Proxy({} as MapMethods<TAbi>, {\n\t\tget(_target, prop: string) {\n\t\t\tconst mapName = camelToKebab.get(prop) ?? prop;\n\t\t\tconst map = mapByName.get(mapName);\n\t\t\tif (!map) return undefined;\n\n\t\t\treturn async (key: unknown) => {\n\t\t\t\tconst clarityKey = jsToClarityValue(map.key as AbiType, key);\n\t\t\t\tconst result = await getMapEntry(client, {\n\t\t\t\t\tcontract: contractId,\n\t\t\t\t\tmapName: map.name,\n\t\t\t\t\tkey: clarityKey,\n\t\t\t\t});\n\n\t\t\t\t// Map entries come back as (optional ...). If none, return null.\n\t\t\t\tif (result.type === \"none\") return null;\n\t\t\t\tif (result.type === \"some\") {\n\t\t\t\t\treturn clarityValueToJSUntyped(map.value as AbiType, result.value);\n\t\t\t\t}\n\t\t\t\t// Direct value (shouldn't normally happen, but handle gracefully)\n\t\t\t\treturn clarityValueToJSUntyped(map.value as AbiType, result);\n\t\t\t};\n\t\t},\n\t});\n\n\treturn { read, call, buildCall, maps };\n}\n\n/**\n * Resolve a network-keyed contract config for the client's chain. The contracts\n * map is keyed by network (\"mainnet\" | \"testnet\"), so selection is a direct\n * index — no per-call ternary. Throws if the client has no chain configured.\n */\nexport function resolveNetworkContract<\n\tT extends Record<\"mainnet\" | \"testnet\", { address: string }>,\n>(client: Client, contracts: T): T[\"mainnet\"] | T[\"testnet\"] {\n\tif (!client.chain) {\n\t\tthrow new Error(\"Client must have a chain configured\");\n\t}\n\treturn contracts[client.chain.network];\n}\n\n// --- Helpers ---\n\n/**\n * Encode an ABI function's named args into positional ClarityValues. Exported\n * so a caller that needs the raw ClarityValue result (to cache or re-serialize\n * it) can reuse the same encoding this module's read methods use, instead of\n * maintaining a second one that drifts.\n */\nexport function buildFunctionArgs(\n\tfn: AbiFunction,\n\targs: Record<string, unknown> = {},\n): ClarityValue[] {\n\treturn fn.args.map((arg) => {\n\t\tconst camelKey = toCamelCase(arg.name);\n\t\tconst hasOriginal = arg.name in args;\n\t\tconst hasCamel = camelKey in args;\n\t\tconst value = hasOriginal\n\t\t\t? args[arg.name]\n\t\t\t: hasCamel\n\t\t\t\t? args[camelKey]\n\t\t\t\t: undefined;\n\t\tif (value === undefined) throw new Error(`Missing argument: ${arg.name}`);\n\t\treturn jsToClarityValue(arg.type as AbiType, value);\n\t});\n}\n\n/** True when an ABI output is a `(response ok err)` and needs unwrapping. */\nexport function isResponseOutput(type: AbiType): boolean {\n\treturn typeof type === \"object\" && type !== null && \"response\" in type;\n}\n\nfunction formatErrValue(value: unknown): string {\n\tif (typeof value === \"bigint\") return value.toString();\n\tif (typeof value === \"string\") return `\"${value}\"`;\n\treturn String(value);\n}\n\nexport class ContractResponseError extends Error {\n\toverride name = \"ContractResponseError\";\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly errorValue: unknown,\n\t) {\n\t\tsuper(message);\n\t}\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "81FCE32BF632C55964756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
getNonce,
|
|
5
5
|
resolveFee,
|
|
6
6
|
setUnsignedFee
|
|
7
|
-
} from "./stacks-
|
|
7
|
+
} from "./stacks-v03zef3g.js";
|
|
8
8
|
import {
|
|
9
9
|
readContract
|
|
10
|
-
} from "./stacks-
|
|
10
|
+
} from "./stacks-qex691bh.js";
|
|
11
11
|
import {
|
|
12
12
|
clarityValueToJSUntyped,
|
|
13
13
|
jsToClarityValue,
|
|
@@ -49,7 +49,7 @@ function getContract(params) {
|
|
|
49
49
|
const fn = fnByName.get(fnName);
|
|
50
50
|
if (!fn || fn.access !== "read-only")
|
|
51
51
|
return;
|
|
52
|
-
return async (args) => {
|
|
52
|
+
return async (args = {}) => {
|
|
53
53
|
const clarityArgs = buildFunctionArgs(fn, args);
|
|
54
54
|
const result = await readContract(client, {
|
|
55
55
|
contract: contractId,
|
|
@@ -73,7 +73,7 @@ function getContract(params) {
|
|
|
73
73
|
const fn = fnByName.get(fnName);
|
|
74
74
|
if (!fn || fn.access !== "public")
|
|
75
75
|
return;
|
|
76
|
-
return async (args, options) => {
|
|
76
|
+
return async (args = {}, options) => {
|
|
77
77
|
const clarityArgs = buildFunctionArgs(fn, args);
|
|
78
78
|
return callContract(client, {
|
|
79
79
|
contract: contractId,
|
|
@@ -90,7 +90,7 @@ function getContract(params) {
|
|
|
90
90
|
const fn = fnByName.get(fnName);
|
|
91
91
|
if (!fn || fn.access !== "public")
|
|
92
92
|
return;
|
|
93
|
-
return async (args, options) => {
|
|
93
|
+
return async (args = {}, options) => {
|
|
94
94
|
const publicKey = options?.publicKey ?? client.account?.publicKey;
|
|
95
95
|
if (!publicKey) {
|
|
96
96
|
throw new Error("buildCall requires a publicKey (pass options.publicKey or configure a client account)");
|
|
@@ -151,7 +151,7 @@ function resolveNetworkContract(client, contracts) {
|
|
|
151
151
|
}
|
|
152
152
|
return contracts[client.chain.network];
|
|
153
153
|
}
|
|
154
|
-
function buildFunctionArgs(fn, args) {
|
|
154
|
+
function buildFunctionArgs(fn, args = {}) {
|
|
155
155
|
return fn.args.map((arg) => {
|
|
156
156
|
const camelKey = toCamelCase(arg.name);
|
|
157
157
|
const hasOriginal = arg.name in args;
|
|
@@ -184,5 +184,5 @@ class ContractResponseError extends Error {
|
|
|
184
184
|
|
|
185
185
|
export { getContract, resolveNetworkContract, buildFunctionArgs, isResponseOutput, ContractResponseError };
|
|
186
186
|
|
|
187
|
-
//# debugId=
|
|
188
|
-
//# sourceMappingURL=stacks-
|
|
187
|
+
//# debugId=AAFF67F8FCC109A664756E2164756E21
|
|
188
|
+
//# sourceMappingURL=stacks-fd4rx56e.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/actions/getContract.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type {\n\tAbiContract,\n\tAbiFunction,\n\tAbiMap,\n\tAbiType,\n\tAbiTypesOf,\n\tContractTypes,\n\tExtractFunctionArgs,\n\tExtractFunctionOutput,\n\tExtractMapKey,\n\tExtractMapNames,\n\tExtractMapValue,\n\tExtractPublicFunctions,\n\tExtractReadOnlyFunctions,\n} from \"../clarity/abi/index.ts\";\nimport { type ToCamelCase, toCamelCase } from \"../clarity/abi/utils.ts\";\nimport {\n\tclarityValueToJSUntyped,\n\tjsToClarityValue,\n} from \"../clarity/bridge.ts\";\nimport type { ClarityValue } from \"../clarity/types.ts\";\nimport type { Client } from \"../clients/types.ts\";\nimport type {\n\tPostConditionInput,\n\tPostConditionMode,\n} from \"../postconditions/types.ts\";\nimport { buildContractCall } from \"../transactions/build.ts\";\nimport type { StacksTransaction } from \"../transactions/types.ts\";\nimport { publicKeyToAddress } from \"../utils/address.ts\";\nimport type { IntegerType } from \"../utils/encoding.ts\";\nimport { getMapEntry } from \"./public/getMapEntry.ts\";\nimport { getNonce } from \"./public/getNonce.ts\";\nimport { readContract } from \"./public/readContract.ts\";\nimport { callContract } from \"./wallet/callContract.ts\";\nimport { resolveFee, setUnsignedFee } from \"./wallet/utils.ts\";\n\n// --- Type helpers for unwrapping response types ---\n\n/**\n * Unwrap `(response ok err)` → just the `ok` branch type. Distributes over the\n * `{ ok } | { err }` union: the `err` branch maps to `never` (it throws\n * `ContractResponseError` at runtime, so it never reaches the caller).\n */\nexport type UnwrapResponse<T> = T extends { ok: infer O }\n\t? O\n\t: T extends { err: unknown }\n\t\t? never\n\t\t: T;\n\n/**\n * True for a structural empty mapped type (`{}`) and for codegen's\n * `Record<string, never>`. `keyof Record<string, never>` is `string`, so the\n * first check alone is not enough.\n */\ntype IsEmptyArgs<A> = [keyof A & string] extends [never]\n\t? true\n\t: Record<string, never> extends A\n\t\t? true\n\t\t: false;\n\n/** No-arg ABI functions may omit the dummy `{}`. Functions with args stay required. */\ntype ContractMethod<\n\tA,\n\tR,\n\tExtra extends unknown[] = [],\n> = IsEmptyArgs<A> extends true\n\t? (args?: A, ...extra: Extra) => R\n\t: (args: A, ...extra: Extra) => R;\n\ntype ReadMethodReturn<\n\tC extends AbiContract,\n\tN extends ExtractReadOnlyFunctions<C>,\n> = UnwrapResponse<ExtractFunctionOutput<C, N>>;\n\n// --- Public type for the contract instance ---\n\n/**\n * When the ABI carries a codegen brand (`TypedAbi`), method types resolve to\n * the generated named aliases — cleaner hovers and error messages. Un-branded\n * ABIs fall back to structural inference over the as-const literal.\n */\ntype TypedReadMethods<T extends ContractTypes> = {\n\t[K in keyof T[\"functions\"] as T[\"functions\"][K][\"access\"] extends \"read-only\"\n\t\t? K\n\t\t: never]: ContractMethod<\n\t\tT[\"functions\"][K][\"args\"],\n\t\tPromise<UnwrapResponse<T[\"functions\"][K][\"ret\"]>>\n\t>;\n};\n\ntype TypedCallMethods<T extends ContractTypes> = {\n\t[K in keyof T[\"functions\"] as T[\"functions\"][K][\"access\"] extends \"public\"\n\t\t? K\n\t\t: never]: ContractMethod<\n\t\tT[\"functions\"][K][\"args\"],\n\t\tPromise<string>,\n\t\t[options?: ContractCallOptions]\n\t>;\n};\n\ntype TypedMapMethods<T extends ContractTypes> = {\n\t[K in keyof NonNullable<T[\"maps\"]>]: (\n\t\tkey: NonNullable<T[\"maps\"]>[K][\"key\"],\n\t) => Promise<NonNullable<T[\"maps\"]>[K][\"value\"] | null>;\n};\n\ntype ReadMethods<C extends AbiContract> = [AbiTypesOf<C>] extends [never]\n\t? {\n\t\t\t[N in ExtractReadOnlyFunctions<C> as ToCamelCase<N>]: ContractMethod<\n\t\t\t\tExtractFunctionArgs<C, N>,\n\t\t\t\tPromise<ReadMethodReturn<C, N>>\n\t\t\t>;\n\t\t}\n\t: TypedReadMethods<AbiTypesOf<C>>;\n\ntype CallMethods<C extends AbiContract> = [AbiTypesOf<C>] extends [never]\n\t? {\n\t\t\t[N in ExtractPublicFunctions<C> as ToCamelCase<N>]: ContractMethod<\n\t\t\t\tExtractFunctionArgs<C, N>,\n\t\t\t\tPromise<string>,\n\t\t\t\t[options?: ContractCallOptions]\n\t\t\t>;\n\t\t}\n\t: TypedCallMethods<AbiTypesOf<C>>;\n\ntype MapMethods<C extends AbiContract> = [AbiTypesOf<C>] extends [never]\n\t? {\n\t\t\t[N in ExtractMapNames<C> as ToCamelCase<N>]: (\n\t\t\t\tkey: ExtractMapKey<C, N>,\n\t\t\t) => Promise<ExtractMapValue<C, N> | null>;\n\t\t}\n\t: TypedMapMethods<AbiTypesOf<C>>;\n\nexport type ContractCallOptions = {\n\tfee?: IntegerType;\n\tnonce?: IntegerType;\n\tpostConditionMode?: PostConditionMode;\n\tpostConditions?: PostConditionInput[];\n};\n\n/**\n * Options for `buildCall.*`, building an unsigned transaction for\n * wallet-signs-later flows. `publicKey` defaults to the client account's\n * public key. When omitted, `nonce` is the confirmed on-chain nonce read\n * straight from the node (the client's nonce manager is never consumed for\n * a transaction that may never be sent) and `fee` is the mid estimate,\n * falling back to the relay floor only on `NoEstimateAvailable`.\n */\nexport type ContractBuildCallOptions = ContractCallOptions & {\n\tpublicKey?: string;\n\tsponsored?: boolean;\n};\n\ntype TypedBuildCallMethods<T extends ContractTypes> = {\n\t[K in keyof T[\"functions\"] as T[\"functions\"][K][\"access\"] extends \"public\"\n\t\t? K\n\t\t: never]: ContractMethod<\n\t\tT[\"functions\"][K][\"args\"],\n\t\tPromise<StacksTransaction>,\n\t\t[options?: ContractBuildCallOptions]\n\t>;\n};\n\ntype BuildCallMethods<C extends AbiContract> = [AbiTypesOf<C>] extends [never]\n\t? {\n\t\t\t[N in ExtractPublicFunctions<C> as ToCamelCase<N>]: ContractMethod<\n\t\t\t\tExtractFunctionArgs<C, N>,\n\t\t\t\tPromise<StacksTransaction>,\n\t\t\t\t[options?: ContractBuildCallOptions]\n\t\t\t>;\n\t\t}\n\t: TypedBuildCallMethods<AbiTypesOf<C>>;\n\nexport type ContractInstance<C extends AbiContract> = {\n\tread: ReadMethods<C>;\n\tcall: CallMethods<C>;\n\t/** Build unsigned transactions (wallet-signs-later) — never broadcasts. */\n\tbuildCall: BuildCallMethods<C>;\n\tmaps: MapMethods<C>;\n};\n\nexport type GetContractParams<C extends AbiContract> = {\n\tclient: Client;\n\taddress: string;\n\tname: string;\n\tabi: C;\n};\n\nexport function getContract<const TAbi extends AbiContract>(\n\tparams: GetContractParams<TAbi>,\n): ContractInstance<TAbi> {\n\tconst { client, address, name: contractName, abi } = params;\n\tconst contractId = `${address}.${contractName}`;\n\n\t// Index functions/maps by name for fast lookup\n\tconst fnByName = new Map<string, AbiFunction>();\n\tfor (const fn of abi.functions) {\n\t\tfnByName.set(fn.name, fn as AbiFunction);\n\t}\n\n\tconst mapByName = new Map<string, AbiMap>();\n\tif (abi.maps) {\n\t\tfor (const m of abi.maps) {\n\t\t\tmapByName.set(m.name, m as AbiMap);\n\t\t}\n\t}\n\n\t// Build kebab→camel reverse map for function/map names\n\tconst camelToKebab = new Map<string, string>();\n\tfor (const fn of abi.functions) {\n\t\tcamelToKebab.set(toCamelCase(fn.name), fn.name);\n\t}\n\tif (abi.maps) {\n\t\tfor (const m of abi.maps) {\n\t\t\tcamelToKebab.set(toCamelCase(m.name), m.name);\n\t\t}\n\t}\n\n\tconst read = new Proxy({} as ReadMethods<TAbi>, {\n\t\tget(_target, prop: string) {\n\t\t\tconst fnName = camelToKebab.get(prop) ?? prop;\n\t\t\tconst fn = fnByName.get(fnName);\n\t\t\tif (!fn || fn.access !== \"read-only\") return undefined;\n\n\t\t\treturn async (args: Record<string, unknown> = {}) => {\n\t\t\t\tconst clarityArgs = buildFunctionArgs(fn, args);\n\t\t\t\tconst result = await readContract(client, {\n\t\t\t\t\tcontract: contractId,\n\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\targs: clarityArgs,\n\t\t\t\t});\n\n\t\t\t\tconst jsValue = clarityValueToJSUntyped(fn.outputs as AbiType, result);\n\n\t\t\t\t// Auto-unwrap: if output is response type, unwrap ok / throw on err\n\t\t\t\tif (isResponseOutput(fn.outputs as AbiType)) {\n\t\t\t\t\tconst resp = jsValue as { ok?: unknown; err?: unknown };\n\t\t\t\t\tif (\"ok\" in resp) return resp.ok;\n\t\t\t\t\tthrow new ContractResponseError(\n\t\t\t\t\t\t`${contractId}::${fn.name} returned (err ${formatErrValue(resp.err)})`,\n\t\t\t\t\t\tresp.err,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn jsValue;\n\t\t\t};\n\t\t},\n\t});\n\n\tconst call = new Proxy({} as CallMethods<TAbi>, {\n\t\tget(_target, prop: string) {\n\t\t\tconst fnName = camelToKebab.get(prop) ?? prop;\n\t\t\tconst fn = fnByName.get(fnName);\n\t\t\tif (!fn || fn.access !== \"public\") return undefined;\n\n\t\t\treturn async (\n\t\t\t\targs: Record<string, unknown> = {},\n\t\t\t\toptions?: ContractCallOptions,\n\t\t\t) => {\n\t\t\t\tconst clarityArgs = buildFunctionArgs(fn, args);\n\t\t\t\treturn callContract(client, {\n\t\t\t\t\tcontract: contractId,\n\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\tfunctionArgs: clarityArgs,\n\t\t\t\t\t...options,\n\t\t\t\t});\n\t\t\t};\n\t\t},\n\t});\n\n\tconst buildCall = new Proxy({} as BuildCallMethods<TAbi>, {\n\t\tget(_target, prop: string) {\n\t\t\tconst fnName = camelToKebab.get(prop) ?? prop;\n\t\t\tconst fn = fnByName.get(fnName);\n\t\t\tif (!fn || fn.access !== \"public\") return undefined;\n\n\t\t\treturn async (\n\t\t\t\targs: Record<string, unknown> = {},\n\t\t\t\toptions?: ContractBuildCallOptions,\n\t\t\t) => {\n\t\t\t\tconst publicKey = options?.publicKey ?? client.account?.publicKey;\n\t\t\t\tif (!publicKey) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"buildCall requires a publicKey (pass options.publicKey or configure a client account)\",\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst functionArgs = buildFunctionArgs(fn, args);\n\t\t\t\tconst network = client.chain?.network ?? \"mainnet\";\n\t\t\t\tconst nonce =\n\t\t\t\t\toptions?.nonce ??\n\t\t\t\t\t(await getNonce(client, {\n\t\t\t\t\t\taddress: publicKeyToAddress(publicKey, network),\n\t\t\t\t\t}));\n\n\t\t\t\tconst unsigned = buildContractCall({\n\t\t\t\t\tcontractAddress: address,\n\t\t\t\t\tcontractName,\n\t\t\t\t\tfunctionName: fn.name,\n\t\t\t\t\tfunctionArgs,\n\t\t\t\t\tfee: options?.fee ?? 0n,\n\t\t\t\t\tnonce,\n\t\t\t\t\tpublicKey,\n\t\t\t\t\tchain: client.chain,\n\t\t\t\t\tpostConditionMode: options?.postConditionMode,\n\t\t\t\t\tpostConditions: options?.postConditions,\n\t\t\t\t\tsponsored: options?.sponsored,\n\t\t\t\t});\n\n\t\t\t\tif (options?.fee === undefined) {\n\t\t\t\t\tconst { fee } = await resolveFee(client, unsigned, undefined);\n\t\t\t\t\tsetUnsignedFee(unsigned, fee);\n\t\t\t\t}\n\n\t\t\t\treturn unsigned;\n\t\t\t};\n\t\t},\n\t});\n\n\tconst maps = new Proxy({} as MapMethods<TAbi>, {\n\t\tget(_target, prop: string) {\n\t\t\tconst mapName = camelToKebab.get(prop) ?? prop;\n\t\t\tconst map = mapByName.get(mapName);\n\t\t\tif (!map) return undefined;\n\n\t\t\treturn async (key: unknown) => {\n\t\t\t\tconst clarityKey = jsToClarityValue(map.key as AbiType, key);\n\t\t\t\tconst result = await getMapEntry(client, {\n\t\t\t\t\tcontract: contractId,\n\t\t\t\t\tmapName: map.name,\n\t\t\t\t\tkey: clarityKey,\n\t\t\t\t});\n\n\t\t\t\t// Map entries come back as (optional ...). If none, return null.\n\t\t\t\tif (result.type === \"none\") return null;\n\t\t\t\tif (result.type === \"some\") {\n\t\t\t\t\treturn clarityValueToJSUntyped(map.value as AbiType, result.value);\n\t\t\t\t}\n\t\t\t\t// Direct value (shouldn't normally happen, but handle gracefully)\n\t\t\t\treturn clarityValueToJSUntyped(map.value as AbiType, result);\n\t\t\t};\n\t\t},\n\t});\n\n\treturn { read, call, buildCall, maps };\n}\n\n/**\n * Resolve a network-keyed contract config for the client's chain. The contracts\n * map is keyed by network (\"mainnet\" | \"testnet\"), so selection is a direct\n * index — no per-call ternary. Throws if the client has no chain configured.\n */\nexport function resolveNetworkContract<\n\tT extends Record<\"mainnet\" | \"testnet\", { address: string }>,\n>(client: Client, contracts: T): T[\"mainnet\"] | T[\"testnet\"] {\n\tif (!client.chain) {\n\t\tthrow new Error(\"Client must have a chain configured\");\n\t}\n\treturn contracts[client.chain.network];\n}\n\n// --- Helpers ---\n\n/**\n * Encode an ABI function's named args into positional ClarityValues. Exported\n * so a caller that needs the raw ClarityValue result (to cache or re-serialize\n * it) can reuse the same encoding this module's read methods use, instead of\n * maintaining a second one that drifts.\n */\nexport function buildFunctionArgs(\n\tfn: AbiFunction,\n\targs: Record<string, unknown> = {},\n): ClarityValue[] {\n\treturn fn.args.map((arg) => {\n\t\tconst camelKey = toCamelCase(arg.name);\n\t\tconst hasOriginal = arg.name in args;\n\t\tconst hasCamel = camelKey in args;\n\t\tconst value = hasOriginal\n\t\t\t? args[arg.name]\n\t\t\t: hasCamel\n\t\t\t\t? args[camelKey]\n\t\t\t\t: undefined;\n\t\tif (value === undefined) throw new Error(`Missing argument: ${arg.name}`);\n\t\treturn jsToClarityValue(arg.type as AbiType, value);\n\t});\n}\n\n/** True when an ABI output is a `(response ok err)` and needs unwrapping. */\nexport function isResponseOutput(type: AbiType): boolean {\n\treturn typeof type === \"object\" && type !== null && \"response\" in type;\n}\n\nfunction formatErrValue(value: unknown): string {\n\tif (typeof value === \"bigint\") return value.toString();\n\tif (typeof value === \"string\") return `\"${value}\"`;\n\treturn String(value);\n}\n\nexport class ContractResponseError extends Error {\n\toverride name = \"ContractResponseError\";\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly errorValue: unknown,\n\t) {\n\t\tsuper(message);\n\t}\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "AAFF67F8FCC109A664756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -9,10 +9,10 @@ import {
|
|
|
9
9
|
resolveFee,
|
|
10
10
|
resolveNonce,
|
|
11
11
|
setUnsignedFee
|
|
12
|
-
} from "./stacks-
|
|
12
|
+
} from "./stacks-v03zef3g.js";
|
|
13
13
|
import {
|
|
14
14
|
MalformedResponseError
|
|
15
|
-
} from "./stacks-
|
|
15
|
+
} from "./stacks-qex691bh.js";
|
|
16
16
|
import {
|
|
17
17
|
structuredDataHash
|
|
18
18
|
} from "./stacks-v2rfr46a.js";
|
|
@@ -388,4 +388,4 @@ async function transferStx(client, params) {
|
|
|
388
388
|
export { getAccountHistory, getAccountInfo, getBlock, getContractAbi, getContractSource, getMempoolStats, getNftHoldings, getRawBlock, SimulationError, simulateCall, simulateTransaction, deployContract, signMessage, signTransactionAction, sponsorTransaction, transferStx };
|
|
389
389
|
|
|
390
390
|
//# debugId=BE89AC7F1F124EB864756E2164756E21
|
|
391
|
-
//# sourceMappingURL=stacks-
|
|
391
|
+
//# sourceMappingURL=stacks-mbt36bzt.js.map
|
|
@@ -18,6 +18,10 @@ class MalformedResponseError extends BaseError {
|
|
|
18
18
|
name = "MalformedResponseError";
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
class ReadContractError extends BaseError {
|
|
22
|
+
name = "ReadContractError";
|
|
23
|
+
}
|
|
24
|
+
|
|
21
25
|
// src/actions/public/readContract.ts
|
|
22
26
|
async function readContract(client, params) {
|
|
23
27
|
const [address, name] = parseContractId(params.contract);
|
|
@@ -32,12 +36,15 @@ async function readContract(client, params) {
|
|
|
32
36
|
}
|
|
33
37
|
});
|
|
34
38
|
if (data.okay) {
|
|
39
|
+
if (typeof data.result !== "string") {
|
|
40
|
+
throw new MalformedResponseError(`readContract: /v2/contracts/call-read response is missing "result"`);
|
|
41
|
+
}
|
|
35
42
|
return deserializeCVBytes(data.result);
|
|
36
43
|
}
|
|
37
|
-
throw new
|
|
44
|
+
throw new ReadContractError(data.cause ?? "Read-only call failed");
|
|
38
45
|
}
|
|
39
46
|
|
|
40
|
-
export { MalformedResponseError, readContract };
|
|
47
|
+
export { MalformedResponseError, ReadContractError, readContract };
|
|
41
48
|
|
|
42
|
-
//# debugId=
|
|
43
|
-
//# sourceMappingURL=stacks-
|
|
49
|
+
//# debugId=550D2C756626A50964756E2164756E21
|
|
50
|
+
//# sourceMappingURL=stacks-qex691bh.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/errors/response.ts", "../src/actions/public/readContract.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { BaseError } from \"./base.ts\";\n\n/** Thrown when a node/API response is missing an expected field. */\nexport class MalformedResponseError extends BaseError {\n\toverride name = \"MalformedResponseError\";\n}\n\n/** Thrown when `/v2/contracts/call-read` answers `okay: false`. */\nexport class ReadContractError extends BaseError {\n\toverride name = \"ReadContractError\";\n}\n",
|
|
6
|
+
"import { deserializeCVBytes } from \"../../clarity/deserialize.ts\";\nimport { serializeCVBytes } from \"../../clarity/serialize.ts\";\nimport type { ClarityValue } from \"../../clarity/types.ts\";\nimport type { Client } from \"../../clients/types.ts\";\nimport {\n\tMalformedResponseError,\n\tReadContractError,\n} from \"../../errors/response.ts\";\nimport { parseContractId } from \"../../utils/address.ts\";\nimport { bytesToHex, with0x } from \"../../utils/encoding.ts\";\n\nexport type ReadContractParams = {\n\tcontract: string; // \"address.name\"\n\tfunctionName: string;\n\targs?: ClarityValue[];\n\tsender?: string;\n\t/**\n\t * Nakamoto StacksBlockId to evaluate against. Without it the node answers\n\t * at its own moving tip, which makes a read non-deterministic — the same\n\t * reindex of the same block can return a different value.\n\t */\n\ttip?: string;\n};\n\nexport async function readContract<T extends ClarityValue = ClarityValue>(\n\tclient: Client,\n\tparams: ReadContractParams,\n): Promise<T> {\n\tconst [address, name] = parseContractId(params.contract);\n\tconst sender = params.sender ?? address;\n\n\tconst serializedArgs = (params.args ?? []).map((arg) =>\n\t\twith0x(bytesToHex(serializeCVBytes(arg))),\n\t);\n\n\tconst path = `/v2/contracts/call-read/${encodeURIComponent(address)}/${encodeURIComponent(name)}/${encodeURIComponent(params.functionName)}`;\n\tconst data = await client.request(\n\t\tparams.tip ? `${path}?tip=${encodeURIComponent(params.tip)}` : path,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\tbody: {\n\t\t\t\tsender,\n\t\t\t\targuments: serializedArgs,\n\t\t\t},\n\t\t},\n\t);\n\n\tif (data.okay) {\n\t\tif (typeof data.result !== \"string\") {\n\t\t\tthrow new MalformedResponseError(\n\t\t\t\t`readContract: /v2/contracts/call-read response is missing \"result\"`,\n\t\t\t);\n\t\t}\n\t\treturn deserializeCVBytes<T>(data.result);\n\t}\n\tthrow new ReadContractError(data.cause ?? \"Read-only call failed\");\n}\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": ";;;;;;;;;;;;;;;;AAGO,MAAM,+BAA+B,UAAU;AAAA,EAC5C,OAAO;AACjB;AAAA;AAGO,MAAM,0BAA0B,UAAU;AAAA,EACvC,OAAO;AACjB;;;ACcA,eAAsB,YAAmD,CACxE,QACA,QACa;AAAA,EACb,OAAO,SAAS,QAAQ,gBAAgB,OAAO,QAAQ;AAAA,EACvD,MAAM,SAAS,OAAO,UAAU;AAAA,EAEhC,MAAM,kBAAkB,OAAO,QAAQ,CAAC,GAAG,IAAI,CAAC,QAC/C,OAAO,WAAW,iBAAiB,GAAG,CAAC,CAAC,CACzC;AAAA,EAEA,MAAM,OAAO,2BAA2B,mBAAmB,OAAO,KAAK,mBAAmB,IAAI,KAAK,mBAAmB,OAAO,YAAY;AAAA,EACzI,MAAM,OAAO,MAAM,OAAO,QACzB,OAAO,MAAM,GAAG,YAAY,mBAAmB,OAAO,GAAG,MAAM,MAC/D;AAAA,IACC,QAAQ;AAAA,IACR,MAAM;AAAA,MACL;AAAA,MACA,WAAW;AAAA,IACZ;AAAA,EACD,CACD;AAAA,EAEA,IAAI,KAAK,MAAM;AAAA,IACd,IAAI,OAAO,KAAK,WAAW,UAAU;AAAA,MACpC,MAAM,IAAI,uBACT,oEACD;AAAA,IACD;AAAA,IACA,OAAO,mBAAsB,KAAK,MAAM;AAAA,EACzC;AAAA,EACA,MAAM,IAAI,kBAAkB,KAAK,SAAS,uBAAuB;AAAA;",
|
|
9
|
+
"debugId": "550D2C756626A50964756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MalformedResponseError
|
|
3
|
-
} from "./stacks-
|
|
3
|
+
} from "./stacks-qex691bh.js";
|
|
4
4
|
import {
|
|
5
5
|
buildContractCall,
|
|
6
6
|
getTransactionId,
|
|
@@ -97,12 +97,10 @@ async function getMapEntry(client, params) {
|
|
|
97
97
|
|
|
98
98
|
// src/actions/public/getNonce.ts
|
|
99
99
|
async function getNonce(client, params) {
|
|
100
|
-
const data = await client.request(`/v2/accounts/${params.address}`, {
|
|
101
|
-
method: "GET"
|
|
102
|
-
});
|
|
100
|
+
const data = await client.request(`/v2/accounts/${encodeURIComponent(params.address)}`, { method: "GET" });
|
|
103
101
|
const nonce = data?.nonce;
|
|
104
102
|
if (typeof nonce !== "number" && typeof nonce !== "string") {
|
|
105
|
-
throw new
|
|
103
|
+
throw new MalformedResponseError(`getNonce: /v2/accounts/${params.address} response is missing "nonce"`);
|
|
106
104
|
}
|
|
107
105
|
return BigInt(nonce);
|
|
108
106
|
}
|
|
@@ -797,5 +795,5 @@ async function callContract(client, params) {
|
|
|
797
795
|
|
|
798
796
|
export { estimateFee, getBlockHeight, HttpRequestError, getMapEntry, getNonce, TimeoutError, createTransport, buildRequestFn, IndexSourceConfigError, indexRequestFn, indexNotFound, extendedApiSource, indexTxSource, getTransaction, waitForTransactionReceipt, sendTransaction, jsonRpcSource, memoryStore, createNonceManager, resolveNonce, releaseNonce, reconcileNonce, startNonceReconciler, isNonceConflictError, broadcastWithNonceReset, isProviderAccount, isFeeTier, minimumFee, isNoEstimateAvailable, resolveFee, setUnsignedFee, assertNoFeeTierForProvider, callContract };
|
|
799
797
|
|
|
800
|
-
//# debugId=
|
|
801
|
-
//# sourceMappingURL=stacks-
|
|
798
|
+
//# debugId=DBC478FB276EF42464756E2164756E21
|
|
799
|
+
//# sourceMappingURL=stacks-v03zef3g.js.map
|