@massalabs/wallet-provider 3.1.2-dev.20250207102809 → 3.1.2-dev.20250210094130

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.
@@ -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;AAEH,wBAAgB,YAAY,IAAI,MAAM,CAOrC;AAMD;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,MAAM;IAC/C,OAAO,CAAC,UAAU,CAA0B;IAE5C,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"}
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;AAIvC;;GAEG;AACH,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAE1D;;GAEG;AAEH,wBAAgB,YAAY,IAAI,MAAM,CAMrC;AAMD;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,MAAM;IAC/C,OAAO,CAAC,UAAU,CAA0B;IAE5C,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"}
@@ -5,6 +5,7 @@ import { EventEmitter } from 'eventemitter3';
5
5
  import { networkInfos } from './utils/network';
6
6
  import { WalletName } from '../wallet';
7
7
  import { isMassaWalletEnabled } from './MassaStationDiscovery';
8
+ import { isStandalone } from './utils/standalone';
8
9
  /**
9
10
  * MassaStation url
10
11
  */
@@ -14,8 +15,7 @@ export const MASSA_STATION_URL = 'https://station.massa/';
14
15
  */
15
16
  export function walletApiUrl() {
16
17
  // This is a hack to detect that MS wallet is working in standalone mode
17
- // dev only usage
18
- if (typeof window !== 'undefined' && window.massaWallet?.standalone) {
18
+ if (isStandalone()) {
19
19
  return `http://localhost:8080/api`;
20
20
  }
21
21
  return `${MASSA_STATION_URL}plugin/massa-labs/massa-wallet/api`;
@@ -37,7 +37,7 @@ export class MassaStationWallet {
37
37
  return this.walletName;
38
38
  }
39
39
  static async createIfInstalled() {
40
- if (await isMassaWalletEnabled()) {
40
+ if (isStandalone() || (await isMassaWalletEnabled())) {
41
41
  return new MassaStationWallet();
42
42
  }
43
43
  return null;
@@ -1 +1 @@
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 */\n\nexport function walletApiUrl(): string {\n // This is a hack to detect that MS wallet is working in standalone mode\n // dev only usage\n if (typeof window !== 'undefined' && window.massaWallet?.standalone) {\n return `http://localhost:8080/api`;\n }\n return `${MASSA_STATION_URL}plugin/massa-labs/massa-wallet/api`;\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.MassaWallet;\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>(walletApiUrl() + '/accounts');\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(walletApiUrl() + '/accounts', {\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 walletApiUrl() + '/accounts',\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 `${walletApiUrl()}/accounts/${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 walletApiUrl() + '/accounts/' + 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"]}
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';\nimport { isStandalone } from './utils/standalone';\n\n/**\n * MassaStation url\n */\nexport const MASSA_STATION_URL = 'https://station.massa/';\n\n/**\n * The MassaStation accounts url\n */\n\nexport function walletApiUrl(): string {\n // This is a hack to detect that MS wallet is working in standalone mode\n if (isStandalone()) {\n return `http://localhost:8080/api`;\n }\n return `${MASSA_STATION_URL}plugin/massa-labs/massa-wallet/api`;\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.MassaWallet;\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 (isStandalone() || (await isMassaWalletEnabled())) {\n return new MassaStationWallet();\n }\n return null;\n }\n\n public async accounts(): Promise<MassaStationAccount[]> {\n const res = await getRequest<MSAccountsResp>(walletApiUrl() + '/accounts');\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(walletApiUrl() + '/accounts', {\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 walletApiUrl() + '/accounts',\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 `${walletApiUrl()}/accounts/${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 walletApiUrl() + '/accounts/' + 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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../../src/massaStation/utils/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAU/D,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAkBrD;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAMxD"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../../src/massaStation/utils/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EACb,OAAO,EAGR,MAAM,uBAAuB,CAAC;AAW/B,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CA6BrD;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC,CAMxD"}
@@ -1,11 +1,22 @@
1
- import { JsonRPCClient } from '@massalabs/massa-web3';
1
+ import { CHAIN_ID, JsonRPCClient, NetworkName, PublicApiUrl, } from '@massalabs/massa-web3';
2
2
  import { MASSA_STATION_URL } from '../MassaStationWallet';
3
3
  import { getRequest } from '../RequestHandler';
4
+ import { isStandalone } from './standalone';
4
5
  // Use client singleton to benefit from caching
5
6
  let client;
6
7
  // Use rpcUrl to check if node has changed
7
8
  let rpcUrl;
8
9
  export async function networkInfos() {
10
+ if (isStandalone()) {
11
+ rpcUrl = PublicApiUrl.Buildnet;
12
+ client = new JsonRPCClient(rpcUrl);
13
+ return {
14
+ name: NetworkName.Buildnet,
15
+ url: rpcUrl,
16
+ chainId: CHAIN_ID.Buildnet,
17
+ minimalFee: await client.getMinimalFee(),
18
+ };
19
+ }
9
20
  const nodesResponse = await getRequest(`${MASSA_STATION_URL}massa/node`);
10
21
  if (nodesResponse.isError)
11
22
  throw nodesResponse.error.message;
@@ -1 +1 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../../../src/massaStation/utils/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAW,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,+CAA+C;AAC/C,IAAI,MAAqB,CAAC;AAC1B,0CAA0C;AAC1C,IAAI,MAAc,CAAC;AAEnB,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,aAAa,GAAG,MAAM,UAAU,CACpC,GAAG,iBAAiB,YAAY,CACjC,CAAC;IACF,IAAI,aAAa,CAAC,OAAO;QAAE,MAAM,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;IAE7D,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;IACrC,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG,EAAE;QAC7B,MAAM,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,CAAC;KACd;IAED,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO;QAClC,GAAG;QACH,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7C,UAAU,EAAE,MAAM,MAAM,CAAC,aAAa,EAAE;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC,MAAM,EAAE;QACX,yBAAyB;QACzB,MAAM,YAAY,EAAE,CAAC;KACtB;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { JsonRPCClient, Network } from '@massalabs/massa-web3';\nimport { MSNetworksResp } from '../types';\nimport { MASSA_STATION_URL } from '../MassaStationWallet';\nimport { getRequest } from '../RequestHandler';\n\n// Use client singleton to benefit from caching\nlet client: JsonRPCClient;\n// Use rpcUrl to check if node has changed\nlet rpcUrl: string;\n\nexport async function networkInfos(): Promise<Network> {\n const nodesResponse = await getRequest<MSNetworksResp>(\n `${MASSA_STATION_URL}massa/node`,\n );\n if (nodesResponse.isError) throw nodesResponse.error.message;\n\n const url = nodesResponse.result.url;\n if (!client || rpcUrl !== url) {\n client = new JsonRPCClient(url);\n rpcUrl = url;\n }\n\n return {\n name: nodesResponse.result.network,\n url,\n chainId: BigInt(nodesResponse.result.chainId),\n minimalFee: await client.getMinimalFee(),\n };\n}\n\nexport async function getClient(): Promise<JsonRPCClient> {\n if (!client) {\n // this initialize client\n await networkInfos();\n }\n return client;\n}\n"]}
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../../../src/massaStation/utils/network.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,aAAa,EAEb,WAAW,EACX,YAAY,GACb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,+CAA+C;AAC/C,IAAI,MAAqB,CAAC;AAC1B,0CAA0C;AAC1C,IAAI,MAAc,CAAC;AAEnB,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,YAAY,EAAE,EAAE;QAClB,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC;QAC/B,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,WAAW,CAAC,QAAQ;YAC1B,GAAG,EAAE,MAAM;YACX,OAAO,EAAE,QAAQ,CAAC,QAAQ;YAC1B,UAAU,EAAE,MAAM,MAAM,CAAC,aAAa,EAAE;SACzC,CAAC;KACH;IAED,MAAM,aAAa,GAAG,MAAM,UAAU,CACpC,GAAG,iBAAiB,YAAY,CACjC,CAAC;IACF,IAAI,aAAa,CAAC,OAAO;QAAE,MAAM,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC;IAE7D,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;IACrC,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG,EAAE;QAC7B,MAAM,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,CAAC;KACd;IAED,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,OAAO;QAClC,GAAG;QACH,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7C,UAAU,EAAE,MAAM,MAAM,CAAC,aAAa,EAAE;KACzC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC,MAAM,EAAE;QACX,yBAAyB;QACzB,MAAM,YAAY,EAAE,CAAC;KACtB;IACD,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import {\n CHAIN_ID,\n JsonRPCClient,\n Network,\n NetworkName,\n PublicApiUrl,\n} from '@massalabs/massa-web3';\nimport { MSNetworksResp } from '../types';\nimport { MASSA_STATION_URL } from '../MassaStationWallet';\nimport { getRequest } from '../RequestHandler';\nimport { isStandalone } from './standalone';\n\n// Use client singleton to benefit from caching\nlet client: JsonRPCClient;\n// Use rpcUrl to check if node has changed\nlet rpcUrl: string;\n\nexport async function networkInfos(): Promise<Network> {\n if (isStandalone()) {\n rpcUrl = PublicApiUrl.Buildnet;\n client = new JsonRPCClient(rpcUrl);\n return {\n name: NetworkName.Buildnet,\n url: rpcUrl,\n chainId: CHAIN_ID.Buildnet,\n minimalFee: await client.getMinimalFee(),\n };\n }\n\n const nodesResponse = await getRequest<MSNetworksResp>(\n `${MASSA_STATION_URL}massa/node`,\n );\n if (nodesResponse.isError) throw nodesResponse.error.message;\n\n const url = nodesResponse.result.url;\n if (!client || rpcUrl !== url) {\n client = new JsonRPCClient(url);\n rpcUrl = url;\n }\n\n return {\n name: nodesResponse.result.network,\n url,\n chainId: BigInt(nodesResponse.result.chainId),\n minimalFee: await client.getMinimalFee(),\n };\n}\n\nexport async function getClient(): Promise<JsonRPCClient> {\n if (!client) {\n // this initialize client\n await networkInfos();\n }\n return client;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare function isStandalone(): boolean;
2
+ //# sourceMappingURL=standalone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standalone.d.ts","sourceRoot":"","sources":["../../../../src/massaStation/utils/standalone.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,IAAI,OAAO,CAGtC"}
@@ -0,0 +1,5 @@
1
+ export function isStandalone() {
2
+ // this is eventually set by wallet web-app
3
+ return typeof window !== 'undefined' && window.massaWallet?.standalone;
4
+ }
5
+ //# sourceMappingURL=standalone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../../../src/massaStation/utils/standalone.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY;IAC1B,2CAA2C;IAC3C,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC;AACzE,CAAC","sourcesContent":["export function isStandalone(): boolean {\n // this is eventually set by wallet web-app\n return typeof window !== 'undefined' && window.massaWallet?.standalone;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@massalabs/wallet-provider",
3
- "version": "3.1.2-dev.20250207102809",
3
+ "version": "3.1.2-dev.20250210094130",
4
4
  "description": "massa's wallet provider",
5
5
  "main": "dist/esm/index.js",
6
6
  "module": "dist/esm/index.js",