@toruslabs/ethereum-controllers 5.5.3 → 5.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/ethereumControllers.cjs.js +3 -12
  2. package/dist/ethereumControllers.esm.js +2 -11
  3. package/dist/ethereumControllers.umd.min.js +1 -2
  4. package/dist/ethereumControllers.umd.min.js.LICENSE.txt +0 -2
  5. package/dist/types/Account/AccountTrackerController.d.ts +1 -1
  6. package/package.json +14 -15
  7. package/dist/ethereumControllers.cjs.js.map +0 -1
  8. package/dist/ethereumControllers.esm.js.map +0 -1
  9. package/dist/ethereumControllers.umd.min.js.map +0 -1
  10. package/src/Account/AccountTrackerController.ts +0 -172
  11. package/src/Block/PollingBlockTracker.ts +0 -89
  12. package/src/Currency/CurrencyController.ts +0 -117
  13. package/src/Gas/GasFeeController.ts +0 -261
  14. package/src/Gas/IGasFeeController.ts +0 -56
  15. package/src/Gas/gasUtil.ts +0 -163
  16. package/src/Keyring/KeyringController.ts +0 -117
  17. package/src/Message/AbstractMessageController.ts +0 -136
  18. package/src/Message/AddChainController.ts +0 -73
  19. package/src/Message/DecryptMessageController.ts +0 -76
  20. package/src/Message/EncryptionPublicKeyController.ts +0 -75
  21. package/src/Message/MessageController.ts +0 -74
  22. package/src/Message/PersonalMessageController.ts +0 -74
  23. package/src/Message/SwitchChainController.ts +0 -74
  24. package/src/Message/TypedMessageController.ts +0 -109
  25. package/src/Message/utils.ts +0 -155
  26. package/src/Network/NetworkController.ts +0 -184
  27. package/src/Network/createEthereumMiddleware.ts +0 -475
  28. package/src/Network/createJsonRpcClient.ts +0 -63
  29. package/src/Nfts/INftsController.ts +0 -13
  30. package/src/Nfts/NftHandler.ts +0 -191
  31. package/src/Nfts/NftsController.ts +0 -216
  32. package/src/Preferences/PreferencesController.ts +0 -473
  33. package/src/Tokens/ITokensController.ts +0 -13
  34. package/src/Tokens/TokenHandler.ts +0 -60
  35. package/src/Tokens/TokenRatesController.ts +0 -134
  36. package/src/Tokens/TokensController.ts +0 -273
  37. package/src/Transaction/NonceTracker.ts +0 -152
  38. package/src/Transaction/PendingTransactionTracker.ts +0 -235
  39. package/src/Transaction/TransactionController.ts +0 -558
  40. package/src/Transaction/TransactionGasUtil.ts +0 -74
  41. package/src/Transaction/TransactionStateHistoryHelper.ts +0 -41
  42. package/src/Transaction/TransactionStateManager.ts +0 -315
  43. package/src/Transaction/TransactionUtils.ts +0 -333
  44. package/src/index.ts +0 -49
  45. package/src/utils/abis.ts +0 -677
  46. package/src/utils/constants.ts +0 -438
  47. package/src/utils/contractAddresses.ts +0 -19
  48. package/src/utils/conversionUtils.ts +0 -269
  49. package/src/utils/helpers.ts +0 -245
  50. package/src/utils/interfaces.ts +0 -519
@@ -1,163 +0,0 @@
1
- import { get } from "@toruslabs/http-helpers";
2
- import { SafeEventEmitterProvider } from "@toruslabs/openlogin-jrpc";
3
- import BigNumber from "bignumber.js";
4
-
5
- import { METHOD_TYPES } from "../utils/constants";
6
- import { decGWEIToHexWEI, hexWEIToDecGWEI } from "../utils/conversionUtils";
7
- import {
8
- EthereumGasFeeEstimates,
9
- EthereumLegacyGasFeeEstimates,
10
- GasEstimatesAPIResponse,
11
- GasEstimatesLegacyAPIResponse,
12
- GasFeeTimeBounds,
13
- } from "./IGasFeeController";
14
-
15
- export function normalizeGWEIDecimalNumbers(n: string | number): number | BigNumber {
16
- const numberAsWEIHex = decGWEIToHexWEI(new BigNumber(n));
17
- const numberAsGWEI = hexWEIToDecGWEI(numberAsWEIHex);
18
- return numberAsGWEI;
19
- }
20
-
21
- export async function fetchGasEstimates(url: string): Promise<EthereumGasFeeEstimates> {
22
- const estimates = await get<GasEstimatesAPIResponse>(url);
23
- const normalizedEstimates = {
24
- estimatedBaseFee: normalizeGWEIDecimalNumbers(estimates.estimatedBaseFee).toString(10),
25
- low: {
26
- ...estimates.low,
27
- suggestedMaxPriorityFeePerGas: normalizeGWEIDecimalNumbers(estimates.low.suggestedMaxPriorityFeePerGas).toString(10),
28
- suggestedMaxFeePerGas: normalizeGWEIDecimalNumbers(estimates.low.suggestedMaxFeePerGas).toString(10),
29
- },
30
- medium: {
31
- ...estimates.medium,
32
- suggestedMaxPriorityFeePerGas: normalizeGWEIDecimalNumbers(estimates.medium.suggestedMaxPriorityFeePerGas).toString(10),
33
- suggestedMaxFeePerGas: normalizeGWEIDecimalNumbers(estimates.medium.suggestedMaxFeePerGas).toString(10),
34
- },
35
- high: {
36
- ...estimates.high,
37
- suggestedMaxPriorityFeePerGas: normalizeGWEIDecimalNumbers(estimates.high.suggestedMaxPriorityFeePerGas).toString(10),
38
- suggestedMaxFeePerGas: normalizeGWEIDecimalNumbers(estimates.high.suggestedMaxFeePerGas).toString(10),
39
- },
40
- };
41
- return normalizedEstimates;
42
- }
43
-
44
- export interface FeeHistoryResponse {
45
- baseFeePerGas: string[];
46
- gasUsedRatio: string[];
47
- oldestBlock: string;
48
- reward: string[][];
49
- }
50
-
51
- export async function fetchGasEstimatesViaEthFeeHistory(provider: SafeEventEmitterProvider): Promise<EthereumGasFeeEstimates> {
52
- const noOfBlocks = 10;
53
- const newestBlock = "latest";
54
- // get the 10, 50 and 95th percentile of the tip fees from the last 10 blocks
55
- const percentileValues = [10, 50, 95];
56
- const feeHistory = await provider.request<[number, string, number[]], FeeHistoryResponse>({
57
- method: "eth_feeHistory",
58
- params: [noOfBlocks, newestBlock, percentileValues],
59
- });
60
- // this is in hex wei
61
- const finalBaseFeePerGas = feeHistory.baseFeePerGas[feeHistory.baseFeePerGas.length - 1];
62
- // this is in hex wei
63
- const priorityFeeCalcs = feeHistory.reward.reduce(
64
- (acc, curr) => {
65
- return {
66
- slow: acc.slow.plus(new BigNumber(curr[0], 16)),
67
- average: acc.average.plus(new BigNumber(curr[1], 16)),
68
- fast: acc.fast.plus(new BigNumber(curr[2], 16)),
69
- };
70
- },
71
- { slow: new BigNumber(0), average: new BigNumber(0), fast: new BigNumber(0) }
72
- );
73
- return {
74
- estimatedBaseFee: hexWEIToDecGWEI(finalBaseFeePerGas).toString(10),
75
- high: {
76
- maxWaitTimeEstimate: 30_000,
77
- minWaitTimeEstimate: 15_000,
78
- suggestedMaxFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.fast.plus(finalBaseFeePerGas).toString(16)).toString(),
79
- suggestedMaxPriorityFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.fast.toString(16)).toString(),
80
- },
81
- medium: {
82
- maxWaitTimeEstimate: 45_000,
83
- minWaitTimeEstimate: 15_000,
84
- suggestedMaxFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.average.plus(finalBaseFeePerGas).toString(16)).toString(),
85
- suggestedMaxPriorityFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.average.toString(16)).toString(),
86
- },
87
- low: {
88
- maxWaitTimeEstimate: 60_000,
89
- minWaitTimeEstimate: 15_000,
90
- suggestedMaxFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.slow.plus(finalBaseFeePerGas).toString(16)).toString(),
91
- suggestedMaxPriorityFeePerGas: hexWEIToDecGWEI(priorityFeeCalcs.slow.toString(16)).toString(),
92
- },
93
- };
94
- }
95
-
96
- /**
97
- * Hit the legacy MetaSwaps gasPrices estimate api and return the low, medium
98
- * high values from that API.
99
- */
100
- export async function fetchLegacyGasPriceEstimates(url: string): Promise<EthereumLegacyGasFeeEstimates> {
101
- const result = await get<GasEstimatesLegacyAPIResponse>(url, {
102
- referrer: url,
103
- referrerPolicy: "no-referrer-when-downgrade",
104
- method: "GET",
105
- });
106
- // this returns decimal gwei
107
- return {
108
- low: result.SafeGasPrice,
109
- medium: result.ProposeGasPrice,
110
- high: result.FastGasPrice,
111
- };
112
- }
113
-
114
- export async function fetchEthGasPriceEstimate(provider: SafeEventEmitterProvider): Promise<{ gasPrice: string }> {
115
- const gasPrice = await provider.request<never, string>({ method: METHOD_TYPES.ETH_GET_GAS_PRICE });
116
- return {
117
- gasPrice: hexWEIToDecGWEI(gasPrice).toString(),
118
- };
119
- }
120
-
121
- export function calculateTimeEstimate(
122
- maxPriorityFeePerGas: string,
123
- maxFeePerGas: string,
124
- gasFeeEstimates: EthereumGasFeeEstimates
125
- ): GasFeeTimeBounds {
126
- // all are in dec gwei
127
- const { low, medium, high, estimatedBaseFee } = gasFeeEstimates;
128
-
129
- const maxPriorityFeePerGasInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(maxPriorityFeePerGas)), 16);
130
- const maxFeePerGasInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(maxFeePerGas)), 16);
131
- const estimatedBaseFeeInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(estimatedBaseFee)), 16);
132
-
133
- const effectiveMaxPriorityFee = BigNumber.min(maxPriorityFeePerGasInWEI, maxFeePerGasInWEI.minus(estimatedBaseFeeInWEI));
134
-
135
- const lowMaxPriorityFeeInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(low.suggestedMaxPriorityFeePerGas)), 16);
136
- const mediumMaxPriorityFeeInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(medium.suggestedMaxPriorityFeePerGas)), 16);
137
- const highMaxPriorityFeeInWEI = new BigNumber(decGWEIToHexWEI(new BigNumber(high.suggestedMaxPriorityFeePerGas)), 16);
138
-
139
- let lowerTimeBound: null | number;
140
- let upperTimeBound: string | number;
141
-
142
- if (effectiveMaxPriorityFee.lt(lowMaxPriorityFeeInWEI)) {
143
- lowerTimeBound = null;
144
- upperTimeBound = "unknown";
145
- } else if (effectiveMaxPriorityFee.gte(lowMaxPriorityFeeInWEI) && effectiveMaxPriorityFee.lt(mediumMaxPriorityFeeInWEI)) {
146
- lowerTimeBound = low.minWaitTimeEstimate;
147
- upperTimeBound = low.maxWaitTimeEstimate;
148
- } else if (effectiveMaxPriorityFee.gte(mediumMaxPriorityFeeInWEI) && effectiveMaxPriorityFee.lt(highMaxPriorityFeeInWEI)) {
149
- lowerTimeBound = medium.minWaitTimeEstimate;
150
- upperTimeBound = medium.maxWaitTimeEstimate;
151
- } else if (effectiveMaxPriorityFee.eq(highMaxPriorityFeeInWEI)) {
152
- lowerTimeBound = high.minWaitTimeEstimate;
153
- upperTimeBound = high.maxWaitTimeEstimate;
154
- } else {
155
- lowerTimeBound = 0;
156
- upperTimeBound = high.maxWaitTimeEstimate;
157
- }
158
-
159
- return {
160
- lowerTimeBound,
161
- upperTimeBound,
162
- };
163
- }
@@ -1,117 +0,0 @@
1
- import { TypedTransaction } from "@ethereumjs/tx";
2
- import { bigIntToBytes, bytesToHex, ecsign, privateToAddress, privateToPublic, stripHexPrefix } from "@ethereumjs/util";
3
- import {
4
- concatSig,
5
- decrypt,
6
- EthEncryptedData,
7
- getEncryptionPublicKey,
8
- MessageTypes,
9
- personalSign,
10
- signTypedData,
11
- SignTypedDataVersion,
12
- TypedDataV1,
13
- TypedMessage,
14
- } from "@metamask/eth-sig-util";
15
- import { BaseConfig, BaseKeyringController, IKeyringController, KeyringControllerState } from "@toruslabs/base-controllers";
16
-
17
- export default class KeyringController extends BaseKeyringController<Partial<BaseConfig>, KeyringControllerState> implements IKeyringController {
18
- constructor({ config, state }: { config: Partial<BaseConfig>; state: Partial<KeyringControllerState> }) {
19
- super({ config, state });
20
- this.defaultState = { wallets: [] };
21
- this.initialize();
22
- }
23
-
24
- async signTransaction<T, U>(tx: T, address: string): Promise<U> {
25
- const txPayload = tx as unknown as TypedTransaction;
26
- const wallet = this._getWalletForAccount(address);
27
- const privKey = this.getBufferPrivateKey(wallet.privateKey);
28
- const signedTx = txPayload.sign(privKey);
29
- // Newer versions of Ethereumjs-tx are immutable and return a new tx object
30
- return signedTx === undefined ? (tx as unknown as U) : (signedTx as unknown as U);
31
- }
32
-
33
- getAccounts(): string[] {
34
- return this.state.wallets.map((w) => w.publicKey);
35
- }
36
-
37
- importAccount(accountPrivateKey: string): string {
38
- const hexPrivateKey = accountPrivateKey.padStart(64, "0");
39
- const bufferPrivKey = Buffer.from(hexPrivateKey, "hex");
40
- const publicKey = bytesToHex(privateToPublic(bufferPrivKey));
41
- const address = bytesToHex(privateToAddress(bufferPrivKey));
42
-
43
- const existingWallet = this.state.wallets.find((w) => w.address === address);
44
- if (existingWallet) return existingWallet.address;
45
-
46
- this.update({
47
- wallets: [
48
- ...this.state.wallets,
49
- {
50
- publicKey,
51
- privateKey: accountPrivateKey,
52
- address,
53
- },
54
- ],
55
- });
56
- return address;
57
- }
58
-
59
- removeAccount(address: string): void {
60
- const newWallets = [...this.state.wallets];
61
- const idx = newWallets.findIndex((w) => w.address === address);
62
- if (idx !== -1) {
63
- newWallets.splice(idx, 1);
64
- this.update({ wallets: newWallets });
65
- }
66
- }
67
-
68
- getBufferPrivateKey(privateKey: string) {
69
- const stripped = stripHexPrefix(privateKey);
70
- return Buffer.from(stripped, "hex");
71
- }
72
-
73
- // For eth_sign, we need to sign arbitrary data:
74
- async signMessage(data: string, address: string): Promise<string> {
75
- const wallet = this._getWalletForAccount(address);
76
- const privKey = this.getBufferPrivateKey(wallet.privateKey);
77
- const messageSig = ecsign(Buffer.from(stripHexPrefix(data), "hex"), privKey);
78
- const sig = concatSig(Buffer.from(bigIntToBytes(messageSig.v)), Buffer.from(messageSig.r), Buffer.from(messageSig.s));
79
- return sig;
80
- }
81
-
82
- // For personal_sign, we need to prefix the message: ensure input is hashed and not buffer of utf-8
83
- async signPersonalMessage(data: string, address: string) {
84
- const wallet = this._getWalletForAccount(address);
85
- const privKey = this.getBufferPrivateKey(wallet.privateKey);
86
- const sig = personalSign({ privateKey: privKey, data });
87
- return sig;
88
- }
89
-
90
- // personal_signTypedData, signs data along with the schema
91
- async signTypedData<V extends SignTypedDataVersion, T extends MessageTypes>(
92
- typedData: V extends "V1" ? TypedDataV1 : TypedMessage<T>,
93
- address: string,
94
- version: V
95
- ) {
96
- const wallet = this._getWalletForAccount(address);
97
- const privKey = this.getBufferPrivateKey(wallet.privateKey);
98
- return signTypedData({ privateKey: privKey, data: typedData, version });
99
- }
100
-
101
- signEncryptionPublicKey(address: string) {
102
- const wallet = this._getWalletForAccount(address);
103
- return getEncryptionPublicKey(stripHexPrefix(wallet.privateKey));
104
- }
105
-
106
- decryptMessage(data: EthEncryptedData, address: string) {
107
- const wallet = this._getWalletForAccount(address);
108
- return decrypt({ encryptedData: data, privateKey: stripHexPrefix(wallet.privateKey) });
109
- }
110
-
111
- private _getWalletForAccount(account: string) {
112
- const address = account.toLowerCase();
113
- const wallet = this.state.wallets.find((w) => w.address.toLowerCase() === address);
114
- if (!wallet) throw new Error("Torus Keyring - Unable to find matching address.");
115
- return wallet;
116
- }
117
- }
@@ -1,136 +0,0 @@
1
- import { SignTypedDataVersion } from "@metamask/eth-sig-util";
2
- import { providerErrors, rpcErrors } from "@metamask/rpc-errors";
3
- import { BaseConfig, BaseController, BaseState } from "@toruslabs/base-controllers";
4
- import { JRPCRequest, Json } from "@toruslabs/openlogin-jrpc";
5
-
6
- import NetworkController from "../Network/NetworkController";
7
- import { MessageStatus } from "../utils/constants";
8
- import { AbstractMessage, BaseRequestParams, MessageStatusType, UserRequestApprovalParams } from "../utils/interfaces";
9
-
10
- export interface MessageControllerState<M extends AbstractMessage> extends BaseState {
11
- unapprovedMessages: Record<string, M>;
12
- unapprovedMessagesCount: number;
13
- }
14
-
15
- export default abstract class AbstractMessageController<M extends AbstractMessage, P extends BaseRequestParams> extends BaseController<
16
- BaseConfig,
17
- MessageControllerState<M>
18
- > {
19
- protected messages: M[];
20
-
21
- protected getNetworkIdentifier: NetworkController["getNetworkIdentifier"];
22
-
23
- /**
24
- * Controller in charge of managing - storing, adding, removing, updating - Messages.
25
- *
26
- */
27
- constructor({
28
- config,
29
- state,
30
- getNetworkIdentifier,
31
- }: {
32
- config?: Partial<BaseConfig>;
33
- state?: Partial<MessageControllerState<M>>;
34
- getNetworkIdentifier: NetworkController["getNetworkIdentifier"];
35
- }) {
36
- super({ config, state });
37
- this.defaultState = {
38
- unapprovedMessages: {},
39
- unapprovedMessagesCount: 0,
40
- };
41
- this.messages = [];
42
- this.defaultConfig = {};
43
- this.getNetworkIdentifier = getNetworkIdentifier;
44
- super.initialize();
45
- }
46
-
47
- getMessage(messageId: string) {
48
- return this.messages.find((message) => message.id === messageId);
49
- }
50
-
51
- getAllMessages() {
52
- return this.messages;
53
- }
54
-
55
- setMetadata(messageId: string, metadata: Json) {
56
- const message = this.getMessage(messageId);
57
- if (!message) {
58
- throw new Error(`${this.name}: Message not found for id: ${messageId}.`);
59
- }
60
- message.metadata = metadata;
61
- this.updateMessage(message);
62
- }
63
-
64
- getUnapprovedMessages() {
65
- return this.messages
66
- .filter((message) => message.status === MessageStatus.UNAPPROVED)
67
- .reduce((result: { [key: string]: M }, message: M) => {
68
- result[message.id] = message;
69
- return result;
70
- }, {}) as { [key: string]: M };
71
- }
72
-
73
- async addMessage(message: M) {
74
- this.messages.push(message);
75
- this.saveMessageList();
76
- }
77
-
78
- approveMessage(messageId: string, messageParams: P): Promise<P> {
79
- this.setMessageStatus(messageId, MessageStatus.APPROVED);
80
- return this.prepMessageForSigning(messageParams);
81
- }
82
-
83
- setMessageStatus(messageId: string, status: MessageStatusType) {
84
- const message = this.getMessage(messageId);
85
- if (!message) {
86
- throw new Error(`${this.name}: Message not found for id: ${messageId}.`);
87
- }
88
- message.status = status;
89
- this.updateMessage(message);
90
- this.emit(`${messageId}:${status}`, message);
91
- if (status === MessageStatus.REJECTED || status === MessageStatus.SIGNED || status === MessageStatus.FAILED) {
92
- this.emit(`${messageId}:finished`, message);
93
- }
94
- }
95
-
96
- async waitForFinishStatus(msgParams: P, messageName: string): Promise<string> {
97
- return new Promise((resolve, reject) => {
98
- const handleFinished = (msg: M) => {
99
- if (msg.status === MessageStatus.REJECTED) {
100
- return reject(providerErrors.userRejectedRequest(`${messageName} Signature: User denied message signature`));
101
- }
102
- if (msg.status === MessageStatus.FAILED) {
103
- return reject(rpcErrors.internal(`${messageName} Signature: failed to sign message ${msg.error}`));
104
- }
105
- if (msg.status === MessageStatus.SIGNED) {
106
- return resolve(msg.rawSig as string);
107
- }
108
-
109
- return reject(rpcErrors.internal(`${messageName} Signature: Unknown problem: ${JSON.stringify(msgParams)}`));
110
- };
111
- this.once(`${msgParams.id}:finished`, handleFinished);
112
- });
113
- }
114
-
115
- protected updateMessage(message: M) {
116
- const index = this.messages.findIndex((msg) => message.id === msg.id);
117
- if (index !== -1) {
118
- this.messages[index] = message;
119
- }
120
- this.saveMessageList();
121
- }
122
-
123
- protected saveMessageList() {
124
- const unapprovedMessages = this.getUnapprovedMessages();
125
- const unapprovedMessagesCount = Object.keys(unapprovedMessages).length;
126
- this.update({ unapprovedMessages, unapprovedMessagesCount });
127
- }
128
-
129
- abstract prepMessageForSigning(messageParams: P): Promise<P>;
130
-
131
- abstract addUnapprovedMessage(
132
- messageParams: P,
133
- request: JRPCRequest<P> & UserRequestApprovalParams,
134
- version?: SignTypedDataVersion
135
- ): Promise<string>;
136
- }
@@ -1,73 +0,0 @@
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
- await 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, req });
67
- return messageId;
68
- }
69
-
70
- prepMessageForSigning(messageParams: AddChainMessageParams): Promise<AddChainMessageParams> {
71
- return Promise.resolve(messageParams);
72
- }
73
- }
@@ -1,76 +0,0 @@
1
- // import { isValidAddress } from "@ethereumjs/util";
2
- import { BaseConfig, randomId } from "@toruslabs/base-controllers";
3
- import { JRPCRequest } from "@toruslabs/openlogin-jrpc";
4
- import log from "loglevel";
5
-
6
- import KeyringController from "../Keyring/KeyringController";
7
- import NetworkController from "../Network/NetworkController";
8
- import { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from "../utils/constants";
9
- import { DecryptMessage, DecryptMessageParams, UserRequestApprovalParams } from "../utils/interfaces";
10
- import AbstractMessageController, { MessageControllerState } from "./AbstractMessageController";
11
- import { normalizeMessageData, parseDecryptMessageData, validateDecryptedMessageData } from "./utils";
12
-
13
- export class DecryptMessageController extends AbstractMessageController<DecryptMessage, DecryptMessageParams> {
14
- override name = "DecryptMessageController";
15
-
16
- protected decryptMessage: KeyringController["decryptMessage"];
17
-
18
- constructor({
19
- config,
20
- state,
21
- decryptMessage,
22
- getNetworkIdentifier,
23
- }: {
24
- config: Partial<BaseConfig>;
25
- state: Partial<MessageControllerState<DecryptMessage>>;
26
- decryptMessage: KeyringController["decryptMessage"];
27
- getNetworkIdentifier: NetworkController["getNetworkIdentifier"];
28
- }) {
29
- super({ config, state, getNetworkIdentifier });
30
- this.decryptMessage = decryptMessage;
31
- this.initialize();
32
- }
33
-
34
- async processDecryptMessage(messageId: string): Promise<string> {
35
- try {
36
- const msgObject = this.getMessage(messageId);
37
- const cleanMsgParams = await this.approveMessage(messageId, msgObject.messageParams);
38
- const parsedData = parseDecryptMessageData(cleanMsgParams.data);
39
- const rawSig = this.decryptMessage(parsedData, cleanMsgParams.from);
40
- this.updateMessage({ ...msgObject, rawSig });
41
- this.setMessageStatus(messageId, MessageStatus.SIGNED);
42
- return rawSig;
43
- } catch (error) {
44
- log.error(error);
45
- this.setMessageStatus(messageId, MessageStatus.FAILED);
46
- }
47
- }
48
-
49
- async addNewUnapprovedMessage(messageParams: DecryptMessageParams, req: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string> {
50
- await this.addUnapprovedMessage(messageParams, req);
51
- return this.waitForFinishStatus(messageParams, this.name);
52
- }
53
-
54
- async addUnapprovedMessage(messageParams: DecryptMessageParams, req?: JRPCRequest<unknown> & UserRequestApprovalParams) {
55
- validateDecryptedMessageData(messageParams);
56
- if (req) {
57
- messageParams.origin = req.origin;
58
- }
59
- messageParams.data = normalizeMessageData(messageParams.data);
60
- const messageId = messageParams.id || randomId();
61
- const messageData: DecryptMessage = {
62
- id: messageId,
63
- messageParams,
64
- status: MessageStatus.UNAPPROVED,
65
- time: Date.now(),
66
- type: METHOD_TYPES.ETH_DECRYPT,
67
- };
68
- await this.addMessage(messageData);
69
- this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, { messageData, req });
70
- return messageId;
71
- }
72
-
73
- prepMessageForSigning(messageParams: DecryptMessageParams): Promise<DecryptMessageParams> {
74
- return Promise.resolve({ ...messageParams });
75
- }
76
- }
@@ -1,75 +0,0 @@
1
- // import { isValidAddress } from "@ethereumjs/util";
2
- import { BaseConfig, randomId } from "@toruslabs/base-controllers";
3
- import { JRPCRequest } from "@toruslabs/openlogin-jrpc";
4
- import log from "loglevel";
5
-
6
- import KeyringController from "../Keyring/KeyringController";
7
- import NetworkController from "../Network/NetworkController";
8
- import { MESSAGE_EVENTS, MessageStatus, METHOD_TYPES } from "../utils/constants";
9
- import { EncryptionPublicKey, EncryptionPublicKeyParams, UserRequestApprovalParams } from "../utils/interfaces";
10
- import AbstractMessageController, { MessageControllerState } from "./AbstractMessageController";
11
- import { validateEncryptionPublicKeyMessageData } from "./utils";
12
-
13
- export class EncryptionPublicKeyController extends AbstractMessageController<EncryptionPublicKey, EncryptionPublicKeyParams> {
14
- override name = "EncryptionPublicKeyController";
15
-
16
- protected signEncryptionPublicKey: KeyringController["signEncryptionPublicKey"];
17
-
18
- constructor({
19
- config,
20
- state,
21
- signEncryptionPublicKey,
22
- getNetworkIdentifier,
23
- }: {
24
- config: Partial<BaseConfig>;
25
- state: Partial<MessageControllerState<EncryptionPublicKey>>;
26
- signEncryptionPublicKey: KeyringController["signEncryptionPublicKey"];
27
- getNetworkIdentifier: NetworkController["getNetworkIdentifier"];
28
- }) {
29
- super({ config, state, getNetworkIdentifier });
30
- this.signEncryptionPublicKey = signEncryptionPublicKey;
31
- this.initialize();
32
- }
33
-
34
- async processGetEncryptionPublicKey(messageId: string): Promise<string> {
35
- try {
36
- const msgObject = this.getMessage(messageId);
37
- const cleanMsgParams = await this.approveMessage(messageId, msgObject.messageParams);
38
- const publicKey = this.signEncryptionPublicKey(cleanMsgParams.from);
39
- this.updateMessage({ ...msgObject, rawSig: publicKey });
40
- this.setMessageStatus(messageId, MessageStatus.SIGNED);
41
- return publicKey;
42
- } catch (error) {
43
- log.error(error);
44
- this.setMessageStatus(messageId, MessageStatus.FAILED);
45
- }
46
- }
47
-
48
- async addNewUnapprovedMessage(messageParams: EncryptionPublicKeyParams, 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: EncryptionPublicKeyParams, req?: JRPCRequest<unknown> & UserRequestApprovalParams): Promise<string> {
54
- validateEncryptionPublicKeyMessageData(messageParams);
55
- if (req) {
56
- messageParams.origin = req.origin;
57
- }
58
- const messageId = messageParams.id || randomId();
59
- const messageData: EncryptionPublicKey = {
60
- id: messageId,
61
- messageParams,
62
- status: MessageStatus.UNAPPROVED,
63
- time: Date.now(),
64
- type: METHOD_TYPES.ETH_GET_ENCRYPTION_PUBLIC_KEY,
65
- };
66
- await this.addMessage(messageData);
67
- this.emit(MESSAGE_EVENTS.UNAPPROVED_MESSAGE, { messageData, req });
68
- return messageId;
69
- }
70
-
71
- prepMessageForSigning(messageParams: EncryptionPublicKeyParams): Promise<EncryptionPublicKeyParams> {
72
- // From should be the public key for the encryption
73
- return Promise.resolve({ ...messageParams, from: messageParams.data });
74
- }
75
- }