@account-kit/wallet-client 4.82.0 → 4.83.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/client/actions/sendCalls.js +3 -4
- package/dist/esm/client/actions/sendCalls.js.map +1 -1
- package/dist/esm/client/actions/sendPreparedCalls.js +2 -0
- package/dist/esm/client/actions/sendPreparedCalls.js.map +1 -1
- package/dist/esm/client/actions/waitForCallsStatus.d.ts +1 -1
- package/dist/esm/internal/capabilities.d.ts +13 -4
- package/dist/esm/internal/capabilities.js +37 -11
- package/dist/esm/internal/capabilities.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/types/client/actions/sendCalls.d.ts.map +1 -1
- package/dist/types/client/actions/sendPreparedCalls.d.ts.map +1 -1
- package/dist/types/client/actions/waitForCallsStatus.d.ts +1 -1
- package/dist/types/internal/capabilities.d.ts +13 -4
- package/dist/types/internal/capabilities.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +6 -6
- package/src/client/actions/sendCalls.ts +4 -4
- package/src/client/actions/sendPreparedCalls.ts +3 -0
- package/src/internal/capabilities.ts +57 -15
- package/src/version.ts +1 -1
|
@@ -4,6 +4,7 @@ import { signPreparedCalls } from "./signPreparedCalls.js";
|
|
|
4
4
|
import { sendPreparedCalls, } from "./sendPreparedCalls.js";
|
|
5
5
|
import { signSignatureRequest } from "./signSignatureRequest.js";
|
|
6
6
|
import { isWebAuthnSigner } from "../../utils.js";
|
|
7
|
+
import { extractCapabilitiesForSending } from "../../internal/capabilities.js";
|
|
7
8
|
/**
|
|
8
9
|
* Prepares, signs, and submits calls. This function internally calls `prepareCalls`, `signPreparedCalls`, and `sendPreparedCalls`.
|
|
9
10
|
*
|
|
@@ -56,12 +57,10 @@ export async function sendCalls(client, signer, params) {
|
|
|
56
57
|
calls = await prepareCalls(client, secondCallParams);
|
|
57
58
|
}
|
|
58
59
|
const signedCalls = await signPreparedCalls(signer, calls);
|
|
60
|
+
const capabilities = extractCapabilitiesForSending(params.capabilities);
|
|
59
61
|
return await sendPreparedCalls(client, {
|
|
60
62
|
...signedCalls,
|
|
61
|
-
|
|
62
|
-
...(params.capabilities?.permissions != null
|
|
63
|
-
? { capabilities: { permissions: params.capabilities.permissions } }
|
|
64
|
-
: {}),
|
|
63
|
+
...(capabilities != null ? { capabilities } : {}),
|
|
65
64
|
});
|
|
66
65
|
}
|
|
67
66
|
//# sourceMappingURL=sendCalls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendCalls.js","sourceRoot":"","sources":["../../../../src/client/actions/sendCalls.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAA2B,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,iBAAiB,GAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"sendCalls.js","sourceRoot":"","sources":["../../../../src/client/actions/sendCalls.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAA2B,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,iBAAiB,GAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAQ/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAG7B,MAA4B,EAC5B,MAAyB,EACzB,MAAiC;IAEjC,OAAO,CAAC,UAAU,CAAC;QACjB,IAAI,EAAE,YAAY;KACnB,CAAC,CAAC;IAEH,IAAI,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACtC,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAC1C,MAAM,EACN,KAAK,CAAC,gBAAgB,CACvB,CAAC;QAEF,MAAM,gBAAgB,GAAG;YACvB,IAAI,EAAE,KAAK,CAAC,eAAe,CAAC,IAAI;YAChC,KAAK,EAAE,KAAK,CAAC,eAAe,CAAC,KAAK;YAClC,YAAY,EAAE,KAAK,CAAC,eAAe,CAAC,YAAY;YAChD,wBAAwB,EAAE,SAAS;SACpC,CAAC;QAEF,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAE3D,MAAM,YAAY,GAAG,6BAA6B,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAExE,OAAO,MAAM,iBAAiB,CAAC,MAAM,EAAE;QACrC,GAAG,WAAW;QACd,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { Address } from \"viem\";\nimport type { InnerWalletApiClient } from \"../../types.js\";\nimport { prepareCalls, type PrepareCallsParams } from \"./prepareCalls.js\";\nimport { metrics } from \"../../metrics.js\";\nimport { signPreparedCalls } from \"./signPreparedCalls.js\";\nimport {\n sendPreparedCalls,\n type SendPreparedCallsResult,\n} from \"./sendPreparedCalls.js\";\nimport { signSignatureRequest } from \"./signSignatureRequest.js\";\nimport type { SmartWalletSigner } from \"../index.js\";\nimport { isWebAuthnSigner } from \"../../utils.js\";\nimport { extractCapabilitiesForSending } from \"../../internal/capabilities.js\";\n\nexport type SendCallsParams<\n TAccount extends Address | undefined = Address | undefined,\n> = PrepareCallsParams<TAccount>;\n\nexport type SendCallsResult = SendPreparedCallsResult;\n\n/**\n * Prepares, signs, and submits calls. This function internally calls `prepareCalls`, `signPreparedCalls`, and `sendPreparedCalls`.\n *\n * <Note>\n * If using this action with an ERC-20 paymaster in pre-operation mode with `autoPermit`, the contents of the permit will be hidden\n * from the user. It is recommended to use the `prepareCalls` action instead to manually handle the permit signature.\n * </Note>\n *\n * @param {InnerWalletApiClient} client - The wallet API client to use for the request\n * @param {SmartAccountSigner | WebAuthnSigner} signer - The signer to use\n * @param {PrepareCallsParams<TAccount>} params - Parameters for sending calls\n * @param {Array<{to: Address, data?: Hex, value?: Hex}>} params.calls - Array of contract calls to execute\n * @param {Address} [params.from] - The address to execute the calls from (required if the client wasn't initialized with an account)\n * @param {object} [params.capabilities] - Optional capabilities to include with the request. See [API documentation](/wallets/api-reference/smart-wallets/wallet-api-endpoints/wallet-api-endpoints/wallet-prepare-calls#request.body.prepareCallsRequest.capabilities) for details.\n * @returns {Promise<SendPreparedCallsResult>} A Promise that resolves to the result containing the prepared call IDs.\n *\n * @example\n * ```ts\n * const result = await client.sendCalls({\n * calls: [{\n * to: \"0x1234...\",\n * data: \"0xabcdef...\",\n * value: \"0x0\"\n * }],\n * capabilities: {\n * paymasterService: { policyId: \"your-policy-id\" }\n * }\n * });\n *\n * // The result contains the prepared call IDs\n * console.log(result.preparedCallIds);\n * ```\n */\nexport async function sendCalls<\n TAccount extends Address | undefined = Address | undefined,\n>(\n client: InnerWalletApiClient,\n signer: SmartWalletSigner,\n params: SendCallsParams<TAccount>,\n): Promise<SendCallsResult> {\n metrics.trackEvent({\n name: \"send_calls\",\n });\n\n let calls = await prepareCalls(client, params);\n\n if (calls.type === \"paymaster-permit\") {\n if (isWebAuthnSigner(signer)) {\n throw new Error(\n \"WebAuthn signer is not currently supported for signing paymaster permit signatures\",\n );\n }\n const signature = await signSignatureRequest(\n signer,\n calls.signatureRequest,\n );\n\n const secondCallParams = {\n from: calls.modifiedRequest.from,\n calls: calls.modifiedRequest.calls,\n capabilities: calls.modifiedRequest.capabilities,\n paymasterPermitSignature: signature,\n };\n\n calls = await prepareCalls(client, secondCallParams);\n }\n\n const signedCalls = await signPreparedCalls(signer, calls);\n\n const capabilities = extractCapabilitiesForSending(params.capabilities);\n\n return await sendPreparedCalls(client, {\n ...signedCalls,\n ...(capabilities != null ? { capabilities } : {}),\n });\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { toHex } from "viem";
|
|
2
2
|
import { metrics } from "../../metrics.js";
|
|
3
|
+
import { mergeClientCapabilities } from "../../internal/capabilities.js";
|
|
3
4
|
/**
|
|
4
5
|
* Sends prepared calls by submitting a signed user operation.
|
|
5
6
|
* This method is used after signing the signature request returned from prepareCalls.
|
|
@@ -38,6 +39,7 @@ export async function sendPreparedCalls(client, params) {
|
|
|
38
39
|
type: params.type,
|
|
39
40
|
},
|
|
40
41
|
});
|
|
42
|
+
params.capabilities = mergeClientCapabilities(client, params.capabilities);
|
|
41
43
|
return client.request({
|
|
42
44
|
method: "wallet_sendPreparedCalls",
|
|
43
45
|
params: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendPreparedCalls.js","sourceRoot":"","sources":["../../../../src/client/actions/sendPreparedCalls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAG7B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"sendPreparedCalls.js","sourceRoot":"","sources":["../../../../src/client/actions/sendPreparedCalls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAG7B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAiBzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAA4B,EAC5B,MAA+B;IAE/B,OAAO,CAAC,UAAU,CAAC;QACjB,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,YAAY,GAAG,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAE3E,OAAO,MAAM,CAAC,OAAO,CAAC;QACpB,MAAM,EAAE,0BAA0B;QAClC,MAAM,EAAE;YACN,MAAM,CAAC,IAAI,KAAK,OAAO;gBACrB,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC;oBACE,GAAG,MAAM;oBACT,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;iBAChC;SACN;KACF,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { toHex } from \"viem\";\nimport type { WalletServerRpcSchemaType } from \"@alchemy/wallet-api-types/rpc\";\nimport type { InnerWalletApiClient, WithoutChainId } from \"../../types.ts\";\nimport { metrics } from \"../../metrics.js\";\nimport { mergeClientCapabilities } from \"../../internal/capabilities.js\";\n\ntype RpcSchema = Extract<\n WalletServerRpcSchemaType,\n {\n Request: {\n method: \"wallet_sendPreparedCalls\";\n };\n }\n>;\n\nexport type SendPreparedCallsParams = WithoutChainId<\n RpcSchema[\"Request\"][\"params\"][0]\n>;\n\nexport type SendPreparedCallsResult = RpcSchema[\"ReturnType\"];\n\n/**\n * Sends prepared calls by submitting a signed user operation.\n * This method is used after signing the signature request returned from prepareCalls.\n *\n * @param {InnerWalletApiClient} client - The wallet API client to use for the request\n * @param {SendPreparedCallsParams} params - Parameters for sending prepared calls\n * @returns {Promise<SendPreparedCallsResult>} A Promise that resolves to the result containing the prepared call IDs\n *\n * @example\n * ```ts\n * // First prepare the calls\n * const preparedCalls = await client.prepareCalls({\n * calls: [{\n * to: \"0x1234...\",\n * data: \"0xabcdef...\",\n * value: \"0x0\"\n * }],\n * capabilities: {\n * paymasterService: { policyId: \"your-policy-id\" }\n * }\n * });\n *\n * // Then sign the calls\n * const signedCalls = await client.signPreparedCalls(preparedCalls);\n *\n * // Then send the prepared calls with the signature\n * const result = await client.sendPreparedCalls({\n * signedCalls,\n * });\n * ```\n */\nexport async function sendPreparedCalls(\n client: InnerWalletApiClient,\n params: SendPreparedCallsParams,\n): Promise<SendPreparedCallsResult> {\n metrics.trackEvent({\n name: \"send_prepared_calls\",\n data: {\n type: params.type,\n },\n });\n\n params.capabilities = mergeClientCapabilities(client, params.capabilities);\n\n return client.request({\n method: \"wallet_sendPreparedCalls\",\n params: [\n params.type === \"array\"\n ? params\n : {\n ...params,\n chainId: toHex(client.chain.id),\n },\n ],\n });\n}\n"]}
|
|
@@ -21,8 +21,8 @@ export declare function waitForCallsStatus(client: InnerWalletApiClient, params:
|
|
|
21
21
|
} | {
|
|
22
22
|
[x: string]: any;
|
|
23
23
|
} | undefined;
|
|
24
|
-
atomic: boolean;
|
|
25
24
|
id: string;
|
|
25
|
+
atomic: boolean;
|
|
26
26
|
receipts?: import("viem").WalletCallReceipt<bigint, "success" | "reverted">[] | undefined;
|
|
27
27
|
statusCode: number;
|
|
28
28
|
status: "pending" | "success" | "failure" | undefined;
|
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { PrepareCallsCapabilities, SendPreparedCallsCapabilities } from "@alchemy/wallet-api-types/capabilities";
|
|
2
2
|
import type { InnerWalletApiClientBase } from "../types.js";
|
|
3
3
|
/**
|
|
4
4
|
* Merges client capabilities with capabilities from the request.
|
|
5
|
+
* Uses policyId (singular) when there's one policy, policyIds (array) when multiple.
|
|
5
6
|
*
|
|
6
7
|
* @param {InnerWalletApiClientBase} client - The inner wallet API client (potentially including global capabilities like policy IDs)
|
|
7
|
-
* @param {
|
|
8
|
-
* @returns {
|
|
8
|
+
* @param {T | undefined} capabilities - Request capabilities to merge with, if any
|
|
9
|
+
* @returns {T | undefined} The merged capabilities object, or original capabilities if no capability configuration exists on the client
|
|
9
10
|
*/
|
|
10
|
-
export declare const mergeClientCapabilities: (client: InnerWalletApiClientBase, capabilities:
|
|
11
|
+
export declare const mergeClientCapabilities: <T extends PrepareCallsCapabilities | SendPreparedCallsCapabilities>(client: InnerWalletApiClientBase, capabilities: T | undefined) => T | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Extracts capabilities from prepareCalls that are usable for sendPreparedCalls.
|
|
14
|
+
* Only permissions and paymasterService (policyId/policyIds & webhookData) are supported.
|
|
15
|
+
*
|
|
16
|
+
* @param {PrepareCallsCapabilities | undefined} capabilities - The prepareCalls capabilities
|
|
17
|
+
* @returns {SendPreparedCallsCapabilities | undefined} The sendPreparedCalls capabilities, or undefined if no relevant capabilities exist
|
|
18
|
+
*/
|
|
19
|
+
export declare const extractCapabilitiesForSending: (capabilities: PrepareCallsCapabilities | undefined) => SendPreparedCallsCapabilities | undefined;
|
|
@@ -1,19 +1,45 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Merges client capabilities with capabilities from the request.
|
|
3
|
+
* Uses policyId (singular) when there's one policy, policyIds (array) when multiple.
|
|
3
4
|
*
|
|
4
5
|
* @param {InnerWalletApiClientBase} client - The inner wallet API client (potentially including global capabilities like policy IDs)
|
|
5
|
-
* @param {
|
|
6
|
-
* @returns {
|
|
6
|
+
* @param {T | undefined} capabilities - Request capabilities to merge with, if any
|
|
7
|
+
* @returns {T | undefined} The merged capabilities object, or original capabilities if no capability configuration exists on the client
|
|
7
8
|
*/
|
|
8
9
|
export const mergeClientCapabilities = (client, capabilities) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
if (!client.policyIds?.length || capabilities?.paymasterService) {
|
|
11
|
+
return capabilities;
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
...capabilities,
|
|
15
|
+
paymasterService: client.policyIds.length === 1
|
|
16
|
+
? { policyId: client.policyIds[0] }
|
|
17
|
+
: { policyIds: client.policyIds },
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Extracts capabilities from prepareCalls that are usable for sendPreparedCalls.
|
|
22
|
+
* Only permissions and paymasterService (policyId/policyIds & webhookData) are supported.
|
|
23
|
+
*
|
|
24
|
+
* @param {PrepareCallsCapabilities | undefined} capabilities - The prepareCalls capabilities
|
|
25
|
+
* @returns {SendPreparedCallsCapabilities | undefined} The sendPreparedCalls capabilities, or undefined if no relevant capabilities exist
|
|
26
|
+
*/
|
|
27
|
+
export const extractCapabilitiesForSending = (capabilities) => {
|
|
28
|
+
if (capabilities?.permissions == null &&
|
|
29
|
+
capabilities?.paymasterService == null) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const paymasterService = capabilities.paymasterService;
|
|
33
|
+
return {
|
|
34
|
+
permissions: capabilities.permissions,
|
|
35
|
+
paymasterService: paymasterService != null
|
|
36
|
+
? {
|
|
37
|
+
...("policyId" in paymasterService
|
|
38
|
+
? { policyId: paymasterService.policyId }
|
|
39
|
+
: { policyIds: paymasterService.policyIds }),
|
|
40
|
+
webhookData: paymasterService.webhookData,
|
|
41
|
+
}
|
|
42
|
+
: undefined,
|
|
43
|
+
};
|
|
18
44
|
};
|
|
19
45
|
//# sourceMappingURL=capabilities.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/internal/capabilities.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/internal/capabilities.ts"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAGrC,MAAgC,EAChC,YAA2B,EACZ,EAAE;IACjB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,YAAY,EAAE,gBAAgB,EAAE,CAAC;QAChE,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO;QACL,GAAG,YAAY;QACf,gBAAgB,EACd,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YAC3B,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YACnC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;KACjC,CAAC;AACT,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,YAAkD,EACP,EAAE;IAC7C,IACE,YAAY,EAAE,WAAW,IAAI,IAAI;QACjC,YAAY,EAAE,gBAAgB,IAAI,IAAI,EACtC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,gBAAgB,GAAG,YAAY,CAAC,gBAAgB,CAAC;IAEvD,OAAO;QACL,WAAW,EAAE,YAAY,CAAC,WAAW;QACrC,gBAAgB,EACd,gBAAgB,IAAI,IAAI;YACtB,CAAC,CAAC;gBACE,GAAG,CAAC,UAAU,IAAI,gBAAgB;oBAChC,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,EAAE;oBACzC,CAAC,CAAC,EAAE,SAAS,EAAE,gBAAgB,CAAC,SAAS,EAAE,CAAC;gBAC9C,WAAW,EAAE,gBAAgB,CAAC,WAAW;aAC1C;YACH,CAAC,CAAC,SAAS;KAChB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type {\n PrepareCallsCapabilities,\n SendPreparedCallsCapabilities,\n} from \"@alchemy/wallet-api-types/capabilities\";\n\nimport type { InnerWalletApiClientBase } from \"../types.js\";\n\n/**\n * Merges client capabilities with capabilities from the request.\n * Uses policyId (singular) when there's one policy, policyIds (array) when multiple.\n *\n * @param {InnerWalletApiClientBase} client - The inner wallet API client (potentially including global capabilities like policy IDs)\n * @param {T | undefined} capabilities - Request capabilities to merge with, if any\n * @returns {T | undefined} The merged capabilities object, or original capabilities if no capability configuration exists on the client\n */\nexport const mergeClientCapabilities = <\n T extends PrepareCallsCapabilities | SendPreparedCallsCapabilities,\n>(\n client: InnerWalletApiClientBase,\n capabilities: T | undefined,\n): T | undefined => {\n if (!client.policyIds?.length || capabilities?.paymasterService) {\n return capabilities;\n }\n\n return {\n ...capabilities,\n paymasterService:\n client.policyIds.length === 1\n ? { policyId: client.policyIds[0] }\n : { policyIds: client.policyIds },\n } as T;\n};\n\n/**\n * Extracts capabilities from prepareCalls that are usable for sendPreparedCalls.\n * Only permissions and paymasterService (policyId/policyIds & webhookData) are supported.\n *\n * @param {PrepareCallsCapabilities | undefined} capabilities - The prepareCalls capabilities\n * @returns {SendPreparedCallsCapabilities | undefined} The sendPreparedCalls capabilities, or undefined if no relevant capabilities exist\n */\nexport const extractCapabilitiesForSending = (\n capabilities: PrepareCallsCapabilities | undefined,\n): SendPreparedCallsCapabilities | undefined => {\n if (\n capabilities?.permissions == null &&\n capabilities?.paymasterService == null\n ) {\n return undefined;\n }\n\n const paymasterService = capabilities.paymasterService;\n\n return {\n permissions: capabilities.permissions,\n paymasterService:\n paymasterService != null\n ? {\n ...(\"policyId\" in paymasterService\n ? { policyId: paymasterService.policyId }\n : { policyIds: paymasterService.policyIds }),\n webhookData: paymasterService.webhookData,\n }\n : undefined,\n };\n};\n"]}
|
package/dist/esm/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "4.
|
|
1
|
+
export declare const VERSION = "4.83.0";
|
package/dist/esm/version.js
CHANGED
package/dist/esm/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yBAAyB;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// This file is autogenerated by inject-version.ts. Any changes will be\n// overwritten on commit!\nexport const VERSION = \"4.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yBAAyB;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// This file is autogenerated by inject-version.ts. Any changes will be\n// overwritten on commit!\nexport const VERSION = \"4.83.0\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendCalls.d.ts","sourceRoot":"","sources":["../../../../src/client/actions/sendCalls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG1E,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"sendCalls.d.ts","sourceRoot":"","sources":["../../../../src/client/actions/sendCalls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG1E,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD,MAAM,MAAM,eAAe,CACzB,QAAQ,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,IACxD,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAEjC,MAAM,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,EAE1D,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAChC,OAAO,CAAC,eAAe,CAAC,CAoC1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sendPreparedCalls.d.ts","sourceRoot":"","sources":["../../../../src/client/actions/sendPreparedCalls.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"sendPreparedCalls.d.ts","sourceRoot":"","sources":["../../../../src/client/actions/sendPreparedCalls.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAI3E,KAAK,SAAS,GAAG,OAAO,CACtB,yBAAyB,EACzB;IACE,OAAO,EAAE;QACP,MAAM,EAAE,0BAA0B,CAAC;KACpC,CAAC;CACH,CACF,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAClD,SAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAClC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAqBlC"}
|
|
@@ -21,8 +21,8 @@ export declare function waitForCallsStatus(client: InnerWalletApiClient, params:
|
|
|
21
21
|
} | {
|
|
22
22
|
[x: string]: any;
|
|
23
23
|
} | undefined;
|
|
24
|
-
atomic: boolean;
|
|
25
24
|
id: string;
|
|
25
|
+
atomic: boolean;
|
|
26
26
|
receipts?: import("viem").WalletCallReceipt<bigint, "success" | "reverted">[] | undefined;
|
|
27
27
|
statusCode: number;
|
|
28
28
|
status: "pending" | "success" | "failure" | undefined;
|
|
@@ -1,11 +1,20 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { PrepareCallsCapabilities, SendPreparedCallsCapabilities } from "@alchemy/wallet-api-types/capabilities";
|
|
2
2
|
import type { InnerWalletApiClientBase } from "../types.js";
|
|
3
3
|
/**
|
|
4
4
|
* Merges client capabilities with capabilities from the request.
|
|
5
|
+
* Uses policyId (singular) when there's one policy, policyIds (array) when multiple.
|
|
5
6
|
*
|
|
6
7
|
* @param {InnerWalletApiClientBase} client - The inner wallet API client (potentially including global capabilities like policy IDs)
|
|
7
|
-
* @param {
|
|
8
|
-
* @returns {
|
|
8
|
+
* @param {T | undefined} capabilities - Request capabilities to merge with, if any
|
|
9
|
+
* @returns {T | undefined} The merged capabilities object, or original capabilities if no capability configuration exists on the client
|
|
9
10
|
*/
|
|
10
|
-
export declare const mergeClientCapabilities: (client: InnerWalletApiClientBase, capabilities:
|
|
11
|
+
export declare const mergeClientCapabilities: <T extends PrepareCallsCapabilities | SendPreparedCallsCapabilities>(client: InnerWalletApiClientBase, capabilities: T | undefined) => T | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Extracts capabilities from prepareCalls that are usable for sendPreparedCalls.
|
|
14
|
+
* Only permissions and paymasterService (policyId/policyIds & webhookData) are supported.
|
|
15
|
+
*
|
|
16
|
+
* @param {PrepareCallsCapabilities | undefined} capabilities - The prepareCalls capabilities
|
|
17
|
+
* @returns {SendPreparedCallsCapabilities | undefined} The sendPreparedCalls capabilities, or undefined if no relevant capabilities exist
|
|
18
|
+
*/
|
|
19
|
+
export declare const extractCapabilitiesForSending: (capabilities: PrepareCallsCapabilities | undefined) => SendPreparedCallsCapabilities | undefined;
|
|
11
20
|
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/internal/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/internal/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,6BAA6B,EAC9B,MAAM,wCAAwC,CAAC;AAEhD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAClC,CAAC,SAAS,wBAAwB,GAAG,6BAA6B,EAElE,QAAQ,wBAAwB,EAChC,cAAc,CAAC,GAAG,SAAS,KAC1B,CAAC,GAAG,SAYN,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,GACxC,cAAc,wBAAwB,GAAG,SAAS,KACjD,6BAA6B,GAAG,SAsBlC,CAAC"}
|
package/dist/types/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "4.
|
|
1
|
+
export declare const VERSION = "4.83.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@account-kit/wallet-client",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.83.0",
|
|
4
4
|
"description": "Wallet Client for Alchemy Account Kit",
|
|
5
5
|
"author": "Alchemy",
|
|
6
6
|
"license": "MIT",
|
|
@@ -44,10 +44,10 @@
|
|
|
44
44
|
"test:e2e": "bun test ./src/**/*.e2e.test.*"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@aa-sdk/core": "^4.
|
|
48
|
-
"@account-kit/infra": "^4.
|
|
49
|
-
"@account-kit/smart-contracts": "^4.
|
|
50
|
-
"@alchemy/wallet-api-types": "0.1.0-alpha.
|
|
47
|
+
"@aa-sdk/core": "^4.83.0",
|
|
48
|
+
"@account-kit/infra": "^4.83.0",
|
|
49
|
+
"@account-kit/smart-contracts": "^4.83.0",
|
|
50
|
+
"@alchemy/wallet-api-types": "0.1.0-alpha.22",
|
|
51
51
|
"deep-equal": "^2.2.3",
|
|
52
52
|
"ox": "^0.6.12"
|
|
53
53
|
},
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"url": "https://github.com/alchemyplatform/aa-sdk/issues"
|
|
73
73
|
},
|
|
74
74
|
"homepage": "https://github.com/alchemyplatform/aa-sdk#readme",
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "1fc91f7ed58341f07ae6d828aa258e2e03589765"
|
|
76
76
|
}
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
import { signSignatureRequest } from "./signSignatureRequest.js";
|
|
11
11
|
import type { SmartWalletSigner } from "../index.js";
|
|
12
12
|
import { isWebAuthnSigner } from "../../utils.js";
|
|
13
|
+
import { extractCapabilitiesForSending } from "../../internal/capabilities.js";
|
|
13
14
|
|
|
14
15
|
export type SendCallsParams<
|
|
15
16
|
TAccount extends Address | undefined = Address | undefined,
|
|
@@ -86,11 +87,10 @@ export async function sendCalls<
|
|
|
86
87
|
|
|
87
88
|
const signedCalls = await signPreparedCalls(signer, calls);
|
|
88
89
|
|
|
90
|
+
const capabilities = extractCapabilitiesForSending(params.capabilities);
|
|
91
|
+
|
|
89
92
|
return await sendPreparedCalls(client, {
|
|
90
93
|
...signedCalls,
|
|
91
|
-
|
|
92
|
-
...(params.capabilities?.permissions != null
|
|
93
|
-
? { capabilities: { permissions: params.capabilities.permissions } }
|
|
94
|
-
: {}),
|
|
94
|
+
...(capabilities != null ? { capabilities } : {}),
|
|
95
95
|
});
|
|
96
96
|
}
|
|
@@ -2,6 +2,7 @@ import { toHex } from "viem";
|
|
|
2
2
|
import type { WalletServerRpcSchemaType } from "@alchemy/wallet-api-types/rpc";
|
|
3
3
|
import type { InnerWalletApiClient, WithoutChainId } from "../../types.ts";
|
|
4
4
|
import { metrics } from "../../metrics.js";
|
|
5
|
+
import { mergeClientCapabilities } from "../../internal/capabilities.js";
|
|
5
6
|
|
|
6
7
|
type RpcSchema = Extract<
|
|
7
8
|
WalletServerRpcSchemaType,
|
|
@@ -60,6 +61,8 @@ export async function sendPreparedCalls(
|
|
|
60
61
|
},
|
|
61
62
|
});
|
|
62
63
|
|
|
64
|
+
params.capabilities = mergeClientCapabilities(client, params.capabilities);
|
|
65
|
+
|
|
63
66
|
return client.request({
|
|
64
67
|
method: "wallet_sendPreparedCalls",
|
|
65
68
|
params: [
|
|
@@ -1,24 +1,66 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
PrepareCallsCapabilities,
|
|
3
|
+
SendPreparedCallsCapabilities,
|
|
4
|
+
} from "@alchemy/wallet-api-types/capabilities";
|
|
5
|
+
|
|
2
6
|
import type { InnerWalletApiClientBase } from "../types.js";
|
|
3
7
|
|
|
4
8
|
/**
|
|
5
9
|
* Merges client capabilities with capabilities from the request.
|
|
10
|
+
* Uses policyId (singular) when there's one policy, policyIds (array) when multiple.
|
|
6
11
|
*
|
|
7
12
|
* @param {InnerWalletApiClientBase} client - The inner wallet API client (potentially including global capabilities like policy IDs)
|
|
8
|
-
* @param {
|
|
9
|
-
* @returns {
|
|
13
|
+
* @param {T | undefined} capabilities - Request capabilities to merge with, if any
|
|
14
|
+
* @returns {T | undefined} The merged capabilities object, or original capabilities if no capability configuration exists on the client
|
|
10
15
|
*/
|
|
11
|
-
export const mergeClientCapabilities =
|
|
16
|
+
export const mergeClientCapabilities = <
|
|
17
|
+
T extends PrepareCallsCapabilities | SendPreparedCallsCapabilities,
|
|
18
|
+
>(
|
|
12
19
|
client: InnerWalletApiClientBase,
|
|
13
|
-
capabilities:
|
|
14
|
-
):
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
capabilities: T | undefined,
|
|
21
|
+
): T | undefined => {
|
|
22
|
+
if (!client.policyIds?.length || capabilities?.paymasterService) {
|
|
23
|
+
return capabilities;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return {
|
|
27
|
+
...capabilities,
|
|
28
|
+
paymasterService:
|
|
29
|
+
client.policyIds.length === 1
|
|
30
|
+
? { policyId: client.policyIds[0] }
|
|
31
|
+
: { policyIds: client.policyIds },
|
|
32
|
+
} as T;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Extracts capabilities from prepareCalls that are usable for sendPreparedCalls.
|
|
37
|
+
* Only permissions and paymasterService (policyId/policyIds & webhookData) are supported.
|
|
38
|
+
*
|
|
39
|
+
* @param {PrepareCallsCapabilities | undefined} capabilities - The prepareCalls capabilities
|
|
40
|
+
* @returns {SendPreparedCallsCapabilities | undefined} The sendPreparedCalls capabilities, or undefined if no relevant capabilities exist
|
|
41
|
+
*/
|
|
42
|
+
export const extractCapabilitiesForSending = (
|
|
43
|
+
capabilities: PrepareCallsCapabilities | undefined,
|
|
44
|
+
): SendPreparedCallsCapabilities | undefined => {
|
|
45
|
+
if (
|
|
46
|
+
capabilities?.permissions == null &&
|
|
47
|
+
capabilities?.paymasterService == null
|
|
48
|
+
) {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const paymasterService = capabilities.paymasterService;
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
permissions: capabilities.permissions,
|
|
56
|
+
paymasterService:
|
|
57
|
+
paymasterService != null
|
|
58
|
+
? {
|
|
59
|
+
...("policyId" in paymasterService
|
|
60
|
+
? { policyId: paymasterService.policyId }
|
|
61
|
+
: { policyIds: paymasterService.policyIds }),
|
|
62
|
+
webhookData: paymasterService.webhookData,
|
|
63
|
+
}
|
|
64
|
+
: undefined,
|
|
65
|
+
};
|
|
24
66
|
};
|
package/src/version.ts
CHANGED