permissionless 0.2.8 → 0.2.9

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.
Files changed (51) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/_cjs/accounts/index.js +3 -1
  3. package/_cjs/accounts/index.js.map +1 -1
  4. package/_cjs/accounts/thirdweb/toThirdwebSmartAccount.js +118 -0
  5. package/_cjs/accounts/thirdweb/toThirdwebSmartAccount.js.map +1 -0
  6. package/_cjs/accounts/thirdweb/utils/encodeCallData.js +76 -0
  7. package/_cjs/accounts/thirdweb/utils/encodeCallData.js.map +1 -0
  8. package/_cjs/accounts/thirdweb/utils/getAccountAddress.js +37 -0
  9. package/_cjs/accounts/thirdweb/utils/getAccountAddress.js.map +1 -0
  10. package/_cjs/accounts/thirdweb/utils/getFactoryData.js +37 -0
  11. package/_cjs/accounts/thirdweb/utils/getFactoryData.js.map +1 -0
  12. package/_cjs/accounts/thirdweb/utils/signMessage.js +19 -0
  13. package/_cjs/accounts/thirdweb/utils/signMessage.js.map +1 -0
  14. package/_cjs/accounts/thirdweb/utils/signTypedData.js +40 -0
  15. package/_cjs/accounts/thirdweb/utils/signTypedData.js.map +1 -0
  16. package/_esm/accounts/index.js +2 -1
  17. package/_esm/accounts/index.js.map +1 -1
  18. package/_esm/accounts/thirdweb/toThirdwebSmartAccount.js +122 -0
  19. package/_esm/accounts/thirdweb/toThirdwebSmartAccount.js.map +1 -0
  20. package/_esm/accounts/thirdweb/utils/encodeCallData.js +72 -0
  21. package/_esm/accounts/thirdweb/utils/encodeCallData.js.map +1 -0
  22. package/_esm/accounts/thirdweb/utils/getAccountAddress.js +33 -0
  23. package/_esm/accounts/thirdweb/utils/getAccountAddress.js.map +1 -0
  24. package/_esm/accounts/thirdweb/utils/getFactoryData.js +33 -0
  25. package/_esm/accounts/thirdweb/utils/getFactoryData.js.map +1 -0
  26. package/_esm/accounts/thirdweb/utils/signMessage.js +17 -0
  27. package/_esm/accounts/thirdweb/utils/signMessage.js.map +1 -0
  28. package/_esm/accounts/thirdweb/utils/signTypedData.js +40 -0
  29. package/_esm/accounts/thirdweb/utils/signTypedData.js.map +1 -0
  30. package/_types/accounts/index.d.ts +2 -1
  31. package/_types/accounts/index.d.ts.map +1 -1
  32. package/_types/accounts/thirdweb/toThirdwebSmartAccount.d.ts +37 -0
  33. package/_types/accounts/thirdweb/toThirdwebSmartAccount.d.ts.map +1 -0
  34. package/_types/accounts/thirdweb/utils/encodeCallData.d.ts +6 -0
  35. package/_types/accounts/thirdweb/utils/encodeCallData.d.ts.map +1 -0
  36. package/_types/accounts/thirdweb/utils/getAccountAddress.d.ts +8 -0
  37. package/_types/accounts/thirdweb/utils/getAccountAddress.d.ts.map +1 -0
  38. package/_types/accounts/thirdweb/utils/getFactoryData.d.ts +6 -0
  39. package/_types/accounts/thirdweb/utils/getFactoryData.d.ts.map +1 -0
  40. package/_types/accounts/thirdweb/utils/signMessage.d.ts +8 -0
  41. package/_types/accounts/thirdweb/utils/signMessage.d.ts.map +1 -0
  42. package/_types/accounts/thirdweb/utils/signTypedData.d.ts +7 -0
  43. package/_types/accounts/thirdweb/utils/signTypedData.d.ts.map +1 -0
  44. package/accounts/index.ts +12 -1
  45. package/accounts/thirdweb/toThirdwebSmartAccount.ts +203 -0
  46. package/accounts/thirdweb/utils/encodeCallData.ts +81 -0
  47. package/accounts/thirdweb/utils/getAccountAddress.ts +48 -0
  48. package/accounts/thirdweb/utils/getFactoryData.ts +40 -0
  49. package/accounts/thirdweb/utils/signMessage.ts +34 -0
  50. package/accounts/thirdweb/utils/signTypedData.ts +67 -0
  51. package/package.json +2 -8
@@ -0,0 +1,40 @@
1
+ import type { Address, Hex } from "viem"
2
+ import { encodeFunctionData } from "viem"
3
+
4
+ export const getFactoryData = async ({
5
+ admin,
6
+ salt
7
+ }: {
8
+ admin: Address
9
+ salt: Hex
10
+ }) => {
11
+ return encodeFunctionData({
12
+ abi: [
13
+ {
14
+ inputs: [
15
+ {
16
+ internalType: "address",
17
+ name: "_admin",
18
+ type: "address"
19
+ },
20
+ {
21
+ internalType: "bytes",
22
+ name: "_salt",
23
+ type: "bytes"
24
+ }
25
+ ],
26
+ name: "createAccount",
27
+ outputs: [
28
+ {
29
+ internalType: "address",
30
+ type: "address"
31
+ }
32
+ ],
33
+ stateMutability: "nonpayable",
34
+ type: "function"
35
+ }
36
+ ],
37
+ functionName: "createAccount",
38
+ args: [admin, salt]
39
+ })
40
+ }
@@ -0,0 +1,34 @@
1
+ import {
2
+ type Address,
3
+ type LocalAccount,
4
+ type SignMessageReturnType,
5
+ type SignableMessage,
6
+ hashMessage
7
+ } from "viem"
8
+ import { signMessage as _signMessage } from "viem/actions"
9
+
10
+ export async function signMessage({
11
+ message,
12
+ admin,
13
+ accountAddress,
14
+ chainId
15
+ }: {
16
+ chainId: number
17
+ message: SignableMessage
18
+ admin: LocalAccount
19
+ accountAddress: Address
20
+ }): Promise<SignMessageReturnType> {
21
+ const hashedMessage = hashMessage(message)
22
+
23
+ return admin.signTypedData({
24
+ domain: {
25
+ name: "Account",
26
+ version: "1",
27
+ chainId,
28
+ verifyingContract: accountAddress
29
+ },
30
+ primaryType: "AccountMessage",
31
+ types: { AccountMessage: [{ name: "message", type: "bytes" }] },
32
+ message: { message: hashedMessage }
33
+ })
34
+ }
@@ -0,0 +1,67 @@
1
+ import {
2
+ type Address,
3
+ type LocalAccount,
4
+ type SignTypedDataReturnType,
5
+ type TypedDataDefinition,
6
+ type TypedDataDomain,
7
+ encodeAbiParameters,
8
+ getTypesForEIP712Domain,
9
+ hashTypedData,
10
+ validateTypedData
11
+ } from "viem"
12
+
13
+ export async function signTypedData(
14
+ parameters: TypedDataDefinition & {
15
+ accountAddress: Address
16
+ chainId: number
17
+ admin: LocalAccount
18
+ }
19
+ ): Promise<SignTypedDataReturnType> {
20
+ const { admin, accountAddress, chainId, ...typedData } = parameters
21
+ const isSelfVerifyingContract =
22
+ (
23
+ typedData.domain as TypedDataDomain
24
+ )?.verifyingContract?.toLowerCase() === accountAddress
25
+
26
+ // If this is a self-verifying contract, we can use the admin's signature
27
+ if (isSelfVerifyingContract) {
28
+ return admin.signTypedData({
29
+ ...typedData
30
+ })
31
+ }
32
+
33
+ const { message, primaryType, types: _types, domain } = typedData
34
+ const types = {
35
+ EIP712Domain: getTypesForEIP712Domain({
36
+ domain: domain
37
+ }),
38
+ ..._types
39
+ }
40
+
41
+ // Need to do a runtime validation check on addresses, byte ranges, integer ranges, etc
42
+ // as we can't statically check this with TypeScript.
43
+ validateTypedData({
44
+ domain,
45
+ message,
46
+ primaryType,
47
+ types
48
+ })
49
+
50
+ const typedHash = hashTypedData({ message, primaryType, types, domain })
51
+ const wrappedMessageHash = encodeAbiParameters(
52
+ [{ type: "bytes32" }],
53
+ [typedHash]
54
+ )
55
+
56
+ return admin.signTypedData({
57
+ domain: {
58
+ name: "Account",
59
+ version: "1",
60
+ chainId,
61
+ verifyingContract: accountAddress
62
+ },
63
+ primaryType: "AccountMessage",
64
+ types: { AccountMessage: [{ name: "message", type: "bytes" }] },
65
+ message: { message: wrappedMessageHash }
66
+ })
67
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "permissionless",
3
- "version": "0.2.8",
3
+ "version": "0.2.9",
4
4
  "author": "Pimlico",
5
5
  "homepage": "https://docs.pimlico.io/permissionless",
6
6
  "repository": "github:pimlicolabs/permissionless.js",
@@ -11,13 +11,7 @@
11
11
  "type": "module",
12
12
  "sideEffects": false,
13
13
  "description": "A utility library for working with ERC-4337",
14
- "keywords": [
15
- "ethereum",
16
- "erc-4337",
17
- "eip-4337",
18
- "paymaster",
19
- "bundler"
20
- ],
14
+ "keywords": ["ethereum", "erc-4337", "eip-4337", "paymaster", "bundler"],
21
15
  "license": "MIT",
22
16
  "exports": {
23
17
  ".": {