# `signMessage`

Signs a Safe message with the connected signer.

## Usage


<Tabs items={['example.ts', 'setup.ts']}>
  <Tabs.Tab>
    ```typescript
    import { SigningMethod } from '@safe-global/protocol-kit'
    import { EIP712TypedData } from '@safe-global/types-kit'
    import { protocolKit } from './setup.ts'

    const rawMessage: string | EIP712TypedData = 'Example message'
    const message = protocolKit.createMessage(rawMessage)

    const signingMethod = SigningMethod.ETH_SIGN_TYPED_DATA_V4

    const preimageSafeAddress = '0x...'

    const signedMessage = await protocolKit.signMessage(
      message,
      signingMethod, // Optional
      preimageSafeAddress // Optional
    )
    ```
  </Tabs.Tab>
  <Tabs.Tab>
    ```typescript
    import Safe from '@safe-global/protocol-kit'

    export const protocolKit = Safe.init({
      provider,
      signer,
      safeAddress: '0x...'
    })
    ```
  </Tabs.Tab>
</Tabs>


## Parameters

### `message`

- **Type**: `string`

The message to be signed.

```typescript focus=2
const signedMessage = await protocolKit.signMessage(
  '0x...'
)
```

### `signingMethod` (Optional)

- **Type**: [`SigningMethodType`](https://github.com/safe-global/safe-core-sdk/blob/main/packages/protocol-kit/src/types/signing.ts#L9)
- **Default**: `SigningMethod.ETH_SIGN_TYPED_DATA_V4`

The signature type.

You can use multiple signing methods, such as:

- `ETH_SIGN` (`eth_sign`): Regular hash signature.
- `ETH_SIGN_TYPED_DATA_V4` (`eth_signTypedData_v4`): Typed data signature `v4`.
- `ETH_SIGN_TYPED_DATA_V3` (`eth_signTypedData_v3`): Typed data signature `v3`.
- `ETH_SIGN_TYPED_DATA` (`eth_signTypedData`): Typed data signature.
- `SAFE_SIGNATURE`: Signature from another Safe that acts as a signer.

```typescript focus=3
const signedMessage = await protocolKit.signMessage(
  '0x...',
  SigningMethod.ETH_SIGN_TYPED_DATA_V4
)
```

### `preimageSafeAddress` (Optional)

- **Type**: `string`

The address of the Safe that will be used to calculate the preimage.

Required parameter for `v1.3.0` and `v1.4.1` Safe smart accounts. These versions use the old EIP-1271 interface, which uses `bytes` instead of `bytes32` for the message. You need to use the pre-image of the message to calculate the message hash.

```typescript focus=4
const signedMessage = await protocolKit.signMessage(
  '0x...',
  SigningMethod.ETH_SIGN_TYPED_DATA_V4,
  '0x...'
)
```

## Returns

`Promise<SafeMessage>`

The Safe message with the generated signature.
