Skip to content

Commit 6e8bcb3

Browse files
authored
Merge pull request #76 from MetaMask/refactor/rename-signatory-signer
Rename Signatory to Signer
2 parents 38064ec + 3b86ca4 commit 6e8bcb3

52 files changed

Lines changed: 245 additions & 247 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

packages/delegation-toolkit/README.md

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,68 +3,75 @@
33
The MetaMask Delegation Toolkit is a [Viem](https://viem.sh)-based collection of tools for integrating MetaMask embedded smart account and create frictionless new experiences based on granular permission sharing and trust.
44

55
## Features
6+
67
---
8+
79
- **Smart Account Support**: Provides high-level API for deploying, and managing MetaMask smart account.
810
- **Delegation Framework Support**: Comprehensive support for [ERC-7710](https://eips.ethereum.org/EIPS/eip-7710) to create, manage, and redeem delegations.
911
- **Prebuilt Caveat Enforcers**: Prebuilt caveat enforcers for adding restrictions and conditions to delegations.
1012
- **Modular and Extensible**: Enables configuration of custom bundlers, paymasters, signers, and specialized caveat enforcers.
1113
- and many more...
1214

13-
1415
## Installation
16+
1517
---
1618

1719
Yarn:
20+
1821
```sh
1922
yarn add @metamask/delegation-toolkit
2023
```
2124

2225
Npm:
26+
2327
```sh
2428
npm install @metamask/delegation-toolkit
2529
```
2630

27-
## Overview
31+
## Overview
32+
2833
---
2934

3035
```ts
31-
import { createPublicClient, http } from "viem";
32-
import { sepolia as chain } from "viem/chains";
33-
import { privateKeyToAccount } from "viem/accounts";
36+
import { createPublicClient, http } from 'viem';
37+
import { sepolia as chain } from 'viem/chains';
38+
import { privateKeyToAccount } from 'viem/accounts';
3439
import {
3540
Implementation,
3641
toMetaMaskSmartAccount,
37-
} from "@metamask/delegation-toolkit";
42+
} from '@metamask/delegation-toolkit';
3843

3944
const publicClient = createPublicClient({
4045
chain,
4146
transport: http(),
4247
});
4348

44-
const account = privateKeyToAccount("0x...");
49+
const account = privateKeyToAccount('0x...');
4550

4651
const smartAccount = await toMetaMaskSmartAccount({
4752
client: publicClient,
4853
implementation: Implementation.Hybrid,
4954
deployParams: [account.address, [], [], []],
50-
deploySalt: "0x",
51-
signatory: { account },
55+
deploySalt: '0x',
56+
signer: { account },
5257
});
5358
```
5459

55-
5660
## Documentation
61+
5762
---
63+
5864
[Head to our documentation](https://docs.gator.metamask.io) to learn more about the Delegation Toolkit.
5965

6066
## Contributing
67+
6168
---
6269

6370
If you are interested in contributing, please [see the contribution guide](/CONTRIBUTING.md#Contributing).
6471

65-
6672
## Useful Links
73+
6774
- [Delegation Toolkit Quick start](https://docs.metamask.io/delegation-toolkit/get-started/quickstart/)
6875
- [Delegation Toolkit CLI Quick start](https://docs.metamask.io/delegation-toolkit/development/get-started/cli-quickstart/)
6976
- [Scaffold ETH extension](https://github.com/metamask/gator-extension)
70-
- [API reference](https://docs.metamask.io/delegation-toolkit/development/reference/)
77+
- [API reference](https://docs.metamask.io/delegation-toolkit/development/reference/)

packages/delegation-toolkit/src/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ export type {
2222
MetaMaskSmartAccountImplementation,
2323
ToMetaMaskSmartAccountReturnType,
2424
MetaMaskSmartAccount,
25-
WalletSignatoryConfig,
26-
AccountSignatoryConfig,
27-
WebAuthnSignatoryConfig,
28-
HybridSignatoryConfig,
29-
MultiSigSignatoryConfig,
25+
WalletSignerConfig,
26+
AccountSignerConfig,
27+
WebAuthnSignerConfig,
28+
HybridSignerConfig,
29+
MultiSigSignerConfig,
3030
Delegation,
3131
Caveat,
3232
} from './types';

packages/delegation-toolkit/src/signatory.ts renamed to packages/delegation-toolkit/src/signer.ts

Lines changed: 41 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@ import type { SignReturnType as WebAuthnSignReturnType } from 'webauthn-p256';
1010
import { Implementation } from './constants';
1111
import { aggregateSignature } from './signatures';
1212
import type {
13-
AccountSignatoryConfig,
14-
HybridSignatoryConfig,
15-
InternalSignatory,
16-
MultiSigSignatoryConfig,
17-
SignatoryConfigByImplementation,
18-
Stateless7702SignatoryConfig,
19-
WalletSignatoryConfig,
13+
AccountSignerConfig,
14+
HybridSignerConfig,
15+
InternalSigner,
16+
MultiSigSignerConfig,
17+
SignerConfigByImplementation,
18+
Stateless7702SignerConfig,
19+
WalletSignerConfig,
2020
} from './types';
2121
import {
2222
createDummyWebAuthnSignature,
@@ -27,9 +27,9 @@ import {
2727
const EOA_STUB_SIGNATURE =
2828
'0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011b' as const;
2929

30-
const resolveSignatoryFromWalletConfig = (
31-
config: WalletSignatoryConfig,
32-
): InternalSignatory => {
30+
const resolveSignerFromWalletConfig = (
31+
config: WalletSignerConfig,
32+
): InternalSigner => {
3333
return {
3434
signMessage: config.walletClient.signMessage,
3535
signTypedData: async (typedData) => {
@@ -40,22 +40,20 @@ const resolveSignatoryFromWalletConfig = (
4040
};
4141
};
4242

43-
const resolveSignatoryFromAccountConfig = (config: AccountSignatoryConfig) => {
43+
const resolveSignerFromAccountConfig = (config: AccountSignerConfig) => {
4444
return {
4545
signMessage: config.account.signMessage,
4646
signTypedData: config.account.signTypedData,
4747
getStubSignature: async () => EOA_STUB_SIGNATURE,
4848
};
4949
};
5050

51-
const resolveHybridSignatory = (
52-
config: HybridSignatoryConfig,
53-
): InternalSignatory => {
51+
const resolveHybridSigner = (config: HybridSignerConfig): InternalSigner => {
5452
if ('walletClient' in config) {
55-
return resolveSignatoryFromWalletConfig(config);
53+
return resolveSignerFromWalletConfig(config);
5654
} else if ('account' in config) {
5755
const { signMessage, signTypedData, getStubSignature } =
58-
resolveSignatoryFromAccountConfig(config);
56+
resolveSignerFromAccountConfig(config);
5957
if (!signMessage) {
6058
throw new Error('Account does not support signMessage');
6159
}
@@ -100,23 +98,23 @@ const resolveHybridSignatory = (
10098
};
10199
};
102100

103-
const resolveMultiSigSignatory = (
104-
config: MultiSigSignatoryConfig,
105-
): InternalSignatory => {
106-
const resolvedSignatories = config.map((signatory) => {
107-
let individualSignMessage: InternalSignatory['signMessage'];
108-
let individualSignTypedData: InternalSignatory['signTypedData'];
101+
const resolveMultiSigSigner = (
102+
config: MultiSigSignerConfig,
103+
): InternalSigner => {
104+
const resolvedSigners = config.map((signer) => {
105+
let individualSignMessage: InternalSigner['signMessage'];
106+
let individualSignTypedData: InternalSigner['signTypedData'];
109107
let address: Address;
110-
if ('walletClient' in signatory) {
108+
if ('walletClient' in signer) {
111109
const { signMessage, signTypedData } =
112-
resolveSignatoryFromWalletConfig(signatory);
110+
resolveSignerFromWalletConfig(signer);
113111
individualSignMessage = signMessage;
114112
individualSignTypedData = signTypedData;
115113

116-
address = signatory.walletClient.account.address;
114+
address = signer.walletClient.account.address;
117115
} else {
118116
const { signMessage, signTypedData } =
119-
resolveSignatoryFromAccountConfig(signatory);
117+
resolveSignerFromAccountConfig(signer);
120118
if (!signMessage) {
121119
throw new Error('Account does not support signMessage');
122120
}
@@ -127,7 +125,7 @@ const resolveMultiSigSignatory = (
127125
individualSignMessage = signMessage;
128126
individualSignTypedData = signTypedData;
129127

130-
address = signatory.account.address;
128+
address = signer.account.address;
131129
}
132130
return {
133131
address,
@@ -137,7 +135,7 @@ const resolveMultiSigSignatory = (
137135
});
138136

139137
const signMessage = async (args: { message: SignableMessage }) => {
140-
const addressAndSignatures = resolvedSignatories.map(
138+
const addressAndSignatures = resolvedSigners.map(
141139
async ({ individualSignMessage, address }) => ({
142140
signature: await individualSignMessage(args),
143141
signer: address,
@@ -158,7 +156,7 @@ const resolveMultiSigSignatory = (
158156
>(
159157
typedDataDefinition: TypedDataDefinition<TTypedData, TPrimaryType>,
160158
) => {
161-
const addressAndSignatures = resolvedSignatories.map(
159+
const addressAndSignatures = resolvedSigners.map(
162160
async ({ individualSignTypedData, address }) => ({
163161
signature: await individualSignTypedData(typedDataDefinition),
164162
signer: address,
@@ -174,7 +172,7 @@ const resolveMultiSigSignatory = (
174172
};
175173

176174
const getStubSignature = async () =>
177-
concat(resolvedSignatories.map(() => EOA_STUB_SIGNATURE));
175+
concat(resolvedSigners.map(() => EOA_STUB_SIGNATURE));
178176

179177
return {
180178
signMessage,
@@ -183,14 +181,14 @@ const resolveMultiSigSignatory = (
183181
};
184182
};
185183

186-
const resolveStateless7702Signatory = (
187-
config: Stateless7702SignatoryConfig,
188-
): InternalSignatory => {
184+
const resolveStateless7702Signer = (
185+
config: Stateless7702SignerConfig,
186+
): InternalSigner => {
189187
if ('walletClient' in config) {
190-
return resolveSignatoryFromWalletConfig(config);
188+
return resolveSignerFromWalletConfig(config);
191189
} else if ('account' in config) {
192190
const { signMessage, signTypedData, getStubSignature } =
193-
resolveSignatoryFromAccountConfig(config);
191+
resolveSignerFromAccountConfig(config);
194192
if (!signMessage) {
195193
throw new Error('Account does not support signMessage');
196194
}
@@ -205,26 +203,22 @@ const resolveStateless7702Signatory = (
205203
};
206204
}
207205

208-
throw new Error('Invalid signatory config');
206+
throw new Error('Invalid signer config');
209207
};
210208

211-
export const resolveSignatory = <
212-
TImplementation extends Implementation,
213-
>(config: {
209+
export const resolveSigner = <TImplementation extends Implementation>(config: {
214210
implementation: TImplementation;
215-
signatory: SignatoryConfigByImplementation<TImplementation>;
216-
}): InternalSignatory => {
211+
signer: SignerConfigByImplementation<TImplementation>;
212+
}): InternalSigner => {
217213
const { implementation } = config;
218214

219215
if (implementation === Implementation.Hybrid) {
220-
return resolveHybridSignatory(config.signatory as HybridSignatoryConfig);
216+
return resolveHybridSigner(config.signer as HybridSignerConfig);
221217
} else if (implementation === Implementation.MultiSig) {
222-
return resolveMultiSigSignatory(
223-
config.signatory as MultiSigSignatoryConfig,
224-
);
218+
return resolveMultiSigSigner(config.signer as MultiSigSignerConfig);
225219
} else if (implementation === Implementation.Stateless7702) {
226-
return resolveStateless7702Signatory(
227-
config.signatory as Stateless7702SignatoryConfig,
220+
return resolveStateless7702Signer(
221+
config.signer as Stateless7702SignerConfig,
228222
);
229223
}
230224
throw new Error(`Implementation type '${implementation}' not supported`);

packages/delegation-toolkit/src/toMetaMaskSmartAccount.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import {
2020
import { entryPointGetNonce as _getNonce } from './DelegationFramework/EntryPoint/read';
2121
import { getDeleGatorEnvironment } from './delegatorEnvironment';
2222
import { encodeCallsForCaller } from './encodeCalls';
23-
import { resolveSignatory } from './signatory';
23+
import { resolveSigner } from './signer';
2424
import type {
2525
Call,
2626
ToMetaMaskSmartAccountParameters,
@@ -59,9 +59,9 @@ export async function toMetaMaskSmartAccount<
5959
throw new Error('Chain not specified');
6060
}
6161

62-
const signatory = resolveSignatory({
62+
const signer = resolveSigner({
6363
implementation,
64-
signatory: params.signatory,
64+
signer: params.signer,
6565
});
6666

6767
const environment = params.environment ?? getDeleGatorEnvironment(chain.id);
@@ -132,7 +132,7 @@ export async function toMetaMaskSmartAccount<
132132
signature: '0x',
133133
});
134134

135-
const signature = signatory.signTypedData({
135+
const signature = signer.signTypedData({
136136
domain: {
137137
chainId: chainId ?? chain.id,
138138
name: 'DelegationManager',
@@ -156,7 +156,7 @@ export async function toMetaMaskSmartAccount<
156156
signature: '0x',
157157
});
158158

159-
const signature = await signatory.signTypedData({
159+
const signature = await signer.signTypedData({
160160
domain: {
161161
chainId: chainId ?? chain.id,
162162
name: contractName,
@@ -195,7 +195,7 @@ export async function toMetaMaskSmartAccount<
195195
getNonce,
196196
signUserOperation,
197197
signDelegation,
198-
...signatory,
198+
...signer,
199199
});
200200

201201
// Override isDeployed only for EIP-7702 implementation to check proper delegation code

0 commit comments

Comments
 (0)