@account-kit/wallet-client 0.1.0-alpha.1 → 0.1.0-alpha.10
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.
- package/dist/esm/client/actions/createAccount.d.ts +27 -2
- package/dist/esm/client/actions/createAccount.js +25 -0
- package/dist/esm/client/actions/createAccount.js.map +1 -1
- package/dist/esm/client/actions/formatSign.d.ts +28 -0
- package/dist/esm/client/actions/formatSign.js +30 -0
- package/dist/esm/client/actions/formatSign.js.map +1 -0
- package/dist/esm/client/actions/getCallsStatus.d.ts +22 -4
- package/dist/esm/client/actions/getCallsStatus.js +19 -0
- package/dist/esm/client/actions/getCallsStatus.js.map +1 -1
- package/dist/esm/client/actions/grantPermissions.d.ts +63 -6
- package/dist/esm/client/actions/grantPermissions.js +63 -3
- package/dist/esm/client/actions/grantPermissions.js.map +1 -1
- package/dist/esm/client/actions/listAccounts.d.ts +32 -4
- package/dist/esm/client/actions/listAccounts.js +35 -2
- package/dist/esm/client/actions/listAccounts.js.map +1 -1
- package/dist/esm/client/actions/prepareCalls.d.ts +32 -6
- package/dist/esm/client/actions/prepareCalls.js +39 -5
- package/dist/esm/client/actions/prepareCalls.js.map +1 -1
- package/dist/esm/client/actions/prepareSign.d.ts +25 -0
- package/dist/esm/client/actions/prepareSign.js +28 -0
- package/dist/esm/client/actions/prepareSign.js.map +1 -0
- package/dist/esm/client/actions/requestAccount.d.ts +24 -6
- package/dist/esm/client/actions/requestAccount.js +38 -7
- package/dist/esm/client/actions/requestAccount.js.map +1 -1
- package/dist/esm/client/actions/sendPreparedCalls.d.ts +33 -4
- package/dist/esm/client/actions/sendPreparedCalls.js +37 -1
- package/dist/esm/client/actions/sendPreparedCalls.js.map +1 -1
- package/dist/esm/client/actions/signMessage.d.ts +25 -5
- package/dist/esm/client/actions/signMessage.js +22 -2
- package/dist/esm/client/actions/signMessage.js.map +1 -1
- package/dist/esm/client/actions/signPreparedCalls.d.ts +14 -0
- package/dist/esm/client/actions/signPreparedCalls.js +43 -0
- package/dist/esm/client/actions/signPreparedCalls.js.map +1 -0
- package/dist/esm/client/actions/signSignatureRequest.d.ts +39 -5
- package/dist/esm/client/actions/signSignatureRequest.js +69 -11
- package/dist/esm/client/actions/signSignatureRequest.js.map +1 -1
- package/dist/esm/client/actions/signTypedData.d.ts +37 -4
- package/dist/esm/client/actions/signTypedData.js +34 -1
- package/dist/esm/client/actions/signTypedData.js.map +1 -1
- package/dist/esm/client/client.e2e-test.js +210 -45
- package/dist/esm/client/client.e2e-test.js.map +1 -1
- package/dist/esm/client/decorator.d.ts +12 -8
- package/dist/esm/client/decorator.js +5 -3
- package/dist/esm/client/decorator.js.map +1 -1
- package/dist/esm/client/index.d.ts +38 -12
- package/dist/esm/client/index.js +0 -3
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/exports/index.d.ts +5 -6
- package/dist/esm/exports/index.js +4 -6
- package/dist/esm/exports/index.js.map +1 -1
- package/dist/esm/exports/internal.d.ts +1 -10
- package/dist/esm/exports/internal.js +0 -12
- package/dist/esm/exports/internal.js.map +1 -1
- package/dist/esm/internal/decorator.d.ts +2 -0
- package/dist/esm/internal/decorator.js +10 -0
- package/dist/esm/internal/decorator.js.map +1 -0
- package/dist/esm/isomorphic/actions/createSession.d.ts +1 -2
- package/dist/esm/isomorphic/actions/createSession.js +39 -10
- package/dist/esm/isomorphic/actions/createSession.js.map +1 -1
- package/dist/esm/isomorphic/actions/formatSign.d.ts +8 -0
- package/dist/esm/isomorphic/actions/formatSign.js +42 -0
- package/dist/esm/isomorphic/actions/formatSign.js.map +1 -0
- package/dist/esm/isomorphic/actions/getCallsStatus.d.ts +1 -15
- package/dist/esm/isomorphic/actions/getCallsStatus.js +37 -26
- package/dist/esm/isomorphic/actions/getCallsStatus.js.map +1 -1
- package/dist/esm/isomorphic/actions/prepareCalls.d.ts +1 -2
- package/dist/esm/isomorphic/actions/prepareCalls.js +78 -20
- package/dist/esm/isomorphic/actions/prepareCalls.js.map +1 -1
- package/dist/esm/isomorphic/actions/prepareSign.d.ts +7 -0
- package/dist/esm/isomorphic/actions/prepareSign.js +49 -0
- package/dist/esm/isomorphic/actions/prepareSign.js.map +1 -0
- package/dist/esm/isomorphic/actions/sendPreparedCalls.d.ts +3 -4
- package/dist/esm/isomorphic/actions/sendPreparedCalls.js +138 -25
- package/dist/esm/isomorphic/actions/sendPreparedCalls.js.map +1 -1
- package/dist/esm/isomorphic/client.d.ts +204 -27
- package/dist/esm/isomorphic/client.js +6 -2
- package/dist/esm/isomorphic/client.js.map +1 -1
- package/dist/esm/isomorphic/utils/7702.d.ts +19 -0
- package/dist/esm/isomorphic/utils/7702.js +70 -0
- package/dist/esm/isomorphic/utils/7702.js.map +1 -0
- package/dist/esm/isomorphic/utils/createAccount.d.ts +5 -4
- package/dist/esm/isomorphic/utils/createAccount.js +84 -10
- package/dist/esm/isomorphic/utils/createAccount.js.map +1 -1
- package/dist/esm/isomorphic/utils/createDummySigner.js +3 -3
- package/dist/esm/isomorphic/utils/createDummySigner.js.map +1 -1
- package/dist/esm/isomorphic/utils/decodeSignature.d.ts +3 -0
- package/dist/esm/isomorphic/utils/decodeSignature.js +15 -0
- package/dist/esm/isomorphic/utils/decodeSignature.js.map +1 -0
- package/dist/esm/isomorphic/utils/parsePermissionsContext.d.ts +6 -5
- package/dist/esm/isomorphic/utils/parsePermissionsContext.js +19 -6
- package/dist/esm/isomorphic/utils/parsePermissionsContext.js.map +1 -1
- package/dist/esm/isomorphic/utils/supportsFeature.d.ts +4 -0
- package/dist/esm/isomorphic/utils/supportsFeature.js +21 -0
- package/dist/esm/isomorphic/utils/supportsFeature.js.map +1 -0
- package/dist/esm/local/client.d.ts +3 -3
- package/dist/esm/local/client.js +11 -4
- package/dist/esm/local/client.js.map +1 -1
- package/dist/esm/remote/client.d.ts +9 -3
- package/dist/esm/remote/client.js +10 -11
- package/dist/esm/remote/client.js.map +1 -1
- package/dist/esm/types.d.ts +27 -13
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils.d.ts +1 -0
- package/dist/esm/utils.js.map +1 -1
- package/dist/types/client/actions/createAccount.d.ts +27 -2
- package/dist/types/client/actions/createAccount.d.ts.map +1 -1
- package/dist/types/client/actions/formatSign.d.ts +29 -0
- package/dist/types/client/actions/formatSign.d.ts.map +1 -0
- package/dist/types/client/actions/getCallsStatus.d.ts +22 -4
- package/dist/types/client/actions/getCallsStatus.d.ts.map +1 -1
- package/dist/types/client/actions/grantPermissions.d.ts +63 -6
- package/dist/types/client/actions/grantPermissions.d.ts.map +1 -1
- package/dist/types/client/actions/listAccounts.d.ts +32 -4
- package/dist/types/client/actions/listAccounts.d.ts.map +1 -1
- package/dist/types/client/actions/prepareCalls.d.ts +32 -6
- package/dist/types/client/actions/prepareCalls.d.ts.map +1 -1
- package/dist/types/client/actions/prepareSign.d.ts +26 -0
- package/dist/types/client/actions/prepareSign.d.ts.map +1 -0
- package/dist/types/client/actions/requestAccount.d.ts +24 -6
- package/dist/types/client/actions/requestAccount.d.ts.map +1 -1
- package/dist/types/client/actions/sendPreparedCalls.d.ts +33 -4
- package/dist/types/client/actions/sendPreparedCalls.d.ts.map +1 -1
- package/dist/types/client/actions/signMessage.d.ts +25 -5
- package/dist/types/client/actions/signMessage.d.ts.map +1 -1
- package/dist/types/client/actions/signPreparedCalls.d.ts +15 -0
- package/dist/types/client/actions/signPreparedCalls.d.ts.map +1 -0
- package/dist/types/client/actions/signSignatureRequest.d.ts +39 -5
- package/dist/types/client/actions/signSignatureRequest.d.ts.map +1 -1
- package/dist/types/client/actions/signTypedData.d.ts +37 -4
- package/dist/types/client/actions/signTypedData.d.ts.map +1 -1
- package/dist/types/client/decorator.d.ts +12 -8
- package/dist/types/client/decorator.d.ts.map +1 -1
- package/dist/types/client/index.d.ts +38 -12
- package/dist/types/client/index.d.ts.map +1 -1
- package/dist/types/exports/index.d.ts +5 -6
- package/dist/types/exports/index.d.ts.map +1 -1
- package/dist/types/exports/internal.d.ts +1 -10
- package/dist/types/exports/internal.d.ts.map +1 -1
- package/dist/types/internal/decorator.d.ts +3 -0
- package/dist/types/internal/decorator.d.ts.map +1 -0
- package/dist/types/isomorphic/actions/createSession.d.ts +1 -2
- package/dist/types/isomorphic/actions/createSession.d.ts.map +1 -1
- package/dist/types/isomorphic/actions/formatSign.d.ts +9 -0
- package/dist/types/isomorphic/actions/formatSign.d.ts.map +1 -0
- package/dist/types/isomorphic/actions/getCallsStatus.d.ts +1 -15
- package/dist/types/isomorphic/actions/getCallsStatus.d.ts.map +1 -1
- package/dist/types/isomorphic/actions/prepareCalls.d.ts +1 -2
- package/dist/types/isomorphic/actions/prepareCalls.d.ts.map +1 -1
- package/dist/types/isomorphic/actions/prepareSign.d.ts +8 -0
- package/dist/types/isomorphic/actions/prepareSign.d.ts.map +1 -0
- package/dist/types/isomorphic/actions/sendPreparedCalls.d.ts +3 -4
- package/dist/types/isomorphic/actions/sendPreparedCalls.d.ts.map +1 -1
- package/dist/types/isomorphic/client.d.ts +204 -27
- package/dist/types/isomorphic/client.d.ts.map +1 -1
- package/dist/types/isomorphic/utils/7702.d.ts +20 -0
- package/dist/types/isomorphic/utils/7702.d.ts.map +1 -0
- package/dist/types/isomorphic/utils/createAccount.d.ts +5 -4
- package/dist/types/isomorphic/utils/createAccount.d.ts.map +1 -1
- package/dist/types/isomorphic/utils/createDummySigner.d.ts.map +1 -1
- package/dist/types/isomorphic/utils/decodeSignature.d.ts +4 -0
- package/dist/types/isomorphic/utils/decodeSignature.d.ts.map +1 -0
- package/dist/types/isomorphic/utils/parsePermissionsContext.d.ts +6 -5
- package/dist/types/isomorphic/utils/parsePermissionsContext.d.ts.map +1 -1
- package/dist/types/isomorphic/utils/supportsFeature.d.ts +5 -0
- package/dist/types/isomorphic/utils/supportsFeature.d.ts.map +1 -0
- package/dist/types/local/client.d.ts +3 -3
- package/dist/types/local/client.d.ts.map +1 -1
- package/dist/types/remote/client.d.ts +9 -3
- package/dist/types/remote/client.d.ts.map +1 -1
- package/dist/types/types.d.ts +27 -13
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils.d.ts +1 -0
- package/dist/types/utils.d.ts.map +1 -1
- package/package.json +9 -6
- package/src/client/actions/createAccount.ts +27 -2
- package/src/client/actions/formatSign.ts +53 -0
- package/src/client/actions/getCallsStatus.ts +21 -12
- package/src/client/actions/grantPermissions.ts +69 -26
- package/src/client/actions/listAccounts.ts +44 -6
- package/src/client/actions/prepareCalls.ts +46 -26
- package/src/client/actions/prepareSign.ts +46 -0
- package/src/client/actions/requestAccount.ts +60 -41
- package/src/client/actions/sendPreparedCalls.ts +44 -7
- package/src/client/actions/signMessage.ts +26 -21
- package/src/client/actions/signPreparedCalls.ts +67 -0
- package/src/client/actions/signSignatureRequest.ts +84 -20
- package/src/client/actions/signTypedData.ts +40 -19
- package/src/client/client.e2e-test.ts +256 -54
- package/src/client/decorator.ts +28 -26
- package/src/client/index.ts +50 -40
- package/src/exports/index.ts +5 -13
- package/src/exports/internal.ts +2 -10
- package/src/internal/decorator.ts +12 -0
- package/src/isomorphic/actions/createSession.ts +55 -12
- package/src/isomorphic/actions/formatSign.ts +76 -0
- package/src/isomorphic/actions/getCallsStatus.ts +46 -32
- package/src/isomorphic/actions/prepareCalls.ts +95 -23
- package/src/isomorphic/actions/prepareSign.ts +91 -0
- package/src/isomorphic/actions/sendPreparedCalls.ts +181 -42
- package/src/isomorphic/client.ts +10 -2
- package/src/isomorphic/utils/7702.ts +135 -0
- package/src/isomorphic/utils/createAccount.ts +101 -13
- package/src/isomorphic/utils/createDummySigner.ts +3 -2
- package/src/isomorphic/utils/decodeSignature.ts +21 -0
- package/src/isomorphic/utils/parsePermissionsContext.ts +29 -11
- package/src/isomorphic/utils/supportsFeature.ts +34 -0
- package/src/local/client.ts +58 -55
- package/src/remote/client.ts +19 -19
- package/src/types.ts +29 -23
- package/src/utils.ts +2 -0
- package/dist/esm/capabilities/index.d.ts +0 -31
- package/dist/esm/capabilities/index.js +0 -10
- package/dist/esm/capabilities/index.js.map +0 -1
- package/dist/esm/capabilities/overrides.d.ts +0 -26
- package/dist/esm/capabilities/overrides.js +0 -14
- package/dist/esm/capabilities/overrides.js.map +0 -1
- package/dist/esm/capabilities/paymaster.d.ts +0 -3
- package/dist/esm/capabilities/paymaster.js +0 -5
- package/dist/esm/capabilities/paymaster.js.map +0 -1
- package/dist/esm/capabilities/permissions/index.d.ts +0 -138
- package/dist/esm/capabilities/permissions/index.js +0 -71
- package/dist/esm/capabilities/permissions/index.js.map +0 -1
- package/dist/esm/capabilities/permissions/mav2.d.ts +0 -36
- package/dist/esm/capabilities/permissions/mav2.js +0 -79
- package/dist/esm/capabilities/permissions/mav2.js.map +0 -1
- package/dist/esm/rpc/request.d.ts +0 -352
- package/dist/esm/rpc/request.js +0 -204
- package/dist/esm/rpc/request.js.map +0 -1
- package/dist/esm/rpc/schema.d.ts +0 -342
- package/dist/esm/rpc/schema.js +0 -5
- package/dist/esm/rpc/schema.js.map +0 -1
- package/dist/esm/schemas.d.ts +0 -216
- package/dist/esm/schemas.js +0 -211
- package/dist/esm/schemas.js.map +0 -1
- package/dist/types/capabilities/index.d.ts +0 -32
- package/dist/types/capabilities/index.d.ts.map +0 -1
- package/dist/types/capabilities/overrides.d.ts +0 -27
- package/dist/types/capabilities/overrides.d.ts.map +0 -1
- package/dist/types/capabilities/paymaster.d.ts +0 -4
- package/dist/types/capabilities/paymaster.d.ts.map +0 -1
- package/dist/types/capabilities/permissions/index.d.ts +0 -139
- package/dist/types/capabilities/permissions/index.d.ts.map +0 -1
- package/dist/types/capabilities/permissions/mav2.d.ts +0 -37
- package/dist/types/capabilities/permissions/mav2.d.ts.map +0 -1
- package/dist/types/rpc/request.d.ts +0 -353
- package/dist/types/rpc/request.d.ts.map +0 -1
- package/dist/types/rpc/schema.d.ts +0 -343
- package/dist/types/rpc/schema.d.ts.map +0 -1
- package/dist/types/schemas.d.ts +0 -217
- package/dist/types/schemas.d.ts.map +0 -1
- package/src/capabilities/index.ts +0 -13
- package/src/capabilities/overrides.ts +0 -20
- package/src/capabilities/paymaster.ts +0 -5
- package/src/capabilities/permissions/index.ts +0 -142
- package/src/capabilities/permissions/mav2.ts +0 -127
- package/src/rpc/request.ts +0 -273
- package/src/rpc/schema.ts +0 -40
- package/src/schemas.ts +0 -257
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { PermissionType } from "@account-kit/smart-contracts/experimental";
|
|
2
|
-
import {
|
|
3
|
-
Type,
|
|
4
|
-
type TLiteral,
|
|
5
|
-
type TLiteralValue,
|
|
6
|
-
type TObject,
|
|
7
|
-
type TSchema,
|
|
8
|
-
} from "@sinclair/typebox";
|
|
9
|
-
import { KeySigner, TypeAddress, TypeHex } from "../../schemas.js";
|
|
10
|
-
|
|
11
|
-
const Permission = <
|
|
12
|
-
TData extends TSchema,
|
|
13
|
-
TLiteralVal extends TLiteralValue,
|
|
14
|
-
TType extends TLiteral<TLiteralVal>,
|
|
15
|
-
>(
|
|
16
|
-
typeString: TLiteralVal, // e.g., "root"
|
|
17
|
-
typeEnum: TLiteralVal, // e.g., PermissionType.ROOT
|
|
18
|
-
data: TData,
|
|
19
|
-
description: string,
|
|
20
|
-
): TObject<{ type: TType; data: TData }> => {
|
|
21
|
-
return Type.Transform(
|
|
22
|
-
Type.Object(
|
|
23
|
-
{
|
|
24
|
-
type: Type.Literal(typeEnum),
|
|
25
|
-
data,
|
|
26
|
-
},
|
|
27
|
-
{ description },
|
|
28
|
-
),
|
|
29
|
-
)
|
|
30
|
-
.Decode((value) => ({
|
|
31
|
-
...value,
|
|
32
|
-
type: typeString, // enum → string
|
|
33
|
-
}))
|
|
34
|
-
.Encode((value) => ({
|
|
35
|
-
...value,
|
|
36
|
-
type: typeEnum, // string → enum
|
|
37
|
-
})) as never;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const NativeTokenTransfer = Permission(
|
|
41
|
-
"native-token-transfer",
|
|
42
|
-
PermissionType.NATIVE_TOKEN_TRANSFER,
|
|
43
|
-
Type.Object({
|
|
44
|
-
allowance: TypeHex(),
|
|
45
|
-
}),
|
|
46
|
-
"allows transfer of native tokens from the account",
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
const Erc20TokenTransfer = Permission(
|
|
50
|
-
"erc20-token-transfer",
|
|
51
|
-
PermissionType.ERC20_TOKEN_TRANSFER,
|
|
52
|
-
Type.Object({
|
|
53
|
-
allowance: TypeHex(),
|
|
54
|
-
address: TypeAddress,
|
|
55
|
-
}),
|
|
56
|
-
"allows transfer or approval of erc20 tokens from the account",
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
const GasLimit = Permission(
|
|
60
|
-
"gas-limit",
|
|
61
|
-
PermissionType.GAS_LIMIT,
|
|
62
|
-
Type.Object({
|
|
63
|
-
limit: TypeHex(),
|
|
64
|
-
}),
|
|
65
|
-
"allows the key to spend gas for UOs",
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
const ContractAccess = Permission(
|
|
69
|
-
"contract-access",
|
|
70
|
-
PermissionType.CONTRACT_ACCESS,
|
|
71
|
-
Type.Object({
|
|
72
|
-
address: TypeAddress,
|
|
73
|
-
}),
|
|
74
|
-
"grants access to all functions in a contract",
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
const AccountFunction = Permission(
|
|
78
|
-
"account-functions",
|
|
79
|
-
PermissionType.ACCOUNT_FUNCTIONS,
|
|
80
|
-
Type.Object({
|
|
81
|
-
functions: Type.Array(TypeHex(), { minItems: 1 }),
|
|
82
|
-
}),
|
|
83
|
-
"grants access to functions in the account",
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
const AllExternalFunctionAccess = Permission(
|
|
87
|
-
"functions-on-all-contracts",
|
|
88
|
-
PermissionType.FUNCTIONS_ON_ALL_CONTRACTS,
|
|
89
|
-
Type.Object({
|
|
90
|
-
functions: Type.Array(TypeHex(), { minItems: 1 }),
|
|
91
|
-
}),
|
|
92
|
-
"access to a function selector in any address or contract",
|
|
93
|
-
);
|
|
94
|
-
|
|
95
|
-
const ContractFunctionAccess = Permission(
|
|
96
|
-
"functions-on-contract",
|
|
97
|
-
PermissionType.FUNCTIONS_ON_CONTRACT,
|
|
98
|
-
Type.Object({
|
|
99
|
-
address: TypeAddress,
|
|
100
|
-
functions: Type.Array(TypeHex(), { minItems: 1 }),
|
|
101
|
-
}),
|
|
102
|
-
"grants access to specified functions on a specific contract",
|
|
103
|
-
);
|
|
104
|
-
|
|
105
|
-
const Root = Permission(
|
|
106
|
-
"root",
|
|
107
|
-
PermissionType.ROOT,
|
|
108
|
-
Type.Optional(Type.Never()),
|
|
109
|
-
"grants full access to everything",
|
|
110
|
-
);
|
|
111
|
-
|
|
112
|
-
export const TypePermission = Type.Union([
|
|
113
|
-
// 7715 permissions
|
|
114
|
-
NativeTokenTransfer,
|
|
115
|
-
Erc20TokenTransfer,
|
|
116
|
-
GasLimit,
|
|
117
|
-
// additional permissions
|
|
118
|
-
ContractAccess,
|
|
119
|
-
AccountFunction,
|
|
120
|
-
AllExternalFunctionAccess,
|
|
121
|
-
ContractFunctionAccess,
|
|
122
|
-
Root,
|
|
123
|
-
]);
|
|
124
|
-
|
|
125
|
-
export const PermissionsArray = Type.Array(TypePermission, { minItems: 1 });
|
|
126
|
-
|
|
127
|
-
export const PermissionsContext = Type.Object({
|
|
128
|
-
context: TypeHex(),
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
export const PermissionsData = Type.Object({
|
|
132
|
-
chainId: TypeHex(),
|
|
133
|
-
expiry: Type.Optional(Type.Number()),
|
|
134
|
-
key: KeySigner,
|
|
135
|
-
permissions: PermissionsArray,
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
export const PermissionsCapability = Type.Union([
|
|
139
|
-
PermissionsContext,
|
|
140
|
-
// TODO: support permissions object here instead of only context-encoded permissions
|
|
141
|
-
// PermissionsData,
|
|
142
|
-
]);
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import { PermissionType } from "@account-kit/smart-contracts/experimental";
|
|
2
|
-
import type { Static } from "@sinclair/typebox";
|
|
3
|
-
import { concatHex, sliceHex, type Hex } from "viem";
|
|
4
|
-
import type { PermissionsData } from ".";
|
|
5
|
-
import type { KeySigner } from "../../schemas";
|
|
6
|
-
import { assertNever } from "../../utils.js";
|
|
7
|
-
|
|
8
|
-
export const SESSION_ID_LENGTH_BYTES = 16;
|
|
9
|
-
export const ENTITY_ID_LENGTH_BYTES = 4;
|
|
10
|
-
|
|
11
|
-
export const PermissionsContextVersion = {
|
|
12
|
-
REMOTE_MODE_DEFERRED_ACTION: "0x00",
|
|
13
|
-
LOCAL_MODE_DEFERRED_ACTION: "0x01",
|
|
14
|
-
NON_DEFERRED_ACTION: "0x02",
|
|
15
|
-
} as const;
|
|
16
|
-
|
|
17
|
-
type ContextVersionHex =
|
|
18
|
-
(typeof PermissionsContextVersion)[keyof typeof PermissionsContextVersion];
|
|
19
|
-
|
|
20
|
-
type DecodedPermissionsContext = {
|
|
21
|
-
contextVersion: keyof typeof PermissionsContextVersion;
|
|
22
|
-
} & (
|
|
23
|
-
| {
|
|
24
|
-
contextVersion: "REMOTE_MODE_DEFERRED_ACTION";
|
|
25
|
-
sessionId: Hex;
|
|
26
|
-
signature: Hex;
|
|
27
|
-
deferredAction?: never;
|
|
28
|
-
}
|
|
29
|
-
| {
|
|
30
|
-
contextVersion: "LOCAL_MODE_DEFERRED_ACTION";
|
|
31
|
-
deferredAction: Hex;
|
|
32
|
-
sessionId?: never;
|
|
33
|
-
signature?: never;
|
|
34
|
-
}
|
|
35
|
-
| {
|
|
36
|
-
contextVersion: "NON_DEFERRED_ACTION";
|
|
37
|
-
deferredAction?: never;
|
|
38
|
-
sessionId?: never;
|
|
39
|
-
signature?: never;
|
|
40
|
-
entityId: Hex;
|
|
41
|
-
isGlobalValidation: boolean;
|
|
42
|
-
}
|
|
43
|
-
);
|
|
44
|
-
|
|
45
|
-
export const encodePermissionsContext = (
|
|
46
|
-
context: DecodedPermissionsContext,
|
|
47
|
-
): Hex => {
|
|
48
|
-
switch (context.contextVersion) {
|
|
49
|
-
case "REMOTE_MODE_DEFERRED_ACTION":
|
|
50
|
-
return concatHex([
|
|
51
|
-
PermissionsContextVersion.REMOTE_MODE_DEFERRED_ACTION,
|
|
52
|
-
context.sessionId,
|
|
53
|
-
context.signature,
|
|
54
|
-
]);
|
|
55
|
-
case "LOCAL_MODE_DEFERRED_ACTION":
|
|
56
|
-
return concatHex([
|
|
57
|
-
PermissionsContextVersion.LOCAL_MODE_DEFERRED_ACTION,
|
|
58
|
-
context.deferredAction,
|
|
59
|
-
]);
|
|
60
|
-
case "NON_DEFERRED_ACTION":
|
|
61
|
-
return concatHex([
|
|
62
|
-
PermissionsContextVersion.NON_DEFERRED_ACTION,
|
|
63
|
-
context.isGlobalValidation ? "0x01" : "0x00",
|
|
64
|
-
context.entityId,
|
|
65
|
-
]);
|
|
66
|
-
default:
|
|
67
|
-
return assertNever(context, "Unexpected context version");
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
export const decodePermissionsContext = (
|
|
72
|
-
input: Hex,
|
|
73
|
-
): DecodedPermissionsContext => {
|
|
74
|
-
const contextVersion = sliceHex(input, 0, 1) as ContextVersionHex;
|
|
75
|
-
switch (contextVersion) {
|
|
76
|
-
case "0x00": {
|
|
77
|
-
const sessionId = sliceHex(input, 1, SESSION_ID_LENGTH_BYTES + 1);
|
|
78
|
-
const signature = sliceHex(input, SESSION_ID_LENGTH_BYTES + 1);
|
|
79
|
-
return {
|
|
80
|
-
contextVersion: "REMOTE_MODE_DEFERRED_ACTION",
|
|
81
|
-
sessionId,
|
|
82
|
-
signature,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
case "0x01": {
|
|
86
|
-
const deferredAction = sliceHex(input, 1);
|
|
87
|
-
return {
|
|
88
|
-
contextVersion: "LOCAL_MODE_DEFERRED_ACTION",
|
|
89
|
-
deferredAction,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
case "0x02": {
|
|
93
|
-
const isGlobalValidation = sliceHex(input, 1, 2) === "0x01";
|
|
94
|
-
const entityId = sliceHex(input, 2, ENTITY_ID_LENGTH_BYTES + 2);
|
|
95
|
-
return {
|
|
96
|
-
contextVersion: "NON_DEFERRED_ACTION",
|
|
97
|
-
isGlobalValidation,
|
|
98
|
-
entityId,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
default:
|
|
102
|
-
return assertNever(
|
|
103
|
-
contextVersion,
|
|
104
|
-
`Unexpected context version: ${contextVersion}`,
|
|
105
|
-
);
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
export const prefixSignatureKeyType = (
|
|
110
|
-
sig: Hex,
|
|
111
|
-
type: KeySigner["type"],
|
|
112
|
-
): Hex => {
|
|
113
|
-
switch (type) {
|
|
114
|
-
case "secp256k1":
|
|
115
|
-
return concatHex(["0x00", sig]);
|
|
116
|
-
case "contract":
|
|
117
|
-
return concatHex(["0x01", sig]);
|
|
118
|
-
default:
|
|
119
|
-
return assertNever(type, "Unexpected session key type");
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
export const isGlobalValidation = (
|
|
124
|
-
data: Pick<Static<typeof PermissionsData>, "permissions">,
|
|
125
|
-
): boolean => {
|
|
126
|
-
return data.permissions.some((p) => p.type === PermissionType.ROOT);
|
|
127
|
-
};
|
package/src/rpc/request.ts
DELETED
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import { Type } from "@sinclair/typebox";
|
|
2
|
-
import { Capabilities } from "../capabilities/index.js";
|
|
3
|
-
import {
|
|
4
|
-
PermissionsContext,
|
|
5
|
-
PermissionsData,
|
|
6
|
-
} from "../capabilities/permissions/index.js";
|
|
7
|
-
import {
|
|
8
|
-
TypeAddress,
|
|
9
|
-
TypeBase64UrlEncodedString,
|
|
10
|
-
TypeCreationOptions,
|
|
11
|
-
TypeHex,
|
|
12
|
-
TypeSerializedInitcode,
|
|
13
|
-
TypeSignatureRequest,
|
|
14
|
-
TypeUserOperationRequest_v6,
|
|
15
|
-
TypeUserOperationRequest_v7,
|
|
16
|
-
TypeUuid,
|
|
17
|
-
} from "../schemas.js";
|
|
18
|
-
|
|
19
|
-
export const wallet_sendPreparedCalls = Type.Object(
|
|
20
|
-
{
|
|
21
|
-
Request: Type.Object({
|
|
22
|
-
method: Type.Literal("wallet_sendPreparedCalls"),
|
|
23
|
-
params: Type.Tuple([
|
|
24
|
-
Type.Object({
|
|
25
|
-
type: Type.Union([
|
|
26
|
-
Type.Literal("user-operation-v060"),
|
|
27
|
-
Type.Literal("user-operation-v070"),
|
|
28
|
-
]),
|
|
29
|
-
data: Type.Union([
|
|
30
|
-
Type.Omit(TypeUserOperationRequest_v6, ["signature"]),
|
|
31
|
-
Type.Omit(TypeUserOperationRequest_v7, ["signature"]),
|
|
32
|
-
]),
|
|
33
|
-
chainId: TypeHex(),
|
|
34
|
-
signature: Type.Object({
|
|
35
|
-
type: Type.Transform(Type.String())
|
|
36
|
-
.Decode((value) => {
|
|
37
|
-
if (value.toLowerCase() !== "ecdsa") {
|
|
38
|
-
throw new Error("Invalid signature type, must be 'ecdsa'");
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return "ecdsa" as const;
|
|
42
|
-
})
|
|
43
|
-
.Encode((value) => value),
|
|
44
|
-
signature: TypeHex(),
|
|
45
|
-
}),
|
|
46
|
-
capabilities: Type.Optional(
|
|
47
|
-
Type.Object({ permissions: PermissionsContext }),
|
|
48
|
-
),
|
|
49
|
-
}),
|
|
50
|
-
]),
|
|
51
|
-
}),
|
|
52
|
-
ReturnType: Type.Object({
|
|
53
|
-
preparedCallIds: Type.Array(TypeHex()),
|
|
54
|
-
}),
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
description:
|
|
58
|
-
"This method is used after signing the signatureRequest returned from prepareCalls to submit a user operation",
|
|
59
|
-
},
|
|
60
|
-
);
|
|
61
|
-
|
|
62
|
-
export const wallet_prepareCalls = Type.Object(
|
|
63
|
-
{
|
|
64
|
-
Request: Type.Object({
|
|
65
|
-
method: Type.Literal("wallet_prepareCalls"),
|
|
66
|
-
params: Type.Tuple([
|
|
67
|
-
Type.Object({
|
|
68
|
-
calls: Type.Array(
|
|
69
|
-
Type.Object({
|
|
70
|
-
to: TypeAddress,
|
|
71
|
-
data: Type.Optional(TypeHex()),
|
|
72
|
-
value: Type.Optional(TypeHex()),
|
|
73
|
-
}),
|
|
74
|
-
),
|
|
75
|
-
from: TypeAddress,
|
|
76
|
-
chainId: TypeHex(),
|
|
77
|
-
capabilities: Type.Optional(Capabilities),
|
|
78
|
-
}),
|
|
79
|
-
]),
|
|
80
|
-
}),
|
|
81
|
-
ReturnType: Type.Object({
|
|
82
|
-
type: Type.Union([
|
|
83
|
-
Type.Literal("user-operation-v060"),
|
|
84
|
-
Type.Literal("user-operation-v070"),
|
|
85
|
-
]),
|
|
86
|
-
data: Type.Union([
|
|
87
|
-
Type.Omit(TypeUserOperationRequest_v6, ["signature"]),
|
|
88
|
-
Type.Omit(TypeUserOperationRequest_v7, ["signature"]),
|
|
89
|
-
]),
|
|
90
|
-
chainId: TypeHex(),
|
|
91
|
-
signatureRequest: TypeSignatureRequest,
|
|
92
|
-
}),
|
|
93
|
-
},
|
|
94
|
-
{
|
|
95
|
-
description:
|
|
96
|
-
"This method is used to prepare a user operation for submission. It will return a built user operation and a signature request which needs to be signed by the user before submitting to wallet_sendPreparedCalls",
|
|
97
|
-
},
|
|
98
|
-
);
|
|
99
|
-
|
|
100
|
-
export const wallet_requestAccount = Type.Object(
|
|
101
|
-
{
|
|
102
|
-
Request: Type.Object({
|
|
103
|
-
method: Type.Literal("wallet_requestAccount"),
|
|
104
|
-
params: Type.Tuple([
|
|
105
|
-
Type.Union([
|
|
106
|
-
Type.Object({
|
|
107
|
-
signerAddress: TypeAddress,
|
|
108
|
-
id: Type.Optional(TypeUuid),
|
|
109
|
-
creationHint: TypeCreationOptions,
|
|
110
|
-
includeCounterfactualInfo: Type.Optional(
|
|
111
|
-
Type.Boolean({ default: false }),
|
|
112
|
-
),
|
|
113
|
-
}),
|
|
114
|
-
Type.Object({
|
|
115
|
-
accountAddress: TypeAddress,
|
|
116
|
-
includeCounterfactualInfo: Type.Optional(
|
|
117
|
-
Type.Boolean({ default: false }),
|
|
118
|
-
),
|
|
119
|
-
}),
|
|
120
|
-
]),
|
|
121
|
-
]),
|
|
122
|
-
}),
|
|
123
|
-
ReturnType: Type.Object({
|
|
124
|
-
accountAddress: TypeAddress,
|
|
125
|
-
id: TypeUuid,
|
|
126
|
-
counterfactualInfo: Type.Optional(TypeSerializedInitcode),
|
|
127
|
-
}),
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
description: `This method is used to get the smart account address and relevant info for a given signer. If an account does not already exist for a given signer, this method will create one before returning the counterfactual address.`,
|
|
131
|
-
},
|
|
132
|
-
);
|
|
133
|
-
|
|
134
|
-
export const wallet_createAccount = Type.Object(
|
|
135
|
-
{
|
|
136
|
-
Request: Type.Object({
|
|
137
|
-
method: Type.Literal("wallet_createAccount"),
|
|
138
|
-
params: Type.Tuple([
|
|
139
|
-
Type.Object({
|
|
140
|
-
signerAddress: TypeAddress,
|
|
141
|
-
id: Type.Optional(TypeUuid),
|
|
142
|
-
creationOptions: TypeCreationOptions,
|
|
143
|
-
}),
|
|
144
|
-
]),
|
|
145
|
-
}),
|
|
146
|
-
ReturnType: Type.Object({
|
|
147
|
-
accountAddress: TypeAddress,
|
|
148
|
-
id: TypeUuid,
|
|
149
|
-
}),
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
description: `This method is used to create a smart account for a given signer. This method is primarly used to import existing accounts. For most cases, you should use wallet_requestAccount instead.`,
|
|
153
|
-
},
|
|
154
|
-
);
|
|
155
|
-
|
|
156
|
-
export const wallet_listAccounts = Type.Object(
|
|
157
|
-
{
|
|
158
|
-
Request: Type.Object({
|
|
159
|
-
method: Type.Literal("wallet_listAccounts"),
|
|
160
|
-
params: Type.Tuple([
|
|
161
|
-
Type.Object({
|
|
162
|
-
signerAddress: TypeAddress,
|
|
163
|
-
limit: Type.Optional(
|
|
164
|
-
Type.Number({ minimum: 1, maximum: 100, default: 100 }),
|
|
165
|
-
),
|
|
166
|
-
after: Type.Optional(TypeBase64UrlEncodedString),
|
|
167
|
-
}),
|
|
168
|
-
]),
|
|
169
|
-
}),
|
|
170
|
-
ReturnType: Type.Object({
|
|
171
|
-
accounts: Type.Array(
|
|
172
|
-
Type.Object({
|
|
173
|
-
accountAddress: TypeAddress,
|
|
174
|
-
id: TypeUuid,
|
|
175
|
-
}),
|
|
176
|
-
),
|
|
177
|
-
meta: Type.Object({
|
|
178
|
-
totalCount: Type.Number(),
|
|
179
|
-
after: Type.Union([TypeBase64UrlEncodedString, Type.Null()]),
|
|
180
|
-
}),
|
|
181
|
-
}),
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
description:
|
|
185
|
-
"This method is used to list all smart accounts for a given signer.",
|
|
186
|
-
},
|
|
187
|
-
);
|
|
188
|
-
|
|
189
|
-
export const wallet_createSession = Type.Object(
|
|
190
|
-
{
|
|
191
|
-
Request: Type.Object({
|
|
192
|
-
method: Type.Literal("wallet_createSession"),
|
|
193
|
-
params: Type.Tuple([
|
|
194
|
-
Type.Intersect([
|
|
195
|
-
PermissionsData,
|
|
196
|
-
Type.Object({ account: TypeAddress }),
|
|
197
|
-
]),
|
|
198
|
-
]),
|
|
199
|
-
}),
|
|
200
|
-
ReturnType: Type.Object({
|
|
201
|
-
sessionId: TypeHex(),
|
|
202
|
-
signatureRequest: TypeSignatureRequest,
|
|
203
|
-
}),
|
|
204
|
-
},
|
|
205
|
-
{
|
|
206
|
-
description:
|
|
207
|
-
"This method is used to create a session for a given address with specified permissions.",
|
|
208
|
-
},
|
|
209
|
-
);
|
|
210
|
-
|
|
211
|
-
export const wallet_getCallsStatus = Type.Object(
|
|
212
|
-
{
|
|
213
|
-
Request: Type.Object({
|
|
214
|
-
method: Type.Literal("wallet_getCallsStatus"),
|
|
215
|
-
params: Type.Tuple([
|
|
216
|
-
TypeHex({
|
|
217
|
-
description: "The call ID returned from wallet_sendPreparedCalls",
|
|
218
|
-
}),
|
|
219
|
-
]),
|
|
220
|
-
}),
|
|
221
|
-
ReturnType: Type.Object({
|
|
222
|
-
id: TypeHex(),
|
|
223
|
-
chainId: TypeHex(),
|
|
224
|
-
atomic: Type.Boolean(),
|
|
225
|
-
status: Type.Union([
|
|
226
|
-
Type.Literal(100, {
|
|
227
|
-
description:
|
|
228
|
-
"Batch has been received by the wallet but has not completed execution onchain",
|
|
229
|
-
}),
|
|
230
|
-
Type.Literal(200, {
|
|
231
|
-
description:
|
|
232
|
-
"Batch has been included onchain without reverts, receipts array contains info of all calls",
|
|
233
|
-
}),
|
|
234
|
-
Type.Literal(400, {
|
|
235
|
-
description:
|
|
236
|
-
"Batch has not been included onchain and wallet will not retry",
|
|
237
|
-
}),
|
|
238
|
-
Type.Literal(500, {
|
|
239
|
-
description:
|
|
240
|
-
"Batch reverted *completely* and only changes related to gas charge may have been included onchain",
|
|
241
|
-
}),
|
|
242
|
-
Type.Literal(600, {
|
|
243
|
-
description:
|
|
244
|
-
"Batch reverted *partially* and some changes related to batch calls may have been included onchain",
|
|
245
|
-
}),
|
|
246
|
-
]),
|
|
247
|
-
receipts: Type.Optional(
|
|
248
|
-
Type.Array(
|
|
249
|
-
Type.Object({
|
|
250
|
-
logs: Type.Array(
|
|
251
|
-
Type.Object({
|
|
252
|
-
address: TypeAddress,
|
|
253
|
-
data: TypeHex(),
|
|
254
|
-
topics: Type.Array(TypeHex()),
|
|
255
|
-
}),
|
|
256
|
-
),
|
|
257
|
-
status: TypeHex({
|
|
258
|
-
description: "0x1 for success, 0x0 for failure",
|
|
259
|
-
}),
|
|
260
|
-
blockHash: TypeHex(),
|
|
261
|
-
blockNumber: TypeHex(),
|
|
262
|
-
gasUsed: TypeHex(),
|
|
263
|
-
transactionHash: TypeHex(),
|
|
264
|
-
}),
|
|
265
|
-
),
|
|
266
|
-
),
|
|
267
|
-
}),
|
|
268
|
-
},
|
|
269
|
-
{
|
|
270
|
-
description:
|
|
271
|
-
"This method is used to get the status of calls IDs returned from wallet_sendPreparedCalls.",
|
|
272
|
-
},
|
|
273
|
-
);
|
package/src/rpc/schema.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { type Static, type StaticDecode } from "@sinclair/typebox";
|
|
2
|
-
import { RpcSchema } from "ox";
|
|
3
|
-
import * as Requests from "./request.js";
|
|
4
|
-
|
|
5
|
-
export const WalletServerRpcSchema = RpcSchema.from<
|
|
6
|
-
| Static<typeof Requests.wallet_prepareCalls>
|
|
7
|
-
| StaticDecode<typeof Requests.wallet_sendPreparedCalls>
|
|
8
|
-
| Static<typeof Requests.wallet_createAccount>
|
|
9
|
-
| Static<typeof Requests.wallet_requestAccount>
|
|
10
|
-
| Static<typeof Requests.wallet_listAccounts>
|
|
11
|
-
| Static<typeof Requests.wallet_createSession>
|
|
12
|
-
| Static<typeof Requests.wallet_getCallsStatus>
|
|
13
|
-
>();
|
|
14
|
-
|
|
15
|
-
export type WalletServerRpcSchemaType = typeof WalletServerRpcSchema;
|
|
16
|
-
|
|
17
|
-
type MethodToViemRpcSchema = {
|
|
18
|
-
[K in WalletServerRpcSchemaType["Request"]["method"]]: {
|
|
19
|
-
Method: K;
|
|
20
|
-
Parameters: Extract<
|
|
21
|
-
WalletServerRpcSchemaType["Request"],
|
|
22
|
-
{ method: K }
|
|
23
|
-
>["params"];
|
|
24
|
-
ReturnType: Extract<
|
|
25
|
-
WalletServerRpcSchemaType,
|
|
26
|
-
{ Request: { method: K } }
|
|
27
|
-
>["ReturnType"];
|
|
28
|
-
};
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
// TODO: figure out how we can do this without manually listing all the methods
|
|
32
|
-
export type WalletServerViemRpcSchema = [
|
|
33
|
-
MethodToViemRpcSchema["wallet_createAccount"],
|
|
34
|
-
MethodToViemRpcSchema["wallet_requestAccount"],
|
|
35
|
-
MethodToViemRpcSchema["wallet_listAccounts"],
|
|
36
|
-
MethodToViemRpcSchema["wallet_prepareCalls"],
|
|
37
|
-
MethodToViemRpcSchema["wallet_sendPreparedCalls"],
|
|
38
|
-
MethodToViemRpcSchema["wallet_getCallsStatus"],
|
|
39
|
-
MethodToViemRpcSchema["wallet_createSession"],
|
|
40
|
-
];
|