@metamask/keyring-api 1.1.0 → 2.0.0
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/CHANGELOG.md +28 -1
- package/README.md +7 -7
- package/dist/KeyringSnapControllerClient.d.ts +3 -2
- package/dist/KeyringSnapControllerClient.js.map +1 -1
- package/dist/api.d.ts +13 -7
- package/dist/api.js +10 -2
- package/dist/api.js.map +1 -1
- package/dist/eth/erc4337/index.d.ts +1 -0
- package/dist/eth/erc4337/index.js +18 -0
- package/dist/eth/erc4337/index.js.map +1 -0
- package/dist/eth/erc4337/types.d.ts +90 -0
- package/dist/eth/erc4337/types.js +58 -0
- package/dist/eth/erc4337/types.js.map +1 -0
- package/dist/eth/index.d.ts +2 -0
- package/dist/eth/index.js +19 -0
- package/dist/eth/index.js.map +1 -0
- package/dist/eth/types.d.ts +3 -0
- package/dist/eth/types.js +8 -0
- package/dist/eth/types.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/api.d.ts +38 -26
- package/dist/internal/eth/EthKeyring.d.ts +29 -0
- package/dist/internal/eth/EthKeyring.js +3 -0
- package/dist/internal/eth/EthKeyring.js.map +1 -0
- package/dist/internal/eth/index.d.ts +1 -0
- package/dist/internal/eth/index.js +18 -0
- package/dist/internal/eth/index.js.map +1 -0
- package/dist/internal/events.d.ts +30 -20
- package/dist/internal/index.d.ts +1 -0
- package/dist/internal/index.js +1 -0
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/types.d.ts +8 -5
- package/dist/snap-utils.d.ts +2 -2
- package/dist/snap-utils.js.map +1 -1
- package/dist/superstruct.d.ts +14 -0
- package/dist/superstruct.js +18 -1
- package/dist/superstruct.js.map +1 -1
- package/dist/utils.js +2 -2
- package/dist/utils.js.map +1 -1
- package/package.json +5 -5
- package/dist/superstruct.test-d.d.ts +0 -1
- package/dist/superstruct.test-d.js +0 -17
- package/dist/superstruct.test-d.js.map +0 -1
package/CHANGELOG.md
CHANGED
@@ -7,6 +7,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## [2.0.0]
|
11
|
+
|
12
|
+
### Added
|
13
|
+
|
14
|
+
- **BREAKING**: Add support for ERC-4337 transactions ([#213](https://github.com/MetaMask/keyring-api/pull/213))
|
15
|
+
- Enum `EthMethods` has been extended with `eth_prepareUserOperation`, `eth_patchUserOperation`, `eth_signUserOperation`
|
16
|
+
- Enum `EthAccountType` has been extended with `eip155:erc4337`
|
17
|
+
|
18
|
+
### Changed
|
19
|
+
|
20
|
+
- **BREAKING**: Update `@metamask/providers` from `^13.0.0` to `^14.0.1` ([#209](https://github.com/MetaMask/keyring-api/pull/209))
|
21
|
+
- Consolidation on `readable-stream@^3.6.2`. Users should upgrade to `extension-port-stream@^3.0.0` and `json-rpc-middleware-stream@^5.0.0`.
|
22
|
+
- Replace deprecated `@metamask/snaps-ui` with `@metamask/snaps-sdk` ([#204](https://github.com/MetaMask/keyring-api/pull/204))
|
23
|
+
- Replace `@metamask/snaps-rpc-methods` with `@metamask/snaps-sdk`
|
24
|
+
- Update `@metamask/snaps-controllers` and `@metamask/snaps-utils` to versions that don't rely on `@metamask/snaps-ui`
|
25
|
+
- Documentation updates ([#185](https://github.com/MetaMask/keyring-api/pull/185)) ([#201](https://github.com/MetaMask/keyring-api/pull/201))
|
26
|
+
|
27
|
+
### Removed
|
28
|
+
|
29
|
+
- **BREAKING** `EthAccountType.Eip4337` has been removed. `eip155:eip4337` should be replaced with `erc:4337`
|
30
|
+
|
31
|
+
### Fixed
|
32
|
+
|
33
|
+
- Exclude `*.test-d.ts` files from builds ([#184](https://github.com/MetaMask/keyring-api/pull/184))
|
34
|
+
- Remove `@metamask/snaps-ui` from dependency tree ([#204](https://github.com/MetaMask/keyring-api/pull/204))
|
35
|
+
|
10
36
|
## [1.1.0]
|
11
37
|
|
12
38
|
### Changed
|
@@ -162,7 +188,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
162
188
|
- SnapController keyring client. It is intended to be used by MetaMask to talk to the snap.
|
163
189
|
- Helper functions to create keyring handler in the snap.
|
164
190
|
|
165
|
-
[Unreleased]: https://github.com/MetaMask/keyring-api/compare/
|
191
|
+
[Unreleased]: https://github.com/MetaMask/keyring-api/compare/v2.0.0...HEAD
|
192
|
+
[2.0.0]: https://github.com/MetaMask/keyring-api/compare/v1.1.0...v2.0.0
|
166
193
|
[1.1.0]: https://github.com/MetaMask/keyring-api/compare/v1.0.0...v1.1.0
|
167
194
|
[1.0.0]: https://github.com/MetaMask/keyring-api/compare/v1.0.0-rc.1...v1.0.0
|
168
195
|
[1.0.0-rc.1]: https://github.com/MetaMask/keyring-api/compare/v0.2.7...v1.0.0-rc.1
|
package/README.md
CHANGED
@@ -37,7 +37,7 @@ npm install @metamask/keyring-api
|
|
37
37
|
|
38
38
|
## Account Snaps
|
39
39
|
|
40
|
-
>
|
40
|
+
> :point_up: **Important**: Before implementing your Snap, please make sure to
|
41
41
|
> read the [security recommendations](./docs/security.md) and the [architecture
|
42
42
|
> document](./docs/architecture.md).
|
43
43
|
|
@@ -45,7 +45,7 @@ Starting with MetaMask 11.4, Snaps can implement the Keyring API. This allows
|
|
45
45
|
users to manage their accounts in a more flexible way, and enables developers
|
46
46
|
to build new types of accounts.
|
47
47
|
|
48
|
-
>
|
48
|
+
> :pencil2: **Note:** You can also build MetaMask from [source][extension-repo]
|
49
49
|
> from the `develop` branch.
|
50
50
|
|
51
51
|
Follow these steps to implement the Keyring API in your Snap. Please note that
|
@@ -62,14 +62,14 @@ these instruction assume that you are already familiar with the process of
|
|
62
62
|
}
|
63
63
|
```
|
64
64
|
|
65
|
-
>
|
65
|
+
> :point_up: **Important**: Ensure that your keyring implements the [methods
|
66
66
|
> called by MetaMask][exposed-methods], otherwise some features may not
|
67
67
|
> work.
|
68
68
|
|
69
69
|
2. **Handle requests submitted by MetaMask:**
|
70
70
|
|
71
71
|
MetaMask will submit requests through the `submitRequest` method of your the
|
72
|
-
Keyring API (check the supported [EVM methods](./docs/
|
72
|
+
Keyring API (check the supported [EVM methods](./docs/evm-methods.md)). Here
|
73
73
|
is an example of request:
|
74
74
|
|
75
75
|
```json
|
@@ -178,7 +178,7 @@ these instruction assume that you are already familiar with the process of
|
|
178
178
|
|
179
179
|
MetaMask will return an error if the request does not exist.
|
180
180
|
|
181
|
-
>
|
181
|
+
> :pencil2: **Note:** This only applies to Snaps that implement the
|
182
182
|
> [asynchronous transaction flow][async-flow].
|
183
183
|
|
184
184
|
5. When a request is rejected:
|
@@ -196,7 +196,7 @@ these instruction assume that you are already familiar with the process of
|
|
196
196
|
|
197
197
|
MetaMask will return an error if the request does not exist.
|
198
198
|
|
199
|
-
>
|
199
|
+
> :pencil2: **Note:** This only applies to Snaps that implement the
|
200
200
|
> [asynchronous transaction flow][async-flow].
|
201
201
|
|
202
202
|
4. **Expose the Keyring API:**
|
@@ -283,7 +283,7 @@ implementation:
|
|
283
283
|
emitSnapKeyringEvent(snap, KeyringEvent.RequestRejected, { id: request.id });
|
284
284
|
```
|
285
285
|
|
286
|
-
>
|
286
|
+
> :point_up: **Important**: For all events above, MetaMask may return an error
|
287
287
|
> indicating that the event was not handled, possibly because it contains
|
288
288
|
> invalid arguments.
|
289
289
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import type { SnapController } from '@metamask/snaps-controllers';
|
2
|
+
import type { SnapId } from '@metamask/snaps-sdk';
|
2
3
|
import type { HandlerType } from '@metamask/snaps-utils';
|
3
4
|
import { KeyringClient } from './KeyringClient';
|
4
5
|
/**
|
@@ -22,7 +23,7 @@ export declare class KeyringSnapControllerClient extends KeyringClient {
|
|
22
23
|
*/
|
23
24
|
constructor({ controller, snapId, origin, handler, }: {
|
24
25
|
controller: SnapController;
|
25
|
-
snapId?:
|
26
|
+
snapId?: SnapId;
|
26
27
|
origin?: string;
|
27
28
|
handler?: HandlerType;
|
28
29
|
});
|
@@ -34,7 +35,7 @@ export declare class KeyringSnapControllerClient extends KeyringClient {
|
|
34
35
|
* @returns A new instance of `KeyringSnapControllerClient` with the
|
35
36
|
* specified snap ID.
|
36
37
|
*/
|
37
|
-
withSnapId(snapId:
|
38
|
+
withSnapId(snapId: SnapId): KeyringSnapControllerClient;
|
38
39
|
/**
|
39
40
|
* Get the `SnapController` instance used by this client.
|
40
41
|
*
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"KeyringSnapControllerClient.js","sourceRoot":"","sources":["../src/KeyringSnapControllerClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
1
|
+
{"version":3,"file":"KeyringSnapControllerClient.js","sourceRoot":"","sources":["../src/KeyringSnapControllerClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAMA,mDAA6D;AAE7D;;;GAGG;AACH,MAAM,oBAAoB;IASxB;;;;;;;OAOG;IACH,YACE,UAAe,EACf,MAAc,EACd,MAAc,EACd,OAAoB;QApBtB,+CAAgB;QAEhB,+CAAgB;QAEhB,mDAA4B;QAE5B,gDAAsB;QAgBpB,uBAAA,IAAI,oCAAe,UAAU,MAAA,CAAC;QAC9B,uBAAA,IAAI,gCAAW,MAAM,MAAA,CAAC;QACtB,uBAAA,IAAI,gCAAW,MAAM,MAAA,CAAC;QACtB,uBAAA,IAAI,iCAAY,OAAO,MAAA,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,OAAuB;QAChC,OAAO,uBAAA,IAAI,wCAAY,CAAC,aAAa,CAAC;YACpC,MAAM,EAAE,uBAAA,IAAI,oCAAQ;YACpB,MAAM,EAAE,uBAAA,IAAI,oCAAQ;YACpB,OAAO,EAAE,uBAAA,IAAI,qCAAS;YACtB,OAAO;SACR,CAAkB,CAAC;IACtB,CAAC;CACF;;AAED;;;GAGG;AACH,MAAa,2BAA4B,SAAQ,6BAAa;IAG5D;;;;;;;;;;;;OAYG;IACH,YAAY,EACV,UAAU,EACV,MAAM,GAAG,WAAqB,EAC9B,MAAM,GAAG,UAAU,EACnB,OAAO,GAAG,kBAAiC,GAM5C;QACC,KAAK,CAAC,IAAI,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QA1BvE,0DAA4B;QA2B1B,uBAAA,IAAI,2CAAe,UAAU,MAAA,CAAC;IAChC,CAAC;IAED;;;;;;;OAOG;IACH,UAAU,CAAC,MAAc;QACvB,OAAO,IAAI,2BAA2B,CAAC;YACrC,UAAU,EAAE,uBAAA,IAAI,+CAAY;YAC5B,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,aAAa;QACX,OAAO,uBAAA,IAAI,+CAAY,CAAC;IAC1B,CAAC;CACF;AAtDD,kEAsDC","sourcesContent":["import type { SnapController } from '@metamask/snaps-controllers';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport type { HandlerType } from '@metamask/snaps-utils';\nimport type { Json } from '@metamask/utils';\n\nimport type { JsonRpcRequest } from './JsonRpcRequest';\nimport { KeyringClient, type Sender } from './KeyringClient';\n\n/**\n * Implementation of the `Sender` interface that can be used to send requests\n * to a snap through a `SnapController`.\n */\nclass SnapControllerSender implements Sender {\n #snapId: SnapId;\n\n #origin: string;\n\n #controller: SnapController;\n\n #handler: HandlerType;\n\n /**\n * Create a new instance of `SnapControllerSender`.\n *\n * @param controller - The `SnapController` instance to send requests to.\n * @param snapId - The ID of the snap to use.\n * @param origin - The sender's origin.\n * @param handler - The handler type.\n */\n constructor(\n controller: any,\n snapId: SnapId,\n origin: string,\n handler: HandlerType,\n ) {\n this.#controller = controller;\n this.#snapId = snapId;\n this.#origin = origin;\n this.#handler = handler;\n }\n\n /**\n * Send a request to the snap and return the response.\n *\n * @param request - JSON-RPC request to send to the snap.\n * @returns A promise that resolves to the response of the request.\n */\n async send(request: JsonRpcRequest): Promise<Json> {\n return this.#controller.handleRequest({\n snapId: this.#snapId,\n origin: this.#origin,\n handler: this.#handler,\n request,\n }) as Promise<Json>;\n }\n}\n\n/**\n * A `KeyringClient` that allows the communication with a snap through the\n * `SnapController`.\n */\nexport class KeyringSnapControllerClient extends KeyringClient {\n #controller: SnapController;\n\n /**\n * Create a new instance of `KeyringSnapControllerClient`.\n *\n * The `handlerType` argument has a hard-coded default `string` value instead\n * of a `HandlerType` value to prevent the `@metamask/snaps-utils` module\n * from being required at runtime.\n *\n * @param args - Constructor arguments.\n * @param args.controller - The `SnapController` instance to use.\n * @param args.snapId - The ID of the snap to use (default: `'undefined'`).\n * @param args.origin - The sender's origin (default: `'metamask'`).\n * @param args.handler - The handler type (default: `'onKeyringRequest'`).\n */\n constructor({\n controller,\n snapId = 'undefined' as SnapId,\n origin = 'metamask',\n handler = 'onKeyringRequest' as HandlerType,\n }: {\n controller: SnapController;\n snapId?: SnapId;\n origin?: string;\n handler?: HandlerType;\n }) {\n super(new SnapControllerSender(controller, snapId, origin, handler));\n this.#controller = controller;\n }\n\n /**\n * Create a new instance of `KeyringSnapControllerClient` with the specified\n * `snapId`.\n *\n * @param snapId - The ID of the snap to use in the new instance.\n * @returns A new instance of `KeyringSnapControllerClient` with the\n * specified snap ID.\n */\n withSnapId(snapId: SnapId): KeyringSnapControllerClient {\n return new KeyringSnapControllerClient({\n controller: this.#controller,\n snapId,\n });\n }\n\n /**\n * Get the `SnapController` instance used by this client.\n *\n * @returns The `SnapController` instance used by this client.\n */\n getController(): SnapController {\n return this.#controller;\n }\n}\n"]}
|
package/dist/api.d.ts
CHANGED
@@ -9,21 +9,24 @@ export declare enum EthMethod {
|
|
9
9
|
SignTransaction = "eth_signTransaction",
|
10
10
|
SignTypedDataV1 = "eth_signTypedData_v1",
|
11
11
|
SignTypedDataV3 = "eth_signTypedData_v3",
|
12
|
-
SignTypedDataV4 = "eth_signTypedData_v4"
|
12
|
+
SignTypedDataV4 = "eth_signTypedData_v4",
|
13
|
+
PrepareUserOperation = "eth_prepareUserOperation",
|
14
|
+
PatchUserOperation = "eth_patchUserOperation",
|
15
|
+
SignUserOperation = "eth_signUserOperation"
|
13
16
|
}
|
14
17
|
/**
|
15
18
|
* Supported Ethereum account types.
|
16
19
|
*/
|
17
20
|
export declare enum EthAccountType {
|
18
21
|
Eoa = "eip155:eoa",
|
19
|
-
|
22
|
+
Erc4337 = "eip155:erc4337"
|
20
23
|
}
|
21
24
|
export declare const KeyringAccountStruct: import("superstruct").Struct<{
|
22
|
-
type: "eip155:eoa" | "eip155:
|
25
|
+
type: "eip155:eoa" | "eip155:erc4337";
|
23
26
|
id: string;
|
24
27
|
address: string;
|
25
28
|
options: Record<string, Json>;
|
26
|
-
methods: ("personal_sign" | "eth_sign" | "eth_signTransaction" | "eth_signTypedData_v1" | "eth_signTypedData_v3" | "eth_signTypedData_v4")[];
|
29
|
+
methods: ("personal_sign" | "eth_sign" | "eth_signTransaction" | "eth_signTypedData_v1" | "eth_signTypedData_v3" | "eth_signTypedData_v4" | "eth_prepareUserOperation" | "eth_patchUserOperation" | "eth_signUserOperation")[];
|
27
30
|
}, {
|
28
31
|
/**
|
29
32
|
* Account ID (UUIDv4).
|
@@ -40,20 +43,23 @@ export declare const KeyringAccountStruct: import("superstruct").Struct<{
|
|
40
43
|
/**
|
41
44
|
* Account supported methods.
|
42
45
|
*/
|
43
|
-
methods: import("superstruct").Struct<("personal_sign" | "eth_sign" | "eth_signTransaction" | "eth_signTypedData_v1" | "eth_signTypedData_v3" | "eth_signTypedData_v4")[], import("superstruct").Struct<"personal_sign" | "eth_sign" | "eth_signTransaction" | "eth_signTypedData_v1" | "eth_signTypedData_v3" | "eth_signTypedData_v4", {
|
46
|
+
methods: import("superstruct").Struct<("personal_sign" | "eth_sign" | "eth_signTransaction" | "eth_signTypedData_v1" | "eth_signTypedData_v3" | "eth_signTypedData_v4" | "eth_prepareUserOperation" | "eth_patchUserOperation" | "eth_signUserOperation")[], import("superstruct").Struct<"personal_sign" | "eth_sign" | "eth_signTransaction" | "eth_signTypedData_v1" | "eth_signTypedData_v3" | "eth_signTypedData_v4" | "eth_prepareUserOperation" | "eth_patchUserOperation" | "eth_signUserOperation", {
|
44
47
|
personal_sign: "personal_sign";
|
45
48
|
eth_sign: "eth_sign";
|
46
49
|
eth_signTransaction: "eth_signTransaction";
|
47
50
|
eth_signTypedData_v1: "eth_signTypedData_v1";
|
48
51
|
eth_signTypedData_v3: "eth_signTypedData_v3";
|
49
52
|
eth_signTypedData_v4: "eth_signTypedData_v4";
|
53
|
+
eth_prepareUserOperation: "eth_prepareUserOperation";
|
54
|
+
eth_patchUserOperation: "eth_patchUserOperation";
|
55
|
+
eth_signUserOperation: "eth_signUserOperation";
|
50
56
|
}>>;
|
51
57
|
/**
|
52
58
|
* Account type.
|
53
59
|
*/
|
54
|
-
type: import("superstruct").Struct<"eip155:eoa" | "eip155:
|
60
|
+
type: import("superstruct").Struct<"eip155:eoa" | "eip155:erc4337", {
|
55
61
|
"eip155:eoa": "eip155:eoa";
|
56
|
-
"eip155:
|
62
|
+
"eip155:erc4337": "eip155:erc4337";
|
57
63
|
}>;
|
58
64
|
}>;
|
59
65
|
/**
|
package/dist/api.js
CHANGED
@@ -10,12 +10,17 @@ const utils_2 = require("./utils");
|
|
10
10
|
*/
|
11
11
|
var EthMethod;
|
12
12
|
(function (EthMethod) {
|
13
|
+
// General signing methods
|
13
14
|
EthMethod["PersonalSign"] = "personal_sign";
|
14
15
|
EthMethod["Sign"] = "eth_sign";
|
15
16
|
EthMethod["SignTransaction"] = "eth_signTransaction";
|
16
17
|
EthMethod["SignTypedDataV1"] = "eth_signTypedData_v1";
|
17
18
|
EthMethod["SignTypedDataV3"] = "eth_signTypedData_v3";
|
18
19
|
EthMethod["SignTypedDataV4"] = "eth_signTypedData_v4";
|
20
|
+
// ERC-4337 methods
|
21
|
+
EthMethod["PrepareUserOperation"] = "eth_prepareUserOperation";
|
22
|
+
EthMethod["PatchUserOperation"] = "eth_patchUserOperation";
|
23
|
+
EthMethod["SignUserOperation"] = "eth_signUserOperation";
|
19
24
|
})(EthMethod = exports.EthMethod || (exports.EthMethod = {}));
|
20
25
|
/**
|
21
26
|
* Supported Ethereum account types.
|
@@ -23,7 +28,7 @@ var EthMethod;
|
|
23
28
|
var EthAccountType;
|
24
29
|
(function (EthAccountType) {
|
25
30
|
EthAccountType["Eoa"] = "eip155:eoa";
|
26
|
-
EthAccountType["
|
31
|
+
EthAccountType["Erc4337"] = "eip155:erc4337";
|
27
32
|
})(EthAccountType = exports.EthAccountType || (exports.EthAccountType = {}));
|
28
33
|
exports.KeyringAccountStruct = (0, superstruct_2.object)({
|
29
34
|
/**
|
@@ -48,11 +53,14 @@ exports.KeyringAccountStruct = (0, superstruct_2.object)({
|
|
48
53
|
`${EthMethod.SignTypedDataV1}`,
|
49
54
|
`${EthMethod.SignTypedDataV3}`,
|
50
55
|
`${EthMethod.SignTypedDataV4}`,
|
56
|
+
`${EthMethod.PrepareUserOperation}`,
|
57
|
+
`${EthMethod.PatchUserOperation}`,
|
58
|
+
`${EthMethod.SignUserOperation}`,
|
51
59
|
])),
|
52
60
|
/**
|
53
61
|
* Account type.
|
54
62
|
*/
|
55
|
-
type: (0, superstruct_1.enums)([`${EthAccountType.Eoa}`, `${EthAccountType.
|
63
|
+
type: (0, superstruct_1.enums)([`${EthAccountType.Eoa}`, `${EthAccountType.Erc4337}`]),
|
56
64
|
});
|
57
65
|
exports.KeyringRequestStruct = (0, superstruct_2.object)({
|
58
66
|
/**
|
package/dist/api.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;AACA,2CAA6C;AAE7C,6CAA2E;AAE3E,+CAAsD;AACtD,mCAAqC;AAErC;;GAEG;AACH,IAAY,SAOX;AAPD,WAAY,SAAS;IACnB,2CAA8B,CAAA;IAC9B,8BAAiB,CAAA;IACjB,oDAAuC,CAAA;IACvC,qDAAwC,CAAA;IACxC,qDAAwC,CAAA;IACxC,qDAAwC,CAAA;AAC1C,CAAC,EAPW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAOpB;AAED;;GAEG;AACH,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,oCAAkB,CAAA;IAClB,4CAA0B,CAAA;AAC5B,CAAC,EAHW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAGzB;AAEY,QAAA,oBAAoB,GAAG,IAAA,oBAAM,EAAC;IACzC;;OAEG;IACH,EAAE,EAAE,kBAAU;IAEd;;OAEG;IACH,OAAO,EAAE,IAAA,oBAAM,GAAE;IAEjB;;OAEG;IACH,OAAO,EAAE,IAAA,oBAAM,EAAC,IAAA,oBAAM,GAAE,EAAE,kBAAU,CAAC;IAErC;;OAEG;IACH,OAAO,EAAE,IAAA,mBAAK,EACZ,IAAA,mBAAK,EAAC;QACJ,GAAG,SAAS,CAAC,YAAY,EAAE;QAC3B,GAAG,SAAS,CAAC,IAAI,EAAE;QACnB,GAAG,SAAS,CAAC,eAAe,EAAE;QAC9B,GAAG,SAAS,CAAC,eAAe,EAAE;QAC9B,GAAG,SAAS,CAAC,eAAe,EAAE;QAC9B,GAAG,SAAS,CAAC,eAAe,EAAE;KAC/B,CAAC,CACH;IAED;;OAEG;IACH,IAAI,EAAE,IAAA,mBAAK,EAAC,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,EAAE,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC;CACpE,CAAC,CAAC;AASU,QAAA,oBAAoB,GAAG,IAAA,oBAAM,EAAC;IACzC;;OAEG;IACH,EAAE,EAAE,kBAAU;IAEd;;OAEG;IACH,KAAK,EAAE,IAAA,oBAAM,GAAE;IAEf;;OAEG;IACH,OAAO,EAAE,kBAAU;IAEnB;;OAEG;IACH,OAAO,EAAE,IAAA,oBAAM,EAAC;QACd,MAAM,EAAE,IAAA,oBAAM,GAAE;QAChB,MAAM,EAAE,IAAA,2BAAa,EACnB,IAAA,mBAAK,EAAC,CAAC,IAAA,mBAAK,EAAC,kBAAU,CAAC,EAAE,IAAA,oBAAM,EAAC,IAAA,oBAAM,GAAE,EAAE,kBAAU,CAAC,CAAC,CAAC,CACzD;KACF,CAAC;CACH,CAAC,CAAC;AASU,QAAA,wBAAwB,GAAG,IAAA,oBAAM,EAAC,IAAA,oBAAM,GAAE,EAAE,kBAAU,CAAC,CAAC;AASxD,QAAA,qBAAqB,GAAG,IAAA,mBAAK,EAAC;IACzC,IAAA,oBAAM,EAAC;QACL;;;;;;WAMG;QACH,OAAO,EAAE,IAAA,qBAAO,EAAC,IAAI,CAAC;QAEtB;;;;;;WAMG;QACH,QAAQ,EAAE,IAAA,2BAAa,EACrB,IAAA,oBAAM,EAAC;YACL,OAAO,EAAE,IAAA,2BAAa,EAAC,IAAA,oBAAM,GAAE,CAAC;YAChC,GAAG,EAAE,IAAA,2BAAa,EAAC,IAAA,oBAAM,GAAE,CAAC;SAC7B,CAAC,CACH;KACF,CAAC;IACF,IAAA,oBAAM,EAAC;QACL;;;;;;WAMG;QACH,OAAO,EAAE,IAAA,qBAAO,EAAC,KAAK,CAAC;QAEvB;;WAEG;QACH,MAAM,EAAE,kBAAU;KACnB,CAAC;CACH,CAAC,CAAC","sourcesContent":["import type { Json } from '@metamask/utils';\nimport { JsonStruct } from '@metamask/utils';\nimport type { Infer } from 'superstruct';\nimport { array, enums, literal, record, string, union } from 'superstruct';\n\nimport { exactOptional, object } from './superstruct';\nimport { UuidStruct } from './utils';\n\n/**\n * Supported Ethereum methods.\n */\nexport enum EthMethod {\n PersonalSign = 'personal_sign',\n Sign = 'eth_sign',\n SignTransaction = 'eth_signTransaction',\n SignTypedDataV1 = 'eth_signTypedData_v1',\n SignTypedDataV3 = 'eth_signTypedData_v3',\n SignTypedDataV4 = 'eth_signTypedData_v4',\n}\n\n/**\n * Supported Ethereum account types.\n */\nexport enum EthAccountType {\n Eoa = 'eip155:eoa',\n Eip4337 = 'eip155:eip4337',\n}\n\nexport const KeyringAccountStruct = object({\n /**\n * Account ID (UUIDv4).\n */\n id: UuidStruct,\n\n /**\n * Account address or next receive address (UTXO).\n */\n address: string(),\n\n /**\n * Keyring-dependent account options.\n */\n options: record(string(), JsonStruct),\n\n /**\n * Account supported methods.\n */\n methods: array(\n enums([\n `${EthMethod.PersonalSign}`,\n `${EthMethod.Sign}`,\n `${EthMethod.SignTransaction}`,\n `${EthMethod.SignTypedDataV1}`,\n `${EthMethod.SignTypedDataV3}`,\n `${EthMethod.SignTypedDataV4}`,\n ]),\n ),\n\n /**\n * Account type.\n */\n type: enums([`${EthAccountType.Eoa}`, `${EthAccountType.Eip4337}`]),\n});\n\n/**\n * Account object.\n *\n * Represents an account with its properties and capabilities.\n */\nexport type KeyringAccount = Infer<typeof KeyringAccountStruct>;\n\nexport const KeyringRequestStruct = object({\n /**\n * Keyring request ID (UUIDv4).\n */\n id: UuidStruct,\n\n /**\n * Request's scope (CAIP-2 chain ID).\n */\n scope: string(),\n\n /**\n * Account ID (UUIDv4).\n */\n account: UuidStruct,\n\n /**\n * Inner request sent by the client application.\n */\n request: object({\n method: string(),\n params: exactOptional(\n union([array(JsonStruct), record(string(), JsonStruct)]),\n ),\n }),\n});\n\n/**\n * Keyring request.\n *\n * Represents a request made to the keyring for account-related operations.\n */\nexport type KeyringRequest = Infer<typeof KeyringRequestStruct>;\n\nexport const KeyringAccountDataStruct = record(string(), JsonStruct);\n\n/**\n * Response to a call to `exportAccount`.\n *\n * The exact response depends on the keyring implementation.\n */\nexport type KeyringAccountData = Infer<typeof KeyringAccountDataStruct>;\n\nexport const KeyringResponseStruct = union([\n object({\n /**\n * Pending flag.\n *\n * Setting the pending flag to true indicates that the request will be\n * handled asynchronously. The keyring must be called with `approveRequest`\n * or `rejectRequest` to resolve the request.\n */\n pending: literal(true),\n\n /**\n * Redirect URL.\n *\n * If present in the response, MetaMask will display a confirmation dialog\n * with a link to the redirect URL. The user can choose to follow the link\n * or cancel the request.\n */\n redirect: exactOptional(\n object({\n message: exactOptional(string()),\n url: exactOptional(string()),\n }),\n ),\n }),\n object({\n /**\n * Pending flag.\n *\n * Setting the pending flag to false indicates that the request will be\n * handled synchronously. The keyring must return the result of the\n * request execution.\n */\n pending: literal(false),\n\n /**\n * Request result.\n */\n result: JsonStruct,\n }),\n]);\n\n/**\n * Response to a call to `submitRequest`.\n *\n * Keyring implementations must return a response with `pending: true` if the\n * request will be handled asynchronously. Otherwise, the response must contain\n * the result of the request and `pending: false`.\n *\n * In the asynchronous case, the keyring can return a redirect URL and message\n * to be shown to the user. The user can choose to follow the link or cancel\n * the request. The main use case for this is to redirect the user to the snap\n * dapp to review the request.\n */\nexport type KeyringResponse = Infer<typeof KeyringResponseStruct>;\n\n/**\n * Keyring interface.\n *\n * Represents the functionality and operations related to managing accounts and\n * handling requests.\n */\nexport type Keyring = {\n /**\n * List accounts.\n *\n * Retrieves an array of KeyringAccount objects representing the available\n * accounts.\n *\n * @returns A promise that resolves to an array of KeyringAccount objects.\n */\n listAccounts(): Promise<KeyringAccount[]>;\n\n /**\n * Get an account.\n *\n * Retrieves the KeyringAccount object for the given account ID.\n *\n * @param id - The ID of the account to retrieve.\n * @returns A promise that resolves to the KeyringAccount object if found, or\n * undefined otherwise.\n */\n getAccount(id: string): Promise<KeyringAccount | undefined>;\n\n /**\n * Create an account.\n *\n * Creates a new account with optional, keyring-defined, account options.\n *\n * @param options - Keyring-defined options for the account (optional).\n * @returns A promise that resolves to the newly created KeyringAccount\n * object without any private information.\n */\n createAccount(options?: Record<string, Json>): Promise<KeyringAccount>;\n\n /**\n * Filter supported chains for a given account.\n *\n * @param id - ID of the account to be checked.\n * @param chains - List of chains (CAIP-2) to be checked.\n * @returns A Promise that resolves to a filtered list of CAIP-2 IDs\n * representing the supported chains.\n */\n filterAccountChains(id: string, chains: string[]): Promise<string[]>;\n\n /**\n * Update an account.\n *\n * Updates the account with the given account object. Does nothing if the\n * account does not exist.\n *\n * @param account - The updated account object.\n * @returns A promise that resolves when the account is successfully updated.\n */\n updateAccount(account: KeyringAccount): Promise<void>;\n\n /**\n * Delete an account from the keyring.\n *\n * Deletes the account with the given ID from the keyring.\n *\n * @param id - The ID of the account to delete.\n * @returns A promise that resolves when the account is successfully deleted.\n */\n deleteAccount(id: string): Promise<void>;\n\n /**\n * Exports an account's private key.\n *\n * If the keyring cannot export a private key, this function should throw an\n * error.\n *\n * @param id - The ID of the account to export.\n * @returns A promise that resolves to the exported account.\n */\n exportAccount?(id: string): Promise<KeyringAccountData>;\n\n /**\n * List all submitted requests.\n *\n * Retrieves an array of KeyringRequest objects representing the submitted\n * requests.\n *\n * @returns A promise that resolves to an array of KeyringRequest objects.\n */\n listRequests?(): Promise<KeyringRequest[]>;\n\n /**\n * Get a request.\n *\n * Retrieves the KeyringRequest object for the given request ID.\n *\n * @param id - The ID of the request to retrieve.\n * @returns A promise that resolves to the KeyringRequest object if found, or\n * undefined otherwise.\n */\n getRequest?(id: string): Promise<KeyringRequest | undefined>;\n\n /**\n * Submit a request.\n *\n * Submits the given KeyringRequest object.\n *\n * @param request - The KeyringRequest object to submit.\n * @returns A promise that resolves to the request response.\n */\n submitRequest(request: KeyringRequest): Promise<KeyringResponse>;\n\n /**\n * Approve a request.\n *\n * Approves the request with the given ID and sets the response if provided.\n *\n * @param id - The ID of the request to approve.\n * @param data - The response to the request (optional).\n * @returns A promise that resolves when the request is successfully\n * approved.\n */\n approveRequest?(id: string, data?: Record<string, Json>): Promise<void>;\n\n /**\n * Reject a request.\n *\n * Rejects the request with the given ID.\n *\n * @param id - The ID of the request to reject.\n * @returns A promise that resolves when the request is successfully\n * rejected.\n */\n rejectRequest?(id: string): Promise<void>;\n};\n"]}
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;AACA,2CAA6C;AAE7C,6CAA2E;AAE3E,+CAAsD;AACtD,mCAAqC;AAErC;;GAEG;AACH,IAAY,SAYX;AAZD,WAAY,SAAS;IACnB,0BAA0B;IAC1B,2CAA8B,CAAA;IAC9B,8BAAiB,CAAA;IACjB,oDAAuC,CAAA;IACvC,qDAAwC,CAAA;IACxC,qDAAwC,CAAA;IACxC,qDAAwC,CAAA;IACxC,mBAAmB;IACnB,8DAAiD,CAAA;IACjD,0DAA6C,CAAA;IAC7C,wDAA2C,CAAA;AAC7C,CAAC,EAZW,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAYpB;AAED;;GAEG;AACH,IAAY,cAGX;AAHD,WAAY,cAAc;IACxB,oCAAkB,CAAA;IAClB,4CAA0B,CAAA;AAC5B,CAAC,EAHW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAGzB;AAEY,QAAA,oBAAoB,GAAG,IAAA,oBAAM,EAAC;IACzC;;OAEG;IACH,EAAE,EAAE,kBAAU;IAEd;;OAEG;IACH,OAAO,EAAE,IAAA,oBAAM,GAAE;IAEjB;;OAEG;IACH,OAAO,EAAE,IAAA,oBAAM,EAAC,IAAA,oBAAM,GAAE,EAAE,kBAAU,CAAC;IAErC;;OAEG;IACH,OAAO,EAAE,IAAA,mBAAK,EACZ,IAAA,mBAAK,EAAC;QACJ,GAAG,SAAS,CAAC,YAAY,EAAE;QAC3B,GAAG,SAAS,CAAC,IAAI,EAAE;QACnB,GAAG,SAAS,CAAC,eAAe,EAAE;QAC9B,GAAG,SAAS,CAAC,eAAe,EAAE;QAC9B,GAAG,SAAS,CAAC,eAAe,EAAE;QAC9B,GAAG,SAAS,CAAC,eAAe,EAAE;QAC9B,GAAG,SAAS,CAAC,oBAAoB,EAAE;QACnC,GAAG,SAAS,CAAC,kBAAkB,EAAE;QACjC,GAAG,SAAS,CAAC,iBAAiB,EAAE;KACjC,CAAC,CACH;IAED;;OAEG;IACH,IAAI,EAAE,IAAA,mBAAK,EAAC,CAAC,GAAG,cAAc,CAAC,GAAG,EAAE,EAAE,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC;CACpE,CAAC,CAAC;AASU,QAAA,oBAAoB,GAAG,IAAA,oBAAM,EAAC;IACzC;;OAEG;IACH,EAAE,EAAE,kBAAU;IAEd;;OAEG;IACH,KAAK,EAAE,IAAA,oBAAM,GAAE;IAEf;;OAEG;IACH,OAAO,EAAE,kBAAU;IAEnB;;OAEG;IACH,OAAO,EAAE,IAAA,oBAAM,EAAC;QACd,MAAM,EAAE,IAAA,oBAAM,GAAE;QAChB,MAAM,EAAE,IAAA,2BAAa,EACnB,IAAA,mBAAK,EAAC,CAAC,IAAA,mBAAK,EAAC,kBAAU,CAAC,EAAE,IAAA,oBAAM,EAAC,IAAA,oBAAM,GAAE,EAAE,kBAAU,CAAC,CAAC,CAAC,CACzD;KACF,CAAC;CACH,CAAC,CAAC;AASU,QAAA,wBAAwB,GAAG,IAAA,oBAAM,EAAC,IAAA,oBAAM,GAAE,EAAE,kBAAU,CAAC,CAAC;AASxD,QAAA,qBAAqB,GAAG,IAAA,mBAAK,EAAC;IACzC,IAAA,oBAAM,EAAC;QACL;;;;;;WAMG;QACH,OAAO,EAAE,IAAA,qBAAO,EAAC,IAAI,CAAC;QAEtB;;;;;;WAMG;QACH,QAAQ,EAAE,IAAA,2BAAa,EACrB,IAAA,oBAAM,EAAC;YACL,OAAO,EAAE,IAAA,2BAAa,EAAC,IAAA,oBAAM,GAAE,CAAC;YAChC,GAAG,EAAE,IAAA,2BAAa,EAAC,IAAA,oBAAM,GAAE,CAAC;SAC7B,CAAC,CACH;KACF,CAAC;IACF,IAAA,oBAAM,EAAC;QACL;;;;;;WAMG;QACH,OAAO,EAAE,IAAA,qBAAO,EAAC,KAAK,CAAC;QAEvB;;WAEG;QACH,MAAM,EAAE,kBAAU;KACnB,CAAC;CACH,CAAC,CAAC","sourcesContent":["import type { Json } from '@metamask/utils';\nimport { JsonStruct } from '@metamask/utils';\nimport type { Infer } from 'superstruct';\nimport { array, enums, literal, record, string, union } from 'superstruct';\n\nimport { exactOptional, object } from './superstruct';\nimport { UuidStruct } from './utils';\n\n/**\n * Supported Ethereum methods.\n */\nexport enum EthMethod {\n // General signing methods\n PersonalSign = 'personal_sign',\n Sign = 'eth_sign',\n SignTransaction = 'eth_signTransaction',\n SignTypedDataV1 = 'eth_signTypedData_v1',\n SignTypedDataV3 = 'eth_signTypedData_v3',\n SignTypedDataV4 = 'eth_signTypedData_v4',\n // ERC-4337 methods\n PrepareUserOperation = 'eth_prepareUserOperation',\n PatchUserOperation = 'eth_patchUserOperation',\n SignUserOperation = 'eth_signUserOperation',\n}\n\n/**\n * Supported Ethereum account types.\n */\nexport enum EthAccountType {\n Eoa = 'eip155:eoa',\n Erc4337 = 'eip155:erc4337',\n}\n\nexport const KeyringAccountStruct = object({\n /**\n * Account ID (UUIDv4).\n */\n id: UuidStruct,\n\n /**\n * Account address or next receive address (UTXO).\n */\n address: string(),\n\n /**\n * Keyring-dependent account options.\n */\n options: record(string(), JsonStruct),\n\n /**\n * Account supported methods.\n */\n methods: array(\n enums([\n `${EthMethod.PersonalSign}`,\n `${EthMethod.Sign}`,\n `${EthMethod.SignTransaction}`,\n `${EthMethod.SignTypedDataV1}`,\n `${EthMethod.SignTypedDataV3}`,\n `${EthMethod.SignTypedDataV4}`,\n `${EthMethod.PrepareUserOperation}`,\n `${EthMethod.PatchUserOperation}`,\n `${EthMethod.SignUserOperation}`,\n ]),\n ),\n\n /**\n * Account type.\n */\n type: enums([`${EthAccountType.Eoa}`, `${EthAccountType.Erc4337}`]),\n});\n\n/**\n * Account object.\n *\n * Represents an account with its properties and capabilities.\n */\nexport type KeyringAccount = Infer<typeof KeyringAccountStruct>;\n\nexport const KeyringRequestStruct = object({\n /**\n * Keyring request ID (UUIDv4).\n */\n id: UuidStruct,\n\n /**\n * Request's scope (CAIP-2 chain ID).\n */\n scope: string(),\n\n /**\n * Account ID (UUIDv4).\n */\n account: UuidStruct,\n\n /**\n * Inner request sent by the client application.\n */\n request: object({\n method: string(),\n params: exactOptional(\n union([array(JsonStruct), record(string(), JsonStruct)]),\n ),\n }),\n});\n\n/**\n * Keyring request.\n *\n * Represents a request made to the keyring for account-related operations.\n */\nexport type KeyringRequest = Infer<typeof KeyringRequestStruct>;\n\nexport const KeyringAccountDataStruct = record(string(), JsonStruct);\n\n/**\n * Response to a call to `exportAccount`.\n *\n * The exact response depends on the keyring implementation.\n */\nexport type KeyringAccountData = Infer<typeof KeyringAccountDataStruct>;\n\nexport const KeyringResponseStruct = union([\n object({\n /**\n * Pending flag.\n *\n * Setting the pending flag to true indicates that the request will be\n * handled asynchronously. The keyring must be called with `approveRequest`\n * or `rejectRequest` to resolve the request.\n */\n pending: literal(true),\n\n /**\n * Redirect URL.\n *\n * If present in the response, MetaMask will display a confirmation dialog\n * with a link to the redirect URL. The user can choose to follow the link\n * or cancel the request.\n */\n redirect: exactOptional(\n object({\n message: exactOptional(string()),\n url: exactOptional(string()),\n }),\n ),\n }),\n object({\n /**\n * Pending flag.\n *\n * Setting the pending flag to false indicates that the request will be\n * handled synchronously. The keyring must return the result of the\n * request execution.\n */\n pending: literal(false),\n\n /**\n * Request result.\n */\n result: JsonStruct,\n }),\n]);\n\n/**\n * Response to a call to `submitRequest`.\n *\n * Keyring implementations must return a response with `pending: true` if the\n * request will be handled asynchronously. Otherwise, the response must contain\n * the result of the request and `pending: false`.\n *\n * In the asynchronous case, the keyring can return a redirect URL and message\n * to be shown to the user. The user can choose to follow the link or cancel\n * the request. The main use case for this is to redirect the user to the snap\n * dapp to review the request.\n */\nexport type KeyringResponse = Infer<typeof KeyringResponseStruct>;\n\n/**\n * Keyring interface.\n *\n * Represents the functionality and operations related to managing accounts and\n * handling requests.\n */\nexport type Keyring = {\n /**\n * List accounts.\n *\n * Retrieves an array of KeyringAccount objects representing the available\n * accounts.\n *\n * @returns A promise that resolves to an array of KeyringAccount objects.\n */\n listAccounts(): Promise<KeyringAccount[]>;\n\n /**\n * Get an account.\n *\n * Retrieves the KeyringAccount object for the given account ID.\n *\n * @param id - The ID of the account to retrieve.\n * @returns A promise that resolves to the KeyringAccount object if found, or\n * undefined otherwise.\n */\n getAccount(id: string): Promise<KeyringAccount | undefined>;\n\n /**\n * Create an account.\n *\n * Creates a new account with optional, keyring-defined, account options.\n *\n * @param options - Keyring-defined options for the account (optional).\n * @returns A promise that resolves to the newly created KeyringAccount\n * object without any private information.\n */\n createAccount(options?: Record<string, Json>): Promise<KeyringAccount>;\n\n /**\n * Filter supported chains for a given account.\n *\n * @param id - ID of the account to be checked.\n * @param chains - List of chains (CAIP-2) to be checked.\n * @returns A Promise that resolves to a filtered list of CAIP-2 IDs\n * representing the supported chains.\n */\n filterAccountChains(id: string, chains: string[]): Promise<string[]>;\n\n /**\n * Update an account.\n *\n * Updates the account with the given account object. Does nothing if the\n * account does not exist.\n *\n * @param account - The updated account object.\n * @returns A promise that resolves when the account is successfully updated.\n */\n updateAccount(account: KeyringAccount): Promise<void>;\n\n /**\n * Delete an account from the keyring.\n *\n * Deletes the account with the given ID from the keyring.\n *\n * @param id - The ID of the account to delete.\n * @returns A promise that resolves when the account is successfully deleted.\n */\n deleteAccount(id: string): Promise<void>;\n\n /**\n * Exports an account's private key.\n *\n * If the keyring cannot export a private key, this function should throw an\n * error.\n *\n * @param id - The ID of the account to export.\n * @returns A promise that resolves to the exported account.\n */\n exportAccount?(id: string): Promise<KeyringAccountData>;\n\n /**\n * List all submitted requests.\n *\n * Retrieves an array of KeyringRequest objects representing the submitted\n * requests.\n *\n * @returns A promise that resolves to an array of KeyringRequest objects.\n */\n listRequests?(): Promise<KeyringRequest[]>;\n\n /**\n * Get a request.\n *\n * Retrieves the KeyringRequest object for the given request ID.\n *\n * @param id - The ID of the request to retrieve.\n * @returns A promise that resolves to the KeyringRequest object if found, or\n * undefined otherwise.\n */\n getRequest?(id: string): Promise<KeyringRequest | undefined>;\n\n /**\n * Submit a request.\n *\n * Submits the given KeyringRequest object.\n *\n * @param request - The KeyringRequest object to submit.\n * @returns A promise that resolves to the request response.\n */\n submitRequest(request: KeyringRequest): Promise<KeyringResponse>;\n\n /**\n * Approve a request.\n *\n * Approves the request with the given ID and sets the response if provided.\n *\n * @param id - The ID of the request to approve.\n * @param data - The response to the request (optional).\n * @returns A promise that resolves when the request is successfully\n * approved.\n */\n approveRequest?(id: string, data?: Record<string, Json>): Promise<void>;\n\n /**\n * Reject a request.\n *\n * Rejects the request with the given ID.\n *\n * @param id - The ID of the request to reject.\n * @returns A promise that resolves when the request is successfully\n * rejected.\n */\n rejectRequest?(id: string): Promise<void>;\n};\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './types';
|
@@ -0,0 +1,18 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
__exportStar(require("./types"), exports);
|
18
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/eth/erc4337/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB","sourcesContent":["export * from './types';\n"]}
|
@@ -0,0 +1,90 @@
|
|
1
|
+
import { type Infer } from 'superstruct';
|
2
|
+
/**
|
3
|
+
* Struct of a UserOperation as defined by ERC-4337.
|
4
|
+
* @see https://eips.ethereum.org/EIPS/eip-4337#definitions
|
5
|
+
*/
|
6
|
+
export declare const EthUserOperationStruct: import("superstruct").Struct<{
|
7
|
+
sender: string;
|
8
|
+
nonce: string;
|
9
|
+
initCode: string;
|
10
|
+
callData: string;
|
11
|
+
callGasLimit: string;
|
12
|
+
verificationGasLimit: string;
|
13
|
+
preVerificationGas: string;
|
14
|
+
maxFeePerGas: string;
|
15
|
+
maxPriorityFeePerGas: string;
|
16
|
+
paymasterAndData: string;
|
17
|
+
signature: string;
|
18
|
+
}, {
|
19
|
+
sender: import("superstruct").Struct<string, null>;
|
20
|
+
nonce: import("superstruct").Struct<string, null>;
|
21
|
+
initCode: import("superstruct").Struct<string, null>;
|
22
|
+
callData: import("superstruct").Struct<string, null>;
|
23
|
+
callGasLimit: import("superstruct").Struct<string, null>;
|
24
|
+
verificationGasLimit: import("superstruct").Struct<string, null>;
|
25
|
+
preVerificationGas: import("superstruct").Struct<string, null>;
|
26
|
+
maxFeePerGas: import("superstruct").Struct<string, null>;
|
27
|
+
maxPriorityFeePerGas: import("superstruct").Struct<string, null>;
|
28
|
+
paymasterAndData: import("superstruct").Struct<string, null>;
|
29
|
+
signature: import("superstruct").Struct<string, null>;
|
30
|
+
}>;
|
31
|
+
export declare type EthUserOperation = Infer<typeof EthUserOperationStruct>;
|
32
|
+
/**
|
33
|
+
* Struct containing the most basic transaction information required to
|
34
|
+
* construct a UserOperation.
|
35
|
+
*/
|
36
|
+
export declare const EthBaseTransactionStruct: import("superstruct").Struct<{
|
37
|
+
value: string;
|
38
|
+
data: string;
|
39
|
+
to: string;
|
40
|
+
}, {
|
41
|
+
/**
|
42
|
+
* Address of the transaction recipient.
|
43
|
+
*/
|
44
|
+
to: import("superstruct").Struct<string, null>;
|
45
|
+
/**
|
46
|
+
* Amount of wei to transfer to the recipient.
|
47
|
+
*/
|
48
|
+
value: import("superstruct").Struct<string, null>;
|
49
|
+
/**
|
50
|
+
* Data to pass to the recipient.
|
51
|
+
*/
|
52
|
+
data: import("superstruct").Struct<string, null>;
|
53
|
+
}>;
|
54
|
+
export declare type EthBaseTransaction = Infer<typeof EthBaseTransactionStruct>;
|
55
|
+
export declare const EthBaseUserOperationStruct: import("superstruct").Struct<{
|
56
|
+
nonce: string;
|
57
|
+
initCode: string;
|
58
|
+
callData: string;
|
59
|
+
dummyPaymasterAndData: string;
|
60
|
+
dummySignature: string;
|
61
|
+
bundlerUrl: string;
|
62
|
+
gasLimits?: {
|
63
|
+
callGasLimit: string;
|
64
|
+
verificationGasLimit: string;
|
65
|
+
preVerificationGas: string;
|
66
|
+
};
|
67
|
+
}, {
|
68
|
+
nonce: import("superstruct").Struct<string, null>;
|
69
|
+
initCode: import("superstruct").Struct<string, null>;
|
70
|
+
callData: import("superstruct").Struct<string, null>;
|
71
|
+
gasLimits: import("superstruct").Struct<import("../../superstruct").ExactOptionalTag | {
|
72
|
+
callGasLimit: string;
|
73
|
+
verificationGasLimit: string;
|
74
|
+
preVerificationGas: string;
|
75
|
+
}, {
|
76
|
+
callGasLimit: import("superstruct").Struct<string, null>;
|
77
|
+
verificationGasLimit: import("superstruct").Struct<string, null>;
|
78
|
+
preVerificationGas: import("superstruct").Struct<string, null>;
|
79
|
+
}>;
|
80
|
+
dummyPaymasterAndData: import("superstruct").Struct<string, null>;
|
81
|
+
dummySignature: import("superstruct").Struct<string, null>;
|
82
|
+
bundlerUrl: import("superstruct").Struct<string, null>;
|
83
|
+
}>;
|
84
|
+
export declare type EthBaseUserOperation = Infer<typeof EthBaseUserOperationStruct>;
|
85
|
+
export declare const EthUserOperationPatchStruct: import("superstruct").Struct<{
|
86
|
+
paymasterAndData: string;
|
87
|
+
}, {
|
88
|
+
paymasterAndData: import("superstruct").Struct<string, null>;
|
89
|
+
}>;
|
90
|
+
export declare type EthUserOperationPatch = Infer<typeof EthUserOperationPatchStruct>;
|
@@ -0,0 +1,58 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.EthUserOperationPatchStruct = exports.EthBaseUserOperationStruct = exports.EthBaseTransactionStruct = exports.EthUserOperationStruct = void 0;
|
4
|
+
const superstruct_1 = require("superstruct");
|
5
|
+
const superstruct_2 = require("../../superstruct");
|
6
|
+
const types_1 = require("../types");
|
7
|
+
/**
|
8
|
+
* Struct of a UserOperation as defined by ERC-4337.
|
9
|
+
* @see https://eips.ethereum.org/EIPS/eip-4337#definitions
|
10
|
+
*/
|
11
|
+
exports.EthUserOperationStruct = (0, superstruct_2.object)({
|
12
|
+
sender: types_1.EthAddressStruct,
|
13
|
+
nonce: types_1.EthUint256Struct,
|
14
|
+
initCode: types_1.EthBytesStruct,
|
15
|
+
callData: types_1.EthBytesStruct,
|
16
|
+
callGasLimit: types_1.EthUint256Struct,
|
17
|
+
verificationGasLimit: types_1.EthUint256Struct,
|
18
|
+
preVerificationGas: types_1.EthUint256Struct,
|
19
|
+
maxFeePerGas: types_1.EthUint256Struct,
|
20
|
+
maxPriorityFeePerGas: types_1.EthUint256Struct,
|
21
|
+
paymasterAndData: types_1.EthBytesStruct,
|
22
|
+
signature: types_1.EthBytesStruct,
|
23
|
+
});
|
24
|
+
/**
|
25
|
+
* Struct containing the most basic transaction information required to
|
26
|
+
* construct a UserOperation.
|
27
|
+
*/
|
28
|
+
exports.EthBaseTransactionStruct = (0, superstruct_2.object)({
|
29
|
+
/**
|
30
|
+
* Address of the transaction recipient.
|
31
|
+
*/
|
32
|
+
to: types_1.EthAddressStruct,
|
33
|
+
/**
|
34
|
+
* Amount of wei to transfer to the recipient.
|
35
|
+
*/
|
36
|
+
value: types_1.EthUint256Struct,
|
37
|
+
/**
|
38
|
+
* Data to pass to the recipient.
|
39
|
+
*/
|
40
|
+
data: types_1.EthBytesStruct,
|
41
|
+
});
|
42
|
+
exports.EthBaseUserOperationStruct = (0, superstruct_2.object)({
|
43
|
+
nonce: types_1.EthUint256Struct,
|
44
|
+
initCode: types_1.EthBytesStruct,
|
45
|
+
callData: types_1.EthBytesStruct,
|
46
|
+
gasLimits: (0, superstruct_2.exactOptional)((0, superstruct_2.object)({
|
47
|
+
callGasLimit: types_1.EthUint256Struct,
|
48
|
+
verificationGasLimit: types_1.EthUint256Struct,
|
49
|
+
preVerificationGas: types_1.EthUint256Struct,
|
50
|
+
})),
|
51
|
+
dummyPaymasterAndData: types_1.EthBytesStruct,
|
52
|
+
dummySignature: types_1.EthBytesStruct,
|
53
|
+
bundlerUrl: (0, superstruct_1.string)(),
|
54
|
+
});
|
55
|
+
exports.EthUserOperationPatchStruct = (0, superstruct_2.object)({
|
56
|
+
paymasterAndData: types_1.EthBytesStruct,
|
57
|
+
});
|
58
|
+
//# sourceMappingURL=types.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/eth/erc4337/types.ts"],"names":[],"mappings":";;;AAAA,6CAAiD;AAEjD,mDAA0D;AAC1D,oCAA8E;AAE9E;;;GAGG;AACU,QAAA,sBAAsB,GAAG,IAAA,oBAAM,EAAC;IAC3C,MAAM,EAAE,wBAAgB;IACxB,KAAK,EAAE,wBAAgB;IACvB,QAAQ,EAAE,sBAAc;IACxB,QAAQ,EAAE,sBAAc;IACxB,YAAY,EAAE,wBAAgB;IAC9B,oBAAoB,EAAE,wBAAgB;IACtC,kBAAkB,EAAE,wBAAgB;IACpC,YAAY,EAAE,wBAAgB;IAC9B,oBAAoB,EAAE,wBAAgB;IACtC,gBAAgB,EAAE,sBAAc;IAChC,SAAS,EAAE,sBAAc;CAC1B,CAAC,CAAC;AAIH;;;GAGG;AACU,QAAA,wBAAwB,GAAG,IAAA,oBAAM,EAAC;IAC7C;;OAEG;IACH,EAAE,EAAE,wBAAgB;IAEpB;;OAEG;IACH,KAAK,EAAE,wBAAgB;IAEvB;;OAEG;IACH,IAAI,EAAE,sBAAc;CACrB,CAAC,CAAC;AAIU,QAAA,0BAA0B,GAAG,IAAA,oBAAM,EAAC;IAC/C,KAAK,EAAE,wBAAgB;IACvB,QAAQ,EAAE,sBAAc;IACxB,QAAQ,EAAE,sBAAc;IACxB,SAAS,EAAE,IAAA,2BAAa,EACtB,IAAA,oBAAM,EAAC;QACL,YAAY,EAAE,wBAAgB;QAC9B,oBAAoB,EAAE,wBAAgB;QACtC,kBAAkB,EAAE,wBAAgB;KACrC,CAAC,CACH;IACD,qBAAqB,EAAE,sBAAc;IACrC,cAAc,EAAE,sBAAc;IAC9B,UAAU,EAAE,IAAA,oBAAM,GAAE;CACrB,CAAC,CAAC;AAIU,QAAA,2BAA2B,GAAG,IAAA,oBAAM,EAAC;IAChD,gBAAgB,EAAE,sBAAc;CACjC,CAAC,CAAC","sourcesContent":["import { string, type Infer } from 'superstruct';\n\nimport { exactOptional, object } from '../../superstruct';\nimport { EthAddressStruct, EthBytesStruct, EthUint256Struct } from '../types';\n\n/**\n * Struct of a UserOperation as defined by ERC-4337.\n * @see https://eips.ethereum.org/EIPS/eip-4337#definitions\n */\nexport const EthUserOperationStruct = object({\n sender: EthAddressStruct,\n nonce: EthUint256Struct,\n initCode: EthBytesStruct,\n callData: EthBytesStruct,\n callGasLimit: EthUint256Struct,\n verificationGasLimit: EthUint256Struct,\n preVerificationGas: EthUint256Struct,\n maxFeePerGas: EthUint256Struct,\n maxPriorityFeePerGas: EthUint256Struct,\n paymasterAndData: EthBytesStruct,\n signature: EthBytesStruct,\n});\n\nexport type EthUserOperation = Infer<typeof EthUserOperationStruct>;\n\n/**\n * Struct containing the most basic transaction information required to\n * construct a UserOperation.\n */\nexport const EthBaseTransactionStruct = object({\n /**\n * Address of the transaction recipient.\n */\n to: EthAddressStruct,\n\n /**\n * Amount of wei to transfer to the recipient.\n */\n value: EthUint256Struct,\n\n /**\n * Data to pass to the recipient.\n */\n data: EthBytesStruct,\n});\n\nexport type EthBaseTransaction = Infer<typeof EthBaseTransactionStruct>;\n\nexport const EthBaseUserOperationStruct = object({\n nonce: EthUint256Struct,\n initCode: EthBytesStruct,\n callData: EthBytesStruct,\n gasLimits: exactOptional(\n object({\n callGasLimit: EthUint256Struct,\n verificationGasLimit: EthUint256Struct,\n preVerificationGas: EthUint256Struct,\n }),\n ),\n dummyPaymasterAndData: EthBytesStruct,\n dummySignature: EthBytesStruct,\n bundlerUrl: string(),\n});\n\nexport type EthBaseUserOperation = Infer<typeof EthBaseUserOperationStruct>;\n\nexport const EthUserOperationPatchStruct = object({\n paymasterAndData: EthBytesStruct,\n});\n\nexport type EthUserOperationPatch = Infer<typeof EthUserOperationPatchStruct>;\n"]}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
__exportStar(require("./erc4337"), exports);
|
18
|
+
__exportStar(require("./types"), exports);
|
19
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eth/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,0CAAwB","sourcesContent":["export * from './erc4337';\nexport * from './types';\n"]}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.EthUint256Struct = exports.EthAddressStruct = exports.EthBytesStruct = void 0;
|
4
|
+
const superstruct_1 = require("../superstruct");
|
5
|
+
exports.EthBytesStruct = (0, superstruct_1.definePattern)('EthBytes', /^0x[0-9a-f]*$/iu);
|
6
|
+
exports.EthAddressStruct = (0, superstruct_1.definePattern)('EthAddress', /^0x[0-9a-f]{40}$/iu);
|
7
|
+
exports.EthUint256Struct = (0, superstruct_1.definePattern)('EthUint256', /^0x([1-9a-f][0-9a-f]*|0)$/iu);
|
8
|
+
//# sourceMappingURL=types.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/eth/types.ts"],"names":[],"mappings":";;;AAAA,gDAA+C;AAElC,QAAA,cAAc,GAAG,IAAA,2BAAa,EAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAE9D,QAAA,gBAAgB,GAAG,IAAA,2BAAa,EAC3C,YAAY,EACZ,oBAAoB,CACrB,CAAC;AAEW,QAAA,gBAAgB,GAAG,IAAA,2BAAa,EAC3C,YAAY,EACZ,6BAA6B,CAC9B,CAAC","sourcesContent":["import { definePattern } from '../superstruct';\n\nexport const EthBytesStruct = definePattern('EthBytes', /^0x[0-9a-f]*$/iu);\n\nexport const EthAddressStruct = definePattern(\n 'EthAddress',\n /^0x[0-9a-f]{40}$/iu,\n);\n\nexport const EthUint256Struct = definePattern(\n 'EthUint256',\n /^0x([1-9a-f][0-9a-f]*|0)$/iu,\n);\n"]}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
15
|
};
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
17
17
|
__exportStar(require("./api"), exports);
|
18
|
+
__exportStar(require("./eth"), exports);
|
18
19
|
__exportStar(require("./events"), exports);
|
19
20
|
__exportStar(require("./internal"), exports);
|
20
21
|
__exportStar(require("./KeyringClient"), exports);
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,2CAAyB;AACzB,6CAA2B;AAC3B,kDAAgC;AAChC,gEAA8C;AAC9C,yDAAuC;AACvC,gDAA8B;AAC9B,+CAA6B;AAC7B,gDAA8B","sourcesContent":["export * from './api';\nexport * from './events';\nexport * from './internal';\nexport * from './KeyringClient';\nexport * from './KeyringSnapControllerClient';\nexport * from './KeyringSnapRpcClient';\nexport * from './rpc-handler';\nexport * from './snap-utils';\nexport * from './superstruct';\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAsB;AACtB,wCAAsB;AACtB,2CAAyB;AACzB,6CAA2B;AAC3B,kDAAgC;AAChC,gEAA8C;AAC9C,yDAAuC;AACvC,gDAA8B;AAC9B,+CAA6B;AAC7B,gDAA8B","sourcesContent":["export * from './api';\nexport * from './eth';\nexport * from './events';\nexport * from './internal';\nexport * from './KeyringClient';\nexport * from './KeyringSnapControllerClient';\nexport * from './KeyringSnapRpcClient';\nexport * from './rpc-handler';\nexport * from './snap-utils';\nexport * from './superstruct';\n"]}
|