# WalletClientSigner | @aa-sdk/core

> Represents a wallet client signer for smart accounts, providing methods to get the address, sign messages, sign typed data, and sign 7702 authorizations.

> For the complete documentation index, see [llms.txt](/docs/llms.txt).

{/* This file is auto-generated by TypeDoc. Do not edit manually. */}

Defined in: [aa-sdk/core/src/signer/wallet-client.ts:18](https://github.com/alchemyplatform/aa-sdk/blob/main/aa-sdk/core/src/signer/wallet-client.ts#L18)

Represents a wallet client signer for smart accounts, providing methods to get the address, sign messages, sign typed data, and sign 7702 authorizations.

## Implements

- `unknown`\<[`WalletClient`](https://viem.sh)>

## Constructors

### Constructor

```ts
new WalletClientSigner(client, signerType): WalletClientSigner;
```

Defined in: [aa-sdk/core/src/signer/wallet-client.ts:43](https://github.com/alchemyplatform/aa-sdk/blob/main/aa-sdk/core/src/signer/wallet-client.ts#L43)

Initializes a signer with a given wallet client and signer type.

#### Example

```ts
import { WalletClientSigner } from "@aa-sdk/core";
import { createWalletClient, custom } from "viem";
import { mainnet } from "viem/chains";

const client = createWalletClient({
  chain: mainnet,
  transport: custom(window.ethereum!),
});

const signer = new WalletClientSigner(client, "wallet");
```

#### Parameters

<table>
  <thead>
    <tr>
      <th align="left">Parameter</th>
      <th align="left">Type</th>
      <th align="left">Description</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `client`
      </td>

      <td>
        `Object`
      </td>

      <td>
        The wallet client to interact with
      </td>
    </tr>

    <tr>
      <td>
        `signerType`
      </td>

      <td>
        `string`
      </td>

      <td>
        The type of signer; must be a valid signer type, otherwise an error will be thrown
      </td>
    </tr>

  </tbody>
</table>

#### Returns

`WalletClientSigner`

#### Throws

If the signer type is invalid

## Properties

<table>
  <thead>
    <tr>
      <th align="left">Property</th>
      <th align="left">Type</th>
      <th align="left">Description</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        <a id="getaddress" /> `getAddress`
      </td>

      <td>
        () => `Promise`\<`` `0x${string}` ``>
      </td>

      <td>
        Asynchronously retrieves addresses from the inner object and returns the first address after applying the `getAddress` function.

        **Example**

        ```ts
        import { WalletClientSigner } from "@aa-sdk/core";
        import { createWalletClient, custom } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
          chain: mainnet,
          transport: custom(window.ethereum!)
        });

        const signer = new WalletClientSigner(client, 'wallet');
        console.log(await signer.getAddress());
        ```
      </td>
    </tr>

    <tr>
      <td>
        <a id="inner" /> `inner`
      </td>

      <td>
        `Object`
      </td>

      <td>
        ‐
      </td>
    </tr>

    <tr>
      <td>
        <a id="signertype" /> `signerType`
      </td>

      <td>
        `string`
      </td>

      <td>
        ‐
      </td>
    </tr>

    <tr>
      <td>
        <a id="signmessage" /> `signMessage`
      </td>

      <td>
        (`message`) => `Promise`\<`` `0x${string}` ``>
      </td>

      <td>
        Signs a message using the account's signing method.

        **Example**

        ```ts
        import { WalletClientSigner } from "@aa-sdk/core";
        import { createWalletClient, custom } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
          chain: mainnet,
          transport: custom(window.ethereum!)
        });

        const signer = new WalletClientSigner(client, 'wallet');
        console.log(await signer.signMessage("hello"));
        ```
      </td>
    </tr>

  </tbody>
</table>

## Methods

### signAuthorization()

```ts
signAuthorization(unsignedAuthorization): Promise<SignedAuthorization<number>>;
```

Defined in: [aa-sdk/core/src/signer/wallet-client.ts:173](https://github.com/alchemyplatform/aa-sdk/blob/main/aa-sdk/core/src/signer/wallet-client.ts#L173)

Signs an EIP-7702 Authorization

#### Example

```ts twoslash
import { WalletClientSigner } from "@aa-sdk/core";
import { createWalletClient, custom } from "viem";
import { mainnet } from "viem/chains";

const client = createWalletClient({
  chain: mainnet,
  transport: custom(window.ethereum!),
});

const signer = new WalletClientSigner(client, "wallet");

const authorization = await signer.signAuthorization({
  contractAddress: "0x1234123412341234123412341234123412341234",
  chainId: 1,
  nonce: 0,
});
```

#### Parameters

<table>
  <thead>
    <tr>
      <th align="left">Parameter</th>
      <th align="left">Type</th>
      <th align="left">Description</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `unsignedAuthorization`
      </td>

      <td>
        `AuthorizationRequest`\<`number`>
      </td>

      <td>
        the authorization to be signed
      </td>
    </tr>

  </tbody>
</table>

#### Returns

`Promise`\<[`SignedAuthorization`](https://viem.sh)\<`number`>>

a promise that resolves to the signed authorization

---

### signTypedData()

```ts
signTypedData<TTypedData, TPrimaryType>(typedData): Promise<`0x${string}`>;
```

Defined in: [aa-sdk/core/src/signer/wallet-client.ts:131](https://github.com/alchemyplatform/aa-sdk/blob/main/aa-sdk/core/src/signer/wallet-client.ts#L131)

Signs the provided typed data using the account's private key.

#### Example

```ts
import { WalletClientSigner } from "@aa-sdk/core";
import { createWalletClient, custom } from "viem";
import { mainnet } from "viem/chains";

const client = createWalletClient({
  chain: mainnet,
  transport: custom(window.ethereum!),
});

const signer = new WalletClientSigner(client, "wallet");
console.log(
  await signer.signTypedData({
    types: {
      Message: [{ name: "content", type: "string" }],
    },
    primaryType: "Message",
    message: { content: "Hello" },
  }),
);
```

#### Type Parameters

<table>
  <thead>
    <tr>
      <th align="left">Type Parameter</th>
      <th align="left">Default type</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `TTypedData` *extends*
        | \{
        \[`key`: `string`]: readonly [`TypedDataParameter`](https://abitype.dev)\[];
        \[`key`: `` `string[${string}]` ``]: `undefined`;
        \[`key`: `` `function[${string}]` ``]: `undefined`;
        \[`key`: `` `address[${string}]` ``]: `undefined`;
        \[`key`: `` `bool[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes1[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes2[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes3[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes4[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes5[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes6[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes7[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes8[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes9[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes10[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes11[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes12[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes13[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes14[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes15[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes16[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes17[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes18[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes19[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes20[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes21[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes22[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes23[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes24[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes25[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes26[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes27[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes28[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes29[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes30[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes31[${string}]` ``]: `undefined`;
        \[`key`: `` `bytes32[${string}]` ``]: `undefined`;
        \[`key`: `` `int[${string}]` ``]: `undefined`;
        \[`key`: `` `int8[${string}]` ``]: `undefined`;
        \[`key`: `` `int16[${string}]` ``]: `undefined`;
        \[`key`: `` `int24[${string}]` ``]: `undefined`;
        \[`key`: `` `int32[${string}]` ``]: `undefined`;
        \[`key`: `` `int40[${string}]` ``]: `undefined`;
        \[`key`: `` `int48[${string}]` ``]: `undefined`;
        \[`key`: `` `int56[${string}]` ``]: `undefined`;
        \[`key`: `` `int64[${string}]` ``]: `undefined`;
        \[`key`: `` `int72[${string}]` ``]: `undefined`;
        \[`key`: `` `int80[${string}]` ``]: `undefined`;
        \[`key`: `` `int88[${string}]` ``]: `undefined`;
        \[`key`: `` `int96[${string}]` ``]: `undefined`;
        \[`key`: `` `int104[${string}]` ``]: `undefined`;
        \[`key`: `` `int112[${string}]` ``]: `undefined`;
        \[`key`: `` `int120[${string}]` ``]: `undefined`;
        \[`key`: `` `int128[${string}]` ``]: `undefined`;
        \[`key`: `` `int136[${string}]` ``]: `undefined`;
        \[`key`: `` `int144[${string}]` ``]: `undefined`;
        \[`key`: `` `int152[${string}]` ``]: `undefined`;
        \[`key`: `` `int160[${string}]` ``]: `undefined`;
        \[`key`: `` `int168[${string}]` ``]: `undefined`;
        \[`key`: `` `int176[${string}]` ``]: `undefined`;
        \[`key`: `` `int184[${string}]` ``]: `undefined`;
        \[`key`: `` `int192[${string}]` ``]: `undefined`;
        \[`key`: `` `int200[${string}]` ``]: `undefined`;
        \[`key`: `` `int208[${string}]` ``]: `undefined`;
        \[`key`: `` `int216[${string}]` ``]: `undefined`;
        \[`key`: `` `int224[${string}]` ``]: `undefined`;
        \[`key`: `` `int232[${string}]` ``]: `undefined`;
        \[`key`: `` `int240[${string}]` ``]: `undefined`;
        \[`key`: `` `int248[${string}]` ``]: `undefined`;
        \[`key`: `` `int256[${string}]` ``]: `undefined`;
        \[`key`: `` `uint[${string}]` ``]: `undefined`;
        \[`key`: `` `uint8[${string}]` ``]: `undefined`;
        \[`key`: `` `uint16[${string}]` ``]: `undefined`;
        \[`key`: `` `uint24[${string}]` ``]: `undefined`;
        \[`key`: `` `uint32[${string}]` ``]: `undefined`;
        \[`key`: `` `uint40[${string}]` ``]: `undefined`;
        \[`key`: `` `uint48[${string}]` ``]: `undefined`;
        \[`key`: `` `uint56[${string}]` ``]: `undefined`;
        \[`key`: `` `uint64[${string}]` ``]: `undefined`;
        \[`key`: `` `uint72[${string}]` ``]: `undefined`;
        \[`key`: `` `uint80[${string}]` ``]: `undefined`;
        \[`key`: `` `uint88[${string}]` ``]: `undefined`;
        \[`key`: `` `uint96[${string}]` ``]: `undefined`;
        \[`key`: `` `uint104[${string}]` ``]: `undefined`;
        \[`key`: `` `uint112[${string}]` ``]: `undefined`;
        \[`key`: `` `uint120[${string}]` ``]: `undefined`;
        \[`key`: `` `uint128[${string}]` ``]: `undefined`;
        \[`key`: `` `uint136[${string}]` ``]: `undefined`;
        \[`key`: `` `uint144[${string}]` ``]: `undefined`;
        \[`key`: `` `uint152[${string}]` ``]: `undefined`;
        \[`key`: `` `uint160[${string}]` ``]: `undefined`;
        \[`key`: `` `uint168[${string}]` ``]: `undefined`;
        \[`key`: `` `uint176[${string}]` ``]: `undefined`;
        \[`key`: `` `uint184[${string}]` ``]: `undefined`;
        \[`key`: `` `uint192[${string}]` ``]: `undefined`;
        \[`key`: `` `uint200[${string}]` ``]: `undefined`;
        \[`key`: `` `uint208[${string}]` ``]: `undefined`;
        \[`key`: `` `uint216[${string}]` ``]: `undefined`;
        \[`key`: `` `uint224[${string}]` ``]: `undefined`;
        \[`key`: `` `uint232[${string}]` ``]: `undefined`;
        \[`key`: `` `uint240[${string}]` ``]: `undefined`;
        \[`key`: `` `uint248[${string}]` ``]: `undefined`;
        \[`key`: `` `uint256[${string}]` ``]: `undefined`;
        `string?`: `undefined`;
        `address?`: `undefined`;
        `bool?`: `undefined`;
        `bytes?`: `undefined`;
        `bytes1?`: `undefined`;
        `bytes2?`: `undefined`;
        `bytes3?`: `undefined`;
        `bytes4?`: `undefined`;
        `bytes5?`: `undefined`;
        `bytes6?`: `undefined`;
        `bytes7?`: `undefined`;
        `bytes8?`: `undefined`;
        `bytes9?`: `undefined`;
        `bytes10?`: `undefined`;
        `bytes11?`: `undefined`;
        `bytes12?`: `undefined`;
        `bytes13?`: `undefined`;
        `bytes14?`: `undefined`;
        `bytes15?`: `undefined`;
        `bytes16?`: `undefined`;
        `bytes17?`: `undefined`;
        `bytes18?`: `undefined`;
        `bytes19?`: `undefined`;
        `bytes20?`: `undefined`;
        `bytes21?`: `undefined`;
        `bytes22?`: `undefined`;
        `bytes23?`: `undefined`;
        `bytes24?`: `undefined`;
        `bytes25?`: `undefined`;
        `bytes26?`: `undefined`;
        `bytes27?`: `undefined`;
        `bytes28?`: `undefined`;
        `bytes29?`: `undefined`;
        `bytes30?`: `undefined`;
        `bytes31?`: `undefined`;
        `bytes32?`: `undefined`;
        `int8?`: `undefined`;
        `int16?`: `undefined`;
        `int24?`: `undefined`;
        `int32?`: `undefined`;
        `int40?`: `undefined`;
        `int48?`: `undefined`;
        `int56?`: `undefined`;
        `int64?`: `undefined`;
        `int72?`: `undefined`;
        `int80?`: `undefined`;
        `int88?`: `undefined`;
        `int96?`: `undefined`;
        `int104?`: `undefined`;
        `int112?`: `undefined`;
        `int120?`: `undefined`;
        `int128?`: `undefined`;
        `int136?`: `undefined`;
        `int144?`: `undefined`;
        `int152?`: `undefined`;
        `int160?`: `undefined`;
        `int168?`: `undefined`;
        `int176?`: `undefined`;
        `int184?`: `undefined`;
        `int192?`: `undefined`;
        `int200?`: `undefined`;
        `int208?`: `undefined`;
        `int216?`: `undefined`;
        `int224?`: `undefined`;
        `int232?`: `undefined`;
        `int240?`: `undefined`;
        `int248?`: `undefined`;
        `int256?`: `undefined`;
        `uint8?`: `undefined`;
        `uint16?`: `undefined`;
        `uint24?`: `undefined`;
        `uint32?`: `undefined`;
        `uint40?`: `undefined`;
        `uint48?`: `undefined`;
        `uint56?`: `undefined`;
        `uint64?`: `undefined`;
        `uint72?`: `undefined`;
        `uint80?`: `undefined`;
        `uint88?`: `undefined`;
        `uint96?`: `undefined`;
        `uint104?`: `undefined`;
        `uint112?`: `undefined`;
        `uint120?`: `undefined`;
        `uint128?`: `undefined`;
        `uint136?`: `undefined`;
        `uint144?`: `undefined`;
        `uint152?`: `undefined`;
        `uint160?`: `undefined`;
        `uint168?`: `undefined`;
        `uint176?`: `undefined`;
        `uint184?`: `undefined`;
        `uint192?`: `undefined`;
        `uint200?`: `undefined`;
        `uint208?`: `undefined`;
        `uint216?`: `undefined`;
        `uint224?`: `undefined`;
        `uint232?`: `undefined`;
        `uint240?`: `undefined`;
        `uint248?`: `undefined`;
        `uint256?`: `undefined`;
        }
        | `Record`\<`string`, `unknown`>
      </td>

      <td>
        ‐
      </td>
    </tr>

    <tr>
      <td>
        `TPrimaryType` *extends* `string` | `number` | `symbol`
      </td>

      <td>
        `string`
      </td>
    </tr>

  </tbody>
</table>

#### Parameters

<table>
  <thead>
    <tr>
      <th align="left">Parameter</th>
      <th align="left">Type</th>
      <th align="left">Description</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `typedData`
      </td>

      <td>
        [`TypedDataDefinition`](https://viem.sh)\<`TTypedData`, `TPrimaryType`>
      </td>

      <td>
        The typed data to be signed
      </td>
    </tr>

  </tbody>
</table>

#### Returns

`Promise`\<`` `0x${string}` ``>

A promise that resolves to a hex string representing the signed data