@toruslabs/ethereum-controllers 4.5.2 → 4.7.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/dist/ethereumControllers.cjs.js +390 -13
- package/dist/ethereumControllers.cjs.js.map +1 -1
- package/dist/ethereumControllers.esm.js +368 -15
- package/dist/ethereumControllers.esm.js.map +1 -1
- package/dist/ethereumControllers.umd.min.js +1 -1
- package/dist/ethereumControllers.umd.min.js.LICENSE.txt +0 -2
- package/dist/ethereumControllers.umd.min.js.map +1 -1
- package/dist/types/Message/AddChainController.d.ts +20 -0
- package/dist/types/Message/DecryptMessageController.d.ts +2 -2
- package/dist/types/Message/EncryptionPublicKeyController.d.ts +2 -2
- package/dist/types/Message/MessageController.d.ts +2 -2
- package/dist/types/Message/PersonalMessageController.d.ts +2 -2
- package/dist/types/Message/SwitchChainController.d.ts +20 -0
- package/dist/types/Message/TypedMessageController.d.ts +2 -2
- package/dist/types/Message/utils.d.ts +3 -1
- package/dist/types/Network/createEthereumMiddleware.d.ts +23 -15
- package/dist/types/Preferences/PreferencesController.d.ts +9 -2
- package/dist/types/index.d.ts +2 -0
- package/dist/types/utils/constants.d.ts +2 -0
- package/dist/types/utils/interfaces.d.ts +22 -1
- package/package.json +10 -10
- package/src/Message/AddChainController.ts +73 -0
- package/src/Message/DecryptMessageController.ts +2 -5
- package/src/Message/EncryptionPublicKeyController.ts +2 -8
- package/src/Message/MessageController.ts +2 -2
- package/src/Message/PersonalMessageController.ts +3 -3
- package/src/Message/SwitchChainController.ts +74 -0
- package/src/Message/TypedMessageController.ts +2 -2
- package/src/Message/utils.ts +49 -1
- package/src/Network/createEthereumMiddleware.ts +190 -26
- package/src/Preferences/PreferencesController.ts +66 -1
- package/src/index.ts +2 -0
- package/src/utils/constants.ts +2 -0
- package/src/utils/interfaces.ts +26 -1
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BaseConfig } from "@toruslabs/base-controllers";
|
|
2
|
+
import { JRPCRequest } from "@toruslabs/openlogin-jrpc";
|
|
3
|
+
import NetworkController from "../Network/NetworkController";
|
|
4
|
+
import PreferencesController from "../Preferences/PreferencesController";
|
|
5
|
+
import { AddChainMessage, AddChainMessageParams, UserRequestApprovalParams } from "../utils/interfaces";
|
|
6
|
+
import AbstractMessageController, { MessageControllerState } from "./AbstractMessageController";
|
|
7
|
+
export declare class AddChainController extends AbstractMessageController<AddChainMessage, AddChainMessageParams> {
|
|
8
|
+
name: string;
|
|
9
|
+
protected addChain: PreferencesController["addChain"];
|
|
10
|
+
constructor({ config, state, getNetworkIdentifier, addChain, }: {
|
|
11
|
+
config: Partial<BaseConfig>;
|
|
12
|
+
state: Partial<MessageControllerState<AddChainMessage>>;
|
|
13
|
+
getNetworkIdentifier: NetworkController["getNetworkIdentifier"];
|
|
14
|
+
addChain: PreferencesController["addChain"];
|
|
15
|
+
});
|
|
16
|
+
processAddChain(messageId: string): Promise<string>;
|
|
17
|
+
addNewUnapprovedMessage(messageParams: AddChainMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string>;
|
|
18
|
+
addUnapprovedMessage(messageParams: AddChainMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string>;
|
|
19
|
+
prepMessageForSigning(messageParams: AddChainMessageParams): Promise<AddChainMessageParams>;
|
|
20
|
+
}
|
|
@@ -14,7 +14,7 @@ export declare class DecryptMessageController extends AbstractMessageController<
|
|
|
14
14
|
getNetworkIdentifier: NetworkController["getNetworkIdentifier"];
|
|
15
15
|
});
|
|
16
16
|
processDecryptMessage(messageId: string): Promise<string>;
|
|
17
|
-
addNewUnapprovedMessage(messageParams: DecryptMessageParams, req: JRPCRequest<
|
|
18
|
-
addUnapprovedMessage(messageParams: DecryptMessageParams, req?: JRPCRequest<
|
|
17
|
+
addNewUnapprovedMessage(messageParams: DecryptMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string>;
|
|
18
|
+
addUnapprovedMessage(messageParams: DecryptMessageParams, req?: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string>;
|
|
19
19
|
prepMessageForSigning(messageParams: DecryptMessageParams): Promise<DecryptMessageParams>;
|
|
20
20
|
}
|
|
@@ -14,7 +14,7 @@ export declare class EncryptionPublicKeyController extends AbstractMessageContro
|
|
|
14
14
|
getNetworkIdentifier: NetworkController["getNetworkIdentifier"];
|
|
15
15
|
});
|
|
16
16
|
processGetEncryptionPublicKey(messageId: string): Promise<string>;
|
|
17
|
-
addNewUnapprovedMessage(messageParams: EncryptionPublicKeyParams, req: JRPCRequest<
|
|
18
|
-
addUnapprovedMessage(messageParams: EncryptionPublicKeyParams, req?: JRPCRequest<
|
|
17
|
+
addNewUnapprovedMessage(messageParams: EncryptionPublicKeyParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string>;
|
|
18
|
+
addUnapprovedMessage(messageParams: EncryptionPublicKeyParams, req?: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string>;
|
|
19
19
|
prepMessageForSigning(messageParams: EncryptionPublicKeyParams): Promise<EncryptionPublicKeyParams>;
|
|
20
20
|
}
|
|
@@ -14,7 +14,7 @@ export declare class MessageController extends AbstractMessageController<Message
|
|
|
14
14
|
getNetworkIdentifier: NetworkController["getNetworkIdentifier"];
|
|
15
15
|
});
|
|
16
16
|
processSignMessage(messageId: string): Promise<string>;
|
|
17
|
-
addNewUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<
|
|
18
|
-
addUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<
|
|
17
|
+
addNewUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string>;
|
|
18
|
+
addUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string>;
|
|
19
19
|
prepMessageForSigning(messageParams: MessageParams): Promise<MessageParams>;
|
|
20
20
|
}
|
|
@@ -14,7 +14,7 @@ export declare class PersonalMessageController extends AbstractMessageController
|
|
|
14
14
|
getNetworkIdentifier: NetworkController["getNetworkIdentifier"];
|
|
15
15
|
});
|
|
16
16
|
processPersonalSignMessage(messageId: string): Promise<string>;
|
|
17
|
-
addNewUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<
|
|
18
|
-
addUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<
|
|
17
|
+
addNewUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string>;
|
|
18
|
+
addUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string>;
|
|
19
19
|
prepMessageForSigning(messageParams: MessageParams): Promise<MessageParams>;
|
|
20
20
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BaseConfig } from "@toruslabs/base-controllers";
|
|
2
|
+
import { JRPCRequest } from "@toruslabs/openlogin-jrpc";
|
|
3
|
+
import NetworkController from "../Network/NetworkController";
|
|
4
|
+
import PreferencesController from "../Preferences/PreferencesController";
|
|
5
|
+
import { SwitchChainMessage, SwitchChainMessageParams, UserRequestApprovalParams } from "../utils/interfaces";
|
|
6
|
+
import AbstractMessageController, { MessageControllerState } from "./AbstractMessageController";
|
|
7
|
+
export declare class SwitchChainController extends AbstractMessageController<SwitchChainMessage, SwitchChainMessageParams> {
|
|
8
|
+
name: string;
|
|
9
|
+
protected switchChain: PreferencesController["switchChain"];
|
|
10
|
+
constructor({ config, state, getNetworkIdentifier, switchChain, }: {
|
|
11
|
+
config: Partial<BaseConfig>;
|
|
12
|
+
state: Partial<MessageControllerState<SwitchChainMessage>>;
|
|
13
|
+
getNetworkIdentifier: NetworkController["getNetworkIdentifier"];
|
|
14
|
+
switchChain: PreferencesController["switchChain"];
|
|
15
|
+
});
|
|
16
|
+
processSwitchChain(messageId: string): Promise<string>;
|
|
17
|
+
addNewUnapprovedMessage(messageParams: SwitchChainMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string>;
|
|
18
|
+
addUnapprovedMessage(messageParams: SwitchChainMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string>;
|
|
19
|
+
prepMessageForSigning(messageParams: SwitchChainMessageParams): Promise<SwitchChainMessageParams>;
|
|
20
|
+
}
|
|
@@ -15,7 +15,7 @@ export declare class TypedMessageController extends AbstractMessageController<Ty
|
|
|
15
15
|
getNetworkIdentifier: NetworkController["getNetworkIdentifier"];
|
|
16
16
|
});
|
|
17
17
|
processPersonalSignMessage(messageId: string): Promise<string>;
|
|
18
|
-
addNewUnapprovedMessage(messageParams: TypedMessageParams, req: JRPCRequest<
|
|
19
|
-
addUnapprovedMessage(messageParams: TypedMessageParams, req: JRPCRequest<
|
|
18
|
+
addNewUnapprovedMessage(messageParams: TypedMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams, version: SignTypedDataVersion): Promise<string>;
|
|
19
|
+
addUnapprovedMessage(messageParams: TypedMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams, version: SignTypedDataVersion): Promise<string>;
|
|
20
20
|
prepMessageForSigning(messageParams: TypedMessageParams): Promise<TypedMessageParams>;
|
|
21
21
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EthEncryptedData } from "@metamask/eth-sig-util";
|
|
2
|
-
import { DecryptMessageParams, EncryptionPublicKeyParams, MessageParams, TypedMessageParams } from "../utils/interfaces";
|
|
2
|
+
import { AddChainMessageParams, DecryptMessageParams, EncryptionPublicKeyParams, MessageParams, SwitchChainMessageParams, TypedMessageParams } from "../utils/interfaces";
|
|
3
3
|
export declare function validateAddress(address: string, propertyName: string): void;
|
|
4
4
|
export declare function validateSignMessageData(messageData: MessageParams): void;
|
|
5
5
|
export declare function normalizeMessageData(data: string): string;
|
|
@@ -8,3 +8,5 @@ export declare function validateTypedSignMessageDataV3V4(messageData: TypedMessa
|
|
|
8
8
|
export declare function validateEncryptionPublicKeyMessageData(messageData: EncryptionPublicKeyParams): void;
|
|
9
9
|
export declare function validateDecryptedMessageData(messageData: DecryptMessageParams): void;
|
|
10
10
|
export declare function parseDecryptMessageData(data: string): EthEncryptedData;
|
|
11
|
+
export declare function validateAddChainData(data: AddChainMessageParams): Promise<void>;
|
|
12
|
+
export declare function validateSwitchChainData(data: SwitchChainMessageParams): void;
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { InPageWalletProviderState } from "@toruslabs/base-controllers";
|
|
2
2
|
import { JRPCEngineEndCallback, JRPCEngineNextCallback, JRPCMiddleware, JRPCRequest, JRPCResponse } from "@toruslabs/openlogin-jrpc";
|
|
3
|
-
import { BlockParams, EncryptionPublicKeyParams, EthereumTransactionMeta, MessageParams, TransactionParams, TransactionRPCMeta, TypedMessageParams, UserRequestApprovalParams } from "../utils/interfaces";
|
|
3
|
+
import { AddChainMessageParams, BlockParams, EncryptionPublicKeyParams, EthereumTransactionMeta, MessageParams, SwitchChainMessageParams, TransactionParams, TransactionRPCMeta, TypedMessageParams, UserRequestApprovalParams } from "../utils/interfaces";
|
|
4
4
|
export interface IProviderHandlers {
|
|
5
5
|
version: string;
|
|
6
6
|
requestAccounts?: (req: JRPCRequest<string[]>) => Promise<string[]>;
|
|
7
7
|
getAccounts: (req: JRPCRequest<string[]>) => Promise<string[]>;
|
|
8
8
|
processTransaction?: (txParams: TransactionParams, req: JRPCRequest<TransactionParams> & UserRequestApprovalParams) => Promise<string>;
|
|
9
|
-
processEthSignMessage?: (msgParams: MessageParams, req: JRPCRequest<
|
|
10
|
-
processTypedMessage?: (msgParams: TypedMessageParams, req: JRPCRequest<
|
|
11
|
-
processTypedMessageV3?: (msgParams: TypedMessageParams, req: JRPCRequest<
|
|
12
|
-
processTypedMessageV4?: (msgParams: TypedMessageParams, req: JRPCRequest<
|
|
13
|
-
processPersonalMessage?: (msgParams: MessageParams, req: JRPCRequest<
|
|
14
|
-
processEncryptionPublicKey?: (msgParams: EncryptionPublicKeyParams, req: JRPCRequest<
|
|
15
|
-
processDecryptMessage?: (msgParams: MessageParams, req: JRPCRequest<
|
|
9
|
+
processEthSignMessage?: (msgParams: MessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams) => Promise<string>;
|
|
10
|
+
processTypedMessage?: (msgParams: TypedMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams) => Promise<string>;
|
|
11
|
+
processTypedMessageV3?: (msgParams: TypedMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams) => Promise<string>;
|
|
12
|
+
processTypedMessageV4?: (msgParams: TypedMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams) => Promise<string>;
|
|
13
|
+
processPersonalMessage?: (msgParams: MessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams) => Promise<string>;
|
|
14
|
+
processEncryptionPublicKey?: (msgParams: EncryptionPublicKeyParams, req: JRPCRequest<unknown> & UserRequestApprovalParams) => Promise<string>;
|
|
15
|
+
processDecryptMessage?: (msgParams: MessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams) => Promise<string>;
|
|
16
|
+
processSwitchEthereumChain?: (msgParams: SwitchChainMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams) => Promise<string>;
|
|
17
|
+
processAddEthereumChain?: (msgParams: AddChainMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams) => Promise<string>;
|
|
16
18
|
getPendingNonce?: (nonceParams: {
|
|
17
19
|
address: string;
|
|
18
20
|
blockReference: string;
|
|
@@ -31,19 +33,19 @@ export declare function createProcessTransactionMiddleware({ processTransaction,
|
|
|
31
33
|
}): JRPCMiddleware<TransactionParams, string>;
|
|
32
34
|
export declare function createProcessEthSignMessage({ processEthSignMessage, }: {
|
|
33
35
|
processEthSignMessage: IProviderHandlers["processEthSignMessage"];
|
|
34
|
-
}): JRPCMiddleware<
|
|
36
|
+
}): JRPCMiddleware<unknown, string>;
|
|
35
37
|
export declare function createProcessTypedMessage({ processTypedMessage, }: {
|
|
36
38
|
processTypedMessage: IProviderHandlers["processTypedMessage"];
|
|
37
|
-
}): JRPCMiddleware<
|
|
39
|
+
}): JRPCMiddleware<unknown, string>;
|
|
38
40
|
export declare function createProcessTypedMessageV3({ processTypedMessageV3, }: {
|
|
39
41
|
processTypedMessageV3: IProviderHandlers["processTypedMessageV3"];
|
|
40
|
-
}): JRPCMiddleware<
|
|
42
|
+
}): JRPCMiddleware<unknown, string>;
|
|
41
43
|
export declare function createProcessTypedMessageV4({ processTypedMessageV4, }: {
|
|
42
44
|
processTypedMessageV4: IProviderHandlers["processTypedMessageV4"];
|
|
43
|
-
}): JRPCMiddleware<
|
|
45
|
+
}): JRPCMiddleware<unknown, string>;
|
|
44
46
|
export declare function createProcessPersonalMessage({ processPersonalMessage, }: {
|
|
45
47
|
processPersonalMessage: IProviderHandlers["processPersonalMessage"];
|
|
46
|
-
}): JRPCMiddleware<
|
|
48
|
+
}): JRPCMiddleware<unknown, string>;
|
|
47
49
|
export declare function createPendingNonceMiddleware({ getPendingNonce, }: {
|
|
48
50
|
getPendingNonce: IProviderHandlers["getPendingNonce"];
|
|
49
51
|
}): JRPCMiddleware<{
|
|
@@ -56,10 +58,16 @@ export declare function createPendingTxMiddleware({ getPendingTransactionByHash,
|
|
|
56
58
|
}): JRPCMiddleware<string, TransactionRPCMeta>;
|
|
57
59
|
export declare function createProcessEncryptionPublicKeyMiddleware({ processEncryptionPublicKey, }: {
|
|
58
60
|
processEncryptionPublicKey: IProviderHandlers["processEncryptionPublicKey"];
|
|
59
|
-
}): JRPCMiddleware<
|
|
61
|
+
}): JRPCMiddleware<unknown, string>;
|
|
60
62
|
export declare function createProcessDecryptMessageMiddleware({ processDecryptMessage, }: {
|
|
61
63
|
processDecryptMessage: IProviderHandlers["processDecryptMessage"];
|
|
62
|
-
}): JRPCMiddleware<
|
|
64
|
+
}): JRPCMiddleware<unknown, string>;
|
|
65
|
+
export declare function createProcessSwitchEthereumChain({ processSwitchEthereumChain, }: {
|
|
66
|
+
processSwitchEthereumChain: IProviderHandlers["processSwitchEthereumChain"];
|
|
67
|
+
}): JRPCMiddleware<unknown, string>;
|
|
68
|
+
export declare function createProcessAddEthereumChain({ processAddEthereumChain, }: {
|
|
69
|
+
processAddEthereumChain: IProviderHandlers["processAddEthereumChain"];
|
|
70
|
+
}): JRPCMiddleware<unknown, string>;
|
|
63
71
|
export declare function createRequestAccountsMiddleware({ requestAccounts, }: {
|
|
64
72
|
requestAccounts: IProviderHandlers["requestAccounts"];
|
|
65
73
|
}): JRPCMiddleware<string[], unknown>;
|
|
@@ -3,7 +3,7 @@ import { SafeEventEmitterProvider } from "@toruslabs/openlogin-jrpc";
|
|
|
3
3
|
import PollingBlockTracker from "../Block/PollingBlockTracker";
|
|
4
4
|
import KeyringController from "../Keyring/KeyringController";
|
|
5
5
|
import NetworkController from "../Network/NetworkController";
|
|
6
|
-
import type { CustomNetworkPayload, CustomNftInfo, CustomTokenInfo, ExtendedAddressPreferences, TransactionPayload } from "../utils/interfaces";
|
|
6
|
+
import type { AddChainMessageParams, CustomNetworkPayload, CustomNftInfo, CustomTokenInfo, ExtendedAddressPreferences, TransactionPayload } from "../utils/interfaces";
|
|
7
7
|
interface IPreferencesControllerOptions {
|
|
8
8
|
config?: Partial<PreferencesConfig> & Pick<PreferencesConfig, "api" | "commonApiHost" | "signInPrefix">;
|
|
9
9
|
state?: Partial<PreferencesState<ExtendedAddressPreferences>>;
|
|
@@ -11,14 +11,16 @@ interface IPreferencesControllerOptions {
|
|
|
11
11
|
blockTracker?: PollingBlockTracker;
|
|
12
12
|
signAuthMessage?: KeyringController["signAuthMessage"];
|
|
13
13
|
getProviderConfig?: NetworkController["getProviderConfig"];
|
|
14
|
+
setProviderConfig?: NetworkController["setProviderConfig"];
|
|
14
15
|
}
|
|
15
16
|
export default class PreferencesController extends BasePreferencesController<ExtendedAddressPreferences, PreferencesConfig, PreferencesState<ExtendedAddressPreferences>> implements IPreferencesController<ExtendedAddressPreferences, PreferencesConfig, PreferencesState<ExtendedAddressPreferences>> {
|
|
16
17
|
private _handle?;
|
|
17
18
|
private _mutex;
|
|
18
19
|
private getProviderConfig;
|
|
20
|
+
private setProviderConfig;
|
|
19
21
|
private provider;
|
|
20
22
|
private blockTracker;
|
|
21
|
-
constructor({ config, state, provider, blockTracker, signAuthMessage, getProviderConfig }: IPreferencesControllerOptions);
|
|
23
|
+
constructor({ config, state, provider, blockTracker, signAuthMessage, getProviderConfig, setProviderConfig }: IPreferencesControllerOptions);
|
|
22
24
|
poll(interval?: number): Promise<void>;
|
|
23
25
|
initPreferences(params: {
|
|
24
26
|
address: string;
|
|
@@ -44,6 +46,10 @@ export default class PreferencesController extends BasePreferencesController<Ext
|
|
|
44
46
|
getSimpleHashNfts(address: string, chainId: string): Promise<CustomNftInfo[]>;
|
|
45
47
|
getCustomTokens(address?: string): CustomToken[];
|
|
46
48
|
getCustomNfts(address?: string): CustomNft[];
|
|
49
|
+
addChain(network: AddChainMessageParams): Promise<void>;
|
|
50
|
+
switchChain(data: {
|
|
51
|
+
chainId: string;
|
|
52
|
+
}): void;
|
|
47
53
|
addCustomNetwork({ type, network }: {
|
|
48
54
|
type: string;
|
|
49
55
|
network: CustomNetworkPayload;
|
|
@@ -54,6 +60,7 @@ export default class PreferencesController extends BasePreferencesController<Ext
|
|
|
54
60
|
id: number | null;
|
|
55
61
|
}): Promise<boolean>;
|
|
56
62
|
private calculatePaymentTx;
|
|
63
|
+
private getChainOptions;
|
|
57
64
|
private calculatePastTx;
|
|
58
65
|
private cancelTxCalculate;
|
|
59
66
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -5,10 +5,12 @@ export { default as GasFeeController } from "./Gas/GasFeeController";
|
|
|
5
5
|
export * from "./Gas/IGasFeeController";
|
|
6
6
|
export { default as KeyringController } from "./Keyring/KeyringController";
|
|
7
7
|
export * from "./Message/AbstractMessageController";
|
|
8
|
+
export * from "./Message/AddChainController";
|
|
8
9
|
export * from "./Message/DecryptMessageController";
|
|
9
10
|
export * from "./Message/EncryptionPublicKeyController";
|
|
10
11
|
export * from "./Message/MessageController";
|
|
11
12
|
export * from "./Message/PersonalMessageController";
|
|
13
|
+
export * from "./Message/SwitchChainController";
|
|
12
14
|
export * from "./Message/TypedMessageController";
|
|
13
15
|
export * from "./Message/utils";
|
|
14
16
|
export * from "./Network/createEthereumMiddleware";
|
|
@@ -43,6 +43,8 @@ export declare const METHOD_TYPES: {
|
|
|
43
43
|
readonly ETH_GET_BLOCK_BY_HASH: "eth_getBlockByHash";
|
|
44
44
|
readonly ETH_GET_CODE: "eth_getCode";
|
|
45
45
|
readonly ETH_GET_GAS_PRICE: "eth_gasPrice";
|
|
46
|
+
readonly SWITCH_CHAIN: "wallet_switchEthereumChain";
|
|
47
|
+
readonly ADD_CHAIN: "wallet_addEthereumChain";
|
|
46
48
|
};
|
|
47
49
|
export declare const TRANSACTION_ENVELOPE_TYPES: {
|
|
48
50
|
readonly LEGACY: "0x0";
|
|
@@ -54,7 +54,7 @@ export interface BaseRequestParams {
|
|
|
54
54
|
/**
|
|
55
55
|
* Unique id for each request
|
|
56
56
|
*/
|
|
57
|
-
id
|
|
57
|
+
id?: string;
|
|
58
58
|
/**
|
|
59
59
|
* Address to send this transaction from.
|
|
60
60
|
*/
|
|
@@ -89,6 +89,27 @@ export type SignTypedDataMessageV3V4 = {
|
|
|
89
89
|
primaryType: string;
|
|
90
90
|
message: unknown;
|
|
91
91
|
};
|
|
92
|
+
export interface SwitchChainMessageParams extends BaseRequestParams {
|
|
93
|
+
chainId: string;
|
|
94
|
+
displayName?: string;
|
|
95
|
+
}
|
|
96
|
+
export interface SwitchChainMessage extends AbstractMessage {
|
|
97
|
+
messageParams: SwitchChainMessageParams;
|
|
98
|
+
}
|
|
99
|
+
export interface AddChainMessageParams extends BaseRequestParams {
|
|
100
|
+
chainId: string;
|
|
101
|
+
chainName: string;
|
|
102
|
+
nativeCurrency: {
|
|
103
|
+
name: string;
|
|
104
|
+
symbol: string;
|
|
105
|
+
decimals: number;
|
|
106
|
+
};
|
|
107
|
+
rpcUrls: string[];
|
|
108
|
+
blockExplorerUrls?: string[];
|
|
109
|
+
}
|
|
110
|
+
export interface AddChainMessage extends AbstractMessage {
|
|
111
|
+
messageParams: AddChainMessageParams;
|
|
112
|
+
}
|
|
92
113
|
export interface TypedMessageParams extends BaseRequestParams {
|
|
93
114
|
data: Record<string, unknown>[] | string | SignTypedDataMessageV3V4;
|
|
94
115
|
version?: SignTypedDataVersion;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toruslabs/ethereum-controllers",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.7.0",
|
|
4
4
|
"homepage": "https://github.com/torusresearch/controllers#readme",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"main": "dist/ethereumControllers.cjs.js",
|
|
@@ -19,18 +19,18 @@
|
|
|
19
19
|
"pre-commit": "lint-staged --cwd ."
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@ethereumjs/common": "^4.
|
|
23
|
-
"@ethereumjs/tx": "^5.
|
|
24
|
-
"@ethereumjs/util": "^9.0.
|
|
22
|
+
"@ethereumjs/common": "^4.1.0",
|
|
23
|
+
"@ethereumjs/tx": "^5.1.0",
|
|
24
|
+
"@ethereumjs/util": "^9.0.1",
|
|
25
25
|
"@metamask/eth-sig-util": "^7.0.0",
|
|
26
|
-
"@metamask/rpc-errors": "^6.
|
|
27
|
-
"@toruslabs/base-controllers": "^4.
|
|
26
|
+
"@metamask/rpc-errors": "^6.1.0",
|
|
27
|
+
"@toruslabs/base-controllers": "^4.7.0",
|
|
28
28
|
"@toruslabs/http-helpers": "^5.0.0",
|
|
29
|
-
"@toruslabs/openlogin-jrpc": "^
|
|
29
|
+
"@toruslabs/openlogin-jrpc": "^6.0.0",
|
|
30
30
|
"async-mutex": "^0.4.0",
|
|
31
31
|
"bignumber.js": "^9.1.2",
|
|
32
32
|
"bn.js": "^5.2.1",
|
|
33
|
-
"ethers": "^6.
|
|
33
|
+
"ethers": "^6.8.1",
|
|
34
34
|
"fast-json-patch": "^3.1.1",
|
|
35
35
|
"jsonschema": "^1.4.1",
|
|
36
36
|
"lodash": "^4.17.21",
|
|
@@ -64,8 +64,8 @@
|
|
|
64
64
|
"publishConfig": {
|
|
65
65
|
"access": "public"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "607fe40ee1f6c932e02e99f203f2480ad3f59ece",
|
|
68
68
|
"devDependencies": {
|
|
69
|
-
"
|
|
69
|
+
"hardhat": "^2.19.0"
|
|
70
70
|
}
|
|
71
71
|
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { BaseConfig, randomId } from "@toruslabs/base-controllers";
|
|
2
|
+
import { JRPCRequest } from "@toruslabs/openlogin-jrpc";
|
|
3
|
+
import log from "loglevel";
|
|
4
|
+
|
|
5
|
+
import NetworkController from "../Network/NetworkController";
|
|
6
|
+
import PreferencesController from "../Preferences/PreferencesController";
|
|
7
|
+
import { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from "../utils/constants";
|
|
8
|
+
import { AddChainMessage, AddChainMessageParams, UserRequestApprovalParams } from "../utils/interfaces";
|
|
9
|
+
import AbstractMessageController, { MessageControllerState } from "./AbstractMessageController";
|
|
10
|
+
import { validateAddChainData } from "./utils";
|
|
11
|
+
|
|
12
|
+
export class AddChainController extends AbstractMessageController<AddChainMessage, AddChainMessageParams> {
|
|
13
|
+
override name = "AddChainController";
|
|
14
|
+
|
|
15
|
+
protected addChain: PreferencesController["addChain"];
|
|
16
|
+
|
|
17
|
+
constructor({
|
|
18
|
+
config,
|
|
19
|
+
state,
|
|
20
|
+
getNetworkIdentifier,
|
|
21
|
+
addChain,
|
|
22
|
+
}: {
|
|
23
|
+
config: Partial<BaseConfig>;
|
|
24
|
+
state: Partial<MessageControllerState<AddChainMessage>>;
|
|
25
|
+
getNetworkIdentifier: NetworkController["getNetworkIdentifier"];
|
|
26
|
+
addChain: PreferencesController["addChain"];
|
|
27
|
+
}) {
|
|
28
|
+
super({ config, state, getNetworkIdentifier });
|
|
29
|
+
this.addChain = addChain;
|
|
30
|
+
this.initialize();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async processAddChain(messageId: string): Promise<string> {
|
|
34
|
+
try {
|
|
35
|
+
const msgObject = this.getMessage(messageId);
|
|
36
|
+
await this.approveMessage(messageId, msgObject.messageParams);
|
|
37
|
+
this.addChain(msgObject.messageParams);
|
|
38
|
+
this.updateMessage({ ...msgObject, rawSig: JSON.stringify(msgObject.messageParams) });
|
|
39
|
+
this.setMessageStatus(messageId, MessageStatus.SIGNED);
|
|
40
|
+
return null;
|
|
41
|
+
} catch (error) {
|
|
42
|
+
log.error(error);
|
|
43
|
+
this.setMessageStatus(messageId, MessageStatus.FAILED);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async addNewUnapprovedMessage(messageParams: AddChainMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string> {
|
|
48
|
+
await this.addUnapprovedMessage(messageParams, req);
|
|
49
|
+
return this.waitForFinishStatus(messageParams, this.name);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async addUnapprovedMessage(messageParams: AddChainMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string> {
|
|
53
|
+
validateAddChainData(messageParams);
|
|
54
|
+
if (req) {
|
|
55
|
+
messageParams.origin = req.origin;
|
|
56
|
+
}
|
|
57
|
+
const messageId = messageParams.id || randomId();
|
|
58
|
+
const messageData: AddChainMessage = {
|
|
59
|
+
id: messageId,
|
|
60
|
+
messageParams,
|
|
61
|
+
status: MessageStatus.UNAPPROVED,
|
|
62
|
+
time: Date.now(),
|
|
63
|
+
type: METHOD_TYPES.ADD_CHAIN,
|
|
64
|
+
};
|
|
65
|
+
await this.addMessage(messageData);
|
|
66
|
+
this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, messageData);
|
|
67
|
+
return messageId;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
prepMessageForSigning(messageParams: AddChainMessageParams): Promise<AddChainMessageParams> {
|
|
71
|
+
return Promise.resolve(messageParams);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -46,15 +46,12 @@ export class DecryptMessageController extends AbstractMessageController<DecryptM
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
async addNewUnapprovedMessage(
|
|
50
|
-
messageParams: DecryptMessageParams,
|
|
51
|
-
req: JRPCRequest<DecryptMessageParams> & UserRequestApprovalParams
|
|
52
|
-
): Promise<string> {
|
|
49
|
+
async addNewUnapprovedMessage(messageParams: DecryptMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string> {
|
|
53
50
|
await this.addUnapprovedMessage(messageParams, req);
|
|
54
51
|
return this.waitForFinishStatus(messageParams, this.name);
|
|
55
52
|
}
|
|
56
53
|
|
|
57
|
-
async addUnapprovedMessage(messageParams: DecryptMessageParams, req?: JRPCRequest<
|
|
54
|
+
async addUnapprovedMessage(messageParams: DecryptMessageParams, req?: JRPCRequest<unknown> & UserRequestApprovalParams) {
|
|
58
55
|
validateDecryptedMessageData(messageParams);
|
|
59
56
|
if (req) {
|
|
60
57
|
messageParams.origin = req.origin;
|
|
@@ -45,18 +45,12 @@ export class EncryptionPublicKeyController extends AbstractMessageController<Enc
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
async addNewUnapprovedMessage(
|
|
49
|
-
messageParams: EncryptionPublicKeyParams,
|
|
50
|
-
req: JRPCRequest<EncryptionPublicKeyParams> & UserRequestApprovalParams
|
|
51
|
-
): Promise<string> {
|
|
48
|
+
async addNewUnapprovedMessage(messageParams: EncryptionPublicKeyParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string> {
|
|
52
49
|
await this.addUnapprovedMessage(messageParams, req);
|
|
53
50
|
return this.waitForFinishStatus(messageParams, this.name);
|
|
54
51
|
}
|
|
55
52
|
|
|
56
|
-
async addUnapprovedMessage(
|
|
57
|
-
messageParams: EncryptionPublicKeyParams,
|
|
58
|
-
req?: JRPCRequest<EncryptionPublicKeyParams> & UserRequestApprovalParams
|
|
59
|
-
): Promise<string> {
|
|
53
|
+
async addUnapprovedMessage(messageParams: EncryptionPublicKeyParams, req?: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string> {
|
|
60
54
|
validateEncryptionPublicKeyMessageData(messageParams);
|
|
61
55
|
if (req) {
|
|
62
56
|
messageParams.origin = req.origin;
|
|
@@ -44,12 +44,12 @@ export class MessageController extends AbstractMessageController<Message, Messag
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
async addNewUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<
|
|
47
|
+
async addNewUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string> {
|
|
48
48
|
await this.addUnapprovedMessage(messageParams, req);
|
|
49
49
|
return this.waitForFinishStatus(messageParams, this.name);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
async addUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<
|
|
52
|
+
async addUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string> {
|
|
53
53
|
validateSignMessageData(messageParams);
|
|
54
54
|
if (req) {
|
|
55
55
|
messageParams.origin = req.origin;
|
|
@@ -44,12 +44,12 @@ export class PersonalMessageController extends AbstractMessageController<Message
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
async addNewUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<
|
|
47
|
+
async addNewUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string> {
|
|
48
48
|
await this.addUnapprovedMessage(messageParams, req);
|
|
49
49
|
return this.waitForFinishStatus(messageParams, this.name);
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
async addUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<
|
|
52
|
+
async addUnapprovedMessage(messageParams: MessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string> {
|
|
53
53
|
validateSignMessageData(messageParams);
|
|
54
54
|
if (req) {
|
|
55
55
|
messageParams.origin = req.origin;
|
|
@@ -64,7 +64,7 @@ export class PersonalMessageController extends AbstractMessageController<Message
|
|
|
64
64
|
type: METHOD_TYPES.PERSONAL_SIGN,
|
|
65
65
|
};
|
|
66
66
|
await this.addMessage(messageData);
|
|
67
|
-
this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, messageData);
|
|
67
|
+
this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, { messageData, req });
|
|
68
68
|
return messageId;
|
|
69
69
|
}
|
|
70
70
|
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { BaseConfig, randomId } from "@toruslabs/base-controllers";
|
|
2
|
+
import { JRPCRequest } from "@toruslabs/openlogin-jrpc";
|
|
3
|
+
import log from "loglevel";
|
|
4
|
+
|
|
5
|
+
import NetworkController from "../Network/NetworkController";
|
|
6
|
+
import PreferencesController from "../Preferences/PreferencesController";
|
|
7
|
+
import { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from "../utils/constants";
|
|
8
|
+
import { SwitchChainMessage, SwitchChainMessageParams, UserRequestApprovalParams } from "../utils/interfaces";
|
|
9
|
+
import AbstractMessageController, { MessageControllerState } from "./AbstractMessageController";
|
|
10
|
+
import { validateSwitchChainData } from "./utils";
|
|
11
|
+
|
|
12
|
+
export class SwitchChainController extends AbstractMessageController<SwitchChainMessage, SwitchChainMessageParams> {
|
|
13
|
+
override name = "SwitchChainController";
|
|
14
|
+
|
|
15
|
+
protected switchChain: PreferencesController["switchChain"];
|
|
16
|
+
|
|
17
|
+
constructor({
|
|
18
|
+
config,
|
|
19
|
+
state,
|
|
20
|
+
getNetworkIdentifier,
|
|
21
|
+
switchChain,
|
|
22
|
+
}: {
|
|
23
|
+
config: Partial<BaseConfig>;
|
|
24
|
+
state: Partial<MessageControllerState<SwitchChainMessage>>;
|
|
25
|
+
getNetworkIdentifier: NetworkController["getNetworkIdentifier"];
|
|
26
|
+
switchChain: PreferencesController["switchChain"];
|
|
27
|
+
}) {
|
|
28
|
+
super({ config, state, getNetworkIdentifier });
|
|
29
|
+
|
|
30
|
+
this.switchChain = switchChain;
|
|
31
|
+
this.initialize();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async processSwitchChain(messageId: string): Promise<string> {
|
|
35
|
+
try {
|
|
36
|
+
const msgObject = this.getMessage(messageId);
|
|
37
|
+
await this.approveMessage(messageId, msgObject.messageParams);
|
|
38
|
+
this.switchChain({ chainId: msgObject.messageParams.chainId });
|
|
39
|
+
this.updateMessage({ ...msgObject, rawSig: JSON.stringify(msgObject.messageParams) });
|
|
40
|
+
this.setMessageStatus(messageId, MessageStatus.SIGNED);
|
|
41
|
+
return null;
|
|
42
|
+
} catch (error) {
|
|
43
|
+
log.error(error);
|
|
44
|
+
this.setMessageStatus(messageId, MessageStatus.FAILED);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
async addNewUnapprovedMessage(messageParams: SwitchChainMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string> {
|
|
49
|
+
await this.addUnapprovedMessage(messageParams, req);
|
|
50
|
+
return this.waitForFinishStatus(messageParams, this.name);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
async addUnapprovedMessage(messageParams: SwitchChainMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string> {
|
|
54
|
+
validateSwitchChainData(messageParams);
|
|
55
|
+
if (req) {
|
|
56
|
+
messageParams.origin = req.origin;
|
|
57
|
+
}
|
|
58
|
+
const messageId = messageParams.id || randomId();
|
|
59
|
+
const messageData: SwitchChainMessage = {
|
|
60
|
+
id: messageId,
|
|
61
|
+
messageParams,
|
|
62
|
+
status: MessageStatus.UNAPPROVED,
|
|
63
|
+
time: Date.now(),
|
|
64
|
+
type: METHOD_TYPES.SWITCH_CHAIN,
|
|
65
|
+
};
|
|
66
|
+
await this.addMessage(messageData);
|
|
67
|
+
this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, messageData);
|
|
68
|
+
return messageId;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
prepMessageForSigning(messageParams: SwitchChainMessageParams): Promise<SwitchChainMessageParams> {
|
|
72
|
+
return Promise.resolve(messageParams);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -61,7 +61,7 @@ export class TypedMessageController extends AbstractMessageController<TypedMessa
|
|
|
61
61
|
|
|
62
62
|
async addNewUnapprovedMessage(
|
|
63
63
|
messageParams: TypedMessageParams,
|
|
64
|
-
req: JRPCRequest<
|
|
64
|
+
req: JRPCRequest<unknown> & UserRequestApprovalParams,
|
|
65
65
|
version: SignTypedDataVersion
|
|
66
66
|
): Promise<string> {
|
|
67
67
|
await this.addUnapprovedMessage(messageParams, req, version);
|
|
@@ -70,7 +70,7 @@ export class TypedMessageController extends AbstractMessageController<TypedMessa
|
|
|
70
70
|
|
|
71
71
|
async addUnapprovedMessage(
|
|
72
72
|
messageParams: TypedMessageParams,
|
|
73
|
-
req: JRPCRequest<
|
|
73
|
+
req: JRPCRequest<unknown> & UserRequestApprovalParams,
|
|
74
74
|
version: SignTypedDataVersion
|
|
75
75
|
): Promise<string> {
|
|
76
76
|
if (version === SignTypedDataVersion.V1) {
|