@alchemy/wallet-apis 0.0.0-alpha.15 → 0.0.0-alpha.16

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.
@@ -4,6 +4,7 @@ import { sendPreparedCalls, } from "./sendPreparedCalls.js";
4
4
  import { LOGGER } from "../logger.js";
5
5
  import { signSignatureRequest } from "./signSignatureRequest.js";
6
6
  import { isWebAuthnAccount } from "../utils/assertions.js";
7
+ import { extractCapabilitiesForSending } from "../utils/capabilities.js";
7
8
  import { BaseError } from "@alchemy/common";
8
9
  /**
9
10
  * Prepares, signs, and submits calls. This function internally calls `prepareCalls`, `signPreparedCalls`, and `sendPreparedCalls`.
@@ -57,11 +58,11 @@ export async function sendCalls(client, params) {
57
58
  calls = await prepareCalls(client, secondCallParams);
58
59
  }
59
60
  const signedCalls = await signPreparedCalls(client, calls);
61
+ const sendPreparedCallsCapabilities = extractCapabilitiesForSending(params.capabilities);
60
62
  const res = await sendPreparedCalls(client, {
61
63
  ...signedCalls,
62
- // The only capability that is supported in sendPreparedCalls is permissions.
63
- ...(params.capabilities?.permissions != null
64
- ? { capabilities: { permissions: params.capabilities.permissions } }
64
+ ...(sendPreparedCallsCapabilities != null
65
+ ? { capabilities: sendPreparedCallsCapabilities }
65
66
  : {}),
66
67
  });
67
68
  LOGGER.info("sendCalls:done");
@@ -1 +1 @@
1
- {"version":3,"file":"sendCalls.js","sourceRoot":"","sources":["../../../src/actions/sendCalls.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAA2B,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,iBAAiB,GAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAQ5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAG7B,MAA4B,EAC5B,MAAiC;IAEjC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;QAC7B,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM;QAC3B,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY;KACvC,CAAC,CAAC;IACH,IAAI,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACtC,IAAI,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,SAAS,CACjB,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,8EAA8E;YAC9E,wBAAwB,EAAE,SAGzB;SACF,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,GAAG,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE;QAC1C,GAAG,WAAW;QACd,6EAA6E;QAC7E,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,IAAI,IAAI;YAC1C,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE;YACpE,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import type { Address, Prettify } from \"viem\";\nimport type { InnerWalletApiClient } from \"../types.js\";\nimport { prepareCalls, type PrepareCallsParams } from \"./prepareCalls.js\";\nimport { signPreparedCalls } from \"./signPreparedCalls.js\";\nimport {\n sendPreparedCalls,\n type SendPreparedCallsResult,\n} from \"./sendPreparedCalls.js\";\nimport { LOGGER } from \"../logger.js\";\nimport { signSignatureRequest } from \"./signSignatureRequest.js\";\nimport { isWebAuthnAccount } from \"../utils/assertions.js\";\nimport { BaseError } from \"@alchemy/common\";\n\nexport type SendCallsParams<\n TAccount extends Address | undefined = Address | undefined,\n> = Prettify<PrepareCallsParams<TAccount>>;\n\nexport type SendCallsResult = Prettify<SendPreparedCallsResult>;\n\n/**\n * Prepares, signs, and submits calls. This function internally calls `prepareCalls`, `signPreparedCalls`, and `sendPreparedCalls`.\n *\n * @param {InnerWalletApiClient} client - The wallet API client to use for the request\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.\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 * <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 */\nexport async function sendCalls<\n TAccount extends Address | undefined = Address | undefined,\n>(\n client: InnerWalletApiClient,\n params: SendCallsParams<TAccount>,\n): Promise<SendCallsResult> {\n LOGGER.info(\"sendCalls:start\", {\n calls: params.calls?.length,\n hasCapabilities: !!params.capabilities,\n });\n let calls = await prepareCalls(client, params);\n\n if (calls.type === \"paymaster-permit\") {\n if (isWebAuthnAccount(client.owner)) {\n throw new BaseError(\n \"WebAuthn signer is not currently supported for signing paymaster permit signatures\",\n );\n }\n const signature = await signSignatureRequest(\n client,\n calls.signatureRequest,\n );\n\n const secondCallParams = {\n from: calls.modifiedRequest.from,\n calls: calls.modifiedRequest.calls,\n capabilities: calls.modifiedRequest.capabilities,\n // WebAuthn signatures are not supported for paymaster permits (throws above).\n paymasterPermitSignature: signature as Exclude<\n typeof signature,\n { type: \"webauthn-p256\" }\n >,\n };\n\n calls = await prepareCalls(client, secondCallParams);\n }\n\n const signedCalls = await signPreparedCalls(client, calls);\n\n const res = await sendPreparedCalls(client, {\n ...signedCalls,\n // The only capability that is supported in sendPreparedCalls is permissions.\n ...(params.capabilities?.permissions != null\n ? { capabilities: { permissions: params.capabilities.permissions } }\n : {}),\n });\n LOGGER.info(\"sendCalls:done\");\n return res;\n}\n"]}
1
+ {"version":3,"file":"sendCalls.js","sourceRoot":"","sources":["../../../src/actions/sendCalls.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAA2B,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,iBAAiB,GAElB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAQ5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAG7B,MAA4B,EAC5B,MAAiC;IAEjC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;QAC7B,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM;QAC3B,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY;KACvC,CAAC,CAAC;IACH,IAAI,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACtC,IAAI,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,SAAS,CACjB,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,8EAA8E;YAC9E,wBAAwB,EAAE,SAGzB;SACF,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,6BAA6B,GAAG,6BAA6B,CACjE,MAAM,CAAC,YAAY,CACpB,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE;QAC1C,GAAG,WAAW;QACd,GAAG,CAAC,6BAA6B,IAAI,IAAI;YACvC,CAAC,CAAC,EAAE,YAAY,EAAE,6BAA6B,EAAE;YACjD,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import type { Address, Prettify } from \"viem\";\nimport type { InnerWalletApiClient } from \"../types.js\";\nimport { prepareCalls, type PrepareCallsParams } from \"./prepareCalls.js\";\nimport { signPreparedCalls } from \"./signPreparedCalls.js\";\nimport {\n sendPreparedCalls,\n type SendPreparedCallsResult,\n} from \"./sendPreparedCalls.js\";\nimport { LOGGER } from \"../logger.js\";\nimport { signSignatureRequest } from \"./signSignatureRequest.js\";\nimport { isWebAuthnAccount } from \"../utils/assertions.js\";\nimport { extractCapabilitiesForSending } from \"../utils/capabilities.js\";\nimport { BaseError } from \"@alchemy/common\";\n\nexport type SendCallsParams<\n TAccount extends Address | undefined = Address | undefined,\n> = Prettify<PrepareCallsParams<TAccount>>;\n\nexport type SendCallsResult = Prettify<SendPreparedCallsResult>;\n\n/**\n * Prepares, signs, and submits calls. This function internally calls `prepareCalls`, `signPreparedCalls`, and `sendPreparedCalls`.\n *\n * @param {InnerWalletApiClient} client - The wallet API client to use for the request\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.\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 * <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 */\nexport async function sendCalls<\n TAccount extends Address | undefined = Address | undefined,\n>(\n client: InnerWalletApiClient,\n params: SendCallsParams<TAccount>,\n): Promise<SendCallsResult> {\n LOGGER.info(\"sendCalls:start\", {\n calls: params.calls?.length,\n hasCapabilities: !!params.capabilities,\n });\n let calls = await prepareCalls(client, params);\n\n if (calls.type === \"paymaster-permit\") {\n if (isWebAuthnAccount(client.owner)) {\n throw new BaseError(\n \"WebAuthn signer is not currently supported for signing paymaster permit signatures\",\n );\n }\n const signature = await signSignatureRequest(\n client,\n calls.signatureRequest,\n );\n\n const secondCallParams = {\n from: calls.modifiedRequest.from,\n calls: calls.modifiedRequest.calls,\n capabilities: calls.modifiedRequest.capabilities,\n // WebAuthn signatures are not supported for paymaster permits (throws above).\n paymasterPermitSignature: signature as Exclude<\n typeof signature,\n { type: \"webauthn-p256\" }\n >,\n };\n\n calls = await prepareCalls(client, secondCallParams);\n }\n\n const signedCalls = await signPreparedCalls(client, calls);\n\n const sendPreparedCallsCapabilities = extractCapabilitiesForSending(\n params.capabilities,\n );\n\n const res = await sendPreparedCalls(client, {\n ...signedCalls,\n ...(sendPreparedCallsCapabilities != null\n ? { capabilities: sendPreparedCallsCapabilities }\n : {}),\n });\n LOGGER.info(\"sendCalls:done\");\n return res;\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { toHex } from "viem";
2
2
  import { LOGGER } from "../logger.js";
3
+ import { mergeClientCapabilities } from "../utils/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.
@@ -32,6 +33,7 @@ import { LOGGER } from "../logger.js";
32
33
  * ```
33
34
  */
34
35
  export async function sendPreparedCalls(client, params) {
36
+ params.capabilities = mergeClientCapabilities(client, params.capabilities);
35
37
  LOGGER.debug("sendPreparedCalls:start", { type: params.type });
36
38
  const res = await client.request({
37
39
  method: "wallet_sendPreparedCalls",
@@ -1 +1 @@
1
- {"version":3,"file":"sendPreparedCalls.js","sourceRoot":"","sources":["../../../src/actions/sendPreparedCalls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAiB,MAAM,MAAM,CAAC;AAG5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAiBtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAA4B,EAC5B,MAA+B;IAE/B,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;QAC/B,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,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;iBAClD;SACN;KACF,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACvC,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import { toHex, type Prettify } from \"viem\";\nimport type { WalletServerRpcSchemaType } from \"@alchemy/wallet-api-types/rpc\";\nimport type { InnerWalletApiClient, OptionalChainId } from \"../types.ts\";\nimport { LOGGER } from \"../logger.js\";\n\ntype RpcSchema = Extract<\n WalletServerRpcSchemaType,\n {\n Request: {\n method: \"wallet_sendPreparedCalls\";\n };\n }\n>;\n\nexport type SendPreparedCallsParams = Prettify<\n OptionalChainId<RpcSchema[\"Request\"][\"params\"][0]>\n>;\n\nexport type SendPreparedCallsResult = Prettify<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 LOGGER.debug(\"sendPreparedCalls:start\", { type: params.type });\n const res = await client.request({\n method: \"wallet_sendPreparedCalls\",\n params: [\n params.type === \"array\"\n ? params\n : {\n ...params,\n chainId: params.chainId ?? toHex(client.chain.id),\n },\n ],\n });\n LOGGER.debug(\"sendPreparedCalls:done\");\n return res;\n}\n"]}
1
+ {"version":3,"file":"sendPreparedCalls.js","sourceRoot":"","sources":["../../../src/actions/sendPreparedCalls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAiB,MAAM,MAAM,CAAC;AAG5C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAiBnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAA4B,EAC5B,MAA+B;IAE/B,MAAM,CAAC,YAAY,GAAG,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAE3E,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;QAC/B,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,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;iBAClD;SACN;KACF,CAAC,CAAC;IACH,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACvC,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import { toHex, type Prettify } from \"viem\";\nimport type { WalletServerRpcSchemaType } from \"@alchemy/wallet-api-types/rpc\";\nimport type { InnerWalletApiClient, OptionalChainId } from \"../types.ts\";\nimport { LOGGER } from \"../logger.js\";\nimport { mergeClientCapabilities } from \"../utils/capabilities.js\";\n\ntype RpcSchema = Extract<\n WalletServerRpcSchemaType,\n {\n Request: {\n method: \"wallet_sendPreparedCalls\";\n };\n }\n>;\n\nexport type SendPreparedCallsParams = Prettify<\n OptionalChainId<RpcSchema[\"Request\"][\"params\"][0]>\n>;\n\nexport type SendPreparedCallsResult = Prettify<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 params.capabilities = mergeClientCapabilities(client, params.capabilities);\n\n LOGGER.debug(\"sendPreparedCalls:start\", { type: params.type });\n const res = await client.request({\n method: \"wallet_sendPreparedCalls\",\n params: [\n params.type === \"array\"\n ? params\n : {\n ...params,\n chainId: params.chainId ?? toHex(client.chain.id),\n },\n ],\n });\n LOGGER.debug(\"sendPreparedCalls:done\");\n return res;\n}\n"]}
@@ -1,10 +1,19 @@
1
- import type { Capabilities } from "@alchemy/wallet-api-types/capabilities";
1
+ import type { PrepareCallsCapabilities, SendPreparedCallsCapabilities } from "@alchemy/wallet-api-types/capabilities";
2
2
  import type { InnerWalletApiClient } 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 {InnerWalletApiClient} client - The inner wallet API client (potentially including global capabilities like policy IDs)
7
- * @param {Capabilities | undefined} capabilities - Request capabilities to merge with, if any
8
- * @returns {Capabilities | undefined} The merged capabilities object, or original capabilities if no capability configuration exists on the client
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: InnerWalletApiClient, capabilities: Capabilities | undefined) => Capabilities | undefined;
11
+ export declare const mergeClientCapabilities: <T extends PrepareCallsCapabilities | SendPreparedCallsCapabilities>(client: InnerWalletApiClient, 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 {InnerWalletApiClient} client - The inner wallet API client (potentially including global capabilities like policy IDs)
5
- * @param {Capabilities | undefined} capabilities - Request capabilities to merge with, if any
6
- * @returns {Capabilities | undefined} The merged capabilities object, or original capabilities if no capability configuration exists on the client
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
- return client.policyIds?.length && !capabilities?.paymasterService
10
- ? {
11
- ...capabilities,
12
- paymasterService: {
13
- ...capabilities?.paymasterService,
14
- policyIds: client.policyIds,
15
- },
16
- }
17
- : capabilities;
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/utils/capabilities.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,MAA4B,EAC5B,YAAsC,EACZ,EAAE;IAC5B,OAAO,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,gBAAgB;QAChE,CAAC,CAAC;YACE,GAAG,YAAY;YACf,gBAAgB,EAAE;gBAChB,GAAG,YAAY,EAAE,gBAAgB;gBACjC,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B;SACF;QACH,CAAC,CAAC,YAAY,CAAC;AACnB,CAAC,CAAC","sourcesContent":["import type { Capabilities } from \"@alchemy/wallet-api-types/capabilities\";\nimport type { InnerWalletApiClient } from \"../types.js\";\n\n/**\n * Merges client capabilities with capabilities from the request.\n *\n * @param {InnerWalletApiClient} client - The inner wallet API client (potentially including global capabilities like policy IDs)\n * @param {Capabilities | undefined} capabilities - Request capabilities to merge with, if any\n * @returns {Capabilities | undefined} The merged capabilities object, or original capabilities if no capability configuration exists on the client\n */\nexport const mergeClientCapabilities = (\n client: InnerWalletApiClient,\n capabilities: Capabilities | undefined,\n): Capabilities | undefined => {\n return client.policyIds?.length && !capabilities?.paymasterService\n ? {\n ...capabilities,\n paymasterService: {\n ...capabilities?.paymasterService,\n policyIds: client.policyIds,\n },\n }\n : capabilities;\n};\n"]}
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/utils/capabilities.ts"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAGrC,MAA4B,EAC5B,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\";\nimport type { InnerWalletApiClient } 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 {InnerWalletApiClient} 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: InnerWalletApiClient,\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"]}
@@ -1,7 +1,7 @@
1
1
  import { type Capabilities } from "viem";
2
2
  import { type PrepareCallsResult } from "@alchemy/wallet-apis";
3
3
  import type { PreparedCall_Authorization, PreparedCall_Permit, PreparedCall_UserOpV060, PreparedCall_UserOpV070 } from "@alchemy/wallet-api-types";
4
- import type { Capabilities as WalletApiCapabilities } from "@alchemy/wallet-api-types/capabilities";
4
+ import type { PrepareCallsCapabilities as WalletApiCapabilities } from "@alchemy/wallet-api-types/capabilities";
5
5
  import type { ViemEncodedAuthorizationCall, ViemEncodedPaymasterPermitCall, ViemEncodedPreparedCalls, ViemEncodedUserOperationCall } from "./viemEncode.js";
6
6
  export declare const viemDecodePreparedCalls: (encodedCalls: ViemEncodedPreparedCalls) => PrepareCallsResult;
7
7
  export declare const viemDecodePreparedCall: (call: ViemEncodedUserOperationCall | ViemEncodedPaymasterPermitCall | ViemEncodedAuthorizationCall) => PreparedCall_UserOpV060 | PreparedCall_UserOpV070 | PreparedCall_Permit | PreparedCall_Authorization;
@@ -1 +1 @@
1
- {"version":3,"file":"viemDecode.js","sourceRoot":"","sources":["../../../src/utils/viemDecode.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isHex,\n numberToHex,\n toHex,\n type Capabilities,\n type Hex,\n type Signature,\n} from \"viem\";\nimport { type PrepareCallsResult } from \"@alchemy/wallet-apis\";\nimport { assertNever } from \"@alchemy/common\";\nimport type {\n EcdsaSig,\n PreparedCall_Authorization,\n PreparedCall_Permit,\n PreparedCall_UserOpV060,\n PreparedCall_UserOpV070,\n} from \"@alchemy/wallet-api-types\";\nimport type { Capabilities as WalletApiCapabilities } from \"@alchemy/wallet-api-types/capabilities\";\nimport type {\n ViemEncodedAuthorizationCall,\n ViemEncodedPaymasterPermitCall,\n ViemEncodedPreparedCalls,\n ViemEncodedUserOperationCall,\n} from \"./viemEncode.js\";\n\nexport const viemDecodePreparedCalls = (\n encodedCalls: ViemEncodedPreparedCalls,\n): PrepareCallsResult => {\n if (encodedCalls.type === \"array\") {\n return {\n type: \"array\",\n data: encodedCalls.data.map((call) => {\n switch (call.type) {\n case \"user-operation-v060\":\n case \"user-operation-v070\":\n return viemDecodeUserOperationCall(call);\n case \"authorization\":\n return viemDecodeAuthorization(call);\n default:\n return assertNever(call, \"Unexpected encoded call type in array\");\n }\n }),\n };\n }\n\n switch (encodedCalls.type) {\n case \"user-operation-v060\":\n case \"user-operation-v070\":\n return viemDecodeUserOperationCall(encodedCalls);\n case \"paymaster-permit\":\n return viemDecodePaymasterPermitCall(encodedCalls);\n default:\n return assertNever(encodedCalls, \"Unexpected encoded call type\");\n }\n};\n\nexport const viemDecodePreparedCall = (\n call:\n | ViemEncodedUserOperationCall\n | ViemEncodedPaymasterPermitCall\n | ViemEncodedAuthorizationCall,\n):\n | PreparedCall_UserOpV060\n | PreparedCall_UserOpV070\n | PreparedCall_Permit\n | PreparedCall_Authorization => {\n switch (call.type) {\n case \"user-operation-v060\":\n case \"user-operation-v070\": {\n return viemDecodeUserOperationCall(call);\n }\n case \"paymaster-permit\": {\n return viemDecodePaymasterPermitCall(call);\n }\n case \"authorization\": {\n return viemDecodeAuthorization(call);\n }\n default: {\n return assertNever(call, \"Unexpected prepared call type\");\n }\n }\n};\n\nconst viemDecodeUserOperationCall = (\n call: ViemEncodedUserOperationCall,\n): PreparedCall_UserOpV060 | PreparedCall_UserOpV070 => {\n switch (call.type) {\n case \"user-operation-v060\": {\n return {\n type: call.type,\n chainId: numberToHex(call.chainId),\n data: {\n sender: call.data.sender,\n nonce: toHex(call.data.nonce),\n initCode: call.data.initCode!,\n callData: call.data.callData,\n callGasLimit: toHex(call.data.callGasLimit),\n verificationGasLimit: toHex(call.data.verificationGasLimit),\n preVerificationGas: toHex(call.data.preVerificationGas),\n maxFeePerGas: toHex(call.data.maxFeePerGas),\n maxPriorityFeePerGas: toHex(call.data.maxPriorityFeePerGas),\n paymasterAndData: \"0x\",\n },\n signatureRequest: call.signatureRequest,\n feePayment: {\n sponsored: call.feePayment.sponsored,\n tokenAddress: call.feePayment.tokenAddress,\n maxAmount: toHex(call.feePayment.maxAmount),\n },\n } satisfies PreparedCall_UserOpV060;\n }\n case \"user-operation-v070\": {\n return {\n type: call.type,\n chainId: numberToHex(call.chainId),\n data: {\n sender: call.data.sender,\n nonce: toHex(call.data.nonce),\n factory: call.data.factory,\n factoryData: call.data.factoryData,\n callData: call.data.callData,\n callGasLimit: toHex(call.data.callGasLimit),\n verificationGasLimit: toHex(call.data.verificationGasLimit),\n preVerificationGas: toHex(call.data.preVerificationGas),\n maxFeePerGas: toHex(call.data.maxFeePerGas),\n maxPriorityFeePerGas: toHex(call.data.maxPriorityFeePerGas),\n paymaster: call.data.paymaster,\n paymasterData: call.data.paymasterData,\n paymasterVerificationGasLimit:\n call.data.paymasterVerificationGasLimit != null\n ? toHex(call.data.paymasterVerificationGasLimit)\n : undefined,\n paymasterPostOpGasLimit:\n call.data.paymasterPostOpGasLimit != null\n ? toHex(call.data.paymasterPostOpGasLimit)\n : undefined,\n },\n signatureRequest: call.signatureRequest,\n feePayment: {\n sponsored: call.feePayment.sponsored,\n tokenAddress: call.feePayment.tokenAddress,\n maxAmount: toHex(call.feePayment.maxAmount),\n },\n } satisfies PreparedCall_UserOpV070;\n }\n default: {\n return assertNever(\n call.type,\n `Unexpected user operation type in 'viemDecodeUserOperationCall'`,\n );\n }\n }\n};\n\nconst viemDecodeAuthorization = (\n call: ViemEncodedAuthorizationCall,\n): PreparedCall_Authorization => {\n return {\n type: call.type,\n chainId: numberToHex(call.chainId),\n data: {\n address: call.data.address,\n nonce: numberToHex(call.data.nonce),\n },\n signatureRequest: call.signatureRequest,\n };\n};\n\nconst viemDecodePaymasterPermitCall = (\n call: ViemEncodedPaymasterPermitCall,\n): PreparedCall_Permit => {\n return {\n type: call.type,\n data: call.data,\n signatureRequest: call.signatureRequest,\n modifiedRequest: {\n from: call.modifiedRequest.from,\n paymasterPermitSignature: viemDecodeSignature(\n call.modifiedRequest.paymasterPermitSignature,\n ),\n calls: call.modifiedRequest.calls.map((it) => ({\n to: it.to,\n data: it.data,\n value: it.value != null ? toHex(it.value) : undefined,\n })),\n capabilities: viemDecodeCapabilities(call.modifiedRequest.capabilities),\n chainId: numberToHex(call.modifiedRequest.chainId),\n },\n };\n};\n\ntype DecodedSignature = EcdsaSig[\"signature\"];\n\nconst viemDecodeSignature = (\n signature:\n | {\n type: EcdsaSig[\"signature\"][\"type\"];\n data: Signature | Hex;\n }\n | undefined,\n): DecodedSignature | undefined => {\n if (!signature) {\n return undefined;\n }\n const { type, data } = signature;\n if (isHex(data)) {\n return { type, data };\n }\n if (\"yParity\" in data && data.yParity != null) {\n return { type, data: { ...data, yParity: toHex(data.yParity) } };\n }\n if (\"v\" in data) {\n return { type, data: { ...data, v: toHex(data.v) } };\n }\n return assertNever(data, \"Signature object must include 'v' or 'yParity'\");\n};\n\nexport const viemDecodeCapabilities = (\n capabilities: Capabilities | undefined,\n): WalletApiCapabilities => {\n const { alchemyPaymaster, ...rest } = capabilities ?? {};\n return {\n ...rest,\n ...(rest?.gasParamsOverride && {\n gasParamsOverride: Object.fromEntries(\n Object.entries(rest.gasParamsOverride).map(([key, value]) => [\n key,\n typeof value === \"bigint\" ? toHex(value) : value,\n ]),\n ),\n }),\n ...(rest?.nonceOverride && {\n nonceOverride: {\n nonceKey: toHex(rest.nonceOverride.nonceKey),\n },\n }),\n ...(alchemyPaymaster && {\n paymasterService: {\n ...(\"policyId\" in alchemyPaymaster && {\n policyId: alchemyPaymaster.policyId,\n }),\n ...(\"policyIds\" in alchemyPaymaster && {\n policyIds: alchemyPaymaster.policyIds,\n }),\n ...(alchemyPaymaster.onlyEstimation && {\n onlyEstimation: alchemyPaymaster.onlyEstimation,\n }),\n ...(alchemyPaymaster.erc20 && {\n erc20: {\n ...alchemyPaymaster.erc20,\n maxTokenAmount:\n alchemyPaymaster.erc20.maxTokenAmount != null\n ? toHex(alchemyPaymaster.erc20.maxTokenAmount)\n : undefined,\n ...(\"preOpSettings\" in alchemyPaymaster.erc20 && {\n preOpSettings: {\n ...alchemyPaymaster.erc20.preOpSettings,\n ...(\"autoPermit\" in alchemyPaymaster.erc20.preOpSettings && {\n autoPermit: {\n below: toHex(\n alchemyPaymaster.erc20.preOpSettings.autoPermit.below,\n ),\n amount: toHex(\n alchemyPaymaster.erc20.preOpSettings.autoPermit.amount,\n ),\n durationSeconds:\n alchemyPaymaster.erc20.preOpSettings.autoPermit\n .durationSeconds != null\n ? toHex(\n alchemyPaymaster.erc20.preOpSettings.autoPermit\n .durationSeconds,\n )\n : undefined,\n },\n }),\n ...(\"permitDetails\" in alchemyPaymaster.erc20.preOpSettings && {\n permitDetails: {\n deadline: toHex(\n alchemyPaymaster.erc20.preOpSettings.permitDetails\n .deadline,\n ),\n value: toHex(\n alchemyPaymaster.erc20.preOpSettings.permitDetails.value,\n ),\n },\n }),\n },\n }),\n ...(\"postOpSettings\" in alchemyPaymaster.erc20 && {\n postOpSettings: {\n ...(alchemyPaymaster.erc20.postOpSettings.autoApprove && {\n autoApprove: {\n below: toHex(\n alchemyPaymaster.erc20.postOpSettings.autoApprove.below,\n ),\n amount:\n alchemyPaymaster.erc20.postOpSettings.autoApprove\n .amount != null\n ? toHex(\n alchemyPaymaster.erc20.postOpSettings.autoApprove\n .amount,\n )\n : undefined,\n },\n }),\n },\n }),\n },\n }),\n },\n }),\n };\n};\n"]}
1
+ {"version":3,"file":"viemDecode.js","sourceRoot":"","sources":["../../../src/utils/viemDecode.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isHex,\n numberToHex,\n toHex,\n type Capabilities,\n type Hex,\n type Signature,\n} from \"viem\";\nimport { type PrepareCallsResult } from \"@alchemy/wallet-apis\";\nimport { assertNever } from \"@alchemy/common\";\nimport type {\n EcdsaSig,\n PreparedCall_Authorization,\n PreparedCall_Permit,\n PreparedCall_UserOpV060,\n PreparedCall_UserOpV070,\n} from \"@alchemy/wallet-api-types\";\nimport type { PrepareCallsCapabilities as WalletApiCapabilities } from \"@alchemy/wallet-api-types/capabilities\";\nimport type {\n ViemEncodedAuthorizationCall,\n ViemEncodedPaymasterPermitCall,\n ViemEncodedPreparedCalls,\n ViemEncodedUserOperationCall,\n} from \"./viemEncode.js\";\n\nexport const viemDecodePreparedCalls = (\n encodedCalls: ViemEncodedPreparedCalls,\n): PrepareCallsResult => {\n if (encodedCalls.type === \"array\") {\n return {\n type: \"array\",\n data: encodedCalls.data.map((call) => {\n switch (call.type) {\n case \"user-operation-v060\":\n case \"user-operation-v070\":\n return viemDecodeUserOperationCall(call);\n case \"authorization\":\n return viemDecodeAuthorization(call);\n default:\n return assertNever(call, \"Unexpected encoded call type in array\");\n }\n }),\n };\n }\n\n switch (encodedCalls.type) {\n case \"user-operation-v060\":\n case \"user-operation-v070\":\n return viemDecodeUserOperationCall(encodedCalls);\n case \"paymaster-permit\":\n return viemDecodePaymasterPermitCall(encodedCalls);\n default:\n return assertNever(encodedCalls, \"Unexpected encoded call type\");\n }\n};\n\nexport const viemDecodePreparedCall = (\n call:\n | ViemEncodedUserOperationCall\n | ViemEncodedPaymasterPermitCall\n | ViemEncodedAuthorizationCall,\n):\n | PreparedCall_UserOpV060\n | PreparedCall_UserOpV070\n | PreparedCall_Permit\n | PreparedCall_Authorization => {\n switch (call.type) {\n case \"user-operation-v060\":\n case \"user-operation-v070\": {\n return viemDecodeUserOperationCall(call);\n }\n case \"paymaster-permit\": {\n return viemDecodePaymasterPermitCall(call);\n }\n case \"authorization\": {\n return viemDecodeAuthorization(call);\n }\n default: {\n return assertNever(call, \"Unexpected prepared call type\");\n }\n }\n};\n\nconst viemDecodeUserOperationCall = (\n call: ViemEncodedUserOperationCall,\n): PreparedCall_UserOpV060 | PreparedCall_UserOpV070 => {\n switch (call.type) {\n case \"user-operation-v060\": {\n return {\n type: call.type,\n chainId: numberToHex(call.chainId),\n data: {\n sender: call.data.sender,\n nonce: toHex(call.data.nonce),\n initCode: call.data.initCode!,\n callData: call.data.callData,\n callGasLimit: toHex(call.data.callGasLimit),\n verificationGasLimit: toHex(call.data.verificationGasLimit),\n preVerificationGas: toHex(call.data.preVerificationGas),\n maxFeePerGas: toHex(call.data.maxFeePerGas),\n maxPriorityFeePerGas: toHex(call.data.maxPriorityFeePerGas),\n paymasterAndData: \"0x\",\n },\n signatureRequest: call.signatureRequest,\n feePayment: {\n sponsored: call.feePayment.sponsored,\n tokenAddress: call.feePayment.tokenAddress,\n maxAmount: toHex(call.feePayment.maxAmount),\n },\n } satisfies PreparedCall_UserOpV060;\n }\n case \"user-operation-v070\": {\n return {\n type: call.type,\n chainId: numberToHex(call.chainId),\n data: {\n sender: call.data.sender,\n nonce: toHex(call.data.nonce),\n factory: call.data.factory,\n factoryData: call.data.factoryData,\n callData: call.data.callData,\n callGasLimit: toHex(call.data.callGasLimit),\n verificationGasLimit: toHex(call.data.verificationGasLimit),\n preVerificationGas: toHex(call.data.preVerificationGas),\n maxFeePerGas: toHex(call.data.maxFeePerGas),\n maxPriorityFeePerGas: toHex(call.data.maxPriorityFeePerGas),\n paymaster: call.data.paymaster,\n paymasterData: call.data.paymasterData,\n paymasterVerificationGasLimit:\n call.data.paymasterVerificationGasLimit != null\n ? toHex(call.data.paymasterVerificationGasLimit)\n : undefined,\n paymasterPostOpGasLimit:\n call.data.paymasterPostOpGasLimit != null\n ? toHex(call.data.paymasterPostOpGasLimit)\n : undefined,\n },\n signatureRequest: call.signatureRequest,\n feePayment: {\n sponsored: call.feePayment.sponsored,\n tokenAddress: call.feePayment.tokenAddress,\n maxAmount: toHex(call.feePayment.maxAmount),\n },\n } satisfies PreparedCall_UserOpV070;\n }\n default: {\n return assertNever(\n call.type,\n `Unexpected user operation type in 'viemDecodeUserOperationCall'`,\n );\n }\n }\n};\n\nconst viemDecodeAuthorization = (\n call: ViemEncodedAuthorizationCall,\n): PreparedCall_Authorization => {\n return {\n type: call.type,\n chainId: numberToHex(call.chainId),\n data: {\n address: call.data.address,\n nonce: numberToHex(call.data.nonce),\n },\n signatureRequest: call.signatureRequest,\n };\n};\n\nconst viemDecodePaymasterPermitCall = (\n call: ViemEncodedPaymasterPermitCall,\n): PreparedCall_Permit => {\n return {\n type: call.type,\n data: call.data,\n signatureRequest: call.signatureRequest,\n modifiedRequest: {\n from: call.modifiedRequest.from,\n paymasterPermitSignature: viemDecodeSignature(\n call.modifiedRequest.paymasterPermitSignature,\n ),\n calls: call.modifiedRequest.calls.map((it) => ({\n to: it.to,\n data: it.data,\n value: it.value != null ? toHex(it.value) : undefined,\n })),\n capabilities: viemDecodeCapabilities(call.modifiedRequest.capabilities),\n chainId: numberToHex(call.modifiedRequest.chainId),\n },\n };\n};\n\ntype DecodedSignature = EcdsaSig[\"signature\"];\n\nconst viemDecodeSignature = (\n signature:\n | {\n type: EcdsaSig[\"signature\"][\"type\"];\n data: Signature | Hex;\n }\n | undefined,\n): DecodedSignature | undefined => {\n if (!signature) {\n return undefined;\n }\n const { type, data } = signature;\n if (isHex(data)) {\n return { type, data };\n }\n if (\"yParity\" in data && data.yParity != null) {\n return { type, data: { ...data, yParity: toHex(data.yParity) } };\n }\n if (\"v\" in data) {\n return { type, data: { ...data, v: toHex(data.v) } };\n }\n return assertNever(data, \"Signature object must include 'v' or 'yParity'\");\n};\n\nexport const viemDecodeCapabilities = (\n capabilities: Capabilities | undefined,\n): WalletApiCapabilities => {\n const { alchemyPaymaster, ...rest } = capabilities ?? {};\n return {\n ...rest,\n ...(rest?.gasParamsOverride && {\n gasParamsOverride: Object.fromEntries(\n Object.entries(rest.gasParamsOverride).map(([key, value]) => [\n key,\n typeof value === \"bigint\" ? toHex(value) : value,\n ]),\n ),\n }),\n ...(rest?.nonceOverride && {\n nonceOverride: {\n nonceKey: toHex(rest.nonceOverride.nonceKey),\n },\n }),\n ...(alchemyPaymaster && {\n paymasterService: {\n ...(\"policyId\" in alchemyPaymaster && {\n policyId: alchemyPaymaster.policyId,\n }),\n ...(\"policyIds\" in alchemyPaymaster && {\n policyIds: alchemyPaymaster.policyIds,\n }),\n ...(alchemyPaymaster.onlyEstimation && {\n onlyEstimation: alchemyPaymaster.onlyEstimation,\n }),\n ...(alchemyPaymaster.erc20 && {\n erc20: {\n ...alchemyPaymaster.erc20,\n maxTokenAmount:\n alchemyPaymaster.erc20.maxTokenAmount != null\n ? toHex(alchemyPaymaster.erc20.maxTokenAmount)\n : undefined,\n ...(\"preOpSettings\" in alchemyPaymaster.erc20 && {\n preOpSettings: {\n ...alchemyPaymaster.erc20.preOpSettings,\n ...(\"autoPermit\" in alchemyPaymaster.erc20.preOpSettings && {\n autoPermit: {\n below: toHex(\n alchemyPaymaster.erc20.preOpSettings.autoPermit.below,\n ),\n amount: toHex(\n alchemyPaymaster.erc20.preOpSettings.autoPermit.amount,\n ),\n durationSeconds:\n alchemyPaymaster.erc20.preOpSettings.autoPermit\n .durationSeconds != null\n ? toHex(\n alchemyPaymaster.erc20.preOpSettings.autoPermit\n .durationSeconds,\n )\n : undefined,\n },\n }),\n ...(\"permitDetails\" in alchemyPaymaster.erc20.preOpSettings && {\n permitDetails: {\n deadline: toHex(\n alchemyPaymaster.erc20.preOpSettings.permitDetails\n .deadline,\n ),\n value: toHex(\n alchemyPaymaster.erc20.preOpSettings.permitDetails.value,\n ),\n },\n }),\n },\n }),\n ...(\"postOpSettings\" in alchemyPaymaster.erc20 && {\n postOpSettings: {\n ...(alchemyPaymaster.erc20.postOpSettings.autoApprove && {\n autoApprove: {\n below: toHex(\n alchemyPaymaster.erc20.postOpSettings.autoApprove.below,\n ),\n amount:\n alchemyPaymaster.erc20.postOpSettings.autoApprove\n .amount != null\n ? toHex(\n alchemyPaymaster.erc20.postOpSettings.autoApprove\n .amount,\n )\n : undefined,\n },\n }),\n },\n }),\n },\n }),\n },\n }),\n };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"viemEncode.js","sourceRoot":"","sources":["../../../src/utils/viemEncode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,WAAW,EACX,KAAK,GAON,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAkB9C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,aAAiC,EACP,EAAE;IAC5B,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACpC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;oBAClB,KAAK,qBAAqB,CAAC;oBAC3B,KAAK,qBAAqB;wBACxB,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC;oBAC3C,KAAK,eAAe;wBAClB,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;oBACvC;wBACE,OAAO,WAAW,CAAC,IAAI,EAAE,wCAAwC,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC,CAAC;SACH,CAAC;IACJ,CAAC;IAED,QAAQ,aAAa,CAAC,IAAI,EAAE,CAAC;QAC3B,KAAK,qBAAqB,CAAC;QAC3B,KAAK,qBAAqB;YACxB,OAAO,2BAA2B,CAAC,aAAa,CAAC,CAAC;QACpD,KAAK,kBAAkB;YACrB,OAAO,6BAA6B,CAAC,aAAa,CAAC,CAAC;QACtD;YACE,OAAO,WAAW,CAAC,aAAa,EAAE,+BAA+B,CAAC,CAAC;IACvE,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,IAI8B,EAIC,EAAE;IACjC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,qBAAqB,CAAC;QAC3B,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,OAAO,6BAA6B,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,OAAO,WAAW,CAAC,IAAI,EAAE,+BAA+B,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAeF,MAAM,2BAA2B,GAAG,CAClC,IAAuD,EACzB,EAAE;IAChC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,EACF,IAAI,CAAC,IAAI,KAAK,qBAAqB;YACjC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,qBAAqB;gBACnC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChC,CAAC,CAAC,WAAW,CACT,IAAI,EACJ,iEAAiE,CAClE;QACT,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,UAAU,EAAE;YACV,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS;YACpC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY;YAC1C,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;SAClD;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAC1B,EAAmC,EACM,EAAE;IAC3C,OAAO;QACL,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC;QAC5B,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC,YAAY,CAAC;QAC1C,oBAAoB,EAAE,WAAW,CAAC,EAAE,CAAC,oBAAoB,CAAC;QAC1D,kBAAkB,EAAE,WAAW,CAAC,EAAE,CAAC,kBAAkB,CAAC;QACtD,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC,YAAY,CAAC;QAC1C,oBAAoB,EAAE,WAAW,CAAC,EAAE,CAAC,oBAAoB,CAAC;KAC3D,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAC1B,EAAmC,EACM,EAAE;IAC3C,OAAO;QACL,MAAM,EAAE,EAAE,CAAC,MAAM;QACjB,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC;QAC5B,OAAO,EAAE,EAAE,CAAC,OAAO;QACnB,WAAW,EAAE,EAAE,CAAC,WAAW;QAC3B,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC,YAAY,CAAC;QAC1C,oBAAoB,EAAE,WAAW,CAAC,EAAE,CAAC,oBAAoB,CAAC;QAC1D,kBAAkB,EAAE,WAAW,CAAC,EAAE,CAAC,kBAAkB,CAAC;QACtD,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC,YAAY,CAAC;QAC1C,oBAAoB,EAAE,WAAW,CAAC,EAAE,CAAC,oBAAoB,CAAC;QAC1D,SAAS,EAAE,EAAE,CAAC,SAAS;QACvB,aAAa,EAAE,EAAE,CAAC,aAAa;QAC/B,6BAA6B,EAC3B,EAAE,CAAC,6BAA6B,IAAI,IAAI;YACtC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,6BAA6B,CAAC;YAC/C,CAAC,CAAC,SAAS;QACf,uBAAuB,EACrB,EAAE,CAAC,uBAAuB,IAAI,IAAI;YAChC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,uBAAuB,CAAC;YACzC,CAAC,CAAC,SAAS;KAChB,CAAC;AACJ,CAAC,CAAC;AAUF,MAAM,uBAAuB,GAAG,CAC9B,IAAgC,EACF,EAAE;IAChC,OAAO;QACL,GAAG,IAAI;QACP,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QAClC,IAAI,EAAE;YACJ,GAAG,IAAI,CAAC,IAAI;YACZ,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;SACpC;KACF,CAAC;AACJ,CAAC,CAAC;AAeF,MAAM,6BAA6B,GAAG,CACpC,IAAyB,EACO,EAAE;IAClC,OAAO;QACL,GAAG,IAAI;QACP,eAAe,EAAE;YACf,GAAG,IAAI,CAAC,eAAe;YACvB,wBAAwB,EAAE,mBAAmB,CAC3C,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAC9C;YACD,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC7C,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;aAC5D,CAAC,CAAC;YACH,YAAY,EAAE,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;YACvE,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;SACnD;KACF,CAAC;AACJ,CAAC,CAAC;AAOF,MAAM,mBAAmB,GAAG,CAC1B,SAA4C,EACV,EAAE;IACpC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;IACjC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IACD,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;IACpE,CAAC;IACD,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,EAAE,gDAAgD,CAAC,CAAC;AAC7E,CAAC,CAAC;AAIF,MAAM,sBAAsB,GAAG,CAC7B,YAA+C,EACtB,EAAE;IAC3B,MAAM,EAAE,gBAAgB,EAAE,GAAG,IAAI,EAAE,GAAG,YAAY,IAAI,EAAE,CAAC;IACzD,OAAO;QACL,GAAG,IAAI;QACP,GAAG,CAAC,IAAI,EAAE,iBAAiB,IAAI;YAC7B,iBAAiB,EAAE,MAAM,CAAC,WAAW,CACnC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC3D,GAAG;gBACH,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;aAC1C,CAAC,CACH;SACF,CAAC;QACF,GAAG,CAAC,IAAI,EAAE,aAAa,IAAI;YACzB,aAAa,EAAE;gBACb,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;aACnD;SACF,CAAC;QACF,GAAG,CAAC,gBAAgB,IAAI;YACtB,gBAAgB,EAAE;gBAChB,GAAG,CAAC,UAAU,IAAI,gBAAgB,IAAI;oBACpC,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;iBACpC,CAAC;gBACF,GAAG,CAAC,WAAW,IAAI,gBAAgB,IAAI;oBACrC,SAAS,EAAE,gBAAgB,CAAC,SAAS;iBACtC,CAAC;gBACF,GAAG,CAAC,gBAAgB,CAAC,cAAc,IAAI;oBACrC,cAAc,EAAE,gBAAgB,CAAC,cAAc;iBAChD,CAAC;gBACF,GAAG,CAAC,gBAAgB,CAAC,KAAK,IAAI;oBAC5B,KAAK,EAAE;wBACL,GAAG,gBAAgB,CAAC,KAAK;wBACzB,cAAc,EACZ,gBAAgB,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI;4BAC3C,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC;4BACpD,CAAC,CAAC,SAAS;wBACf,GAAG,CAAC,eAAe,IAAI,gBAAgB,CAAC,KAAK,IAAI;4BAC/C,aAAa,EAAE;gCACb,GAAG,gBAAgB,CAAC,KAAK,CAAC,aAAa;gCACvC,GAAG,CAAC,YAAY,IAAI,gBAAgB,CAAC,KAAK,CAAC,aAAa,IAAI;oCAC1D,UAAU,EAAE;wCACV,KAAK,EAAE,WAAW,CAChB,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CACtD;wCACD,MAAM,EAAE,WAAW,CACjB,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CACvD;wCACD,eAAe,EACb,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU;6CAC5C,eAAe,IAAI,IAAI;4CACxB,CAAC,CAAC,WAAW,CACT,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU;iDAC5C,eAAe,CACnB;4CACH,CAAC,CAAC,SAAS;qCAChB;iCACF,CAAC;gCACF,GAAG,CAAC,eAAe,IAAI,gBAAgB,CAAC,KAAK,CAAC,aAAa,IAAI;oCAC7D,aAAa,EAAE;wCACb,QAAQ,EAAE,WAAW,CACnB,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa;6CAC/C,QAAQ,CACZ;wCACD,KAAK,EAAE,WAAW,CAChB,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CACzD;qCACF;iCACF,CAAC;6BACH;yBACF,CAAC;wBACF,GAAG,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,KAAK,IAAI;4BAChD,cAAc,EAAE;gCACd,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,IAAI;oCACvD,WAAW,EAAE;wCACX,KAAK,EAAE,WAAW,CAChB,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CACxD;wCACD,MAAM,EACJ,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW;6CAC9C,MAAM,IAAI,IAAI;4CACf,CAAC,CAAC,WAAW,CACT,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW;iDAC9C,MAAM,CACV;4CACH,CAAC,CAAC,SAAS;qCAChB;iCACF,CAAC;6BACH;yBACF,CAAC;qBACH;iBACF,CAAC;aACH;SACF,CAAC;KACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {\n hexToBigInt,\n hexToNumber,\n isHex,\n type Address,\n type Authorization,\n type Capabilities,\n type Hex,\n type Signature,\n type UnionOmit,\n} from \"viem\";\nimport type { PrepareCallsResult } from \"@alchemy/wallet-apis\";\nimport { assertNever } from \"@alchemy/common\";\nimport type { UserOperation } from \"viem/account-abstraction\";\nimport type {\n EcdsaSig,\n PreparedCall_Authorization,\n PreparedCall_Permit,\n PreparedCall_UserOpV060,\n PreparedCall_UserOpV070,\n} from \"@alchemy/wallet-api-types\";\nimport type { Capabilities as WalletApiCapabilities } from \"@alchemy/wallet-api-types/capabilities\";\n\nexport type ViemEncodedPreparedCalls =\n | (ViemEncodedUserOperationCall | ViemEncodedPaymasterPermitCall)\n | {\n type: \"array\";\n data: (ViemEncodedUserOperationCall | ViemEncodedAuthorizationCall)[];\n };\n\nexport const viemEncodePreparedCalls = (\n preparedCalls: PrepareCallsResult,\n): ViemEncodedPreparedCalls => {\n if (preparedCalls.type === \"array\") {\n return {\n type: \"array\",\n data: preparedCalls.data.map((call) => {\n switch (call.type) {\n case \"user-operation-v060\":\n case \"user-operation-v070\":\n return viemEncodeUserOperationCall(call);\n case \"authorization\":\n return viemEncodeAuthorization(call);\n default:\n return assertNever(call, \"Unexpected prepared call type in array\");\n }\n }),\n };\n }\n\n switch (preparedCalls.type) {\n case \"user-operation-v060\":\n case \"user-operation-v070\":\n return viemEncodeUserOperationCall(preparedCalls);\n case \"paymaster-permit\":\n return viemEncodePaymasterPermitCall(preparedCalls);\n default:\n return assertNever(preparedCalls, \"Unexpected prepared call type\");\n }\n};\n\nexport const viemEncodePreparedCall = (\n call:\n | PreparedCall_UserOpV060\n | PreparedCall_UserOpV070\n | PreparedCall_Permit\n | PreparedCall_Authorization,\n):\n | ViemEncodedUserOperationCall\n | ViemEncodedPaymasterPermitCall\n | ViemEncodedAuthorizationCall => {\n switch (call.type) {\n case \"user-operation-v060\":\n case \"user-operation-v070\": {\n return viemEncodeUserOperationCall(call);\n }\n case \"paymaster-permit\": {\n return viemEncodePaymasterPermitCall(call);\n }\n case \"authorization\": {\n return viemEncodeAuthorization(call);\n }\n default: {\n return assertNever(call, \"Unexpected prepared call type\");\n }\n }\n};\n\nexport type ViemEncodedUserOperationCall = {\n type: \"user-operation-v070\" | \"user-operation-v060\";\n chainId: number;\n data: UnionOmit<UserOperation, \"signature\">;\n signatureRequest: Pick<\n PreparedCall_UserOpV070,\n \"signatureRequest\"\n >[\"signatureRequest\"];\n feePayment: Omit<PreparedCall_UserOpV070[\"feePayment\"], \"maxAmount\"> & {\n maxAmount: bigint;\n };\n};\n\nconst viemEncodeUserOperationCall = (\n call: PreparedCall_UserOpV060 | PreparedCall_UserOpV070,\n): ViemEncodedUserOperationCall => {\n return {\n type: call.type,\n chainId: hexToNumber(call.chainId),\n data:\n call.type === \"user-operation-v070\"\n ? viemEncodeUoData070(call.data)\n : call.type === \"user-operation-v060\"\n ? viemEncodeUoData060(call.data)\n : assertNever(\n call,\n `Unexpected user operation type in 'viemEncodeUserOperationCall'`,\n ),\n signatureRequest: call.signatureRequest,\n feePayment: {\n sponsored: call.feePayment.sponsored,\n tokenAddress: call.feePayment.tokenAddress,\n maxAmount: hexToBigInt(call.feePayment.maxAmount),\n },\n };\n};\n\nconst viemEncodeUoData060 = (\n uo: PreparedCall_UserOpV060[\"data\"],\n): Omit<UserOperation<\"0.6\">, \"signature\"> => {\n return {\n sender: uo.sender,\n nonce: hexToBigInt(uo.nonce),\n initCode: uo.initCode,\n callData: uo.callData,\n callGasLimit: hexToBigInt(uo.callGasLimit),\n verificationGasLimit: hexToBigInt(uo.verificationGasLimit),\n preVerificationGas: hexToBigInt(uo.preVerificationGas),\n maxFeePerGas: hexToBigInt(uo.maxFeePerGas),\n maxPriorityFeePerGas: hexToBigInt(uo.maxPriorityFeePerGas),\n };\n};\n\nconst viemEncodeUoData070 = (\n uo: PreparedCall_UserOpV070[\"data\"],\n): Omit<UserOperation<\"0.7\">, \"signature\"> => {\n return {\n sender: uo.sender,\n nonce: hexToBigInt(uo.nonce),\n factory: uo.factory,\n factoryData: uo.factoryData,\n callData: uo.callData,\n callGasLimit: hexToBigInt(uo.callGasLimit),\n verificationGasLimit: hexToBigInt(uo.verificationGasLimit),\n preVerificationGas: hexToBigInt(uo.preVerificationGas),\n maxFeePerGas: hexToBigInt(uo.maxFeePerGas),\n maxPriorityFeePerGas: hexToBigInt(uo.maxPriorityFeePerGas),\n paymaster: uo.paymaster,\n paymasterData: uo.paymasterData,\n paymasterVerificationGasLimit:\n uo.paymasterVerificationGasLimit != null\n ? hexToBigInt(uo.paymasterVerificationGasLimit)\n : undefined,\n paymasterPostOpGasLimit:\n uo.paymasterPostOpGasLimit != null\n ? hexToBigInt(uo.paymasterPostOpGasLimit)\n : undefined,\n };\n};\n\nexport type ViemEncodedAuthorizationCall = Pick<\n PreparedCall_Authorization,\n \"type\" | \"signatureRequest\"\n> &\n Pick<Authorization, \"chainId\"> & {\n data: Pick<Authorization, \"nonce\" | \"address\">;\n };\n\nconst viemEncodeAuthorization = (\n call: PreparedCall_Authorization,\n): ViemEncodedAuthorizationCall => {\n return {\n ...call,\n chainId: hexToNumber(call.chainId),\n data: {\n ...call.data,\n nonce: hexToNumber(call.data.nonce),\n },\n };\n};\n\nexport type ViemEncodedPaymasterPermitCall = Pick<\n PreparedCall_Permit,\n \"type\" | \"data\" | \"signatureRequest\"\n> & {\n modifiedRequest: {\n from: Address;\n paymasterPermitSignature: ViemEncodedSignature | undefined;\n calls: { to: Address; data?: Hex; value?: bigint }[];\n capabilities?: Capabilities;\n chainId: number;\n };\n};\n\nconst viemEncodePaymasterPermitCall = (\n call: PreparedCall_Permit,\n): ViemEncodedPaymasterPermitCall => {\n return {\n ...call,\n modifiedRequest: {\n ...call.modifiedRequest,\n paymasterPermitSignature: viemEncodeSignature(\n call.modifiedRequest.paymasterPermitSignature,\n ),\n calls: call.modifiedRequest.calls.map((it) => ({\n to: it.to,\n data: it.data,\n value: it.value != null ? hexToBigInt(it.value) : undefined,\n })),\n capabilities: viemEncodeCapabilities(call.modifiedRequest.capabilities),\n chainId: hexToNumber(call.modifiedRequest.chainId),\n },\n };\n};\n\ntype ViemEncodedSignature = {\n type: EcdsaSig[\"signature\"][\"type\"];\n data: Signature | Hex;\n};\n\nconst viemEncodeSignature = (\n signature: EcdsaSig[\"signature\"] | undefined,\n): ViemEncodedSignature | undefined => {\n if (!signature) {\n return undefined;\n }\n const { type, data } = signature;\n if (typeof data === \"string\") {\n return { type, data };\n }\n if (\"yParity\" in data) {\n return { type, data: { ...data, yParity: Number(data.yParity) } };\n }\n if (\"v\" in data) {\n return { type, data: { ...data, v: hexToBigInt(data.v) } };\n }\n return assertNever(data, \"Signature object must include 'v' or 'yParity'\");\n};\n\ntype ViemEncodedCapabilities = Capabilities;\n\nconst viemEncodeCapabilities = (\n capabilities: WalletApiCapabilities | undefined,\n): ViemEncodedCapabilities => {\n const { paymasterService, ...rest } = capabilities ?? {};\n return {\n ...rest,\n ...(rest?.gasParamsOverride && {\n gasParamsOverride: Object.fromEntries(\n Object.entries(rest.gasParamsOverride).map(([key, value]) => [\n key,\n isHex(value) ? hexToBigInt(value) : value,\n ]),\n ),\n }),\n ...(rest?.nonceOverride && {\n nonceOverride: {\n nonceKey: hexToBigInt(rest.nonceOverride.nonceKey),\n },\n }),\n ...(paymasterService && {\n alchemyPaymaster: {\n ...(\"policyId\" in paymasterService && {\n policyId: paymasterService.policyId,\n }),\n ...(\"policyIds\" in paymasterService && {\n policyIds: paymasterService.policyIds,\n }),\n ...(paymasterService.onlyEstimation && {\n onlyEstimation: paymasterService.onlyEstimation,\n }),\n ...(paymasterService.erc20 && {\n erc20: {\n ...paymasterService.erc20,\n maxTokenAmount:\n paymasterService.erc20.maxTokenAmount != null\n ? hexToBigInt(paymasterService.erc20.maxTokenAmount)\n : undefined,\n ...(\"preOpSettings\" in paymasterService.erc20 && {\n preOpSettings: {\n ...paymasterService.erc20.preOpSettings,\n ...(\"autoPermit\" in paymasterService.erc20.preOpSettings && {\n autoPermit: {\n below: hexToBigInt(\n paymasterService.erc20.preOpSettings.autoPermit.below,\n ),\n amount: hexToBigInt(\n paymasterService.erc20.preOpSettings.autoPermit.amount,\n ),\n durationSeconds:\n paymasterService.erc20.preOpSettings.autoPermit\n .durationSeconds != null\n ? hexToBigInt(\n paymasterService.erc20.preOpSettings.autoPermit\n .durationSeconds,\n )\n : undefined,\n },\n }),\n ...(\"permitDetails\" in paymasterService.erc20.preOpSettings && {\n permitDetails: {\n deadline: hexToBigInt(\n paymasterService.erc20.preOpSettings.permitDetails\n .deadline,\n ),\n value: hexToBigInt(\n paymasterService.erc20.preOpSettings.permitDetails.value,\n ),\n },\n }),\n },\n }),\n ...(\"postOpSettings\" in paymasterService.erc20 && {\n postOpSettings: {\n ...(paymasterService.erc20.postOpSettings.autoApprove && {\n autoApprove: {\n below: hexToBigInt(\n paymasterService.erc20.postOpSettings.autoApprove.below,\n ),\n amount:\n paymasterService.erc20.postOpSettings.autoApprove\n .amount != null\n ? hexToBigInt(\n paymasterService.erc20.postOpSettings.autoApprove\n .amount,\n )\n : undefined,\n },\n }),\n },\n }),\n },\n }),\n },\n }),\n };\n};\n"]}
1
+ {"version":3,"file":"viemEncode.js","sourceRoot":"","sources":["../../../src/utils/viemEncode.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n hexToBigInt,\n hexToNumber,\n isHex,\n type Address,\n type Authorization,\n type Capabilities,\n type Hex,\n type Signature,\n type UnionOmit,\n} from \"viem\";\nimport type { PrepareCallsResult } from \"@alchemy/wallet-apis\";\nimport { assertNever } from \"@alchemy/common\";\nimport type { UserOperation } from \"viem/account-abstraction\";\nimport type {\n EcdsaSig,\n PreparedCall_Authorization,\n PreparedCall_Permit,\n PreparedCall_UserOpV060,\n PreparedCall_UserOpV070,\n} from \"@alchemy/wallet-api-types\";\nimport type { PrepareCallsCapabilities as WalletApiCapabilities } from \"@alchemy/wallet-api-types/capabilities\";\n\nexport type ViemEncodedPreparedCalls =\n | (ViemEncodedUserOperationCall | ViemEncodedPaymasterPermitCall)\n | {\n type: \"array\";\n data: (ViemEncodedUserOperationCall | ViemEncodedAuthorizationCall)[];\n };\n\nexport const viemEncodePreparedCalls = (\n preparedCalls: PrepareCallsResult,\n): ViemEncodedPreparedCalls => {\n if (preparedCalls.type === \"array\") {\n return {\n type: \"array\",\n data: preparedCalls.data.map((call) => {\n switch (call.type) {\n case \"user-operation-v060\":\n case \"user-operation-v070\":\n return viemEncodeUserOperationCall(call);\n case \"authorization\":\n return viemEncodeAuthorization(call);\n default:\n return assertNever(call, \"Unexpected prepared call type in array\");\n }\n }),\n };\n }\n\n switch (preparedCalls.type) {\n case \"user-operation-v060\":\n case \"user-operation-v070\":\n return viemEncodeUserOperationCall(preparedCalls);\n case \"paymaster-permit\":\n return viemEncodePaymasterPermitCall(preparedCalls);\n default:\n return assertNever(preparedCalls, \"Unexpected prepared call type\");\n }\n};\n\nexport const viemEncodePreparedCall = (\n call:\n | PreparedCall_UserOpV060\n | PreparedCall_UserOpV070\n | PreparedCall_Permit\n | PreparedCall_Authorization,\n):\n | ViemEncodedUserOperationCall\n | ViemEncodedPaymasterPermitCall\n | ViemEncodedAuthorizationCall => {\n switch (call.type) {\n case \"user-operation-v060\":\n case \"user-operation-v070\": {\n return viemEncodeUserOperationCall(call);\n }\n case \"paymaster-permit\": {\n return viemEncodePaymasterPermitCall(call);\n }\n case \"authorization\": {\n return viemEncodeAuthorization(call);\n }\n default: {\n return assertNever(call, \"Unexpected prepared call type\");\n }\n }\n};\n\nexport type ViemEncodedUserOperationCall = {\n type: \"user-operation-v070\" | \"user-operation-v060\";\n chainId: number;\n data: UnionOmit<UserOperation, \"signature\">;\n signatureRequest: Pick<\n PreparedCall_UserOpV070,\n \"signatureRequest\"\n >[\"signatureRequest\"];\n feePayment: Omit<PreparedCall_UserOpV070[\"feePayment\"], \"maxAmount\"> & {\n maxAmount: bigint;\n };\n};\n\nconst viemEncodeUserOperationCall = (\n call: PreparedCall_UserOpV060 | PreparedCall_UserOpV070,\n): ViemEncodedUserOperationCall => {\n return {\n type: call.type,\n chainId: hexToNumber(call.chainId),\n data:\n call.type === \"user-operation-v070\"\n ? viemEncodeUoData070(call.data)\n : call.type === \"user-operation-v060\"\n ? viemEncodeUoData060(call.data)\n : assertNever(\n call,\n `Unexpected user operation type in 'viemEncodeUserOperationCall'`,\n ),\n signatureRequest: call.signatureRequest,\n feePayment: {\n sponsored: call.feePayment.sponsored,\n tokenAddress: call.feePayment.tokenAddress,\n maxAmount: hexToBigInt(call.feePayment.maxAmount),\n },\n };\n};\n\nconst viemEncodeUoData060 = (\n uo: PreparedCall_UserOpV060[\"data\"],\n): Omit<UserOperation<\"0.6\">, \"signature\"> => {\n return {\n sender: uo.sender,\n nonce: hexToBigInt(uo.nonce),\n initCode: uo.initCode,\n callData: uo.callData,\n callGasLimit: hexToBigInt(uo.callGasLimit),\n verificationGasLimit: hexToBigInt(uo.verificationGasLimit),\n preVerificationGas: hexToBigInt(uo.preVerificationGas),\n maxFeePerGas: hexToBigInt(uo.maxFeePerGas),\n maxPriorityFeePerGas: hexToBigInt(uo.maxPriorityFeePerGas),\n };\n};\n\nconst viemEncodeUoData070 = (\n uo: PreparedCall_UserOpV070[\"data\"],\n): Omit<UserOperation<\"0.7\">, \"signature\"> => {\n return {\n sender: uo.sender,\n nonce: hexToBigInt(uo.nonce),\n factory: uo.factory,\n factoryData: uo.factoryData,\n callData: uo.callData,\n callGasLimit: hexToBigInt(uo.callGasLimit),\n verificationGasLimit: hexToBigInt(uo.verificationGasLimit),\n preVerificationGas: hexToBigInt(uo.preVerificationGas),\n maxFeePerGas: hexToBigInt(uo.maxFeePerGas),\n maxPriorityFeePerGas: hexToBigInt(uo.maxPriorityFeePerGas),\n paymaster: uo.paymaster,\n paymasterData: uo.paymasterData,\n paymasterVerificationGasLimit:\n uo.paymasterVerificationGasLimit != null\n ? hexToBigInt(uo.paymasterVerificationGasLimit)\n : undefined,\n paymasterPostOpGasLimit:\n uo.paymasterPostOpGasLimit != null\n ? hexToBigInt(uo.paymasterPostOpGasLimit)\n : undefined,\n };\n};\n\nexport type ViemEncodedAuthorizationCall = Pick<\n PreparedCall_Authorization,\n \"type\" | \"signatureRequest\"\n> &\n Pick<Authorization, \"chainId\"> & {\n data: Pick<Authorization, \"nonce\" | \"address\">;\n };\n\nconst viemEncodeAuthorization = (\n call: PreparedCall_Authorization,\n): ViemEncodedAuthorizationCall => {\n return {\n ...call,\n chainId: hexToNumber(call.chainId),\n data: {\n ...call.data,\n nonce: hexToNumber(call.data.nonce),\n },\n };\n};\n\nexport type ViemEncodedPaymasterPermitCall = Pick<\n PreparedCall_Permit,\n \"type\" | \"data\" | \"signatureRequest\"\n> & {\n modifiedRequest: {\n from: Address;\n paymasterPermitSignature: ViemEncodedSignature | undefined;\n calls: { to: Address; data?: Hex; value?: bigint }[];\n capabilities?: Capabilities;\n chainId: number;\n };\n};\n\nconst viemEncodePaymasterPermitCall = (\n call: PreparedCall_Permit,\n): ViemEncodedPaymasterPermitCall => {\n return {\n ...call,\n modifiedRequest: {\n ...call.modifiedRequest,\n paymasterPermitSignature: viemEncodeSignature(\n call.modifiedRequest.paymasterPermitSignature,\n ),\n calls: call.modifiedRequest.calls.map((it) => ({\n to: it.to,\n data: it.data,\n value: it.value != null ? hexToBigInt(it.value) : undefined,\n })),\n capabilities: viemEncodeCapabilities(call.modifiedRequest.capabilities),\n chainId: hexToNumber(call.modifiedRequest.chainId),\n },\n };\n};\n\ntype ViemEncodedSignature = {\n type: EcdsaSig[\"signature\"][\"type\"];\n data: Signature | Hex;\n};\n\nconst viemEncodeSignature = (\n signature: EcdsaSig[\"signature\"] | undefined,\n): ViemEncodedSignature | undefined => {\n if (!signature) {\n return undefined;\n }\n const { type, data } = signature;\n if (typeof data === \"string\") {\n return { type, data };\n }\n if (\"yParity\" in data) {\n return { type, data: { ...data, yParity: Number(data.yParity) } };\n }\n if (\"v\" in data) {\n return { type, data: { ...data, v: hexToBigInt(data.v) } };\n }\n return assertNever(data, \"Signature object must include 'v' or 'yParity'\");\n};\n\ntype ViemEncodedCapabilities = Capabilities;\n\nconst viemEncodeCapabilities = (\n capabilities: WalletApiCapabilities | undefined,\n): ViemEncodedCapabilities => {\n const { paymasterService, ...rest } = capabilities ?? {};\n return {\n ...rest,\n ...(rest?.gasParamsOverride && {\n gasParamsOverride: Object.fromEntries(\n Object.entries(rest.gasParamsOverride).map(([key, value]) => [\n key,\n isHex(value) ? hexToBigInt(value) : value,\n ]),\n ),\n }),\n ...(rest?.nonceOverride && {\n nonceOverride: {\n nonceKey: hexToBigInt(rest.nonceOverride.nonceKey),\n },\n }),\n ...(paymasterService && {\n alchemyPaymaster: {\n ...(\"policyId\" in paymasterService && {\n policyId: paymasterService.policyId,\n }),\n ...(\"policyIds\" in paymasterService && {\n policyIds: paymasterService.policyIds,\n }),\n ...(paymasterService.onlyEstimation && {\n onlyEstimation: paymasterService.onlyEstimation,\n }),\n ...(paymasterService.erc20 && {\n erc20: {\n ...paymasterService.erc20,\n maxTokenAmount:\n paymasterService.erc20.maxTokenAmount != null\n ? hexToBigInt(paymasterService.erc20.maxTokenAmount)\n : undefined,\n ...(\"preOpSettings\" in paymasterService.erc20 && {\n preOpSettings: {\n ...paymasterService.erc20.preOpSettings,\n ...(\"autoPermit\" in paymasterService.erc20.preOpSettings && {\n autoPermit: {\n below: hexToBigInt(\n paymasterService.erc20.preOpSettings.autoPermit.below,\n ),\n amount: hexToBigInt(\n paymasterService.erc20.preOpSettings.autoPermit.amount,\n ),\n durationSeconds:\n paymasterService.erc20.preOpSettings.autoPermit\n .durationSeconds != null\n ? hexToBigInt(\n paymasterService.erc20.preOpSettings.autoPermit\n .durationSeconds,\n )\n : undefined,\n },\n }),\n ...(\"permitDetails\" in paymasterService.erc20.preOpSettings && {\n permitDetails: {\n deadline: hexToBigInt(\n paymasterService.erc20.preOpSettings.permitDetails\n .deadline,\n ),\n value: hexToBigInt(\n paymasterService.erc20.preOpSettings.permitDetails.value,\n ),\n },\n }),\n },\n }),\n ...(\"postOpSettings\" in paymasterService.erc20 && {\n postOpSettings: {\n ...(paymasterService.erc20.postOpSettings.autoApprove && {\n autoApprove: {\n below: hexToBigInt(\n paymasterService.erc20.postOpSettings.autoApprove.below,\n ),\n amount:\n paymasterService.erc20.postOpSettings.autoApprove\n .amount != null\n ? hexToBigInt(\n paymasterService.erc20.postOpSettings.autoApprove\n .amount,\n )\n : undefined,\n },\n }),\n },\n }),\n },\n }),\n },\n }),\n };\n};\n"]}
@@ -1 +1 @@
1
- export declare const VERSION = "0.0.0-alpha.14";
1
+ export declare const VERSION = "0.0.0-alpha.15";
@@ -1,4 +1,4 @@
1
1
  // This file is autogenerated by inject-version.ts. Any changes will be
2
2
  // overwritten on commit!
3
- export const VERSION = "0.0.0-alpha.14";
3
+ export const VERSION = "0.0.0-alpha.15";
4
4
  //# sourceMappingURL=version.js.map
@@ -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,gBAAgB,CAAC","sourcesContent":["// This file is autogenerated by inject-version.ts. Any changes will be\n// overwritten on commit!\nexport const VERSION = \"0.0.0-alpha.14\";\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yBAAyB;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,gBAAgB,CAAC","sourcesContent":["// This file is autogenerated by inject-version.ts. Any changes will be\n// overwritten on commit!\nexport const VERSION = \"0.0.0-alpha.15\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sendCalls.d.ts","sourceRoot":"","sources":["../../../src/actions/sendCalls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAC;AAMhC,MAAM,MAAM,eAAe,CACzB,QAAQ,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,IACxD,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,EAE1D,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAChC,OAAO,CAAC,eAAe,CAAC,CA2C1B"}
1
+ {"version":3,"file":"sendCalls.d.ts","sourceRoot":"","sources":["../../../src/actions/sendCalls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAgB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAC;AAOhC,MAAM,MAAM,eAAe,CACzB,QAAQ,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,IACxD,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE3C,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,EAE1D,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,GAChC,OAAO,CAAC,eAAe,CAAC,CA8C1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"sendPreparedCalls.d.ts","sourceRoot":"","sources":["../../../src/actions/sendPreparedCalls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,QAAQ,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGzE,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,QAAQ,CAC5C,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CACnD,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAelC"}
1
+ {"version":3,"file":"sendPreparedCalls.d.ts","sourceRoot":"","sources":["../../../src/actions/sendPreparedCalls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,QAAQ,EAAE,MAAM,MAAM,CAAC;AAC5C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIzE,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,QAAQ,CAC5C,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CACnD,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAiBlC"}
@@ -1,11 +1,20 @@
1
- import type { Capabilities } from "@alchemy/wallet-api-types/capabilities";
1
+ import type { PrepareCallsCapabilities, SendPreparedCallsCapabilities } from "@alchemy/wallet-api-types/capabilities";
2
2
  import type { InnerWalletApiClient } 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 {InnerWalletApiClient} client - The inner wallet API client (potentially including global capabilities like policy IDs)
7
- * @param {Capabilities | undefined} capabilities - Request capabilities to merge with, if any
8
- * @returns {Capabilities | undefined} The merged capabilities object, or original capabilities if no capability configuration exists on the client
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: InnerWalletApiClient, capabilities: Capabilities | undefined) => Capabilities | undefined;
11
+ export declare const mergeClientCapabilities: <T extends PrepareCallsCapabilities | SendPreparedCallsCapabilities>(client: InnerWalletApiClient, 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/utils/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,oBAAoB,EAC5B,cAAc,YAAY,GAAG,SAAS,KACrC,YAAY,GAAG,SAUjB,CAAC"}
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/utils/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,6BAA6B,EAC9B,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAClC,CAAC,SAAS,wBAAwB,GAAG,6BAA6B,EAElE,QAAQ,oBAAoB,EAC5B,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"}
@@ -1,7 +1,7 @@
1
1
  import { type Capabilities } from "viem";
2
2
  import { type PrepareCallsResult } from "@alchemy/wallet-apis";
3
3
  import type { PreparedCall_Authorization, PreparedCall_Permit, PreparedCall_UserOpV060, PreparedCall_UserOpV070 } from "@alchemy/wallet-api-types";
4
- import type { Capabilities as WalletApiCapabilities } from "@alchemy/wallet-api-types/capabilities";
4
+ import type { PrepareCallsCapabilities as WalletApiCapabilities } from "@alchemy/wallet-api-types/capabilities";
5
5
  import type { ViemEncodedAuthorizationCall, ViemEncodedPaymasterPermitCall, ViemEncodedPreparedCalls, ViemEncodedUserOperationCall } from "./viemEncode.js";
6
6
  export declare const viemDecodePreparedCalls: (encodedCalls: ViemEncodedPreparedCalls) => PrepareCallsResult;
7
7
  export declare const viemDecodePreparedCall: (call: ViemEncodedUserOperationCall | ViemEncodedPaymasterPermitCall | ViemEncodedAuthorizationCall) => PreparedCall_UserOpV060 | PreparedCall_UserOpV070 | PreparedCall_Permit | PreparedCall_Authorization;
@@ -1 +1 @@
1
- {"version":3,"file":"viemDecode.d.ts","sourceRoot":"","sources":["../../../src/utils/viemDecode.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EAGlB,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,EAEV,0BAA0B,EAC1B,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,IAAI,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AACpG,OAAO,KAAK,EACV,4BAA4B,EAC5B,8BAA8B,EAC9B,wBAAwB,EACxB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,uBAAuB,GAClC,cAAc,wBAAwB,KACrC,kBA2BF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,MACI,4BAA4B,GAC5B,8BAA8B,GAC9B,4BAA4B,KAE9B,uBAAuB,GACvB,uBAAuB,GACvB,mBAAmB,GACnB,0BAgBH,CAAC;AAwIF,eAAO,MAAM,sBAAsB,GACjC,cAAc,YAAY,GAAG,SAAS,KACrC,qBA6FF,CAAC"}
1
+ {"version":3,"file":"viemDecode.d.ts","sourceRoot":"","sources":["../../../src/utils/viemDecode.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EAGlB,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,EAEV,0BAA0B,EAC1B,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,wBAAwB,IAAI,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAChH,OAAO,KAAK,EACV,4BAA4B,EAC5B,8BAA8B,EAC9B,wBAAwB,EACxB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AAEzB,eAAO,MAAM,uBAAuB,GAClC,cAAc,wBAAwB,KACrC,kBA2BF,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,MACI,4BAA4B,GAC5B,8BAA8B,GAC9B,4BAA4B,KAE9B,uBAAuB,GACvB,uBAAuB,GACvB,mBAAmB,GACnB,0BAgBH,CAAC;AAwIF,eAAO,MAAM,sBAAsB,GACjC,cAAc,YAAY,GAAG,SAAS,KACrC,qBA6FF,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.0.0-alpha.14";
1
+ export declare const VERSION = "0.0.0-alpha.15";
2
2
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alchemy/wallet-apis",
3
- "version": "0.0.0-alpha.15",
3
+ "version": "0.0.0-alpha.16",
4
4
  "description": "Alchemy Wallet APIs",
5
5
  "author": "Alchemy",
6
6
  "license": "MIT",
@@ -54,11 +54,11 @@
54
54
  "typescript-template": "*"
55
55
  },
56
56
  "dependencies": {
57
- "@alchemy/common": "^0.0.0-alpha.15",
58
- "@alchemy/wallet-api-types": "^0.1.0-alpha.19",
57
+ "@alchemy/common": "^0.0.0-alpha.16",
58
+ "@alchemy/wallet-api-types": "^0.1.0-alpha.22",
59
59
  "deep-equal": "^2.2.3",
60
- "ox": "^0.6.12",
61
- "viem": "^2.32.0",
60
+ "ox": "^0.11.1",
61
+ "viem": "^2.44.2",
62
62
  "webauthn-p256": "^0.0.10"
63
63
  },
64
64
  "publishConfig": {
@@ -73,5 +73,5 @@
73
73
  "url": "https://github.com/alchemyplatform/aa-sdk/issues"
74
74
  },
75
75
  "homepage": "https://github.com/alchemyplatform/aa-sdk#readme",
76
- "gitHead": "fec14e3da5a8ecc65394749d00759a0474d27083"
76
+ "gitHead": "299dbbeffbba1ee90b8cc4f5f0931cad3645add0"
77
77
  }
@@ -9,6 +9,7 @@ import {
9
9
  import { LOGGER } from "../logger.js";
10
10
  import { signSignatureRequest } from "./signSignatureRequest.js";
11
11
  import { isWebAuthnAccount } from "../utils/assertions.js";
12
+ import { extractCapabilitiesForSending } from "../utils/capabilities.js";
12
13
  import { BaseError } from "@alchemy/common";
13
14
 
14
15
  export type SendCallsParams<
@@ -87,11 +88,14 @@ export async function sendCalls<
87
88
 
88
89
  const signedCalls = await signPreparedCalls(client, calls);
89
90
 
91
+ const sendPreparedCallsCapabilities = extractCapabilitiesForSending(
92
+ params.capabilities,
93
+ );
94
+
90
95
  const res = await sendPreparedCalls(client, {
91
96
  ...signedCalls,
92
- // The only capability that is supported in sendPreparedCalls is permissions.
93
- ...(params.capabilities?.permissions != null
94
- ? { capabilities: { permissions: params.capabilities.permissions } }
97
+ ...(sendPreparedCallsCapabilities != null
98
+ ? { capabilities: sendPreparedCallsCapabilities }
95
99
  : {}),
96
100
  });
97
101
  LOGGER.info("sendCalls:done");
@@ -2,6 +2,7 @@ import { toHex, type Prettify } from "viem";
2
2
  import type { WalletServerRpcSchemaType } from "@alchemy/wallet-api-types/rpc";
3
3
  import type { InnerWalletApiClient, OptionalChainId } from "../types.ts";
4
4
  import { LOGGER } from "../logger.js";
5
+ import { mergeClientCapabilities } from "../utils/capabilities.js";
5
6
 
6
7
  type RpcSchema = Extract<
7
8
  WalletServerRpcSchemaType,
@@ -53,6 +54,8 @@ export async function sendPreparedCalls(
53
54
  client: InnerWalletApiClient,
54
55
  params: SendPreparedCallsParams,
55
56
  ): Promise<SendPreparedCallsResult> {
57
+ params.capabilities = mergeClientCapabilities(client, params.capabilities);
58
+
56
59
  LOGGER.debug("sendPreparedCalls:start", { type: params.type });
57
60
  const res = await client.request({
58
61
  method: "wallet_sendPreparedCalls",
@@ -1,24 +1,65 @@
1
- import type { Capabilities } from "@alchemy/wallet-api-types/capabilities";
1
+ import type {
2
+ PrepareCallsCapabilities,
3
+ SendPreparedCallsCapabilities,
4
+ } from "@alchemy/wallet-api-types/capabilities";
2
5
  import type { InnerWalletApiClient } from "../types.js";
3
6
 
4
7
  /**
5
8
  * Merges client capabilities with capabilities from the request.
9
+ * Uses policyId (singular) when there's one policy, policyIds (array) when multiple.
6
10
  *
7
11
  * @param {InnerWalletApiClient} client - The inner wallet API client (potentially including global capabilities like policy IDs)
8
- * @param {Capabilities | undefined} capabilities - Request capabilities to merge with, if any
9
- * @returns {Capabilities | undefined} The merged capabilities object, or original capabilities if no capability configuration exists on the client
12
+ * @param {T | undefined} capabilities - Request capabilities to merge with, if any
13
+ * @returns {T | undefined} The merged capabilities object, or original capabilities if no capability configuration exists on the client
10
14
  */
11
- export const mergeClientCapabilities = (
15
+ export const mergeClientCapabilities = <
16
+ T extends PrepareCallsCapabilities | SendPreparedCallsCapabilities,
17
+ >(
12
18
  client: InnerWalletApiClient,
13
- capabilities: Capabilities | undefined,
14
- ): Capabilities | undefined => {
15
- return client.policyIds?.length && !capabilities?.paymasterService
16
- ? {
17
- ...capabilities,
18
- paymasterService: {
19
- ...capabilities?.paymasterService,
20
- policyIds: client.policyIds,
21
- },
22
- }
23
- : capabilities;
19
+ capabilities: T | undefined,
20
+ ): T | undefined => {
21
+ if (!client.policyIds?.length || capabilities?.paymasterService) {
22
+ return capabilities;
23
+ }
24
+
25
+ return {
26
+ ...capabilities,
27
+ paymasterService:
28
+ client.policyIds.length === 1
29
+ ? { policyId: client.policyIds[0] }
30
+ : { policyIds: client.policyIds },
31
+ } as T;
32
+ };
33
+
34
+ /**
35
+ * Extracts capabilities from prepareCalls that are usable for sendPreparedCalls.
36
+ * Only permissions and paymasterService (policyId/policyIds & webhookData) are supported.
37
+ *
38
+ * @param {PrepareCallsCapabilities | undefined} capabilities - The prepareCalls capabilities
39
+ * @returns {SendPreparedCallsCapabilities | undefined} The sendPreparedCalls capabilities, or undefined if no relevant capabilities exist
40
+ */
41
+ export const extractCapabilitiesForSending = (
42
+ capabilities: PrepareCallsCapabilities | undefined,
43
+ ): SendPreparedCallsCapabilities | undefined => {
44
+ if (
45
+ capabilities?.permissions == null &&
46
+ capabilities?.paymasterService == null
47
+ ) {
48
+ return undefined;
49
+ }
50
+
51
+ const paymasterService = capabilities.paymasterService;
52
+
53
+ return {
54
+ permissions: capabilities.permissions,
55
+ paymasterService:
56
+ paymasterService != null
57
+ ? {
58
+ ...("policyId" in paymasterService
59
+ ? { policyId: paymasterService.policyId }
60
+ : { policyIds: paymasterService.policyIds }),
61
+ webhookData: paymasterService.webhookData,
62
+ }
63
+ : undefined,
64
+ };
24
65
  };
@@ -15,7 +15,7 @@ import type {
15
15
  PreparedCall_UserOpV060,
16
16
  PreparedCall_UserOpV070,
17
17
  } from "@alchemy/wallet-api-types";
18
- import type { Capabilities as WalletApiCapabilities } from "@alchemy/wallet-api-types/capabilities";
18
+ import type { PrepareCallsCapabilities as WalletApiCapabilities } from "@alchemy/wallet-api-types/capabilities";
19
19
  import type {
20
20
  ViemEncodedAuthorizationCall,
21
21
  ViemEncodedPaymasterPermitCall,
@@ -19,7 +19,7 @@ import type {
19
19
  PreparedCall_UserOpV060,
20
20
  PreparedCall_UserOpV070,
21
21
  } from "@alchemy/wallet-api-types";
22
- import type { Capabilities as WalletApiCapabilities } from "@alchemy/wallet-api-types/capabilities";
22
+ import type { PrepareCallsCapabilities as WalletApiCapabilities } from "@alchemy/wallet-api-types/capabilities";
23
23
 
24
24
  export type ViemEncodedPreparedCalls =
25
25
  | (ViemEncodedUserOperationCall | ViemEncodedPaymasterPermitCall)
package/src/version.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  // This file is autogenerated by inject-version.ts. Any changes will be
2
2
  // overwritten on commit!
3
- export const VERSION = "0.0.0-alpha.15";
3
+ export const VERSION = "0.0.0-alpha.16";