@massalabs/wallet-provider 3.0.1-dev.20241212185156 → 3.0.1-dev.20241219125941
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/bearbyWallet/BearbyWallet.d.ts +5 -4
- package/dist/esm/bearbyWallet/BearbyWallet.d.ts.map +1 -1
- package/dist/esm/bearbyWallet/BearbyWallet.js +11 -10
- package/dist/esm/bearbyWallet/BearbyWallet.js.map +1 -1
- package/dist/esm/massaStation/MassaStationWallet.d.ts +3 -2
- package/dist/esm/massaStation/MassaStationWallet.d.ts.map +1 -1
- package/dist/esm/massaStation/MassaStationWallet.js +10 -3
- package/dist/esm/massaStation/MassaStationWallet.js.map +1 -1
- package/dist/esm/metamaskSnap/MetamaskAccount.d.ts +26 -0
- package/dist/esm/metamaskSnap/MetamaskAccount.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/MetamaskAccount.js +192 -0
- package/dist/esm/metamaskSnap/MetamaskAccount.js.map +1 -0
- package/dist/esm/metamaskSnap/MetamaskWallet.d.ts +57 -0
- package/dist/esm/metamaskSnap/MetamaskWallet.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/MetamaskWallet.js +129 -0
- package/dist/esm/metamaskSnap/MetamaskWallet.js.map +1 -0
- package/dist/esm/metamaskSnap/config/index.d.ts +2 -0
- package/dist/esm/metamaskSnap/config/index.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/config/index.js +2 -0
- package/dist/esm/metamaskSnap/config/index.js.map +1 -0
- package/dist/esm/metamaskSnap/config/snap.d.ts +2 -0
- package/dist/esm/metamaskSnap/config/snap.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/config/snap.js +3 -0
- package/dist/esm/metamaskSnap/config/snap.js.map +1 -0
- package/dist/esm/metamaskSnap/metamask.d.ts +21 -0
- package/dist/esm/metamaskSnap/metamask.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/metamask.js +70 -0
- package/dist/esm/metamaskSnap/metamask.js.map +1 -0
- package/dist/esm/metamaskSnap/services/buyRolls.d.ts +4 -0
- package/dist/esm/metamaskSnap/services/buyRolls.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/services/buyRolls.js +14 -0
- package/dist/esm/metamaskSnap/services/buyRolls.js.map +1 -0
- package/dist/esm/metamaskSnap/services/callSC.d.ts +4 -0
- package/dist/esm/metamaskSnap/services/callSC.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/services/callSC.js +14 -0
- package/dist/esm/metamaskSnap/services/callSC.js.map +1 -0
- package/dist/esm/metamaskSnap/services/deploySC.d.ts +4 -0
- package/dist/esm/metamaskSnap/services/deploySC.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/services/deploySC.js +14 -0
- package/dist/esm/metamaskSnap/services/deploySC.js.map +1 -0
- package/dist/esm/metamaskSnap/services/getActiveAccount.d.ts +4 -0
- package/dist/esm/metamaskSnap/services/getActiveAccount.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/services/getActiveAccount.js +13 -0
- package/dist/esm/metamaskSnap/services/getActiveAccount.js.map +1 -0
- package/dist/esm/metamaskSnap/services/getBalance.d.ts +4 -0
- package/dist/esm/metamaskSnap/services/getBalance.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/services/getBalance.js +14 -0
- package/dist/esm/metamaskSnap/services/getBalance.js.map +1 -0
- package/dist/esm/metamaskSnap/services/getMinimalFees.d.ts +3 -0
- package/dist/esm/metamaskSnap/services/getMinimalFees.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/services/getMinimalFees.js +6 -0
- package/dist/esm/metamaskSnap/services/getMinimalFees.js.map +1 -0
- package/dist/esm/metamaskSnap/services/getNetwork.d.ts +4 -0
- package/dist/esm/metamaskSnap/services/getNetwork.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/services/getNetwork.js +13 -0
- package/dist/esm/metamaskSnap/services/getNetwork.js.map +1 -0
- package/dist/esm/metamaskSnap/services/index.d.ts +11 -0
- package/dist/esm/metamaskSnap/services/index.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/services/index.js +12 -0
- package/dist/esm/metamaskSnap/services/index.js.map +1 -0
- package/dist/esm/metamaskSnap/services/sellRolls.d.ts +4 -0
- package/dist/esm/metamaskSnap/services/sellRolls.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/services/sellRolls.js +14 -0
- package/dist/esm/metamaskSnap/services/sellRolls.js.map +1 -0
- package/dist/esm/metamaskSnap/services/setRpcUrl.d.ts +4 -0
- package/dist/esm/metamaskSnap/services/setRpcUrl.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/services/setRpcUrl.js +14 -0
- package/dist/esm/metamaskSnap/services/setRpcUrl.js.map +1 -0
- package/dist/esm/metamaskSnap/services/signMessage.d.ts +4 -0
- package/dist/esm/metamaskSnap/services/signMessage.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/services/signMessage.js +14 -0
- package/dist/esm/metamaskSnap/services/signMessage.js.map +1 -0
- package/dist/esm/metamaskSnap/services/transfer.d.ts +4 -0
- package/dist/esm/metamaskSnap/services/transfer.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/services/transfer.js +14 -0
- package/dist/esm/metamaskSnap/services/transfer.js.map +1 -0
- package/dist/esm/metamaskSnap/snap.d.ts +20 -0
- package/dist/esm/metamaskSnap/snap.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/snap.js +45 -0
- package/dist/esm/metamaskSnap/snap.js.map +1 -0
- package/dist/esm/metamaskSnap/types/index.d.ts +2 -0
- package/dist/esm/metamaskSnap/types/index.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/types/index.js +2 -0
- package/dist/esm/metamaskSnap/types/index.js.map +1 -0
- package/dist/esm/metamaskSnap/types/snap.d.ts +14 -0
- package/dist/esm/metamaskSnap/types/snap.d.ts.map +1 -0
- package/dist/esm/metamaskSnap/types/snap.js +2 -0
- package/dist/esm/metamaskSnap/types/snap.js.map +1 -0
- package/dist/esm/utils/constants.d.ts +1 -0
- package/dist/esm/utils/constants.d.ts.map +1 -1
- package/dist/esm/utils/constants.js +1 -0
- package/dist/esm/utils/constants.js.map +1 -1
- package/dist/esm/wallet/interface.d.ts +2 -1
- package/dist/esm/wallet/interface.d.ts.map +1 -1
- package/dist/esm/wallet/interface.js.map +1 -1
- package/dist/esm/wallet/types.d.ts +2 -1
- package/dist/esm/wallet/types.d.ts.map +1 -1
- package/dist/esm/wallet/types.js +1 -0
- package/dist/esm/wallet/types.js.map +1 -1
- package/dist/esm/walletsManager/types.d.ts +2 -1
- package/dist/esm/walletsManager/types.d.ts.map +1 -1
- package/dist/esm/walletsManager/types.js.map +1 -1
- package/dist/esm/walletsManager/walletList.d.ts.map +1 -1
- package/dist/esm/walletsManager/walletList.js +3 -3
- package/dist/esm/walletsManager/walletList.js.map +1 -1
- package/package.json +4 -1
|
@@ -5,11 +5,12 @@ import { WalletName } from '../wallet';
|
|
|
5
5
|
export declare class BearbyWallet implements Wallet {
|
|
6
6
|
private walletName;
|
|
7
7
|
name(): WalletName;
|
|
8
|
-
static
|
|
8
|
+
static createIfInstalled(): Promise<Wallet | null>;
|
|
9
9
|
accounts(): Promise<BearbyAccount[]>;
|
|
10
|
-
importAccount(
|
|
11
|
-
deleteAccount(
|
|
10
|
+
importAccount(): Promise<void>;
|
|
11
|
+
deleteAccount(): Promise<void>;
|
|
12
12
|
networkInfos(): Promise<Network>;
|
|
13
|
+
setRpcUrl(): Promise<void>;
|
|
13
14
|
generateNewAccount(): Promise<Provider>;
|
|
14
15
|
/**
|
|
15
16
|
* Subscribes to account changes.
|
|
@@ -80,7 +81,7 @@ export declare class BearbyWallet implements Wallet {
|
|
|
80
81
|
*
|
|
81
82
|
* @returns a boolean indicating whether the wallet is connected.
|
|
82
83
|
*/
|
|
83
|
-
connected(): boolean
|
|
84
|
+
connected(): Promise<boolean>;
|
|
84
85
|
/**
|
|
85
86
|
* Checks if the wallet is enabled.
|
|
86
87
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BearbyWallet.d.ts","sourceRoot":"","sources":["../../../src/bearbyWallet/BearbyWallet.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,YAAa,YAAW,MAAM;IACzC,OAAO,CAAC,UAAU,CAAqB;IAEhC,IAAI,IAAI,UAAU;WAIZ,
|
|
1
|
+
{"version":3,"file":"BearbyWallet.d.ts","sourceRoot":"","sources":["../../../src/bearbyWallet/BearbyWallet.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAa,YAAa,YAAW,MAAM;IACzC,OAAO,CAAC,UAAU,CAAqB;IAEhC,IAAI,IAAI,UAAU;WAIZ,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAO3C,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAQpC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAOhC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAM1B,kBAAkB,IAAI,OAAO,CAAC,QAAQ,CAAC;IAIpD;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,oBAAoB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG;QAChE,WAAW,EAAE,MAAM,IAAI,CAAC;KACzB;IAID;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,oBAAoB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG;QACjE,WAAW,EAAE,MAAM,IAAI,CAAC;KACzB;IAOD;;;;;;OAMG;IACU,OAAO;IAIpB;;;;;;OAMG;IACU,UAAU;IAIvB;;;;OAIG;IACU,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1C;;;;OAIG;IACI,OAAO,IAAI,OAAO;CAG1B"}
|
|
@@ -7,8 +7,11 @@ export class BearbyWallet {
|
|
|
7
7
|
name() {
|
|
8
8
|
return this.walletName;
|
|
9
9
|
}
|
|
10
|
-
static async
|
|
11
|
-
|
|
10
|
+
static async createIfInstalled() {
|
|
11
|
+
if (web3.wallet.installed) {
|
|
12
|
+
return new BearbyWallet();
|
|
13
|
+
}
|
|
14
|
+
return null;
|
|
12
15
|
}
|
|
13
16
|
async accounts() {
|
|
14
17
|
// check if bearby is unlocked
|
|
@@ -17,15 +20,10 @@ export class BearbyWallet {
|
|
|
17
20
|
}
|
|
18
21
|
return [new BearbyAccount(await web3.wallet.account.base58)];
|
|
19
22
|
}
|
|
20
|
-
async importAccount(
|
|
21
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
22
|
-
publicKey,
|
|
23
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
24
|
-
privateKey) {
|
|
23
|
+
async importAccount() {
|
|
25
24
|
throw new Error('Method not implemented.');
|
|
26
25
|
}
|
|
27
|
-
|
|
28
|
-
async deleteAccount(address) {
|
|
26
|
+
async deleteAccount() {
|
|
29
27
|
throw new Error('Method not implemented.');
|
|
30
28
|
}
|
|
31
29
|
async networkInfos() {
|
|
@@ -34,6 +32,9 @@ export class BearbyWallet {
|
|
|
34
32
|
}
|
|
35
33
|
return networkInfos();
|
|
36
34
|
}
|
|
35
|
+
async setRpcUrl() {
|
|
36
|
+
throw new Error('setRpcUrl is not yet implemented for the current provider.');
|
|
37
|
+
}
|
|
37
38
|
async generateNewAccount() {
|
|
38
39
|
throw new Error('Method not implemented.');
|
|
39
40
|
}
|
|
@@ -111,7 +112,7 @@ export class BearbyWallet {
|
|
|
111
112
|
*
|
|
112
113
|
* @returns a boolean indicating whether the wallet is connected.
|
|
113
114
|
*/
|
|
114
|
-
connected() {
|
|
115
|
+
async connected() {
|
|
115
116
|
return web3.wallet.connected;
|
|
116
117
|
}
|
|
117
118
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BearbyWallet.js","sourceRoot":"","sources":["../../../src/bearbyWallet/BearbyWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,OAAO,YAAY;IACf,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;IAEhC,IAAI;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"BearbyWallet.js","sourceRoot":"","sources":["../../../src/bearbyWallet/BearbyWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,OAAO,YAAY;IACf,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;IAEhC,IAAI;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YACzB,OAAO,IAAI,YAAY,EAAE,CAAC;SAC3B;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,8BAA8B;QAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SAC7B;QACD,OAAO,CAAC,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,aAAa;QACxB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;SAC7B;QACD,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,SAAS;QACpB,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,kBAAkB;QAC7B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,oBAAoB,CAAC,QAAmC;QAG7D,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,oBAAoB,CAAC,QAAoC;QAG9D,6DAA6D;QAC7D,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CACzC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CACpD,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,OAAO;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,UAAU;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,SAAS;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,OAAO;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAC7B,CAAC;CACF","sourcesContent":["import { web3 } from '@hicaru/bearby.js';\nimport { BearbyAccount } from './BearbyAccount';\nimport { Wallet } from '../wallet/interface';\nimport { Network, Provider } from '@massalabs/massa-web3';\nimport { networkInfos } from './utils/network';\nimport { WalletName } from '../wallet';\n\nexport class BearbyWallet implements Wallet {\n private walletName = WalletName.Bearby;\n\n public name(): WalletName {\n return this.walletName;\n }\n\n static async createIfInstalled(): Promise<Wallet | null> {\n if (web3.wallet.installed) {\n return new BearbyWallet();\n }\n return null;\n }\n\n public async accounts(): Promise<BearbyAccount[]> {\n // check if bearby is unlocked\n if (!web3.wallet.connected) {\n await web3.wallet.connect();\n }\n return [new BearbyAccount(await web3.wallet.account.base58)];\n }\n\n public async importAccount(): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n public async deleteAccount(): Promise<void> {\n throw new Error('Method not implemented.');\n }\n\n public async networkInfos(): Promise<Network> {\n if (!web3.wallet.connected) {\n await web3.wallet.connect();\n }\n return networkInfos();\n }\n\n public async setRpcUrl(): Promise<void> {\n throw new Error(\n 'setRpcUrl is not yet implemented for the current provider.',\n );\n }\n\n public async generateNewAccount(): Promise<Provider> {\n throw new Error('Method not implemented.');\n }\n\n /**\n * Subscribes to account changes.\n *\n * @param callback - Callback to be called when the account changes.\n *\n * @returns A promise that resolves to a function that can be called to unsubscribe.\n *\n * @remarks\n * Don't forget to unsubscribe to avoid memory leaks.\n *\n * @example\n * ```typescript\n * // Subscribe\n * const observer = await provider.listenAccountChanges((base58) => {\n * console.log(base58);\n * });\n *\n * // Unsubscribe\n * observer.unsubscribe();\n * ```\n */\n public listenAccountChanges(callback: (address: string) => void): {\n unsubscribe: () => void;\n } {\n return web3.wallet.account.subscribe((address) => callback(address));\n }\n\n /**\n * Subscribes to network changes.\n *\n * @param callback - Callback to be called when the network changes.\n *\n * @returns A promise that resolves to a function that can be called to unsubscribe.\n *\n * @remarks\n * Don't forget to unsubscribe to avoid memory leaks.\n *\n * @example\n * ```typescript\n * // Subscribe\n * const observer = await provider.listenNetworkChanges((network) => {\n * console.log(network);\n * });\n *\n * // Unsubscribe\n * observer.unsubscribe();\n * ```\n */\n public listenNetworkChanges(callback: (network: Network) => void): {\n unsubscribe: () => void;\n } {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n return web3.wallet.network.subscribe((_) =>\n networkInfos().then((network) => callback(network)),\n );\n }\n\n /**\n * Connects to the wallet.\n *\n * @remarks\n * This method will attempt to establish a connection with the wallet.\n * If the connection fails, it will log the error message.\n */\n public async connect() {\n return web3.wallet.connect();\n }\n\n /**\n * Disconnects from the wallet.\n *\n * @remarks\n * This method will attempt to disconnect from the wallet.\n * If the disconnection fails, it will log the error message.\n */\n public async disconnect() {\n return web3.wallet.disconnect();\n }\n\n /**\n * Checks if the wallet is connected.\n *\n * @returns a boolean indicating whether the wallet is connected.\n */\n public async connected(): Promise<boolean> {\n return web3.wallet.connected;\n }\n\n /**\n * Checks if the wallet is enabled.\n *\n * @returns a boolean indicating whether the wallet is enabled.\n */\n public enabled(): boolean {\n return web3.wallet.enabled;\n }\n}\n"]}
|
|
@@ -20,11 +20,12 @@ export declare class MassaStationWallet implements Wallet {
|
|
|
20
20
|
private eventsListener;
|
|
21
21
|
private currentNetwork;
|
|
22
22
|
name(): WalletName;
|
|
23
|
-
static
|
|
23
|
+
static createIfInstalled(): Promise<Wallet | null>;
|
|
24
24
|
accounts(): Promise<MassaStationAccount[]>;
|
|
25
25
|
importAccount(publicKey: string, privateKey: string): Promise<void>;
|
|
26
26
|
deleteAccount(address: string): Promise<void>;
|
|
27
27
|
networkInfos(): Promise<Network>;
|
|
28
|
+
setRpcUrl(url: string): Promise<void>;
|
|
28
29
|
/**
|
|
29
30
|
* This method sends an http call to the MassaStation server to create a new random account.
|
|
30
31
|
*
|
|
@@ -51,7 +52,7 @@ export declare class MassaStationWallet implements Wallet {
|
|
|
51
52
|
* Indicates if the station is connected.
|
|
52
53
|
* Always returns `true` because the station is always connected when running.
|
|
53
54
|
*/
|
|
54
|
-
connected(): boolean
|
|
55
|
+
connected(): Promise<boolean>;
|
|
55
56
|
/**
|
|
56
57
|
* Indicates if the station is enabled.
|
|
57
58
|
* Always returns `true` because the station is always enabled by default.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MassaStationWallet.d.ts","sourceRoot":"","sources":["../../../src/massaStation/MassaStationWallet.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC;;GAEG;AACH,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,0BAA0B,QAAoE,CAAC;AAO5G;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,MAAM;IAC/C,OAAO,CAAC,UAAU,CAA2B;IAE7C,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,cAAc,CAAU;IAEzB,IAAI,IAAI,UAAU;WAIZ,
|
|
1
|
+
{"version":3,"file":"MassaStationWallet.d.ts","sourceRoot":"","sources":["../../../src/massaStation/MassaStationWallet.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC;;GAEG;AACH,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,0BAA0B,QAAoE,CAAC;AAO5G;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,MAAM;IAC/C,OAAO,CAAC,UAAU,CAA2B;IAE7C,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,cAAc,CAAU;IAEzB,IAAI,IAAI,UAAU;WAIZ,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAO3C,QAAQ,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAe1C,aAAa,CACxB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAUH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB7C,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAKhC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD;;;;OAIG;IACU,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAcpE,oBAAoB,IAAI;QAAE,WAAW,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,SAAS;IAM/D,oBAAoB,CACzB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GACnC;QAAE,WAAW,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,SAAS;IA8B1C;;;OAGG;IACU,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAIxC;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3C;;;OAGG;IACU,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1C;;;OAGG;IACI,OAAO,IAAI,OAAO;CAG1B"}
|
|
@@ -29,8 +29,11 @@ export class MassaStationWallet {
|
|
|
29
29
|
name() {
|
|
30
30
|
return this.walletName;
|
|
31
31
|
}
|
|
32
|
-
static async
|
|
33
|
-
|
|
32
|
+
static async createIfInstalled() {
|
|
33
|
+
if (await isMassaWalletEnabled()) {
|
|
34
|
+
return new MassaStationWallet();
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
34
37
|
}
|
|
35
38
|
async accounts() {
|
|
36
39
|
const res = await getRequest(MASSA_STATION_ACCOUNTS_URL);
|
|
@@ -71,6 +74,10 @@ export class MassaStationWallet {
|
|
|
71
74
|
async networkInfos() {
|
|
72
75
|
return networkInfos();
|
|
73
76
|
}
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
78
|
+
async setRpcUrl(url) {
|
|
79
|
+
throw new Error('setRpcUrl is not yet implemented for the current provider.');
|
|
80
|
+
}
|
|
74
81
|
/**
|
|
75
82
|
* This method sends an http call to the MassaStation server to create a new random account.
|
|
76
83
|
*
|
|
@@ -126,7 +133,7 @@ export class MassaStationWallet {
|
|
|
126
133
|
* Indicates if the station is connected.
|
|
127
134
|
* Always returns `true` because the station is always connected when running.
|
|
128
135
|
*/
|
|
129
|
-
connected() {
|
|
136
|
+
async connected() {
|
|
130
137
|
return true;
|
|
131
138
|
}
|
|
132
139
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MassaStationWallet.js","sourceRoot":"","sources":["../../../src/massaStation/MassaStationWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,UAAU,EACV,WAAW,EACX,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAA6B,MAAM,SAAS,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAE1D;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,iBAAiB,6CAA6C,CAAC;AAE5G;;GAEG;AACH,MAAM,6BAA6B,GAAG,+BAA+B,CAAC;AAEtE;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACrB,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC;IAErC,cAAc,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,cAAc,CAAU;IAEzB,IAAI;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"MassaStationWallet.js","sourceRoot":"","sources":["../../../src/massaStation/MassaStationWallet.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n deleteRequest,\n getRequest,\n postRequest,\n putRequest,\n} from './RequestHandler';\nimport { MassaStationAccount } from './MassaStationAccount';\nimport { MassaStationAccountStatus, MSAccount, MSAccountsResp } from './types';\nimport { EventEmitter } from 'eventemitter3';\nimport { Wallet } from '../wallet/interface';\nimport { Network } from '@massalabs/massa-web3';\nimport { networkInfos } from './utils/network';\nimport { WalletName } from '../wallet';\nimport { isMassaWalletEnabled } from './MassaStationDiscovery';\n\n/**\n * MassaStation url\n */\nexport const MASSA_STATION_URL = 'https://station.massa/';\n\n/**\n * The MassaStation accounts url\n */\nexport const MASSA_STATION_ACCOUNTS_URL = `${MASSA_STATION_URL}plugin/massa-labs/massa-wallet/api/accounts`;\n\n/**\n * Events emitted by MassaStation\n */\nconst MASSA_STATION_NETWORK_CHANGED = 'MASSA_STATION_NETWORK_CHANGED';\n\n/**\n * This class provides an implementation for communicating with the MassaStation wallet.\n * @remarks\n * This class is used as a proxy to the MassaStation server for exchanging message over https calls.\n */\nexport class MassaStationWallet implements Wallet {\n private walletName = WalletName.MassaStation;\n\n private eventsListener = new EventEmitter();\n private currentNetwork: Network;\n\n public name(): WalletName {\n return this.walletName;\n }\n\n static async createIfInstalled(): Promise<Wallet | null> {\n if (await isMassaWalletEnabled()) {\n return new MassaStationWallet();\n }\n return null;\n }\n\n public async accounts(): Promise<MassaStationAccount[]> {\n const res = await getRequest<MSAccountsResp>(MASSA_STATION_ACCOUNTS_URL);\n\n if (res.isError) {\n throw res.error;\n }\n return res.result\n .filter((account) => {\n return account.status === MassaStationAccountStatus.OK;\n })\n .map((account) => {\n return new MassaStationAccount(account.address, account.nickname);\n });\n }\n\n public async importAccount(\n publicKey: string,\n privateKey: string,\n ): Promise<void> {\n const res = await putRequest(MASSA_STATION_ACCOUNTS_URL, {\n publicKey,\n privateKey,\n });\n if (res.isError) {\n throw res.error;\n }\n }\n\n public async deleteAccount(address: string): Promise<void> {\n // get all accounts and find the account to delete\n const allAccounts = await getRequest<MSAccountsResp>(\n MASSA_STATION_ACCOUNTS_URL,\n );\n\n if (allAccounts.isError) throw allAccounts.error;\n\n const accountToDelete = allAccounts.result.find(\n (account) => account.address === address,\n );\n\n if (!accountToDelete) {\n throw new Error('Account not found');\n }\n\n const res = await deleteRequest<unknown>(\n `${MASSA_STATION_ACCOUNTS_URL}/${accountToDelete.nickname}`,\n );\n\n if (res.isError) {\n throw res.error;\n }\n }\n\n public async networkInfos(): Promise<Network> {\n return networkInfos();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public async setRpcUrl(url: string): Promise<void> {\n throw new Error(\n 'setRpcUrl is not yet implemented for the current provider.',\n );\n }\n\n /**\n * This method sends an http call to the MassaStation server to create a new random account.\n *\n * @returns a Promise that resolves to the details of the newly generated account.\n */\n public async generateNewAccount(name: string): Promise<MassaStationAccount> {\n const response = await postRequest<MSAccount>(\n MASSA_STATION_ACCOUNTS_URL + '/' + name,\n {},\n );\n\n if (response.isError) throw response.error;\n\n return new MassaStationAccount(\n response.result.address,\n response.result.nickname,\n );\n }\n\n public listenAccountChanges(): { unsubscribe: () => void } | undefined {\n throw new Error(\n 'listenAccountChanges is not yet implemented for the current provider.',\n );\n }\n\n public listenNetworkChanges(\n callback: (network: Network) => void,\n ): { unsubscribe: () => void } | undefined {\n this.eventsListener.on(MASSA_STATION_NETWORK_CHANGED, (evt) =>\n callback(evt),\n );\n\n // check periodically if network changed\n const intervalId = setInterval(async () => {\n const network = await this.networkInfos();\n if (!this.currentNetwork) {\n this.currentNetwork = network;\n return;\n }\n if (this.currentNetwork.name !== network.name) {\n this.currentNetwork = network;\n this.eventsListener.emit(MASSA_STATION_NETWORK_CHANGED, network);\n }\n }, 500);\n\n return {\n unsubscribe: () => {\n clearInterval(intervalId);\n this.eventsListener.removeListener(\n MASSA_STATION_NETWORK_CHANGED,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n () => {},\n );\n },\n };\n }\n\n /**\n * Simulates connecting to the station.\n * This method always returns `true` because the station is inherently connected.\n */\n public async connect(): Promise<boolean> {\n return true;\n }\n\n /**\n * Simulates disconnecting from the station.\n * This method always returns `true` because the station cannot be disconnected.\n */\n public async disconnect(): Promise<boolean> {\n return true;\n }\n\n /**\n * Indicates if the station is connected.\n * Always returns `true` because the station is always connected when running.\n */\n public async connected(): Promise<boolean> {\n return true;\n }\n\n /**\n * Indicates if the station is enabled.\n * Always returns `true` because the station is always enabled by default.\n */\n public enabled(): boolean {\n return true;\n }\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { MetaMaskInpageProvider } from '@metamask/providers';
|
|
2
|
+
import { Address, CallSCParams, DeploySCParams, EventFilter, Network, NodeStatusInfo, Operation, OperationOptions, OperationStatus, Provider, ReadSCData, ReadSCParams, SignedData, SmartContract, rpcTypes } from '@massalabs/massa-web3';
|
|
3
|
+
export declare class MetamaskAccount implements Provider {
|
|
4
|
+
readonly address: string;
|
|
5
|
+
private readonly provider;
|
|
6
|
+
constructor(address: string, provider: MetaMaskInpageProvider);
|
|
7
|
+
get accountName(): string;
|
|
8
|
+
get providerName(): string;
|
|
9
|
+
balance(final?: boolean): Promise<bigint>;
|
|
10
|
+
networkInfos(): Promise<Network>;
|
|
11
|
+
sign(inData: Uint8Array | string): Promise<SignedData>;
|
|
12
|
+
private handleRollOperation;
|
|
13
|
+
buyRolls(amount: bigint, opts?: OperationOptions): Promise<Operation>;
|
|
14
|
+
sellRolls(amount: bigint, opts?: OperationOptions): Promise<Operation>;
|
|
15
|
+
transfer(to: Address | string, amount: bigint, opts?: OperationOptions): Promise<Operation>;
|
|
16
|
+
callSC(params: CallSCParams): Promise<Operation>;
|
|
17
|
+
readSC(params: ReadSCParams): Promise<ReadSCData>;
|
|
18
|
+
deploySC(params: DeploySCParams): Promise<SmartContract>;
|
|
19
|
+
getOperationStatus(opId: string): Promise<OperationStatus>;
|
|
20
|
+
getEvents(filter: EventFilter): Promise<rpcTypes.OutputEvents>;
|
|
21
|
+
getNodeStatus(): Promise<NodeStatusInfo>;
|
|
22
|
+
getStorageKeys(address: string, filter?: Uint8Array | string, final?: boolean): Promise<Uint8Array[]>;
|
|
23
|
+
readStorage(address: string, keys: Uint8Array[] | string[], final?: boolean): Promise<Uint8Array[]>;
|
|
24
|
+
executeSC(): Promise<Operation>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=MetamaskAccount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetamaskAccount.d.ts","sourceRoot":"","sources":["../../../src/metamaskSnap/MetamaskAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EACL,OAAO,EACP,YAAY,EAEZ,cAAc,EACd,WAAW,EAGX,OAAO,EACP,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,UAAU,EACV,aAAa,EAEb,QAAQ,EACT,MAAM,uBAAuB,CAAC;AAsB/B,qBAAa,eAAgB,YAAW,QAAQ;aAE5B,OAAO,EAAE,MAAM;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADT,OAAO,EAAE,MAAM,EACd,QAAQ,EAAE,sBAAsB;IAGnD,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAEK,OAAO,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAOvC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;YAgB9C,mBAAmB;IA0B3B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IAIrE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IAItE,QAAQ,CACZ,EAAE,EAAE,OAAO,GAAG,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,gBAAgB,GACtB,OAAO,CAAC,SAAS,CAAC;IAiBf,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IA8BhD,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAwBjD,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAqCxD,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAK1D,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAK9D,aAAa,IAAI,OAAO,CAAC,cAAc,CAAC;IAMxC,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,UAAU,GAAG,MAAyB,EAC9C,KAAK,UAAO,GACX,OAAO,CAAC,UAAU,EAAE,CAAC;IAOlB,WAAW,CACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,EAC7B,KAAK,UAAO,GACX,OAAO,CAAC,UAAU,EAAE,CAAC;IASxB,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC;CAGhC"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { formatNodeStatusObject, MAX_GAS_CALL, Operation, SmartContract, strToBytes, } from '@massalabs/massa-web3';
|
|
2
|
+
import { WalletName } from '../wallet';
|
|
3
|
+
import { errorHandler } from '../errors/utils/errorHandler';
|
|
4
|
+
import { operationType } from '../utils/constants';
|
|
5
|
+
import { getClient, networkInfos } from '../massaStation/utils/network';
|
|
6
|
+
import { buyRolls, callSC, deploySC, getBalance, sellRolls, signMessage, transfer, } from './services';
|
|
7
|
+
export class MetamaskAccount {
|
|
8
|
+
address;
|
|
9
|
+
provider;
|
|
10
|
+
constructor(address, provider) {
|
|
11
|
+
this.address = address;
|
|
12
|
+
this.provider = provider;
|
|
13
|
+
}
|
|
14
|
+
get accountName() {
|
|
15
|
+
return this.address;
|
|
16
|
+
}
|
|
17
|
+
get providerName() {
|
|
18
|
+
return WalletName.Metamask;
|
|
19
|
+
}
|
|
20
|
+
async balance(final = false) {
|
|
21
|
+
const { finalBalance, candidateBalance } = await getBalance(this.provider, {
|
|
22
|
+
address: this.address,
|
|
23
|
+
});
|
|
24
|
+
return BigInt(final ? finalBalance : candidateBalance);
|
|
25
|
+
}
|
|
26
|
+
async networkInfos() {
|
|
27
|
+
return networkInfos();
|
|
28
|
+
}
|
|
29
|
+
async sign(inData) {
|
|
30
|
+
try {
|
|
31
|
+
const data = typeof inData === 'string' ? inData : Array.from(inData);
|
|
32
|
+
const { publicKey, signature } = await signMessage(this.provider, {
|
|
33
|
+
data,
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
publicKey,
|
|
37
|
+
signature,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
throw errorHandler(operationType.Sign, error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async handleRollOperation(operation, amount, opts) {
|
|
45
|
+
try {
|
|
46
|
+
const params = {
|
|
47
|
+
amount: amount.toString(),
|
|
48
|
+
};
|
|
49
|
+
if (opts?.fee) {
|
|
50
|
+
params.fee = opts?.fee.toString();
|
|
51
|
+
}
|
|
52
|
+
const { operationId } = await (operation === 'buy'
|
|
53
|
+
? buyRolls(this.provider, params)
|
|
54
|
+
: sellRolls(this.provider, params));
|
|
55
|
+
return new Operation(this, operationId);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
throw errorHandler(operation === 'buy' ? operationType.BuyRolls : operationType.SellRolls, error);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async buyRolls(amount, opts) {
|
|
62
|
+
return this.handleRollOperation('buy', amount, opts);
|
|
63
|
+
}
|
|
64
|
+
async sellRolls(amount, opts) {
|
|
65
|
+
return this.handleRollOperation('sell', amount, opts);
|
|
66
|
+
}
|
|
67
|
+
async transfer(to, amount, opts) {
|
|
68
|
+
try {
|
|
69
|
+
const params = {
|
|
70
|
+
amount: amount.toString(),
|
|
71
|
+
recipientAddress: to.toString(),
|
|
72
|
+
};
|
|
73
|
+
if (opts?.fee) {
|
|
74
|
+
params.fee = opts?.fee.toString();
|
|
75
|
+
}
|
|
76
|
+
const { operationId } = await transfer(this.provider, params);
|
|
77
|
+
return new Operation(this, operationId);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
throw errorHandler(operationType.SendTransaction, error);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async callSC(params) {
|
|
84
|
+
try {
|
|
85
|
+
const callSCparams = {
|
|
86
|
+
functionName: params.func,
|
|
87
|
+
at: params.target,
|
|
88
|
+
};
|
|
89
|
+
if (params.parameter) {
|
|
90
|
+
callSCparams.args =
|
|
91
|
+
params.parameter instanceof Uint8Array
|
|
92
|
+
? Array.from(params.parameter)
|
|
93
|
+
: Array.from(params.parameter.serialize());
|
|
94
|
+
}
|
|
95
|
+
if (params.coins) {
|
|
96
|
+
callSCparams.coins = params.coins.toString();
|
|
97
|
+
}
|
|
98
|
+
if (params.maxGas) {
|
|
99
|
+
callSCparams.maxGas = params.maxGas.toString();
|
|
100
|
+
}
|
|
101
|
+
if (params.fee) {
|
|
102
|
+
callSCparams.fee = params.fee.toString();
|
|
103
|
+
}
|
|
104
|
+
const { operationId } = await callSC(this.provider, callSCparams);
|
|
105
|
+
return new Operation(this, operationId);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
throw errorHandler(operationType.CallSC, error);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async readSC(params) {
|
|
112
|
+
if (params?.maxGas > MAX_GAS_CALL) {
|
|
113
|
+
throw new Error(`Gas amount ${params.maxGas} exceeds the maximum allowed ${MAX_GAS_CALL}`);
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
const args = params.parameter ?? new Uint8Array();
|
|
117
|
+
const parameter = args instanceof Uint8Array ? args : Uint8Array.from(args.serialize());
|
|
118
|
+
const client = await getClient();
|
|
119
|
+
const readOnlyParams = {
|
|
120
|
+
...params,
|
|
121
|
+
caller: params.caller ?? this.address,
|
|
122
|
+
parameter,
|
|
123
|
+
};
|
|
124
|
+
return client.executeReadOnlyCall(readOnlyParams);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
throw new Error(`Smart contract read failed: ${error.message}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
131
|
+
async deploySC(params) {
|
|
132
|
+
try {
|
|
133
|
+
const deployParams = {
|
|
134
|
+
bytecode: Array.from(params.byteCode),
|
|
135
|
+
};
|
|
136
|
+
if (params.parameter) {
|
|
137
|
+
deployParams.args = Array.from(params.parameter instanceof Uint8Array
|
|
138
|
+
? params.parameter
|
|
139
|
+
: params.parameter.serialize());
|
|
140
|
+
}
|
|
141
|
+
if (params.coins) {
|
|
142
|
+
deployParams.coins = params.coins.toString();
|
|
143
|
+
}
|
|
144
|
+
if (params.maxGas) {
|
|
145
|
+
deployParams.maxGas = params.maxGas.toString();
|
|
146
|
+
}
|
|
147
|
+
if (params.fee) {
|
|
148
|
+
deployParams.fee = params.fee.toString();
|
|
149
|
+
}
|
|
150
|
+
if (params.maxCoins) {
|
|
151
|
+
deployParams.fee = params.maxCoins.toString();
|
|
152
|
+
}
|
|
153
|
+
const { operationId } = await deploySC(this.provider, deployParams);
|
|
154
|
+
const op = new Operation(this, operationId);
|
|
155
|
+
const deployedAddress = await op.getDeployedAddress(params.waitFinalExecution);
|
|
156
|
+
return new SmartContract(this, deployedAddress);
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
throw errorHandler(operationType.DeploySC, error);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
async getOperationStatus(opId) {
|
|
163
|
+
const client = await getClient();
|
|
164
|
+
return client.getOperationStatus(opId);
|
|
165
|
+
}
|
|
166
|
+
async getEvents(filter) {
|
|
167
|
+
const client = await getClient();
|
|
168
|
+
return client.getEvents(filter);
|
|
169
|
+
}
|
|
170
|
+
async getNodeStatus() {
|
|
171
|
+
const client = await getClient();
|
|
172
|
+
const status = await client.status();
|
|
173
|
+
return formatNodeStatusObject(status);
|
|
174
|
+
}
|
|
175
|
+
async getStorageKeys(address, filter = new Uint8Array(), final = true) {
|
|
176
|
+
const client = await getClient();
|
|
177
|
+
const filterBytes = typeof filter === 'string' ? strToBytes(filter) : filter;
|
|
178
|
+
return client.getDataStoreKeys(address, filterBytes, final);
|
|
179
|
+
}
|
|
180
|
+
async readStorage(address, keys, final = true) {
|
|
181
|
+
const client = await getClient();
|
|
182
|
+
const entries = keys.map((key) => ({
|
|
183
|
+
key,
|
|
184
|
+
address,
|
|
185
|
+
}));
|
|
186
|
+
return client.getDatastoreEntries(entries, final);
|
|
187
|
+
}
|
|
188
|
+
executeSC() {
|
|
189
|
+
throw new Error('Method not implemented.');
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=MetamaskAccount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetamaskAccount.js","sourceRoot":"","sources":["../../../src/metamaskSnap/MetamaskAccount.ts"],"names":[],"mappings":"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","sourcesContent":["import { MetaMaskInpageProvider } from '@metamask/providers';\nimport {\n Address,\n CallSCParams,\n DatastoreEntry,\n DeploySCParams,\n EventFilter,\n formatNodeStatusObject,\n MAX_GAS_CALL,\n Network,\n NodeStatusInfo,\n Operation,\n OperationOptions,\n OperationStatus,\n Provider,\n ReadSCData,\n ReadSCParams,\n SignedData,\n SmartContract,\n strToBytes,\n rpcTypes,\n} from '@massalabs/massa-web3';\nimport { WalletName } from '../wallet';\nimport { errorHandler } from '../errors/utils/errorHandler';\nimport { operationType } from '../utils/constants';\nimport { getClient, networkInfos } from '../massaStation/utils/network';\nimport {\n buyRolls,\n callSC,\n deploySC,\n getBalance,\n sellRolls,\n signMessage,\n transfer,\n} from './services';\nimport type {\n BuyRollsParams,\n SellRollsParams,\n TransferParams,\n CallSCParams as MMCallSCParams,\n DeploySCParams as MMDeploySCParams,\n} from '@massalabs/metamask-snap';\n\nexport class MetamaskAccount implements Provider {\n constructor(\n public readonly address: string,\n private readonly provider: MetaMaskInpageProvider,\n ) {}\n\n get accountName(): string {\n return this.address;\n }\n\n get providerName(): string {\n return WalletName.Metamask;\n }\n\n async balance(final = false): Promise<bigint> {\n const { finalBalance, candidateBalance } = await getBalance(this.provider, {\n address: this.address,\n });\n return BigInt(final ? finalBalance : candidateBalance);\n }\n\n async networkInfos(): Promise<Network> {\n return networkInfos();\n }\n\n async sign(inData: Uint8Array | string): Promise<SignedData> {\n try {\n const data = typeof inData === 'string' ? inData : Array.from(inData);\n const { publicKey, signature } = await signMessage(this.provider, {\n data,\n });\n\n return {\n publicKey,\n signature,\n };\n } catch (error) {\n throw errorHandler(operationType.Sign, error);\n }\n }\n\n private async handleRollOperation(\n operation: 'buy' | 'sell',\n amount: bigint,\n opts?: OperationOptions,\n ): Promise<Operation> {\n try {\n const params: BuyRollsParams | SellRollsParams = {\n amount: amount.toString(),\n };\n if (opts?.fee) {\n params.fee = opts?.fee.toString();\n }\n\n const { operationId } = await (operation === 'buy'\n ? buyRolls(this.provider, params)\n : sellRolls(this.provider, params));\n\n return new Operation(this, operationId);\n } catch (error) {\n throw errorHandler(\n operation === 'buy' ? operationType.BuyRolls : operationType.SellRolls,\n error,\n );\n }\n }\n\n async buyRolls(amount: bigint, opts?: OperationOptions): Promise<Operation> {\n return this.handleRollOperation('buy', amount, opts);\n }\n\n async sellRolls(amount: bigint, opts?: OperationOptions): Promise<Operation> {\n return this.handleRollOperation('sell', amount, opts);\n }\n\n async transfer(\n to: Address | string,\n amount: bigint,\n opts?: OperationOptions,\n ): Promise<Operation> {\n try {\n const params: TransferParams = {\n amount: amount.toString(),\n recipientAddress: to.toString(),\n };\n if (opts?.fee) {\n params.fee = opts?.fee.toString();\n }\n const { operationId } = await transfer(this.provider, params);\n\n return new Operation(this, operationId);\n } catch (error) {\n throw errorHandler(operationType.SendTransaction, error);\n }\n }\n\n async callSC(params: CallSCParams): Promise<Operation> {\n try {\n const callSCparams: MMCallSCParams = {\n functionName: params.func,\n at: params.target,\n };\n if (params.parameter) {\n callSCparams.args =\n params.parameter instanceof Uint8Array\n ? Array.from(params.parameter)\n : Array.from(params.parameter.serialize());\n }\n if (params.coins) {\n callSCparams.coins = params.coins.toString();\n }\n if (params.maxGas) {\n callSCparams.maxGas = params.maxGas.toString();\n }\n if (params.fee) {\n callSCparams.fee = params.fee.toString();\n }\n\n const { operationId } = await callSC(this.provider, callSCparams);\n\n return new Operation(this, operationId);\n } catch (error) {\n throw errorHandler(operationType.CallSC, error);\n }\n }\n\n async readSC(params: ReadSCParams): Promise<ReadSCData> {\n if (params?.maxGas > MAX_GAS_CALL) {\n throw new Error(\n `Gas amount ${params.maxGas} exceeds the maximum allowed ${MAX_GAS_CALL}`,\n );\n }\n try {\n const args = params.parameter ?? new Uint8Array();\n const parameter =\n args instanceof Uint8Array ? args : Uint8Array.from(args.serialize());\n\n const client = await getClient();\n const readOnlyParams = {\n ...params,\n caller: params.caller ?? this.address,\n parameter,\n };\n return client.executeReadOnlyCall(readOnlyParams);\n } catch (error) {\n throw new Error(`Smart contract read failed: ${error.message}`);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n async deploySC(params: DeploySCParams): Promise<SmartContract> {\n try {\n const deployParams: MMDeploySCParams = {\n bytecode: Array.from(params.byteCode),\n };\n if (params.parameter) {\n deployParams.args = Array.from(\n params.parameter instanceof Uint8Array\n ? params.parameter\n : params.parameter.serialize(),\n );\n }\n if (params.coins) {\n deployParams.coins = params.coins.toString();\n }\n if (params.maxGas) {\n deployParams.maxGas = params.maxGas.toString();\n }\n if (params.fee) {\n deployParams.fee = params.fee.toString();\n }\n if (params.maxCoins) {\n deployParams.fee = params.maxCoins.toString();\n }\n\n const { operationId } = await deploySC(this.provider, deployParams);\n const op = new Operation(this, operationId);\n const deployedAddress = await op.getDeployedAddress(\n params.waitFinalExecution,\n );\n\n return new SmartContract(this, deployedAddress);\n } catch (error) {\n throw errorHandler(operationType.DeploySC, error);\n }\n }\n\n async getOperationStatus(opId: string): Promise<OperationStatus> {\n const client = await getClient();\n return client.getOperationStatus(opId);\n }\n\n async getEvents(filter: EventFilter): Promise<rpcTypes.OutputEvents> {\n const client = await getClient();\n return client.getEvents(filter);\n }\n\n async getNodeStatus(): Promise<NodeStatusInfo> {\n const client = await getClient();\n const status = await client.status();\n return formatNodeStatusObject(status);\n }\n\n async getStorageKeys(\n address: string,\n filter: Uint8Array | string = new Uint8Array(),\n final = true,\n ): Promise<Uint8Array[]> {\n const client = await getClient();\n const filterBytes =\n typeof filter === 'string' ? strToBytes(filter) : filter;\n return client.getDataStoreKeys(address, filterBytes, final);\n }\n\n async readStorage(\n address: string,\n keys: Uint8Array[] | string[],\n final = true,\n ): Promise<Uint8Array[]> {\n const client = await getClient();\n const entries: DatastoreEntry[] = keys.map((key) => ({\n key,\n address,\n }));\n return client.getDatastoreEntries(entries, final);\n }\n\n executeSC(): Promise<Operation> {\n throw new Error('Method not implemented.');\n }\n}\n"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Wallet } from '../wallet/interface';
|
|
2
|
+
import { Network, Provider } from '@massalabs/massa-web3';
|
|
3
|
+
import { WalletName } from '../wallet';
|
|
4
|
+
import { MetamaskAccount } from './MetamaskAccount';
|
|
5
|
+
import { MetaMaskInpageProvider } from '@metamask/providers';
|
|
6
|
+
export declare class MetamaskWallet implements Wallet {
|
|
7
|
+
private walletName;
|
|
8
|
+
private metamaskProvider;
|
|
9
|
+
private eventsListener;
|
|
10
|
+
private currentNetwork;
|
|
11
|
+
name(): WalletName;
|
|
12
|
+
constructor(provider: MetaMaskInpageProvider);
|
|
13
|
+
static createIfInstalled(): Promise<Wallet | null>;
|
|
14
|
+
accounts(): Promise<MetamaskAccount[]>;
|
|
15
|
+
importAccount(): Promise<void>;
|
|
16
|
+
deleteAccount(): Promise<void>;
|
|
17
|
+
networkInfos(): Promise<Network>;
|
|
18
|
+
/**
|
|
19
|
+
* Sets the RPC URL for the MetaMask provider.
|
|
20
|
+
*
|
|
21
|
+
* @param url - The new RPC URL.
|
|
22
|
+
* @returns A promise that resolves when the RPC URL is updated.
|
|
23
|
+
*/
|
|
24
|
+
setRpcUrl(url: string): Promise<void>;
|
|
25
|
+
generateNewAccount(): Promise<Provider>;
|
|
26
|
+
listenAccountChanges(): {
|
|
27
|
+
unsubscribe: () => void;
|
|
28
|
+
} | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Subscribes to network changes.
|
|
31
|
+
*
|
|
32
|
+
* @param callback - Callback function called when the network changes.
|
|
33
|
+
* @returns An object with an `unsubscribe` method to stop listening.
|
|
34
|
+
* @remarks Periodically checks for network changes every 500ms.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const observer = await provider.listenNetworkChanges((network) => {
|
|
39
|
+
* console.log(network);
|
|
40
|
+
* });
|
|
41
|
+
* observer.unsubscribe();
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
listenNetworkChanges(callback: (network: Network) => void): {
|
|
45
|
+
unsubscribe: () => void;
|
|
46
|
+
} | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Connects to MetaMask and ensures it is unlocked and ready.
|
|
49
|
+
*
|
|
50
|
+
* @returns A promise that resolves to `true` if connected successfully, otherwise `false`.
|
|
51
|
+
*/
|
|
52
|
+
connect(): Promise<boolean>;
|
|
53
|
+
disconnect(): Promise<boolean>;
|
|
54
|
+
connected(): Promise<boolean>;
|
|
55
|
+
enabled(): boolean;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=MetamaskWallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetamaskWallet.d.ts","sourceRoot":"","sources":["../../../src/metamaskSnap/MetamaskWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAGL,OAAO,EACP,QAAQ,EACT,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAM7D,qBAAa,cAAe,YAAW,MAAM;IAC3C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,cAAc,CAAU;IAEzB,IAAI,IAAI,UAAU;gBAIN,QAAQ,EAAE,sBAAsB;WAItC,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAY3C,QAAQ,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAKtC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAW7C;;;;;OAKG;IACU,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,kBAAkB,IAAI,OAAO,CAAC,QAAQ,CAAC;IAI7C,oBAAoB,IAAI;QAAE,WAAW,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,SAAS;IAMtE;;;;;;;;;;;;;;OAcG;IACI,oBAAoB,CACzB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GACnC;QAAE,WAAW,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,SAAS;IA2B1C;;;;OAIG;IACU,OAAO;IAaP,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAIpC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAI7B,OAAO,IAAI,OAAO;CAG1B"}
|